119{
120 const size_t n = i.index();
121 const std::pair<size_t, size_t> u = *i;
123
124
125
126
127
128 mDifferential[n]->interchange_rows(u.first,
mBetti[n] - 1);
129 if (0 < n) mDifferential[n - 1]->interchange_columns(u.first,
mBetti[n] - 1);
130 if (trace) mMorphisms[n]->interchange_columns(u.first,
mBetti[n] - 1);
131
132 mDifferential[n]->interchange_columns(u.second,
mBetti[n + 1] - 1);
133 if (n < mDifferential.size() - 1)
134 mDifferential[n + 1]->interchange_rows(u.second,
mBetti[n + 1] - 1);
135 if (trace)
136 mMorphisms[n + 1]->interchange_columns(u.second,
mBetti[n + 1] - 1);
137
139 mDifferential[n]->get_entry(
mBetti[n] - 1,
mBetti[n + 1] - 1,
p);
142
143 for (
size_t r = 0; r <
mBetti[n] - 1; ++r)
144 {
145 mDifferential[n]->get_entry(r,
mBetti[n + 1] - 1, f);
146 mDifferential[n]->row_op(r,
mRing->mult(f, q),
mBetti[n] - 1);
147 if (0 < n)
148 mDifferential[n - 1]->column_op(
mBetti[n] - 1,
mRing->mult(f,
p), r);
149 if (trace) mMorphisms[n]->column_op(
mBetti[n] - 1,
mRing->mult(f,
p), r);
150 }
151
152 for (
size_t c = 0; c <
mBetti[n + 1] - 1; ++c)
153 {
154 mDifferential[n]->get_entry(
mBetti[n] - 1, c, f);
155 mDifferential[n]->column_op(c,
mRing->mult(f, q),
mBetti[n + 1] - 1);
156 if (n < mDifferential.size() - 1)
157 mDifferential[n + 1]->row_op(
mBetti[n + 1] - 1,
mRing->mult(f,
p), c);
158 if (trace)
159 mMorphisms[n + 1]->column_op(c,
mRing->mult(f, q),
mBetti[n + 1] - 1);
160 }
163}
std::vector< size_t > mBetti
#define FLAG_TRACE_MORPHISMS