egglog 4.0.1__cp311-none-win_amd64.whl → 5.0.0__cp311-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of egglog might be problematic. Click here for more details.

Binary file
egglog/declarations.py CHANGED
@@ -269,7 +269,7 @@ class ModuleDeclarations:
269
269
  return decls.get_egg_fn(ref)
270
270
  except KeyError:
271
271
  pass
272
- raise KeyError(f"Callable ref {ref} not found")
272
+ raise KeyError(f"Callable ref {ref!r} not found")
273
273
 
274
274
  def get_egg_sort(self, ref: JustTypeRef) -> str:
275
275
  for decls in self.all_decls:
@@ -770,9 +770,6 @@ class CallDecl:
770
770
  if self in context.names:
771
771
  return context.names[self]
772
772
  ref, args = self.callable, [a.expr for a in self.args]
773
- # Special case != since it doesn't have a decl
774
- if isinstance(ref, MethodRef) and ref.method_name == "__ne__":
775
- return f"{args[0].pretty(context)} != {args[1].pretty(context)}"
776
773
  function_decl = context.mod_decls.get_function_decl(ref)
777
774
  # Determine how many of the last arguments are defaults, by iterating from the end and comparing the arg with the default
778
775
  n_defaults = 0
egglog/egraph.py CHANGED
@@ -54,6 +54,7 @@ __all__ = [
54
54
  "rewrite",
55
55
  "birewrite",
56
56
  "eq",
57
+ "ne",
57
58
  "panic",
58
59
  "let",
59
60
  "delete",
@@ -258,8 +259,6 @@ class _BaseModule(ABC):
258
259
  unextractable=unextractable,
259
260
  )
260
261
 
261
- # Register != as a method so we can print it as a string
262
- self._mod_decls._decl.register_callable_ref(MethodRef(cls_name, "__ne__"), "!=")
263
262
  return RuntimeClass(self._mod_decls, cls_name)
264
263
 
265
264
  # We seperate the function and method overloads to make it simpler to know if we are modifying a function or method,
@@ -663,6 +662,8 @@ class _Builtins(_BaseModule):
663
662
  msg = "Builtins already initialized"
664
663
  raise RuntimeError(msg)
665
664
  _BUILTIN_DECLS = self._mod_decls._decl
665
+ # Register != operator
666
+ _BUILTIN_DECLS.register_callable_ref(FunctionRef("!="), "!=")
666
667
 
667
668
  def _process_commands(self, cmds: Iterable[bindings._Command]) -> None:
668
669
  """
@@ -1152,22 +1153,10 @@ class Expr(metaclass=_ExprMetaclass):
1152
1153
  Expression base class, which adds suport for != to all expression types.
1153
1154
  """
1154
1155
 
1155
- def __ne__(self: EXPR, other_expr: EXPR) -> Unit: # type: ignore[override, empty-body]
1156
- """
1157
- Compare whether to expressions are not equal.
1158
-
1159
- :param self: The expression to compare.
1160
- :param other_expr: The other expression to compare to, which must be of the same type.
1161
- :meta public:
1162
- """
1156
+ def __ne__(self, other: NoReturn) -> NoReturn: # type: ignore[override, empty-body]
1163
1157
  ...
1164
1158
 
1165
1159
  def __eq__(self, other: NoReturn) -> NoReturn: # type: ignore[override, empty-body]
1166
- """
1167
- Equality is currently not supported.
1168
-
1169
- We only add this method so that if you try to use it MyPy will warn you.
1170
- """
1171
1160
  ...
1172
1161
 
1173
1162
 
@@ -1492,6 +1481,11 @@ def eq(expr: EXPR) -> _EqBuilder[EXPR]:
1492
1481
  return _EqBuilder(expr)
1493
1482
 
1494
1483
 
1484
+ def ne(expr: EXPR) -> _NeBuilder[EXPR]:
1485
+ """Check if the given expression is not equal to the given value."""
1486
+ return _NeBuilder(expr)
1487
+
1488
+
1495
1489
  def panic(message: str) -> Action:
1496
1490
  """Raise an error with the given message."""
