# v0.5.0 ## v0.5.1 - Maintenance patch Fixes to keep it sort of running and catch up on dependency drift.... Still haven't gotten pyside6 to work yet though which is a PROBLEM - [#211](https://github.com/auto-pi-lot/autopilot/pull/211) - Fix: [#209](https://github.com/auto-pi-lot/autopilot/issues/209) - update location of dtoverlays - Convert travis-based tests to github actions so they actually run - Don't raise `NotImplementedError` in datajoint module on import - what the hell was i thinking lmao - don't access deprecated alias `np.float`, just use `float` - fix a bunch of docs stuff to make it build - update dep versions and remove some upper bounds ## v0.5.0a0 - ~The Data Modeling Edition~ (changelog_v050a)= A lot. Namely a whole rewriting of the {mod}`autopilot.data` module. This is being released as an alpha version while we finish working out a few of the kinks in the data modeling system because Jonny is finishing their dissertation and has a deadline determined by the viscera of institutional science rather than software development! ### Upgrading From {class}`.Biography` - {attr}`.Subject.protocol` -> {class}`.Protocol_Status`, which manages the current trial, session, step, etc. rather than being treated separately - {mod}`autopilot.data.interfaces` contains classes to relate abstract data models to different representations and formats - {mod}`.interfaces.datajoint` allows creating datajoint schema definitions from autopilot models using the companion [datajoint-babel](https://github.com/auto-pi-lot/datajoint-babel) project - {mod}`.interfaces.tables` translates pydantic models to HDF5 files - {mod}`autopilot.data.modeling` has basic types for use in data models - {mod}`autopilot.data.models` has the models themselves - {mod}`autopilot.data.units` stub module for using explicit units instead of anonymous floats - A new set of general model filling widgets - {mod}`.widgets.input` and {mod}`.widgets.model` - were created that will eventually replace much of the existing GUI which suffers from code duplication problems from minor variations between representations of parameters, etc. - {class}`~.loggers.Log`, {class}`.Log_Format`, {class}`.LogEntry`, {class}`.ParseError`, {data}`.MESSAGE_FORMATS`, {data}`.LOG_FORMATS` were added to allow programmatic loading of logfiles, and {mod}`.utils.log_parsers` was added to allow recovery of structured data (eg. from logged trial data). Loggers now use the [rich logging handler](https://rich.readthedocs.io/en/stable/logging.html) for much more readable logs in stderr. - {class}`.Jack_Sound` classes now put all frames at once into the processing queue, rather than one at a time for much less variability in sound onset jitter. The {class}`.JackClient` class was updated to reflect that as well by adding a `play_q_size` argument that controls the size of the deque used to store frames to play (rather than pulling each from a Queue as was done before). {class}`.JackClient` also has an optional `disable_gc` (False by default) parameter that allows the garbage collector to be disabled in the process for further (unquantified) jitter reduction. ### Minor updates - The bandwidth test ({class}`.Bandwidth_Test` widget and {meth}`.Pilot.l_bandwidth` listen) was updated to allow selecting compression, use of a random array, or preserialized messages - The {mod}`.Terminal` now closes cleanly (still with a warning of leaked semaphors) without hanging. - External processes {func}`.external.start_pigpiod` and {func}`.external.start_jackd` first check if the process is already started - {meth}`.Digital_Out.set` now has a ``result`` argument for faster setting that doesn't confirm the result when ``False`` - {class}`.Message` s now provide clearer support for compression in serialization, and automatically detect and handle a compressed message when deserializing. This is also carried through to the {meth}`.Net_Node.send` method. - {meth}`.Station.l_kill` was moved up to the top level {class}`.Station` class, rather than being something the Terminal station owns. - The {mod}`~.setup.run_script` functions no longer uses the totally unreadable white on green ANSI code combo that I have no idea why i ever used in the first place. - A `picamera_legacy` script was added for enabling the picamera on bullseye. - The {class}`.sounds.Gammatone` sound now accepts a `filter_kwargs` dictionary that is passed on to the {class}`.timeseries.Gammatone` filter. - The {class}`.Task` and {class}`.Nafc` classes use the new {class}`.Trial_Data` style data declarations. - Two utility functions {func}`.common.walk_dicts` and {func}`.common.flatten_dicts` were added to make handling nested dictionaries a bit easier. - ### Bugfixes - The Subject class would incorrectly overwrite data given a mismatch in system times between the Terminal and Pilot. The subject class should now ideally no longer overwrite anything ever. - The subject class would drop trial data silently if it was not in the TrialData description. En route to making the table automatically expand to accomodate unexpected data, dropped data is now logged as an exception. - The prefs manager handles being launched from within ipython and other processes better, but is still a bit buggy. Now it uses the check used internally in the multiprocessing module to see if a manager can be launched, and falls back to using a standard dictionary if not. - `jackd_source` script uses correct `https://` rather than `git://` protocol. - A `_TASK_LIST` was added to {mod}`.utils.registry` to support deprecated task specifications. ### Regressions - With additional checking for monotonic increases in `trial_num` and checks that prevent data overwriting, individual writes of trial data are now a bit slower, which should be optimized for when we complete the transition to uniform data models throughout the library. ### Prefs - `PIGPIOD` - `bool` - if `True`, start pigpiod on pilot start - Stubs were created for converting the prefs to using data models, but they have not been filled yet. - A `AUTOPILOT_NO_PREFS_MANAGER` environment variable now controls the use of a multiprocessing manager explicit. Documentation for environmental variables is forthcoming. - A `AUTOPILOT_WARN_DEFAULTS` environment variable controls whether warnings should be printed for when a default pref value is retrieved, because that warning is a good one but can be really annoying. ### Packaging & Dependencies - Autopilot is now packaged with Poetry! This allows for fully deterministic installation with the poetry.lock file and updates from the old setuptools style of dependency specification. - The source repository has moved from https://github.com/wehr-lab/autopilot to https://github.com/auto-pi-lot/autopilot - `MANIFEST.in` has been replaced by the `include` field in `pyproject.toml` - `autopilot.__version__` is now determined by `importlib.metadata` and specified in the `pyproject.toml` file rather than in the `__init__.py` file - `blosc` was replaced with `blosc2` - New dependencies - global - pydantic (^1.9.0) - parse (^1.19.0) - rich (^11.2.0) - validators (^0.18.2) - docs - autodoc_pydantic (^1.7.0) - myst_parser (^0.17.2) - Version Bumps - pyzmq 18.1.* -> ^22.3.0 - tornado >=5.0.0 -> ^6.1.0 - numpy >=1.16.5 -> ^1.20.0 - scipy >=1.6.0 -> ^1.7.0 - pandas >=0.19.2 -> ^1.3.0 on python 3.7 and ^1.4.0 on >=3.8 - tables >=3.4.2 -> ^3.7.0 - Sphinx >=3.1.2 -> ^4.3.1 - A lot more dependencies were taken from being implicit versions to explicit by the conversion to using Poetry... ### Docs - [Configuration](configuration) was moved to its own page, documenting setting up the system as well as the contents of the user directory. - A [faq](FAQ) page was stubbed out (but is still pretty skeletal) - The overview was updated with some more information in the module tour - Virtual environment usage was moved from the setup page to its own subpage linked from the FAQ. - A `make serve` option was added to the docs makefile that makes use of [sphinx-autobuild](https://pypi.org/project/sphinx-autobuild/) to livereload docs while editing them. - `autopilot_theme.css` was updated to be compatible with the new version of sphinx-rtd-theme that apparently changed the way that TOC buttons were made, as well as remove incorrect references to fonts no longer packaged. - The `autodoc_pydantic` and `myst_parser` extensions were added -- and we will be moving towards using MyST rather than hellish ReST for future narrative docs! - Private methods and functions are now no longer rendered in the main documentation, and the library will over time use the public/private distinction more systematically to make it more understandable. - Examples was split off into its own folder and links to wiki plugins. Blink was moved with it ### Tests - We have started importing some of the pigpio mocking tools from the [People's Ventilator Project](https://peoplesvent.org) to start writing GPIO tests!