MCPcopy Create free account
hub / github.com/google-deepmind/alphageometry / Table

Class Table

ar.py:273–523  ·  view source on GitHub ↗

The coefficient matrix.

Source from the content-addressed store, hash-verified

271
272
273class Table:
274 """The coefficient matrix."""
275
276 def __init__(self, const: str = '1'):
277 self.const = const
278 self.v2e = {}
279 self.add_free(const) # the table {var: expression}
280
281 # to cache what is already derived/inputted
282 self.eqs = set()
283 self.groups = [] # groups of equal pairs.
284
285 # for why (linprog)
286 self.c = []
287 self.v2i = {} # v -> index of row in A.
288 self.deps = [] # equal number of columns.
289 self.A = np.zeros([0, 0]) # pylint: disable=invalid-name
290 self.do_why = True
291
292 def add_free(self, v: str) -> None:
293 self.v2e[v] = {v: frac(1)}
294
295 def replace(self, v0: str, e0: dict[str, float]) -> None:
296 for v, e in list(self.v2e.items()):
297 self.v2e[v] = replace(e, v0, e0)
298
299 def add_expr(self, vc: list[tuple[str, float]]) -> bool:
300 """Add a new equality, represented by the list of tuples vc=[(v, c), ..]."""
301 result = {}
302 free = []
303
304 for v, c in vc:
305 c = frac(c)
306 if v in self.v2e:
307 result = plus(result, mult(self.v2e[v], c))
308 else:
309 free += [(v, c)]
310
311 if free == []: # pylint: disable=g-explicit-bool-comparison
312 if is_zero(self.modulo(result)):
313 return False
314 result = recon(result, self.const)
315 if result is None:
316 return False
317 v, e = result
318 self.replace(v, e)
319
320 elif len(free) == 1:
321 v, m = free[0]
322 self.v2e[v] = mult(result, frac(-1, m))
323
324 else:
325 dependent_v = None
326 for v, m in free:
327 if dependent_v is None and v != self.const:
328 dependent_v = (v, m)
329 continue
330

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected