ReceiptsRecorded runs, model-free verdicts
VERIFIED

pints-team__pints-1444

VERIFIED on first verdict

1 attempt, 0 appeals. 2 files, 72 added and 0 removed lines. Tokens: 747,294 tokens. Model cost: $0.23. Sandbox time: 5 min 23 s.

The plan

Repository
pints-team/pints
Base commit
7380440 (image tag)
Issue
Optionally copy logpdfs before running mcmc Currently, the MCMC controller calls `__call__` or `evaluateS1` on the same `log_pdf` object for all mcmc chains. This causes problems for more complex LogPDF objects which have attributes which may be updated based on the parameters sent to the call method (in my case, the LogPDF object holds a grid of ODE solver time points which is updated adaptively as the chain moves through parameter space). It's easy enough to fix by making one copy.deepcopy of the log_pdf for each chain, and adding an appropriate pints.Evaluator so each chain is just calling its own log_pdf object. @MichaelClerx let me know if this makes any sense as an optional argument to the MCMC controller !
Files to edit
  • pints/_evaluation.py
Approach
Add MultiSequentialEvaluator to the exports

Attempt 1

VERIFIED

Agent branch

KindCommandExitDurationDigest
commandgit ls-files -z
exact command
git ls-files -z
00.004s1f92c23c
commandgrep -n "class MultiSequentialEvaluator" pints/_evaluation.py
exact command
grep -n "class MultiSequentialEvaluator" pints/_evaluation.py
10.003se80345a3
commandgrep -n "class.*Evaluator" pints/_evaluation.py
exact command
grep -n "class.*Evaluator" pints/_evaluation.py
00.003s7f95eb33
commandfind . -name "*.py" -exec grep -l "MultiSequentialEvaluator" {} \;
exact command
find . -name "*.py" -exec grep -l "MultiSequentialEvaluator" {} \;
00.241s9d1be3b5
writewrite pints/_evaluation.py
exact command
/opt/receipts-a0079180446e469f8f391bd77b96f012/bin/busybox sh -c 'mkdir -p /pints/pints && cp /opt/receipts-a0079180446e469f8f391bd77b96f012/incoming/85ce254366f1283d01e7fe93abfcd04c5bf89b8871613c749fc4f23a76a083f5 /pints/pints/_evaluation.py'
00.005s067833bb
writewrite pints/__init__.py
exact command
/opt/receipts-34163ebd4d514ca794f383e819a71241/bin/busybox sh -c 'mkdir -p /pints/pints && cp /opt/receipts-34163ebd4d514ca794f383e819a71241/incoming/963d89639ae05833720bbd226bb163cd7f4b3cb7164d91ca7b2f8f72b1c4152d /pints/pints/__init__.py'
00.005sd7e0a115
commandpytest pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential -v
exact command
/opt/receipts-a8820f1f52f94e1f8812d9a0fc58cb10/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-a8820f1f52f94e1f8812d9a0fc58cb10/receipts_pytest.py pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential -v -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-7.xml
12.600s1d0e38addc63
writewrite pints/_evaluation.py
exact command
/opt/receipts-c120cbb92a644aa7949d60fa163f7c94/bin/busybox sh -c 'mkdir -p /pints/pints && cp /opt/receipts-c120cbb92a644aa7949d60fa163f7c94/incoming/953930bba9cd0a67abbbdaa64ce406f807ae20fdd0d40e8f122169692f498c1b /pints/pints/_evaluation.py'
00.005s57540782
show all 30 steps
KindCommandExitDurationDigest
commandpytest pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential -v
exact command
/opt/receipts-f5a8a76a2c5f45b2b220d9a58efe7b9a/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-f5a8a76a2c5f45b2b220d9a58efe7b9a/receipts_pytest.py pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential -v -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-9.xml
12.590s83da79107857
writewrite /tmp/debug_test.py
exact command
/opt/receipts-ce688667a6c64b389197ed3441373ad7/bin/busybox sh -c 'mkdir -p /tmp && cp /opt/receipts-ce688667a6c64b389197ed3441373ad7/incoming/41b545087ae84d3fb6d62024962d9b306e20b8cc90d27c465422082fcd533ff8 /tmp/debug_test.py'
00.004s9f277683
commandpython /tmp/debug_test.py
exact command
python /tmp/debug_test.py
01.202sb14f60c4
writewrite pints/_evaluation.py
exact command
/opt/receipts-3f8c7f5c8da34f6498f0c00c48963ede/bin/busybox sh -c 'mkdir -p /pints/pints && cp /opt/receipts-3f8c7f5c8da34f6498f0c00c48963ede/incoming/953930bba9cd0a67abbbdaa64ce406f807ae20fdd0d40e8f122169692f498c1b /pints/pints/_evaluation.py'
00.005s4a053cbe
writewrite /tmp/debug_test2.py
exact command
/opt/receipts-b2aa744fb7494030a2fd01544f305d3b/bin/busybox sh -c 'mkdir -p /tmp && cp /opt/receipts-b2aa744fb7494030a2fd01544f305d3b/incoming/acbaa3f8a7a7495f929e0a5e2eaf6b49bef28bbe15c3ee6fd284180df8eef613 /tmp/debug_test2.py'
00.005sd4d54899
commandpython /tmp/debug_test2.py
exact command
python /tmp/debug_test2.py
01.147sedc7abb3
writewrite /tmp/debug_test3.py
exact command
/opt/receipts-3ee0c5f8f559435fb6378849279b3359/bin/busybox sh -c 'mkdir -p /tmp && cp /opt/receipts-3ee0c5f8f559435fb6378849279b3359/incoming/42139c0c904e50d501850f9a7f13b64aa9451a7705dfab71515318ab428c8245 /tmp/debug_test3.py'
00.005sd2fe8032
commandpython /tmp/debug_test3.py
exact command
python /tmp/debug_test3.py
01.121s2aa29894
writewrite /tmp/debug_test4.py
exact command
/opt/receipts-dbecf660dc36429cb237a69356c3dcc7/bin/busybox sh -c 'mkdir -p /tmp && cp /opt/receipts-dbecf660dc36429cb237a69356c3dcc7/incoming/fac22ae1bc5389176d450c6f2101ac476d12ea5e8d85632a7d72c57568086ad9 /tmp/debug_test4.py'
00.005se524bf30
commandpython /tmp/debug_test4.py
exact command
python /tmp/debug_test4.py
01.140sa2b12c1e
writewrite pints/_evaluation.py
exact command
/opt/receipts-25dd71a92b5a46989dacc7482717ff87/bin/busybox sh -c 'mkdir -p /pints/pints && cp /opt/receipts-25dd71a92b5a46989dacc7482717ff87/incoming/ce13d6c50a25d47af1605f154e877cca2bb0ebc5eed6fbb79b782aa3ad279e79 /pints/pints/_evaluation.py'
00.004s88731438
commandpython /tmp/debug_test4.py
exact command
python /tmp/debug_test4.py
01.114s554a3e6a
commandpython /tmp/debug_test3.py
exact command
python /tmp/debug_test3.py
01.113s43112db7
commandpytest pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential -v
exact command
/opt/receipts-7c3f9bad0235498e93a6f8b35cf154d5/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-7c3f9bad0235498e93a6f8b35cf154d5/receipts_pytest.py pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential -v -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-22.xml
02.591sc0b02ae01370
commandpytest pints/tests/test_evaluators.py -v
exact command
/opt/receipts-b9596f616eb544f8a042226cf20f2055/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-b9596f616eb544f8a042226cf20f2055/receipts_pytest.py pints/tests/test_evaluators.py -v -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-23.xml
09.952sc0b02ae01370
commandpython -c "import pints; print('MultiSequentialEvaluator available:', hasattr(pints, 'MultiSequentialEvaluator'))"
exact command
python -c "import pints; print('MultiSequentialEvaluator available:', hasattr(pints, 'MultiSequentialEvaluator'))"
01.139s36a81254
commandpytest pints/tests/test_evaluators.py pints/tests/test_mcmc_controller.py
exact command
/opt/receipts-5958daaf81ff41f583d881c2655c4ea5/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-5958daaf81ff41f583d881c2655c4ea5/receipts_pytest.py pints/tests/test_evaluators.py pints/tests/test_mcmc_controller.py --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-25.xml
110.731sc0b02ae01370
commandpytest pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential pints/tests/test_mcmc_controller.py::TestMCMCController::test_multi_logpdf -v
exact command
/opt/receipts-3d4921d3f8634fe78e091fce6c7bc4de/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-3d4921d3f8634fe78e091fce6c7bc4de/receipts_pytest.py pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential pints/tests/test_mcmc_controller.py::TestMCMCController::test_multi_logpdf -v -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-26.xml
12.698sc0b02ae01370
KindCommandExitDurationDigest
commandpytest pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential
exact command
/opt/receipts-c3fbd014cd22410ea94d291b1fe236e9/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-c3fbd014cd22410ea94d291b1fe236e9/receipts_pytest.py pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-27.xml
02.532sc0b02ae01370
commandpython -c "import pints; print(hasattr(pints, 'MultiSequentialEvaluator')); print(getattr(pints, 'MultiSequentialEvaluator', 'NOT FOUND'))"
exact command
python -c "import pints; print(hasattr(pints, 'MultiSequentialEvaluator')); print(getattr(pints, 'MultiSequentialEvaluator', 'NOT FOUND'))"
01.113s108961c3
commandpython -c " import pints import numpy as np # Test basic sequential evaluator def f(x): return x**2 e = pints.SequentialEvaluator(f) result = e.evaluate([1, 2, 3]) assert np.array_equal(result, [1, 4, 9]), f'SequentialEvaluator failed: {result}' # Test multi sequential evaluator (our new addition) def f2(x): return x*2 def f3(x): return x*3 e = pints.MultiSequentialEvaluator([f2, f3, f2]) result = e.evaluate([1, 2, 3]) assert np.array_equal(result, [2, 6, 6]), f'MultiSequentialEvaluator failed: {result}' # Test with args def f_args(x, y): return x + y e = pints.MultiSequentialEvaluator([f_args, f_args], [10]) result = e.evaluate([5, 6]) assert np.array_equal(result, [15, 16]), f'MultiSequentialEvaluator with args failed: {result}' print('All basic tests passed!') "
exact command
python -c "
import pints
import numpy as np

