Pump Example Notebook

This script shows basic I/O operations that can be performed with this toolkit, as well as some of the basic model and simulation visualization and analysis features.

This script runs these basic operations on the simple model defined in ex_pump.py.

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.
[1]:
from ex_pump import Pump

import fmdtools.sim.propagate as propagate
from fmdtools import analyze as an

from IPython.display import HTML

Initial Model Checks

Before seeing how faults propagate, it’s useful to see that the model structure is set up correctly and that the system performs as expected.

The ‘track’ argument specifies what model attributes to log. Specifying all will log all attributes.

[2]:
mdl = Pump(track='all')

One of the easiest ways to visualize this is by viewing the model in the repl, which shows thes states and modes of the component functions and flows.

[3]:
mdl
[3]:
pump Pump
FUNCTIONS:
import_ee ImportEE
- ImportEEState(effstate=1.0)
- ImportEEMode(mode=nominal, faults=set())
import_water ImportWater
- ImportWaterMode(mode=nominal, faults=set())
import_signal ImportSig
- ImportSigMode(mode=nominal, faults=set())
move_water MoveWat
- MoveWatStates(eff=1.0)
- MoveWatMode(mode=nominal, faults=set())
export_water ExportWater
- ExportWaterMode(mode=nominal, faults=set())
FLOWS:
ee_1 Electricity flow: EEStates(current=1.0, voltage=1.0)
sig_1 Signal flow: SignalStates(power=1.0)
wat_1 Water flow: WaterStates(flowrate=1.0, pressure=1.0, area=1.0, level=1.0)
wat_2 Water flow: WaterStates(flowrate=1.0, pressure=1.0, area=1.0, level=1.0)

Model Structure Visualization

To check that the simulation structures are set up right, the FunctionArchitectureGraph class lets us visualize the function/flow relationships in the model. This helps us answer the questions: - are all functions on the graph? - are the functions connected with the correct flows?

[4]:
from fmdtools.define.architecture.function import FunctionArchitectureGraph
[5]:
a = FunctionArchitectureGraph(mdl)
fig, ax = a.draw(figsize=(8,6))
../../_images/examples_pump_Pump_Example_Notebook_8_0.png

Note that a variety of different Classes can be used for model structure visualization, inlcluding ModelFxnGraph, ModelFlowGraph, and ModelTypeGraph. This is further explained in examples/rover/Model_Structure_Visualization_Tutorial.ipynb

[6]:
from fmdtools.define.architecture.function import FunctionArchitectureFxnGraph
b=FunctionArchitectureFxnGraph(mdl)
fig = b.draw(figsize=(8,6))
../../_images/examples_pump_Pump_Example_Notebook_10_0.png

Nominal Run

The next code runs the model in the nominal state to check to see that the model has been defined correctly. This helps us verify: - if any faults occur in the nominal scenario - if the progression of states proceeds as desired over time.

The following code runs the model with no faults to let us do that. The inputs are: - mdl (the model we imported at the start of the script) - desired_result (str/list/dict describing what to return in result) - **kwargs (see docs)

The outputs are: - result (a Result object defined in analyze.result) - mdlhist (a History object defined in analyze.result)

Both Result and History have a number of methods that can be readily used to process and analyze simulation results. See: - Result documentation - History documentation

Many different properties can be requested given the desired_result argument (see full list here). In this case, we pass a dict with key graph and a value FunctionArchitectureGraph specifying that we want it to give us a graph view of the Model.

[7]:
result, mdlhist=propagate.nominal(mdl, desired_result={'graph': FunctionArchitectureGraph})

Here we can see where it is in the Result:

[8]:
result.keys()
[8]:
dict_keys(['graph'])
[9]:
result.graph
[9]:
<fmdtools.define.architecture.function.FunctionArchitectureGraph at 0x2bb89247d50>

With these results, we can now plot the graph of results resgraph using:

[10]:
fig = result.graph.draw(figsize=(6,4))
../../_images/examples_pump_Pump_Example_Notebook_18_0.png

As can be seen, this gives a graphical representation of the functional model with the various flows. Since all of the functions are grey, no faults were accidentally introduced in this run.

A model history is additionally returned given our specified tracking options. If none are provided, the default_track variable in the Model is used (which in this case is set to all). See below:

[11]:
mdlhist
[11]:
i.finished:                    array(56)
i.on:                          array(56)
flows.ee_1.s.current:          array(56)
flows.ee_1.s.voltage:          array(56)
flows.sig_1.s.power:           array(56)
flows.wat_1.s.flowrate:        array(56)
flows.wat_1.s.pressure:        array(56)
flows.wat_1.s.area:            array(56)
flows.wat_1.s.level:           array(56)
flows.wat_2.s.flowrate:        array(56)
flows.wat_2.s.pressure:        array(56)
flows.wat_2.s.area:            array(56)
flows.wat_2.s.level:           array(56)
fxns.import_ee.s.effstate:     array(56)
fxns.import_ee.m.faults.no_v:  array(56)
fxns.import_ee.m.faults.inf_v: array(56)
fxns.import_water.m.faults.no_wat: array(56)
fxns.import_water.m.faults.less_wat: array(56)
fxns.import_signal.m.faults.no_sig: array(56)
fxns.move_water.i.over_pressure: array(56)
fxns.move_water.s.eff:         array(56)
fxns.move_water.m.faults.mech_break: array(56)
fxns.move_water.m.faults.short: array(56)
fxns.move_water.t.pressure_limit.time: array(56)
fxns.move_water.t.pressure_limit.mode: array(56)
fxns.export_water.m.faults.block: array(56)
time:                          array(56)

We can further look at the states of the model over time using History.plot_line:

[12]:
fig, ax = mdlhist.plot_line('flows.wat_1.s.flowrate', 'flows.wat_2.s.flowrate', 'i.on', 'flows.sig_1.s.power')
../../_images/examples_pump_Pump_Example_Notebook_23_0.png

As we can see, the state of these flows does exactly what we would expect–when the switch turns on at \(t=5\), the pump switches on and there is a flow of water in and out of the model.

History

If we want to see this data in tabular form, we can use fp.tabulate.hist():

