Recent Releases of autopilot
autopilot - v0.5.1 - Light maintenance fixes
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
- Fix: #209 - update location of dtoverlays
- Convert travis-based tests to github actions so they actually run
- Don't raise
NotImplementedErrorin datajoint module on import - what the hell was i thinking lmao - don't access deprecated alias
np.float, just usefloat - fix a bunch of docs stuff to make it build
- update dep versions and remove some upper bounds
- Python
Published by sneakers-the-rat almost 2 years ago
autopilot - v0.5.0a0 - The Data Modeling Edition
v0.5.0a0 - ~ The Data Modeling Edition ~
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 <v0.5.0
- The subject class will attempt to update any of your existing .h5 files to the new format -- it should be nondestructive (making a backup of the whole file first and then making backups up any tables that it can't create a new version of that fully preserves the data from the previous version), but don't be alarmed when your subject files start updating! We advise, as we always do, making a full backup of your data directory before making this update.
- Change references in
launch_autopilot.shscripts fromautopilot.core.terminalorautopilot.core.pilottoautopilot.agents.terminalorautopilot.agents.pilot, respectively - Update any
TrialDatadeclarations in plugin tasks to use the new {class}.Trial_Datamodel. See {attr}.Nafc.TrialDatafor an example. The old pytables IsDescriptor style descriptions will still work, but you will be given a warning every time. - We advise updating pigpio to at least
3c23715to avoid warnings and make use of some new functionality.
Package Structure
- The
autopilot.coremodule was removed entirely, and was split into- {mod}
autopilot.agent: which contains the {class}.Terminaland {class}.Pilotclasses and a stub metaclass - {mod}
autopilot.utils.loggers: formerlyautopilot.core.loggers - {mod}
autopilot.gui(described in module documentation) now has all the GUI modules, split out by type rather than all in one file. - {mod}
autopilot.datawas created fromautopilot.core.subject, see below.
- {mod}
- {mod}
autopilot.rootcontains root classes:- {class}
.Autopilot_Type- types and data models for handling and saving live data - {class}
.Autopilot_Object- General root metaclass, beneath which will be top-level metaclasses for each of the major class hierarchies that are currently separate. - {class}
.Autopilot_Pref- Stub for later converting prefs and environmental configuration parameters from their scattered state.
- {class}
- {mod}
autopilot.exceptionswill be used for more explicit exception handling. - Code files were given
755permissions to allow execution (as opposed to644) - The unused git submodules for pigpio and an old temperature sensor were removed.
Major updates
- {mod}
autopilot.datais the major change in this release! See the module-level doc page for more detailsautopilot.core.subjectwas moved to {mod}autopilot.data.subjectand remains the main interface to autopilot data. It was effectively rewritten to accomodate the use of data models, and many of its public methods were made private to make its use more obvious.- The subject structure that determines which things are located where has been made into its own class {class}
.Subject_Structure - Making new subjects is now done with the {meth}
.Subject.newclass method rather than from the__init__method - The
open_hdfmethod has been replaced with the_h5fprivate method that is a more explicit context manager allowing locking read/write access and nonlocking read access - The subject file now explicitly handles updates between different versions of the Subject class.
- Subject will check if the protocol
.jsonfile has been updated from when it was assigned and automatically update to the new version, logging the change. - All trial data is now saved with a
session_uuidunique identifier column that is an always-unique key in case of any overlapping session IDs from reassignments, etc. - Many attributes were replaced by properties that return data models:
- {attr}
.Subject.bioand {attr}.Subject.info-> {class}.Biography - {attr}
.Subject.protocol-> {class}.Protocol_Status, which manages the current trial, session, step, etc. rather than being treated separately
- {attr}
- {mod}
autopilot.data.interfacescontains classes to relate abstract data models to different representations and formats - {mod}
.interfaces.datajointallows creating datajoint schema definitions from autopilot models using the companion datajoint-babel project - {mod}
.interfaces.tablestranslates pydantic models to HDF5 files - {mod}
autopilot.data.modelinghas basic types for use in data models - {mod}
autopilot.data.modelshas the models themselves - {mod}
autopilot.data.unitsstub module for using explicit units instead of anonymous floats
- A new set of general model filling widgets - {mod}
.widgets.inputand {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_FORMATSwere added to allow programmatic loading of logfiles, and {mod}.utils.log_parserswas added to allow recovery of structured data (eg. from logged trial data). Loggers now use the rich logging handler for much more readable logs in stderr. - {class}
.Jack_Soundclasses 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}.JackClientclass was updated to reflect that as well by adding aplay_q_sizeargument 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}.JackClientalso has an optionaldisable_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_Testwidget and {meth}.Pilot.l_bandwidthlisten) was updated to allow selecting compression, use of a random array, or preserialized messages - The {mod}
.Terminalnow closes cleanly (still with a warning of leaked semaphors) without hanging. - External processes {func}
.external.start_pigpiodand {func}.external.start_jackdfirst check if the process is already started - {meth}
.Digital_Out.setnow has aresultargument for faster setting that doesn't confirm the result whenFalse - {class}
.Messages 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.sendmethod. - {meth}
.Station.l_killwas moved up to the top level {class}.Stationclass, rather than being something the Terminal station owns. - The {mod}
~.setup.run_scriptfunctions 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_legacyscript was added for enabling the picamera on bullseye. - The {class}
.sounds.Gammatonesound now accepts afilter_kwargsdictionary that is passed on to the {class}.timeseries.Gammatonefilter. - The {class}
.Taskand {class}.Nafcclasses use the new {class}.Trial_Datastyle 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_sourcescript uses correcthttps://rather thangit://protocol.- A
_TASK_LISTwas added to {mod}.utils.registryto support deprecated task specifications.
Regressions
- With additional checking for monotonic increases in
trial_numand 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- ifTrue, 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_MANAGERenvironment variable now controls the use of a multiprocessing manager explicit. Documentation for environmental variables is forthcoming. - A
AUTOPILOT_WARN_DEFAULTSenvironment 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.inhas been replaced by theincludefield inpyproject.tomlautopilot.__version__is now determined byimportlib.metadataand specified in thepyproject.tomlfile rather than in the__init__.pyfilebloscwas replaced withblosc2- 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 was moved to its own page, documenting setting up the system as well as the contents of the user directory.
- A 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 serveoption was added to the docs makefile that makes use of sphinx-autobuild to livereload docs while editing them. autopilot_theme.csswas 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_pydanticandmyst_parserextensions 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 to start writing GPIO tests!
- Python
Published by sneakers-the-rat about 4 years ago
autopilot - v0.4.4 - Sound and Timing
Several parts to this update!
- See https://github.com/wehr-lab/autopilot/pull/146 for details about improvements to jackd sound timing! In short:
- Changed the way that continuous sounds work. Rather than cycling through an array, which was easy to drop, now pass a sound object that can generate its own samples on the fly using the
hydrationmodule. - More accurate timing of sound ending callbacks. Before, the event would be called immediately on buffering the sounds into the jack ports, but that was systematically too early. Instead, use jack timing methods to account for delay from blocksize and nperiods to waituntil a certain delay to
set()the event. See_wait_for_end
Other stuff:
New
hydrationmodule for creating and storing autopilot objects between processes and computers!@Introspectmade and added to sound classes. Will be moved to root class. Allows storing the parameters given on instantiation.requiresmodule for more explicit declarations of by-object dependencies to resolve lots of the little fragile checks throughout the package, as well as make it easier for plugins :)- minor - added exceptions module, just stubs for now
- Made dummy sound class to just use sounds without needing a running sound server
- New transformations! The Prasad line fitting algorithm as
Linefit_Prasadand ordering points in a line from, eg. edge detection inOrder_Points
Improvements
- Only warn once for returning a default pref value, and make its own warning class so that it can be filtered.
- Cleaning up the base sound classes and moved them to their own module because sounds was very cumbersome and hard to reason about. Now use
get_sound_classinstead of declaring within the module. - Made optional install packages as
extras_requireso now can install withpip install auto-pi-lot -E pilotrather than autodetecting based on architecture. Further improvements (moving to poetry) will be in v0.5.0
Bugfixes
- Correctly identify filenames in logging, before the last module name was treated as a suffix on the path and removed, and so only the most recent logger created would actually log to disk. Logging now works across threads and processes.
- Fall back to a non-multiprocessing-based prefs if for some reason we can't use a mp.Manager in the given context (eg. ipython) - Still need to figure out a way to not print the exception because it is thrown asynchronously.
- as much as i love it, the splash screen being absent for whatever reason shouldn't crash the program.
- Raise an exception when instantiating a picamera without having picamera installed, re: https://github.com/wehr-lab/autopilot/issues/142
- Raise ImportError when ffmpeg is not present and trying to use a videowriter class
- Use a deque rather than an infinitely growing list to store GPIO events.
Docs
- Documenting the scripts module a bit better.
- Lots more docs on jack_server
- Python
Published by sneakers-the-rat over 4 years ago
autopilot - v0.4.3 - Gammatones and a few bugfixes
New Features
timeseries.Gammatonefilter andsounds.Gammatonefiltered noise classes! Thank you scipy team for making this simple!
Minor Improvements
- https://github.com/wehr-lab/autopilot/commit/579ef1a41518f57721decd7ecfc289f2b358b356b - En route to implementing universal calibrations, load and save them in a specified place for each hardware object instead of the horrific olde way which was built into
prefsfor some reason - prefs attempts to make directories if they don't exist
- plenty of new debugging flags!
Bugfixes
- https://github.com/wehr-lab/autopilot/commit/a775723acc66e327492145066eea0e7dff59331e - Sleep before graduating tasks, lateral fix until we rework the task initiation ritual
- https://github.com/wehr-lab/autopilot/commit/360062d3ad4cd30cdba1c53eebe5ff7d7698ffad - pad sounds with silence or continuous sounds if they aren't a full period length
- https://github.com/wehr-lab/autopilot/commit/6614c808ec2f3fc86e01df17b78aa976e8843b5a - Revert to old way of making chunks to make it work with both padded and unpadded sounds
- Import sounds module directly instead of referring from the package root in tests
- Terminal node pings pilots instead of an erroneous reference to a nonexistent
Terminal.sendmethod - https://github.com/wehr-lab/autopilot/commit/47dd4c2345df081fb5f3ca1c1705d2f696fc62c9 - Fix pinging by passing pilot id, and handle pressing start/stop button when subject not selected
- Fixed some GUI exceptions from trying to make blank lines in reassign window, improperly handling the Subject class.
- Python
Published by sneakers-the-rat over 4 years ago
autopilot - v0.4.1
- The :class:
autopilot.setup.forms.HARDWARE_FORMwould incorrectly use the class object itself rather than the class name in a few places which caused hardware names to incorrectly display and be impossible to add! - Correctly handle module name in loggers when running interactively
- Use accelerometer calibration when computing :meth:
~autopilot.hardware.i2c.I2C_9DOF.rotation - Use :func:
autopilot.getin :func:autopilot.transform.make_transform
- Python
Published by sneakers-the-rat almost 5 years ago
autopilot - v0.4.0 - Become Multifarious
See the changelog! https://docs.auto-pi-lot.com/en/latest/changelog/v0.4.0.html
v0.4.0 - Become Multifarious (August 3rd, 2021)
This release is primarily to introduce the new plugin system, the autopilot wiki, and their integration as a way of starting the transformation of Autopilot into a tool with decentralized development and governance (as well as make using the tool a whole lot easier and more powerful).
With humble thanks to Lucas Ott, Tillie Morris, Chris Rodgers <https://github.com/cxrodgers/>,
Arne Meyer <https://github.com/arnefmeyer> , Mikkel Roald-Arbøl <https://github.com/roaldarbol>_ ,
David Robbe <https://github.com/neurodavidus>_ ,
and an anonymous discussion board poster for being part of this release.
New Features
Registries & Plugins <https://github.com/wehr-lab/autopilot/pull/109>_ - Autopilot now supports users writing their code outside of the library as plugins! To support this, a registry system was implemented throughout the program. Plugin objects can be developed as objects that inherit from the Autopilot object tree -- eg. implementing a GPIO object by subclassing :class:.hardware.gpio.GPIO, or a new task by subclassing :class:~.tasks.task.Task. This system is flexible enough to allow any lineage of objects to be included as a plugin -- stimuli, tasks, and so on -- and we will be working to expand registries to every object in Autopilot, including the ability for plugins to replace core modules to make Autopilot's flexibility verge on ludicrous. The basic syntax of the registry system is simple and doesn't require any additional logic beyond inheritance to be implemented on plugin objects --autopilot.get('object_type', 'object_name')is the basic method, with a few aliases for specific object types likeautopilot.get_hardware(). Also thanks toArne Meyer <https://github.com/arnefmeyer>_ for submitting an early draft of the registry system andMikkel Roald-Arbøl <https://github.com/roaldarbol>_ for raising the issue.- At long last, the Autopilot Wiki is alive!!!! - https://wiki.auto-pi-lot.com/ - The wiki is the place for communal
preservation of technical knowledge about using Autopilot, like hardware designs, build guides, parameter sets,
and beyond! This isn't any ordinary wiki, though, we got ourselves a semantic wiki which augments traditional wikis
with a rich system of human and computer-readable linked attributes: a particular type of page will have some set of attributes,
like a page about a 3D printed part will have an associated .stl file, but rather than having these be in plaintext
they are specified in a format that is queryable, extensible, and infinitely mutable. The vision for the wiki is much
grander (but not speculative! very concrete!) than just a place to take notes, but is intended to blend the use of
Autopilot as an experimental tool with body of knowledge that supports it. Autopilot can query the wiki with the
wikimodule likewiki.ask('[[Category:3D_CAD]]', 'Has STL')to get links to all .stl files for all 3D parts on the wiki. The integration between the two makes using and submitting information trivial, but also makes designing whole new types of community interfaces completely trivial. As a first pass, the Wiki will be the place to index plugins, the system for submitting them, querying them, and downloading them only took a few hours and few dozen lines of code to implement. The wiki is infinitely malleable -- that's the point -- and I am very excited to see how people use it. - Tests & Continuous Integration with Travis! We are on the board with having nonzero tests! The travis page is here: https://travis-ci.com/github/wehr-lab/autopilot and the coveralls page is here: https://coveralls.io/github/wehr-lab/autopilot . At the moment we have a whopping 27% coverage, but as we build out our testing suite we hope that it will become much easier for people to contribute to Autopilot and be confident that it works!
- New Hardware Objects
- :class:
.cameras.PiCamera- A fast interface to the PiCamera, wrapping the picamera library, and using tips from its developer to juice every bit of speed i could! - The I2C_9DOF object was massively improved to take better advantage of its onboard DSP and expose more of its i2c commands.
- :class:
- New Transforms
- :class:
.timeseries.Kalman- adapted a Kalman filter from the wonderful filterpy package! it's in the new timeseries transform module - :class:
.geometry.IMU_Orientation- IMU_Orientation performs a sensor fusion algorithm with the Kalman Filter class to combine gyroscope and accelerometer measurements into a better estimate of earth-centric roll and pitch. This is used by the IMU class, but is made independent so it can be used without an Autopilot hardware object/post-facto/etc. - :class:
.timeseries.Filter_IIR- Filter_IIR implements scipy's IIR filter as a transform object. - :class:
.timeseries.Integrate- Integrate adds successive numbers together (scaled by dt if requested). not much by itself, but when used with a kalman filter very useful :) - :class:
.geometry.Rotate- use scipy to rotate a vector by some angle in x, y, and/or z - :class:
.geometry.Spheroid- fit and transform 3d coordinates according to some spheroid - used in the IMU's accelerometer calibration method: given some target spheroid, and some deformed spheroid (eg. a miscalibrated accelerometer might have the x, y, or z axis scaled or offset) either explicitly set or estimated from a series of point measurements, transform future input given that transformation to correct for the deformed source spheroid.
- :class:
- New Prefs
'AUTOPLUGIN'- Attempt to import the contents of the plugin directory,'PLUGIN_DB'- filename to use for the .json plugin_db that keeps track of installed plugins','PING_INTERVAL'- How many seconds should pilots wait in between pinging the Terminal?','TERMINAL_SETTINGS_FN'- filename to store QSettings file for Terminal','TERMINAL_WINSIZE_BEHAVIOR'- Strategy for resizing terminal window on opening','TERMINAL_CUSTOM_SIZE'- Custom size for window, specified as [px from left, px from top, width, height]',
Major Improvements
- Stereo Sound (Thank you
Chris Rodgers! <https://github.com/cxrodgers/>_) - https://github.com/wehr-lab/autopilot/pull/102 - Multihop messages & direct messaging - https://github.com/wehr-lab/autopilot/pull/99 - it is now possible to send multihop messages through multiple Station objects, as well as easier to send messages directly between net nodes. See the examples in the network tests section of the docs.
- Multiple Children (Thank you
Chris Rodgers! <https://github.com/cxrodgers/>_) - https://github.com/wehr-lab/autopilot/pull/103 - theCHILDIDfield now accepts a list, allowing a Pilot to initialize child tasks on multiple children. (this syntax and the hierarchical nature of pilots and children will be deprecated as we refactor the networking modules into a general mesh system, but this is lovely to have for now :) - Programmatic Setup - https://github.com/wehr-lab/autopilot/issues/33 - noninteractive setup of prefs and
scripts by using
autopilot.setup -f prefs.json -p PREFNAME=VALUE -s scriptname1 -s scriptname2 - Widget to stream video, en route to more widgets for direct GUI control of hardware objects connected to pilots
- Support python 3.8 and 3.9 essentially by not insisting that the spinnaker SDK be installable by all users (which at the time was only available for 3.7)
Minor Improvements
- Terminal can be opened maximized, or have its size and position set explicitly, preserve between launches (Thank you
Chris Rodgers! <https://github.com/cxrodgers/>_) - https://github.com/wehr-lab/autopilot/pull/70 - Pilots will periodically ping the Terminal again, Terminal can manually ping Pilots that may have gone silent - https://github.com/wehr-lab/autopilot/pull/91
- Pilots share their prefs with the Terminal in their initial handshake - https://github.com/wehr-lab/autopilot/pull/91
- Reintroduce router ports for net-nodes to allow them to bind a port to receive messages - https://github.com/wehr-lab/autopilot/pull/115/commits/35be5d634d98a7983ec3d3d6c5b94da6965a2579
- Listen methods are now optional for net_nodes
- Allowed the creation of dataless tasks - https://github.com/wehr-lab/autopilot/pull/115/commits/628e1fb9c8fcd15399b19b351fed87e4826bc9ab
- Allowed the creation of plotless tasks - https://github.com/wehr-lab/autopilot/pull/115/commits/08d99d55a32b45f54e3853813c7c71ea230b25dc
- The
I2C_9DOFclas uses memoryviews rather than buffers for a small performance boost - https://github.com/wehr-lab/autopilot/pull/115/commits/890f2c500df8010b50d61f64e2755cd2c7a8aeed - Phasing out using
Queues in favor ofcollections.dequefor applications that only need thread and not process safety because they are way faster and what we wanted in the first place anyway. - New Scripts -
i2c,picamera,env_terminal - utils.NumpyEncoder and decoder to allow numpy arrays to be json serialized
- calibrations are now loaded by hardware objects themselves instead of the extraordinarily convoluted system in
prefs-- though some zombie code still remains there. - Net nodes know their ip now, but this is a lateral improvement pending a reworking of the networking modules.
performancescript now setsswappiness = 10to discourage the use of swapfiles - see https://www.raspberrypi.org/forums/viewtopic.php?t=198765- Setting a string in the
deprecationfield of a pref in_DEFAULTSprints it as a warning to start actually deprecating responsibly. - Logging in more places like Subject creation, manipulation, protocol assignation.
Bugfixes
- Loggers would only work for the last object that was instantiated, which was really embarassing. fixed - https://github.com/wehr-lab/autopilot/pull/91
- Graduation criteria were calculated incorrectly when subjects were demoted in stages of a protocol - https://github.com/wehr-lab/autopilot/pull/91
- fix durations in solenoid class (Thank you
Chris Rodgers! <https://github.com/cxrodgers/>_) - https://github.com/wehr-lab/autopilot/pull/63 - LED_RGB ignores zero - https://github.com/wehr-lab/autopilot/pull/98
- Fix batch assignment window crashing when there are subjects that are unassigned to a task - https://github.com/wehr-lab/autopilot/pull/115/commits/e42fc5802792822ff5a53a2379041a4a8b301e9e
- Catch malformed protocols in batch assignment widget - https://github.com/wehr-lab/autopilot/pull/115/commits/2cc8508a4bf3a6d49512197dc72433c60d0c656e
- Remove broken
Terminal.reset_uimethod and made control panel better at adding/removing pilots - https://github.com/wehr-lab/autopilot/pull/91 - Subject class handles unexpected state a lot better (eg. no task assigned, no step assigned, tasks with no data.) but is still an absolute travesty that needs to be refactored badly.
- The jackclient would crash with long-running continuous sounds as the thread feeding it samples eventually hiccuped. Made more robust by having jackclient store samples locally int he sound server rather than being continuously streamed from the queue.
- PySide2 references still incorrectly used
QtGuirather thanQtWidgets - pigpio scripts would not be stopped and removed when a task was stopped, the :func:
.gpio.clear_scriptsfunction now handles that. xcbwas removed fromPySide2distributions, so it's now listed in the requirements for the Terminal and made available in theenv_terminalscript.LED_RGBdidn't appropriately raise aValueErrorwhen called with a singlepin- https://github.com/wehr-lab/autopilot/issues/117- A fistful of lingering Python 2 artifacts
Code Structure
- continuing to split out modules in :mod:
autopilot.core- networking this time - utils is now a separate module instead of being in multiple places
- the npyscreen forms in
setup_autopilotwere moved to a separate module setup_autopilotwas broken into functions instead of a very long and impenetrable script. still a bit of cleaning to do there.autopilot.setup.setup_autopilotwas always extremely awkward, so it's now been aliased asautopilot.setup- the docs have now been split into subfolders rather than period separated names to make urls nicer -- eg /dev/hardware/cameras.htm rather than /dev/hardware.cameras.html . this should break some links when switching between versions on readthedocs but other than that be nondestructive.
Docs
- new :ref:
quickstartdocumentation with lots of quick examples!
Regressions
- Removed the
check_compatiblemethod in the Transforms class. We will want to make a call at some point if we want to implement a full realtime pipelining framework or if we want to use something like luigi or joblib or etc. for now this is an admission that type and shape checking was never really implemented but it does raise some exceptions sometimes.
- Python
Published by sneakers-the-rat almost 5 years ago
autopilot - v0.3.5 - Fixing pilot db access
https://github.com/wehr-lab/autopilot/pull/79
A very minor bugfix in response to https://github.com/wehr-lab/autopilot/discussions/72#discussioncomment-386330
- Very minor one, fixes to the way :class:
.Terminalaccesses thepilot_db.jsonfile to use :attr:.Terminal.pilotsproperty that makes a new pilotdb.json file if one doesn't exist, but otherwise loads the one that is found in ``prefs.get('PILOTDB')`` - Reorganized :class:
.Terminalsource to group properties together & minor additions of type hinting - Fixed some bad fallback behavior looking for files in old hardcoded default directories, eg. in the ye olde
:func:
.utils.get_pilotdb - bump version to 0.3.5
- Python
Published by sneakers-the-rat over 5 years ago
autopilot - Unifying prefs, logging, setup, and scripts
Improvements:
* Unify the creation of loggers!!!! See the docs ;) https://docs.auto-pi-lot.com/en/latest/autopilot.core.loggers.html : https://github.com/wehr-lab/autopilot/pull/52/commits/d55638f985ab38044fc95ffeff5945021c2e198e https://github.com/wehr-lab/autopilot/issues/38
* Unify prefs, including sensible defaults, refactoring of scripts into a reasonable format, multiprocess-safety, and just generally a big weight off my mind. Note that this is a breaking change to the way prefs are accessed. Previously one would do prefs.PREF_NAME, but that made it very difficult to provide default values or handle missing prefs. the new syntax is prefs.get('PREF_NAME') which returns defaults with a warning and None if the pref is not set: https://github.com/wehr-lab/autopilot/pull/52/commits/c40a212bcaf5f184f2a6a606027fe15b1b4df59c https://github.com/wehr-lab/autopilot/issues/38
* completely clean up scripts, and together that opened the path to clean up setup as well. so all things configuration got a major promotion
* We're on the board with CI and automated testing with a positively massive 3% code coverage!!! https://github.com/wehr-lab/autopilot/pull/52/commits/743bb8fe67a69fcc556fa76e81f72f97f510dff7
* new scripts to eg. create autopilot alias: https://github.com/wehr-lab/autopilot/pull/52/commits/211919b05922e18a85d8ef6216973f4000fd32c5
Bugfixes: * cleanup scripts on object deletion: https://github.com/wehr-lab/autopilot/pull/52/commits/e8218304bd7ef2e13d2adfc236f3e781abea5f78 https://github.com/wehr-lab/autopilot/issues/41 * don't drop 'floats' from gui when we say we can use them...: https://github.com/wehr-lab/autopilot/pull/52/commits/743bb8fe67a69fcc556fa76e81f72f97f510dff7 * pigpio scripts dont like floats: https://github.com/wehr-lab/autopilot/pull/52/commits/9f939cd78a5296db3bf318115bee0213bcd1afc0
Docs: * Clarification of supported systems: https://github.com/wehr-lab/autopilot/pull/52/commits/ce0ddf78b7f59f5487fec2ca7e8fb3c0ad162051 * Solved an ancient sphinx riddle of how to get data objects/constants to pretty-print: https://github.com/wehr-lab/autopilot/pull/52/commits/ec6d5a75dada05688b6bd3c1a53b3d9e5923870f * Clarify hardware prefs https://github.com/wehr-lab/autopilot/pull/52/commits/f3a7609995c84848004891a0f41c7847cb754aae * what numbering system do we use: https://github.com/wehr-lab/autopilot/pull/52/commits/64267249d7b1ec1040b522308cd60f928f2b2ee6
Logging: * catch pigpio script init exception: https://github.com/wehr-lab/autopilot/pull/52/commits/3743f8abde7bbd3ed7766bdd75aee52afedf47e2 * more of it idk https://github.com/wehr-lab/autopilot/pull/52/commits/b682d088dbad0f206c3630543e96a5a00ceabe25
- Python
Published by sneakers-the-rat over 5 years ago
autopilot - v0.3.3 - More independent hardware objects and bugfixes!
Bugfixes
* Fix layout in batch reassign from python 3 float division
* Cleaner close by catching KeyboardInterrupt in networking modules
* Fixing audioserver boot options -- if 'AUDIOSERVER' is set even if 'AUDIO' isn't set in prefs, should still start server. Not full fixed, need to make single plugin handler, single point of enabling/disabling optional services like audio server
* Fix conflict between polarity and pull in initializing pulls in pilot
* Catch tables.HDF5ExtError if local .h5 file corrupt in pilot
* For some reason 'fs' wasn't being replaced in the jackd string, reinstated.
* Fix comparison in LED_RGB that caused '0' to turn on full becuse 'value' was being checked for its truth value (0 is false) rather than checking if value is None.
* obj.next() to next(obj) in jackdserver
Improvements
* Better internal handling of pigpiod -- you're now able to import and use hardware modules without needing to explicitly start pigpiod!!
* Hopefully better killing of processes on exit, though still should work into unified process manager so don't need to reimplement everything (eg. as is done with launching pigpiod and jackd)
* Environment scripts have been split out into setup/scripts.py and you can now run them with python -m autopilot.setup.run_script (use --help to see how!)
* Informative error when setup is run with too narrow terminal: https://github.com/wehr-lab/autopilot/issues/23
* More loggers, but increased need to unify logger creation!!!
Cleanup
* remove unused imports in main __init__.py that made cyclical imports happen more frequently than necessary
* single-sourcing version number from __init__.py
* more cleanup of unnecessary meta and header stuff left from early days
* more debugging flags
* filter NaturalNameWarning from pytables
* quieter cleanups for hardware objects
- Python
Published by sneakers-the-rat over 5 years ago
autopilot - v0.3.2 - Packaging bugfixes
bugfixes
- https://github.com/wehr-lab/autopilot/issues/19 - previously, I attempted to package binaries for the lightly modified pigpio and for jackd (the apt binary used to not work), but after realizing that was the worst possible way of going about it I changed install strategies, but didn't entirely remove the vestiges of the prior attempt. The installation expected certain directories to exist (in autopilot/external) that didn't, which crashed and choked install. Still need to formalize a configuration and plugin system, but getting there.
- https://github.com/wehr-lab/autopilot/issues/20 - the jackd binary in the apt repos for the raspi used to not work, so i was in the habit of compiling jackd audio from source. I had build that into the install routine, but something about that now causes the JACK-Client python interface to throw segfaults. Somewhere along the line someone fixed the apt repo version of jackd so we use that now.
- previously I had only tested in a virtual environment, but now the installation routine properly handles not being in a venv.
cleanup
- remove bulky static files like fonts and css from /docs/ where they were never needed and god knows how they got there
- use a forked sphinx-sass when building docs that doesn't specify a required sphinx version (which breaks sphinx)
- removed skbuild requirements from install
- fixed pigpio install requirement in requirements_pilot.txt
- included various previously missed files in MANIFEST.in
- added installation of system libraries to the pilot configuration menu
- Python
Published by sneakers-the-rat over 5 years ago
autopilot - v0.3.0 - <3
Autopilot is growing, it is learning to build strong APIs and has gained a lot of new features along the way :)
- Autopilot has moved to Python 3!! (Tested on 3.6-3.8)
- Capturing video with OpenCV and the Spinnaker SDK is now supported (See :mod:
autopilot.hardware.cameras) - An :class:
~hardware.i2c.I2C_9DOFmotion sensor and the :class:~hardware.i2c.MLX90640temperature sensor are now supported. - Timestamps from GPIO events are now microsecond-precise thanks to some modifications to the
pigpiolibrary - GPIO output timing is also microsecond-precise thanks to the use of
pigpioscripts, so you can deliver exactly the reward volumes you intend <3 - Hardware modules have been refactored into their own module, and have been almost wholly rebuilt to have sensible inheritance structure.
- Networking modules are more efficient and automatically compress arrays (like video frames!) on transmission.
Streaming is also easier now, check out :meth:
.Net_Node.get_stream! - We now have a detailed :ref:
development roadmap <todo>, so you can see the magnificent future we have planned. - We have created the
autopilot-users <https://groups.google.com/forum/#!forum/autopilot-users>_ discussion board for troubleshooting & coordinating community development :)
- Python
Published by sneakers-the-rat almost 6 years ago