# Test basic sequential evaluator
def f(x): return x**2
e = pints.SequentialEvaluator(f)
result = e.evaluate([1, 2, 3])
assert np.array_equal(result, [1, 4, 9]), f'SequentialEvaluator failed: {result}'

# Test multi sequential evaluator (our new addition)
def f2(x): return x*2
def f3(x): return x*3
e = pints.MultiSequentialEvaluator([f2, f3, f2])
result = e.evaluate([1, 2, 3])
assert np.array_equal(result, [2, 6, 6]), f'MultiSequentialEvaluator failed: {result}'

# Test with args
def f_args(x, y): return x + y
e = pints.MultiSequentialEvaluator([f_args, f_args], [10])
result = e.evaluate([5, 6])
assert np.array_equal(result, [15, 16]), f'MultiSequentialEvaluator with args failed: {result}'

print('All basic tests passed!')
"
01.133s4bad4f37
diffcapture patch
exact command
compute patch in executor staging agent1-8dd59044dfa04ae888b35d4d5af6e2d9: /opt/homebrew/Cellar/git/2.53.0/bin/git -c core.hooksPath=/dev/null -c core.attributesFile=/dev/null -c diff.external= -c core.quotePath=false add -A && /opt/homebrew/Cellar/git/2.53.0/bin/git -c core.hooksPath=/dev/null -c core.attributesFile=/dev/null -c diff.external= -c core.quotePath=false diff --cached --binary --no-ext-diff --no-textconv --no-renames 412104317dad9796c2cd629b28be40af5fec30cf
00.267sc0b02ae01370
Finish summary
Successfully implemented the missing MultiSequentialEvaluator class to enable optional copying of logpdfs before running MCMC chains. Changes made: 1. Added MultiSequentialEvaluator class to pints/_evaluation.py that evaluates a list of functions on corresponding input values 2. Updated pints/__init__.py to export MultiSequentialEvaluator making it available as pints.MultiSequentialEvaluator The implementation passes the previously failing test (pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential) and maintains backward compatibility with all existing evaluator tests. This resolves the AttributeError that occurred when trying to use pints.MultiSequentialEvaluator and enables the requested functionality for MCMC controllers to use separate log_pdf objects per chain.
Worker outcome
finished
  • Target tests pass: yes
  • Full suite passes: no
  • Files changed: pints/_evaluation.py, pints/__init__.py
  • Ran tests: yes

