Using Parallel Computing in fmdtools
This notebook will discuss how to use parallel programming in fmdtools, including:
how to set up a model for parallelism
syntax for using parallelism in simulation functions
considerations for optimizing computational performance in a model
Copyright © 2024, United States Government, as represented by the Administrator of the National Aeronautics and Space Administration. All rights reserved.
The “"Fault Model Design tools - fmdtools version 2"” software is licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
from ex_pump import *
from fmdtools.sim.sample import FaultDomain, FaultSample
import fmdtools.sim.propagate as propagate
import fmdtools.analyze as an
This notebook uses the pump example (see ex_pump.py
) to illustrate the use of parallelism in fmdtools. This is fairly simple model, and thus it should be noted that there may be considerations with more complex models which may not be adequately covered here.
mdl = Pump()
result, mdlhist = propagate.nominal(mdl, to_return='graph')
fig, ax = result.tend.graph.draw()

fig, ax = mdlhist.plot_line('flows.ee_1.s.current', 'flows.wat_2.s.flowrate')

Model Checks
Before attempting to leverage parallelism in model execution, it can be helpful to check whether a model is compatible with python parallel computing libraries. In order for a model to be parallelized, it must be compatible with pickling–python’s method of data serialization. This is used in parallel programming methods to copy the model from the main process thread to the seperate processes of the pool.
fmdtools has two methods to check whether a model can be pickled, check_pickleability
and check_model_pickleability
. The main difference between these is that check_pickleability
works for all objects (e.g. functions and flows), while check_model_pickleability
gives more information for an overall model structure
from fmdtools.define.object.base import check_pickleability
from fmdtools.define.architecture.base import check_model_pickleability
unpickleable_attributes = check_pickleability(mdl)
_init_flexroles
_simflows
as_copy
check_dict_creation
container_m
container_p
container_sp
container_t
containers
default_name
default_sp
default_track
dynamicsims
flexible_roles
flows
fxns
graph
h
immutable_roles
indicators
m
mut_kwargs
mutables
name
p
rolename
roletype
roletypes
rolevars
root
simorder
sp
staticflows
staticsims
t
track
The object is pickleable
# check_model_pickleability(mdl)
As you can see, this model is pickleable. However, this may not be the case for all structures if they rely on unpickleable data structures, one common one being iterators like .values().
Using Parallelism in Simulation
Parallelism generally requires using some external parallel processing toolkit. The syntax used by fmdtools methods is compatible with:
multiprocessing, python’s default parallel computing library
multiprocess, a fork of multiprocessing developed by The UQ Foundation
pathos, a broader parallel computing package developed by The UQ Foundation
And any other package that emulates multiprocessing.Pool
import multiprocessing as mp
import multiprocess as ms
Parallelism can speed up simulation time when there is a large number of independent simulations to run. The prefered methods for using parallelism are to use a NominalApproach
or SampleApproach
with the methods:
propagate.singlefaults (for all single-fault scenarios in a static model with no approach)
propagate.approach (for sampling a set of faults)
propagate.nominal_approach (for simulating the model nominally over a set of parameters)
propagate.nested_approach (for sampling a set of faults over a set of model parameters)
These methods can be run in parallel by sending them a pool
object from one of these modules as the optional pool
argument. Further details on setting up and running an approach are provided in docs/Approach Use-Cases.ipynb
pool = mp.Pool(4)
fd = FaultDomain(mdl)
fd.add_all()
fs = FaultSample(fd)
fs.add_fault_phases()
endclasses, mdlhists = propagate.fault_sample(mdl, fs, pool=pool)
#an.tabulate.simplefmea(endclasses)
SCENARIOS COMPLETE: 100%|██████████| 24/24 [00:01<00:00, 13.72it/s]
pool
<multiprocessing.pool.Pool state=TERMINATE pool_size=4>
Sometimes, it helps to “warm up” the pool. See, for example, how much longer per-second iterations take for the above compared to below:
pool = mp.Pool(4)
endclasses, mdlhists = propagate.single_faults(mdl, pool=pool)
#an.tabulate.simplefmea(endclasses)
SCENARIOS COMPLETE: 100%|██████████| 8/8 [00:01<00:00, 4.85it/s]
It can also be helpful to verify that the results of parallel simulation and normal serial execution are the same:
pool = mp.Pool(4)
endclasses_par, mdlhists = propagate.single_faults(mdl, pool=pool, auto_close_pool=False)
#tab_par = an.tabulate.simplefmea(endclasses_par)
endclasses, mdlhists = propagate.single_faults(mdl)
#tab = an.tabulate.simplefmea(endclasses)
#tab - tab_par
SCENARIOS COMPLETE: 100%|██████████| 8/8 [00:01<00:00, 4.68it/s]
SCENARIOS COMPLETE: 100%|██████████| 8/8 [00:00<00:00, 10.92it/s]
# pool = mp.Pool(4)
endclasses_par, mdlhists = propagate.fault_sample(mdl, fs, pool=pool)
#tab_par = an.tabulate.simplefmea(endclasses_par)
endclasses, mdlhists = propagate.fault_sample(mdl, fs)
#tab = an.tabulate.simplefmea(endclasses)
#tab - tab_par
pool
SCENARIOS COMPLETE: 100%|██████████| 24/24 [00:00<00:00, 136.64it/s]
SCENARIOS COMPLETE: 100%|██████████| 24/24 [00:00<00:00, 26.92it/s]
<multiprocessing.pool.Pool state=TERMINATE pool_size=4>
While fmdtools built-in methods are the easiest way to leverage parallelism, it can also be used with custom arguments/methods to meet the needs of simulation. However, (on Windows) these methods need to be defined in an external module with an “if name==’main’:” statement, otherwise execution will hang from spawning new processes. This has to do with how multiprocessing works in windows.
To show how parellism can be leveraged manually for a desired use-case, below the model is run over the blockage fault mode at time t=1 with a different model parameter (delayed failure behavior), as defined in the parallelism_methods.py
module in this folder.
from parallelism_methods import delay_test
results = delay_test()
results
[nominal.tend.classify.rate: 1.0
nominal.tend.classify.cost: 0.0
nominal.tend.classify.expected_cost: 0.0
export_water_block_t 1e-05
export_water_block_t 20125.000000000007
export_water_block_t 20125.000000000007,
nominal.tend.classify.rate: 1.0
nominal.tend.classify.cost: 0.0
nominal.tend.classify.expected_cost: 0.0
export_water_block_t 1e-05
export_water_block_t 20102.500000000007
export_water_block_t 20102.500000000007,
nominal.tend.classify.rate: 1.0
nominal.tend.classify.cost: 0.0
nominal.tend.classify.expected_cost: 0.0
export_water_block_t 1e-05
export_water_block_t 20080.000000000007
export_water_block_t 20080.000000000007,
nominal.tend.classify.rate: 1.0
nominal.tend.classify.cost: 0.0
nominal.tend.classify.expected_cost: 0.0
export_water_block_t 1e-05
export_water_block_t 20057.500000000007
export_water_block_t 20057.500000000007,
nominal.tend.classify.rate: 1.0
nominal.tend.classify.cost: 0.0
nominal.tend.classify.expected_cost: 0.0
export_water_block_t 1e-05
export_water_block_t 20035.000000000007
export_water_block_t 20035.000000000007,
nominal.tend.classify.rate: 1.0
nominal.tend.classify.cost: 0.0
nominal.tend.classify.expected_cost: 0.0
export_water_block_t 1e-05
export_water_block_t 15023.750000000005
export_water_block_t 15023.750000000005,
nominal.tend.classify.rate: 1.0
nominal.tend.classify.cost: 0.0
nominal.tend.classify.expected_cost: 0.0
export_water_block_t 1e-05
export_water_block_t 15023.750000000005
export_water_block_t 15023.750000000005,
nominal.tend.classify.rate: 1.0
nominal.tend.classify.cost: 0.0
nominal.tend.classify.expected_cost: 0.0
export_water_block_t 1e-05
export_water_block_t 15023.750000000005
export_water_block_t 15023.750000000005,
nominal.tend.classify.rate: 1.0
nominal.tend.classify.cost: 0.0
nominal.tend.classify.expected_cost: 0.0
export_water_block_t 1e-05
export_water_block_t 15023.750000000005
export_water_block_t 15023.750000000005,
nominal.tend.classify.rate: 1.0
nominal.tend.classify.cost: 0.0
nominal.tend.classify.expected_cost: 0.0
export_water_block_t 1e-05
export_water_block_t 15023.750000000005
export_water_block_t 15023.750000000005]
In this method, the model is run many times over a given fault with different delay parameters. It should be noted that this approach is not especially efficient, since the nominal scenario is simulated at each call of propagate.one_fault()
. It is thus preferred to use the appropriate fault/parameter sampling approaches and propagate methods, since these methods only run the nominal simulation once for fault scenarios and can also use staged execution (copying the model at fault time for fault scenarios) to reduce the cost of each simulation.
Performance Comparison
Parallelism is often used in computation to speed up up a set of independent simulations. Conventionally, one might say it leads to a reduced computational cost of $t/n$, where t was the original time of the set of processes, and n is the number of cores.
However, this computational performance increase is dependent on the implementation. In Python, there is some overhead from from communicating data structures in and out of parallel threads which can become a significant consideration when the data structures are large. Additionally, different Pools can execute more or less efficiently. Below these are each compared.
import matplotlib.pyplot as plt
from parallelism_methods import compare_pools, instantiate_pools, terminate_pools
cores=4
pools = instantiate_pools(cores)
Below is the baseline comparison, where the the following parameters characterize the sampling approach:
single faults: only the single-fault scenarios are considered
3 points per phase: an evenly-spaced quadrature is sampled at each phase of operation (start, on, end) for the model
staged: the model is copied at each point in time where faults is injected during the model time to save computation
track: the entire model history is returned for each simulation
This is typical for a small model like this where the per-model expense is low.
mdl=Pump(track='all')
fs = FaultSample(fd)
fs.add_fault_phases(args = (3,))
pools = instantiate_pools(5)
_ = compare_pools(mdl, fs, pools, staged=True, verbose=False)
exectimes = compare_pools(mdl, fs, pools, staged=True, verbose=False)
exectimes_baseline = exectimes
fig = plt.figure(figsize=(9, 3),)
plt.bar(range(len(exectimes)), list(exectimes.values()), align='center')
plt.xticks(range(len(exectimes)), list(exectimes.keys()))
plt.title("Baseline Performance - Some faults, Staged, Normal Simulation, Full Model History")
plt.ylabel("Computational Time (s)")
plt.grid(axis='y')

As shown, in this situation, both the multiprocessing and threadpool pools give computational performance increases.
Comparison: No Histories
In the below comparison, the same simulation approach is run, except without tracking a history of model states through the simulation.
mdl=Pump(track='none')
exectimes = compare_pools(mdl, fs, pools, staged=True, verbose=False)
fig = plt.figure(figsize=(9, 3),)
width = 0.8
plt.bar(range(len(exectimes)), list(exectimes.values()), align='center', color="blue", label="comparison")
plt.bar(range(len(exectimes_baseline)), list(exectimes_baseline.values()), align='center', color="gray", alpha=0.5, label="baseline")
plt.xticks(range(len(exectimes)), list(exectimes.keys()))
plt.title("Computational Performance - Many Faults, Staged, Normal Simulation, No Model History")
plt.ylabel("Computational Time (s)")
plt.grid(axis='y')
plt.legend()
<matplotlib.legend.Legend at 0x282392e7dd0>

As shown, in this situation, the overall simulation expense decreases, even in the serial execution case.
Additionally, the case for using a parallel processing pool increases somewhat. This is because passing the model history back to the main process is nearly comparable in time to simulation itself.
As a result, removing it saves a large amount of computational time when using parallel processing.
Comparison: Many Faults
In the below comparison, many faults are injected in the system to increase the number of scenarios (ostensibly making the case better for parallelism)
fs_many = FaultSample(fd)
fs_many.add_fault_phases(args = (7,))
mdl=Pump(track='all')
exectimes = compare_pools(mdl, fs_many, pools, staged=True, verbose=False)
fig = plt.figure(figsize=(9, 3),)
width = 0.8
plt.bar(range(len(exectimes)), list(exectimes.values()), align='center', color="blue", label="comparison")
plt.bar(range(len(exectimes_baseline)), list(exectimes_baseline.values()), align='center', color="gray", alpha=0.8, label="baseline")
plt.xticks(range(len(exectimes)), list(exectimes.keys()))
plt.title("Computational Performance - Many Faults, Staged, Normal Simulation, Full Model History")
plt.ylabel("Computational Time (s)")
plt.grid(axis='y')
plt.legend()
<matplotlib.legend.Legend at 0x2823930ce50>

As shown, increasing the number of joint-fault scenarios increases computational costs significantly–as would be expected.
In this situation, multiprocessing performs comparatively better, but only slightly–instead of taking 1/4 the time, it only takes about 1/2 the time.
Comparison: Long simulation
It may be of interest to simulate how the comparative performance changes for longer simulations. In this comparison, the simulation time is extended tenfold.
mdl=Pump(sp=dict(times=(0,20, 500)), track='all')
exectimes = compare_pools(mdl, fs, pools, staged=True, verbose=False)
fig = plt.figure(figsize=(9, 3),)
width = 0.8
plt.bar(range(len(exectimes)), list(exectimes.values()), align='center', color="blue", label="comparison")
plt.bar(range(len(exectimes_baseline)), list(exectimes_baseline.values()), align='center', color="gray", alpha=0.8, label="baseline")
plt.xticks(range(len(exectimes)), list(exectimes.keys()))
plt.title("Computational Performance - Normal Faults, Staged, Long Simulation, Full Model History")
plt.ylabel("Computational Time (s)")
plt.grid(axis='y')
plt.legend()
<matplotlib.legend.Legend at 0x1c0aa9058d0>

As shown, the simulation time does increase significantly–about tenfold. In terms of comparative performance, pools other than multiprocessing now become competitive, though multiprocessing is still the fastest overall.
This shows the main case for using parallesism–speeding up long simulations. Short simulations unfortunately require a significant amount of overhead due to copying in and out of the individual thread and we thus see less of a case for them there.
Comparison: Long Simulation No Tracking
Finally, it may be interesting to see how performance is affected in long simulations when there is no tracking. This is because in these simulations, there should be very little overhead from creating the respective data structures, even when there is a long simulation. This comparison is shown below.
mdl=Pump(sp=dict(times=(0,20, 500)), track='none')
exectimes = compare_pools(mdl, fs, pools, staged=True, verbose=False)
fig = plt.figure(figsize=(9, 3),)
width = 0.8
plt.bar(range(len(exectimes)), list(exectimes.values()), align='center', color="blue", label="comparison")
plt.bar(range(len(exectimes_baseline)), list(exectimes_baseline.values()), align='center', color="gray", alpha=0.8, label="baseline")
plt.xticks(range(len(exectimes)), list(exectimes.keys()))
plt.title("Computational Performance - Normal Faults, Staged, Long Simulation, No Model History")
plt.ylabel("Computational Time (s)")
plt.grid(axis='y')
plt.legend()
<matplotlib.legend.Legend at 0x1c0aad73710>

As shown, removing the tracking makes the long simulations much take less time than the short simulation!
Comparison: Long Simulation Only Necessary Tracking
In practice, it can be necessary to track some states over time. Here we perform the same comparison using the ‘valstates’ option, which only tracks states which have been defined in the model to be necessary to track (using ‘valparams’)
mdl=Pump(sp=dict(times=(0,20, 500))) # see default track for Pump
exectimes = compare_pools(mdl, fs, pools, staged=True, verbose=False)
fig = plt.figure(figsize=(9, 3),)
width = 0.8
plt.bar(range(len(exectimes)), list(exectimes.values()), align='center', color="blue", label="comparison")
plt.bar(range(len(exectimes_baseline)), list(exectimes_baseline.values()), align='center', color="gray", alpha=0.8, label="baseline")
plt.xticks(range(len(exectimes)), list(exectimes.keys()))
plt.title("Computational Performance - Normal Faults, Staged, Long Simulation, Only Necessary History")
plt.ylabel("Computational Time (s)")
plt.grid(axis='y')
plt.legend()
<matplotlib.legend.Legend at 0x1c0aae0eed0>

As shown, only tracking a few variables results in similar computational time no tracking.
This is because a major computational performance limitation in this model is not necessarily the model simulation itself, but the generation, update, and passing of the history. So it is often best to only track necessary parameters when possible, rather than the entire model history.
Comparison: Lower Tracking Time Resolution
Finally, the number of recorded timesteps can be lowered to lower computational costs while still returning all relevant variables.
mdl=Pump(sp=dict(times=(0,20, 500), track_times=("interval", 5)), track='all')
exectimes = compare_pools(mdl, fs, pools, staged=True, verbose=False)
fig = plt.figure(figsize=(9, 3),)
width = 0.8
plt.bar(range(len(exectimes)), list(exectimes.values()), align='center', color="blue", label="comparison")
plt.bar(range(len(exectimes_baseline)), list(exectimes_baseline.values()), align='center', color="gray", alpha=0.8, label="baseline")
plt.xticks(range(len(exectimes)), list(exectimes.keys()))
plt.title("Computational Performance - Many Faults, Staged, Normal Simulation, Lower Time Resolution")
plt.ylabel("Computational Time (s)")
plt.grid(axis='y')
plt.legend()
<matplotlib.legend.Legend at 0x1c0aad45a50>

