Minor release for compatibility with Numpy>=2.0
- Add support for Numpy>=2.0 (#928)
- Switch from dopcopt (unmaintained) to docopt-ng (maintained fork) (#927, thanks @n-gao)
Minor release with a few small fixes.
- Feature: Add setting for the default heartbeat interval
- Bugfix: Don't ignore non-loadable classes in config files (#902, thanks @ernestum)
- Bugfix: Fix an import error that made conda-forge build fail (#921, thanks @n-gao)
- Doc: Update CDE tool that doesn't exist anymore and fix starter example (#905, #906, thanks @zhimin-z)
Minor release with a few small fixes.
- Update tests and supported python versions: sacred now officially supports Python 3.8-3.11 (#872, #892, thanks @jnphilipp)
- Feature: Allow type annotations in config scopes and future-proofing config scopes by using ast instead of a complex regex (thanks @vnmabus)
- Feature: Expose MongoClient in the MongoObserver (thanks @Gracecr)
- Bugfix: Support new numpy versions by removing using Python builtin types instead of the np.* aliases (#870, thanks @Kaushalya)
- Bugfix: Allow *.ipynb files as source files when run via ipython in non-interactive mode
- Internal: Add error causes for many errors in the codebase (#894, #898, thanks @cool-RR)
- Internal: Use GitHub Actions for tests instead of azure pipelines to gain more control (#896)
- Internal: Use GitHub Actions to automate releases on PyPI
A minor release with many small improvements and support for Python 3.10.
- Feature: Support for the new numpy random API (np.random.Generator); deprecate old np.random.RandomState for np 1.19+ (#779, thanks @jnphilipp)
- Feature: Add py.typed file for typecheckers like mypy (#849, thanks @neophnx)
- Feature: Validate sacred settings (#774)
- Feature: Update CLI options: Change run ID from command line (#798, thanks @jnphilipp)
- Feature: Log named configs and config updates (#823)
- Feature: Options to save sources and copy resources in FileStorageObserver (#806, thanks @patrick-kidger)
- Feature: Support for NVIDIA Multi-Instance GPU (#865, thanks @j3soon)
- Bugfix: Updated testcases to py3.6+; updated dependencies (e.g., tinydb 4+, pytest 6.2.1, pymongo 4.0) (#799, #819, #821, thanks a lot @jnphilipp)
- Bugfix: Fixes for handling symlinks (#791, thanks @MaxSchambach)
- Bugfix: Fix docker example (#829, thanks @ahallermed)
- Doc: Some fixes and update of the documentation (#778, #792, #793, #797, #804, #842, #856, thanks @daliasen @aaronsnoswell @schmitts @Blaizzy)
Minor bugfix release that resolves some bugs for Python 3.8+ and issues with the read-only container types.
- Feature: Added support for pickling and YAML serialization to the read-only containers (#775, #737)
- Feature: Added git integration to SqlObserver (#741)
- Feature: Added support for a collection prefix in MongoObserver (#704)
- Bugfix: Fix print_config command for Python 3.8 (#719)
- Bugfix: Fix save_config command (#765)
- Bugfix: Named config updates are now distributed correctly during the configuration creation process (#769, #777)
- Bugfix: Parsing of the nvidia_smi output now also works with non-Unicode (e.g., Chinese) characters in process names (#776)
- Bugfix: Fix type annotations of MongoObserver (#762)
- Bugfix: Terminate tee on timeout. This is a workaround that prevents program crashes caused by output capturing (#740)
- Bugfix: Improve parsing of config scopes (#699, #764)
- Bugfix: Fix error tracking of ConfigErrors when raised in a config scope (#733)
- Bugfix: Made git import optional (#724)
- Feature: added Google Cloud Storage Observer (thanks @wohlert)
- Bugfix: revert accidental renaming of --unobserved commandline option
Major release with several breaking changes.
- API change: Dropped support for Python 2
- API change: Gathering of git information gathering is now enabled by default #595
- API change: Switched constructor from Observer.create(...) to Observer(...) for all observers.
- API change: Changed the interface for collecting custom host-information #569
- API change: Changed interface for defining CLI options. #572
- Feature: Added new S3 file observer #542
- Feature: added started_text option to TelegramObserver #494
- Feature: added copy/deepcopy support to read-only containers #500
- Bugfix: FileStorage Observer is more reliable under parallel execution #503
- Bugfix: FileStorageObserver now raises an error when an artifact would overwrite an important file #647
- Bugfix: fixed inconsistent config nesting behavior #409 #505
- Bugfix: Several fixes for tensorflow integration
- Bugfix: Fixed crash due to missing brand-key on some machines # 512
- Internal: Migrated CI server to Azure
- Internal: Added pre-commit hooks for pep 8 checks and python black for automated code formatting
- Internal: Started using pathlib.Path instead of os.path in many places
Last release to support Python 2.7.
- Feature: major improvements to error reporting (thanks @thequilo)
- Feature: added print_named_configs command
- Feature: added option to add metadata to artifacts (thanks @jarnoRFB)
- Feature: content type detection for artifacts (thanks @jarnoRFB)
- Feature: automatic seeding for pytorch (thanks @srossi93)
- Feature: add proxy support to telegram observer (thanks @brickerino)
- Feature: made MongoObserver fail dump dir configurable (thanks @jarnoRFB)
- Feature: added queue-based observer that better handles unreliable connections (thanks @jarnoRFB)
- Bugfix: some fixes to stdout capturing
- Bugfix: FileStorageObserver now creates directories only when starting a run (#329; thanks @thomasjpfan)
- Bugfix: Fixed config_hooks (#326; thanks @thomasjpfan)
- Bugfix: Fixed a crash when overwriting non-dict config entries with dicts (#325; thanks @thomasjpfan)
- Bugfix: fixed problem with running in conda environment (#341)
- Bugfix: numpy aware config change detection (#344)
- Bugfix: allow dependencies to be compiled libraries (thanks @jnphilipp)
- Bugfix: output colorization now works on 256 and 16 color terminals (thanks @bosr)
- Bugfix: fixed problem with tinydb observer logging (#327; thanks @michalgregor)
- Bugfix: ignore folders that have the same name as a named_config (thanks @boeddeker)
- Bugfix: setup no longer overwrites pre-configured root logger (thanks @thequilo)
- Bugfix: compatibility with tensorflow 2.0 (thanks @tarik, @gabrieldemarmiesse)
- Bugfix: fixed exception when no tee is available for stdout capturing (thanks @greg-farquhar)
- Bugfix: fixed concurrency issue with FileStorageObserver (thanks @dekuenstle)
- Bugfix: fixed problem with postgres backend of SQLObserver (thanks @bensternlieb)
- Bugfix: fixed a problem with the interaction of ingredients and named configs
- Feature: added metrics logging to the FileStorageObserver (thanks @ummavi)
- Feature: support custom experiment base directory (thanks @anibali)
- Feature: added option to pass existing MongoClient to MongoObserver (thanks @rueberger)
- Feature: allow setting the config docstring from named configs
- Feature: added py-cpuinfo as fallback for gathering CPU information (thanks @serv-inc)
- Feature: added support for _log argument in config function
- Bugfix: stacktrace filtering now correctly handles chained exceptions (thanks @kamo-naoyuki)
- Bugfix: resolved issue with stdout capturing sometimes loosing the last few lines
- Bugfix: fixed the overwrite option of MongoObserver
- Bugfix: fixed a problem with the heartbeat sometimes not ending
- Bugfix: fixed an error with running in interactive mode
- Bugfix: added a check for non-unique ingredient paths (thanks @boeddeker)
- Bugfix: fixed several problems with utf-8 decoding (thanks @LukasDrude, @wjp)
- Bugfix: fixed nesting structure of _config (thanks @boeddeker)
- Bugfix: fixed crash when using git integration with empty repository (thanks @ramon-oliveira)
- Bugfix: fixed a crash with first run using sqlite backend
- Bugfix: fixed several problem with the tests (thanks @thomasjpfan)
- Bugfix: fixed racing condition in FileStorageObserver (thanks @boeddeker)
- Bugfix: fixed problem with overwriting named configs of ingredients (thanks @pimdh)
- Bugfix: removed deprecated call to inspect.getargspec()
- Bugfix: fixed problem with empty dictionaries disappearing from config updates and named configs (thanks @TomVeniat)
- Bugfix: fixed problem with commandline parsing when program name contained spaces
- Bugfix: loglevl option is now taken into account for config related warnings
- Bugfix: properly handle numpy types in metrics logging
- API Change: added host_info to queued_event
- Feature: improved and configurable dependency discovery system
- Feature: improved and configurable source-file discovery system
- Feature: better error messages for missing or misspelled commands
- Feature: -m flag now supports passing an id for a run to overwrite
- Feature: allow captured functions to be called outside of a run (thanks @berleon)
- Bugfix: fixed issue with telegram imports (thanks @millawell)
- Refactor: lazy importing of many optional dependencies
- Feature: added metrics API for adding live monitoring information to the MongoDB
- Feature: added integration with tensorflow for automatic capturing of LogWriter paths
- Feature: set seed of tensorflow if it is imported
- Feature: named_configs can now affect the config of ingredients
- Bugfix: failed runs now return with exit code 1 by default
- Bugfix: fixed a problem with UTF-8 symbols in stdout
- Bugfix: fixed a threading issue with the SQLObserver
- Bugfix: fixed a problem with consecutive ids in the SQLObserver
- Bugfix: heartbeat events now also serialize the intermediate results
- Bugfix: reapeatedly calling run from python with an option for adding an
- observer, no longer duplicates observers
- Bugfix: fixed a problem where **kwargs of captured functions might be modified
- Bugfix: fixed an encoding problem with the FileStorageObserver
- Bugfix: fixed an issue where determining the version of some packages would crash
- Bugfix: fixed handling of relative filepaths in the SQLObserver and the TinyDBObserver
- Feature: host info now contains information about NVIDIA GPUs (if available)
- Feature: git integration: sacred now collects info about the git repository
- of the experiment (if available and if gitpython is installed)
- Feature: new
--enforce-clean
flag that cancels a run if the - git repository is dirty
- Feature: new
- Feature: added new TinyDbObserver and TinyDbReader (thanks to @MrKriss)
- Feature: added new SqlObserver
- Feature: added new FileStorageObserver
- Feature: added new SlackObserver
- Feature: added new TelegramObserver (thanks to @black-puppydog)
- Feature: added save_config command
- Feature: added queue flag to just queue a run instead of executing it
- Feature: added TimeoutInterrupt to signal that a run timed out
- Feature: experiments can now be run in Jupyter notebook, but will fail with
- an error by default, which can be deactivated using interactive=True
- Feature: allow to pass unparsed commandline string to
ex.run_commandline
. - Feature: improved stdout/stderr capturing: it now also collects non-python
- outputs and logging.
- Feature: observers now share the id of a run and it is available during
- runtime as
run._id
.
- Feature: new
--print_config
flag to always print config first - Feature: added sacred.SETTINGS as a place to configure some of the behaviour
- Feature: ConfigScopes now extract docstrings and line comments and display
- them when calling
print_config
- Feature: observers are now run in order of priority (settable)
- Feature: new
--name=NAME
option to set the name of experiment for this run - Feature: the heartbeat event now stores an intermediate result (if set).
- Feature: ENVIRONMENT variables can be captured as part of host info.
- Feature: sped up the applying_lines_and_backfeeds stdout filter. (thanks to @remss)
- Feature: adding resources by name (thanks to @d4nst)
- API Change: all times are now in UTC
- API Change: significantly changed the mongoDB layout
- API Change: MongoObserver and FileStorageObserver now use consecutive
- integers as _id
- API Change: the name passed to Experiment is now optional and defaults to the
- name of the file in which it was instantiated. (The name is still required for interactive mode)
- API Change: Artifacts can now be named, and are stored by the observers under
- that name.
- API Change: Experiment.run_command is deprecated in favor of run, which now
- also takes a command_name parameter.
- API Change: Experiment.run now takes an options argument to add
- commandline-options also from python.
- API Change: Experiment.get_experiment_info() now returns source-names as
- relative paths and includes a separate base_dir entry
- Dependencies: Migrated from six to future, to avoid conflicts with old
- preinstalled versions of six.
- Bugfix: fixed a problem when trying to set the loglevel to DEBUG
- Bugfix: type conversions from None to some other type are now correctly ignored
- Bugfix: fixed a problem with stdout capturing breaking tools that access
- certain attributes of
sys.stdout
orsys.stderr
.
- Bugfix: @main, @automain, @command and @capture now support functions with
- Python3 style annotations.
- Bugfix: fixed a problem with config-docs from ingredients not being propagated
- Bugfix: fixed setting seed to 0 being ignored
- Bugfix: fixed a problem when trying to set the loglevel to DEBUG
- Bugfix: fixed a random crash of the heartbeat thread (see #101).
- Feature: added --force/-f option to disable errors and warnings concerning
- suspicious changes. (thanks to Yannic Kilcher)
- Feature: experiments can now be run in Jupyter notebook, but will fail with
- an error by default, which can be deactivated using interactive=True
- Feature: added support for adding a captured out filter, and a filter that
- and applies backspaces and linefeeds before saving like a terminal would. (thanks to Kevin McGuinness)
- Bugfix: fixed support for
@ex.named_config
(was broken by 0.6.8) - Bugfix: fixed handling of captured functions with prefix for failing on
- added unused config entries
- Feature: Added automatic conversion of
pandas
datastructures in the - custom info dict to json-format in the MongoObserver.
- Feature: Added automatic conversion of
- Feature: Fail if a new config entry is added but it is not used anywhere
- Feature: Added a warning if no observers were added to the experiment.
- Added also an
unobserved
keyword to commands and a--unobserved
commandline option to silence that warning
- Feature: Split the debug flag
-d
into two flags:-d
now only disables - stacktrace filtering, while
-D
adds post-mortem debugging.
- Feature: Split the debug flag
- API change: renamed
named_configs_to_use
kwarg inex.run_command
- method to
named_configs
- API change: renamed
- API change: changed the automatic conversion of numpy arrays in the
- MongoObserver from pickle to human readable nested lists.
- Bugfix: Fixed a problem with debugging experiments.
- Bugfix: Fixed a problem with numpy datatypes in the configuration
- Bugfix: More helpful error messages when using
return
oryield
in a - config scope
- Bugfix: More helpful error messages when using
- Bugfix: Be more helpful when using -m/--mongo_db and pymongo is not installed
- Bugfix: fixed an error when trying to add a mongo observer via command-line
- Feature: added -c/--comment commandline option to add a comment to a run
- Feature: added -b/--beat_interval commandline option to control the
- rate of heartbeat events
- Feature: introduced an easy way of adding custom commandline options
- Feature: Support
@ex.capture
on methods (thanks to @Treora) - Bugfix: fixed an error that occurred when a dependency module didn't have a
- the '__file__' attribute
- Bugfix: fixed a problem where some config modification would be displayed as
- added if there where multiple ConfigScopes involved
- Bugfix: fixed a problem with tracking typechanges related to None-type
- Bugfix: fixed a crash related to MongoObserver being an unhashable type
- Bugfix: added back setslice and delslice methods to DogmaticList for
- python 2.7 compatibility
- Bugfix: fixed a bug in the mongo observer that would always crash the final
- save
- Bugfix: automatic detection of local source files no longer wrongly detects
- non-local files in subdirectories.
- Bugfix: fixed crash when using artifacts
- Bugfix: added resources are now saved immediately
- Bugfix: fixed a crash when some numpy datatypes were not present
- (like numpy.float128)
- Bugfix: Made MissingDependencyMock callable so it would also correctly
- report the missing dependency when called
- Bugfix: MongoObserver would just crash the experiment if the result or the
- info are not serializable. Now it warns and tries to alter problematic entries such that they can be stored.
- Feature: With the new
add_artifact
function files can be added to a run - That will fire an
artifact event
and they will also be stored in the database by the MongoObserver.
- Feature: With the new
- Feature: Files can be opened through the experiment using
open_resource
, - which will fire a
resource_event
and the file is automatically saved to the database by the MongoObserver
- Feature: Files can be opened through the experiment using
- Feature: Collections used by the MongoObserver can now have a custom prefix
- Feature: MongoObserver saves all sources as separate files to the database
- using GridFS
- Feature: Sources and package dependencies can now also be manually added
- Feature: Automatically collect imported sources and dependencies also from
- ingredients
- Feature: added print_dependencies command
- Feature: With the
--debug
flag Sacred now automatically enters - post-mortem debugging after an exception.
- Feature: With the
- Feature: Only filter the stacktrace if exception originated outside of Sacred
- Feature: Allow to specify a config file (json, pickle or yaml) on the
- command-line using with.
- Feature: Normal dictionaries can now be added as configuration to experiments
- using the new
add_config
method.
- Feature: MongoObserver now tries to reconnect to the MongoDB if connection
- is lost, and at the end of an experiment writes the entry to a tempfile if the reconnects failed.
- Bugfix: Invalid config keys could crash the MongoObserver or the
- print_config command. Now they are checked at the beginning and an exception is thrown.
- Bugfix: fixed coloring of seeds modified by or entries added by named configs
- Documentation: greatly improved the examples and added them to the docs
- Bugfix: processor name was not queried correctly on OSX
- Feature: added special argument
_config
for captured functions - Feature: config entries that remain unchanged through config updates are no
- longer marked as modified by print_config
- Optimization: special arguments
_rnd
and_seed
are now only generated - if needed
- Optimization: special arguments
- Bugfix: undocumented defective feature
**config
removed from - captured functions
- Bugfix: undocumented defective feature
- Bugfix: fixed bug where indentation could lead to errors in a
ConfigScope
- Bugfix: added warning when attempting to overwrite an ingredient
- and it is ignored by Sacred
- Bugfix: fixed issue with synchronizing captured out at the end of the run.
- (before up to 10sec of captured output could be lost at the end)
- Bugfix: modifications on seed were not marked correctly by print_config
- Bugfix: changes to seed in NamedConfig would not correctly affect Ingredients
- Note that in order to fix this we removed the access to seed from all ConfigScopes. You can still set the seed but you can no longer access it from any ConfigScope including named ones. (Of course this does not affect captured functions at all.)
- Style: Lots of pep8 and pylint fixes
- First public release of Sacred