supplynetpy 0.2.0__tar.gz → 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/CHANGELOG.md +235 -181
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/PKG-INFO +1 -1
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/pyproject.toml +13 -1
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/src/SupplyNetPy/Components/core.py +377 -213
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/src/SupplyNetPy/Components/logger.py +14 -2
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/src/SupplyNetPy/Components/utilities.py +882 -842
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/tests/test_core.py +308 -6
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/tests/test_utilities.py +48 -2
- supplynetpy-0.2.0/.github/workflows/ci.yml +0 -32
- supplynetpy-0.2.0/.github/workflows/deploy-docs.yml +0 -30
- supplynetpy-0.2.0/CLAUDE.md +0 -153
- supplynetpy-0.2.0/REVIEW.md +0 -1152
- supplynetpy-0.2.0/docs/EOQ_est.md +0 -273
- supplynetpy-0.2.0/docs/about.md +0 -85
- supplynetpy-0.2.0/docs/api-reference/api-intro.md +0 -80
- supplynetpy-0.2.0/docs/api-reference/api-ref-core.md +0 -9
- supplynetpy-0.2.0/docs/api-reference/api-ref-logger.md +0 -7
- supplynetpy-0.2.0/docs/api-reference/api-ref-utilities.md +0 -16
- supplynetpy-0.2.0/docs/case-studies/milk-india/profit_surface_alpha_beta_nbackup_2.html +0 -7
- supplynetpy-0.2.0/docs/case-studies/milk-india/profit_surface_beta_alpha_pfail_005.html +0 -7
- supplynetpy-0.2.0/docs/case-studies/milk-india/retailer_profit_heatmap.html +0 -207012
- supplynetpy-0.2.0/docs/case-studies/milk-india/supply_chain_map.html +0 -100745
- supplynetpy-0.2.0/docs/case-studies/milk-supply-chain-india.md +0 -95
- supplynetpy-0.2.0/docs/case_study_pharma.md +0 -333
- supplynetpy-0.2.0/docs/changelog.md +0 -6
- supplynetpy-0.2.0/docs/css/extra.css +0 -20
- supplynetpy-0.2.0/docs/example-complex.md +0 -59
- supplynetpy-0.2.0/docs/example-newvendor.md +0 -109
- supplynetpy-0.2.0/docs/example.md +0 -80
- supplynetpy-0.2.0/docs/glossary.md +0 -133
- supplynetpy-0.2.0/docs/google054ce296ecdefa6a.html +0 -1
- supplynetpy-0.2.0/docs/img/EOQ_est_files/EOQ_est_1_1.png +0 -0
- supplynetpy-0.2.0/docs/img/EOQ_est_files/EOQ_est_1_2.png +0 -0
- supplynetpy-0.2.0/docs/img/EOQ_est_files/EOQ_est_lot_size.png +0 -0
- supplynetpy-0.2.0/docs/img/EOQ_est_files/EOQ_est_sc_net.png +0 -0
- supplynetpy-0.2.0/docs/img/bread_sc.png +0 -0
- supplynetpy-0.2.0/docs/img/case_study_pharma_files/case_study_pharma_4_0.png +0 -0
- supplynetpy-0.2.0/docs/img/case_study_pharma_files/case_study_pharma_5_1.png +0 -0
- supplynetpy-0.2.0/docs/img/case_study_pharma_files/case_study_pharma_6_0.png +0 -0
- supplynetpy-0.2.0/docs/img/case_study_pharma_files/case_study_pharma_fin.png +0 -0
- supplynetpy-0.2.0/docs/img/case_study_pharma_files/case_study_pharma_flow.png +0 -0
- supplynetpy-0.2.0/docs/img/case_study_pharma_files/case_study_pharma_sc.png +0 -0
- supplynetpy-0.2.0/docs/img/github.png +0 -0
- supplynetpy-0.2.0/docs/img/img_newsvendor_Q.png +0 -0
- supplynetpy-0.2.0/docs/img/img_six_node_sc.png +0 -0
- supplynetpy-0.2.0/docs/img/img_two_node_sc.png +0 -0
- supplynetpy-0.2.0/docs/img/newsvendor.png +0 -0
- supplynetpy-0.2.0/docs/img/profile-user.png +0 -0
- supplynetpy-0.2.0/docs/img/safety_inv_est_files/safety_inv_est_2_1.png +0 -0
- supplynetpy-0.2.0/docs/img/safety_inv_est_files/safety_inv_est_6_1.png +0 -0
- supplynetpy-0.2.0/docs/img/safety_inv_est_files/safety_inv_est_6_2.png +0 -0
- supplynetpy-0.2.0/docs/img/safety_inv_est_files/safety_inv_est_6_3.png +0 -0
- supplynetpy-0.2.0/docs/img/safety_inv_est_files/safety_inv_est_profile.png +0 -0
- supplynetpy-0.2.0/docs/img/safety_inv_est_files/safety_inv_est_sc.png +0 -0
- supplynetpy-0.2.0/docs/index.md +0 -14
- supplynetpy-0.2.0/docs/known-issues.md +0 -21
- supplynetpy-0.2.0/docs/license.md +0 -23
- supplynetpy-0.2.0/docs/requirements.txt +0 -7
- supplynetpy-0.2.0/docs/safety_inv_est.md +0 -280
- supplynetpy-0.2.0/docs/ten_min.md +0 -167
- supplynetpy-0.2.0/examples/notebooks/EOQ_est.ipynb +0 -315
- supplynetpy-0.2.0/examples/notebooks/case_study_pharma.ipynb +0 -507
- supplynetpy-0.2.0/examples/notebooks/data/benchmark_performance.py +0 -175
- supplynetpy-0.2.0/examples/notebooks/data/perform_n_raw.csv +0 -271
- supplynetpy-0.2.0/examples/notebooks/data/perform_n_summary.csv +0 -10
- supplynetpy-0.2.0/examples/notebooks/data/perform_sim_l_raw.csv +0 -301
- supplynetpy-0.2.0/examples/notebooks/data/perform_sim_l_summary.csv +0 -11
- supplynetpy-0.2.0/examples/notebooks/different_replenish_policies_anylogistix.ipynb +0 -539
- supplynetpy-0.2.0/examples/notebooks/newsvendor.ipynb +0 -257
- supplynetpy-0.2.0/examples/notebooks/performance_ana.ipynb +0 -660
- supplynetpy-0.2.0/examples/notebooks/safety_inv_est.ipynb +0 -382
- supplynetpy-0.2.0/examples/notebooks/simple_supplier_n_factory.ipynb +0 -151
- supplynetpy-0.2.0/examples/py/hybrid_big_sc.py +0 -232
- supplynetpy-0.2.0/examples/py/intro_simple.py +0 -186
- supplynetpy-0.2.0/examples/py/newsvendor.py +0 -69
- supplynetpy-0.2.0/examples/py/sc_with_factory.py +0 -207
- supplynetpy-0.2.0/mkdocs.yml +0 -73
- supplynetpy-0.2.0/overrides/breadcrumbs.html +0 -36
- supplynetpy-0.2.0/requirements.txt +0 -4
- supplynetpy-0.2.0/validation/README.md +0 -166
- supplynetpy-0.2.0/validation/RESULT_summary.md +0 -61
- supplynetpy-0.2.0/validation/validation_snp_anylogistix_cmp.csv +0 -43
- supplynetpy-0.2.0/validation/validation_snp_anylogistix_cmp.ods +0 -0
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/.gitignore +0 -0
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/LICENSE +0 -0
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/README.md +0 -0
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/src/SupplyNetPy/Components/__init__.py +0 -0
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/src/SupplyNetPy/__init__.py +0 -0
- {supplynetpy-0.2.0 → supplynetpy-0.2.2}/tests/conftest.py +0 -0
|
@@ -1,181 +1,235 @@
|
|
|
1
|
-
# Release history
|
|
2
|
-
|
|
3
|
-
Changes to SupplyNetPy, newest first. The library was first published on PyPI
|
|
4
|
-
on 2025-08-21 (version 0.1.0).
|
|
5
|
-
|
|
6
|
-
Each entry is tagged: **[NEW]** a new feature, **[FIX]** a bug fix,
|
|
7
|
-
**[CHANGE]** a change in behavior, **[BREAKING]** a change that may need
|
|
8
|
-
action from you, and **[DOCS]** documentation only.
|
|
9
|
-
|
|
10
|
-
## 0.2.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
supplier
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
* **[FIX]**
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
`
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
- **[FIX]**
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
- **[
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
- **[
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
## 0.1.
|
|
148
|
-
|
|
149
|
-
- **[NEW]** `
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
- **[
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
1
|
+
# Release history
|
|
2
|
+
|
|
3
|
+
Changes to SupplyNetPy, newest first. The library was first published on PyPI
|
|
4
|
+
on 2025-08-21 (version 0.1.0).
|
|
5
|
+
|
|
6
|
+
Each entry is tagged: **[NEW]** a new feature, **[FIX]** a bug fix,
|
|
7
|
+
**[CHANGE]** a change in behavior, **[BREAKING]** a change that may need
|
|
8
|
+
action from you, and **[DOCS]** documentation only.
|
|
9
|
+
|
|
10
|
+
## 0.2.2 (2026-10-13)
|
|
11
|
+
|
|
12
|
+
Simulation results are the same as in 0.2.1. This release adds warnings for
|
|
13
|
+
mistakes in how a model is set up, and makes the source package smaller.
|
|
14
|
+
|
|
15
|
+
* **[NEW]** A replenishment policy now warns about keys in `policy_param`
|
|
16
|
+
that it does not use, and asks whether another policy was meant. For
|
|
17
|
+
example, `'T'` is read only by the periodic policy, so passing it to the
|
|
18
|
+
(s, S) policy now gives a warning instead of being silently ignored.
|
|
19
|
+
* **[CHANGE]** Problems in how a model is set up are now shown with Python's
|
|
20
|
+
warnings, so they appear even when logging is off. They are still written to
|
|
21
|
+
the trace log. This covers the unused policy parameters above, a manufacturer
|
|
22
|
+
without a supplier for every raw material, an unknown statistic name passed
|
|
23
|
+
to `update_stats`, and these `simulate_sc_net` calls: a `sim_time` that is not
|
|
24
|
+
later than the current time, `logging=(start, stop)` (deprecated, now a
|
|
25
|
+
`FutureWarning`), and `logging=(start, stop)` together with `log_window`.
|
|
26
|
+
Events during a run, such as a delivery that does not fit in the inventory,
|
|
27
|
+
are still only logged.
|
|
28
|
+
* **[CHANGE]** The source archive on PyPI now carries only the library, its
|
|
29
|
+
tests, README, LICENSE and CHANGELOG, so it is about 115 KB instead of over
|
|
30
|
+
4 MB. The docs and examples stay in the repository. The wheel is unchanged.
|
|
31
|
+
* **[DOCS]** The docs now say that a run stops just before its end time, so
|
|
32
|
+
events due at exactly `sim_time` do not happen. This is how SimPy works. To
|
|
33
|
+
include them, run to a slightly later time, such as `sim_time + 1`.
|
|
34
|
+
|
|
35
|
+
## 0.2.1 (2026-10-12)
|
|
36
|
+
|
|
37
|
+
Results change for networks with disruptions. Networks without disruptions,
|
|
38
|
+
such as the quickstart example, give the same results as before.
|
|
39
|
+
|
|
40
|
+
* **[FIX]** A site whose replenishment order was blocked by a disruption now
|
|
41
|
+
orders as soon as its supplier, or the link to it, recovers. Before, a
|
|
42
|
+
replenishment policy without a review period could stop ordering for good. If
|
|
43
|
+
the site had no units left, nothing woke the policy again, even after the
|
|
44
|
+
supplier recovered.
|
|
45
|
+
* **[FIX]** Supplier-selection policies now skip a supplier whose site is
|
|
46
|
+
disrupted, not only one whose link is disrupted. Before, a site with two
|
|
47
|
+
suppliers could send its order to the disrupted one and lose it, while the
|
|
48
|
+
other supplier was working.
|
|
49
|
+
* **[CHANGE]** `place_order` now checks that some supplier can take the order
|
|
50
|
+
before choosing one. If none can, no order is placed. New methods
|
|
51
|
+
`Link.can_take_order`, `Node.can_place_order`, `Node.wake_replenishment` and
|
|
52
|
+
`Node.add_buyer_link`, and a new list `Node.buyers` of the links to a node's
|
|
53
|
+
buyers.
|
|
54
|
+
* **[FIX]** The performance table (`get_node_wise_performance`,
|
|
55
|
+
`format_node_wise_performance`, `print_node_wise_performance`) now shows
|
|
56
|
+
every metric that any node has. Before, it showed only the metrics of the
|
|
57
|
+
first node in the list, so a raw-material supplier's mining figures were left
|
|
58
|
+
out when another node came first. Two nodes with the same name now each get
|
|
59
|
+
a column; the second is told apart by its ID.
|
|
60
|
+
* **[FIX]** `disable_logging` and `set_log_file` now close the log file they
|
|
61
|
+
stop writing to. Before, the file stayed open until the program ended, which
|
|
62
|
+
caused a `ResourceWarning` and, on Windows, kept the file locked.
|
|
63
|
+
|
|
64
|
+
## 0.2.0 (2026-10-11)
|
|
65
|
+
|
|
66
|
+
Most of these fixes come from
|
|
67
|
+
[issue #1](https://github.com/SupplyChainSimulation/SupplyNetPy/issues/1), reported by
|
|
68
|
+
[@ashwingaikwadiby](https://github.com/ashwingaikwadiby). Results
|
|
69
|
+
change for networks with manufacturers, raw-material suppliers with finite
|
|
70
|
+
inventory, perishable goods, customers who wait, or replenishment orders that
|
|
71
|
+
have to wait at a supplier. Simple networks, such as the quickstart example,
|
|
72
|
+
give the same results as before.
|
|
73
|
+
|
|
74
|
+
* **[FIX]** A replenishment order that has to wait at its supplier is now a
|
|
75
|
+
backorder there only while it waits, and is no longer counted twice in the
|
|
76
|
+
supplier's inventory position. Before, the supplier ordered too much, kept
|
|
77
|
+
the extra units for the rest of the run, and its backorders were never
|
|
78
|
+
cleared.
|
|
79
|
+
* **[FIX]** A manufacturer now keeps making production batches until every
|
|
80
|
+
planned unit is made, orders raw material for every planned unit, and carries
|
|
81
|
+
on when units leave its full inventory. Before, it could stop producing for
|
|
82
|
+
good, with raw material left unused or with orders waiting forever.
|
|
83
|
+
* **[FIX]** A raw-material supplier with finite inventory starts mining again as
|
|
84
|
+
soon as its inventory drops. Before, once its inventory had been full it never
|
|
85
|
+
mined again, and manufacturers buying from it waited forever.
|
|
86
|
+
* **[FIX]** Perishable goods. An order now gets the batches that are really in
|
|
87
|
+
inventory when it is filled, oldest first. Expired units are thrown away at
|
|
88
|
+
once and are no longer shipped to an order that was waiting, and destroyed
|
|
89
|
+
units are removed at once too. Before, an order that had to wait could lose
|
|
90
|
+
units, and expired units could be shipped.
|
|
91
|
+
* **[FIX]** Customers who wait (`tolerance` above 0) now leave as soon as their
|
|
92
|
+
tolerance runs out, and their backorders are cleared when they leave. All
|
|
93
|
+
waiting customers are woken when units arrive, two waiting customers can no
|
|
94
|
+
longer take the same units, and a partial delivery of 0 units no longer
|
|
95
|
+
crashes.
|
|
96
|
+
* **[FIX]** A waiting customer's shortage is recorded once, when the order
|
|
97
|
+
arrives. Before, it was recorded again at every check, so shortage figures
|
|
98
|
+
were too high.
|
|
99
|
+
* **[FIX]** A supplier whose site is disrupted is no longer counted as short for
|
|
100
|
+
orders it never receives.
|
|
101
|
+
* **[FIX]** `Inventory.destroy()` now wakes a raw-material supplier (to mine
|
|
102
|
+
again) and a manufacturer (to make more). It still does not wake a
|
|
103
|
+
replenishment policy.
|
|
104
|
+
* **[NEW]** `Inventory.get()` takes a `site_order` argument, and
|
|
105
|
+
`Inventory.waiting_orders()` and `Inventory.waiting_site_orders()` report the
|
|
106
|
+
units asked for by orders still waiting at an inventory.
|
|
107
|
+
* **[DOCS]** The (R, Q) policy (`RQReplenishment`) never used `safety_stock`, so
|
|
108
|
+
passing it had no effect. The documentation no longer says that it does.
|
|
109
|
+
* **[DOCS]** A new Glossary page defines one word for each idea, and the
|
|
110
|
+
documentation, docstrings and code comments now use those words. The API
|
|
111
|
+
reference now lists every result of `simulate_sc_net`, and no longer shows
|
|
112
|
+
raw markup from the docstrings.
|
|
113
|
+
* **[DOCS]** Several documentation pages described their examples wrongly, and
|
|
114
|
+
are corrected. The complex network example now has the links shown in its
|
|
115
|
+
picture, lead times that differ as intended, and a fixed seed.
|
|
116
|
+
|
|
117
|
+
## 0.1.12 (2026-05-31)
|
|
118
|
+
|
|
119
|
+
- **[FIX]** Replenishment orders that were bigger than the free space on the
|
|
120
|
+
shelf no longer throw away the extra units. Previously, a node with waiting
|
|
121
|
+
customers could order enough to refill the shelf and also cover them, and any
|
|
122
|
+
units that did not fit were silently lost even though they had been paid for.
|
|
123
|
+
In some cases this also pushed the node's inventory position below zero.
|
|
124
|
+
- **[CHANGE]** When arriving units are dropped because the shelf is full, a
|
|
125
|
+
warning is now logged suggesting that the node's capacity may be too small.
|
|
126
|
+
- **[CHANGE]** A customer order that is bigger than the node's whole shelf,
|
|
127
|
+
with no partial delivery accepted, is now recorded as lost demand right away.
|
|
128
|
+
Before, it triggered a replenishment order that could never be served.
|
|
129
|
+
- **[DOCS]** Code comments and docstrings were rewritten in plainer language.
|
|
130
|
+
|
|
131
|
+
## 0.1.11 (2026-05-09)
|
|
132
|
+
|
|
133
|
+
- **[FIX]** Random node and link disruptions set with `failure_p` no longer
|
|
134
|
+
happen almost immediately at time 0. The failure chance is now applied once
|
|
135
|
+
per time unit, as documented.
|
|
136
|
+
|
|
137
|
+
## 0.1.10 (2026-05-06)
|
|
138
|
+
|
|
139
|
+
- **[NEW]** `Inventory.destroy()` removes stock (all of it, a fraction, or a
|
|
140
|
+
custom amount) when a node is disrupted. Nodes accept a matching
|
|
141
|
+
`disruption_impact` option. Destroyed units and their value appear in the
|
|
142
|
+
node's statistics and count towards its cost.
|
|
143
|
+
- **[FIX]** Expiry of perishable stock (`Inventory.remove_expired`) now works
|
|
144
|
+
correctly.
|
|
145
|
+
- **[DOCS]** Documentation wording was simplified throughout.
|
|
146
|
+
|
|
147
|
+
## 0.1.9 (2026-04-28)
|
|
148
|
+
|
|
149
|
+
- **[NEW]** `Network` wrapper around the supply-chain dictionary, with named
|
|
150
|
+
access to nodes and results. The dictionary-based way of working still works.
|
|
151
|
+
- **[NEW]** `NodeType`, a list of the valid node types. Node types can be given
|
|
152
|
+
either as text (`"retailer"`) or as a `NodeType` member.
|
|
153
|
+
- **[NEW]** `log_window=(start, stop)` option on `simulate_sc_net` to log only
|
|
154
|
+
part of a run.
|
|
155
|
+
- **[BREAKING]** Python 3.9 or newer is now required. `networkx` and
|
|
156
|
+
`matplotlib` are now declared as dependencies.
|
|
157
|
+
- **[CHANGE]** Logging is now opt-in. Creating nodes no longer opens (or
|
|
158
|
+
overwrites) the trace file. `simulate_sc_net(logging=True)` turns it on for
|
|
159
|
+
you.
|
|
160
|
+
- **[CHANGE]** The shortage statistic is now called `shortage`. The old name,
|
|
161
|
+
`orders_shortage`, still works as an alias.
|
|
162
|
+
- **[CHANGE]** Expiry of perishable stock is now driven by the batches' expiry
|
|
163
|
+
times instead of repeated checks, which makes large simulations faster.
|
|
164
|
+
- **[CHANGE]** The remaining items from the code review (see `REVIEW.md`) were
|
|
165
|
+
resolved, and the test suite was expanded.
|
|
166
|
+
|
|
167
|
+
## 0.1.8 (2026-04-24)
|
|
168
|
+
|
|
169
|
+
- **[NEW]** `set_seed()` makes random disruptions repeatable.
|
|
170
|
+
- **[BREAKING]** `SupplyNetPy.Components` now exposes a fixed, documented list
|
|
171
|
+
of names. Modules that used to be reachable by accident (such as
|
|
172
|
+
`scm.simpy`) are no longer available through it.
|
|
173
|
+
- **[FIX]** A full code review fixed a set of correctness problems, including:
|
|
174
|
+
- Expired perishable stock was not always removed correctly, so holding
|
|
175
|
+
cost could keep being charged on stock that no longer existed.
|
|
176
|
+
- A manufacturer could place duplicate orders for the same raw materials.
|
|
177
|
+
- A customer's "demand fulfilled" figure was inflated when an order arrived
|
|
178
|
+
in several partial shipments.
|
|
179
|
+
- Cost totals could pick up unrelated values whose names happened to
|
|
180
|
+
contain the word "cost".
|
|
181
|
+
- Disrupted links were still used for new shipments, and
|
|
182
|
+
supplier-selection policies did not take link status into account.
|
|
183
|
+
- Adding stock to a full shelf could leave the inventory records out of
|
|
184
|
+
step.
|
|
185
|
+
- **[CHANGE]** Misspelled node parameters (for example `shelf_live`) are now
|
|
186
|
+
reported as an error instead of being silently ignored.
|
|
187
|
+
- **[CHANGE]** A much larger test suite was added.
|
|
188
|
+
|
|
189
|
+
## 0.1.7 (2026-03-13)
|
|
190
|
+
|
|
191
|
+
- **[NEW]** `record_inv_levels` option on `Inventory` to switch recording of
|
|
192
|
+
inventory levels over time on or off (off by default).
|
|
193
|
+
- **[FIX]** Adding stock to an inventory that is already full is now handled
|
|
194
|
+
safely.
|
|
195
|
+
|
|
196
|
+
## 0.1.6 (2025-11-19)
|
|
197
|
+
|
|
198
|
+
- **[FIX]** When adding stock would go over capacity, only the amount that fits
|
|
199
|
+
is now added, instead of failing.
|
|
200
|
+
|
|
201
|
+
## 0.1.5 (2025-11-08)
|
|
202
|
+
|
|
203
|
+
- **[NEW]** `name` is now included in node statistics.
|
|
204
|
+
- **[CHANGE]** The minimum required Python version was relaxed.
|
|
205
|
+
|
|
206
|
+
## 0.1.2 to 0.1.4 (2025-09-15)
|
|
207
|
+
|
|
208
|
+
- **[FIX]** The wheel build target was added so the package builds correctly.
|
|
209
|
+
- **[CHANGE]** Package metadata (classifiers and author details) was corrected.
|
|
210
|
+
|
|
211
|
+
## 0.1.1 (2025-09-02)
|
|
212
|
+
|
|
213
|
+
- **[CHANGE]** Parameters that expect a "callable" (lead times, arrival
|
|
214
|
+
intervals, and so on) now also accept a plain number such as `2` or `1.5`.
|
|
215
|
+
|
|
216
|
+
## 0.1.0 (2025-08-21)
|
|
217
|
+
|
|
218
|
+
First public release on PyPI. It included:
|
|
219
|
+
|
|
220
|
+
- Supply-chain building blocks: suppliers, manufacturers, inventory nodes
|
|
221
|
+
(distributors and retailers), demand nodes, and links.
|
|
222
|
+
- Replenishment policies: (s, S), (R, Q), and periodic review (with or without
|
|
223
|
+
safety stock).
|
|
224
|
+
- Supplier-selection policies: first, available, cheapest, and fastest.
|
|
225
|
+
- Perishable inventory, disruptions of nodes and links, and backorders with
|
|
226
|
+
partial fulfilment.
|
|
227
|
+
- Node-level and network-level results (cost, revenue, profit, shortage), plus
|
|
228
|
+
`create_sc_net` and `simulate_sc_net`.
|
|
229
|
+
- A documentation site, worked examples, and a unit-test suite.
|
|
230
|
+
|
|
231
|
+
## Before the first release
|
|
232
|
+
|
|
233
|
+
Development began in May 2024; the repository was moved from its earlier home
|
|
234
|
+
in July 2024. Internal versions 0.0.11 to 0.0.69 were used during development
|
|
235
|
+
and were never published on PyPI.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: supplynetpy
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Python Library for Modeling and Discrete Event Simulation of Supply Chains
|
|
5
5
|
Project-URL: Homepage, https://supplychainsimulation.github.io/SupplyNetPy/
|
|
6
6
|
Author-email: Tushar Lone <tusharlone28@gmail.com>, Neha Karanjkar <nehak@iitgoa.ac.in>, Lekshmi P <Lekshmi20231101@iitgoa.ac.in>
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "supplynetpy"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.2"
|
|
8
8
|
dependencies = [
|
|
9
9
|
"simpy",
|
|
10
10
|
"networkx",
|
|
@@ -42,5 +42,17 @@ classifiers = [
|
|
|
42
42
|
[tool.hatch.build.targets.wheel]
|
|
43
43
|
packages = ["src/SupplyNetPy"]
|
|
44
44
|
|
|
45
|
+
# The source archive carries the library, its tests and the top-level files.
|
|
46
|
+
# The docs, examples, case-study data and validation files stay in the
|
|
47
|
+
# repository only; they are large and are not needed to build or test the package.
|
|
48
|
+
[tool.hatch.build.targets.sdist]
|
|
49
|
+
include = [
|
|
50
|
+
"/src/SupplyNetPy",
|
|
51
|
+
"/tests",
|
|
52
|
+
"/README.md",
|
|
53
|
+
"/LICENSE",
|
|
54
|
+
"/CHANGELOG.md",
|
|
55
|
+
]
|
|
56
|
+
|
|
45
57
|
[project.urls]
|
|
46
58
|
Homepage = "https://supplychainsimulation.github.io/SupplyNetPy/"
|