All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
6.1.3 - 2026-03-07
- Switch to
uv(including build backend).
6.1.2 - 2026-03-03
- Fix
rics kernelsometimes producing invalid kernel names.
6.1.1 - 2026-01-17
- Various docstrings.
- Expose the
MakeDicttype (was already "exposed" throughrics.collections.dict.MakeType).
6.1.0 - 2025-12-08
- New class
strings.ReprFormatter. - Function
strings.format_kwargs(), backed bystrings.ReprFormatter.
- The
misc.format_kwargs()now delegates tostrings.format_kwargs(), and will be deprecated in0.7.0.
6.0.4 - 2025-10-25
- Python
3.14is now fully tested and supported in CI/CD.
- Fix handling
format_kwargs(max_value_length=0)and clarify docstring.
6.0.3 - 2025-07-30
- In
get_public_module():- Handle objects defined in
'__main__'. - Handle objects with no public exports (fall back to full private path).
- Handle objects defined in
6.0.2 - 2025-07-27
- CLI fixes for
rics kernel:- Ensure that
VIRTUAL_ENVis unset (not just blank) when running commands; caused Poetry to purge venv. - Increase package install timeout.
- Ensure that
6.0.1 - 2025-06-25
- Add missing space in
format_seconds(t <= 60.0)output, e.g. '12ms' → '12 ms'.
6.0.0 - 2025-06-20
- Make
pandasan optional dependency. - Args
run_multivariate_test(time_per_candidate, plot)are now kw-only.
- The
rics.envinterpmodule. - The
mics.interpolate_environment_variables()function.
5.1.2 - 2025-06-14
- Fix crashes when using
python -OO.
5.1.1 - 2025-06-12
- CLI updates
- Fix immediate crash when
seabornis missing. - Added
rics timeit --no-plot(defaultFalse) to allowtimeitwithout seaborn.
- Fix immediate crash when
- CLI
rics kernelupdates- Fix uv detection.
- Fix nested venv issues.
5.1.0 - 2025-05-29
- Add
logs.FORMAT_SEC, renameFORMAT->FORMAT_MS. - New class
logs.LoggingSetupHelper. - New functions
logs.get_logger()andconvert_log_level(). - New naive functions
strings.camel_to_snake()andsnake_to_camel(). - New class
types.LiteralHelper[T]. - New wrapper functions
types.verify_literal()andverify_enum(). - New module
rics.env:- Added
read-functions for primitive types;read_bool(),read_int,read_enum(). - Added
types.LiteralHelper[T].read_env().
- Added
- New function
strings.str_as_bool(). - New module
rics.click. - The
MultiCaseTimernow supports callabletest_dataargs to generate data. - Finished new
rics.performanceplotting implementation (support facets).
-
Update
basic_config.basic_config(): Allow and handlelevel=Noneto avoid logging from root. -
The
misc.get_by_full_name()function now supports reading member attributes. Uses entrypoint syntax, e.g.pandas:DataFrame.sum. -
Moved some functions to new
rics.envmodule:- Moves implementation
rics.envinterp->rics.env.interpolation. - Moved implementation of
misc.interpolate_environment_variables()->env.interpolation.replace_in_string().
Aliases above will be deprecated in
0.6.0and removed in0.7.0. - Moves implementation
-
Added
strings.format_seconds(full=False); round to nearest minute for durations above four hours.
- Calling
MultiCaseTimer.run(number=<int>)no longer crashes. - Calling
tname()withprefix_classname=Truewhenargis an inherited instance method (e.g.pd.Series().describe) now uses the child name. This parent is still shown for methods of uninitialized child types (e.g.pd.Series.describe).
5.0.1 - 2025-02-01
- Fix RTD build. Docs for
5.0.0are not available, but5.0.1docs are identical.
5.0.0 - 2025-02-01
- Argument
include_module=Falsefor functionmisc.tname(). - New function
plotting.percentage_ticks()
- Handling of gh-101860 (new
@property.__name__) under 3.13 inmisc.tname()andmisc.get_public_module().
4.1.1 - 2024-06-29
- Fix handling of
paths.parse_any_path()bool-type postprocessors (raise onFalse).
4.1.0 - 2024-05-25
- New module
rics.paths;paths.parse_any_path(), derived functionsany_path_to_str()andany_path_to_path(). - New module
rics.strings. Movedformat_perf_counter()andformat_seconds(). - New function
strings.format_bytes(). - New function
rics.collections.dicts.format_changed_keys().
- Module
rics.ml.time_split. use thetime-splitpackage instead.
- Functions
rics.performance.format_perf_counter()andformat_seconds(). Userics.strings-functions instead.
4.0.1 - 2024-03-21
- Fix RTD build. Docs for
4.0.0are not available, but4.0.1docs are identical.
4.0.0 - 2024-03-21
- Python
3.12is now fully tested and supported in CI/CD. - New support module
time_split.integration.split_data. - New
time_splitintegration:integration.polars.split_polars.
- Python minimum version is now
3.11(was3.8). - The
time_splitPandas integration no longer supports theinclusive=left|right|neitherargument (now alwaysleft). - Updates to
rics.performance:- Functions and classes are now generically typed.
- Implement optional progress bars.
- Added new plotting backend (experimental).
- Select suitable time unit automatically when plotting (was: milliseconds).
- Module
rics.mappingwas previously deprecated and has now been removed. - Module
rics.pandaswas previously deprecated and has now been removed. - Module
rics.strings(usestrmethods instead).
3.3.0 - 2024-02-11
- The
get_by_full_name()function has two new optional argumentsinstance_ofandsubclass_of, which may be used to ensure correct return types. - The
unflatten_dict()function now supportstuplekeys. - The
logs.disable_temporarily()function now support passing loggers by name.
- Print parent of inner class in
misc.tname()whenprefix_classname=True. - Prefer later folds when using frequency-based schedule and after arguments (
ml.time_split, #313).
3.2.0 - 2023-10-17
- Add new
stepargument toml.time_splitsplitting functions. - Add new
plot.REMOVED_FOLD_STYLEattribute totime_split.settings.
- Update, fix and clarify some documentation issues.
- The
misc.tname()-function now handlesfunctools.partialproperly (new argumentattrs='func').
3.1.0 - 2023-10-13
- New module
rics.ml.time_split; successor topandas.TimeFold. - Function
collections.dicts.unflatten_dict(); inverse offlatten_dict(). - Function
misc.get_public_module(); resolve public module name of an object, optionally looking for reexports. - Function
misc.format_kwargs(); pretty-print keyword arguments.
- The
flatten_dict()-function now takes astring_fn-argument (default=str). - Update format used for durations in
rics.performance.
- The
rics.pandas.TimeFoldclass. Replaced byrics.ml.time_split.
- Handle
LoggerAdapterinlogs.disable_temporarily(). - Handle improve handling of '{}' (e.g. Python fstrings) in
envinterp. - Handle properties in
misc.tname.
3.0.1 - 2023-03-25
- Deprecated
rics.mapping.
- Fixed some minor
TimeFoldissues. TimeFold.make_sklearn_splitter.splitandTimeFold.plotnow handle datetime-like iterables correctly.
3.0.0 - 2023-03-09
- The
score_functions.disabled()function, used to force aMapperto work in override-only mode. - An optional argument
for_valueto theheuristic_functions.value_fstring_alias()function. - The
Mapper.copy()-method now accepts keyword override arguments. - The
envinterpmodule andmisc.interpolate_environment_variables()function (replacesread_env_or_literal())
- Add
n_splitsargument toTimeFold(scikit-learn compatibility). - Raise
AmbiguousScoreErrorif match scores do not allow deterministic mapping. - Add a small positional penalty in
HeuristicScore, to favor alias functions that are defined early. - Add a small positional penalty in
modified_hamming, to favor candidates that are defined early. - Reduce default value of
Mapper.min_score(from 1.0 to 0.9). - Updated
Mapperverbosity flag to be consistent. Now calledverbose_loggingeverywhere.
- The
heuristic_functions.candidate_fstring_alias()function may now properly use value and context placeholders. - Properly raise exceptions in
[value/candidate]_fstring_aliasfor invalidfstringarguments. - Added missing checks in
Mapper.__eq__().
- The
misc.read_env_or_literal()function has been replaced byrics.misc.interpolate_environment_variables().
2.1.0 - 2023-02-11
- Update log levels in
logs.basic_config(). - Move legend outside figure in
rics.performance.plot_run() - Only show the best overall candidates (per dataset) when using
mtimeit/run_multivariate_test()by default. - Add optional
axargument toTimeFold.plot().
- Fixed behaviour of
TimeFold.plot()in Jupyter notebooks. This function now returns anAxesobject instead of aFigure, which prevents figures from being shown twice in notebooks. Technically a breaking changes, but will be treated as a bugfix. - Adjust figure height based on number of folds in
TimeFold.plot(), unlessfigsizeis given. - Suppress fold log messages in
TimeFold.plot().
2.0.0 - 2022-11-30
- The
Mapper.copymethod.
- Flatten/remove
rics.utility; promote all modules to top-level members. Mapper.applynow requirecontextwithInheritedKeysDict-type overrides.
- Fixed exact value-candidate match short-circuiting in
HeuristicScore.
- All
rics.translationmodules. Use id-translation instead.
1.0.1 - 2022-11-26
- Deprecate
rics.translation. Use id-translation instead.
1.0.0 - 2022-11-26
- The
logs.disable_temporarilyfunction (returns a context manager). - Permit creation of derived classes with
Translator.from_config. - Flesh out description of the
Translatabletype variable. - Ability for the perftest CLI program to create and run dummy tests.
- Utility method
utility.pandas.TimeFold.iter: Create temporal k-folds from a heterogeneousDataFrame. - Make SqlFetcher engine creation more customizable.
- Add
SqlFetcher.create_engine, which my be overridden. - Add optional
engine_kwargsinit argument.
- Add
- Change definition of
Mapper.context_sensitive_overrides; now alsoTruefor blank overrides regardless of type. - Discard useless (no-source) fetchers in
MultiFetcher. - The
SqlFetcherclass now always includes the engine information in log messages. - The
utility.misc.tname-method now also considers__name__before falling back to__class__.__name__. - The
utility.configure_stuff-method now also sets the pandasfloat_formatoption. - Renamed perftest CLI program to
mtimeit(was:rics-perf). - Feature gate all CLI functionality behind the new
cliextra.
- Properly handle empty whitelists in
SqlFetcher. Used to treat empty whitelist as no whitelist.
0.17.0 - 2022-09-29
- Option to print classname for functions when using
misc.tname. - Property
Translator.sources - The
Translator.map_scoresmethod. May be used to fetch the raw name-to-source match score matrix.
- Print less duplicate information in
Mapper.compute_scoresandMapper.apply. - Make
Mapper.compute_scoresandMapper.applyrespect the iteration order of its arguments when there are match conflicts. - Improve messaging when translation is aborted due to mapping failure.
0.16.1 - 2022-09-23
- Switch from
tomltotomlifor readingTranslatorconfig files. - Improve documentation for troubleshooting mapping issues
- The
utility.logs.basic_config-function now properly uses theformatanddatefmtarguments.
0.16.0 - 2022-09-12
- Improved handling of NaN IDs. Move all NaN handling in
AbstractFetcherto theTranslator. - Raise a
MappingErrorfor ambiguous name-to-source mapping.
- The
AbstractFetcherno longer treats zero-length ID collections as a fetch-all instruction. - Cast
floattointwhen extracting IDs from a pandasDataFrameorSeries.
0.15.3 - 2022-09-05
- Respect index order in
MatchScores.to_directional_mapping.
0.15.2 - 2022-09-05
- Make sure
Mapper.compute_scoresscore respects given value/candidate order.
0.15.1 - 2022-09-02
- Added
duplicate_key_actionarg toutility.dicts.reverse_dict
- Duplicate derived names for candidates in for perftests.
- Improve handling for optional
Formatblocks (#52). Nested optional blocks are not supported.
0.15.0 - 2022-08-01
- Verbosity-flags to control high-volume mapping function invocation logging.
- Mapping primer page to the docs.
- Multiple improvements to the
Mapperclass through a newmapping.supportmodule:- Improved logging capabilities.
- Force respecting
cardinalityargument inMapper.apply(fewer errors are raised). - Allow users to retrieve raw score matrices (
Mapper.compute_scores). - Improved documentation and added new links is multiple places.
- Possibility to override select filtering logic;
SqlFetcher.selection_filter_type. - An optional
add_length_ratio_termargument toscore_functions.modified_hamming. - The
utiltiy.collections.as_listfunction for wrapping in/casting to list - Support for translating an attribute of
translatableinTranslator.translate.- Names may be inherited from the parent (ie a pandas
Indexmay inherit the name of the series)
- Names may be inherited from the parent (ie a pandas
- Cookbook recipes for translating dict keys and Pandas index types.
- Translation of
pandas.Indextypes. - The
translation.testingmodule. - Experimental and hacky implementation of translation for nested sequences.
- Entry point
rics-perffor multivariate performance testing, taking candidates from./candidates.pyand test case data from./test_data.py.
- Rename
Translator.map_to_sources->map. - Simplify
Translator.translatesignature.- Names must now be explicit names or None (use heuristics to filter names).
- Simplify multiple docstrings.
- Permit
Translatorinstances to be created with explicit fetch data. Translations will be generated based on the inputs by using aTestFetcherinstance. Functionality in this mode is limited. - Performance testing figures updated; now shows best result as well.
- An unnecessary restriction on runtime override functions in
Mapper - The
fetching.support.from_recordsmethod. Fixes spurious exceptions fromPandasFetcher(#99). - Dunder
Mapper.__call__. - Expected runtime checks for perftests.
- An issue when using integers as explicit names to translate.
- It is now possible to use one name per element when translating sequences.
- Perftest argument
time_per_candidatenow used correctly. - Filter out
NaNvalues inAbstractFetcher.
0.14.0 - 2022-07-17
- Added home page shortcuts.
- Rename 'default_translations' and 'default' arguments to 'default_fmt_placeholders' .
- Remove placeholder limitation on default translation format.
- Fixed issue when copying a
Translatorwith translation and/orFormatoverrides. - A number of docstring and under-the-hood fixes.
0.13.0 - 2022-07-10
Bump development status to Development Status :: 3 - Alpha on PyPi.
Switched to the PyData Sphinx theme and enabled automatic summaries.
- Name of
OfflineErrorchanged toConnectionStatusError. - Moved
Cardinalityto themappingnamespace. - Move
utility.perfup one level. - Swapped generic
TypeVarorder forIdTypeandSourceTypeto match the name -> source -> ID hierarchy.
- Implement override functions in
Mapper.apply.- Also: Partial implementation of override functions for name-to-source mapping in
Translator.translate.
- Also: Partial implementation of override functions for name-to-source mapping in
- Implement reverse translations. Added
reverseargument toTranslator.translateto translate from translations back to IDs. - An option
maximal_untranslated_fractionto raise an error if translation fails for too many IDs inTranslator.translate. - Make it possible to initialize
Fetchers from arbitrary packages inTranslator.from_config. - Make it possible configure
ScoreFunctions,FilterFunctions andAliasFunctions from arbitrary modules . (still defaults to package functions). - The
py.typedmarker (PEP-561 compliance). - Additional
types-modules for typehint imports.
- Numerous doc fixes.
0.12.2 - 2022-07-04
- Fixed chained alias functionality for
HeuristicScore.
0.12.1 - 2022-07-04
Botched release.
0.12.0 - 2022-07-03
- Changed
like_database_tablefrom score function to alias function. - Thread safety: Change 'candidates' from init/property to
Mapper.applyarg. - Remove
store/restoreserialize argument. Default path is now None forTranslator.store.
0.11.1 - 2022-07-02
Documentation and docstring fixes.
- A TOML Configuration section to docs.
0.11.0 - 2022-07-01
- Convenience functions for (de)serializing
Translatorinstances.
- Broken docs.
0.10.2 - 2022-07-01
Try to restore the translation API docs.
0.10.1 - 2022-06-30
- The
Translatorretrieving incorrect sources in offline mode.
0.10.0 - 2022-06-30
Refactor scoring functions.
- The
HeuristicScoreclass, which enables filter-based short-circuiting and alias heuristics for score functions.
- The
filter_functions.score_with_heuristicsfunction; replaced by the more generalHeuristicScoreclass.
- Make
translation.factorymodule public. - Rename
MappingScoreFunction->ScoreFunction. - Add a third mandatory
contextparameter to all mapping functions. Thesourceargument has been removed.
- Fix handling logging of duplicate source discovery in MultiFetcher.
- Allow empty fetching section in main config file when extra_fetchers are given.
0.9.0 - 2022-06-28
- Short-circuiting logic to
filter_functions.score_with_heuristics.
- Some scoring stuff and related logging.
0.8.1 - 2022-06-28
- Fix unwanted case-sensitivity in
filter_functions.score_with_heuristics. - Allow user-defined cardinality in config files.
- Missing
Cardinality.parse(str)case.
0.8.0 - 2022-06-28
- Support for fetching using multiple fetchers using the
MultiFetcherclass (#44). - The
fetching.typesmodule. - The
Fetcherinterface. The oldFetcherclass in now calledAbstractFetcher. - The
action_level.ActionLevelenum type.
- Refactor score and filter functions (
mapping-module) to increase flexibility and cover more use cases (#57, #58).
0.7.0 - 2022-06-21
- The
InheritedKeysDictclass. - Integration of
Mapperin theFetcherfor programmatic placeholder-mapping. - Filtering logic for
Mapper. - The
plottting.pi_ticks-function to plot an (X-)axis in terms of PI. - Dvdrental testcase and docs running against a docker DB (not in CI)
- More plotting functions.
- Improved dependency management. Added new dependency groups
translationandplottingto be installed as extras.
0.6.0 - 2022-06-17
- Copy method for
Translator.copy(**overrides).
- Switch from YAML to TOML for
Translator.config.
0.5.0 - 2022-06-14
A large number of changes, bugfixes and stability improvements. Only the most important ones are listed here.
- Implement shared default translations (#31).
- Implement in-place translation for sequences (
list,pandas.Series,numpy.array). - Allow alternative use of translation format with an ID placeholder, even if the main doesn't include it.
- Add an option to run
Translator.storewith explicit data to cache. - Implement alternative format for unknown IDs.
- Dict utility methods in
rics.utility.collections.
- SqlFetcher: Break out potentially expensive operations into overridable methods
- Replace suffix
_log_level->_levelinbasic_config
- Fix name extraction for
pandas.Series
0.4.0 - 2022-03-24
- The
rics.utility.plottingmodule.
0.3.2 - 2022-03-17
- The
Translator.fetchfunction for retrieving IDs.
- Revert bad commit.
- Fix an issue in
PandasFetcher. - Some
SqlFetcherwarning messages.
0.3.1 - 2022-03-17
- Readme links.
0.3.0 - 2022-03-17
- Update
get_local_or_remote- remote root mandatory, default to cwd for local root.
- Make it possible to use predicates for
namesandignore_nameinTranslator.translate. - Add
Translator.map_to_sourcesto get name-to-source mapping without translating data.
- Translation using formats which don't include the
idplaceholder.
0.2.0 - 2022-03-15
- Update
Fetcherreturn format from dict-of-lists to matrix (performance optimization).
- Database table discovery (gathers metadata like size and columns) for
SqlFetcher. - Add selection logic (used to always fetch everything) for
SqlFetcher. - Implement translations of
pandas.Series. - The
rics.utility.perfpackage for multivariate (dataxfunctions) performance testing.
- Fix fetching only required placeholders in
SqlFetcher.
0.1.0 - 2022-03-12
First release on PyPI!
- The
rics.utilitypackage for various common operations. - The
rics.translationpackage suite for translating IDs into human-readable labels. - The
rics.mappingpackage for linking elements in multiple directions. - The
rics.cardinalitypackage; enum types for1:1,1:N,N:1, andM:N.