1497
1491
  return Panic(message)
@@ -1596,6 +1590,30 @@ class _EqBuilder(Generic[EXPR]):
1596
1590
  return f"eq({self.expr})"
1597
1591
 
1598
1592
 
1593
+ @dataclass
1594
+ class _NeBuilder(Generic[EXPR]):
1595
+ expr: EXPR
1596
+
1597
+ def to(self, expr: EXPR) -> Unit:
1598
+ l_expr = cast(RuntimeExpr, self.expr)
1599
+ return cast(
1600
+ Unit,
1601
+ RuntimeExpr(
1602
+ BUILTINS._mod_decls,
1603
+ TypedExprDecl(
1604
+ JustTypeRef("Unit"),
1605
+ CallDecl(
1606
+ FunctionRef("!="),
1607
+ (l_expr.__egg_typed_expr__, convert_to_same_type(expr, l_expr).__egg_typed_expr__),
1608
+ ),
1609
+ ),
1610
+ ),
1611
+ )
1612
+
1613
+ def __str__(self) -> str:
1614
+ return f"ne({self.expr})"
1615
+
1616
+
1599
1617
  @dataclass
1600
1618
  class _SetBuilder(Generic[EXPR]):
1601
1619
  lhs: Expr
egglog/examples/bool.py CHANGED
@@ -13,7 +13,7 @@ egraph = EGraph()
13
13
  egraph.check(eq(T & T).to(T))
14
14
  egraph.check(eq(T & F).to(F))
15
15
  egraph.check(eq(T | F).to(T))
16
- egraph.check((T | F) != F)
16
+ egraph.check(ne(T | F).to(F))
17
17
 
18
18
  egraph.check(eq(i64(1).bool_lt(2)).to(T))
19
19
  egraph.check(eq(i64(2).bool_lt(1)).to(F))
@@ -117,7 +117,7 @@ egraph.register(
117
117
  union(t.eval()).with_(Val(i1 + i2))
118
118
  ),
119
119
  rule(eq(t).to(t1 == t2), eq(t1.eval()).to(t2.eval())).then(union(t.eval()).with_(Val.TRUE)),