[13]:
nominal_histtable = mdlhist.as_table()
nominal_histtable[:10] #only displaying 10
[13]:
i.finished i.on flows.ee_1.s.current flows.ee_1.s.voltage flows.sig_1.s.power flows.wat_1.s.flowrate flows.wat_1.s.pressure flows.wat_1.s.area flows.wat_1.s.level flows.wat_2.s.flowrate ... fxns.import_water.m.faults.less_wat fxns.import_signal.m.faults.no_sig fxns.move_water.i.over_pressure fxns.move_water.s.eff fxns.move_water.m.faults.mech_break fxns.move_water.m.faults.short fxns.move_water.t.pressure_limit.time fxns.move_water.t.pressure_limit.mode fxns.export_water.m.faults.block time
0 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 1.0 False False 0.0 standby False 0.0
1 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 1.0 False False 0.0 standby False 1.0
2 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 1.0 False False 0.0 standby False 2.0
3 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 1.0 False False 0.0 standby False 3.0
4 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 1.0 False False 0.0 standby False 4.0
5 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 1.0 False False 0.0 standby False 5.0
6 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 1.0 False False 0.0 standby False 6.0
7 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 1.0 False False 0.0 standby False 7.0
8 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 1.0 False False 0.0 standby False 8.0
9 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 1.0 False False 0.0 standby False 9.0

10 rows × 27 columns

This table is a pandas dataframe. We can save this dataframe to a .csv using nominal_histtable.to_csv("filename.csv")

Propagating and Viewing Results for Individual Faults

It is often necessary to see how the system reacts to individual faults. This can gives us better understanding of how the system behaves under individual faults and can let us iterate with the model better.

The following code runs the model with a single fault in a single function. In this case, we are initiating a short in the ‘Move Water’ function at 10 hours into the system’s operation.

The inputs are: - mdl (the model we imported at the start of the script) - function (the function the fault we’re interested in propagating occurs in) - faultmode (the fault to initiate) - time (the time when the fault is initiated) - **kwargs )

The outputs are (the same as propogate.nominal): - results (a dictionary corresponding to desired_result) - mdlhist (the states of the model over time)

[14]:
endresults, mdlhist=propagate.one_fault(mdl, 'move_water', 'short', time=10,
                                        desired_result=['graph','endclass','endfaults'])

Now mdlhist has double the number of entries–those corresponding to the nominal and faulty scenarios.

[15]:
mdlhist
[15]:
nominal.i.finished:            array(56)
nominal.i.on:                  array(56)
nominal.flows.ee_1.s.current:  array(56)
nominal.flows.ee_1.s.voltage:  array(56)
nominal.flows.sig_1.s.power:   array(56)
nominal.flows.wat_1.s.flowrate: array(56)
nominal.flows.wat_1.s.pressure: array(56)
nominal.flows.wat_1.s.area:    array(56)
nominal.flows.wat_1.s.level:   array(56)
nominal.flows.wat_2.s.flowrate: array(56)
nominal.flows.wat_2.s.pressure: array(56)
nominal.flows.wat_2.s.area:    array(56)
nominal.flows.wat_2.s.level:   array(56)
nominal.fxns.import_ee.s.effstate: array(56)
nominal.fxns.import_ee.m.faults.no_v: array(56)
nominal.fxns.import_ee.m.faults.inf_v: array(56)
nominal.fxns.import_           array(56)
nominal.fxns.import_           array(56)
nominal.fxns.import_           array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_water.s.eff: array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_water.m.faults.short: array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.export_           array(56)
nominal.time:                  array(56)
faulty.i.finished:             array(56)
faulty.i.on:                   array(56)
faulty.flows.ee_1.s.current:   array(56)
faulty.flows.ee_1.s.voltage:   array(56)
faulty.flows.sig_1.s.power:    array(56)
faulty.flows.wat_1.s.flowrate: array(56)
faulty.flows.wat_1.s.pressure: array(56)
faulty.flows.wat_1.s.area:     array(56)
faulty.flows.wat_1.s.level:    array(56)
faulty.flows.wat_2.s.flowrate: array(56)
faulty.flows.wat_2.s.pressure: array(56)
faulty.flows.wat_2.s.area:     array(56)
faulty.flows.wat_2.s.level:    array(56)
faulty.fxns.import_ee.s.effstate: array(56)
faulty.fxns.import_ee.m.faults.no_v: array(56)
faulty.fxns.import_ee.m.faults.inf_v: array(56)
faulty.fxns.import_w           array(56)
faulty.fxns.import_w           array(56)
faulty.fxns.import_s           array(56)
faulty.fxns.move_water.i.over_pressure: array(56)
faulty.fxns.move_water.s.eff:  array(56)
faulty.fxns.move_wat           array(56)
faulty.fxns.move_water.m.faults.short: array(56)
faulty.fxns.move_wat           array(56)
faulty.fxns.move_wat           array(56)
faulty.fxns.export_w           array(56)
faulty.time:                   array(56)

History.get_degraded_hist compares the results over time so we can see what functions and flows were degraded over time. We can then use the summary to view a list of the functions and flows that were impacted over time.

[16]:
deghist = mdlhist.get_degraded_hist(*mdl.fxns, *mdl.flows)
[17]:
deghist
[17]:
import_ee:                     array(56)
import_water:                  array(56)
import_signal:                 array(56)
move_water:                    array(56)
export_water:                  array(56)
ee_1:                          array(56)
sig_1:                         array(56)
wat_1:                         array(56)
wat_2:                         array(56)
total:                         array(56)
time:                          array(56)
[18]:
deghist.as_table()
[18]:
import_ee import_water import_signal move_water export_water ee_1 sig_1 wat_1 wat_2 total time
0 False False False False False False False False False 9 0.0
1 False False False False False False False False False 9 1.0
2 False False False False False False False False False 9 2.0
3 False False False False False False False False False 9 3.0
4 False False False False False False False False False 9 4.0
5 False False False False False False False False False 9 5.0
6 False False False False False False False False False 9 6.0
7 False False False False False False False False False 9 7.0
8 False False False False False False False False False 9 8.0
9 False False False False False False False False False 9 9.0
10 True False False True False True False True True 4 10.0
11 True False False True False True False True True 4 11.0
12 True False False True False True False True True 4 12.0
13 True False False True False True False True True 4 13.0
14 True False False True False True False True True 4 14.0
15 True False False True False True False True True 4 15.0
16 True False False True False True False True True 4 16.0
17 True False False True False True False True True 4 17.0
18 True False False True False True False True True 4 18.0
19 True False False True False True False True True 4 19.0
20 True False False True False True False True True 4 20.0
21 True False False True False True False True True 4 21.0
22 True False False True False True False True True 4 22.0
23 True False False True False True False True True 4 23.0
24 True False False True False True False True True 4 24.0
25 True False False True False True False True True 4 25.0
26 True False False True False True False True True 4 26.0
27 True False False True False True False True True 4 27.0
28 True False False True False True False True True 4 28.0
29 True False False True False True False True True 4 29.0
30 True False False True False True False True True 4 30.0
31 True False False True False True False True True 4 31.0
32 True False False True False True False True True 4 32.0
33 True False False True False True False True True 4 33.0
34 True False False True False True False True True 4 34.0
35 True False False True False True False True True 4 35.0
36 True False False True False True False True True 4 36.0
37 True False False True False True False True True 4 37.0
38 True False False True False True False True True 4 38.0
39 True False False True False True False True True 4 39.0
40 True False False True False True False True True 4 40.0
41 True False False True False True False True True 4 41.0
42 True False False True False True False True True 4 42.0
43 True False False True False True False True True 4 43.0
44 True False False True False True False True True 4 44.0
45 True False False True False True False True True 4 45.0
46 True False False True False True False True True 4 46.0
47 True False False True False True False True True 4 47.0
48 True False False True False True False True True 4 48.0
49 True False False True False True False True True 4 49.0
50 True False False True False True False False False 6 50.0
51 True False False True False True False False False 6 51.0
52 True False False True False True False False False 6 52.0
53 True False False True False True False False False 6 53.0
54 True False False True False True False False False 6 54.0
55 True False False True False True False False False 6 55.0

