0.30.0: first Emmy release!
This release includes big performance upgrades to the emmy.numerical.ode and emmy.expression.compile namespaces. These features anticipate lots of lovely visualization features that'll be coming soon.
To port from sicmutils, simply rename sicmutils to emmy everywhere. (If you were using pattern.*, you'll need to add an emmy prefix and use emmy.pattern.match etc instead.)
We also have a new website at https://emmy.mentat.org, and a new project template for getting started with Emmy and Clerk.
Changelog entries:
-
#126:
-
Adds a
deps-newtemplate that sets up a basic Clerk project withEmmyinstalled as a dependency. The template lives here. -
Adds
dev/emmy/notebook.cljas the new homepage for https://emmy.mentat.org.
-
-
#98 upgrades
same/ishto 0.1.6, renames allsamerequires tosame.coreand removes final:include-macros truefrom the codebase. -
#124:
-
Upgrades
babashka/scito 0.7.39. -
Adds a working
bb replcommand to the repository. -
Renames
emmy.env.sci=>emmy.sci, and adds anemmy.sci/install!command to make it easier to install all namespaces into a shared SCI context. -
Renames
context-optsin the newemmy.scitoemmy.sci/config, to match thesci-configsstyle.
The full library is now published to
https://emmy.mentat.orgas a series of Clerk notebooks. This required a dependency on https://clerk-utils.mentat.org, but no actual Clerk dependency in the library. -
-
#119:
-
Removes support for
:flatcompilation mode (this was a step toward what is now called :primitive). Flat has no further use case. -
You can now "bring your own array" to the function provided by
stream-integrator, avoiding an allocation in performance-sensitive contexts.
-
-
#118:
-
Fixes problems with the
resolvecalls inemmy.util.deftriggered by vanilla (non-shadow) cljs compilation. -
Updates
Complex.jsandFraction.jsdependencies to their latest NPM versions. -
Updates
odexto the latest release candidate on NPM. -
The
cljsside ofemmy.numerical.ode/stream-integratorgains a:js?option that defaults totrue. Iffalse, the returned function will return native JS arrays vs converting the return value to Clojure. -
In
emmy.expression.compile,compile-fnandcompile-state-fngain a:simplify?argument that defaults totrue. Iffalse, compilation will not attempt to simplify the function body before proceeding.
-
-
#115:
This PR introduces significant upgrades to the functions in
emmy.expression.compile.compile-state-fnandcompile-fnnow share the same code. Expect some more shifts here as we work on animations.Specifically, this update:
-
Removes timers from the code in
emmy.numerical.ode. If you want timing data you can generate an derivative yourself that performs timing. Including this by default introduced a significant performance cost. -
Renames
emmy.numerical.ode/integration-optstomake-integrator*; it now returns only a call tostream-integratorinstead of the old map of this result and timers. -
In
emmy.expression.compile:-
compile-state-fn*andcompile-fn*are now removed, in favor of the non-starred versions with option:cache? falsesupplied. -
compile-fnnow callscompile-state-fnwithparamsset tofalseand an:arityoption supplied, vs using its own mostly-duplicated implementation. -
:flatten?option removed in favor of the more granular:calling-convention. This option supports values of:structure,:flatand:primitive. See the docstring for details. -
:modesupports:js,:source,:clj,:nativeor:sci.
-
-
-
#110:
-
Moves all docstrings that existed as metadata on defs (i.e.,
(def ^{:doc "..."} sym ...)) down below the symbol. I hadn't realized that this was a valid way to attach a docstring! -
Upgrades GitHub Actions
clj-kondoinvocation to version 2013.01.20 and saves some work in the actions setup. Fix all linting errors that resulted.
-
-
#109:
-
->JavaScriptnow produces expressions, and not function bodies. This change makes->JavaScriptdo the same job as->infixand->TeX. Initially, the JS rendering emitted a function in order to facilitate experiments with embedding equations of motion in dynamic web pages. This can still be done:compile-state-fnhas been extended to allow the compilation of a state function into either Clojure or Javascript notation. The test directory contains many worked examples. -
numerous local
gensymreplacements found useful as part of test fixtures have been gathered together intomonotonic-symbol-generator. -
generation of sums and differences in all of the infix generators has been improved to more closely approach standard mathematical notation (e.g., instead of
-2 * x + -2 * yyou will see- 2 * x - 2 * y).
-
-
#107:
-
move CSE to its own namespace to avoid the circular dependency
compile->render->compile -
refactor JS rendering to allow compiler to use it
-
adjust meaning of :native and :source compilation modes: now you get what's compatible with your execution environment. You can also ask for a specific language, allowing tests to be bilingual.
-
-
#100:
-
Implements predicate support for
segment,entire-segmentandreverse-segmentinemmy.pattern.match. This support bubbles up to forms in rules like(?? x pred1 pred2). -
Removes the
:emmy.pattern/ignored-restrictionlinter keyword, and all clj-kondo code warning that restrictions aren't supported on segment binding forms.
-
-
#96 renames
#sicm/{bigint, quaternion, complex, ratio}to#emmy/{bigint, quaternion, complex, ratio}. -
-
Renames the
sicmutilsportion of all namespaces toemmy. -
Moves the
pattern.*namespaces intoemmy.pattern.* -
Ran
cljfmton all code to tidy up hidden tabs, extra whitespace, etc -
Attempted to switch over all badges and links to the proper new locations... we'll see how this went, and I'll fix anything I missed as it comes up.
-