120
- rule(eq(t).to(t1 == t2), eq(t1.eval()).to(v1), eq(t2.eval()).to(v2), v1 != v2).then(
120
+ rule(eq(t).to(t1 == t2), eq(t1.eval()).to(v1), eq(t2.eval()).to(v2), ne(v1).to(v2)).then(
121
121
  union(t.eval()).with_(Val.FALSE)
122
122
  ),
123
123
  rule(eq(v).to(t.eval())).then(union(t).with_(Term.val(v))),
@@ -154,12 +154,12 @@ egraph.register(
154
154
  # let-var-same
155
155
  rewrite(let_(x, t, Term.var(x))).to(t),
156
156
  # let-var-diff
157
- rewrite(let_(x, t, Term.var(y))).to(Term.var(y), x != y),
157
+ rewrite(let_(x, t, Term.var(y))).to(Term.var(y), ne(x).to(y)),
158
158
  # let-lam-same
159
159
  rewrite(let_(x, t, lam(x, t1))).to(lam(x, t1)),
160
160
  # let-lam-diff
161
- rewrite(let_(x, t, lam(y, t1))).to(lam(y, let_(x, t, t1)), x != y, eq(fv).to(freer(t)), fv.not_contains(y)),
162
- rule(eq(t).to(let_(x, t1, lam(y, t2))), x != y, eq(fv).to(freer(t1)), fv.contains(y)).then(
161
+ rewrite(let_(x, t, lam(y, t1))).to(lam(y, let_(x, t, t1)), ne(x).to(y), eq(fv).to(freer(t)), fv.not_contains(y)),
162
+ rule(eq(t).to(let_(x, t1, lam(y, t2))), ne(x).to(y), eq(fv).to(freer(t1)), fv.contains(y)).then(
163
163
  union(t).with_(lam(t.v(), let_(x, t1, let_(y, Term.var(t.v()), t2))))
164
164
  ),
165
165
  )
@@ -78,7 +78,7 @@ egraph.register(
78
78
  union(~p0 | (~p1 | (p2 | F))).with_(T),
79
79
  )
80
80
  egraph.run(10)
81
- egraph.check(T != F)
81
+ egraph.check(ne(T).to(F))
82
82
  egraph.check(eq(p0).to(F))
83
83
  egraph.check(eq(p2).to(F))
84
84
  egraph
egglog/exp/array_api.py CHANGED
@@ -278,7 +278,7 @@ class Int(Expr):
278
278
  @array_api_module.register
279
279
  def _int(i: i64, j: i64, r: Boolean, o: Int):
280
280
  yield rewrite(Int(i) == Int(i)).to(TRUE)
281
- yield rule(eq(r).to(Int(i) == Int(j)), i != j).then(union(r).with_(FALSE))
281
+ yield rule(eq(r).to(Int(i) == Int(j)), ne(i).to(j)).then(union(r).with_(FALSE))
282
282
 
283
283
  yield rewrite(Int(i) >= Int(i)).to(TRUE)
284
284
  yield rule(eq(r).to(Int(i) >= Int(j)), i > j).then(union(r).with_(TRUE))
@@ -666,7 +666,7 @@ def _tuple_value(
666
666
  # Includes
667
667
  rewrite(TupleValue.EMPTY.includes(v)).to(FALSE),
668
668
  rewrite(TupleValue(v).includes(v)).to(TRUE),
669
- rewrite(TupleValue(v).includes(v2)).to(FALSE, v != v2),
669
+ rewrite(TupleValue(v).includes(v2)).to(FALSE, ne(v).to(v2)),
670
670
  rewrite((ti + ti2).includes(v)).to(ti.includes(v) | ti2.includes(v)),
671
671
  ]
672
672
 
@@ -1503,7 +1503,7 @@ def _assume_value_one_of(x: NDArray, v: Value, vs: TupleValue, idx: TupleInt):
1503
1503
  def _ndarray_value_isfinite(arr: NDArray, x: Value, xs: TupleValue, i: Int, f: f64, b: Boolean):
1504
1504
  yield rewrite(Value.int(i).isfinite()).to(TRUE)
1505
1505
  yield rewrite(Value.bool(b).isfinite()).to(TRUE)
1506
- yield rewrite(Value.float(Float(f)).isfinite()).to(TRUE, f != f64(math.nan))
1506
+ yield rewrite(Value.float(Float(f)).isfinite()).to(TRUE, ne(f).to(f64(math.nan)))
1507
1507
 
1508
1508
  # a sum of an array is finite if all the values are finite
1509
1509
  yield rewrite(isfinite(sum(arr))).to(NDArray.scalar(Value.bool(arr.index(ALL_INDICES).isfinite())))
@@ -126,7 +126,8 @@ def _float_program(f: Float, g: Float, f64_: f64, i: Int, r: Rational):
126
126
  yield rewrite(float_program(f * g)).to(Program("(") + float_program(f) + " * " + float_program(g) + ")")
127
127
  yield rewrite(float_program(f / g)).to(Program("(") + float_program(f) + " / " + float_program(g) + ")")
128
128
  yield rewrite(float_program(Float.rational(r))).to(
129
- Program("float(") + Program(r.numer.to_string()) + " / " + Program(r.denom.to_string()) + ")", r.denom != i64(1)
129
+ Program("float(") + Program(r.numer.to_string()) + " / " + Program(r.denom.to_string()) + ")",
130
+ ne(r.denom).to(i64(1)),
130
131
  )
131
132
  yield rewrite(float_program(Float.rational(r))).to(
132
133
  Program("float(") + Program(r.numer.to_string()) + ")", eq(r.denom).to(i64(1))
egglog/exp/program_gen.py CHANGED
@@ -182,7 +182,7 @@ def _compile(
182
182
  yield rule(
183
183
  stmt,
184
184
  p.compile(i),
185
- p1.parent != p,
185
+ ne(p1.parent).to(p),
186
186
  eq(s1).to(p1.expr),
187
187
  ).then(
188
188
  set_(p.statements).to(join(s1, "\n")),
@@ -214,7 +214,7 @@ def _compile(
214
214
  # Otherwise, if its not equal to either input, its not an identifier
215
215
  yield rule(program_add, eq(p.expr).to(p1.expr), eq(b).to(p1.is_identifer)).then(set_(p.is_identifer).to(b))
216
216
  yield rule(program_add, eq(p.expr).to(p2.expr), eq(b).to(p2.is_identifer)).then(set_(p.is_identifer).to(b))
217
- yield rule(program_add, p.expr != p1.expr, p.expr != p2.expr).then(set_(p.is_identifer).to(Bool(False)))
217
+ yield rule(program_add, ne(p.expr).to(p1.expr), ne(p.expr).to(p2.expr)).then(set_(p.is_identifer).to(Bool(False)))
218
218
 
219
219
  # Set parent of p1
220
220
  yield rule(program_add, p.compile(i)).then(
@@ -228,7 +228,7 @@ def _compile(
228
228
  yield rule(program_add, p.compile(i), p1.next_sym).then(set_(p2.parent).to(p))
229
229
 
230
230
  # Compile p2, if p1 parent not equal, but p2 parent equal
231
- yield rule(program_add, p.compile(i), p1.parent != p, eq(p2.parent).to(p)).then(p2.compile(i))
231
+ yield rule(program_add, p.compile(i), ne(p1.parent).to(p), eq(p2.parent).to(p)).then(p2.compile(i))
232
232
 
233
233
  # Compile p2, if p1 parent eqal
234
234
  yield rule(program_add, p.compile(i2), eq(p1.parent).to(p), eq(i).to(p1.next_sym), eq(p2.parent).to(p)).then(
@@ -259,8 +259,8 @@ def _compile(
259
259
  yield rule(
260
260
  program_add,
261
261
  p.compile(i),
262
- p1.parent != p,
263
- p2.parent != p,
262
+ ne(p1.parent).to(p),
263
+ ne(p2.parent).to(p),
264
264
  ).then(
265
265
  set_(p.statements).to(String("")),
266
266
  set_(p.next_sym).to(i),
@@ -269,7 +269,7 @@ def _compile(
269
269
  yield rule(
270
270
  program_add,
271
271
  eq(p1.parent).to(p),
272
- p2.parent != p,
272
+ ne(p2.parent).to(p),
273
273
  eq(s1).to(p1.statements),
274
274
  eq(i).to(p1.next_sym),
275
275
  ).then(
@@ -280,7 +280,7 @@ def _compile(
280
280
  yield rule(
281
281
  program_add,
282
282
  eq(p2.parent).to(p),
283
- p1.parent != p,
283
+ ne(p1.parent).to(p),
284
284
  eq(s2).to(p2.statements),
285
285
  eq(i).to(p2.next_sym),
286
286
  ).then(
@@ -319,7 +319,7 @@ def _compile(
319
319
  # 1. b. If p1 parent is not p, then just use assign as statement, next sym of i
320
320
  yield rule(
321
321
  program_assign,
322
- p1.parent != p,
322
+ ne(p1.parent).to(p),
323
323
  p.compile(i),
324
324
  eq(s2).to(p1.expr),
325
325
  eq(p1.is_identifer).to(Bool(False)),
@@ -347,7 +347,7 @@ def _compile(
347
347
  # 1. b. If p1 parent is not p, then just use assign as statement, next sym of i
348
348
  yield rule(
349
349
  program_assign,
350
- p1.parent != p,
350
+ ne(p1.parent).to(p),
351
351
  p.compile(i),
352
352
  eq(s2).to(p1.expr),
353
353
  eq(p1.is_identifer).to(Bool(True)),
egglog/runtime.py CHANGED
@@ -435,15 +435,13 @@ class RuntimeMethod:
435
435
  self.__egg_callable_ref__ = PropertyRef(self.class_name, self.__egg_method_name__)
436
436
  else:
437
437
  self.__egg_callable_ref__ = MethodRef(self.class_name, self.__egg_method_name__)
438
- # Special case for __ne__ which does not have a normal function defintion since
439
- # it relies of type parameters
440
- if self.__egg_method_name__ == "__ne__":
441
- self.__egg_fn_decl__ = None
442
- else:
443
- try:
444
- self.__egg_fn_decl__ = self.__egg_self__.__egg_decls__.get_function_decl(self.__egg_callable_ref__)
445
- except KeyError as e:
446
- raise AttributeError(f"Class {self.class_name} does not have method {self.__egg_method_name__}") from e
438
+ try:
439
+ self.__egg_fn_decl__ = self.__egg_self__.__egg_decls__.get_function_decl(self.__egg_callable_ref__)
440
+ except KeyError as e:
441
+ msg = f"Class {self.class_name} does not have method {self.__egg_method_name__}"
442
+ if self.__egg_method_name__ == "__ne__":
443
+ msg += ". Did you mean to use the ne(...).to(...)?"
444
+ raise AttributeError(msg) from e
447
445
 
448
446
  def __call__(self, *args: object, **kwargs) -> RuntimeExpr | None:
449
447
  args = (self.__egg_self__, *args)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: egglog
3
- Version: 4.0.1
3
+ Version: 5.0.0
4
4
  Classifier: Environment :: MacOS X
5
5
  Classifier: Environment :: Win32 (MS Windows)
6
6
  Classifier: Intended Audience :: Developers
@@ -19,10 +19,11 @@ Classifier: Typing :: Typed
19
19
  Requires-Dist: typing-extensions
20
20
  Requires-Dist: black
21
21
  Requires-Dist: graphviz
22
- Requires-Dist: pytest; extra == 'test'
23
- Requires-Dist: mypy; extra == 'test'
24
- Requires-Dist: syrupy; extra == 'test'
25
- Requires-Dist: egglog[array]; extra == 'test'
22
+ Requires-Dist: pre-commit; extra == 'dev'
23
+ Requires-Dist: ruff; extra == 'dev'
24
+ Requires-Dist: mypy; extra == 'dev'
25
+ Requires-Dist: anywidget[dev]; extra == 'dev'
26
+ Requires-Dist: egglog[docs,test]; extra == 'dev'
26
27
  Requires-Dist: pydata-sphinx-theme; extra == 'docs'
27
28
  Requires-Dist: myst-nb; extra == 'docs'
28
29
  Requires-Dist: sphinx-autodoc-typehints; extra == 'docs'
@@ -35,17 +36,16 @@ Requires-Dist: egglog[array]; extra == 'docs'
35
36
  Requires-Dist: line-profiler; extra == 'docs'
36
37
  Requires-Dist: sphinxcontrib-mermaid; extra == 'docs'
37
38
  Requires-Dist: ablog; extra == 'docs'
38
- Requires-Dist: pre-commit; extra == 'dev'
39
- Requires-Dist: ruff; extra == 'dev'
40
- Requires-Dist: mypy; extra == 'dev'
41
- Requires-Dist: anywidget[dev]; extra == 'dev'
42
- Requires-Dist: egglog[docs,test]; extra == 'dev'
39
+ Requires-Dist: pytest; extra == 'test'
40
+ Requires-Dist: mypy; extra == 'test'
41
+ Requires-Dist: syrupy; extra == 'test'
42
+ Requires-Dist: egglog[array]; extra == 'test'
43
43
  Requires-Dist: scikit-learn; extra == 'array'
44
44
  Requires-Dist: array_api_compat; extra == 'array'
45
45
  Requires-Dist: numba; (python_version<"3.12") and extra == 'array'
46
- Provides-Extra: test
47
- Provides-Extra: docs
48
46
  Provides-Extra: dev
47
+ Provides-Extra: docs
48
+ Provides-Extra: test
49
49
  Provides-Extra: array
50
50
  License-File: LICENSE
51
51
  Summary: e-graphs in Python built around the the egglog rust library
@@ -60,7 +60,7 @@ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
60
60
  `egglog` is a Python package that provides bindings to the Rust library [`egglog`](https://github.com/egraphs-good/egglog/),
61
61
  allowing you to use e-graphs in Python for optimization, symbolic computation, and analysis.
62
62
 
63
- Please see the [documentation](https://egglog-python.readthedocs.io/en/latest/?badge=latest) for more information.
63
+ Please see the [documentation](https://egglog-python.readthedocs.io/) for more information.
64
64
 
65
65
  Come say hello [on the e-graphs Zulip](https://egraphs.zulipchat.com/#narrow/stream/375765-egglog/) or [open an issue](https://github.com/egraphs-good/egglog-python/issues/new/choose)!
66
66
 
@@ -1,34 +1,34 @@
1
- egglog-4.0.1.dist-info/METADATA,sha256=u07S8XPLPevSoQv4iDkjnhOaBREt43223RFXC2ndmW0,3547
2
- egglog-4.0.1.dist-info/WHEEL,sha256=PI_yinHuPssCo943lUdZTaSBEwIUzDPKgEICR1imaRE,96
3
- egglog-4.0.1.dist-info/license_files/LICENSE,sha256=TfaboMVZ81Q6OUaKjU7z6uVjSlcGKclLYcOpgDbm9_s,1091
1
+ egglog-5.0.0.dist-info/METADATA,sha256=qi__7zlNff-jiJ4Brz5IwWx9OXIql62sX2D13U4gaGc,3524
2
+ egglog-5.0.0.dist-info/WHEEL,sha256=PI_yinHuPssCo943lUdZTaSBEwIUzDPKgEICR1imaRE,96
3
+ egglog-5.0.0.dist-info/license_files/LICENSE,sha256=TfaboMVZ81Q6OUaKjU7z6uVjSlcGKclLYcOpgDbm9_s,1091
4
4
  egglog/bindings.pyi,sha256=ozrs-Oau7dSNnU9x1iTZWmuqJSXnepQ_fYR18JKlaWA,11073
5
5
  egglog/builtins.py,sha256=3kNQv62722Z1PtgHA_mDOIlaMSPJLSOjjO2B9SIZYdo,14005
6
6
  egglog/config.py,sha256=mALVaxh7zmGrbuyzaVKVmYKcu1lF703QsKJw8AF7gSM,176
7
- egglog/declarations.py,sha256=3b7iC8U4CVVwM-0L4T_AFq5eiCH4uTNa1jWiXlaT2eo,39641
8
- egglog/egraph.py,sha256=pdut6RIcqlOBGCp7Huii-XclPB4mYZ15MF9xF8eH2u4,60030
9
- egglog/examples/bool.py,sha256=EU8_6XiwbTj7fdE4R7kfUjm1FQO5KlfIORZaTbJ6Ic8,848
7
+ egglog/declarations.py,sha256=GrDNVkhfy1h9CqUYJuMhlQlntdJJl-pnLLPbq65of_s,39437
8
+ egglog/egraph.py,sha256=vF4_V3FsdazBI9UN42M3xrjkMm_esDHN8JxvTwHf9Qw,60382
9
+ egglog/examples/bool.py,sha256=P4X2lxyiViP7bxsQooJBP-ofnqmVcw5jdylBOricNtY,851
10
10
  egglog/examples/eqsat_basic.py,sha256=1vY0HVPM-xgKT-VuYa2XAaC_dfv6PEcfjg0qCF55sjo,1023
11
11
  egglog/examples/fib.py,sha256=fQDB4quzrHwZER5DSPvZKB9POcYDNYV7fNdlVwI-0Ns,533
12
- egglog/examples/lambda_.py,sha256=x-_Eujg-eVetQEZQuwwtSRMVATHajYKl7ywr9DFVSfU,9003
12
+ egglog/examples/lambda_.py,sha256=fuxQKmouE_vC4CyLXuPfNsJyTfMerHoryAs3DOAl88g,9023
13
13
  egglog/examples/matrix.py,sha256=hAVoxd9TIdeFkD9MpsEpm8nW2nJONZefIGhqMPuQlNI,5440
14
14
  egglog/examples/ndarrays.py,sha256=slNff_HoiTGk_0XRs9oPsyQWT8EVGZ7eURlU5U05fg8,4373
15
15
  egglog/examples/README.rst,sha256=QrbfmivODBvUvmY3-dHarcbC6bEvwoqAfTDhiI-aJxU,237
16
- egglog/examples/resolution.py,sha256=9Mn0ck_WgnaNfQ0kldwbaI65mU7DG4lOk6_lHUZaVjY,2226
16
+ egglog/examples/resolution.py,sha256=xhsXQDhYJJ9lI5jk9RAnTi-fUFSZwLSzwWQjAGDdHi4,2231
17
17
  egglog/examples/schedule_demo.py,sha256=3borxRua7WSlEPqmPcImhJcDzz37rJh6uOL9-koBDD8,756
18
18
  egglog/examples/__init__.py,sha256=KuhaJFOyz_rpUvEqZubsgLnv6rhQNE_AVFXA6bUnpdY,34
19
- egglog/exp/array_api.py,sha256=K85T4CRQXl6gjvZkqCcaORcjugErRZx4Yid_fdxmnvA,43896
19
+ egglog/exp/array_api.py,sha256=k6DTmjwppXC9SYOY5xlKsnWFVigSIMOA5vQeedFXAKA,43911
20
20
  egglog/exp/array_api_jit.py,sha256=Srd4K3Ej-lsvBrFN97VS0A9lb8AwIKKZqPLiMwFzLcU,1283
21
21
  egglog/exp/array_api_numba.py,sha256=e6qq08FMjyksXLNJemEfFUgCMCpF7l8eW2wBzBN1f90,4024
22
- egglog/exp/array_api_program_gen.py,sha256=iARYt9MESn-JQi-xpPp3KfPdoc_1DhmgZyaTJbDC-UA,20328
23
- egglog/exp/program_gen.py,sha256=8SLgEV511U6HZnhWR_vaTXpUZlAZPsJv992qjkQmVg8,12445
22
+ egglog/exp/array_api_program_gen.py,sha256=Asz9p_CvXSjd-KoVBLvj1eJ5W2aEzWRNgtY0RXFqsbw,20343
23
+ egglog/exp/program_gen.py,sha256=lHc3AViP-3Zf0iGUTet0z5_au5v2aaMte8LgChKYZRw,12495
24
24
  egglog/exp/__init__.py,sha256=G9zeKUcPBgIhgUg1meC86OfZVFETYIugyHWseTcCe_0,52
25
25
  egglog/graphviz_widget.py,sha256=YtI7LCFWHihDQ1qLvdj2SVYEcuZLSooFUYheunOTxdc,1339
26
26
  egglog/ipython_magic.py,sha256=VA19xAb6Sz7-IxlJBbnZW_gVFDqaYNnvdMB9QitndjE,1254
27
27
  egglog/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- egglog/runtime.py,sha256=rzqiMLC3JIlKEkB6yJOlsBuo9v-5faokJx9iZmn-eKM,24037
28
+ egglog/runtime.py,sha256=1PP0XugpbgGH3r0brskkF1Pg9EAtfXpejVAhp_GXJUY,23932
29
29
  egglog/type_constraint_solver.py,sha256=ZsrFvi_6ecDcXCrdZNwCeVj-LQlpfnnXQ3GP7XitwS8,3519
30
30
  egglog/widget.css,sha256=WJS2M1wQdujhSTCakMa_ZXuoTPre1Uy1lPcvBE1LZQU,102
31
31
  egglog/widget.js,sha256=UNOER3sYZ-bS7Qhw9S6qtpR81FuHa5DzXQaWWtQq334,2021
32
32
  egglog/__init__.py,sha256=AGM-7H_Vx1Xb0Z-tc0C9Y8JbQxpa6hdYfhSU_dnT3Mw,244
33
- egglog/bindings.cp311-win_amd64.pyd,sha256=T2XCc6T-kd1tRbqUzZNJvNaQf4rKZUeEGFGG8Zo9jcg,5279744
34
- egglog-4.0.1.dist-info/RECORD,,
33
+ egglog/bindings.cp311-win_amd64.pyd,sha256=TaQgM3Fvlt8_CQUc1bgjybrn3ic8utXpGQez-YTad10,5279232
34
+ egglog-5.0.0.dist-info/RECORD,,
File without changes