As shown, while lowering time resolution could theoretically lower computational time, it does not significantly change much in this example.
terminate_pools(pools)
Comparison Conclusions:
Parallelism can the improve computational performance of a given resilience simulation approach. However, this improvement is dependent on the parameters of the simulation. Generally, the official python multiprocessing
module seems consistently give the best performance improvement over a single-process execution, although this can change depending on the underlying model and modelling approach. There are additionally reasons you might choose other pools– multiprocess
pools may enable more data structures in the model because they extend what can be communicated in and out of threads.
In general, one of the major considerations for optimization compuational time is not just the simulation of the model, but the size of the returned data structures. Minimizing the size of the returned data structures can reduce computational time both by reducing the time of an individual simulation and by reducing the parallelism overhead from copying these data structures in and out of parallel threads. However, it is important to recognize that for resilience assessment, one often needs a history of model states (or, at least, states of interest) to properly quantify the dynamic costs (i.e., $\int C_f(t) dt$). Indeed, in this model, only repair costs were able to be used in the comparison of non-tracked states, because the other dynamic costs required a history of their corresponding flows. Changing the number and size of tracked model states can influence the computational time, but only to a point–while one would expect lowering time-fidelity to have a significant effect, it does not because the overhead is less to do with filling the underlying data structures as it has to do with instantiating and returning them–a far more effective method is to only return the functions/flows which are needed by the model.
Further Computational Cost Reduction via Profiling
While parallelism and staged execution are helpful and relatively easy-to-implement methods of computational cost reduction, it can be helpful (especially for more complex models) to see what aspects of the model are taking the most computational time.
While staged execution was not explored here, it can make a difference when faults are to be injected near the end of the simulation by making it unnecessary to simulate up to the fault time. However, it is less helpful when model instantiation/copy time is a significant fraction of simulation time.
Python’s builtin cProfile
package can ge used to see the relative computational times of different functions/processes.
import cProfile
mdl=Pump(sp=dict(track='all'))
prof = cProfile.run('propagate.nominal(mdl)', sort='tottime')
232577 function calls (217980 primitive calls) in 0.141 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
2562 0.015 0.000 0.034 0.000 base.py:629(get_roles_as_dict)
8530/2976 0.009 0.000 0.028 0.000 base.py:852(<listcomp>)
8530/2976 0.007 0.000 0.032 0.000 base.py:841(return_mutables)
843/1 0.007 0.000 0.124 0.124 base.py:734(__call__)
28669 0.006 0.000 0.008 0.000 {built-in method builtins.getattr}
5406 0.005 0.000 0.010 0.000 base.py:665(<dictcomp>)
2692 0.004 0.000 0.005 0.000 time.py:121(return_mutables)
2564 0.004 0.000 0.038 0.000 base.py:630(get_sims)
112 0.004 0.000 0.095 0.001 base.py:178(prop_static)
22199 0.004 0.000 0.004 0.000 {built-in method builtins.hasattr}
26064 0.004 0.000 0.004 0.000 {built-in method builtins.isinstance}
859 0.003 0.000 0.003 0.000 {method 'round' of 'numpy.ndarray' objects}
1715/1699 0.003 0.000 0.005 0.000 copy.py:128(deepcopy)
859 0.003 0.000 0.009 0.000 base.py:339(gen_timerange)
5401 0.003 0.000 0.004 0.000 base.py:664(<dictcomp>)
2280 0.002 0.000 0.004 0.000 base.py:634(<dictcomp>)
1195/905 0.002 0.000 0.021 0.000 base.py:567(get_faults)
1696 0.002 0.000 0.007 0.000 base.py:284(set_field)
2568 0.002 0.000 0.002 0.000 time.py:115(__getattr__)
2578 0.002 0.000 0.003 0.000 base.py:519(get_default_roletypes)
2704 0.002 0.000 0.002 0.000 copy.py:66(copy)
518 0.002 0.000 0.011 0.000 base.py:247(assign)
6850 0.002 0.000 0.003 0.000 base.py:426(return_mutables)
1630 0.001 0.000 0.019 0.000 base.py:859(has_changed)
8530 0.001 0.000 0.002 0.000 base.py:831(find_mutables)
2692 0.001 0.000 0.004 0.000 mode.py:225(return_mutables)
16 0.001 0.000 0.001 0.000 {built-in method builtins.dir}
959/112 0.001 0.000 0.095 0.001 base.py:713(execute_static_behaviors)
518 0.001 0.000 0.002 0.000 base.py:186(get_field_dict)
10747 0.001 0.000 0.001 0.000 {method 'items' of 'dict' objects}
903 0.001 0.000 0.022 0.000 base.py:557(set_sub_faults)
1356 0.001 0.000 0.002 0.000 mode.py:313(has_fault)
560/224 0.001 0.000 0.002 0.000 base.py:54(get_var)
859 0.001 0.000 0.001 0.000 {built-in method numpy.arange}
56 0.001 0.000 0.003 0.000 history.py:205(log)
6850 0.001 0.000 0.001 0.000 {built-in method recordclass._dataobject.astuple}
6405 0.001 0.000 0.001 0.000 {method 'get' of 'dict' objects}
5725 0.001 0.000 0.001 0.000 {method 'update' of 'dict' objects}
1346 0.001 0.000 0.015 0.000 base.py:855(set_mutables)
170 0.001 0.000 0.004 0.000 ex_pump.py:415(static_behavior)
2280 0.001 0.000 0.001 0.000 {method 'remove' of 'list' objects}
859 0.001 0.000 0.004 0.000 fromnumeric.py:53(_wrapfunc)
11 0.001 0.000 0.001 0.000 base.py:457(<listcomp>)
903/56 0.001 0.000 0.107 0.002 base.py:685(update_static_behaviors)
847 0.001 0.000 0.015 0.000 base.py:638(update_arch_behaviors)
20 0.001 0.000 0.003 0.000 base.py:358(init_roles)
859 0.001 0.000 0.005 0.000 fromnumeric.py:3269(round)
336/56 0.001 0.000 0.005 0.000 base.py:722(inc_sim_time)
1173 0.001 0.000 0.009 0.000 time.py:129(update_time)
2334 0.001 0.000 0.001 0.000 {method 'startswith' of 'str' objects}
903 0.001 0.000 0.001 0.000 base.py:623(update_stochastic_states)
859 0.001 0.000 0.009 0.000 base.py:116(get_timerange)
3198 0.000 0.000 0.000 0.000 time.py:122(<genexpr>)
281 0.000 0.000 0.005 0.000 base.py:715(set_vars)
344 0.000 0.000 0.001 0.000 copy.py:243(_keep_alive)
13 0.000 0.000 0.001 0.000 inspect.py:2331(_signature_from_function)
348 0.000 0.000 0.000 0.000 base.py:240(<dictcomp>)
570 0.000 0.000 0.001 0.000 __init__.py:180(add)
336 0.000 0.000 0.000 0.000 {method '__deepcopy__' of 'numpy.generic' objects}
34 0.000 0.000 0.000 0.000 common.py:49(get_sub_include)
2867 0.000 0.000 0.000 0.000 {method 'copy' of 'set' objects}
843 0.000 0.000 0.000 0.000 time.py:177(get_sim_times)
2716 0.000 0.000 0.000 0.000 {method 'values' of 'dict' objects}
903 0.000 0.000 0.001 0.000 base.py:659(update_dynamic_behaviors)
26/13 0.000 0.000 0.002 0.000 inspect.py:2435(_signature_from_callable)
170 0.000 0.000 0.001 0.000 ex_pump.py:233(static_behavior)
5 0.000 0.000 0.000 0.000 base.py:65(<listcomp>)
16/15 0.000 0.000 0.004 0.000 base.py:328(init_roletypes)
2420 0.000 0.000 0.000 0.000 {built-in method builtins.id}
2407 0.000 0.000 0.000 0.000 {built-in method builtins.len}
56 0.000 0.000 0.000 0.000 inspect.py:2669(__init__)
1356 0.000 0.000 0.000 0.000 {method 'intersection' of 'set' objects}
114 0.000 0.000 0.001 0.000 <frozen _collections_abc>:717(__ior__)
8 0.000 0.000 0.003 0.000 parameter.py:62(__init__)
12 0.000 0.000 0.000 0.000 {method 'sort' of 'numpy.ndarray' objects}
25 0.000 0.000 0.000 0.000 inspect.py:2955(__init__)
1365 0.000 0.000 0.000 0.000 {built-in method builtins.any}
1732 0.000 0.000 0.000 0.000 {built-in method builtins.setattr}
11 0.000 0.000 0.002 0.000 base.py:455(init_indicators)
9 0.000 0.000 0.009 0.001 base.py:281(add_flex_role_obj)
169 0.000 0.000 0.001 0.000 ex_pump.py:265(static_behavior)
903 0.000 0.000 0.000 0.000 time.py:111(has_executed)
169 0.000 0.000 0.000 0.000 ex_pump.py:310(static_behavior)
8 0.000 0.000 0.000 0.000 parameter.py:136(check_immutable)
167 0.000 0.000 0.095 0.001 base.py:149(update_arch_behaviors)
25/18 0.000 0.000 0.001 0.000 result.py:605(flatten)
12 0.000 0.000 0.000 0.000 time.py:137(set_timestep)
8 0.000 0.000 0.000 0.000 base.py:142(set_arg_type)
15 0.000 0.000 0.002 0.000 base.py:788(create_hist)
11/10 0.000 0.000 0.006 0.001 base.py:213(__init__)
5 0.000 0.000 0.006 0.001 base.py:825(__init__)
1371 0.000 0.000 0.000 0.000 copy.py:182(_deepcopy_atomic)
8 0.000 0.000 0.000 0.000 inspect.py:3215(__str__)
6 0.000 0.000 0.001 0.000 base.py:102(find_any_phase_overlap)
859 0.000 0.000 0.000 0.000 fromnumeric.py:3265(_round_dispatcher)
342 0.000 0.000 0.000 0.000 <frozen abc>:117(__instancecheck__)
342 0.000 0.000 0.000 0.000 {built-in method _abc._abc_instancecheck}
12 0.000 0.000 0.000 0.000 {method 'copy' of 'numpy.ndarray' objects}
115 0.000 0.000 0.001 0.000 __init__.py:65(__init__)
39/38 0.000 0.000 0.001 0.000 result.py:184(__init__)
170 0.000 0.000 0.000 0.000 ex_pump.py:382(set_faults)
56 0.000 0.000 0.000 0.000 enum.py:688(__call__)
170 0.000 0.000 0.000 0.000 base.py:234(<dictcomp>)
169 0.000 0.000 0.000 0.000 ex_pump.py:290(static_behavior)
1 0.000 0.000 0.000 0.000 base.py:447(construct_graph)
39 0.000 0.000 0.000 0.000 __init__.py:1111(__init__)
686 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}
279 0.000 0.000 0.000 0.000 __init__.py:304(__iter__)
12 0.000 0.000 0.000 0.000 inspect.py:2037(_signature_bound_method)
340 0.000 0.000 0.000 0.000 {built-in method builtins.min}
112 0.000 0.000 0.001 0.000 __init__.py:130(copy)
1 0.000 0.000 0.141 0.141 {built-in method builtins.exec}
280 0.000 0.000 0.000 0.000 base.py:263(is_known_mutable)
293 0.000 0.000 0.000 0.000 {method 'update' of 'set' objects}
69 0.000 0.000 0.000 0.000 parameter.py:108(check_lim)
39 0.000 0.000 0.000 0.000 <frozen _collections_abc>:941(update)
13 0.000 0.000 0.002 0.000 inspect.py:3007(from_callable)
433 0.000 0.000 0.000 0.000 {built-in method builtins.issubclass}
1 0.000 0.000 0.012 0.012 base.py:101(__init__)
338 0.000 0.000 0.000 0.000 {method 'split' of 'str' objects}
8 0.000 0.000 0.000 0.000 parameter.py:157(check_type)
458 0.000 0.000 0.000 0.000 {method 'join' of 'str' objects}
170 0.000 0.000 0.000 0.000 ex_pump.py:216(set_faults)
6/3 0.000 0.000 0.001 0.000 copy.py:227(_deepcopy_dict)
2 0.000 0.000 0.002 0.001 parameter.py:176(copy_with_vals)
9 0.000 0.000 0.007 0.001 base.py:1161(init_obj)
3 0.000 0.000 0.000 0.000 base.py:487(init_indicator_hist)
1 0.000 0.000 0.140 0.140 propagate.py:73(nominal)
170 0.000 0.000 0.000 0.000 ex_pump.py:406(indicate_over_pressure)
6 0.000 0.000 0.002 0.000 base.py:91(__init__)
26 0.000 0.000 0.000 0.000 inspect.py:2756(__str__)
224 0.000 0.000 0.000 0.000 __init__.py:74(__len__)
24 0.000 0.000 0.000 0.000 numerictypes.py:357(issubdtype)
12 0.000 0.000 0.000 0.000 {built-in method numpy.asanyarray}
6 0.000 0.000 0.001 0.000 base.py:225(init_hist)
1 0.000 0.000 0.000 0.000 {method '__reduce_ex__' of 'object' objects}
8 0.000 0.000 0.002 0.000 parameter.py:180(check_pickle)
281 0.000 0.000 0.000 0.000 base.py:514(inject_faults)
69 0.000 0.000 0.000 0.000 inspect.py:3002(<genexpr>)
55 0.000 0.000 0.000 0.000 base.py:165(prop_dynamic)
6 0.000 0.000 0.000 0.000 time.py:95(__init__)
39 0.000 0.000 0.000 0.000 result.py:372(__setattr__)
1 0.000 0.000 0.015 0.015 base.py:431(new)
5 0.000 0.000 0.007 0.001 base.py:370(add_sim)
12 0.000 0.000 0.000 0.000 fromnumeric.py:865(sort)
24 0.000 0.000 0.000 0.000 base.py:216(is_numeric)
13 0.000 0.000 0.000 0.000 inspect.py:167(get_annotations)
14 0.000 0.000 0.000 0.000 inspect.py:735(unwrap)
70 0.000 0.000 0.000 0.000 inspect.py:300(ismethod)
4 0.000 0.000 0.000 0.000 history.py:132(init_att)
6 0.000 0.000 0.005 0.001 base.py:195(__init__)
82 0.000 0.000 0.000 0.000 result.py:341(items)
6 0.000 0.000 0.000 0.000 mode.py:209(__init__)
11 0.000 0.000 0.000 0.000 base.py:301(init_track)
62 0.000 0.000 0.000 0.000 inspect.py:378(isfunction)
24 0.000 0.000 0.000 0.000 {built-in method numpy.array}
48 0.000 0.000 0.000 0.000 numerictypes.py:283(issubclass_)
12 0.000 0.000 0.000 0.000 {built-in method recordclass._dataobject.asdict}
297 0.000 0.000 0.000 0.000 {built-in method builtins.iter}
4 0.000 0.000 0.003 0.001 base.py:330(add_flow)
16 0.000 0.000 0.001 0.000 base.py:131(get_histrange)
6 0.000 0.000 0.000 0.000 base.py:115(get_true_fields)
25 0.000 0.000 0.000 0.000 result.py:114(check_include_errors)
5 0.000 0.000 0.006 0.001 function.py:81(__init__)
6 0.000 0.000 0.000 0.000 base.py:122(<listcomp>)
1 0.000 0.000 0.002 0.002 base.py:397(new_params)
5 0.000 0.000 0.001 0.000 base.py:867(create_arch_kwargs)
3 0.000 0.000 0.000 0.000 __init__.py:1166(__copy__)
12 0.000 0.000 0.000 0.000 inspect.py:3023(replace)
6 0.000 0.000 0.000 0.000 base.py:558(get_roles)
56 0.000 0.000 0.000 0.000 base.py:142(get_hist_ind)
4 0.000 0.000 0.000 0.000 base.py:526(filter_kwargs)
56 0.000 0.000 0.000 0.000 ex_pump.py:509(indicate_on)
6 0.000 0.000 0.000 0.000 base.py:585(<listcomp>)
169 0.000 0.000 0.000 0.000 {method 'clear' of 'set' objects}
69 0.000 0.000 0.000 0.000 base.py:176(set_arg_as_type)
169 0.000 0.000 0.000 0.000 {method 'copy' of 'list' objects}
1 0.000 0.000 0.009 0.009 ex_pump.py:462(init_architecture)
1 0.000 0.000 0.000 0.000 result.py:130(clean_to_return)
10 0.000 0.000 0.000 0.000 base.py:596(<listcomp>)
114 0.000 0.000 0.000 0.000 inspect.py:2734(kind)
56 0.000 0.000 0.000 0.000 ex_pump.py:490(indicate_finished)
13 0.000 0.000 0.002 0.000 inspect.py:3261(signature)
56 0.000 0.000 0.000 0.000 enum.py:1095(__new__)
9 0.000 0.000 0.000 0.000 base.py:254(get_flex_role_kwargs)
10 0.000 0.000 0.000 0.000 base.py:590(get_roles_values)
11/6 0.000 0.000 0.000 0.000 base.py:241(update_seed)
2 0.000 0.000 0.000 0.000 base.py:378(create_hist)
1 0.000 0.000 0.140 0.140 <string>:1(<module>)
26 0.000 0.000 0.000 0.000 base.py:68(check_role)
1 0.000 0.000 0.000 0.000 copyreg.py:113(_slotnames)
1 0.000 0.000 0.000 0.000 copy.py:259(_reconstruct)
5 0.000 0.000 0.000 0.000 base.py:887(check_flows)
10 0.000 0.000 0.000 0.000 base.py:836(<listcomp>)
94 0.000 0.000 0.000 0.000 inspect.py:2722(name)
1 0.000 0.000 0.015 0.015 propagate.py:575(__init__)
40 0.000 0.000 0.000 0.000 __init__.py:1128(__setitem__)
5 0.000 0.000 0.007 0.001 function.py:490(add_fxn)
1 0.000 0.000 0.125 0.125 propagate.py:382(run)
6 0.000 0.000 0.000 0.000 base.py:107(<listcomp>)
112 0.000 0.000 0.000 0.000 {method 'index' of 'list' objects}
1 0.000 0.000 0.000 0.000 propagate.py:602(create_simevents)
1 0.000 0.000 0.001 0.001 base.py:410(build)
12 0.000 0.000 0.000 0.000 base.py:228(get_connected_sims)
23 0.000 0.000 0.000 0.000 __init__.py:1118(__len__)
16 0.000 0.000 0.000 0.000 inspect.py:292(isclass)
16 0.000 0.000 0.000 0.000 base.py:295(check_slots)
6 0.000 0.000 0.000 0.000 base.py:221(set_time)
18 0.000 0.000 0.000 0.000 {method 'format' of 'str' objects}
6 0.000 0.000 0.000 0.000 base.py:104(<dictcomp>)
5 0.000 0.000 0.001 0.000 base.py:348(find_roletype_initiators)
1 0.000 0.000 0.000 0.000 graph.py:975(add_edges_from)
10 0.000 0.000 0.000 0.000 base.py:163(get_sub_kwargs)
56 0.000 0.000 0.000 0.000 {method 'isidentifier' of 'str' objects}
56 0.000 0.000 0.000 0.000 {method '__contains__' of 'frozenset' objects}
1 0.000 0.000 0.000 0.000 ex_pump.py:513(classify)
4 0.000 0.000 0.001 0.000 base.py:85(create_hist)
1 0.000 0.000 0.015 0.015 propagate.py:590(init_model)
5 0.000 0.000 0.000 0.000 base.py:907(<listcomp>)
1 0.000 0.000 0.000 0.000 propagate.py:463(__init__)
1 0.000 0.000 0.000 0.000 base.py:265(get_result)
12 0.000 0.000 0.000 0.000 base.py:230(<listcomp>)
2 0.000 0.000 0.000 0.000 state.py:345(init_hist_att)
5 0.000 0.000 0.000 0.000 base.py:63(find_roletype_initiators)
12 0.000 0.000 0.000 0.000 base.py:430(asdict)
5 0.000 0.000 0.000 0.000 base.py:531(get_flows)
1 0.000 0.000 0.000 0.000 base.py:290(get_endclass)
20 0.000 0.000 0.000 0.000 {method 'values' of 'mappingproxy' objects}
2 0.000 0.000 0.000 0.000 graph.py:573(add_nodes_from)
5 0.000 0.000 0.000 0.000 base.py:216(is_dynamic)
5 0.000 0.000 0.000 0.000 __init__.py:201(update)
1 0.000 0.000 0.000 0.000 isolate.py:43(isolates)
2 0.000 0.000 0.000 0.000 base.py:365(init_hist_att)
4 0.000 0.000 0.000 0.000 {built-in method numpy.empty}
10 0.000 0.000 0.000 0.000 base.py:595(<listcomp>)
25 0.000 0.000 0.000 0.000 result.py:123(check_include_error)
16 0.000 0.000 0.000 0.000 graph.py:1333(neighbors)
5 0.000 0.000 0.000 0.000 base.py:840(<dictcomp>)
1 0.000 0.000 0.000 0.000 base.py:232(init_flexible_roles)
40 0.000 0.000 0.000 0.000 {built-in method builtins.callable}
1 0.000 0.000 0.000 0.000 copy.py:201(_deepcopy_list)
6 0.000 0.000 0.000 0.000 base.py:106(<listcomp>)
9 0.000 0.000 0.000 0.000 base.py:536(<dictcomp>)
1 0.000 0.000 0.000 0.000 base.py:443(<listcomp>)
1 0.000 0.000 0.125 0.125 propagate.py:634(run)
1 0.000 0.000 0.000 0.000 base.py:235(init_time_hist)
1 0.000 0.000 0.000 0.000 functools.py:981(__get__)
1 0.000 0.000 0.001 0.001 function.py:510(build)
1 0.000 0.000 0.000 0.000 function.py:534(calc_repaircost)
9 0.000 0.000 0.000 0.000 base.py:351(get_full_name)
1 0.000 0.000 0.125 0.125 propagate.py:623(__call__)
1 0.000 0.000 0.000 0.000 graph.py:339(__init__)
5 0.000 0.000 0.000 0.000 base.py:902(<listcomp>)
1 0.000 0.000 0.000 0.000 {method 'reduce' of 'numpy.ufunc' objects}
1 0.000 0.000 0.000 0.000 propagate.py:68(get_mdl_kwargs)
32 0.000 0.000 0.000 0.000 __init__.py:165(__contains__)
1 0.000 0.000 0.000 0.000 history.py:268(cut)
25 0.000 0.000 0.000 0.000 inspect.py:3015(parameters)
1 0.000 0.000 0.000 0.000 base.py:370(get_resvars)
5 0.000 0.000 0.000 0.000 base.py:874(<dictcomp>)
3 0.000 0.000 0.000 0.000 base.py:812(<listcomp>)
1 0.000 0.000 0.000 0.000 fromnumeric.py:71(_wrapreduction)
1 0.000 0.000 0.125 0.125 propagate.py:482(__call__)
5 0.000 0.000 0.000 0.000 base.py:848(<dictcomp>)
1 0.000 0.000 0.000 0.000 base.py:460(get_indicators)
1 0.000 0.000 0.000 0.000 base.py:730(cut_hist)
11 0.000 0.000 0.000 0.000 base.py:279(create_name)
1 0.000 0.000 0.000 0.000 isolate.py:86(<genexpr>)
1 0.000 0.000 0.000 0.000 base.py:469(<dictcomp>)
2 0.000 0.000 0.000 0.000 base.py:86(get_track)
10 0.000 0.000 0.000 0.000 reportviews.py:531(__iter__)
12 0.000 0.000 0.000 0.000 fromnumeric.py:861(_sort_dispatcher)
1 0.000 0.000 0.000 0.000 inspect.py:1790(_shadowed_dict)
14 0.000 0.000 0.000 0.000 {built-in method sys.getrecursionlimit}
1 0.000 0.000 0.000 0.000 inspect.py:2063(_signature_is_builtin)
4 0.000 0.000 0.000 0.000 base.py:444(<listcomp>)
1 0.000 0.000 0.000 0.000 base.py:437(<listcomp>)
5 0.000 0.000 0.000 0.000 __init__.py:1121(__getitem__)
1 0.000 0.000 0.000 0.000 <class 'networkx.utils.decorators.argmap'> compilation 4:1(argmap_isolates_1)
1 0.000 0.000 0.000 0.000 result.py:103(fromdict)
1 0.000 0.000 0.000 0.000 fromnumeric.py:2836(min)
1 0.000 0.000 0.000 0.000 base.py:439(<listcomp>)
1 0.000 0.000 0.000 0.000 inspect.py:1804(getattr_static)
1 0.000 0.000 0.000 0.000 base.py:684(get_vars)
1 0.000 0.000 0.000 0.000 inspect.py:1774(_check_class)
2 0.000 0.000 0.000 0.000 base.py:431(<dictcomp>)
1 0.000 0.000 0.000 0.000 propagate.py:62(get_sim_call_kwargs)
1 0.000 0.000 0.000 0.000 graph.py:1499(degree)
2 0.000 0.000 0.000 0.000 base.py:607(return_faultmodes)
2 0.000 0.000 0.000 0.000 copy.py:264(<genexpr>)
1 0.000 0.000 0.000 0.000 base.py:321(get_resgraph)
1 0.000 0.000 0.000 0.000 base.py:204(is_iter)
10 0.000 0.000 0.000 0.000 {built-in method builtins.repr}
1 0.000 0.000 0.000 0.000 reportviews.py:421(__init__)
3 0.000 0.000 0.000 0.000 scenario.py:49(get)
1 0.000 0.000 0.000 0.000 backends.py:525(_call_if_no_backends_installed)
10 0.000 0.000 0.000 0.000 inspect.py:2726(default)
8 0.000 0.000 0.000 0.000 base.py:57(check_role)
3 0.000 0.000 0.000 0.000 {built-in method __new__ of type object at 0x00007FFD96A64FE0}
5 0.000 0.000 0.000 0.000 base.py:210(is_static)
1 0.000 0.000 0.000 0.000 inspect.py:2075(_signature_is_functionlike)
2 0.000 0.000 0.000 0.000 base.py:308(t_key)
1 0.000 0.000 0.000 0.000 {method 'get' of 'mappingproxy' objects}
3 0.000 0.000 0.000 0.000 inspect.py:1762(_static_getmro)
1 0.000 0.000 0.000 0.000 result.py:444(fromdict)
1 0.000 0.000 0.000 0.000 timer.py:62(__init__)
8 0.000 0.000 0.000 0.000 inspect.py:3019(return_annotation)
10 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects}
3 0.000 0.000 0.000 0.000 misc.py:593(_clear_cache)
1 0.000 0.000 0.000 0.000 propagate.py:673(check_faults)
2 0.000 0.000 0.000 0.000 __init__.py:1134(__iter__)
1 0.000 0.000 0.000 0.000 inspect.py:310(ismethoddescriptor)
5 0.000 0.000 0.000 0.000 base.py:863(init_block)
1 0.000 0.000 0.000 0.000 base.py:455(<listcomp>)
3 0.000 0.000 0.000 0.000 {method 'copy' of 'dict' objects}
1 0.000 0.000 0.000 0.000 graph.py:63(__set__)
1 0.000 0.000 0.000 0.000 base.py:346(<dictcomp>)
1 0.000 0.000 0.000 0.000 inspect.py:2426(_descriptor_get)
6 0.000 0.000 0.000 0.000 copy.py:107(_copy_immutable)
1 0.000 0.000 0.000 0.000 graph.py:38(__set__)
1 0.000 0.000 0.000 0.000 propagate.py:604(<dictcomp>)
1 0.000 0.000 0.000 0.000 inspect.py:1783(_is_type)
5 0.000 0.000 0.000 0.000 base.py:219(<listcomp>)
1 0.000 0.000 0.000 0.000 base.py:387(<listcomp>)
1 0.000 0.000 0.000 0.000 fromnumeric.py:72(<dictcomp>)
1 0.000 0.000 0.000 0.000 __init__.py:1138(__contains__)
1 0.000 0.000 0.000 0.000 base.py:310(<listcomp>)
1 0.000 0.000 0.000 0.000 reportviews.py:428(__call__)
1 0.000 0.000 0.000 0.000 base.py:111(<dictcomp>)
1 0.000 0.000 0.000 0.000 inspect.py:505(isbuiltin)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
2 0.000 0.000 0.000 0.000 base.py:609(<dictcomp>)
1 0.000 0.000 0.000 0.000 {built-in method builtins.sum}
1 0.000 0.000 0.000 0.000 function.py:556(<listcomp>)
1 0.000 0.000 0.000 0.000 propagate.py:607(<listcomp>)
1 0.000 0.000 0.000 0.000 {method '__exit__' of '_thread.RLock' objects}
1 0.000 0.000 0.000 0.000 {method 'sort' of 'list' objects}
1 0.000 0.000 0.000 0.000 fromnumeric.py:2831(_min_dispatcher)
prof = cProfile.run('propagate.fault_sample(mdl, fs)', sort='tottime')
SCENARIOS COMPLETE: 100%|██████████| 72/72 [00:07<00:00, 9.09it/s]
10746646 function calls (10175950 primitive calls) in 8.807 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
99392 0.796 0.000 1.885 0.000 base.py:629(get_roles_as_dict)
326136/113762 0.511 0.000 1.586 0.000 base.py:852(<listcomp>)
32340/154 0.403 0.000 7.317 0.048 base.py:734(__call__)
326136/113762 0.374 0.000 1.763 0.000 base.py:841(return_mutables)
1260502 0.357 0.000 0.486 0.000 {built-in method builtins.getattr}
209750 0.254 0.000 0.550 0.000 base.py:665(<dictcomp>)
102928 0.240 0.000 0.289 0.000 time.py:121(return_mutables)
1190555/1190553 0.220 0.000 0.239 0.000 {built-in method builtins.isinstance}
99574 0.217 0.000 2.035 0.000 base.py:630(get_sims)
4281 0.215 0.000 5.278 0.001 base.py:178(prop_static)
34192 0.192 0.000 0.192 0.000 {method 'round' of 'numpy.ndarray' objects}
5591 0.191 0.000 0.191 0.000 {built-in method builtins.dir}
85865/80049 0.188 0.000 0.335 0.000 copy.py:128(deepcopy)
875579 0.180 0.000 0.180 0.000 {built-in method builtins.hasattr}
34192 0.175 0.000 0.516 0.000 base.py:339(gen_timerange)
209016 0.156 0.000 0.210 0.000 base.py:664(<dictcomp>)
78443 0.137 0.000 0.506 0.000 base.py:284(set_field)
46049/34594 0.131 0.000 1.452 0.000 base.py:567(get_faults)
88413 0.131 0.000 0.207 0.000 base.py:634(<dictcomp>)
100084 0.126 0.000 0.127 0.000 time.py:115(__getattr__)
121482 0.120 0.000 0.165 0.000 copy.py:66(copy)
101883 0.112 0.000 0.132 0.000 base.py:519(get_default_roletypes)
24958 0.107 0.000 0.754 0.000 base.py:247(assign)
261894 0.090 0.000 0.145 0.000 base.py:426(return_mutables)
62307 0.087 0.000 1.089 0.000 base.py:859(has_changed)
326136 0.082 0.000 0.094 0.000 base.py:831(find_mutables)
2974 0.080 0.000 0.115 0.000 base.py:448(<dictcomp>)
26182 0.080 0.000 0.146 0.000 base.py:186(get_field_dict)
102928 0.078 0.000 0.216 0.000 mode.py:225(return_mutables)
594052 0.077 0.000 0.077 0.000 {method 'startswith' of 'str' objects}
36512/4281 0.071 0.000 5.293 0.001 base.py:713(execute_static_behaviors)
34520 0.068 0.000 1.514 0.000 base.py:557(set_sub_faults)
434107 0.064 0.000 0.064 0.000 {method 'items' of 'dict' objects}
5593 0.062 0.000 0.163 0.000 inspect.py:2331(_signature_from_function)
21594/8652 0.059 0.000 0.089 0.000 base.py:54(get_var)
47794 0.059 0.000 0.086 0.000 mode.py:313(has_fault)
34192 0.057 0.000 0.057 0.000 {built-in method numpy.arange}
261894 0.055 0.000 0.055 0.000 {built-in method recordclass._dataobject.astuple}
361539 0.055 0.000 0.055 0.000 {method 'get' of 'dict' objects}
2145 0.055 0.000 0.180 0.000 history.py:205(log)
11186/5593 0.053 0.000 0.284 0.000 inspect.py:2435(_signature_from_callable)
225703 0.051 0.000 0.051 0.000 {method 'update' of 'dict' objects}
1847 0.049 0.000 0.076 0.000 base.py:457(<listcomp>)
51455 0.047 0.000 0.808 0.000 base.py:855(set_mutables)
34192 0.040 0.000 0.241 0.000 fromnumeric.py:53(_wrapfunc)
6469 0.040 0.000 0.199 0.000 ex_pump.py:415(static_behavior)
34376/2145 0.038 0.000 5.974 0.003 base.py:685(update_static_behaviors)
32231 0.036 0.000 0.809 0.000 base.py:638(update_arch_behaviors)
34192 0.036 0.000 0.277 0.000 fromnumeric.py:3269(round)
12870/2145 0.034 0.000 0.258 0.000 base.py:722(inc_sim_time)
45150 0.034 0.000 0.500 0.000 time.py:129(update_time)
19243 0.033 0.000 0.039 0.000 copy.py:243(_keep_alive)
3080 0.033 0.000 0.091 0.000 base.py:358(init_roles)
11185 0.032 0.000 0.044 0.000 inspect.py:2955(__init__)
770 0.031 0.000 0.044 0.000 base.py:65(<listcomp>)
34192 0.031 0.000 0.547 0.000 base.py:116(get_timerange)
2150 0.030 0.000 0.329 0.000 parameter.py:62(__init__)
12429 0.030 0.000 0.049 0.000 inspect.py:2669(__init__)
122274 0.029 0.000 0.029 0.000 time.py:122(<genexpr>)
13887 0.028 0.000 0.028 0.000 {method '__deepcopy__' of 'numpy.generic' objects}
34376 0.028 0.000 0.038 0.000 base.py:623(update_stochastic_states)
2974 0.027 0.000 0.306 0.000 mode.py:228(get_fault)
10825 0.027 0.000 0.313 0.000 base.py:715(set_vars)
15582 0.027 0.000 0.027 0.000 base.py:240(<dictcomp>)
2150 0.026 0.000 0.036 0.000 parameter.py:136(check_immutable)
22945 0.026 0.000 0.033 0.000 __init__.py:180(add)
2150 0.026 0.000 0.035 0.000 base.py:142(set_arg_type)
4816 0.025 0.000 0.065 0.000 base.py:115(get_true_fields)
111230 0.024 0.000 0.024 0.000 {method 'copy' of 'set' objects}
174397/173605 0.022 0.000 0.023 0.000 {built-in method builtins.len}
108339 0.021 0.000 0.021 0.000 {method 'values' of 'dict' objects}
375 0.021 0.000 0.021 0.000 {method 'acquire' of '_thread.lock' objects}
32340 0.021 0.000 0.021 0.000 time.py:177(get_sim_times)
5592 0.020 0.000 0.048 0.000 inspect.py:2037(_signature_bound_method)
88418 0.020 0.000 0.020 0.000 {method 'remove' of 'list' objects}
133848 0.020 0.000 0.020 0.000 {built-in method builtins.id}
34376 0.019 0.000 0.030 0.000 base.py:659(update_dynamic_behaviors)
146 0.019 0.000 0.019 0.000 socket.py:623(send)
2766 0.017 0.000 0.048 0.000 time.py:137(set_timestep)
1689 0.017 0.000 0.049 0.000 base.py:102(find_any_phase_overlap)
2150 0.017 0.000 0.032 0.000 inspect.py:3215(__str__)
6466 0.017 0.000 0.041 0.000 ex_pump.py:233(static_behavior)
88730 0.016 0.000 0.016 0.000 {built-in method builtins.setattr}
10600 0.015 0.000 0.021 0.000 base.py:234(<dictcomp>)
19194 0.015 0.000 0.026 0.000 parameter.py:108(check_lim)
47794 0.015 0.000 0.015 0.000 {method 'intersection' of 'set' objects}
1386 0.015 0.000 1.113 0.001 base.py:281(add_flex_role_obj)
4589 0.014 0.000 0.048 0.000 <frozen _collections_abc>:717(__ior__)
2150 0.013 0.000 0.017 0.000 parameter.py:157(check_type)
2907 0.013 0.000 0.186 0.000 base.py:341(copy)
49180 0.013 0.000 0.013 0.000 {built-in method builtins.any}
770 0.013 0.000 0.362 0.000 base.py:825(__init__)
5593 0.012 0.000 0.017 0.000 inspect.py:167(get_annotations)
4816 0.012 0.000 0.038 0.000 base.py:122(<listcomp>)
2757/2154 0.012 0.000 0.046 0.000 result.py:605(flatten)
918 0.011 0.000 0.549 0.001 base.py:410(assign_roles)
6414/6341 0.011 0.000 0.045 0.000 result.py:184(__init__)
6426 0.011 0.000 0.023 0.000 ex_pump.py:310(static_behavior)
34376 0.011 0.000 0.011 0.000 time.py:111(has_executed)
2974 0.011 0.000 0.060 0.000 mode.py:63(__init__)
6416 0.010 0.000 5.297 0.001 base.py:149(update_arch_behaviors)
6435 0.010 0.000 0.031 0.000 ex_pump.py:265(static_behavior)
1224 0.010 0.000 0.232 0.000 parameter.py:205(copy)
66316 0.010 0.000 0.010 0.000 copy.py:182(_deepcopy_atomic)
765 0.010 0.000 1.019 0.001 base.py:983(copy)
21666 0.009 0.000 0.019 0.000 <frozen abc>:117(__instancecheck__)
21666 0.009 0.000 0.009 0.000 {built-in method _abc._abc_instancecheck}
6414 0.009 0.000 0.033 0.000 __init__.py:1111(__init__)
12429 0.009 0.000 0.013 0.000 enum.py:688(__call__)
5594 0.009 0.000 0.013 0.000 inspect.py:735(unwrap)
1847/1693 0.009 0.000 0.249 0.000 base.py:213(__init__)
1689 0.009 0.000 0.318 0.000 base.py:91(__init__)
18022 0.008 0.000 0.011 0.000 inspect.py:3002(<genexpr>)
920 0.008 0.000 0.180 0.000 parameter.py:176(copy_with_vals)
49836 0.008 0.000 0.008 0.000 {method 'append' of 'list' objects}
34192 0.008 0.000 0.008 0.000 fromnumeric.py:3265(_round_dispatcher)
6605 0.008 0.000 0.010 0.000 inspect.py:2756(__str__)
6414 0.008 0.000 0.019 0.000 <frozen _collections_abc>:941(update)
4692 0.008 0.000 0.008 0.000 {built-in method numpy.array}
1683 0.008 0.000 0.031 0.000 history.py:195(copy)
5593 0.008 0.000 0.291 0.000 inspect.py:3007(from_callable)
2974 0.007 0.000 0.215 0.000 base.py:445(get_pref_attrs)
5592 0.007 0.000 0.024 0.000 inspect.py:3023(replace)
2617/2463 0.007 0.000 0.098 0.000 base.py:328(init_roletypes)
4743 0.007 0.000 0.055 0.000 __init__.py:65(__init__)
16424 0.007 0.000 0.008 0.000 inspect.py:378(isfunction)
3378 0.007 0.000 0.007 0.000 {method 'copy' of 'numpy.ndarray' objects}
6469 0.006 0.000 0.010 0.000 ex_pump.py:382(set_faults)
6435 0.006 0.000 0.019 0.000 ex_pump.py:290(static_behavior)
4281 0.006 0.000 0.060 0.000 __init__.py:130(copy)
2150 0.006 0.000 0.183 0.000 parameter.py:180(check_pickle)
10697 0.006 0.000 0.008 0.000 __init__.py:304(__iter__)
3378 0.006 0.000 0.006 0.000 {method 'sort' of 'numpy.ndarray' objects}
1842 0.006 0.000 0.054 0.000 time.py:95(__init__)
1851 0.006 0.000 0.041 0.000 base.py:788(create_hist)
766 0.006 0.000 0.198 0.000 base.py:397(new_params)
3378 0.005 0.000 0.023 0.000 fromnumeric.py:865(sort)
5593 0.005 0.000 0.297 0.000 inspect.py:3261(signature)
2459 0.005 0.000 0.006 0.000 base.py:301(init_track)
1842 0.005 0.000 0.021 0.000 mode.py:209(__init__)
3378 0.005 0.000 0.005 0.000 {built-in method numpy.asanyarray}
19194 0.005 0.000 0.005 0.000 base.py:176(set_arg_as_type)
10725 0.005 0.000 0.005 0.000 base.py:263(is_known_mutable)
770 0.005 0.000 1.094 0.001 base.py:370(add_sim)
25720 0.005 0.000 0.005 0.000 {built-in method builtins.issubclass}
13808 0.005 0.000 0.005 0.000 {method 'split' of 'str' objects}
10897/10825 0.005 0.000 0.037 0.000 base.py:514(inject_faults)
10825 0.005 0.000 0.005 0.000 {built-in method builtins.min}
11116 0.005 0.000 0.005 0.000 {method 'update' of 'set' objects}
6414 0.005 0.000 0.005 0.000 result.py:372(__setattr__)
19600 0.005 0.000 0.005 0.000 {method 'join' of 'str' objects}
7163 0.005 0.000 0.006 0.000 result.py:341(items)
1072 0.005 0.000 0.024 0.000 copy.py:259(_reconstruct)
2141/1912 0.005 0.000 0.022 0.000 copy.py:227(_deepcopy_dict)
1761 0.004 0.000 0.005 0.000 base.py:585(<listcomp>)
1761 0.004 0.000 0.012 0.000 base.py:558(get_roles)
6466 0.004 0.000 0.004 0.000 ex_pump.py:216(set_faults)
2532 0.004 0.000 0.004 0.000 {built-in method recordclass._dataobject.asdict}
31225 0.004 0.000 0.004 0.000 inspect.py:2734(kind)
1386 0.004 0.000 1.035 0.001 base.py:1161(init_obj)
2656 0.004 0.000 0.303 0.000 mode.py:279(<dictcomp>)
504 0.004 0.000 0.010 0.000 result.py:425(all_with)
8562 0.004 0.000 0.005 0.000 __init__.py:74(__len__)
2865 0.004 0.000 0.008 0.000 numerictypes.py:357(issubdtype)
6469 0.004 0.000 0.004 0.000 ex_pump.py:406(indicate_over_pressure)
12429 0.004 0.000 0.004 0.000 enum.py:1095(__new__)
1847 0.004 0.000 0.147 0.000 base.py:455(init_indicators)
770 0.004 0.000 0.366 0.000 function.py:81(__init__)
2135 0.003 0.000 0.006 0.000 base.py:165(prop_dynamic)
7792 0.003 0.000 0.005 0.000 inspect.py:300(ismethod)
3384 0.003 0.000 0.004 0.000 common.py:49(get_sub_include)
154 0.003 0.000 0.004 0.000 graph.py:975(add_edges_from)
1072 0.003 0.000 0.007 0.000 {method '__reduce_ex__' of 'object' objects}
612 0.003 0.000 0.072 0.000 base.py:66(copy)
19260 0.003 0.000 0.003 0.000 inspect.py:2722(name)
2656 0.003 0.000 0.306 0.000 mode.py:275(get_faults)
2856 0.003 0.000 0.013 0.000 base.py:216(is_numeric)
16712 0.003 0.000 0.003 0.000 copy.py:107(_copy_immutable)
924 0.003 0.000 0.217 0.000 base.py:195(__init__)
154 0.003 0.000 1.237 0.008 base.py:101(__init__)
919 0.003 0.000 0.004 0.000 copyreg.py:113(_slotnames)
1689 0.003 0.000 0.003 0.000 base.py:107(<listcomp>)
5730 0.003 0.000 0.004 0.000 numerictypes.py:283(issubclass_)
4549 0.003 0.000 0.003 0.000 {method 'format' of 'str' objects}
770 0.003 0.000 0.085 0.000 base.py:867(create_arch_kwargs)
5090 0.003 0.000 0.003 0.000 __init__.py:1118(__len__)
154 0.003 0.000 0.065 0.000 base.py:410(build)
12429 0.003 0.000 0.003 0.000 {method '__contains__' of 'frozenset' objects}
11756 0.002 0.000 0.002 0.000 {built-in method builtins.iter}
153 0.002 0.000 1.428 0.009 base.py:568(copy)
2757 0.002 0.000 0.003 0.000 result.py:114(check_include_errors)
73 0.002 0.000 7.921 0.109 std.py:1160(__iter__)
16780 0.002 0.000 0.002 0.000 {built-in method builtins.callable}
924 0.002 0.000 0.045 0.000 base.py:225(init_hist)
730 0.002 0.000 0.007 0.000 base.py:590(get_roles_values)
2145 0.002 0.000 0.002 0.000 ex_pump.py:509(indicate_on)
1852 0.002 0.000 0.045 0.000 base.py:131(get_histrange)
1990 0.002 0.000 0.003 0.000 copy.py:201(_deepcopy_list)
6292 0.002 0.000 0.002 0.000 __init__.py:1128(__setitem__)
1689 0.002 0.000 0.002 0.000 base.py:104(<dictcomp>)
12429 0.002 0.000 0.002 0.000 {method 'isidentifier' of 'str' objects}
730 0.002 0.000 0.003 0.000 base.py:596(<listcomp>)
7742 0.002 0.000 0.002 0.000 {method 'values' of 'mappingproxy' objects}
4004 0.002 0.000 0.002 0.000 base.py:68(check_role)
73 0.002 0.000 0.003 0.000 propagate.py:602(create_simevents)
770 0.002 0.000 0.005 0.000 base.py:887(check_flows)
648 0.002 0.000 0.013 0.000 result.py:353(__getattr__)
308 0.002 0.000 0.002 0.000 graph.py:573(add_nodes_from)
1386 0.002 0.000 0.006 0.000 base.py:254(get_flex_role_kwargs)
73 0.002 0.000 0.033 0.000 ex_pump.py:513(classify)
11185 0.002 0.000 0.002 0.000 inspect.py:3015(parameters)
72 0.002 0.000 7.863 0.109 propagate.py:681(exec_sim)
770 0.002 0.000 1.096 0.001 function.py:490(add_fxn)
1540 0.002 0.000 0.006 0.000 base.py:163(get_sub_kwargs)
6460 0.002 0.000 0.002 0.000 {method 'clear' of 'set' objects}
47 0.002 0.000 0.004 0.000 std.py:464(format_meter)
776/771 0.002 0.000 0.026 0.000 base.py:241(update_seed)
2145 0.002 0.000 0.002 0.000 base.py:142(get_hist_ind)
154 0.002 0.000 1.127 0.007 ex_pump.py:462(init_architecture)
770 0.002 0.000 0.019 0.000 base.py:216(is_dynamic)
730 0.002 0.000 0.005 0.000 base.py:836(<listcomp>)
2145 0.002 0.000 0.002 0.000 ex_pump.py:490(indicate_finished)
924 0.002 0.000 0.023 0.000 base.py:221(set_time)
6460 0.002 0.000 0.002 0.000 {method 'copy' of 'list' objects}
2617 0.002 0.000 0.002 0.000 base.py:295(check_slots)
770 0.002 0.000 0.078 0.000 base.py:348(find_roletype_initiators)
154 0.002 0.000 0.015 0.000 base.py:447(construct_graph)
1689 0.002 0.000 0.002 0.000 base.py:106(<listcomp>)
154 0.002 0.000 7.371 0.048 propagate.py:382(run)
770 0.002 0.000 0.002 0.000 base.py:907(<listcomp>)
459/153 0.001 0.000 0.012 0.000 copy.py:210(_deepcopy_tuple)
2460 0.001 0.000 0.005 0.000 base.py:430(asdict)
4290 0.001 0.000 0.001 0.000 {method 'index' of 'list' objects}
616 0.001 0.000 0.029 0.000 base.py:330(add_flow)
770 0.001 0.000 0.002 0.000 base.py:531(get_flows)
3178 0.001 0.000 0.002 0.000 utils.py:375(<genexpr>)
770 0.001 0.000 0.045 0.000 base.py:63(find_roletype_initiators)
770 0.001 0.000 0.001 0.000 base.py:840(<dictcomp>)
2144 0.001 0.000 0.007 0.000 copy.py:264(<genexpr>)
73 0.001 0.000 7.372 0.101 propagate.py:634(run)
74 0.001 0.000 0.001 0.000 {method 'reduce' of 'numpy.ufunc' objects}
154 0.001 0.000 0.002 0.000 functools.py:981(__get__)
154 0.001 0.000 0.003 0.000 base.py:443(<listcomp>)
1836 0.001 0.000 0.006 0.000 function_base.py:873(copy)
913 0.001 0.000 0.001 0.000 graph.py:1333(neighbors)
192 0.001 0.000 0.003 0.000 {built-in method builtins.sum}
770 0.001 0.000 0.002 0.000 __init__.py:201(update)
154 0.001 0.000 0.001 0.000 graph.py:339(__init__)
1 0.001 0.001 8.801 8.801 propagate.py:1021(run)
1540 0.001 0.000 0.001 0.000 reportviews.py:531(__iter__)
302 0.001 0.000 0.001 0.000 __init__.py:1166(__copy__)
49 0.001 0.000 0.015 0.000 iostream.py:655(write)
5594 0.001 0.000 0.001 0.000 {built-in method sys.getrecursionlimit}
153 0.001 0.000 0.073 0.000 base.py:593(<dictcomp>)
770 0.001 0.000 0.001 0.000 base.py:874(<dictcomp>)
1466 0.001 0.000 0.001 0.000 inspect.py:292(isclass)
145 0.001 0.000 0.006 0.000 base.py:684(get_vars)
146 0.001 0.000 0.021 0.000 iostream.py:259(schedule)
847 0.001 0.000 0.001 0.000 base.py:536(<dictcomp>)
2757 0.001 0.000 0.001 0.000 result.py:123(check_include_error)
45 0.001 0.000 0.055 0.001 std.py:1198(update)
616 0.001 0.000 0.001 0.000 base.py:444(<listcomp>)
770 0.001 0.000 0.001 0.000 base.py:902(<listcomp>)
3378 0.001 0.000 0.001 0.000 fromnumeric.py:861(_sort_dispatcher)
154 0.001 0.000 0.066 0.000 function.py:510(build)
730 0.001 0.000 0.001 0.000 base.py:595(<listcomp>)
73 0.001 0.000 0.001 0.000 history.py:268(cut)
49 0.001 0.000 0.032 0.001 iostream.py:592(flush)
154 0.001 0.000 0.003 0.000 isolate.py:43(isolates)
308 0.001 0.000 0.001 0.000 base.py:431(<dictcomp>)
73 0.001 0.000 0.044 0.001 base.py:290(get_endclass)
297 0.001 0.000 0.002 0.000 base.py:228(get_connected_sims)
1530 0.001 0.000 0.001 0.000 base.py:351(get_full_name)
154 0.001 0.000 0.020 0.000 base.py:439(<listcomp>)
1847 0.001 0.000 0.001 0.000 base.py:279(create_name)
73 0.001 0.000 0.725 0.010 propagate.py:575(__init__)
154 0.001 0.000 0.001 0.000 base.py:437(<listcomp>)
770 0.001 0.000 0.001 0.000 base.py:848(<dictcomp>)
73 0.001 0.000 0.021 0.000 function.py:534(calc_repaircost)
73 0.001 0.000 0.049 0.001 base.py:265(get_result)
73 0.001 0.000 0.002 0.000 base.py:730(cut_hist)
154 0.001 0.000 0.002 0.000 isolate.py:86(<genexpr>)
310 0.001 0.000 0.008 0.000 base.py:85(create_hist)
297 0.001 0.000 0.001 0.000 base.py:230(<listcomp>)
271 0.001 0.000 0.001 0.000 std.py:231(__call__)
307 0.001 0.000 0.022 0.000 timer.py:62(__init__)
49 0.001 0.000 0.022 0.000 threading.py:611(wait)
154 0.001 0.000 0.001 0.000 base.py:232(init_flexible_roles)
77 0.001 0.000 0.009 0.000 base.py:526(filter_kwargs)
47 0.001 0.000 0.049 0.001 std.py:457(print_status)
459/153 0.001 0.000 0.011 0.000 copy.py:211(<listcomp>)
770 0.000 0.000 0.001 0.000 base.py:210(is_static)
96 0.000 0.000 0.046 0.000 utils.py:194(inner)
1826 0.000 0.000 0.000 0.000 __init__.py:165(__contains__)
94 0.000 0.000 0.000 0.000 {built-in method _thread.allocate_lock}
3131 0.000 0.000 0.000 0.000 {built-in method unicodedata.east_asian_width}
1 0.000 0.000 0.630 0.630 propagate.py:1044(<listcomp>)
154 0.000 0.000 0.003 0.000 <class 'networkx.utils.decorators.argmap'> compilation 4:1(argmap_isolates_1)
74/1 0.000 0.000 8.805 8.805 propagate.py:482(__call__)
195 0.000 0.000 0.001 0.000 threading.py:1192(is_alive)
74 0.000 0.000 0.002 0.000 fromnumeric.py:71(_wrapreduction)
49 0.000 0.000 0.000 0.000 threading.py:243(__init__)
93 0.000 0.000 0.000 0.000 std.py:400(format_interval)
45 0.000 0.000 0.021 0.000 threading.py:295(wait)
154 0.000 0.000 0.000 0.000 reportviews.py:421(__init__)
73 0.000 0.000 0.719 0.010 propagate.py:590(init_model)
648 0.000 0.000 0.000 0.000 result.py:94(get_dict_attr)
94 0.000 0.000 0.001 0.000 utils.py:273(_is_ascii)
40 0.000 0.000 0.001 0.000 ipkernel.py:775(_clean_thread_parent_frames)
2150 0.000 0.000 0.000 0.000 inspect.py:3019(return_annotation)
919 0.000 0.000 0.000 0.000 {method 'get' of 'mappingproxy' objects}
74 0.000 0.000 0.003 0.000 propagate.py:463(__init__)
1836 0.000 0.000 0.000 0.000 function_base.py:869(_copy_dispatcher)
2305 0.000 0.000 0.000 0.000 {built-in method builtins.repr}
50 0.000 0.000 0.000 0.000 {method 'acquire' of '_multiprocessing.SemLock' objects}
47 0.000 0.000 0.000 0.000 std.py:1446(format_dict)
73 0.000 0.000 7.381 0.101 propagate.py:623(__call__)
72 0.000 0.000 0.008 0.000 base.py:546(set_fault_disturbances)
72 0.000 0.000 0.000 0.000 base.py:755(_get_role_call)
1232 0.000 0.000 0.000 0.000 base.py:57(check_role)
154 0.000 0.000 0.003 0.000 backends.py:525(_call_if_no_backends_installed)
46 0.000 0.000 0.054 0.001 std.py:1325(refresh)
154 0.000 0.000 0.001 0.000 graph.py:1499(degree)
73 0.000 0.000 0.003 0.000 base.py:370(get_resvars)
73 0.000 0.000 0.001 0.000 result.py:103(fromdict)
47 0.000 0.000 0.005 0.000 std.py:1150(__str__)
47 0.000 0.000 0.054 0.001 std.py:1464(display)
74 0.000 0.000 0.003 0.000 result.py:130(clean_to_return)
47 0.000 0.000 0.000 0.000 std.py:186(__format__)
462 0.000 0.000 0.000 0.000 misc.py:593(_clear_cache)
90 0.000 0.000 0.000 0.000 mode.py:353(add_fault)
50 0.000 0.000 0.001 0.000 std.py:102(acquire)
146 0.000 0.000 0.000 0.000 base.py:308(t_key)
47 0.000 0.000 0.046 0.001 std.py:451(fp_write)
50 0.000 0.000 0.000 0.000 std.py:106(release)
378 0.000 0.000 0.000 0.000 threading.py:1168(ident)
195 0.000 0.000 0.000 0.000 threading.py:1125(_wait_for_tstate_lock)
765 0.000 0.000 0.000 0.000 base.py:1002(<dictcomp>)
73 0.000 0.000 0.000 0.000 base.py:321(get_resgraph)
154 0.000 0.000 0.000 0.000 graph.py:38(__set__)
154 0.000 0.000 0.000 0.000 base.py:111(<dictcomp>)
658 0.000 0.000 0.000 0.000 __init__.py:1138(__contains__)
154 0.000 0.000 0.000 0.000 graph.py:63(__set__)
72 0.000 0.000 0.007 0.000 mode.py:449(get_fault_disturbances)
73 0.000 0.000 0.002 0.000 fromnumeric.py:2836(min)
1 0.000 0.000 8.807 8.807 <string>:1(<module>)
74 0.000 0.000 0.018 0.000 base.py:607(return_faultmodes)
153 0.000 0.000 0.000 0.000 copyreg.py:104(__newobj__)
20 0.000 0.000 0.000 0.000 ipkernel.py:790(<setcomp>)
146 0.000 0.000 0.000 0.000 iostream.py:138(_event_pipe)
289 0.000 0.000 0.000 0.000 result.py:337(keys)
20 0.000 0.000 0.000 0.000 threading.py:1501(enumerate)
49 0.000 0.000 0.001 0.000 threading.py:562(__init__)
304 0.000 0.000 0.000 0.000 __init__.py:1121(__getitem__)
770 0.000 0.000 0.000 0.000 base.py:219(<listcomp>)
456 0.000 0.000 0.000 0.000 {built-in method __new__ of type object at 0x00007FFD96A64FE0}
154 0.000 0.000 0.000 0.000 base.py:235(init_time_hist)
146 0.000 0.000 0.000 0.000 __init__.py:1134(__iter__)
47 0.000 0.000 0.002 0.000 utils.py:378(disp_len)
50 0.000 0.000 0.000 0.000 {method 'release' of '_multiprocessing.SemLock' objects}
154 0.000 0.000 0.002 0.000 base.py:455(<listcomp>)
770 0.000 0.000 0.000 0.000 base.py:863(init_block)
1 0.000 0.000 8.553 8.553 propagate.py:825(run)
47 0.000 0.000 0.000 0.000 std.py:153(__init__)
49 0.000 0.000 0.014 0.000 iostream.py:577(_schedule_flush)
74 0.000 0.000 0.000 0.000 base.py:609(<dictcomp>)
46 0.000 0.000 0.000 0.000 {built-in method now}
730 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects}
73 0.000 0.000 0.000 0.000 propagate.py:607(<listcomp>)
47 0.000 0.000 0.000 0.000 {method 'sub' of 're.Pattern' objects}
73 0.000 0.000 0.000 0.000 base.py:346(<dictcomp>)
72 0.000 0.000 0.000 0.000 mode.py:68(valid_fault)
16 0.000 0.000 0.000 0.000 base.py:412(get_memory)
987 0.000 0.000 0.000 0.000 {built-in method builtins.ord}
73 0.000 0.000 0.000 0.000 propagate.py:673(check_faults)
288 0.000 0.000 0.000 0.000 {method 'endswith' of 'str' objects}
81 0.000 0.000 0.000 0.000 <frozen _collections_abc>:771(get)
49 0.000 0.000 0.000 0.000 iostream.py:550(_is_master_process)
49 0.000 0.000 0.000 0.000 iostream.py:505(parent_header)
73 0.000 0.000 0.000 0.000 propagate.py:604(<dictcomp>)
49 0.000 0.000 0.000 0.000 threading.py:1453(current_thread)
223 0.000 0.000 0.000 0.000 {method '__exit__' of '_thread.RLock' objects}
73 0.000 0.000 0.000 0.000 function.py:556(<listcomp>)
73 0.000 0.000 0.001 0.000 result.py:444(fromdict)
45 0.000 0.000 0.000 0.000 threading.py:283(_acquire_restore)
47 0.000 0.000 0.002 0.000 utils.py:374(_text_width)
74 0.000 0.000 0.000 0.000 fromnumeric.py:72(<dictcomp>)
73 0.000 0.000 0.000 0.000 base.py:204(is_iter)
60 0.000 0.000 0.000 0.000 timer.py:84(inc)
73 0.000 0.000 0.000 0.000 base.py:387(<listcomp>)
196 0.000 0.000 0.000 0.000 {built-in method time.time}
72 0.000 0.000 0.000 0.000 scenario.py:88(asdict)
154 0.000 0.000 0.000 0.000 reportviews.py:428(__call__)
73 0.000 0.000 0.000 0.000 base.py:310(<listcomp>)
369 0.000 0.000 0.000 0.000 {method 'keys' of 'dict' objects}
196 0.000 0.000 0.000 0.000 threading.py:575(is_set)
49 0.000 0.000 0.000 0.000 threading.py:274(__exit__)
50 0.000 0.000 0.000 0.000 {method 'acquire' of '_thread.RLock' objects}
72 0.000 0.000 0.000 0.000 propagate.py:845(get_output)
1 0.000 0.000 8.806 8.806 propagate.py:225(fault_sample)
9 0.000 0.000 0.001 0.000 base.py:771(get_memory)
302 0.000 0.000 0.000 0.000 {method 'copy' of 'dict' objects}
1 0.000 0.000 0.247 0.247 propagate.py:985(run_nom)
91 0.000 0.000 0.000 0.000 {built-in method sys.getsizeof}
1 0.000 0.000 0.001 0.001 function.py:561(get_memory)
1 0.000 0.000 8.807 8.807 {built-in method builtins.exec}
1 0.000 0.000 0.002 0.002 std.py:952(__init__)
233 0.000 0.000 0.000 0.000 {built-in method builtins.divmod}
153 0.000 0.000 0.000 0.000 {method 'lower' of 'str' objects}
191 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects}
49 0.000 0.000 0.000 0.000 threading.py:271(__enter__)
45 0.000 0.000 0.000 0.000 threading.py:286(_is_owned)
72 0.000 0.000 0.000 0.000 base.py:761(<listcomp>)
45 0.000 0.000 0.000 0.000 threading.py:280(_release_save)
47 0.000 0.000 0.000 0.000 {built-in method builtins.max}
47 0.000 0.000 0.000 0.000 utils.py:108(__init__)
1 0.000 0.000 0.000 0.000 __init__.py:48(create_string_buffer)
49 0.000 0.000 0.000 0.000 {built-in method nt.getpid}
47 0.000 0.000 0.000 0.000 std.py:167(colour)
1 0.000 0.000 0.000 0.000 utils.py:297(_screen_shape_windows)
4 0.000 0.000 0.000 0.000 history.py:132(init_att)
73 0.000 0.000 0.000 0.000 {method 'sort' of 'list' objects}
16 0.000 0.000 0.000 0.000 base.py:496(get_memory)
152 0.000 0.000 0.000 0.000 inspect.py:2726(default)
47 0.000 0.000 0.000 0.000 utils.py:112(__format__)
49 0.000 0.000 0.000 0.000 {built-in method _thread.get_ident}
1 0.000 0.000 0.000 0.000 result.py:669(get_memory)
1 0.000 0.000 0.001 0.001 propagate.py:807(__init__)
3 0.000 0.000 0.000 0.000 base.py:487(init_indicator_hist)
50 0.000 0.000 0.000 0.000 {method 'release' of '_thread.RLock' objects}
49 0.000 0.000 0.000 0.000 {method 'write' of '_io.StringIO' objects}
47 0.000 0.000 0.000 0.000 std.py:163(colour)
1 0.000 0.000 0.001 0.001 std.py:438(status_printer)
73 0.000 0.000 0.000 0.000 fromnumeric.py:2831(_min_dispatcher)
1 0.000 0.000 0.000 0.000 propagate.py:877(check_hist_memory)
49 0.000 0.000 0.000 0.000 {method '__enter__' of '_thread.lock' objects}
49 0.000 0.000 0.000 0.000 {built-in method builtins.abs}
1 0.000 0.000 0.015 0.015 base.py:431(new)
1 0.000 0.000 0.001 0.001 propagate.py:891(check_mdl_memory)
2 0.000 0.000 0.001 0.001 std.py:1265(close)
49 0.000 0.000 0.000 0.000 {method '__exit__' of '_thread.lock' objects}
49 0.000 0.000 0.000 0.000 {method 'get' of '_contextvars.ContextVar' objects}
45 0.000 0.000 0.000 0.000 {method 'release' of '_thread.lock' objects}
2 0.000 0.000 0.000 0.000 base.py:378(create_hist)
1 0.000 0.000 0.000 0.000 std.py:663(__new__)
1 0.000 0.000 0.630 0.630 propagate.py:1037(gen_inputs)
3 0.000 0.000 0.000 0.000 _weakrefset.py:63(__iter__)
1 0.000 0.000 0.000 0.000 std.py:686(_decr_instances)
1 0.000 0.000 0.000 0.000 inspect.py:1790(_shadowed_dict)
2 0.000 0.000 0.000 0.000 base.py:365(init_hist_att)
3 0.000 0.000 0.000 0.000 sample.py:916(scenarios)
1 0.000 0.000 0.000 0.000 propagate.py:62(get_sim_call_kwargs)
2 0.000 0.000 0.000 0.000 state.py:345(init_hist_att)
1 0.000 0.000 0.000 0.000 std.py:679(_get_free_pos)
1 0.000 0.000 0.000 0.000 propagate.py:850(gen_sim_kwargs)
1 0.000 0.000 0.000 0.000 fromnumeric.py:2177(sum)
1 0.000 0.000 0.000 0.000 utils.py:213(__init__)
4 0.000 0.000 0.000 0.000 {built-in method numpy.empty}
1 0.000 0.000 0.000 0.000 inspect.py:2075(_signature_is_functionlike)
1 0.000 0.000 0.000 0.000 propagate.py:643(<dictcomp>)
3 0.000 0.000 0.000 0.000 inspect.py:1762(_static_getmro)
2 0.000 0.000 0.000 0.000 std.py:1286(fp_write)
1 0.000 0.000 0.000 0.000 inspect.py:2063(_signature_is_builtin)
1 0.000 0.000 8.805 8.805 propagate.py:978(__call__)
2 0.000 0.000 0.000 0.000 _weakrefset.py:27(__exit__)
3 0.000 0.000 0.000 0.000 {method 'remove' of 'set' objects}
1 0.000 0.000 0.000 0.000 propagate.py:68(get_mdl_kwargs)
4 0.000 0.000 0.000 0.000 std.py:110(__enter__)
4 0.000 0.000 0.000 0.000 std.py:113(__exit__)
3 0.000 0.000 0.000 0.000 base.py:812(<listcomp>)
1 0.000 0.000 0.000 0.000 utils.py:266(_supports_unicode)
2 0.000 0.000 0.000 0.000 _weakrefset.py:53(_commit_removals)
1 0.000 0.000 0.000 0.000 inspect.py:1804(getattr_static)
1 0.000 0.000 0.000 0.000 base.py:469(<dictcomp>)
1 0.000 0.000 0.000 0.000 inspect.py:310(ismethoddescriptor)
2 0.000 0.000 0.000 0.000 base.py:86(get_track)
1 0.000 0.000 0.000 0.000 functools.py:393(__get__)
1 0.000 0.000 0.000 0.000 inspect.py:1774(_check_class)
1 0.000 0.000 0.000 0.000 sample.py:912(get_times)
1 0.000 0.000 0.000 0.000 _weakrefset.py:85(add)
1 0.000 0.000 0.000 0.000 {built-in method fromtimestamp}
1 0.000 0.000 0.000 0.000 inspect.py:2426(_descriptor_get)
1 0.000 0.000 0.000 0.000 base.py:460(get_indicators)
3 0.000 0.000 0.000 0.000 {method 'add' of 'set' objects}
1 0.000 0.000 0.000 0.000 std.py:682(<setcomp>)
1 0.000 0.000 0.000 0.000 _weakrefset.py:110(remove)
3 0.000 0.000 0.000 0.000 scenario.py:49(get)
2 0.000 0.000 0.000 0.000 utils.py:187(disable_on_exception)
1 0.000 0.000 0.000 0.000 function.py:577(<listcomp>)
1 0.000 0.000 0.000 0.000 propagate.py:641(get_models)
3 0.000 0.000 0.000 0.000 utils.py:152(wrapper_setattr)
2 0.000 0.000 0.000 0.000 _weakrefset.py:21(__enter__)
1 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:1207(_handle_fromlist)
4 0.000 0.000 0.000 0.000 utils.py:222(__eq__)
1 0.000 0.000 0.000 0.000 propagate.py:821(close_pool)
1 0.000 0.000 0.000 0.000 utils.py:125(__eq__)
1 0.000 0.000 0.000 0.000 std.py:1112(__len__)
1 0.000 0.000 0.000 0.000 _monitor.py:94(report)
2 0.000 0.000 0.000 0.000 _weakrefset.py:17(__init__)
1 0.000 0.000 0.000 0.000 inspect.py:1783(_is_type)
1 0.000 0.000 0.000 0.000 utils.py:156(__init__)
1 0.000 0.000 0.000 0.000 utils.py:252(_is_utf)
3 0.000 0.000 0.000 0.000 std.py:226(__init__)
1 0.000 0.000 0.000 0.000 {built-in method fromkeys}
2 0.000 0.000 0.000 0.000 std.py:1153(_comparable)
1 0.000 0.000 0.000 0.000 inspect.py:505(isbuiltin)
1 0.000 0.000 0.000 0.000 std.py:1147(__del__)
2 0.000 0.000 0.000 0.000 {method 'pop' of 'list' objects}
1 0.000 0.000 0.000 0.000 {method 'encode' of 'str' objects}
1 0.000 0.000 0.000 0.000 propagate.py:873(std_runner)
2 0.000 0.000 0.000 0.000 std.py:1157(__hash__)
2 0.000 0.000 0.000 0.000 {built-in method _weakref.proxy}
1 0.000 0.000 0.000 0.000 std.py:760(get_lock)
1 0.000 0.000 0.000 0.000 utils.py:282(_screen_shape_wrapper)
1 0.000 0.000 0.000 0.000 tz.py:74(utcoffset)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 0.000 0.000 utils.py:139(__getattr__)
1 0.000 0.000 0.000 0.000 fromnumeric.py:2172(_sum_dispatcher)
1 0.000 0.000 0.000 0.000 {method 'difference' of 'set' objects}
1 0.000 0.000 0.000 0.000 {built-in method sys.audit}
1 0.000 0.000 0.000 0.000 propagate.py:690(close_pool)
1 0.000 0.000 0.000 0.000 std.py:1301(<lambda>)
prof = cProfile.run('propagate.fault_sample(mdl, fs)', sort='cumtime')
SCENARIOS COMPLETE: 100%|██████████| 72/72 [00:07<00:00, 9.50it/s]
10745834 function calls (10175140 primitive calls) in 8.527 seconds
Ordered by: cumulative time
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 8.527 8.527 {built-in method builtins.exec}
1 0.000 0.000 8.527 8.527 <string>:1(<module>)
1 0.000 0.000 8.527 8.527 propagate.py:225(fault_sample)
1 0.000 0.000 8.526 8.526 propagate.py:978(__call__)
74/1 0.000 0.000 8.526 8.526 propagate.py:482(__call__)
1 0.001 0.001 8.523 8.523 propagate.py:1021(run)
1 0.000 0.000 8.247 8.247 propagate.py:825(run)
73 0.002 0.000 7.576 0.104 std.py:1160(__iter__)
72 0.002 0.000 7.522 0.104 propagate.py:681(exec_sim)
73 0.000 0.000 7.064 0.097 propagate.py:623(__call__)
73 0.001 0.000 7.055 0.097 propagate.py:634(run)
154 0.002 0.000 7.054 0.046 propagate.py:382(run)
32340/154 0.384 0.000 6.998 0.045 base.py:734(__call__)
34376/2145 0.035 0.000 5.703 0.003 base.py:685(update_static_behaviors)
6416 0.009 0.000 5.058 0.001 base.py:149(update_arch_behaviors)
36512/4281 0.067 0.000 5.055 0.001 base.py:713(execute_static_behaviors)
4281 0.204 0.000 5.040 0.001 base.py:178(prop_static)
99574 0.207 0.000 1.944 0.000 base.py:630(get_sims)
99392 0.759 0.000 1.803 0.000 base.py:629(get_roles_as_dict)
326136/113762 0.362 0.000 1.697 0.000 base.py:841(return_mutables)
326136/113762 0.493 0.000 1.529 0.000 base.py:852(<listcomp>)
153 0.002 0.000 1.488 0.010 base.py:568(copy)
34520 0.066 0.000 1.444 0.000 base.py:557(set_sub_faults)
46049/34594 0.123 0.000 1.385 0.000 base.py:567(get_faults)
154 0.003 0.000 1.286 0.008 base.py:101(__init__)
154 0.002 0.000 1.171 0.008 ex_pump.py:462(init_architecture)
1386 0.016 0.000 1.156 0.001 base.py:281(add_flex_role_obj)
770 0.002 0.000 1.140 0.001 function.py:490(add_fxn)
770 0.005 0.000 1.138 0.001 base.py:370(add_sim)
1386 0.004 0.000 1.076 0.001 base.py:1161(init_obj)
765 0.010 0.000 1.064 0.001 base.py:983(copy)
62307 0.082 0.000 1.045 0.000 base.py:859(has_changed)
51455 0.045 0.000 0.779 0.000 base.py:855(set_mutables)
32231 0.036 0.000 0.777 0.000 base.py:638(update_arch_behaviors)
73 0.001 0.000 0.731 0.010 propagate.py:575(__init__)
24958 0.105 0.000 0.727 0.000 base.py:247(assign)
73 0.000 0.000 0.725 0.010 propagate.py:590(init_model)
1 0.000 0.000 0.669 0.669 propagate.py:1037(gen_inputs)
1 0.000 0.000 0.669 0.669 propagate.py:1044(<listcomp>)
918 0.012 0.000 0.574 0.001 base.py:410(assign_roles)
209750 0.245 0.000 0.526 0.000 base.py:665(<dictcomp>)
34192 0.028 0.000 0.523 0.000 base.py:116(get_timerange)
34192 0.165 0.000 0.495 0.000 base.py:339(gen_timerange)
78443 0.133 0.000 0.487 0.000 base.py:284(set_field)
45150 0.032 0.000 0.472 0.000 time.py:129(update_time)
1260502 0.344 0.000 0.466 0.000 {built-in method builtins.getattr}
770 0.003 0.000 0.378 0.000 function.py:81(__init__)
770 0.013 0.000 0.375 0.000 base.py:825(__init__)
2150 0.033 0.000 0.341 0.000 parameter.py:62(__init__)
1689 0.009 0.000 0.330 0.000 base.py:91(__init__)
85865/80049 0.181 0.000 0.323 0.000 copy.py:128(deepcopy)
5593 0.006 0.000 0.306 0.000 inspect.py:3261(signature)
2974 0.029 0.000 0.301 0.000 mode.py:228(get_fault)
5593 0.008 0.000 0.301 0.000 inspect.py:3007(from_callable)
2656 0.003 0.000 0.300 0.000 mode.py:275(get_faults)
10825 0.025 0.000 0.298 0.000 base.py:715(set_vars)
2656 0.004 0.000 0.297 0.000 mode.py:279(<dictcomp>)
11186/5593 0.054 0.000 0.293 0.000 inspect.py:2435(_signature_from_callable)
1 0.000 0.000 0.275 0.275 propagate.py:985(run_nom)
102928 0.228 0.000 0.273 0.000 time.py:121(return_mutables)
34192 0.034 0.000 0.268 0.000 fromnumeric.py:3269(round)
1847/1693 0.010 0.000 0.257 0.000 base.py:213(__init__)
12870/2145 0.032 0.000 0.247 0.000 base.py:722(inc_sim_time)
1224 0.010 0.000 0.243 0.000 parameter.py:205(copy)
34192 0.038 0.000 0.233 0.000 fromnumeric.py:53(_wrapfunc)
1190546 0.207 0.000 0.225 0.000 {built-in method builtins.isinstance}
924 0.003 0.000 0.224 0.000 base.py:195(__init__)
2974 0.008 0.000 0.211 0.000 base.py:445(get_pref_attrs)
102928 0.074 0.000 0.208 0.000 mode.py:225(return_mutables)
766 0.006 0.000 0.204 0.000 base.py:397(new_params)
209016 0.151 0.000 0.202 0.000 base.py:664(<dictcomp>)
88413 0.128 0.000 0.197 0.000 base.py:634(<dictcomp>)
2907 0.014 0.000 0.195 0.000 base.py:341(copy)
5591 0.194 0.000 0.194 0.000 {built-in method builtins.dir}
6469 0.038 0.000 0.189 0.000 ex_pump.py:415(static_behavior)
2150 0.006 0.000 0.189 0.000 parameter.py:180(check_pickle)
34192 0.187 0.000 0.187 0.000 {method 'round' of 'numpy.ndarray' objects}
920 0.009 0.000 0.186 0.000 parameter.py:176(copy_with_vals)
875573 0.172 0.000 0.172 0.000 {built-in method builtins.hasattr}
2145 0.051 0.000 0.170 0.000 history.py:205(log)
5593 0.063 0.000 0.168 0.000 inspect.py:2331(_signature_from_function)
121482 0.116 0.000 0.159 0.000 copy.py:66(copy)
1847 0.004 0.000 0.153 0.000 base.py:455(init_indicators)
261894 0.089 0.000 0.143 0.000 base.py:426(return_mutables)
26182 0.077 0.000 0.140 0.000 base.py:186(get_field_dict)
101883 0.108 0.000 0.128 0.000 base.py:519(get_default_roletypes)
100084 0.119 0.000 0.120 0.000 time.py:115(__getattr__)
2974 0.079 0.000 0.113 0.000 base.py:448(<dictcomp>)
2617/2463 0.008 0.000 0.100 0.000 base.py:328(init_roletypes)
3080 0.034 0.000 0.093 0.000 base.py:358(init_roles)
326136 0.079 0.000 0.091 0.000 base.py:831(find_mutables)
770 0.003 0.000 0.087 0.000 base.py:867(create_arch_kwargs)
21594/8652 0.056 0.000 0.084 0.000 base.py:54(get_var)
47794 0.056 0.000 0.082 0.000 mode.py:313(has_fault)
770 0.002 0.000 0.080 0.000 base.py:348(find_roletype_initiators)
1847 0.051 0.000 0.078 0.000 base.py:457(<listcomp>)
153 0.001 0.000 0.076 0.000 base.py:593(<dictcomp>)
594052 0.076 0.000 0.076 0.000 {method 'startswith' of 'str' objects}
612 0.003 0.000 0.076 0.000 base.py:66(copy)
154 0.001 0.000 0.069 0.000 function.py:510(build)
154 0.003 0.000 0.069 0.000 base.py:410(build)
4816 0.024 0.000 0.064 0.000 base.py:115(get_true_fields)
434104 0.061 0.000 0.061 0.000 {method 'items' of 'dict' objects}
2974 0.011 0.000 0.058 0.000 mode.py:63(__init__)
1842 0.006 0.000 0.056 0.000 time.py:95(__init__)
4281 0.005 0.000 0.055 0.000 __init__.py:130(copy)
34192 0.055 0.000 0.055 0.000 {built-in method numpy.arange}
261894 0.054 0.000 0.054 0.000 {built-in method recordclass._dataobject.astuple}
361539 0.053 0.000 0.053 0.000 {method 'get' of 'dict' objects}
4743 0.007 0.000 0.052 0.000 __init__.py:65(__init__)
73 0.001 0.000 0.051 0.001 base.py:265(get_result)
42 0.001 0.000 0.051 0.001 std.py:1198(update)
12429 0.031 0.000 0.051 0.000 inspect.py:2669(__init__)
43 0.000 0.000 0.050 0.001 std.py:1325(refresh)
2766 0.017 0.000 0.050 0.000 time.py:137(set_timestep)
5592 0.021 0.000 0.050 0.000 inspect.py:2037(_signature_bound_method)
44 0.000 0.000 0.049 0.001 std.py:1464(display)
1689 0.018 0.000 0.049 0.000 base.py:102(find_any_phase_overlap)
1852 0.002 0.000 0.049 0.000 base.py:131(get_histrange)
924 0.002 0.000 0.049 0.000 base.py:225(init_hist)
225700 0.048 0.000 0.048 0.000 {method 'update' of 'dict' objects}
6414/6341 0.011 0.000 0.046 0.000 result.py:184(__init__)
73 0.001 0.000 0.046 0.001 base.py:290(get_endclass)
770 0.001 0.000 0.045 0.000 base.py:63(find_roletype_initiators)
2757/2154 0.011 0.000 0.045 0.000 result.py:605(flatten)
4589 0.013 0.000 0.045 0.000 <frozen _collections_abc>:717(__ior__)
11185 0.032 0.000 0.045 0.000 inspect.py:2955(__init__)
44 0.000 0.000 0.044 0.001 std.py:457(print_status)
770 0.031 0.000 0.044 0.000 base.py:65(<listcomp>)
44 0.000 0.000 0.042 0.001 std.py:451(fp_write)
90 0.000 0.000 0.042 0.000 utils.py:194(inner)
1851 0.006 0.000 0.041 0.000 base.py:788(create_hist)
6466 0.016 0.000 0.039 0.000 ex_pump.py:233(static_behavior)
4816 0.012 0.000 0.038 0.000 base.py:122(<listcomp>)
10897/10825 0.005 0.000 0.038 0.000 base.py:514(inject_faults)
2150 0.027 0.000 0.038 0.000 parameter.py:136(check_immutable)
19243 0.032 0.000 0.038 0.000 copy.py:243(_keep_alive)
34376 0.027 0.000 0.037 0.000 base.py:623(update_stochastic_states)
2150 0.026 0.000 0.036 0.000 base.py:142(set_arg_type)
73 0.002 0.000 0.034 0.000 ex_pump.py:513(classify)
6414 0.009 0.000 0.033 0.000 __init__.py:1111(__init__)
2150 0.017 0.000 0.033 0.000 inspect.py:3215(__str__)
1683 0.008 0.000 0.031 0.000 history.py:195(copy)
22945 0.024 0.000 0.031 0.000 __init__.py:180(add)
46 0.001 0.000 0.030 0.001 iostream.py:592(flush)
6435 0.010 0.000 0.030 0.000 ex_pump.py:265(static_behavior)
616 0.001 0.000 0.029 0.000 base.py:330(add_flow)
34376 0.019 0.000 0.029 0.000 base.py:659(update_dynamic_behaviors)
122274 0.028 0.000 0.028 0.000 time.py:122(<genexpr>)
19194 0.015 0.000 0.026 0.000 parameter.py:108(check_lim)
13887 0.026 0.000 0.026 0.000 {method '__deepcopy__' of 'numpy.generic' objects}
1072 0.005 0.000 0.026 0.000 copy.py:259(_reconstruct)
776/771 0.001 0.000 0.025 0.000 base.py:241(update_seed)
15582 0.025 0.000 0.025 0.000 base.py:240(<dictcomp>)
924 0.002 0.000 0.025 0.000 base.py:221(set_time)
5592 0.008 0.000 0.024 0.000 inspect.py:3023(replace)
307 0.001 0.000 0.023 0.000 timer.py:62(__init__)
111230 0.023 0.000 0.023 0.000 {method 'copy' of 'set' objects}
1842 0.005 0.000 0.023 0.000 mode.py:209(__init__)
3378 0.006 0.000 0.023 0.000 fromnumeric.py:865(sort)
46 0.001 0.000 0.023 0.000 threading.py:611(wait)
174391/173599 0.022 0.000 0.022 0.000 {built-in method builtins.len}
6426 0.010 0.000 0.022 0.000 ex_pump.py:310(static_behavior)
43 0.000 0.000 0.022 0.001 threading.py:295(wait)
154 0.001 0.000 0.022 0.000 base.py:439(<listcomp>)
2141/1912 0.004 0.000 0.022 0.000 copy.py:227(_deepcopy_dict)
73 0.001 0.000 0.022 0.000 function.py:534(calc_repaircost)
355 0.021 0.000 0.021 0.000 {method 'acquire' of '_thread.lock' objects}
770 0.002 0.000 0.021 0.000 base.py:216(is_dynamic)
10600 0.015 0.000 0.020 0.000 base.py:234(<dictcomp>)
88418 0.020 0.000 0.020 0.000 {method 'remove' of 'list' objects}
32340 0.019 0.000 0.019 0.000 time.py:177(get_sim_times)
133848 0.019 0.000 0.019 0.000 {built-in method builtins.id}
6414 0.008 0.000 0.019 0.000 <frozen _collections_abc>:941(update)
74 0.000 0.000 0.019 0.000 base.py:607(return_faultmodes)
108339 0.019 0.000 0.019 0.000 {method 'values' of 'dict' objects}
21666 0.010 0.000 0.018 0.000 <frozen abc>:117(__instancecheck__)
6435 0.006 0.000 0.018 0.000 ex_pump.py:290(static_behavior)
2150 0.014 0.000 0.018 0.000 parameter.py:157(check_type)
5593 0.012 0.000 0.017 0.000 inspect.py:167(get_annotations)
137 0.001 0.000 0.016 0.000 iostream.py:259(schedule)
88730 0.016 0.000 0.016 0.000 {built-in method builtins.setattr}
154 0.002 0.000 0.015 0.000 base.py:447(construct_graph)
137 0.015 0.000 0.015 0.000 socket.py:623(send)
47794 0.014 0.000 0.014 0.000 {method 'intersection' of 'set' objects}
12429 0.010 0.000 0.014 0.000 enum.py:688(__call__)
5594 0.010 0.000 0.013 0.000 inspect.py:735(unwrap)
2856 0.003 0.000 0.013 0.000 base.py:216(is_numeric)
648 0.002 0.000 0.013 0.000 result.py:353(__getattr__)
49180 0.012 0.000 0.012 0.000 {built-in method builtins.any}
1761 0.004 0.000 0.012 0.000 base.py:558(get_roles)
459/153 0.001 0.000 0.012 0.000 copy.py:210(_deepcopy_tuple)
46 0.001 0.000 0.012 0.000 iostream.py:655(write)
459/153 0.001 0.000 0.012 0.000 copy.py:211(<listcomp>)
18022 0.009 0.000 0.011 0.000 inspect.py:3002(<genexpr>)
6469 0.006 0.000 0.011 0.000 ex_pump.py:382(set_faults)
46 0.000 0.000 0.011 0.000 iostream.py:577(_schedule_flush)
6605 0.008 0.000 0.010 0.000 inspect.py:2756(__str__)
34376 0.010 0.000 0.010 0.000 time.py:111(has_executed)
504 0.004 0.000 0.010 0.000 result.py:425(all_with)
66316 0.010 0.000 0.010 0.000 copy.py:182(_deepcopy_atomic)
77 0.001 0.000 0.009 0.000 base.py:526(filter_kwargs)
21666 0.009 0.000 0.009 0.000 {built-in method _abc._abc_instancecheck}
16424 0.007 0.000 0.009 0.000 inspect.py:378(isfunction)
72 0.000 0.000 0.008 0.000 base.py:546(set_fault_disturbances)
49836 0.008 0.000 0.008 0.000 {method 'append' of 'list' objects}
1 0.000 0.000 0.008 0.008 base.py:431(new)
10697 0.006 0.000 0.008 0.000 __init__.py:304(__iter__)
72 0.000 0.000 0.008 0.000 mode.py:449(get_fault_disturbances)
2865 0.004 0.000 0.008 0.000 numerictypes.py:357(issubdtype)
2144 0.001 0.000 0.008 0.000 copy.py:264(<genexpr>)
34192 0.008 0.000 0.008 0.000 fromnumeric.py:3265(_round_dispatcher)
310 0.001 0.000 0.007 0.000 base.py:85(create_hist)
1072 0.003 0.000 0.007 0.000 {method '__reduce_ex__' of 'object' objects}
4692 0.007 0.000 0.007 0.000 {built-in method numpy.array}
3378 0.007 0.000 0.007 0.000 {method 'copy' of 'numpy.ndarray' objects}
145 0.001 0.000 0.007 0.000 base.py:684(get_vars)
730 0.002 0.000 0.007 0.000 base.py:590(get_roles_values)
2459 0.005 0.000 0.007 0.000 base.py:301(init_track)
1386 0.002 0.000 0.007 0.000 base.py:254(get_flex_role_kwargs)
2135 0.003 0.000 0.006 0.000 base.py:165(prop_dynamic)
1540 0.002 0.000 0.006 0.000 base.py:163(get_sub_kwargs)
1761 0.005 0.000 0.006 0.000 base.py:585(<listcomp>)
2460 0.001 0.000 0.006 0.000 base.py:430(asdict)
1836 0.001 0.000 0.006 0.000 function_base.py:873(copy)
7163 0.004 0.000 0.005 0.000 result.py:341(items)
3378 0.005 0.000 0.005 0.000 {method 'sort' of 'numpy.ndarray' objects}
770 0.002 0.000 0.005 0.000 base.py:887(check_flows)
7792 0.004 0.000 0.005 0.000 inspect.py:300(ismethod)
730 0.002 0.000 0.005 0.000 base.py:836(<listcomp>)
19194 0.005 0.000 0.005 0.000 base.py:176(set_arg_as_type)
25720 0.005 0.000 0.005 0.000 {built-in method builtins.issubclass}
6414 0.005 0.000 0.005 0.000 result.py:372(__setattr__)
10725 0.005 0.000 0.005 0.000 base.py:263(is_known_mutable)
3378 0.005 0.000 0.005 0.000 {built-in method numpy.asanyarray}
44 0.000 0.000 0.005 0.000 std.py:1150(__str__)
11116 0.005 0.000 0.005 0.000 {method 'update' of 'set' objects}
19600 0.005 0.000 0.005 0.000 {method 'join' of 'str' objects}
10825 0.005 0.000 0.005 0.000 {built-in method builtins.min}
13808 0.005 0.000 0.005 0.000 {method 'split' of 'str' objects}
31225 0.004 0.000 0.004 0.000 inspect.py:2734(kind)
2532 0.004 0.000 0.004 0.000 {built-in method recordclass._dataobject.asdict}
8562 0.003 0.000 0.004 0.000 __init__.py:74(__len__)
6466 0.004 0.000 0.004 0.000 ex_pump.py:216(set_faults)
6469 0.004 0.000 0.004 0.000 ex_pump.py:406(indicate_over_pressure)
919 0.003 0.000 0.004 0.000 copyreg.py:113(_slotnames)
12429 0.004 0.000 0.004 0.000 enum.py:1095(__new__)
3384 0.003 0.000 0.004 0.000 common.py:49(get_sub_include)
44 0.002 0.000 0.004 0.000 std.py:464(format_meter)
5730 0.003 0.000 0.004 0.000 numerictypes.py:283(issubclass_)
154 0.000 0.000 0.004 0.000 <class 'networkx.utils.decorators.argmap'> compilation 4:1(argmap_isolates_1)
154 0.003 0.000 0.004 0.000 graph.py:975(add_edges_from)
1689 0.003 0.000 0.003 0.000 base.py:107(<listcomp>)
5090 0.003 0.000 0.003 0.000 __init__.py:1118(__len__)
73 0.000 0.000 0.003 0.000 base.py:370(get_resvars)
1990 0.002 0.000 0.003 0.000 copy.py:201(_deepcopy_list)
19260 0.003 0.000 0.003 0.000 inspect.py:2722(name)
2757 0.002 0.000 0.003 0.000 result.py:114(check_include_errors)
154 0.000 0.000 0.003 0.000 backends.py:525(_call_if_no_backends_installed)
73 0.002 0.000 0.003 0.000 propagate.py:602(create_simevents)
4543 0.003 0.000 0.003 0.000 {method 'format' of 'str' objects}
730 0.002 0.000 0.003 0.000 base.py:596(<listcomp>)
308 0.002 0.000 0.003 0.000 graph.py:573(add_nodes_from)
154 0.001 0.000 0.003 0.000 isolate.py:43(isolates)
154 0.001 0.000 0.003 0.000 base.py:443(<listcomp>)
16712 0.003 0.000 0.003 0.000 copy.py:107(_copy_immutable)
770 0.001 0.000 0.003 0.000 __init__.py:201(update)
12429 0.003 0.000 0.003 0.000 {method '__contains__' of 'frozenset' objects}
16780 0.002 0.000 0.002 0.000 {built-in method builtins.callable}
189 0.001 0.000 0.002 0.000 {built-in method builtins.sum}
74 0.000 0.000 0.002 0.000 propagate.py:463(__init__)
44 0.000 0.000 0.002 0.000 utils.py:378(disp_len)
6292 0.002 0.000 0.002 0.000 __init__.py:1128(__setitem__)
11756 0.002 0.000 0.002 0.000 {built-in method builtins.iter}
7742 0.002 0.000 0.002 0.000 {method 'values' of 'mappingproxy' objects}
12429 0.002 0.000 0.002 0.000 {method 'isidentifier' of 'str' objects}
1689 0.002 0.000 0.002 0.000 base.py:104(<dictcomp>)
44 0.000 0.000 0.002 0.000 utils.py:374(_text_width)
2617 0.002 0.000 0.002 0.000 base.py:295(check_slots)
770 0.001 0.000 0.002 0.000 base.py:531(get_flows)
74 0.000 0.000 0.002 0.000 result.py:130(clean_to_return)
154 0.001 0.000 0.002 0.000 functools.py:981(__get__)
297 0.001 0.000 0.002 0.000 base.py:228(get_connected_sims)
2145 0.002 0.000 0.002 0.000 ex_pump.py:509(indicate_on)
4004 0.002 0.000 0.002 0.000 base.py:68(check_role)
11185 0.002 0.000 0.002 0.000 inspect.py:3015(parameters)
73 0.000 0.000 0.002 0.000 fromnumeric.py:2836(min)
770 0.002 0.000 0.002 0.000 base.py:907(<listcomp>)
154 0.000 0.000 0.002 0.000 base.py:455(<listcomp>)
6460 0.002 0.000 0.002 0.000 {method 'copy' of 'list' objects}
6460 0.002 0.000 0.002 0.000 {method 'clear' of 'set' objects}
2145 0.002 0.000 0.002 0.000 base.py:142(get_hist_ind)
2145 0.002 0.000 0.002 0.000 ex_pump.py:490(indicate_finished)
154 0.001 0.000 0.002 0.000 isolate.py:86(<genexpr>)
74 0.000 0.000 0.002 0.000 fromnumeric.py:71(_wrapreduction)
1466 0.001 0.000 0.002 0.000 inspect.py:292(isclass)
2974 0.001 0.000 0.002 0.000 utils.py:375(<genexpr>)
154 0.001 0.000 0.001 0.000 base.py:437(<listcomp>)
1689 0.001 0.000 0.001 0.000 base.py:106(<listcomp>)
154 0.001 0.000 0.001 0.000 graph.py:339(__init__)
73 0.000 0.000 0.001 0.000 base.py:730(cut_hist)
730 0.001 0.000 0.001 0.000 base.py:595(<listcomp>)
770 0.001 0.000 0.001 0.000 base.py:840(<dictcomp>)
1 0.000 0.000 0.001 0.001 std.py:952(__init__)
4290 0.001 0.000 0.001 0.000 {method 'index' of 'list' objects}
73 0.001 0.000 0.001 0.000 history.py:268(cut)
302 0.001 0.000 0.001 0.000 __init__.py:1166(__copy__)
770 0.001 0.000 0.001 0.000 base.py:874(<dictcomp>)
616 0.001 0.000 0.001 0.000 base.py:444(<listcomp>)
770 0.001 0.000 0.001 0.000 base.py:902(<listcomp>)
1540 0.001 0.000 0.001 0.000 reportviews.py:531(__iter__)
74 0.001 0.000 0.001 0.000 {method 'reduce' of 'numpy.ufunc' objects}
5594 0.001 0.000 0.001 0.000 {built-in method sys.getrecursionlimit}
73 0.000 0.000 0.001 0.000 result.py:444(fromdict)
154 0.000 0.000 0.001 0.000 graph.py:1499(degree)
183 0.000 0.000 0.001 0.000 threading.py:1192(is_alive)
297 0.001 0.000 0.001 0.000 base.py:230(<listcomp>)
46 0.000 0.000 0.001 0.000 threading.py:562(__init__)
913 0.001 0.000 0.001 0.000 graph.py:1333(neighbors)
73 0.000 0.000 0.001 0.000 result.py:103(fromdict)
770 0.000 0.000 0.001 0.000 base.py:210(is_static)
2757 0.001 0.000 0.001 0.000 result.py:123(check_include_error)
847 0.001 0.000 0.001 0.000 base.py:536(<dictcomp>)
40 0.000 0.000 0.001 0.000 ipkernel.py:775(_clean_thread_parent_frames)
2 0.000 0.000 0.001 0.000 std.py:1265(close)
3378 0.001 0.000 0.001 0.000 fromnumeric.py:861(_sort_dispatcher)
1530 0.001 0.000 0.001 0.000 base.py:351(get_full_name)
1847 0.001 0.000 0.001 0.000 base.py:279(create_name)
308 0.001 0.000 0.001 0.000 base.py:431(<dictcomp>)
154 0.000 0.000 0.001 0.000 base.py:232(init_flexible_roles)
1 0.000 0.000 0.001 0.001 propagate.py:807(__init__)
770 0.001 0.000 0.001 0.000 base.py:848(<dictcomp>)
253 0.001 0.000 0.001 0.000 std.py:231(__call__)
47 0.000 0.000 0.001 0.000 std.py:102(acquire)
44 0.000 0.000 0.001 0.000 std.py:1446(format_dict)
154 0.000 0.000 0.001 0.000 reportviews.py:421(__init__)
1 0.000 0.000 0.001 0.001 std.py:438(status_printer)
1826 0.001 0.000 0.001 0.000 __init__.py:165(__contains__)
2930 0.000 0.000 0.000 0.000 {built-in method unicodedata.east_asian_width}
88 0.000 0.000 0.000 0.000 utils.py:273(_is_ascii)
1 0.000 0.000 0.000 0.000 propagate.py:891(check_mdl_memory)
87 0.000 0.000 0.000 0.000 std.py:400(format_interval)
1 0.000 0.000 0.000 0.000 function.py:561(get_memory)
648 0.000 0.000 0.000 0.000 result.py:94(get_dict_attr)
46 0.000 0.000 0.000 0.000 threading.py:243(__init__)
919 0.000 0.000 0.000 0.000 {method 'get' of 'mappingproxy' objects}
90 0.000 0.000 0.000 0.000 mode.py:353(add_fault)
73 0.000 0.000 0.000 0.000 base.py:321(get_resgraph)
2150 0.000 0.000 0.000 0.000 inspect.py:3019(return_annotation)
89 0.000 0.000 0.000 0.000 {built-in method _thread.allocate_lock}
20 0.000 0.000 0.000 0.000 ipkernel.py:790(<setcomp>)
2305 0.000 0.000 0.000 0.000 {built-in method builtins.repr}
47 0.000 0.000 0.000 0.000 std.py:106(release)
462 0.000 0.000 0.000 0.000 misc.py:593(_clear_cache)
1836 0.000 0.000 0.000 0.000 function_base.py:869(_copy_dispatcher)
9 0.000 0.000 0.000 0.000 base.py:771(get_memory)
47 0.000 0.000 0.000 0.000 {method 'acquire' of '_multiprocessing.SemLock' objects}
183 0.000 0.000 0.000 0.000 threading.py:1125(_wait_for_tstate_lock)
44 0.000 0.000 0.000 0.000 std.py:186(__format__)
72 0.000 0.000 0.000 0.000 base.py:755(_get_role_call)
73 0.000 0.000 0.000 0.000 base.py:204(is_iter)
1232 0.000 0.000 0.000 0.000 base.py:57(check_role)
146 0.000 0.000 0.000 0.000 base.py:308(t_key)
770 0.000 0.000 0.000 0.000 base.py:219(<listcomp>)
154 0.000 0.000 0.000 0.000 base.py:111(<dictcomp>)
153 0.000 0.000 0.000 0.000 copyreg.py:104(__newobj__)
765 0.000 0.000 0.000 0.000 base.py:1002(<dictcomp>)
289 0.000 0.000 0.000 0.000 result.py:337(keys)
154 0.000 0.000 0.000 0.000 base.py:235(init_time_hist)
1 0.000 0.000 0.000 0.000 propagate.py:62(get_sim_call_kwargs)
154 0.000 0.000 0.000 0.000 graph.py:38(__set__)
154 0.000 0.000 0.000 0.000 graph.py:63(__set__)
658 0.000 0.000 0.000 0.000 __init__.py:1138(__contains__)
372 0.000 0.000 0.000 0.000 threading.py:1168(ident)
73 0.000 0.000 0.000 0.000 propagate.py:673(check_faults)
146 0.000 0.000 0.000 0.000 __init__.py:1134(__iter__)
72 0.000 0.000 0.000 0.000 scenario.py:88(asdict)
456 0.000 0.000 0.000 0.000 {built-in method __new__ of type object at 0x00007FFD96A64FE0}
81 0.000 0.000 0.000 0.000 <frozen _collections_abc>:771(get)
304 0.000 0.000 0.000 0.000 __init__.py:1121(__getitem__)
2 0.000 0.000 0.000 0.000 std.py:1286(fp_write)
72 0.000 0.000 0.000 0.000 mode.py:68(valid_fault)
137 0.000 0.000 0.000 0.000 iostream.py:138(_event_pipe)
16 0.000 0.000 0.000 0.000 base.py:496(get_memory)
44 0.000 0.000 0.000 0.000 std.py:153(__init__)
73 0.000 0.000 0.000 0.000 base.py:346(<dictcomp>)
770 0.000 0.000 0.000 0.000 base.py:863(init_block)
1 0.000 0.000 0.000 0.000 propagate.py:877(check_hist_memory)
74 0.000 0.000 0.000 0.000 base.py:609(<dictcomp>)
44 0.000 0.000 0.000 0.000 {method 'sub' of 're.Pattern' objects}
1 0.000 0.000 0.000 0.000 result.py:669(get_memory)
47 0.000 0.000 0.000 0.000 {method 'release' of '_multiprocessing.SemLock' objects}
46 0.000 0.000 0.000 0.000 iostream.py:550(_is_master_process)
730 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects}
288 0.000 0.000 0.000 0.000 {method 'endswith' of 'str' objects}
73 0.000 0.000 0.000 0.000 propagate.py:607(<listcomp>)
16 0.000 0.000 0.000 0.000 base.py:412(get_memory)
20 0.000 0.000 0.000 0.000 threading.py:1501(enumerate)
43 0.000 0.000 0.000 0.000 {built-in method now}
73 0.000 0.000 0.000 0.000 propagate.py:604(<dictcomp>)
46 0.000 0.000 0.000 0.000 threading.py:1453(current_thread)
46 0.000 0.000 0.000 0.000 iostream.py:505(parent_header)
924 0.000 0.000 0.000 0.000 {built-in method builtins.ord}
43 0.000 0.000 0.000 0.000 threading.py:283(_acquire_restore)
73 0.000 0.000 0.000 0.000 function.py:556(<listcomp>)
220 0.000 0.000 0.000 0.000 {method '__exit__' of '_thread.RLock' objects}
73 0.000 0.000 0.000 0.000 base.py:310(<listcomp>)
74 0.000 0.000 0.000 0.000 fromnumeric.py:72(<dictcomp>)
73 0.000 0.000 0.000 0.000 base.py:387(<listcomp>)
154 0.000 0.000 0.000 0.000 reportviews.py:428(__call__)
60 0.000 0.000 0.000 0.000 timer.py:84(inc)
46 0.000 0.000 0.000 0.000 threading.py:274(__exit__)
186 0.000 0.000 0.000 0.000 {built-in method time.time}
369 0.000 0.000 0.000 0.000 {method 'keys' of 'dict' objects}
72 0.000 0.000 0.000 0.000 propagate.py:845(get_output)
184 0.000 0.000 0.000 0.000 threading.py:575(is_set)
46 0.000 0.000 0.000 0.000 threading.py:271(__enter__)
1 0.000 0.000 0.000 0.000 utils.py:297(_screen_shape_windows)
47 0.000 0.000 0.000 0.000 {method 'acquire' of '_thread.RLock' objects}
302 0.000 0.000 0.000 0.000 {method 'copy' of 'dict' objects}
2 0.000 0.000 0.000 0.000 base.py:378(create_hist)
3 0.000 0.000 0.000 0.000 base.py:487(init_indicator_hist)
43 0.000 0.000 0.000 0.000 threading.py:286(_is_owned)
43 0.000 0.000 0.000 0.000 threading.py:280(_release_save)
153 0.000 0.000 0.000 0.000 {method 'lower' of 'str' objects}
218 0.000 0.000 0.000 0.000 {built-in method builtins.divmod}
1 0.000 0.000 0.000 0.000 fromnumeric.py:2177(sum)
180 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects}
1 0.000 0.000 0.000 0.000 std.py:686(_decr_instances)
72 0.000 0.000 0.000 0.000 base.py:761(<listcomp>)
44 0.000 0.000 0.000 0.000 utils.py:108(__init__)
91 0.000 0.000 0.000 0.000 {built-in method sys.getsizeof}
4 0.000 0.000 0.000 0.000 history.py:132(init_att)
1 0.000 0.000 0.000 0.000 std.py:663(__new__)
46 0.000 0.000 0.000 0.000 {built-in method nt.getpid}
44 0.000 0.000 0.000 0.000 std.py:167(colour)
4 0.000 0.000 0.000 0.000 std.py:110(__enter__)
152 0.000 0.000 0.000 0.000 inspect.py:2726(default)
1 0.000 0.000 0.000 0.000 __init__.py:48(create_string_buffer)
73 0.000 0.000 0.000 0.000 {method 'sort' of 'list' objects}
44 0.000 0.000 0.000 0.000 {built-in method builtins.max}
46 0.000 0.000 0.000 0.000 {built-in method _thread.get_ident}
44 0.000 0.000 0.000 0.000 utils.py:112(__format__)
2 0.000 0.000 0.000 0.000 state.py:345(init_hist_att)
73 0.000 0.000 0.000 0.000 fromnumeric.py:2831(_min_dispatcher)
2 0.000 0.000 0.000 0.000 base.py:365(init_hist_att)
44 0.000 0.000 0.000 0.000 std.py:163(colour)
46 0.000 0.000 0.000 0.000 {method 'write' of '_io.StringIO' objects}
3 0.000 0.000 0.000 0.000 _weakrefset.py:63(__iter__)
47 0.000 0.000 0.000 0.000 {method 'release' of '_thread.RLock' objects}
46 0.000 0.000 0.000 0.000 {built-in method builtins.abs}
1 0.000 0.000 0.000 0.000 std.py:679(_get_free_pos)
1 0.000 0.000 0.000 0.000 inspect.py:1804(getattr_static)
4 0.000 0.000 0.000 0.000 std.py:113(__exit__)
46 0.000 0.000 0.000 0.000 {method '__enter__' of '_thread.lock' objects}
46 0.000 0.000 0.000 0.000 {method '__exit__' of '_thread.lock' objects}
46 0.000 0.000 0.000 0.000 {method 'get' of '_contextvars.ContextVar' objects}
43 0.000 0.000 0.000 0.000 {method 'release' of '_thread.lock' objects}
1 0.000 0.000 0.000 0.000 std.py:682(<setcomp>)
1 0.000 0.000 0.000 0.000 inspect.py:2063(_signature_is_builtin)
1 0.000 0.000 0.000 0.000 utils.py:213(__init__)
1 0.000 0.000 0.000 0.000 inspect.py:1774(_check_class)
1 0.000 0.000 0.000 0.000 propagate.py:850(gen_sim_kwargs)
1 0.000 0.000 0.000 0.000 _weakrefset.py:110(remove)
2 0.000 0.000 0.000 0.000 _weakrefset.py:27(__exit__)
1 0.000 0.000 0.000 0.000 inspect.py:2075(_signature_is_functionlike)
3 0.000 0.000 0.000 0.000 {method 'remove' of 'set' objects}
1 0.000 0.000 0.000 0.000 inspect.py:1790(_shadowed_dict)
1 0.000 0.000 0.000 0.000 inspect.py:310(ismethoddescriptor)
1 0.000 0.000 0.000 0.000 utils.py:266(_supports_unicode)
3 0.000 0.000 0.000 0.000 sample.py:916(scenarios)
1 0.000 0.000 0.000 0.000 propagate.py:68(get_mdl_kwargs)
1 0.000 0.000 0.000 0.000 base.py:460(get_indicators)
1 0.000 0.000 0.000 0.000 propagate.py:641(get_models)
1 0.000 0.000 0.000 0.000 _weakrefset.py:85(add)
2 0.000 0.000 0.000 0.000 _weakrefset.py:53(_commit_removals)
3 0.000 0.000 0.000 0.000 inspect.py:1762(_static_getmro)
1 0.000 0.000 0.000 0.000 propagate.py:643(<dictcomp>)
1 0.000 0.000 0.000 0.000 inspect.py:1783(_is_type)
4 0.000 0.000 0.000 0.000 {built-in method numpy.empty}
1 0.000 0.000 0.000 0.000 std.py:1112(__len__)
1 0.000 0.000 0.000 0.000 functools.py:393(__get__)
2 0.000 0.000 0.000 0.000 utils.py:187(disable_on_exception)
1 0.000 0.000 0.000 0.000 inspect.py:2426(_descriptor_get)
1 0.000 0.000 0.000 0.000 base.py:469(<dictcomp>)
3 0.000 0.000 0.000 0.000 scenario.py:49(get)
1 0.000 0.000 0.000 0.000 utils.py:125(__eq__)
4 0.000 0.000 0.000 0.000 utils.py:222(__eq__)
2 0.000 0.000 0.000 0.000 base.py:86(get_track)
1 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:1207(_handle_fromlist)
1 0.000 0.000 0.000 0.000 {built-in method fromtimestamp}
3 0.000 0.000 0.000 0.000 base.py:812(<listcomp>)
1 0.000 0.000 0.000 0.000 utils.py:252(_is_utf)
3 0.000 0.000 0.000 0.000 {method 'add' of 'set' objects}
2 0.000 0.000 0.000 0.000 _weakrefset.py:21(__enter__)
1 0.000 0.000 0.000 0.000 sample.py:912(get_times)
1 0.000 0.000 0.000 0.000 utils.py:156(__init__)
3 0.000 0.000 0.000 0.000 utils.py:152(wrapper_setattr)
1 0.000 0.000 0.000 0.000 _monitor.py:94(report)
2 0.000 0.000 0.000 0.000 std.py:1153(_comparable)
1 0.000 0.000 0.000 0.000 propagate.py:821(close_pool)
3 0.000 0.000 0.000 0.000 std.py:226(__init__)
1 0.000 0.000 0.000 0.000 function.py:577(<listcomp>)
2 0.000 0.000 0.000 0.000 _weakrefset.py:17(__init__)
2 0.000 0.000 0.000 0.000 std.py:1157(__hash__)
1 0.000 0.000 0.000 0.000 propagate.py:873(std_runner)
1 0.000 0.000 0.000 0.000 std.py:760(get_lock)
1 0.000 0.000 0.000 0.000 std.py:1147(__del__)
1 0.000 0.000 0.000 0.000 inspect.py:505(isbuiltin)
2 0.000 0.000 0.000 0.000 {built-in method _weakref.proxy}
2 0.000 0.000 0.000 0.000 {method 'pop' of 'list' objects}
1 0.000 0.000 0.000 0.000 {method 'encode' of 'str' objects}
1 0.000 0.000 0.000 0.000 {built-in method fromkeys}
1 0.000 0.000 0.000 0.000 utils.py:139(__getattr__)
1 0.000 0.000 0.000 0.000 utils.py:282(_screen_shape_wrapper)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 0.000 0.000 tz.py:74(utcoffset)
1 0.000 0.000 0.000 0.000 {method 'difference' of 'set' objects}
1 0.000 0.000 0.000 0.000 fromnumeric.py:2172(_sum_dispatcher)
1 0.000 0.000 0.000 0.000 propagate.py:690(close_pool)
1 0.000 0.000 0.000 0.000 std.py:1301(<lambda>)
1 0.000 0.000 0.000 0.000 {built-in method sys.audit}
prof = cProfile.run('Pump()', sort='tottime')
7137 function calls (7115 primitive calls) in 0.017 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
16 0.002 0.000 0.002 0.000 {built-in method builtins.dir}
20 0.001 0.000 0.006 0.000 base.py:358(init_roles)
11 0.001 0.000 0.001 0.000 base.py:457(<listcomp>)
2108 0.001 0.000 0.001 0.000 {method 'startswith' of 'str' objects}
5 0.001 0.000 0.001 0.000 base.py:65(<listcomp>)
611 0.000 0.000 0.001 0.000 {built-in method builtins.getattr}
10 0.000 0.000 0.001 0.000 inspect.py:2331(_signature_from_function)
808 0.000 0.000 0.000 0.000 {built-in method builtins.isinstance}
16 0.000 0.000 0.001 0.000 base.py:629(get_roles_as_dict)
16 0.000 0.000 0.000 0.000 {built-in method numpy.arange}
20/10 0.000 0.000 0.002 0.000 inspect.py:2435(_signature_from_callable)
16 0.000 0.000 0.001 0.000 base.py:339(gen_timerange)
8 0.000 0.000 0.003 0.000 parameter.py:62(__init__)
42 0.000 0.000 0.000 0.000 inspect.py:2669(__init__)
9 0.000 0.000 0.013 0.001 base.py:281(add_flex_role_obj)
16 0.000 0.000 0.000 0.000 {method 'round' of 'numpy.ndarray' objects}
20 0.000 0.000 0.000 0.000 inspect.py:2955(__init__)
8 0.000 0.000 0.000 0.000 parameter.py:136(check_immutable)
21/16 0.000 0.000 0.001 0.000 result.py:605(flatten)
8 0.000 0.000 0.000 0.000 base.py:142(set_arg_type)
5 0.000 0.000 0.009 0.002 base.py:825(__init__)
12 0.000 0.000 0.001 0.000 time.py:137(set_timestep)
12 0.000 0.000 0.000 0.000 {method 'copy' of 'numpy.ndarray' objects}
8 0.000 0.000 0.000 0.000 inspect.py:3215(__str__)
6 0.000 0.000 0.001 0.000 base.py:102(find_any_phase_overlap)
15 0.000 0.000 0.002 0.000 base.py:788(create_hist)
157 0.000 0.000 0.000 0.000 {built-in method builtins.hasattr}
11/10 0.000 0.000 0.008 0.001 base.py:213(__init__)
34 0.000 0.000 0.001 0.000 result.py:184(__init__)
8 0.000 0.000 0.000 0.000 parameter.py:157(check_type)
19 0.000 0.000 0.001 0.000 base.py:630(get_sims)
288 0.000 0.000 0.000 0.000 {method 'get' of 'dict' objects}
60 0.000 0.000 0.000 0.000 parameter.py:108(check_lim)
34 0.000 0.000 0.000 0.000 __init__.py:1111(__init__)
32 0.000 0.000 0.000 0.000 base.py:665(<dictcomp>)
16/15 0.000 0.000 0.006 0.000 base.py:328(init_roletypes)
10 0.000 0.000 0.000 0.000 inspect.py:2037(_signature_bound_method)
34 0.000 0.000 0.000 0.000 <frozen _collections_abc>:941(update)
12 0.000 0.000 0.000 0.000 base.py:186(get_field_dict)
5 0.000 0.000 0.010 0.002 base.py:370(add_sim)
12 0.000 0.000 0.000 0.000 base.py:247(assign)
26 0.000 0.000 0.000 0.000 inspect.py:2756(__str__)
32 0.000 0.000 0.000 0.000 common.py:49(get_sub_include)
9 0.000 0.000 0.010 0.001 base.py:1161(init_obj)
42 0.000 0.000 0.000 0.000 enum.py:688(__call__)
22 0.000 0.000 0.000 0.000 base.py:519(get_default_roletypes)
6 0.000 0.000 0.003 0.001 base.py:91(__init__)
14 0.000 0.000 0.000 0.000 numerictypes.py:357(issubdtype)
16 0.000 0.000 0.000 0.000 base.py:634(<dictcomp>)
261 0.000 0.000 0.000 0.000 {built-in method builtins.len}
31 0.000 0.000 0.000 0.000 base.py:664(<dictcomp>)
1 0.000 0.000 0.017 0.017 base.py:101(__init__)
52 0.000 0.000 0.000 0.000 inspect.py:3002(<genexpr>)
34 0.000 0.000 0.000 0.000 result.py:372(__setattr__)
16 0.000 0.000 0.000 0.000 time.py:115(__getattr__)
12 0.000 0.000 0.000 0.000 {built-in method numpy.asanyarray}
12 0.000 0.000 0.000 0.000 base.py:284(set_field)
8 0.000 0.000 0.002 0.000 parameter.py:180(check_pickle)
34 0.000 0.000 0.000 0.000 inspect.py:300(ismethod)
141 0.000 0.000 0.000 0.000 {method 'items' of 'dict' objects}
10 0.000 0.000 0.000 0.000 inspect.py:167(get_annotations)
11/6 0.000 0.000 0.001 0.000 base.py:241(update_seed)
12 0.000 0.000 0.000 0.000 copy.py:128(deepcopy)
12 0.000 0.000 0.000 0.000 fromnumeric.py:865(sort)
14 0.000 0.000 0.000 0.000 base.py:216(is_numeric)
11 0.000 0.000 0.002 0.000 base.py:455(init_indicators)
6 0.000 0.000 0.000 0.000 base.py:585(<listcomp>)
54 0.000 0.000 0.000 0.000 inspect.py:378(isfunction)
11 0.000 0.000 0.000 0.000 base.py:301(init_track)
10 0.000 0.000 0.000 0.000 inspect.py:735(unwrap)
28 0.000 0.000 0.000 0.000 numerictypes.py:283(issubclass_)
1 0.000 0.000 0.017 0.017 {built-in method builtins.exec}
16 0.000 0.000 0.000 0.000 fromnumeric.py:53(_wrapfunc)
16 0.000 0.000 0.000 0.000 fromnumeric.py:3269(round)
14 0.000 0.000 0.000 0.000 {built-in method numpy.array}
6 0.000 0.000 0.000 0.000 time.py:95(__init__)
43 0.000 0.000 0.000 0.000 <frozen abc>:117(__instancecheck__)
1 0.000 0.000 0.002 0.002 base.py:410(build)
5 0.000 0.000 0.009 0.002 function.py:81(__init__)
68 0.000 0.000 0.000 0.000 {built-in method builtins.issubclass}
6 0.000 0.000 0.000 0.000 base.py:115(get_true_fields)
1 0.000 0.000 0.017 0.017 <string>:1(<module>)
6 0.000 0.000 0.000 0.000 mode.py:209(__init__)
1 0.000 0.000 0.000 0.000 graph.py:975(add_edges_from)
16 0.000 0.000 0.001 0.000 base.py:131(get_histrange)
43 0.000 0.000 0.000 0.000 {built-in method _abc._abc_instancecheck}
6 0.000 0.000 0.008 0.001 base.py:195(__init__)
21 0.000 0.000 0.000 0.000 result.py:114(check_include_errors)
48 0.000 0.000 0.000 0.000 {built-in method builtins.setattr}
10 0.000 0.000 0.002 0.000 inspect.py:3007(from_callable)
10 0.000 0.000 0.000 0.000 {built-in method recordclass._dataobject.asdict}
4 0.000 0.000 0.000 0.000 history.py:132(init_att)
60 0.000 0.000 0.000 0.000 base.py:176(set_arg_as_type)
6 0.000 0.000 0.001 0.000 base.py:225(init_hist)
16 0.000 0.000 0.001 0.000 base.py:116(get_timerange)
10 0.000 0.000 0.000 0.000 inspect.py:3023(replace)
5 0.000 0.000 0.001 0.000 base.py:867(create_arch_kwargs)
99 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}
10 0.000 0.000 0.000 0.000 __init__.py:180(add)
12 0.000 0.000 0.000 0.000 {method 'sort' of 'numpy.ndarray' objects}
6 0.000 0.000 0.000 0.000 base.py:558(get_roles)
5 0.000 0.000 0.000 0.000 base.py:216(is_dynamic)
104 0.000 0.000 0.000 0.000 inspect.py:2734(kind)
12 0.000 0.000 0.000 0.000 base.py:240(<dictcomp>)
12 0.000 0.000 0.000 0.000 copy.py:66(copy)
26 0.000 0.000 0.000 0.000 base.py:68(check_role)
5 0.000 0.000 0.000 0.000 base.py:887(check_flows)
58 0.000 0.000 0.000 0.000 {method 'update' of 'dict' objects}
9 0.000 0.000 0.000 0.000 base.py:254(get_flex_role_kwargs)
42 0.000 0.000 0.000 0.000 enum.py:1095(__new__)
21 0.000 0.000 0.000 0.000 result.py:341(items)
5 0.000 0.000 0.010 0.002 function.py:490(add_fxn)
74 0.000 0.000 0.000 0.000 inspect.py:2722(name)
5 0.000 0.000 0.000 0.000 base.py:907(<listcomp>)
2 0.000 0.000 0.000 0.000 graph.py:573(add_nodes_from)
10 0.000 0.000 0.002 0.000 inspect.py:3261(signature)
3 0.000 0.000 0.000 0.000 base.py:487(init_indicator_hist)
6 0.000 0.000 0.000 0.000 base.py:122(<listcomp>)
10 0.000 0.000 0.000 0.000 base.py:163(get_sub_kwargs)
21 0.000 0.000 0.000 0.000 __init__.py:1118(__len__)
18 0.000 0.000 0.000 0.000 {method 'format' of 'str' objects}
1 0.000 0.000 0.000 0.000 base.py:447(construct_graph)
16 0.000 0.000 0.000 0.000 base.py:295(check_slots)
1 0.000 0.000 0.013 0.013 ex_pump.py:462(init_architecture)
6 0.000 0.000 0.000 0.000 base.py:107(<listcomp>)
6 0.000 0.000 0.000 0.000 base.py:221(set_time)
5 0.000 0.000 0.001 0.000 base.py:348(find_roletype_initiators)
4 0.000 0.000 0.002 0.001 base.py:330(add_flow)
42 0.000 0.000 0.000 0.000 {method '__contains__' of 'frozenset' objects}
19 0.000 0.000 0.000 0.000 __init__.py:1128(__setitem__)
42 0.000 0.000 0.000 0.000 {method 'isidentifier' of 'str' objects}
2 0.000 0.000 0.000 0.000 base.py:378(create_hist)
6 0.000 0.000 0.000 0.000 base.py:104(<dictcomp>)
1 0.000 0.000 0.000 0.000 functools.py:981(__get__)
5 0.000 0.000 0.000 0.000 base.py:531(get_flows)
5 0.000 0.000 0.000 0.000 __init__.py:201(update)
5 0.000 0.000 0.001 0.000 base.py:63(find_roletype_initiators)
5 0.000 0.000 0.000 0.000 base.py:840(<dictcomp>)
10 0.000 0.000 0.000 0.000 base.py:430(asdict)
1 0.000 0.000 0.000 0.000 base.py:443(<listcomp>)
4 0.000 0.000 0.001 0.000 base.py:85(create_hist)
21 0.000 0.000 0.000 0.000 result.py:123(check_include_error)
10 0.000 0.000 0.000 0.000 reportviews.py:531(__iter__)
18 0.000 0.000 0.000 0.000 {method 'values' of 'mappingproxy' objects}
2 0.000 0.000 0.000 0.000 base.py:365(init_hist_att)
6 0.000 0.000 0.000 0.000 base.py:106(<listcomp>)
4 0.000 0.000 0.000 0.000 base.py:444(<listcomp>)
5 0.000 0.000 0.000 0.000 base.py:902(<listcomp>)
1 0.000 0.000 0.000 0.000 graph.py:339(__init__)
9 0.000 0.000 0.000 0.000 inspect.py:292(isclass)
2 0.000 0.000 0.000 0.000 base.py:431(<dictcomp>)
1 0.000 0.000 0.000 0.000 isolate.py:43(isolates)
5 0.000 0.000 0.000 0.000 base.py:874(<dictcomp>)
1 0.000 0.000 0.000 0.000 base.py:437(<listcomp>)
11 0.000 0.000 0.000 0.000 base.py:279(create_name)
16 0.000 0.000 0.000 0.000 fromnumeric.py:3265(_round_dispatcher)
23 0.000 0.000 0.000 0.000 {method 'values' of 'dict' objects}
16 0.000 0.000 0.000 0.000 {method 'remove' of 'list' objects}
30 0.000 0.000 0.000 0.000 {built-in method builtins.callable}
1 0.000 0.000 0.000 0.000 isolate.py:86(<genexpr>)
5 0.000 0.000 0.000 0.000 base.py:848(<dictcomp>)
2 0.000 0.000 0.000 0.000 state.py:345(init_hist_att)
22 0.000 0.000 0.000 0.000 {built-in method builtins.id}
1 0.000 0.000 0.000 0.000 base.py:439(<listcomp>)
5 0.000 0.000 0.000 0.000 base.py:536(<dictcomp>)
5 0.000 0.000 0.000 0.000 base.py:210(is_static)
3 0.000 0.000 0.000 0.000 __init__.py:65(__init__)
9 0.000 0.000 0.000 0.000 base.py:351(get_full_name)
1 0.000 0.000 0.002 0.002 function.py:510(build)
20 0.000 0.000 0.000 0.000 inspect.py:3015(parameters)
4 0.000 0.000 0.000 0.000 graph.py:1333(neighbors)
4 0.000 0.000 0.000 0.000 {built-in method numpy.empty}
2 0.000 0.000 0.000 0.000 <frozen _collections_abc>:717(__ior__)
1 0.000 0.000 0.000 0.000 base.py:232(init_flexible_roles)
1 0.000 0.000 0.000 0.000 <class 'networkx.utils.decorators.argmap'> compilation 4:1(argmap_isolates_1)
8 0.000 0.000 0.000 0.000 {method 'join' of 'str' objects}
1 0.000 0.000 0.000 0.000 base.py:235(init_time_hist)
1 0.000 0.000 0.000 0.000 reportviews.py:421(__init__)
3 0.000 0.000 0.000 0.000 base.py:812(<listcomp>)
12 0.000 0.000 0.000 0.000 fromnumeric.py:861(_sort_dispatcher)
2 0.000 0.000 0.000 0.000 base.py:86(get_track)
1 0.000 0.000 0.000 0.000 graph.py:1499(degree)
1 0.000 0.000 0.000 0.000 backends.py:525(_call_if_no_backends_installed)
8 0.000 0.000 0.000 0.000 base.py:57(check_role)
9 0.000 0.000 0.000 0.000 {built-in method builtins.any}
1 0.000 0.000 0.000 0.000 base.py:469(<dictcomp>)
12 0.000 0.000 0.000 0.000 copy.py:182(_deepcopy_atomic)
10 0.000 0.000 0.000 0.000 {built-in method sys.getrecursionlimit}
3 0.000 0.000 0.000 0.000 misc.py:593(_clear_cache)
1 0.000 0.000 0.000 0.000 graph.py:38(__set__)
10 0.000 0.000 0.000 0.000 {built-in method builtins.repr}
8 0.000 0.000 0.000 0.000 __init__.py:165(__contains__)
8 0.000 0.000 0.000 0.000 inspect.py:3019(return_annotation)
6 0.000 0.000 0.000 0.000 {method 'copy' of 'set' objects}
1 0.000 0.000 0.000 0.000 graph.py:63(__set__)
1 0.000 0.000 0.000 0.000 timer.py:62(__init__)
1 0.000 0.000 0.000 0.000 base.py:460(get_indicators)
5 0.000 0.000 0.000 0.000 base.py:863(init_block)
1 0.000 0.000 0.000 0.000 base.py:455(<listcomp>)
5 0.000 0.000 0.000 0.000 base.py:219(<listcomp>)
6 0.000 0.000 0.000 0.000 inspect.py:2726(default)
6 0.000 0.000 0.000 0.000 copy.py:107(_copy_immutable)
2 0.000 0.000 0.000 0.000 __init__.py:1121(__getitem__)
4 0.000 0.000 0.000 0.000 {built-in method builtins.iter}
1 0.000 0.000 0.000 0.000 reportviews.py:428(__call__)
1 0.000 0.000 0.000 0.000 base.py:111(<dictcomp>)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 0.000 0.000 {method '__exit__' of '_thread.RLock' objects}
1 0.000 0.000 0.000 0.000 __init__.py:1138(__contains__)
1 0.000 0.000 0.000 0.000 {method 'lower' of 'str' objects}
As shown, running this model is not particularly computationally expensive. As a result, the majority of the computational expense is not actually because of the simulation itself, but because of the way the model is simulated:
the majority is spent simulating the model
a certain amount is spent re-initalizing the model at first so that the model object can be re-used without worrying about it being modified by any previous executions
another amount is spent recording the model history, wich can increase or decrease depending on tracking options (note the low number of values tracked in the pump model by default)
This is mostly because the model itself is computationally inexpensive. However, this example shows how one might easily speed up simulation for optimization or large-n simulations–avoiding unnecessary re-initialization, tracking fewer model states, or speeding up model execution. This can be done in the following ways:
using the options for
track
(as mentioned above) to track fewer states (reducing time spent recording the history)using
protect
options, which specifies whether the model used is re-instantiated for the simulation (True
) or used directly (False
)speeding up the model by using
dynamic_behavior()
methods instead ofstatic_behavior()
orbehavior()
methods (which can halve the simulation time at the expense of undirected propagation)speeding up the model by using a longer global timestep (
'tstep'
inmodelparams
) or by speeding up paricularly expensive Function dynamic behaviors by setting (dt=local_tstep
) in theSimParam