Change log#
Show code cell source
# We import the changelog to avoid keeping duplicate copies in the project root
# and in the docs/ folder for the JupyterBook.
# JupyterBook doesn't support including .md files from the docs/ parent, so it
# is instead imported within an .ipynb file.
from IPython.display import Markdown, display
# Import the changelog
with open("../CHANGES.md") as f:
lines = f.readlines()
# Skip the first line (the title)
content = ''.join(lines[1:]).lstrip()
# Display the rest of the changelog
display(Markdown(content))
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. Dates formatted as YYYY-MM-DD as per ISO standard.
Consistent identifier (represents all versions, resolves to latest):
Unreleased
Added
Add
sortargument toDistributionRegistry.create_batch()for dict inputs, ensuring deterministic results if the config key order changes.Add
_validate_and_create()toDistributionRegistrywhich 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
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
LognormalandDiscreteEmpirical.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 
Added
distributions.DistributionRegistry- for batch creation of standard distributions from a dictionary or list.DOCS:
DistributionRegistryexplaination and examples including use of JSON to store configs.distributions.spawn_seedsfunction 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.All distribution classes updated to include valudation of input parameters.
DOCS: Dedicated page for using empirical distributions.
Changed
Distributionchanged from abstract base class toProtocol. All inheritance removed from concrete classes.Added
__repr__()to all distribution classes.DOCS: improved docstrings for all distribution classes
BREAKING:
Discrete->DiscreteEmpiricalBREAKING:
RawEmpirical->RawDiscreteEmpiricalBREAKING:
ContinuousEmpirical-> GroupedContinuousEmpirical`. To clarify the purpose of the emprical distributionBREAKING:
NSPPThinning: class now only requires “mean_iat” column indata. Acceptance/rejection calcualted using $iat_{min} / iat_(t)$
Fixed
Gammafix of the calculation of the mean based on alpha and beta.GroupedContinuousEmpirical: silent bug whenuselects 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 
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 toOnlineStatisticstonp.arrayso that it is actually used to update the class (when before, it was not, as it was a list).
v0.7.1 
Fixed
Patched
ReplicationsAlgorithmlook ahead will now correctly use_klimit()to calculate extra no. replications to run.
v0.7.0 
Added
output_analysismodule - focussed at the moment on selecting the number of replicationsReplicationsAlgorithmthat implements the automated approach to selecting the number of replications for a single performance measures.ReplicationsAlgorithmModelAdapter- aProtocolto adapt any model to work with withReplicationsAlgorithmconfidence_interval_method- select the number of replication using the classical confidence interval methodplotly_confidence_interval_method- visualise the confidence interval method using plotly.ReplicationObserveraProtocolfor observering the replications algorithmReplicationTabulizerrecord 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 
Fixed
BUILD: added rich library.
Removed
Scipy Dependency
v0.6.0 
Added
Added
nspp_plotandnspp_simulationfunctions totime_dependentmodule.DOCS: added
nspp_plotandnspp_simulationexamples to time dependent notebookDOCS: 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 
Added
EXPERIMENTAL: added
tracemodule withTraceableclass for colour coding output from different processes and tracking individual patients.
Fixed
DIST: fix to
NSPPThinningsampling to pre-calcualte mean IAT to ensure that correct exponential mean is used.DIST: normal distribution allows minimum value and truncates automaticalled instead of resampling.
v0.4.0 
Changed
BUILD: Dropped legacy
setuptoolsand migrated package build tohatchBUILD: Removed
setup.py,requirements.txtandMANIFESTin favour ofpyproject.toml
v0.3.3 
Fixed
PATCH:
distributions.Discretewas not returning numpy arrays.
v0.3.2 
Changed
Update Github action to publish to pypi. Use setuptools instead of build
v0.3.1 
Fixed
PYPI has deprecated username and password. PYPI Publish Github action no works with API Token
v0.3.0 
Added
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
NSPPThinningclass for modelling time dependent arrival processes.Updated test suite for distributions and thinning
Basic Jupyterbook of documentation.
v0.2.1 
Fixed
Modified Setup tools to avoid numpy import error on build.
Updated github action to use up to date actions.
v0.2.0 
Added
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.
Changed
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.