Release Notes
Documentation changes
#294 #303 #304 #323 Improved overall documentation, both high level (on the readthedocs website) and low level (docstrings)
#328 Added notebook about instantiating and learning a generative circuit classifier for MNIST images, which also showcase variable marginalization for robust classification in presence of missing features
New features
#312 Implemented logic circuits and the parsing of sentential decision diagrams (SDDs) from the PySDD library
#292 Perform batched variable marginalization by specifying a marginalization mask
#312 Added routine to graphically plot symbolic circuits
#309 Simplified overall symbolic representation by having a single sum layer that generalizes the previous dense and mixing layers
#324 Added the CP tensor factorization as circuit construction template
Additional new features
#300 The image data circuit instantiation template now supports Gaussians as input distributions
#325 Added more flexibility in the circuit construction templates by specifying additional hyperparameters arguments to the Parameterization data class
#316 The correctness and consistency of the symbolic representation is now checked before compilation
#313 Added indexed Categorical and embedding implementations, which are generally faster and more memory efficient than the previously one based on one hot encoding followed by an einsum
#330 Added optimization rule replacing kronecker products followed by sum in parameters into einsum
Bug fixes
#311 #319 Fixed NaNs arising from the implementations of Categorical and sum layers when the evaluation is in the log-space
#306 Fixed the region graph to circuit template method as to ensure circuits built with CP layers have a sum as output layer
Library management
#329 Updated requirements, now allowing numpy 2.x versions. Plus, add opt_einsum for possibly faster einsums
Detailed Release Notes (automatically generated)
- Made dense/mixing layer the last layer even if sum_product='cp' by @loreloc in #308
- Enable gaussian input in image_data function by @isurulucky in #301
- added indexed categorical layer evaluation by @gengala in #313
- Fix categorical nans by @loreloc in #317
- Update README.md by @andreasgrv in #315
- Elaborate on what is implemented in Cirkit by @andreasgrv in #321
- Refactor sum layers + consistency checks + bug fixes by @loreloc in #314
- Batched marginalisation mask by @andreasgrv in #318
- Plotting symbolic circuits using graphviz by @n28div in #322
- implemented logic circuit and parsing of SDD by @n28div in #312
- support passing additional activation parameters in parameterizations by @isurulucky in #325
- Cleaning up by @loreloc in #326
- Mkdocs math support + more and better docstrings + interfaces fix by @loreloc in #323
- CP factorization by @loreloc in #324
- Improve Documentation by @andreasgrv in #327
- MNIST Classification notebook by @andreasgrv in #328
- Avoid OOM and speed up training in SOS circuits by @loreloc in #330
- Upgrade to numpy 2.x and add opt_einsum by @loreloc in #329
- Fix unconditional sampling and add unit test by @loreloc in #332
- fix issues in logic circuits by @n28div in #333
New Contributors
Full Changelog: 0.1.0...0.2.0