1use teia::complex::Complex;
2use teia::indexed_vec::IndexedVec;
3use teia::pair::Pair;
4use teia::simplex;
5use teia::simplex::Simplex;
6use teia::traits::*;
7use teia::z2reduce::Z2ColumnReduce;
8use teia::z2vector::*;
9
10fn main() {
11 println!("# All-in-one complex example");
12 let mut comp: Complex<IndexedVec<_>, _> = Complex::new();
13
14 comp.push(simplex![0]).unwrap();
15 comp.push(simplex![1]).unwrap();
16 comp.push(simplex![2]).unwrap();
17 comp.push(simplex![0, 1]).unwrap();
18 comp.push(simplex![0, 2]).unwrap();
19 comp.push(simplex![1, 2]).unwrap();
20 comp.push(simplex![0, 1, 2]).unwrap();
21
22 println!("");
23 println!("## Complex::boundaries()");
24 for chain in comp.boundaries::<Z2VectorVec>() {
25 println!("{:?}", chain);
26 }
27
28 println!("");
29
30 let reduce =
32 Z2ColumnReduce::<Z2Chain<Z2VectorVec>>::from_complex_with(&comp, |index, image| {
33 Z2Chain::new(index, image)
34 })
35 .unwrap();
36
37 println!("{:?}", reduce);
38 println!("");
39
40 println!("## cycles");
41 for c in reduce.cycles() {
42 println!("{:?}", c);
43 }
44 println!("");
45
46 println!("## Z2Pair");
47 for pers in Pair::new(&reduce, reduce.cycles()) {
48 println!("{:?}", pers);
49 }
50
51 println!("");
52
53 println!("# Separated complex example");
54
55 let mut comp0 = Complex::<IndexedVec<_>, Simplex>::new();
56 comp0.push(simplex![0]).unwrap();
57 comp0.push(simplex![1]).unwrap();
58 comp0.push(simplex![2]).unwrap();
59 comp0.push(simplex![3]).unwrap();
60
61 let mut comp1 = Complex::<IndexedVec<_>, Simplex>::with_prev(&comp0);
62 comp1.push(simplex![0, 1]).unwrap();
63 comp1.push(simplex![0, 2]).unwrap();
64 comp1.push(simplex![0, 3]).unwrap();
65 comp1.push(simplex![1, 2]).unwrap();
66 comp1.push(simplex![1, 3]).unwrap();
67 comp1.push(simplex![2, 3]).unwrap();
68
69 let mut comp2 = Complex::<IndexedVec<_>, Simplex>::with_prev(&comp1);
70 comp2.push(simplex![0, 1, 2]).unwrap();
71 comp2.push(simplex![0, 1, 3]).unwrap();
72 comp2.push(simplex![0, 2, 3]).unwrap();
73 comp2.push(simplex![1, 2, 3]).unwrap();
74
75 println!("");
76 println!("## Complex 0");
77 for simp in comp0.basis.iter() {
78 println!("{:?}", simp);
79 }
80
81 println!("");
82 println!("## Complex 1");
83 for simp in comp1.basis.iter() {
84 println!("{:?}", simp);
85 }
86
87 println!("");
88 println!("## Complex 2");
89 for simp in comp2.basis.iter() {
90 println!("{:?}", simp);
91 }
92
93 println!("");
94 println!("## Complex 1's boundaries from complex 0");
95 for chain in comp1.boundaries_from::<Z2VectorVec, _>(&comp0) {
96 println!("{:?}", chain);
97 }
98
99 println!("");
100 println!("## Complex 2's boundaries from complex 1");
101 for chain in comp2.boundaries_from::<Z2VectorVec, _>(&comp1) {
102 println!("{:?}", chain);
103 }
104
105 println!("");
106
107 let reduce0 = Z2ColumnReduce::<Z2VectorVec>::from_complex(&comp0).unwrap();
108
109 println!("{:?}", reduce0);
110
111 let reduce1 = Z2ColumnReduce::<Z2VectorVec>::from_complexes(&comp1, &comp0).unwrap();
112
113 println!("{:?}", reduce1);
114
115 let reduce2 = Z2ColumnReduce::<Z2VectorVec>::from_complexes(&comp2, &comp1).unwrap();
116
117 println!("{:?}", reduce2);
118
119 println!("");
120 println!("## pairing of dim0 and dim1");
121 let cycles0 = reduce0.into_cycles();
122 for pers in Pair::new(&reduce1, cycles0.iter()) {
123 println!(" {:?}", pers);
124 }
125
126 println!("");
127 println!("## pairing of dim1 and dim2");
128 let cycles1 = reduce1.into_cycles();
129 for pers in Pair::new(&reduce2, cycles1.iter()) {
130 println!(" {:?}", pers);
131 }
132
133 println!("");
134 println!("## cycles of dim2");
135 for pers in Pair::new(&reduce2, reduce2.cycles()) {
136 println!(" {:?}", pers);
137 }
138}