endresults however, keeps the endresult for the faulty scenario alone, as shown:

[19]:
endresults
[19]:
endclass.rate:                     1e-05
endclass.cost:        29000.000000000007
endclass.expected_cost: 29000.000000000007
endfaults: {'import_ee': ['no_v'], 'move_water': ['short']}
faultprops: {'import_ee': {'no_v': Fault(prob=8.000000000000001e-06, cost=10000, phases={'start': 0, 'on': 1, 'end': 0}, units='sim')}, 'move_water': {'short': Fault(prob=1e-05, cost=10000, phases={'start': 1.5, 'on': 1, 'end': 1}, units='sim')}}
graph: <fmdtools.define.architecture.function.FunctionArchitectureGraph object at 0x000002BB89981990>

However, the graph view now has information about degradations between the faulty and nominal runs, along with fault information:

[20]:
fig = endresults.graph.draw()
../../_images/examples_pump_Pump_Example_Notebook_38_0.png
[21]:
endresults.graph.g.nodes['pump.fxns.move_water']
[21]:
{'nodetype': 'Function',
 'classname': 'MoveWat',
 'm': MoveWatMode(mode=nominal, faults={'short'}),
 's': MoveWatStates(eff=0.0),
 't': MoveWatTime(time=55.0, t_ind=0, t_loc=0.0, timers={'pressure_limit': Timer pressure_limit: mode= standby, time= 0.0}, use_local=True, dt=1.0, run_times=1),
 'indicators': [],
 'degraded': True,
 'faulty': True}

As can be seen, at the final t, the short causes a degraded flow of electricity as well as a fault in the Import EE function.

However, we would imagine that the short would cause the water to stop moving also–so why is it not red?

The answer is that by default the degradations shown in the graph are shown at the final time, which is the same both for the failed model and the nominal model, since the pump is switched “off.” In this case we might be more interested in looking at how the graph looks in operation, rather than at the end.

