You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Release v0.2.3 (#374)
* Install prettyprinter for term when library is available (#386)
* install prettyprinter for term when library is available
* lint
* move code into types.py
* fix pypandoc issue (#397)
* Convert evaluate to a singledispatch (#398)
* convert evaluate to a singledispatch
* lint
* add jnp.pi and ArrayTerm.T (#394)
* Deprecate defterm (#399)
* deprecate defterm
* remove defterm case
* remove defterm
* lint
* evaluate distribution arguments
* lint
* remove interpreter
* Revert "remove interpreter"
This reverts commit 3044277.
* wip
* lint
* Rework numpyro distribution handling to enable symbolic distributions and handling of distribution methods (#311)
* refactor distribution operations
* add a test for typeof of distributions
* add tests for symbolic dists/arguments
* introduce operations for distribution methods
* comment
* fix tests
* work around #310
* replace hack with new hack
* tweak repr for _BaseOperation
* lint
* work around #312
* clean up access to dist ops
* wip
* wip
* add type annotations to get correct term conversion
* lint
* include distribution arguments as properties
* fix distribution calls
* try again
* fixes
* format
* Box the output of `__type_rule__` (#387)
* box the output of __type_rule__
* fix tests
* fix tests
* require callers of __type_rule__ to box arguments
* fix
* move Box out of ops.types
* lint
* fix test
* fix syntactic_eq implementation for jax arrays (#405)
* Fix recursion error in sizesof (#406)
* fix recursion error in sizesof
* format
* Allow `_BaseOperation` subclasses to have an overrideable `apply` method (#414)
* stash
* fixes
* initial
* wip
* lint
* ensure each subclass has a fresh operation
* wip
* wip
* lint
* wip
* wip
* lint
* refactor class method support
* move defops
* fix test
* remove singledispatch case and add test
* move definition
* cleanup
* simplify
* cleanup
* lint
* fix failing test
* fix classmethod
* __isabstractmethod__
* revert
---------
Co-authored-by: Eli <eli@basis.ai>
* Try pulling in pyproject.toml from staging-llm to master (#425)
* Generate instance-level `Operation`s for bound methods (#351)
* generalize __get__
* nits
* coverage of methoddescriptor api
* methodtype
* simplify
* simplify
* simplify
* format
* revert
* restore
* simplify
* simplify
* retain instance op on term construction
* Simplify apply inheritance
* assign
* put call next to init_subclass
* add explanatory comment
* Operation.apply -> Operation.__apply__
* add test based on issue description
* fix doctest
* Fix dataclass @defops and added dataclass metaclass (#439)
* fixed dataclass ordering and added metaclass for simplifying construction of dataclass terms
* ensure term fields are not being overriden
* added decorator and dataclass
* updated to make defdata registration automatic
* simplified dataclass loop
* updated to give property op an appropriate name
* added failing tests
* fixed failing test
* fixed numpyro/pyro/torch interfaces
* minor fix + test for deffn kwargs
* Type check and lint example code (#449)
* format example code
* type check examples
* Add beam search example using thermometer continuations (#431)
* add beam search example using thermometer continuations
* address comments
* add docstring
* lint
* Fix for jax 0.8.2 (#455)
* fix for jax 0.8.2
* add more register
* format
---------
Co-authored-by: Jack Feser <jack.feser@gmail.com>
Co-authored-by: Tim Cooijmans <cooijmans.tim@gmail.com>
Co-authored-by: Kiran Gopinathan <23038502+kiranandcode@users.noreply.github.com>
Here we give an example of *angelic nondeterminism* in effectful [#f1]_.
5
+
Our model is a nondeterministic program that makes choices using a ``choose`` effect and uses a ``score`` effect to sum up a final score.
6
+
We implement a beam search that optimizes this final score as a handler for the ``choose`` and ``score`` effects.
7
+
8
+
The beam search works by running the model until it reaches a ``choose``, at which point the continuation is captured.
9
+
This continuation is resumed multiple times with different values from ``choose`` to expand the beam.
10
+
The intermediate score is used to rank the beam candidates.
11
+
12
+
Because Python does not have support for first-class continuations, we use *thermometer continuations* [#f2]_.
13
+
A thermometer continuation works by tracking any nondeterminism
14
+
(essentially, the model is rerun from the start replaying the ``choose`` effects).
15
+
If ``choose`` is the only source of nondeterminism, then the
16
+
after each ``choose`` and replaying it uses *thermometer continuations* to
17
+
18
+
.. literalinclude:: ./beam.py
19
+
:language: python
20
+
21
+
References
22
+
----------
23
+
24
+
.. [#f1] Li, Z., Solar-Lezama, A., Yue, Y., and Zheng, S., "EnCompass: Enhancing Agent Programming with Search Over Program Execution Paths", 2025. https://arxiv.org/abs/2512.03571
25
+
26
+
.. [#f2] James Koppel, Gabriel Scherer, and Armando Solar-Lezama. 2018. Capturing the future by replaying the past (functional pearl). Proc. ACM Program. Lang. 2, ICFP, Article 76 (September 2018), 29 pages. https://doi.org/10.1145/3236771
0 commit comments