Releases: ConnorStoneAstro/caskade
v1.0.0
Caskade is now in stable release!
With version 1.0.0 caskade will work more seriously to maintain backwards compatibility in future updates. Happy simulating everyone!
What's Changed
Minor feature addition coming along with this update, lets you store a calculation that will be called repeatedly.
- Add active cache decorator to cache an expensive function by @ConnorStoneAstro in #76
Full Changelog: v0.15.1...v1.0.0
v0.15.1
What's Changed
- allow None in param shape by @ConnorStoneAstro in #74
- add finders for params array by @ConnorStoneAstro in #75
Full Changelog: v0.15.0...v0.15.1
v0.15.0
What's Changed
- Implement batching capabilities for caskade by @ConnorStoneAstro in #70
Caskade now has "herarchical models" or the ability to place one simulator inside another to support vmap or other featuers which are explicitly required to have access to params at call time.
Caskade also now has param "groups", which allow dividing the params object into sub groups to give control over what call-time functions are used (vmap, jacobian, grad, etc.).
Breaking changes
- Param shapes are now more solidly defined. If a user sets a shape then it will not change as the value is set. There are three possibilities when setting the value, first it is incompatible with the shape (i.e. a scalar when the shape requires a vector) which will throw an error, second the value matches the shape, third the value has leading batch dimensions (value shape of (4,2) and param shape of (2,) means there is a batch of size 4)
- Param names must now always be valid python identifiers (
my_nodeis ok, butmy nodeis not). This is also true for linking keys when linking Nodes - Param
batchedis not setable, now one must explicitly providebatch_shape Param.to_pointernow requires that a value is passed (either param or callable)- Module no longer tracks
dynamic_modules,child_dynamic_params, orall_dynamic_value - ActiveContext cannot be nested (not sure who was doing that anyway)
- Node.active cannot be set by the user (I hope no one was doing this)
Full Changelog: v0.14.1...v0.15.0
v0.14.1
What's Changed
- Add option to set static value during sim by @ConnorStoneAstro in #69
Full Changelog: v0.14.0...v0.14.1
v0.14.0
What's Changed
- change how values get updated by modules by @ConnorStoneAstro in #67
Breaking changes
Module.build_params_arrayis now replaced withModule.get_valueswith extra functionality to get static values and other attributes besides the values (if possible)Module.fill_dynamic_paramsis now replaced withModule.set_valueswith extra functionality to set static values and other attributes besides the values (if possible)
Full Changelog: v0.13.0...v0.14.0
v0.13.0
What's Changed
- allow static param to have None value by @ConnorStoneAstro in #65
Breaking changes
the functions dynamic_value, static_value, and pointer_func no longer exist. Instead it is now possible to pass a value when calling to_dynamic(val) or to_static(val). For completeness to_pointer(val) now exists where val should be None, a Param, or a callable.
Calling param.to_static(None) will set the param to static and leave the value as None (presumably to be filled later). This will still crash if you try to use it in a simulation, but gives the user some freedom to define the workflow of how the value gets filled.
Full Changelog: v0.12.1...v0.13.0
v0.12.1
- Minor bug fix in param
is_validchecking the right value @ConnorStoneAstro
Full Changelog: v0.12.0...v0.12.1
v0.12.0
What's Changed
- major update to value handling by @ConnorStoneAstro in #64
Major interface update includes many small changes:
param.value = Nonenow clears value and sets dynamic, rather than aliasingto_dynamicparam.value = 1.0or some other value no longer forces static, the param will remain static/dynamic as it was before- Printing a simulator will show up to 4 values per param, rather than only showing scalars
Param("name", dynamic_value = value)no longer works, now useParam("name", value = value, dynamic=True)- Params now have explicit
param.batched = Trueto indicate thatparam.shapewill match then end ofparam.value.shape. More generally we will haveparam.shape = (*D)andparam.value.shape = (*B, *D) param.dynamic_value = valueis nowparam.dynamic_value(value)to set value and make it dynamic. Also now haveparam.static_value(value)to set static and provide value. As well asparam.pointer_func(value)to set a function or param pointer
Under the hood, the graph will only update for setting a param value if that means changing the node type (static, dynamic, pointer). This should improve the speed of larger simulators when modifying states (ie set whole simulator to static). The runtime use of the graph has always been fast.
Full Changelog: v0.11.0...v0.12.0
v0.11.0
What's Changed
- Reviewcomments related to JOSS review by @ConnorStoneAstro in #59
- Add active state cache decorator by @ConnorStoneAstro in #61
Full Changelog: v0.10.5...v0.11.0
v0.10.5
What's Changed
- add description parameter for all node objects by @ConnorStoneAstro in #58
Full Changelog: v0.10.4...v0.10.5