Register a new equality vc=[(v, c), ..] with traceback dependency dep.
(self, vc: list[tuple[str, float]], dep: pr.Dependency)
| 337 | return True |
| 338 | |
| 339 | def register(self, vc: list[tuple[str, float]], dep: pr.Dependency) -> None: |
| 340 | """Register a new equality vc=[(v, c), ..] with traceback dependency dep.""" |
| 341 | result = plus_all(*[{v: c} for v, c in vc]) |
| 342 | if is_zero(result): |
| 343 | return |
| 344 | |
| 345 | vs, _ = zip(*vc) |
| 346 | for v in vs: |
| 347 | if v not in self.v2i: |
| 348 | self.v2i[v] = len(self.v2i) |
| 349 | |
| 350 | (m, n), l = self.A.shape, len(self.v2i) |
| 351 | if l > m: |
| 352 | self.A = np.concatenate([self.A, np.zeros([l - m, n])], 0) |
| 353 | |
| 354 | new_column = np.zeros([len(self.v2i), 2]) # N, 2 |
| 355 | for v, c in vc: |
| 356 | new_column[self.v2i[v], 0] += float(c) |
| 357 | new_column[self.v2i[v], 1] -= float(c) |
| 358 | |
| 359 | self.A = np.concatenate([self.A, new_column], 1) |
| 360 | self.c += [1.0, -1.0] |
| 361 | self.deps += [dep] |
| 362 | |
| 363 | def register2( |
| 364 | self, a: str, b: str, m: float, n: float, dep: pr.Dependency |