Changelog
This changelog is generated automatically from GitHub Releases.
v1.2.0
2026-06-04 · GitHub
Bug fixes for DistributionRegistry and DiscreteEmpirical, and tests for DistributionRegistry.
Added
- Add tests for DistributionRegistry.
Fixed
- Add NSPPThinning to DistributionRegistry (as it was missing).
- CombinationDistribution now allows distributions to be be passed either as positional arguments (original behaviour) or via the
distskeyword argument (new behaviour). This fixes it for DistributionRegistry, which requires keyword form for creating instances. - Amended random seed assignment in DistributionRegistry, which fixes it so it can now work with TruncatedDistribution, CombinationDistribution, FixedDistribution and NSPPThinning (as none of these require
random_seed). - DiscreteEmpirical fixed to work with different inputs (as for index or series, it would fail to run sample() without a specified
size=argument).
v1.1.0
2026-04-29 · GitHub
Add support for nested dictionaries in DistributionRegistry.
Added
- DistributionRegistry now accepts dictionaries from a nested configuration, and can return these in the nested structure if set
preserve_structure=True.
v1.0.4
2026-04-25 · GitHub
Fix to NSPPThinning sampling approach.
Fixed
- NSPPThinning.sample() fixed so that
tfalls into the the time interval where the candidate arrival will occur. This allows the correct acceptance probability to be used. Prior to this fix t was occuring in the current time interval.
Changed
- NSPPThinning now pre-computes the acceptance probabilities on initialisation. This is means that there are no repeated calculations (divisions) during a simulation run and lookup via
numpyrather thanpandas. - NSPPThinning now validates the
dataparameter: is it aDataFrame (TypeError), does it contain the correct columns (ValueError), and is it empty/have more than 1 row (ValueEror`) .
v1.0.3
2026-01-21 · GitHub
Changed
- Switched to trusted publishing for PyPI
- Migrated repository from tommonks personal to sim-tools organisation
- Updated package URLS.
v1.0.2a
2026-01-21 · GitHub
Fixed
- Bump patch number.
v1.0.2
2026-01-21 · GitHub
Fixed
- Publish to PyPI: Github action to publish to pypi modified to use release/v1 (prior version was sunsetted).
v1.0.1
2026-01-07 · GitHub
Fixed
- Type Hinting and Pylance Support: Adjusted type hinting within
[@register](https://github.com/register)decorator to enable display of docstrings, hover hints and argument suggestions.
v1.0.0
2025-11-04 · GitHub
v1.0.0
v1.0.0 centres on multi-metric support - confidence_interval_method and ReplicationsAlgorithm can now analyse multiple metrics at once, driving changes to syntax (explicit metrics argument), adapter formats, defaults, docs, plotting, and tests to support the new capability.
Added
- Multi-metric support: Both confidence_interval_method and ReplicationsAlgorithm can now process multiple metrics at once. Algorithm now requires explicit
metrics argumentand new adapter format (⚠ breaking change). - Plot improvement: plotly_confidence_interval_method now uses shaded confidence intervals (dashed still available).
- Documentation: Add a dedicated page on confidence_interval_method.
- Testing: New tests added following multiple metrics changes.
Changed
- Defaults: The default for
desired_precisionin confidence_interval_method is now 0.1 (was 0.05) for consistency with ReplicationsAlgorithm. - Protocols: Updated ReplicationsAlgorithmModelAdapter and add AlgorithmObserver to accommodate the new required format (more complex than ReplicationObserver).
- Documentation: Updated the algorithm documentation for the new syntax (e.g. new treat-sim adapter), and moved
treat-simdescription to its own page to avoid repetition. - Docstrings: Improvements in
output_analysis.py. - Testing: Amended to work with new syntax/logic of replications methods.
- Linting: Linting several files.
Fixed
- Algorithm: Now adjusts result if solution was found within initial replications.
v0.10.0
2025-08-06 · GitHub
Added
- Add
sortargument to DistributionRegistry.create_batch() for dict inputs, ensuring deterministic results if the config key order changes. - Add
_validate_and_create()to DistributionRegistry which checks that the distribution configurations are dictionaries with only two keys: “class_name” and “params”. - Add tests for the new
sortargument and_validate_and_create()method.
Changed
- Some linting of
_validation.py,time_dependent.py,distributions.pyandtrace.py.
v0.9.1
2025-08-01 · GitHub
Added
- Add unit tests for all distributions which check it uses the base class, data types and sample size are correct, that the sample mean looks right, and that the random seed is working. Some similar tests existed, but they did not cover all distributions.
- Add some specific tests for Lognormal and DiscreteEmpirical.
- Add back tests for all distributions (which check that new samples are equal to those generated previously, when random seed controlled).
Changed
- Adjusted docstrings to use a more consistent NumPy style.
- Some linting of
distributions.py.
Fixed
- DiscreteEmpirical - now allows any type of data to be included. For example, str, as well as numeric value.
v0.9.0
2025-04-21 · GitHub
Added
- distributions.DistributionRegistry - for batch creation of standard distributions from a dictionary or list.
- DOCS: DistributionRegistry explanation and examples including use of JSON to store configs.
- distributions.spawn_seeds function to support creation of PRNG streams.
- Hyperexponential - A continuous probability distribution that is a mixture (weighted sum) of exponential distributions. It has a higher coefficient of variation than a single exponential distribution, making it useful for modeling highly variable processes or heavy-tailed phenomena.
- RawContinuousEmpirical - A distribution that performs linear interpolation between data points according to the algorithm described in Law & Kelton’s “Simulation Modeling and Analysis”.
sim_tools._validation: internal module that contains common validation routines forsim_toolsfunctions and classes. #33- All distribution classes updated to include validation of input parameters. #33
- DOCS: Dedicated page for using empirical distributions.
Changed
- Distribution changed from abstract base class to
Protocol. All inheritance removed from concrete classes. #37
- Added __repr__() to all distribution classes.
- DOCS: improved docstrings for all distribution classes
- BREAKING:
Discrete-> DiscreteEmpirical - BREAKING:
RawEmpirical-> RawDiscreteEmpirical - BREAKING:
ContinuousEmpirical-> GroupedContinuousEmpirical`. To clarify the purpose of the empirical distribution - BREAKING: NSPPThinning: class now only requires “mean_iat” column in
data. Acceptance/rejection calculated using \(iat_{min} / iat(t)\)
Fixed
- Gamma fix of the calculation of the mean based on alpha and beta.
- GroupedContinuousEmpirical: silent bug when
uselects the first group. Interpolation did not work correctly and sampled out of range. This now been handled by logic pre-sample. - NSPPThinning: removed redundant outer loop from sampling.
v0.8.0
2025-03-17 · GitHub
Added
- Add
simpyandtreat-simto the environment, as these were required in the notebooks indocs/. - Add
nbqaandpylintto the environment for linting, plus a relevant fileslint.shand.pylintrc. - Add tests for
output_analysisfunctions (functional, unit and back tests). - Add validation of parameters in ReplicationsAlgorithm.
- Add validation of data type in OnlineStatistics.
Changed
- Simplified distribution value type tests to a single test where possible using
pytest.mark.parametrize. - Linted
.pyand.ipynbfiles usingpylint(most addressed, some remain unresolved). - Provided advice on tests, building docs and linting in the
README.md. 00_front_page.mdnow just importedREADME.md(reducing duplication, and keping it up-to-date).
Removed
- Removed duplicate
sw21_tutorial.ipynb.
Fixed
- Within confidence_interval_method, convert data provided to OnlineStatistics to
np.arrayso that it is actually used to update the class (when before, it was not, as it was a list).
v0.8.0
2025-03-17 · GitHub
Added
- Add
simpyandtreat-simto the environment, as these were required in the notebooks indocs/. - Add
nbqaandpylintto the environment for linting, plus a relevant fileslint.shand.pylintrc. - Add tests for
output_analysisfunctions (functional, unit and back tests). - Add validation of parameters in ReplicationsAlgorithm.
- Add validation of data type in OnlineStatistics.
Changed
- Simplified distribution value type tests to a single test where possible using
pytest.mark.parametrize. - Linted
.pyand.ipynbfiles usingpylint(most addressed, some remain unresolved). - Provided advice on tests, building docs and linting in the
README.md. 00_front_page.mdnow just importedREADME.md(reducing duplication, and keping it up-to-date).
Removed
- Removed duplicate
sw21_tutorial.ipynb.
Fixed
- Within confidence_interval_method, convert data provided to OnlineStatistics to
np.arrayso that it is actually used to update the class (when before, it was not, as it was a list).
v0.7.1
2025-02-10 · GitHub
Fixed
- Patched ReplicationsAlgorithm look ahead will now correctly use
_klimit()to calculate extra no. replications to run.
v0.7.0
2025-02-07 · GitHub
Added
output_analysismodule - focussed at the moment on selecting the number of replications- ReplicationsAlgorithm that implements the automated approach to selecting the number of replications for a single performance measures.
- ReplicationsAlgorithmModelAdapter - a
Protocolto adapt any model to work with with ReplicationsAlgorithm - confidence_interval_method - select the number of replication using the classical confidence interval method
- plotly_confidence_interval_method - visualise the confidence interval method using plotly.
- ReplicationObserver a
Protocolfor observering the replications algorithm - ReplicationTabulizer record replications algorithm in a pandas dataframe.
- Documentation for ReplicationsAlgorithm
Updated
sim-toolsdev conda environment now pip installs local python package in editable model.
v0.6.1
2024-07-30 · GitHub
Fixed
- BUILD: added
richlibrary.
Removed
- BUILD:
scipyDependency
v0.6.0
2024-07-29 · GitHub
Added
- Added nspp_plot and nspp_simulation functions to
time_dependentmodule. - DOCS: added nspp_plot and nspp_simulation examples to time dependent notebook
- DOCS: simple trace notebook
Changed
- BREAKING: to prototype trace functionality. config name -> class breaks with v0.5.0
Fixed
- THINNING: patched compatibility of thinning algorithm to work with numpy >= v2.
np.Inf->np.inf
v0.5.0
2024-06-21 · GitHub
Added
Fixed
- DIST: fix to NSPPThinning sampling to pre-calcualte mean IAT to ensure that correct exponential mean is used.
- DIST: normal distribution uses minimum value instead of resampling on negative value.
v0.4.0
2024-04-17 · GitHub
Changes
- BUILD: Dropped legacy
setuptoolsand migrated package build tohatch - BUILD: Removed
setup.py,requirements.txtandMANIFESTin favour ofpyproject.toml
v0.3.3
2024-02-07 · GitHub
PATCH:
- PATCH:
distributions.Discretewas not returning numpy arrays.
v0.3.2
2024-02-06 · GitHub
PATCH:
- Update Github action to publish to pypi. Use setuptools instead of build
v0.3.1
2024-02-06 · GitHub
PATCH:
- PYPI has deprecated username and password. PYPI Publish Github action no works with API Token
v0.3.0
2024-02-06 · GitHub
Changes:
- Distributions classes now have python type hints.
- Added distributions and time dependent arrivals via thinning example notebooks.
- Added
datasetsmodule and function to load example NSPP dataset. - Distributions added
- Erlang (mean and stdev parameters)
- ErlangK (k and theta parameters)
- Poisson
- Beta
- Gamma
- Weibull
- PearsonV
- PearsonVI
- Discrete (values and observed frequency parameters)
- ContinuousEmpirical (linear interpolation between groups)
- RawEmpirical (resample with replacement from individual X’s)
- TruncatedDistribution (arbitrary truncation of any distribution)
- Added sim_tools.time_dependent module that contains NSPPThinning class for modelling time dependent arrival processes.
- Updated test suite for distributions and thinning
- Basic Jupyterbook of documentation.
v0.2.1
2023-11-23 · GitHub
Changes
Patches
- Modified Setup tools to avoid numpy import error on build.
- Updated github action to use up to date actions.
v0.2.0
2023-11-23 · GitHub
Added
sim_tools.distributionmodule. This contains classes representing popular sampling distributions for Discrete-event simulation. All classes encapsulate anumpy.random.Generatorobject, a random seed, and the parameters of a sampling distribution.Python has been updated, tested, and patched for 3.10 and 3.11 as well as numpy 1.20+
Minor linting and code formatting improvement.
v0.1.4
2021-07-05 · GitHub
v0.1.3 broke ovs.indifference_zone due to name change of function (imported but not used). This dependency has been removed.
v.0.1.3
2021-07-05 · GitHub
fix for spelling mistake in ovs.toy_models functions that create sequences of Gaussian models. guassian -> gaussian
v0.1.2
2021-03-17 · GitHub
Minor updates to SW21 tutorial sim_tools.ovs.toy_model.ManualOptimiser updated. .sigmas -> vars
v0.1.1
2021-02-21 · GitHub
Cleaned up readme.md Badge links for OVS to Google Colab. Citation information.
v0.1.0
2021-02-20 · GitHub
Initial release.