Changelog#

This project uses semantic versioning

UNRELEASED#

3.1.0 (2023-11-21)#

  • Update graphs to include more compact Python names of functions (#79)[https://github.com/metadsl/egglog-python/pull/79].

  • Add method to get egglog source from e-graph (#82)[https://github.com/metadsl/egglog-python/pull/82].

  • Add include_cost flag to egraph.extract to return the integer cost as well as an expression (#86)[https://github.com/metadsl/egglog-python/pull/86].

  • Automatically try converting arguments to eq, rewrite, set_, and union to the correct type (#84)[https://github.com/metadsl/egglog-python/pull/84].

3.0.0 (2023-11-19)#

Add support for outputing the serialization e-graph from the low level bindings. Note that this is not yet exposed a the high level yet.

This removes the existing to graphviz function on the EGraph low level binding and moves it to a method on the serialized EGraph.

See (#78)[https://github.com/metadsl/egglog-python/pull/78] for more details.

2.0.0 (2023-11-17)#

Simplify accessing primitives#

Previously, there was no public way of turning an egglog primitive, i.e. i64(10), into a Python primitive, i.e. int(10). Now there is a egraph.eval(...) method which will evaluate a primitive expression and return a Python object.

We also change the PyObject primitive to behave similarly. Instead of calling egraph.load_object(pyobj) you can now call egraph.eval(pyobj) to get the underlying Python object. Also, to unify it with the other objects, you can create a PyObject by using the constructor instead of egraph.save_object(pyobj).

Bug fixes#

  • Properly expose birewrite at top level (#72)[https://github.com/metadsl/egglog-python/pull/72].

  • Fix generation of graphviz interactive SVGs in docs.

Enhancements#

  • Added PyData lighting talk and Portland state talk to explanations.

  • Add experimental jit decorator to wrap all ndarray/numba functionality together.

  • Switch to Ruff for linting

1.0.1 (2023-10-26)#

1.0.0 (2023-10-26)#

Breaking Changes#

  • Test on Python 3.9 - 3.11, stop testing on 3.8 to follow Scientific Python versioning policy

  • Bump egglog dep

    • Adds Bool builtin

    • Rename PrintTable command to PrintFunction

    • Change extract command back to taking an expression instead of a fact

    • Adds numer and denom functions to Rational sort.

    • Adds terms_encoding boolean flag for creating an EGraph

    • Allow print size command to be called with no args to print all sizes

    • Add rebuild method for sets, maps, and vecs.

New Features#

  • Add ability to print egglog string of module with .as_egglog_string

  • Add ability to visualize changes in egraph as it runs with .saturate()

  • Add ability to make functions and module unextractable as well as increase the cost of a whole module.

  • Convert reflected methods based on both types

  • Allow specifying custom costs for conversions

  • In py_exec make a temporary file with source for tracebacks

  • Add an experimental Array API implementation with a scikit-learn test

0.7.0 (2023-10-04)#

New Features#

  • Adds ability for custom user defined types in a union for proper static typing with conversions #49

  • Adds py_eval function to EGraph as a helper to eval Python code. #49

  • Adds on hover behavior for edges in graphviz SVG output to make them easier to trace #49

  • Adds egglog.exp.program_gen module that will compile expressions into Python statements/functions #49

  • Adds py_exec primitive function for executing Python code #49

Bug fixes#

  • Clean up example in tutorial with demand based expression generation #49

0.6.0 (2023-09-20)#

Breaking Changes#

  • Switches RunReport to include more granular timings

New Features#

  • Add ability to pass seminaive flag to Egraph to replicate --naive CLI flag #48

  • Add ability to inline leaves $n$ times instead of just once for visualization #48

  • Add Relation and PrintOverallStatistics low level commands #46

  • Adds count-matches and replace string commands #46

Uncategorized#

  • Added initial supported for Python objects #31

    • Renamed BaseExpr to Expr for succinctness

    • Add slides for zoom presentation with Open Teams

    • Started adding tutorial for using with array API and sklearn], using this to drive the support for more Python integration

    • Added a PyObject sort with the save_object and load_object egraphs methods and the exec

    • Added more general mechanism to upcast Python arguments into egglog expressions, by registering converters

    • Added support for default arguments (this required refactoring declerations so that pretty printing can lookup expressions)

    • Added support for properties

    • Added support for passing args as keywords

    • Add support for pure Python methods, using the preserve kwarg to implement functions like __bool__ on expressions.

    • Fix __str__ method when pretty printing breaks.

    • Added to/from i64 to i64 methods.

    • Upgraded egg-smol dependency (changes)

  • Add support for functions which mutates their args, like __setitem__ #35

  • Makes conversions transitive #38

  • Add support for reflective operators #39

    • Make reflective operators map directly to non-reflective #40

  • Includes latest egglog changes #42

    • Switches to termdag introduced in egglog #176

    • Removes custom fork of egglog now that visualizations are in core

    • Adds int and float to string functions

    • Switches define to let

  • Tidy up notebook appearence #43

    • Display expressions as code in Jupyter notebook

    • Display all expressions when graphing

  • Start adding to string support #45

    • Fix adding rules for sorts defined in other modules

    • Split out array API into multiple module

    • tidy up docs homepage

0.5.1 (2023-07-18)#

  • Added support for negation on f64 sort

  • Upgraded egg-smol dependency (changes)

0.5.0 (2023-05-03)#

  • Renamed config() to run() to better match egglog command

  • Fixed relation type signature

  • Added default limit of 1 to run() to match egglog command and moved to second arg

  • Upgraded egglog dependency (changes)

    • Added Set sort and removed set method from Map

    • Added Vec sort

    • Added support for variable args for builtin functions, to use in creation of Vec and Set sorts.

    • Added suport for joining Strings

  • Switch generated egg names to use . as seperate (i.e. Math.__add__) instead of _ (i.e. Math___add__)

  • Adds support for modules to define functions/sorts/rules without executing them, for reuse in other modules

    • Moved simplifying and running rulesets to the run and simplify methods on the EGraph from those methods on the Ruleset since we can now create Rulsets for modules which don’t have an EGraph attached and can’t be run

  • Fixed extracting classmethods which required generic args to cls

  • Added support for alternative way of creating variables using functions

  • Add NDarray example

  • Render EGraphs with graphviz in the notebook (used in progress egglog PR).

    • Add images to doc examples

  • Add %%egglog magic to the notebook

0.4.0 (2023-05-03)#

  • Change name to egglog from egg-smol, to mirror upstream change. Note that all previous versions are published under the egg-smol PyPi package while this and later are under egglog.

0.3.1 (2023-05-02)#

  • Fix bug calling methods on paramterized types (e.g. Map[i64, i64].empty().insert(i64(0), i64(1)))

  • Fix bug for Unit type (egg name is Unit not unit)

  • Use @class_ decorator to force subclassing Expr

  • Workaround extracting definitions until upstream is fixed

  • Rename Map.map_remove to Map.remove.

  • Add lambda calculus example

0.3.0 (2023-04-26)#

0.2.0 (2023-03-27)#

This release adds support for a high level API for e-graphs.

There is an examples of the high level API in the tutorials.