- allow optionally passing an existing file lock
- use aggressive partitioning to be robust to null
- widen dependency versions
- add fault tolerance to table caching failure
- avoid hardcoded 'results' table name
- remove jax from required imports
- move sqlalchemy to required dependencies
- use sqlalchemy to build tsdb databases
- add tsdb backend for logging metrics to central db
- ignore backend during serialization
- allow specifying backend to collector
- generalize db backend to allow using alternative buffered writers
- merge id and frame keys when joining dfs
- add data reader utilities
- add ability to attach metadata to a run id
- expose watermarks as options on Collector class
- add set_frame method to allow skipping unused intermediate frames
- add jax io callback for logging within jax.jit
- initial working prototype
- add ability to merge collectors across processes
- don't require next_frame() on first step
- serialize in memory dbs
- initial code migration
- remove primary key constraint on frame to support jax.vmap
- allow trailing-edge frames for evaluate
- reset frame counter when changing exp_id
- remove extra next_frame() call
- force a db sync before serialization
- in-memory dbs always need initialization on hydrate
- don't use row_factory for table metadata
- asking for nonexistent measurements gives empty list
- break get_tables into shared utility
- remove dead repeat code from prior version
- make sure collector is cleaned after test