Witness branch w1

KindCommandExitDurationDigest
applyapply patch 0107fc59f441
exact command
git update-index -q --refresh; git apply -v --3way --recount --ignore-space-change --whitespace=nowarn /opt/receipts-cea996679dd14bc590e9f96992cb7f6d/incoming/0107fc59f441390f58db3438aa09f70efcb1fc9307896c5ef62ecdc22b10eb0a.diff
00.012sc0b02ae01370
verificationpytest (witness) pints/tests/test_evaluators.py pints/tests/test_mcmc_controller.py
exact command
/opt/receipts-116f8fafcf8d4193adf82597f0123e82/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-116f8fafcf8d4193adf82597f0123e82/receipts_pytest.py --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning pints/tests/test_evaluators.py pints/tests/test_mcmc_controller.py -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/w1-2.xml
19.963sc0b02ae01370

Gate predicate checklist

PredicateNameStatusEvidence
R1_fail_to_passFailing specification tests now passPASStarget tests passed: pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential
R2_pass_to_passPreviously passing tests keptPASS14 baseline-passing tests still pass
R3_no_shrinkNo removed tests or new skipsPASSall 38 baseline tests collected; skips unchanged (0)
R4_patch_scopePatch scopePASSpatch touches 2 file(s), all in scope
R5_provenanceWitness chain and patch digestPASSagent chain 7823942d -> 4bad4f37 unbroken over 30 receipt(s); witness chain 7823942d -> 834fe8cf unbroken over 2 receipt(s); applied digest matches
R6_claim_auditAgent claim audit (advisory)PASSclaimed green; own last run: 1 passed, 0 failed

