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-new
template that sets up a basic Clerk project withEmmy
installed as a dependency. The template lives here. -
Adds
dev/emmy/notebook.clj
as the new homepage for https://emmy.mentat.org.
-
-
#98 upgrades
same/ish
to 0.1.6, renames allsame
requires tosame.core
and removes final:include-macros true
from the codebase. -
#124:
-
Upgrades
babashka/sci
to 0.7.39. -
Adds a working
bb repl
command 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-opts
in the newemmy.sci
toemmy.sci/config
, to match thesci-configs
style.
The full library is now published to
https://emmy.mentat.org
as 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
:flat
compilation 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
resolve
calls inemmy.util.def
triggered by vanilla (non-shadow) cljs compilation. -
Updates
Complex.js
andFraction.js
dependencies to their latest NPM versions. -
Updates
odex
to the latest release candidate on NPM. -
The
cljs
side ofemmy.numerical.ode/stream-integrator
gains 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-fn
andcompile-state-fn
gain 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-fn
andcompile-fn
now 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-opts
tomake-integrator*
; it now returns only a call tostream-integrator
instead 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? false
supplied. -
compile-fn
now callscompile-state-fn
withparams
set tofalse
and an:arity
option 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
,:flat
and:primitive
. See the docstring for details. -
:mode
supports:js
,:source
,:clj
,:native
or: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-kondo
invocation to version 2013.01.20 and saves some work in the actions setup. Fix all linting errors that resulted.
-
-
#109:
-
->JavaScript
now produces expressions, and not function bodies. This change makes->JavaScript
do the same job as->infix
and->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-fn
has 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
gensym
replacements 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 * y
you 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-segment
andreverse-segment
inemmy.pattern.match
. This support bubbles up to forms in rules like(?? x pred1 pred2)
. -
Removes the
:emmy.pattern/ignored-restriction
linter 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
sicmutils
portion of all namespaces toemmy
. -
Moves the
pattern.*
namespaces intoemmy.pattern.*
-
Ran
cljfmt
on 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.
-