We can do that that in two ways: - by specifying a different time to fetch the graph from (e.g., desired_result={10:'graph'}, or - by reconstructing the based on the history of the plot, as shown below:

[22]:
mg = FunctionArchitectureGraph(mdl)

To do this, we first need to track more states than have been specified to track in the model. The easiest way to do this is to set track='all'.

[23]:
endresults, mdlhist_full=propagate.one_fault(mdl, 'move_water', 'short', time=10, track='all',
                                        desired_result=['graph','endclass','endfaults'])

We can then plot the state at any time in the history using mg.draw_from.

[24]:
fig, ax = mg.draw_from(15, mdlhist_full)
../../_images/examples_pump_Pump_Example_Notebook_46_0.png

As shown, this version has the degradation of the water, since at this time the off-nominal state is different from the nominal (no flow).

We can view an animation over time using:

[25]:
from IPython.display import HTML
ani = mg.animate(mdlhist_full)
HTML(ani.to_jshtml())
[25]:
../../_images/examples_pump_Pump_Example_Notebook_49_1.png

Note that if only a partial history is given, only partial results will be displayed (see below).

[26]:
fig, ax = mg.draw_from(15, mdlhist, figsize=(6,4), withlegend=False)
../../_images/examples_pump_Pump_Example_Notebook_51_0.png

We can also plot the states of this against the nominal run using:

[27]:
mdlhist
[27]:
nominal.i.finished:            array(56)
nominal.i.on:                  array(56)
nominal.flows.ee_1.s.current:  array(56)
nominal.flows.ee_1.s.voltage:  array(56)
nominal.flows.sig_1.s.power:   array(56)
nominal.flows.wat_1.s.flowrate: array(56)
nominal.flows.wat_1.s.pressure: array(56)
nominal.flows.wat_1.s.area:    array(56)
nominal.flows.wat_1.s.level:   array(56)
nominal.flows.wat_2.s.flowrate: array(56)
nominal.flows.wat_2.s.pressure: array(56)
nominal.flows.wat_2.s.area:    array(56)
nominal.flows.wat_2.s.level:   array(56)
nominal.fxns.import_ee.s.effstate: array(56)
nominal.fxns.import_ee.m.faults.no_v: array(56)
nominal.fxns.import_ee.m.faults.inf_v: array(56)
nominal.fxns.import_           array(56)
nominal.fxns.import_           array(56)
nominal.fxns.import_           array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_water.s.eff: array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_water.m.faults.short: array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.export_           array(56)
nominal.time:                  array(56)
faulty.i.finished:             array(56)
faulty.i.on:                   array(56)
faulty.flows.ee_1.s.current:   array(56)
faulty.flows.ee_1.s.voltage:   array(56)
faulty.flows.sig_1.s.power:    array(56)
faulty.flows.wat_1.s.flowrate: array(56)
faulty.flows.wat_1.s.pressure: array(56)
faulty.flows.wat_1.s.area:     array(56)
faulty.flows.wat_1.s.level:    array(56)
faulty.flows.wat_2.s.flowrate: array(56)
faulty.flows.wat_2.s.pressure: array(56)
faulty.flows.wat_2.s.area:     array(56)
faulty.flows.wat_2.s.level:    array(56)
faulty.fxns.import_ee.s.effstate: array(56)
faulty.fxns.import_ee.m.faults.no_v: array(56)
faulty.fxns.import_ee.m.faults.inf_v: array(56)
faulty.fxns.import_w           array(56)
faulty.fxns.import_w           array(56)
faulty.fxns.import_s           array(56)
faulty.fxns.move_water.i.over_pressure: array(56)
faulty.fxns.move_water.s.eff:  array(56)
faulty.fxns.move_wat           array(56)
faulty.fxns.move_water.m.faults.short: array(56)
faulty.fxns.move_wat           array(56)
faulty.fxns.move_wat           array(56)
faulty.fxns.export_w           array(56)
faulty.time:                   array(56)
[28]:
fig, axs = mdlhist.plot_line('flows.ee_1.s.current', 'flows.wat_2.s.flowrate',
                             title="Response of Pump to Short", time_slice=10, legend_loc=False, title_padding=0.1)
../../_images/examples_pump_Pump_Example_Notebook_54_0.png

As you can see, the system begins nominal until the fault is injected at \(t=10\). At this moment, not only are the electrical energy flows degraded, the flow of water is degraded also. However, at \(t=55\) when the system is supposed to be turned off, this flow of water is no longer “degraded” because it is in the same state as the nominal system.

We can look at a table of to see more precisely what happened (and export, if needed). Note that we need to give the plotting function the mode (‘short’) and the time for it to plot properly.

[29]:
mdlhist.as_table()
[29]:
nominal.i.finished nominal.i.on nominal.flows.ee_1.s.current nominal.flows.ee_1.s.voltage nominal.flows.sig_1.s.power nominal.flows.wat_1.s.flowrate nominal.flows.wat_1.s.pressure nominal.flows.wat_1.s.area nominal.flows.wat_1.s.level nominal.flows.wat_2.s.flowrate ... faulty.fxns.import_water.m.faults.less_wat faulty.fxns.import_signal.m.faults.no_sig faulty.fxns.move_water.i.over_pressure faulty.fxns.move_water.s.eff faulty.fxns.move_water.m.faults.mech_break faulty.fxns.move_water.m.faults.short faulty.fxns.move_water.t.pressure_limit.time faulty.fxns.move_water.t.pressure_limit.mode faulty.fxns.export_water.m.faults.block faulty.time
0 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 1.0 False False 0.0 standby False 0.0
1 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 1.0 False False 0.0 standby False 1.0
2 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 1.0 False False 0.0 standby False 2.0
3 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 1.0 False False 0.0 standby False 3.0
4 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 1.0 False False 0.0 standby False 4.0
5 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 1.0 False False 0.0 standby False 5.0
6 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 1.0 False False 0.0 standby False 6.0
7 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 1.0 False False 0.0 standby False 7.0
8 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 1.0 False False 0.0 standby False 8.0
9 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 1.0 False False 0.0 standby False 9.0
10 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 10.0
11 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 11.0
12 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 12.0
13 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 13.0
14 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 14.0
15 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 15.0
16 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 16.0
17 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 17.0
18 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 18.0
19 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 19.0
20 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 20.0
21 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 21.0
22 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 22.0
23 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 23.0
24 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 24.0
25 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 25.0
26 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 26.0
27 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 27.0
28 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 28.0
29 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 29.0
30 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 30.0
31 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 31.0
32 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 32.0
33 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 33.0
34 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 34.0
35 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 35.0
36 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 36.0
37 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 37.0
38 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 38.0
39 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 39.0
40 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 40.0
41 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 41.0
42 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 42.0
43 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 43.0
44 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 44.0
45 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 45.0
46 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 46.0
47 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 47.0
48 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 48.0
49 False True 10.0 500.0 1.0 0.3 10.0 1.0 1.0 0.3 ... False False False 0.0 False True 0.0 standby False 49.0
50 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 0.0 False True 0.0 standby False 50.0
51 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 0.0 False True 0.0 standby False 51.0
52 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 0.0 False True 0.0 standby False 52.0
53 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 0.0 False True 0.0 standby False 53.0
54 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 0.0 False True 0.0 standby False 54.0
55 False False 0.0 500.0 0.0 0.0 0.0 1.0 1.0 0.0 ... False False False 0.0 False True 0.0 standby False 55.0

56 rows × 54 columns

Here we can see that the short dropped the voltage to zero, (this was because an open circuit resulted in the Import EE function), causing the water to stop flowing. Below, we use the processed model history to show the faults and degradation of states over time. In this case, 1 means nominal while 0 means degraded.

[30]:
deghist = mdlhist_full.get_degraded_hist(*mdl.fxns, *mdl.flows)
[31]:
deghist.as_table()[:20]
[31]:
import_ee import_water import_signal move_water export_water ee_1 sig_1 wat_1 wat_2 total time
0 False False False False False False False False False 9 0.0
1 False False False False False False False False False 9 1.0
2 False False False False False False False False False 9 2.0
3 False False False False False False False False False 9 3.0
4 False False False False False False False False False 9 4.0
5 False False False False False False False False False 9 5.0
6 False False False False False False False False False 9 6.0
7 False False False False False False False False False 9 7.0
8 False False False False False False False False False 9 8.0
9 False False False False False False False False False 9 9.0
10 True False False True False True False True True 4 10.0
11 True False False True False True False True True 4 11.0
12 True False False True False True False True True 4 12.0
13 True False False True False True False True True 4 13.0
14 True False False True False True False True True 4 14.0
15 True False False True False True False True True 4 15.0
16 True False False True False True False True True 4 16.0
17 True False False True False True False True True 4 17.0
18 True False False True False True False True True 4 18.0
19 True False False True False True False True True 4 19.0

We can also look at the faults over time…

[32]:
faulthist = mdlhist_full.get_faulty_hist(*mdl.fxns)
faulthist.as_table()[0:20]
[32]:
import_ee import_water import_signal move_water export_water total time
0 False False False False False 0 0.0
1 False False False False False 0 1.0
2 False False False False False 0 2.0
3 False False False False False 0 3.0
4 False False False False False 0 4.0
5 False False False False False 0 5.0
6 False False False False False 0 6.0
7 False False False False False 0 7.0
8 False False False False False 0 8.0
9 False False False False False 0 9.0
10 True False False True False 2 10.0
11 True False False True False 2 11.0
12 True False False True False 2 12.0
13 True False False True False 2 13.0
14 True False False True False 2 14.0
15 True False False True False 2 15.0
16 True False False True False 2 16.0
17 True False False True False 2 17.0
18 True False False True False 2 18.0
19 True False False True False 2 19.0

We can also look at statistics of degradation over time using:

[33]:
summ = mdlhist_full.get_fault_degradation_summary(*mdl.fxns, *mdl.flows)
summ.faulty
[33]:
['import_ee', 'move_water']
[34]:
summ.degraded
[34]:
['import_ee',
 'import_water',
 'import_signal',
 'move_water',
 'export_water',
 'ee_1',
 'sig_1',
 'wat_1',
 'wat_2']

Blockage Fault

We can also look at other faults. The results below are for a blockage of the pipe. In this case we’re only interested in the effect on the water going through, so only those flows are tracked.

[35]:
endresults2, mdlhist2=propagate.one_fault(mdl, 'export_water', 'block',
                                          time=10, desired_result=['endclass', 'graph', 'endfaults'])
summ = mdlhist_full.get_fault_degradation_summary(*mdl.fxns, *mdl.flows)
[36]:
summ.faulty
[36]:
['import_ee', 'move_water']
[37]:
summ.degraded
[37]:
['import_ee',
 'import_water',
 'import_signal',
 'move_water',
 'export_water',
 'ee_1',
 'sig_1',
 'wat_1',
 'wat_2']
[38]:
fig, ax = endresults2.graph.draw(figsize=(6,4), withlegend=False)
../../_images/examples_pump_Pump_Example_Notebook_69_0.png
[39]:
mdlhist
[39]:
nominal.i.finished:            array(56)
nominal.i.on:                  array(56)
nominal.flows.ee_1.s.current:  array(56)
nominal.flows.ee_1.s.voltage:  array(56)
nominal.flows.sig_1.s.power:   array(56)
nominal.flows.wat_1.s.flowrate: array(56)
nominal.flows.wat_1.s.pressure: array(56)
nominal.flows.wat_1.s.area:    array(56)
nominal.flows.wat_1.s.level:   array(56)
nominal.flows.wat_2.s.flowrate: array(56)
nominal.flows.wat_2.s.pressure: array(56)
nominal.flows.wat_2.s.area:    array(56)
nominal.flows.wat_2.s.level:   array(56)
nominal.fxns.import_ee.s.effstate: array(56)
nominal.fxns.import_ee.m.faults.no_v: array(56)
nominal.fxns.import_ee.m.faults.inf_v: array(56)
nominal.fxns.import_           array(56)
nominal.fxns.import_           array(56)
nominal.fxns.import_           array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_water.s.eff: array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_water.m.faults.short: array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.export_           array(56)
nominal.time:                  array(56)
faulty.i.finished:             array(56)
faulty.i.on:                   array(56)
faulty.flows.ee_1.s.current:   array(56)
faulty.flows.ee_1.s.voltage:   array(56)
faulty.flows.sig_1.s.power:    array(56)
faulty.flows.wat_1.s.flowrate: array(56)
faulty.flows.wat_1.s.pressure: array(56)
faulty.flows.wat_1.s.area:     array(56)
faulty.flows.wat_1.s.level:    array(56)
faulty.flows.wat_2.s.flowrate: array(56)
faulty.flows.wat_2.s.pressure: array(56)
faulty.flows.wat_2.s.area:     array(56)
faulty.flows.wat_2.s.level:    array(56)
faulty.fxns.import_ee.s.effstate: array(56)
faulty.fxns.import_ee.m.faults.no_v: array(56)
faulty.fxns.import_ee.m.faults.inf_v: array(56)
faulty.fxns.import_w           array(56)
faulty.fxns.import_w           array(56)
faulty.fxns.import_s           array(56)
faulty.fxns.move_water.i.over_pressure: array(56)
faulty.fxns.move_water.s.eff:  array(56)
faulty.fxns.move_wat           array(56)
faulty.fxns.move_water.m.faults.short: array(56)
faulty.fxns.move_wat           array(56)
faulty.fxns.move_wat           array(56)
faulty.fxns.export_w           array(56)
faulty.time:                   array(56)
[40]:
fig, axs = mdlhist2.plot_line('flows.ee_1.s.current', 'flows.wat_2.s.flowrate',
                              title = 'Response of Pump to blockage', time_slice=10, legend_loc=False, title_padding=0.1)
../../_images/examples_pump_Pump_Example_Notebook_71_0.png

Visualization of resilience metrics

We can also use the processed time history to now make visualizations of the resilience of the system over time.

Here we calculate the percent time the simulation was decraded over the simulation interval:

[41]:
fxns_and_flows = [*mdl.get_roles_as_dict("fxns", "flows", flex_prefixes=True)]
deghist = mdlhist_full.get_degraded_hist(*fxns_and_flows)
exp = deghist.get_metrics()
[42]:
exp
[42]:
flows.ee_1:           0.8214285714285714
flows.sig_1:                         0.0
flows.wat_1:          0.7142857142857143
flows.wat_2:          0.7142857142857143
fxns.import_ee:       0.8214285714285714
fxns.import_water:                   0.0
fxns.import_signal:                  0.0
fxns.move_water:      0.8214285714285714
fxns.export_water:                   0.0
total:                 5.107142857142857
time:                               27.5

These metrics (and others like them) can then be overlayed as a heatmap using set_heatmap.

[43]:
mg = FunctionArchitectureGraph(mdl)
mg.set_heatmap({mdl.name+"."+k: v for k, v in exp.items()})
mg.draw()
[43]:
(<Figure size 1200x1000 with 1 Axes>, <Axes: >)
../../_images/examples_pump_Pump_Example_Notebook_76_1.png

Network metrics can also be overlaid on the graphs:

[44]:
mg = FunctionArchitectureGraph(mdl)
fig, ax = mg.plot_high_degree_nodes()
../../_images/examples_pump_Pump_Example_Notebook_78_0.png
[45]:
mg = FunctionArchitectureGraph(mdl)
fig, ax = mg.plot_bridging_nodes()
../../_images/examples_pump_Pump_Example_Notebook_79_0.png

Running a List of Faults

Finally, to get the results of all of the single-fault scenarios defined in the model, we can run them all at once using the single_faults() function. Note that this will propagate faults based on the times vector put in the model it will propogate the faults at the begining, end, and at t=15 and t=15. This function only takes in the model mdl and outputs two similar kinds of output–resultsdict (the results in a python dictionary) and resultstab (the results in a nice tabular form).

Note that the rates provide for this table do not use the opportunity vector information, instead using the assumption that the fault scenario has the rate provided over the entire simulation.

See below:

[46]:
endclasses, mdlhists=propagate.single_faults(mdl, staged=True, track="all")
SCENARIOS COMPLETE: 100%|██████████| 8/8 [00:00<00:00, 14.48it/s]

We can visualize the metrics for each scenario using Result.create_simple_fmea

[47]:
endclasses.create_simple_fmea()
[47]:
rate cost expected_cost
import_ee_no_v_t0p0 0.000008 20125.0 16100.0
import_ee_inf_v_t0p0 0.000002 25125.0 5025.0
import_water_no_wat_t0p0 0.000010 11125.0 11125.0
import_water_less_wat_t0p0 0.000010 5062.5 5062.5
import_signal_no_sig_t0p0 0.000001 20125.0 2012.5
move_water_mech_break_t0p0 0.000006 15125.0 9075.0
move_water_short_t0p0 0.000010 30125.0 30125.0
export_water_block_t0p0 0.000010 20102.5 20102.5
nominal 1.000000 0.0 0.0

We can see corresponding degradations using tabulate.result_summary.fmea()

[48]:
fullfmea = an.tabulate.result_summary_fmea(endclasses, mdlhists, *mdl.fxns, *mdl.flows)
fullfmea[:10]
[48]:
degraded faulty rate cost expected_cost
import_ee_no_v_t0p0 ['import_water', 'import_signal', 'move_water'... ['import_ee'] 0.000008 20125.0 16100.0
import_ee_inf_v_t0p0 ['import_water', 'import_signal', 'move_water'... ['import_ee'] 0.000002 25125.0 5025.0
import_water_no_wat_t0p0 ['import_ee', 'import_signal', 'move_water', '... ['import_water'] 0.00001 11125.0 11125.0
import_water_less_wat_t0p0 ['import_ee', 'import_signal', 'move_water', '... ['import_water'] 0.00001 5062.5 5062.5
import_signal_no_sig_t0p0 ['import_ee', 'import_water', 'move_water', 'e... ['import_signal'] 0.000001 20125.0 2012.5
move_water_mech_break_t0p0 ['import_ee', 'import_water', 'import_signal',... ['move_water'] 0.000006 15125.0 9075.0
move_water_short_t0p0 ['import_ee', 'import_water', 'import_signal',... ['import_ee', 'move_water'] 0.00001 30125.0 30125.0
export_water_block_t0p0 ['import_ee', 'import_water', 'import_signal',... ['move_water', 'export_water'] 0.00001 20102.5 20102.5
nominal ['import_ee', 'import_water', 'import_signal',... [] 1.0 0.0 0.0

Running a Fault Sampling Approach

Note that only gives accurate results for costs and fault responses–in order to get an accurate idea of expected cost, we instead run a FaultSample or SampleApproach, which develops an underlying probability model for faults. See below.

[49]:
from fmdtools.sim.sample import FaultDomain, FaultSample

fd = FaultDomain(mdl)
fd.add_all()
fd
[49]:
FaultDomain with faults:
 -('import_ee', 'no_v')
 -('import_ee', 'inf_v')
 -('import_water', 'no_wat')
 -('import_water', 'less_wat')
 -('import_signal', 'no_sig')
 -('move_water', 'mech_break')
 -('move_water', 'short')
 -('export_water', 'block')
[50]:
from fmdtools.analyze.phases import PhaseMap
fs = FaultSample(fd, phasemap=PhaseMap(mdl.sp.phases))
fs.add_fault_phases()
fs
[50]:
FaultSample of scenarios:
 - import_ee_no_v_t2p0
 - import_ee_inf_v_t2p0
 - import_water_no_wat_t2p0
 - import_water_less_wat_t2p0
 - import_signal_no_sig_t2p0
 - move_water_mech_break_t2p0
 - move_water_short_t2p0
 - export_water_block_t2p0
 - import_ee_no_v_t27p0
 - import_ee_inf_v_t27p0
 - ... (24 total)
[51]:
endclasses, mdlhists=propagate.fault_sample(mdl, fs, staged=True, track="all")
simplefmea = endclasses.create_simple_fmea() #note the costs are the same, but the rates and expected costs are not
simplefmea[:5]
SCENARIOS COMPLETE: 100%|██████████| 24/24 [00:00<00:00, 26.03it/s]
[51]:
rate cost expected_cost
import_ee_no_v_t2p0 0.000000 20125.0 0.00
import_ee_inf_v_t2p0 0.000000 25125.0 0.00
import_water_no_wat_t2p0 0.000010 11125.0 11125.00
import_water_less_wat_t2p0 0.000010 5062.5 5062.50
import_signal_no_sig_t2p0 0.000002 20125.0 3018.75

We can now summarize the risks of faults over the operational phases and overall using the FMEA class:

[52]:
phasefmea = an.tabulate.FMEA(endclasses, fs, group_by=('function', 'fault', 'phase'))
phasefmea.as_table()
[52]:
rate cost expected_cost
move_water short start 1.500000e-05 37656.250 0.451875
export_water block start 1.500000e-05 25128.125 0.301538
move_water short on 1.000000e-05 25175.000 0.251750
export_water block on 1.000000e-05 15152.500 0.151525
import_ee no_v on 8.000000e-06 13657.500 0.121400
import_water no_wat start 1.000000e-05 11125.000 0.111250
move_water short end 1.000000e-05 10000.000 0.100000
mech_break on 7.200000e-06 8750.500 0.073260
import_water no_wat on 1.000000e-05 6175.000 0.061750
less_wat start 1.000000e-05 5062.500 0.050625
export_water block end 1.000000e-05 5000.000 0.050000
import_ee inf_v on 2.000000e-06 12105.000 0.040350
import_signal no_sig start 1.500000e-06 11571.875 0.030188
import_water less_wat on 1.000000e-05 2587.500 0.025875
import_signal no_sig on 1.000000e-06 8346.250 0.015175
end 1.000000e-06 5500.000 0.010000
import_water no_wat end 1.000000e-05 1000.000 0.010000
move_water mech_break start 6.000000e-07 8016.250 0.009075
end 6.000000e-07 2650.000 0.003000
import_ee inf_v end 0.000000e+00 2500.000 0.000000
import_water less_wat end 1.000000e-05 0.000 0.000000
import_ee inf_v start 0.000000e+00 12562.500 0.000000
no_v start 0.000000e+00 10062.500 0.000000
end 0.000000e+00 5000.000 0.000000
[53]:
summfmea = an.tabulate.FMEA(endclasses, fs)
summfmea.as_table()
[53]:
rate cost expected_cost
move_water short 0.000035 24277.083333 0.803625
export_water block 0.000035 15093.541667 0.503063
import_water no_wat 0.000030 6100.000000 0.183000
import_ee no_v 0.000008 9573.333333 0.121400
move_water mech_break 0.000008 6472.250000 0.085335
import_water less_wat 0.000030 2550.000000 0.076500
import_signal no_sig 0.000003 8472.708333 0.055363
import_ee inf_v 0.000002 9055.833333 0.040350

History visualization

We can further overlay expected resilience metrics on the model over fault scenarios using various methods provided with History and Result.

Below we get the expected values of the history values:

[54]:
hist_expected = mdlhists.get_expected(app=fs, with_nominal=True)

Next we get the expected degradations:

[55]:
deg=hist_expected.get_degraded_hist(*fxns_and_flows, nomhist=mdlhists.nominal)
[56]:
deg
[56]:
flows.ee_1:                    array(56)
flows.sig_1:                   array(56)
flows.wat_1:                   array(56)
flows.wat_2:                   array(56)
fxns.import_ee:                array(56)
fxns.move_water:               array(56)
total:                         array(56)
time:                          array(56)
[57]:
import numpy as np
heatmap = deg.get_metrics(metric=np.mean)

These metrics can in turn be overlayed on the graph using set_heatmap.

[58]:
from fmdtools.define.architecture.function import FunctionArchitectureGraph
mg = FunctionArchitectureGraph(mdl)
mg.set_heatmap({mdl.name+"."+k: v for k, v in exp.items()})
mg.draw()
[58]:
(<Figure size 1200x1000 with 1 Axes>, <Axes: >)
../../_images/examples_pump_Pump_Example_Notebook_100_1.png

Save/Load

In detailed simulations, running a lot of computational simulations can take a considerable amount of time. As a result, it becomes impractical to run a new simulation every time one wishes to analyse its data. Results from fmdtools simulations (endclasses or mdlhists) can be saved as pickle, csv, or json files in this instance using either: - Result.save or History.save or - passing a save_args dictionary to the respective propagate functions (e.g., {‘endclass’:{‘filename’:’file.pkl’,’overwrite’:True})

and then loaded using: - Result.load or History.load

[59]:
mdlhists
[59]:
import_ee_no_v_t2p0.i.finished: array(56)
import_ee_no_v_t2p0.i.on:      array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.flows.wat_1.s.area: array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.flows.wat_2.s.area: array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.time:      array(56)
import_ee_inf_v_t2p0.i.finished: array(56)
import_ee_inf_v_t2p0.i.on:     array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0.time:     array(56)
import_water_no_wat_t2p0.i.finished: array(56)
import_water_no_wat_t2p0.i.on: array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_t2p0.time: array(56)
import_water_less_wat_t2p0.i.finished: array(56)
import_water_less_wat_t2p0.i.on: array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wat_t2p0.time: array(56)
import_signal_no_sig_t2p0.i.finished: array(56)
import_signal_no_sig_t2p0.i.on: array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig_t2p0.time: array(56)
move_water_mech_break_t2p0.i.finished: array(56)
move_water_mech_break_t2p0.i.on: array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_break_t2p0.time: array(56)
move_water_short_t2p0.i.finished: array(56)
move_water_short_t2p0.i.on:    array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p0.time:    array(56)
export_water_block_t2p0.i.finished: array(56)
export_water_block_t2p0.i.on:  array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t2p0.time:  array(56)
import_ee_no_v_t27p0.i.finished: array(56)
import_ee_no_v_t27p0.i.on:     array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0.time:     array(56)
import_ee_inf_v_t27p0.i.finished: array(56)
import_ee_inf_v_t27p0.i.on:    array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p0.time:    array(56)
import_water_no_wat_t27p0.i.finished: array(56)
import_water_no_wat_t27p0.i.on: array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_t27p0.time: array(56)
import_water_less_wat_t27p0.i.finished: array(56)
import_water_less_wat_t27p0.i.on: array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wat_t27p0.time: array(56)
import_signal_no_sig_t27p0.i.finished: array(56)
import_signal_no_sig_t27p0.i.on: array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig_t27p0.time: array(56)
move_water_mech_break_t27p0.i.finished: array(56)
move_water_mech_break_t27p0.i.on: array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_break_t27p0.time: array(56)
move_water_short_t27p0.i.finished: array(56)
move_water_short_t27p0.i.on:   array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27p0.time:   array(56)
export_water_block_t27p0.i.finished: array(56)
export_water_block_t27p0.i.on: array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t27p0.time: array(56)
import_ee_no_v_t52p0.i.finished: array(56)
import_ee_no_v_t52p0.i.on:     array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0.time:     array(56)
import_ee_inf_v_t52p0.i.finished: array(56)
import_ee_inf_v_t52p0.i.on:    array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p0.time:    array(56)
import_water_no_wat_t52p0.i.finished: array(56)
import_water_no_wat_t52p0.i.on: array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_t52p0.time: array(56)
import_water_less_wat_t52p0.i.finished: array(56)
import_water_less_wat_t52p0.i.on: array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wat_t52p0.time: array(56)
import_signal_no_sig_t52p0.i.finished: array(56)
import_signal_no_sig_t52p0.i.on: array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig_t52p0.time: array(56)
move_water_mech_break_t52p0.i.finished: array(56)
move_water_mech_break_t52p0.i.on: array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_break_t52p0.time: array(56)
move_water_short_t52p0.i.finished: array(56)
move_water_short_t52p0.i.on:   array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52p0.time:   array(56)
export_water_block_t52p0.i.finished: array(56)
export_water_block_t52p0.i.on: array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t52p0.time: array(56)
nominal.i.finished:            array(56)
nominal.i.on:                  array(56)
nominal.flows.ee_1.s.current:  array(56)
nominal.flows.ee_1.s.voltage:  array(56)
nominal.flows.sig_1.s.power:   array(56)
nominal.flows.wat_1.s.flowrate: array(56)
nominal.flows.wat_1.s.pressure: array(56)
nominal.flows.wat_1.s.area:    array(56)
nominal.flows.wat_1.s.level:   array(56)
nominal.flows.wat_2.s.flowrate: array(56)
nominal.flows.wat_2.s.pressure: array(56)
nominal.flows.wat_2.s.area:    array(56)
nominal.flows.wat_2.s.level:   array(56)
nominal.fxns.import_ee.s.effstate: array(56)
nominal.fxns.import_ee.m.faults.no_v: array(56)
nominal.fxns.import_ee.m.faults.inf_v: array(56)
nominal.fxns.import_           array(56)
nominal.fxns.import_           array(56)
nominal.fxns.import_           array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_water.s.eff: array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_water.m.faults.short: array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.export_           array(56)
nominal.time:                  array(56)

This saves a history to a file:

[60]:
mdlhists.save("example_mdlhist.npz", overwrite=True)
File already exists: example_mdlhist.npz, writing anyway...

And this loads this history:

[61]:
mdlhists_saved  = an.history.History.load("example_mdlhist.npz")
[62]:
mdlhists_saved
[62]:
import_ee_no_v_t2p0.i.finished: array(56)
import_ee_no_v_t2p0.i.on:      array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.flows.wat_1.s.area: array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.flows.wat_2.s.area: array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.           array(56)
import_ee_no_v_t2p0.time:      array(56)
import_ee_inf_v_t2p0.i.finished: array(56)
import_ee_inf_v_t2p0.i.on:     array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0           array(56)
import_ee_inf_v_t2p0.time:     array(56)
import_water_no_wat_t2p0.i.finished: array(56)
import_water_no_wat_t2p0.i.on: array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_t2p0.time: array(56)
import_water_less_wat_t2p0.i.finished: array(56)
import_water_less_wat_t2p0.i.on: array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wat_t2p0.time: array(56)
import_signal_no_sig_t2p0.i.finished: array(56)
import_signal_no_sig_t2p0.i.on: array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig_t2p0.time: array(56)
move_water_mech_break_t2p0.i.finished: array(56)
move_water_mech_break_t2p0.i.on: array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_break_t2p0.time: array(56)
move_water_short_t2p0.i.finished: array(56)
move_water_short_t2p0.i.on:    array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p           array(56)
move_water_short_t2p0.time:    array(56)
export_water_block_t2p0.i.finished: array(56)
export_water_block_t2p0.i.on:  array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t2p0.time:  array(56)
import_ee_no_v_t27p0.i.finished: array(56)
import_ee_no_v_t27p0.i.on:     array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0           array(56)
import_ee_no_v_t27p0.time:     array(56)
import_ee_inf_v_t27p0.i.finished: array(56)
import_ee_inf_v_t27p0.i.on:    array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p           array(56)
import_ee_inf_v_t27p0.time:    array(56)
import_water_no_wat_t27p0.i.finished: array(56)
import_water_no_wat_t27p0.i.on: array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_t27p0.time: array(56)
import_water_less_wat_t27p0.i.finished: array(56)
import_water_less_wat_t27p0.i.on: array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wat_t27p0.time: array(56)
import_signal_no_sig_t27p0.i.finished: array(56)
import_signal_no_sig_t27p0.i.on: array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig_t27p0.time: array(56)
move_water_mech_break_t27p0.i.finished: array(56)
move_water_mech_break_t27p0.i.on: array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_break_t27p0.time: array(56)
move_water_short_t27p0.i.finished: array(56)
move_water_short_t27p0.i.on:   array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27           array(56)
move_water_short_t27p0.time:   array(56)
export_water_block_t27p0.i.finished: array(56)
export_water_block_t27p0.i.on: array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t27p0.time: array(56)
import_ee_no_v_t52p0.i.finished: array(56)
import_ee_no_v_t52p0.i.on:     array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0           array(56)
import_ee_no_v_t52p0.time:     array(56)
import_ee_inf_v_t52p0.i.finished: array(56)
import_ee_inf_v_t52p0.i.on:    array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p           array(56)
import_ee_inf_v_t52p0.time:    array(56)
import_water_no_wat_t52p0.i.finished: array(56)
import_water_no_wat_t52p0.i.on: array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_           array(56)
import_water_no_wat_t52p0.time: array(56)
import_water_less_wat_t52p0.i.finished: array(56)
import_water_less_wat_t52p0.i.on: array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wa           array(56)
import_water_less_wat_t52p0.time: array(56)
import_signal_no_sig_t52p0.i.finished: array(56)
import_signal_no_sig_t52p0.i.on: array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig           array(56)
import_signal_no_sig_t52p0.time: array(56)
move_water_mech_break_t52p0.i.finished: array(56)
move_water_mech_break_t52p0.i.on: array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_brea           array(56)
move_water_mech_break_t52p0.time: array(56)
move_water_short_t52p0.i.finished: array(56)
move_water_short_t52p0.i.on:   array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52           array(56)
move_water_short_t52p0.time:   array(56)
export_water_block_t52p0.i.finished: array(56)
export_water_block_t52p0.i.on: array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t           array(56)
export_water_block_t52p0.time: array(56)
nominal.i.finished:            array(56)
nominal.i.on:                  array(56)
nominal.flows.ee_1.s.current:  array(56)
nominal.flows.ee_1.s.voltage:  array(56)
nominal.flows.sig_1.s.power:   array(56)
nominal.flows.wat_1.s.flowrate: array(56)
nominal.flows.wat_1.s.pressure: array(56)
nominal.flows.wat_1.s.area:    array(56)
nominal.flows.wat_1.s.level:   array(56)
nominal.flows.wat_2.s.flowrate: array(56)
nominal.flows.wat_2.s.pressure: array(56)
nominal.flows.wat_2.s.area:    array(56)
nominal.flows.wat_2.s.level:   array(56)
nominal.fxns.import_ee.s.effstate: array(56)
nominal.fxns.import_ee.m.faults.no_v: array(56)
nominal.fxns.import_ee.m.faults.inf_v: array(56)
nominal.fxns.import_           array(56)
nominal.fxns.import_           array(56)
nominal.fxns.import_           array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_water.s.eff: array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_water.m.faults.short: array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.move_wa           array(56)
nominal.fxns.export_           array(56)
nominal.time:                  array(56)

Note that there are different trade-offs to using different file formats: - npz is the serialization format provided in numpy, which is fast but not human readable - csv outputs as comma separated values, which are slower and less robust (in terms of data types), but are human-readable and can be opened in a spreadsheet software like excel. - json is similar to csv, but is less human readable.