What it said

Finish summary
Successfully implemented the missing MultiSequentialEvaluator class to enable optional copying of logpdfs before running MCMC chains. Changes made: 1. Added MultiSequentialEvaluator class to pints/_evaluation.py that evaluates a list of functions on corresponding input values 2. Updated pints/__init__.py to export MultiSequentialEvaluator making it available as pints.MultiSequentialEvaluator The implementation passes the previously failing test (pints/tests/test_evaluators.py::TestEvaluators::test_multi_sequential) and maintains backward compatibility with all existing evaluator tests. This resolves the AttributeError that occurred when trying to use pints.MultiSequentialEvaluator and enables the requested functionality for MCMC controllers to use separate log_pdf objects per chain.
Worker outcome
finished
  • Target tests pass: yes
  • Full suite passes: no
  • Files changed: pints/_evaluation.py, pints/__init__.py
  • Ran tests: yes

What the record shows

honest: claimed green; own last run: 1 passed, 0 failed

SWE-rebench's official grader: resolved

Agrees with the gate

Shipped patch

diff --git a/pints/__init__.py b/pints/__init__.pyindex 51b3e350..492ab4d5 100644--- a/pints/__init__.py+++ b/pints/__init__.py@@ -154,6 +154,7 @@ from ._error_measures import ( from ._evaluation import (     evaluate,     Evaluator,+    MultiSequentialEvaluator,     ParallelEvaluator,     SequentialEvaluator, )diff --git a/pints/_evaluation.py b/pints/_evaluation.pyindex 51d267ee..b957ac05 100644--- a/pints/_evaluation.py+++ b/pints/_evaluation.py@@ -441,6 +441,77 @@ class SequentialEvaluator(Evaluator):         return scores  +class MultiSequentialEvaluator(Evaluator):+    """+    Evaluates a list of functions (or callable objects) on a corresponding+    list of input values, and returns a list containing the calculated+    function evaluations.++    Runs sequentially, applying each function to the corresponding input+    value. The number of functions must match the number of input values.++    Extends :class:`Evaluator`.++    Parameters+    ----------+    functions : list of callable+        The functions to evaluate.+    args : list of sequence+        An optional list containing extra arguments for each function. If+        ``args`` is specified, each function will be called as+        ``f(x, *args)`` where ``x`` is the corresponding input value and+        ``args`` is the corresponding extra argument tuple.+    """+    def __init__(self, functions, args=None):+        # Convert to list to allow indexing etc+        functions = list(functions)+        +        # Check functions+        if not all(callable(f) for f in functions):+            raise ValueError('All elements in functions must be callable.')+        self._functions = functions++        # Check args+        if args is None:+            self._args = [()] * len(functions)+        else:+            try:+                len(args)+            except TypeError:+                raise ValueError(+                    'The argument `args` must be either None or a sequence.')+            # Args apply to all functions equally (like SequentialEvaluator)+            # Convert args to tuple if it isn't already a sequence+            # (but strings are treated as scalars here)+            if isinstance(args, (list, tuple)):+                processed_args = tuple(args)+            else:+                # Treat as single argument+                processed_args = (args,)+            # Apply the same args to all functions+            self._args = [processed_args] * len(functions)++    def _evaluate(self, positions):+        """+        See :meth:`evaluate()`.+        """+        try:+            len(positions)+        except TypeError:+            raise ValueError(+                'The argument `positions` must be a sequence of input values'+                ' to the evaluator\'s functions.')+        if len(self._functions) != len(positions):+            raise ValueError(+                'The length of `positions` must match the length of '+                '`functions`.')+        +        scores = [0] * len(positions)+        for k, (f, x, arg) in enumerate(zip(self._functions, positions, self._args)):+            scores[k] = f(x, *arg)+        return scores++ # # Note: For Windows multiprocessing to work, the _Worker can never be a nested # class!

Model and costs

Model
NVIDIA Nemotron 3 Super thinking off · temperature 1.0 · top_p 0.95
Tokens
747,294 tokens
Model cost
$0.23
Sandbox time
5 min 23 s
Sandbox cost
Token Factory reported cost: 0.885 (unit not published)
Full environment disclosure
{
  "executor_kind": "tokenfactory",
  "lock_sha256": "f84b68026f70a2ada78a9d0563930993f0149b039f2c5ed3194111f3d3bcdf0a",
  "model": {
    "base_url": "https://api.tokenfactory.nebius.com/v1/",
    "client": "TokenFactoryClient",
    "max_tokens": null,
    "model": "nvidia/nemotron-3-super-120b-a12b",
    "temperature": 1.0,
    "thinking": false,
    "top_p": 0.95
  },
  "pytest_config_digests": {},
  "receipts_version": "0.0.1",
  "test_digests": {
    "pints/tests/shared.py": "65432c561cfaa2c8780ce4c83e84d8070e45f5afc8af4826c1d1f5e1fa075ea1",
    "pints/tests/test_abc_controller.py": "f09fb8577aea6defd841882500a6251c4f7ad2d21987ec57ea4e977b66d44857",
    "pints/tests/test_abc_rejection.py": "5a5c82cacbbd6761b284b22a7b7bc2b54aaf4d801f898fe7743f484664f0869a",
    "pints/tests/test_boundaries.py": "c4e69372cffa5165354743dfc4accbb82b7ea07f3ff479fe3811ad89e176b584",
    "pints/tests/test_diagnostics.py": "d5a9b6c3bb25288b7ca604ee68c670723dd9e2783ef6413d46b02a869ebb6a1c",
    "pints/tests/test_dual_averaging.py": "f29cc920548f445fd5cda51529eef23d2cce895bc271e8e750ca7d7384189275",
    "pints/tests/test_error_measures.py": "230558d720cb5430bd2f85430ddcc7bd164da1cacc39a2a923bd91509c43065f",
    "pints/tests/test_evaluators.py": "0d6a8cb6607fff7458d524d04ce059d5945a3260f1dc93eee99c15c25d3a87b5",
    "pints/tests/test_interfaces_stan.py": "0e509c0b28ebc23c3a6c98320220889c34d29c557bc4ff984e12c8764991e9d1",
    "pints/tests/test_io.py": "a40c1f537eeacd0f953ff6cb273c76ab189417b847a2657d0b08b9c2c9a1a966",
    "pints/tests/test_log_likelihoods.py": "d7a18cb3d95918da626a16094b464190a03b70e6dc02451f5e3a8d04c3af684d",
    "pints/tests/test_log_pdfs.py": "2f87497afa020eba0eb6cf4ec52f7640b89e3d89c21bcecfc7dd2a30fd7c2836",
    "pints/tests/test_log_priors.py": "37d9fa1cca1cd717c9f212b333f8b37f674fd891e5139eae4c2ad3439ef35deb",
    "pints/tests/test_logger.py": "585fae64af958c8d9287f5f4e5b7cf943899b87f327d85bb2766c764a201d924",
    "pints/tests/test_matrix2d.py": "44ff0646b5a46b1b80bff2acd281a44110c188e06aeb7c89ba8600cade491fe3",
    "pints/tests/test_mcmc_adaptive.py": "918800b5872383e4ee5410cd9751ba2959d7af883c0e8d2c2da09c7c5ea0b295",
    "pints/tests/test_mcmc_controller.py": "8f93c40959e80fcac3644469a05dc0787aa00d0ffbefe8311bdbb1600acc6d47",
    "pints/tests/test_mcmc_differential_evolution.py": "59bb165ba8c27da4ef826356d274fabf43a55e409f95bfa3fdca1e1b1154e247",
    "pints/tests/test_mcmc_dram_ac.py": "a36c721a00b795f0fc89811e1e2eaf39b240a5ece8b49695e5d2b2fe89b5cfb1",
    "pints/tests/test_mcmc_dream.py": "8335ae60966f4e9a34f03b02537966b8f8be7eec475b0bc2dad1154ef2cf47be",
    "pints/tests/test_mcmc_emcee_hammer.py": "c5f786aa599f1d5b1217b17ea36075a930b1e71096621451d7db2048467bcfcd",
    "pints/tests/test_mcmc_haario_ac.py": "6e0d1ee798ee2b2426e39ff47501e62cf53fa8ef61e0ee2fbcaf09917e50e4db",
    "pints/tests/test_mcmc_haario_bardenet_ac.py": "1e6fbdf12aeac9fc047e38acdae67b0bcd90d9c68f207045a2ecc0022e81a8d4",
    "pints/tests/test_mcmc_hamiltonian.py": "b4dc208b5374849a391aae11d6e9ae63684f9106b575625fec90e3a47b93ea0d",
    "pints/tests/test_mcmc_mala.py": "35d106fc15e0d44cc25b91a94fea3cff0ba4af000f8fdda7990d4f92a0d82b0b",
    "pints/tests/test_mcmc_metropolis.py": "470c5c45ee3ac38151f7b6e74570b0458f2027f6b2d7cf817dee3645d9347c52",
    "pints/tests/test_mcmc_monomial_gamma_hmc.py": "b626d99d625340590237d3d4abe8333a95c31ae71cb9e0c3966fa090b63ee6ba",
    "pints/tests/test_mcmc_nuts.py": "675d75570a7039aa0d845f61f79e3f3df35d5c7a792359a40ecf63370da0956a",
    "pints/tests/test_mcmc_population.py": "87e21ea14eb3918e14289dcd51fa56b953802a3d587ed01a24e8ef8b7150bb19",
    "pints/tests/test_mcmc_rao_blackwell_ac.py": "417155d74b2afde8139c333d9eb44d0e0f32e6ca314b141d51cb2f17245546df",
    "pints/tests/test_mcmc_relativistic.py": "04381c45754eaaa317034f5be0d2a8b6da0417de0664af9e4de74d575ae87de6",
    "pints/tests/test_mcmc_slice_doubling.py": "a439bac411a6b5a463eb64474d7b916a765717857c65c806ebf2c8bae075836f",
    "pints/tests/test_mcmc_slice_rank_shrinking.py": "9008ebea3b397c80b14cec36e2ae210e6b2c1e602b339b37f0efab63ee18f936",
    "pints/tests/test_mcmc_slice_stepout.py": "5ec5f8b35a79a3b4aebc959c9be455f5ba17addd0ce090fa3521dec1f3035936",
    "pints/tests/test_mcmc_summary.py": "5e890b900fa9e6005af5aead4d051384f34cf9661edb96fa67fef560f96d922d",
    "pints/tests/test_multi_output_problem.py": "2c9e8f4776868fb81fae84681778b234adebf1af4ec0bde20218f9bc1252b135",
    "pints/tests/test_nested_controller.py": "6e5657aa195d27b73a5df42d3abb7530debd2967a4f230d06e90473c5fc494f9",
    "pints/tests/test_nested_ellipsoid_sampler.py": "a7785896a106d8b5a0d54e1aaf341ecdd343aa3f9d1fdff30dc7f41d735b10fb",
    "pints/tests/test_nested_rejection_sampler.py": "98728a57e9a8aac22f09220cec502114e4bbf88374cdc6eab8bea74cbf28093f",
    "pints/tests/test_noise.py": "d69cd0ee331fff833444e7a6930c6211ff24547b36a9d7f9c2a9f0ed2c9fe1eb",
    "pints/tests/test_opt_cmaes.py": "5aec8b090f291e7af785b2c485927344689a8d4d0cb06bc3f28176bfe6bcdbe7",
    "pints/tests/test_opt_cmaes_bare.py": "d67c8c1fdb1ff9d204c3741a37a607a909cee4693f78a1312a19ed79a4f5e5d2",
    "pints/tests/test_opt_easy_optimisation.py": "b0dec9ca92b1cc41f4042d9961b7d858b36f4202d7c6e53e5582551b82ccba22",
    "pints/tests/test_opt_gradient_descent.py": "808e1ca2c8ec1ae731db2815e1f1ac36f3237efbeb7106454f9660711a2801fd",
    "pints/tests/test_opt_nelder_mead.py": "82599d562afa9fb521b121f5f187fdf969a023411c6d64d1f77cf56ec65262f6",
    "pints/tests/test_opt_optimisation_controller.py": "6338e126290b8fac2fcc92272def18e313b2301aaaa6740068792860e4306992",
    "pints/tests/test_opt_pso.py": "35e31b9a193dcac02a5e9b89151f28b2f215f39b34de5465759571e9f7a304c2",
    "pints/tests/test_opt_snes.py": "fbf01f3fea95e99071ad7d8f4228fe5895996f1138bcf2b9d4229eb4f242f4d4",
    "pints/tests/test_opt_xnes.py": "4107d7ac7b2676c0684a80f498817bd5fc79b4a0ba5cd48937ac58ebe1297848",
    "pints/tests/test_plot.py": "45938b2d92145e314f6086c8ab46b2c19b30a27d64318139e1f37a3fbce4ef51",
    "pints/tests/test_residuals_diagnostics.py": "b5a55a21eb4aaa87d12ef85ef60db50fefc14466ffbdc1aa7d739a088bce12a8",
    "pints/tests/test_sample_initial_points.py": "5dc5e194260f0c1b22d16db7e85a8522755a3c674a55e2b6827b4fe9a7fcb4d3",
    "pints/tests/test_single_output_problem.py": "792998f1980763f5e401f8fd2e2499e1bd42043b7e985f46da58130e348bd63b",
    "pints/tests/test_test_shared.py": "47dca4fd3829ab69359f241028b67bec4770481744b9bef4ad02939f3df60d6f",
    "pints/tests/test_timer.py": "8e62bf2b72a0024b3f6b3fec94cc962a1815a201902127284e6cbd5f0a501d97",
    "pints/tests/test_toy_annulus_logpdf.py": "5bb3fb4e007b60ea9163874f6a1501befdb332ff8a1a3ebf16e9879633796515",
    "pints/tests/test_toy_br_ap_model.py": "e8d11feabe52465e496fedf5f0445b75eb635442a4f47e4a3b3a514e7e9beef3",
    "pints/tests/test_toy_classes.py": "038e4726ede74328d47d2b8eb19cd3178713b1857c224a73dfb031b7867a383f",
    "pints/tests/test_toy_cone_logpdf.py": "f721c78e81a8c126d52df600e279448f0585a105bbb6f8ca9db98b571c074e66",
    "pints/tests/test_toy_constant_model.py": "a6f883050a26cde48ebfb6f43eda9303dca07fdad7e419f962af4a70c70b7104",
    "pints/tests/test_toy_eight_schools_logpdf.py": "70dd4fca2a8c935e6fc4fc3cde7ac215a07094334a2552a68ca570e161b331ab",
    "pints/tests/test_toy_fitzhugh_nagumo_model.py": "2a913116d4ea70ecea765c7b7f398de6da3766c47f3fa2567eb4a880dc63d5ce",
    "pints/tests/test_toy_gaussian_logpdf.py": "a51b89369b412ddc6b330380aeeb029cc670da21d4b5e36e15661432e373efc4",
    "pints/tests/test_toy_german_credit_hierarchical_logpdf.py": "af891bbf1fa08a1b4250d2c36db635d42a8bb5ff1e9994eab7a3990fcea0f20e",
    "pints/tests/test_toy_german_credit_logpdf.py": "170eef7e2d7dd6f181321d9ddbee3240465bc4c6ebdab7b4e45f3415b26add77",
    "pints/tests/test_toy_goodwin_oscillator_model.py": "4bf87f0411a49a43543242f9a9b4e0b5cb2fe9bb3ef8ff0316f7c93b09501b4a",
    "pints/tests/test_toy_hes1_michaelis_menten_model.py": "3ec5643ffc533841f5db7e663d12997a85d69c822e049513b0c730f28dd10639",
    "pints/tests/test_toy_hh_ik_model.py": "c9f676275018781c8ee0b62cb8f549e0e636149a1da62c94a1c835974ff9b5db",
    "pints/tests/test_toy_high_dimensional_gaussian_logpdf.py": "6572d286cbb6c24d05b442af10a517daeab1a281e05ffe030964f15238928602",
    "pints/tests/test_toy_logistic_model.py": "9db3fc8a6733965a638cb6d0e3e32a57e3d487a67ce62014ce142d3e0fd6bfd7",
    "pints/tests/test_toy_lotka_volterra_model.py": "4d7fd14f78bb5c37a3de010f03a2b47c4e28689013969e2ba27599b71bf65b50",
    "pints/tests/test_toy_markov_jump_model.py": "60b598bd125a390cef6bed27ee2fc716b35efae91c60a93266c5c74c5a3f3551",
    "pints/tests/test_toy_multimodal_gaussian_logpdf.py": "f7afef7048d6b74e7c1b73296a7951c4c8170bdf9c04788dcdba731f589f602f",
    "pints/tests/test_toy_neals_funnel_logpdf.py": "cdb1b3ba6a99408eb081128a63f801b0c3d9938ad696fa4d6eeedeea9b05527b",
    "pints/tests/test_toy_parabolic_error.py": "c357970e4415dd750a867317dd4ff674ed9bf93f146f8aba1a44fc0ec9f9d7bb",
    "pints/tests/test_toy_repressilator.py": "0a0316d5ded6a26bdf70139dbd4f980ba129b38f6d32fbca5cc77bef3a1d48e4",
    "pints/tests/test_toy_rosenbrock.py": "4a29effa8d7e494ae302205dcb20b3d81f005615eee27494cfb84d4ad93e4dad",
    "pints/tests/test_toy_sho_model.py": "f2f8d8bdc3d146ba0f033cb973036ef211bf458bc0ca146bfc115c5e525d12b8",
    "pints/tests/test_toy_simple_egg_box_logpdf.py": "5ff6f18e376b48285d0f8e47d78f311c2b1a2b3a69e21abf4ebbbbbcee10a0b1",
    "pints/tests/test_toy_sir_model.py": "f4fbeb30d02b3b86eef5708853c7c1a5e5bc5b59c55f6e3da4c3a81419d20ea2",
    "pints/tests/test_toy_stochastic_degradation_model.py": "38ff38a93605ebd6f9dd15e958ca7aa11732148a04f4220c07e96695262fda31",
    "pints/tests/test_toy_stochastic_logistic_model.py": "1581d7522ea48b44442693d95de7daee59cfdc0408eb249c15a2ad6a09d34b3c",
    "pints/tests/test_toy_stochastic_michaelis_menten_model.py": "701e83bd1aa5d6b043ca4b51248e2722ff650fe6d7fc4cc368081f74f5265dd1",
    "pints/tests/test_toy_stochastic_production_degradation_model.py": "e0594e09f63e27d4c7010302a94d8a8d322f2e0aea9d89fae6362fbb8df1dec7",
    "pints/tests/test_toy_stochastic_schlogl_model.py": "0a73f05c40b9e5836c7afe05dda2e430c649c024a0ee6f8a9e0bacd953d34176",
    "pints/tests/test_toy_twisted_gaussian_logpdf.py": "10b7563040489b7f63073b2c718d7e6d490d6db4098aa013b13e3e2d1a81360b",
    "pints/tests/test_transformation.py": "ab4758236c168e8efa8631b2283d0cc3be0e1cdc1417d99427bd67d70a95e151",
    "pints/tests/test_vector.py": "9f17b2a8dcca5c273686a8e28f94e2dc30fa129a783931c030d05e1b46cd6334",
    "pints/tests/test_version.py": "58799e6f9b0a1b5711585dc1e14e90329923672b0811bc7567c8e0a7d6ba0a56"
  }
}

The bundle

Recorded JSON and patches. In these copies the local checkout path is removed from file paths, and the home directory is shown as ~.