Skip to content

Commit 8bddc04

Browse files
authored
Add or remove compartments from models (#102)
* Add `.add` and `.remove` to `Model` class in `model` module Adds `.add` and `.remove` functions to the Model class in the model module, which add and remove compartments. CHANGELIST: * Add `.add` and `.remove` functions to model class * Version bump * Update changelog Signed-off-by: @Quantalabs <npm.quantalabs@gmail.com> * Update docs * Build code for web support Rebuild web code with browserify and terser * Add testing * Bug Fix
1 parent 73ab7f5 commit 8bddc04

39 files changed

Lines changed: 270 additions & 86 deletions

‎CHANGELOG.md‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
# v2.2.0
2+
3+
- Add `.remove` and `.add` functions to `Model` class in `model` module to add and remove compartments.
4+
5+
# v2.1.2
6+
7+
- Fix error from previous release
8+
9+
# v2.1.1
10+
11+
- Fix key error in `model`
12+
113
# v2.1.0
214
- Adds `manipulate` to manipulate outputs with `plots`
315
- Adds `mexport` and `mimport` to `model`, which allow for exporting and importing models to `.js` and `.json` files.

‎EpiJS/model.js‎

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,64 @@ class Model {
8787
}
8888
}
8989
}
90+
91+
/**
92+
* Remove a compartment from the model.
93+
* @param {Object} compartment - The compartment to remove.
94+
* @example
95+
*
96+
* let susceptible = new Idiom("S-(B*S*I/p)");
97+
* let infected = new Idiom("I+(B*S*I/p)-(u*I)");
98+
* let recovered = new Idiom("R+(u*I)");
99+
*
100+
* let key = {
101+
* "S": 10000,
102+
* "B": 0.3,
103+
* "I": 100,
104+
* "R": 0,
105+
* "p": 10100,
106+
* "u": 0.2
107+
* };
108+
*
109+
* let sirm = new Model([[susceptible, "S"], [infected, "I"], [recovered, "R"]], key)
110+
*
111+
* sirm.remove(recovered) // Removes the recovered compartment.
112+
*/
113+
remove(compartment) {
114+
for (var x = 0; x < this.compartments.length; x++) {
115+
if (this.compartments[x][0] === compartment) {
116+
this.compartments.splice(x, 1)
117+
}
118+
}
119+
}
120+
121+
/**
122+
* Add a compartment to the model.
123+
* @param {Array} compartment - The compartment to add, should be a list, with the first value being the compartment, and the second being it's value in the key.
124+
* @param {Number} index - The index to add the compartment at.
125+
* @example
126+
*
127+
* let susceptible = new Idiom("S-(B*S*I/p)");
128+
* let infected = new Idiom("I+(B*S*I/p)-(u*I)");
129+
* let recovered = new Idiom("R+(u*I)");
130+
*
131+
* let key = {
132+
* "S": 10000,
133+
* "B": 0.3,
134+
* "I": 100,
135+
* "R": 0,
136+
* "p": 10100,
137+
* "u": 0.2
138+
* };
139+
*
140+
* let sirm = new Model([[susceptible, "S"], [infected, "I"], [recovered, "R"]], key)
141+
*
142+
* sirm.remove(susceptible) // Removes the susceptible compartment.
143+
* sirm.add([susceptible, "S"], 0) // Adds the susceptible compartment back to the beginning
144+
*/
145+
add(compartment, index) {
146+
this.compartments.splice(index, 0, compartment)
147+
}
90148
}
91149

92150
/**

‎docs/.vuepress/dist/404.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
<link rel="shortcut icon" href="https://i.ibb.co/HKt7Bn3/Logo-Makr-4sk-LGO.png">
99
<meta name="description" content="A disease modeling package for JS.">
1010

11-
<link rel="preload" href="/latest/assets/css/0.styles.b9717b67.css" as="style"><link rel="preload" href="/latest/assets/js/app.aff1c8ab.js" as="script"><link rel="preload" href="/latest/assets/js/6.852d803a.js" as="script"><link rel="prefetch" href="/latest/assets/js/10.a77dd4da.js"><link rel="prefetch" href="/latest/assets/js/11.611be703.js"><link rel="prefetch" href="/latest/assets/js/12.4e73897a.js"><link rel="prefetch" href="/latest/assets/js/13.656464db.js"><link rel="prefetch" href="/latest/assets/js/14.1ebbcd48.js"><link rel="prefetch" href="/latest/assets/js/15.5ca88985.js"><link rel="prefetch" href="/latest/assets/js/16.5683af4a.js"><link rel="prefetch" href="/latest/assets/js/17.33651cd7.js"><link rel="prefetch" href="/latest/assets/js/2.9dda8840.js"><link rel="prefetch" href="/latest/assets/js/3.7383f13d.js"><link rel="prefetch" href="/latest/assets/js/4.e52e661e.js"><link rel="prefetch" href="/latest/assets/js/5.0ae7634d.js"><link rel="prefetch" href="/latest/assets/js/7.43ae9a22.js"><link rel="prefetch" href="/latest/assets/js/8.4f988444.js"><link rel="prefetch" href="/latest/assets/js/9.94dfc0ef.js">
11+
<link rel="preload" href="/latest/assets/css/0.styles.b9717b67.css" as="style"><link rel="preload" href="/latest/assets/js/app.91f8e8e3.js" as="script"><link rel="preload" href="/latest/assets/js/6.66b67ff0.js" as="script"><link rel="prefetch" href="/latest/assets/js/10.932528a4.js"><link rel="prefetch" href="/latest/assets/js/11.872dc73d.js"><link rel="prefetch" href="/latest/assets/js/12.87248bdf.js"><link rel="prefetch" href="/latest/assets/js/13.69389283.js"><link rel="prefetch" href="/latest/assets/js/14.2151a125.js"><link rel="prefetch" href="/latest/assets/js/15.1b080847.js"><link rel="prefetch" href="/latest/assets/js/16.a484d9e5.js"><link rel="prefetch" href="/latest/assets/js/17.113e2690.js"><link rel="prefetch" href="/latest/assets/js/2.b0282dab.js"><link rel="prefetch" href="/latest/assets/js/3.6af3db70.js"><link rel="prefetch" href="/latest/assets/js/4.2a5d96fc.js"><link rel="prefetch" href="/latest/assets/js/5.33ec2a2e.js"><link rel="prefetch" href="/latest/assets/js/7.bbf703d4.js"><link rel="prefetch" href="/latest/assets/js/8.22d960c1.js"><link rel="prefetch" href="/latest/assets/js/9.570eb5e8.js">
1212
<link rel="stylesheet" href="/latest/assets/css/0.styles.b9717b67.css">
1313
</head>
1414
<body>
15-
<div id="app" data-server-rendered="true"><div class="theme-container"><div class="theme-default-content"><h1>404</h1> <blockquote>How did we get here?</blockquote> <a href="/latest/" class="router-link-active">
15+
<div id="app" data-server-rendered="true"><div class="theme-container"><div class="theme-default-content"><h1>404</h1> <blockquote>There's nothing here.</blockquote> <a href="/latest/" class="router-link-active">
1616
Take me home.
1717
</a></div></div><div class="global-ui"></div></div>
18-
<script src="/latest/assets/js/app.aff1c8ab.js" defer></script><script src="/latest/assets/js/6.852d803a.js" defer></script>
18+
<script src="/latest/assets/js/app.91f8e8e3.js" defer></script><script src="/latest/assets/js/6.66b67ff0.js" defer></script>
1919
</body>
2020
</html>

docs/.vuepress/dist/assets/js/10.a77dd4da.js renamed to docs/.vuepress/dist/assets/js/10.932528a4.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)