most-queue 2.6__tar.gz → 2.8__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.
Files changed (707) hide show
  1. most_queue-2.8/.claude/skills/lit-search/SKILL.md +39 -0
  2. most_queue-2.8/.claude/skills/lit-search/lit_search.py +144 -0
  3. most_queue-2.8/.cursor/rules/pytest-quality.mdc +45 -0
  4. most_queue-2.8/.cursor/rules/python-quality.mdc +98 -0
  5. most_queue-2.8/.cursor/skills/add-theory-calculator/SKILL.md +130 -0
  6. most_queue-2.8/.cursor/skills/theory-vs-sim-test/SKILL.md +122 -0
  7. most_queue-2.8/.cursorrules +3 -0
  8. most_queue-2.8/.gitattributes +6 -0
  9. most_queue-2.8/.github/workflows/tests.yml +34 -0
  10. {most_queue-2.6 → most_queue-2.8}/.gitignore +30 -1
  11. {most_queue-2.6 → most_queue-2.8}/.pre-commit-config.yaml +1 -0
  12. most_queue-2.8/CITATION.cff +37 -0
  13. most_queue-2.8/PKG-INFO +185 -0
  14. most_queue-2.8/README.md +144 -0
  15. most_queue-2.8/README.ru.md +153 -0
  16. most_queue-2.8/assets/most-queue-logo.png +0 -0
  17. most_queue-2.8/assets/most-queue-nano.png +0 -0
  18. most_queue-2.8/assets/most-queue-nano1.jpeg +0 -0
  19. most_queue-2.8/assets/most-queue-nano2.jpeg +0 -0
  20. most_queue-2.8/docs/DOD.md +50 -0
  21. most_queue-2.8/docs/INFRASTRUCTURE.md +56 -0
  22. most_queue-2.8/docs/PROJECT.md +92 -0
  23. most_queue-2.8/docs/README.md +120 -0
  24. most_queue-2.6/docs/README.md → most_queue-2.8/docs/README.ru.md +24 -13
  25. most_queue-2.8/docs/calculation.md +541 -0
  26. most_queue-2.6/docs/calculation.md → most_queue-2.8/docs/calculation.ru.md +191 -14
  27. most_queue-2.8/docs/concepts.md +335 -0
  28. most_queue-2.6/docs/concepts.md → most_queue-2.8/docs/concepts.ru.md +22 -4
  29. most_queue-2.8/docs/custom_simulators.md +431 -0
  30. most_queue-2.8/docs/custom_simulators.ru.md +432 -0
  31. most_queue-2.8/docs/distributions.md +430 -0
  32. most_queue-2.6/docs/distributions.md → most_queue-2.8/docs/distributions.ru.md +5 -3
  33. most_queue-2.8/docs/epics/EPIC-001-queueing-models-gap-analysis.md +142 -0
  34. most_queue-2.8/docs/epics/EPIC-002-wave1-exact-models.md +86 -0
  35. most_queue-2.8/docs/epics/EPIC-003-qbd-map-ph.md +57 -0
  36. most_queue-2.8/docs/epics/EPIC-004-retrial-erlang-a.md +48 -0
  37. most_queue-2.8/docs/epics/EPIC-005-illustrated-catalog.md +45 -0
  38. most_queue-2.8/docs/epics/EPIC-006-english-docs.md +41 -0
  39. most_queue-2.8/docs/epics/README.md +48 -0
  40. most_queue-2.8/docs/examples.md +406 -0
  41. most_queue-2.6/docs/examples.md → most_queue-2.8/docs/examples.ru.md +5 -3
  42. most_queue-2.8/docs/figures/batch.png +0 -0
  43. most_queue-2.8/docs/figures/disciplines_timeline.png +0 -0
  44. most_queue-2.8/docs/figures/engset.png +0 -0
  45. most_queue-2.8/docs/figures/fifo_mmn.png +0 -0
  46. most_queue-2.8/docs/figures/fork_join.png +0 -0
  47. most_queue-2.8/docs/figures/generate_figures.py +814 -0
  48. most_queue-2.8/docs/figures/impatience.png +0 -0
  49. most_queue-2.8/docs/figures/lcfs_pr.png +0 -0
  50. most_queue-2.8/docs/figures/loss.png +0 -0
  51. most_queue-2.8/docs/figures/m_g_inf.png +0 -0
  52. most_queue-2.8/docs/figures/map_arrivals.png +0 -0
  53. most_queue-2.8/docs/figures/n_policy.png +0 -0
  54. most_queue-2.8/docs/figures/negative.png +0 -0
  55. most_queue-2.8/docs/figures/priority.png +0 -0
  56. most_queue-2.8/docs/figures/ps.png +0 -0
  57. most_queue-2.8/docs/figures/retrial.png +0 -0
  58. most_queue-2.8/docs/figures/slowdown.png +0 -0
  59. most_queue-2.8/docs/figures/slowdown_en.png +0 -0
  60. most_queue-2.8/docs/figures/unreliable.png +0 -0
  61. most_queue-2.8/docs/figures/vacations.png +0 -0
  62. most_queue-2.8/docs/getting_started.md +183 -0
  63. most_queue-2.6/docs/getting_started.md → most_queue-2.8/docs/getting_started.ru.md +6 -5
  64. most_queue-2.8/docs/models.md +1046 -0
  65. most_queue-2.8/docs/models.ru.md +996 -0
  66. most_queue-2.8/docs/models_gap_analysis.md +151 -0
  67. most_queue-2.8/docs/negative_disasters_time_characteristics.md +146 -0
  68. most_queue-2.8/docs/negative_disasters_time_characteristics.ru.md +147 -0
  69. most_queue-2.8/docs/negative_networks_calculation.md +301 -0
  70. most_queue-2.8/docs/negative_networks_calculation.ru.md +302 -0
  71. most_queue-2.8/docs/negative_rcs_time_characteristics.md +102 -0
  72. most_queue-2.8/docs/negative_rcs_time_characteristics.ru.md +103 -0
  73. most_queue-2.8/docs/networks.md +648 -0
  74. most_queue-2.6/docs/networks.md → most_queue-2.8/docs/networks.ru.md +279 -3
  75. most_queue-2.8/docs/priorities.md +331 -0
  76. most_queue-2.6/docs/priorities.md → most_queue-2.8/docs/priorities.ru.md +5 -3
  77. most_queue-2.8/docs/roadmaps/qbd_map_ph_roadmap.md +67 -0
  78. most_queue-2.8/docs/roadmaps/retrial_erlang_a_roadmap.md +62 -0
  79. most_queue-2.8/docs/roadmaps/srpt_spjf_roadmap.md +269 -0
  80. most_queue-2.8/docs/roadmaps/wave1_exact_models_roadmap.md +92 -0
  81. most_queue-2.8/docs/simulation.md +428 -0
  82. most_queue-2.6/docs/simulation.md → most_queue-2.8/docs/simulation.ru.md +54 -5
  83. most_queue-2.8/docs/srpt_spjf_methods.md +165 -0
  84. most_queue-2.8/docs/srpt_spjf_methods.ru.md +165 -0
  85. most_queue-2.8/docs/tesaurus.md +287 -0
  86. most_queue-2.6/docs/tesaurus.md → most_queue-2.8/docs/tesaurus.ru.md +3 -1
  87. most_queue-2.8/examples/custom_network_example.py +161 -0
  88. most_queue-2.8/examples/custom_simulator_example.py +143 -0
  89. most_queue-2.8/examples/srpt_table.py +153 -0
  90. {most_queue-2.6 → most_queue-2.8}/most_queue/__init__.py +1 -1
  91. {most_queue-2.6 → most_queue-2.8}/most_queue/io/plots.py +41 -5
  92. {most_queue-2.6 → most_queue-2.8}/most_queue/misc/calc_v_pls.py +1 -1
  93. {most_queue-2.6 → most_queue-2.8}/most_queue/random/distributions.py +62 -0
  94. most_queue-2.8/most_queue/random/map_ph.py +282 -0
  95. {most_queue-2.6 → most_queue-2.8}/most_queue/random/utils/create.py +9 -0
  96. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/__init__.py +2 -1
  97. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/base.py +194 -45
  98. most_queue-2.8/most_queue/sim/base_core.py +87 -0
  99. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/batch.py +99 -99
  100. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/finite_source.py +246 -241
  101. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/flow_sum.py +240 -240
  102. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/fork_join.py +264 -266
  103. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/fork_join_delta.py +7 -0
  104. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/impatient.py +177 -184
  105. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/negative.py +248 -75
  106. most_queue-2.8/most_queue/sim/networks/base_network_sim.py +311 -0
  107. most_queue-2.8/most_queue/sim/networks/negative_network.py +622 -0
  108. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/networks/network.py +28 -27
  109. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/networks/priority_network.py +33 -35
  110. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/priority.py +71 -58
  111. most_queue-2.8/most_queue/sim/retrial.py +79 -0
  112. most_queue-2.8/most_queue/sim/single_server_disciplines.py +225 -0
  113. most_queue-2.8/most_queue/sim/size_based.py +248 -0
  114. most_queue-2.8/most_queue/sim/unreliable.py +95 -0
  115. most_queue-2.8/most_queue/sim/utils/events.py +123 -0
  116. most_queue-2.8/most_queue/sim/utils/predictor.py +44 -0
  117. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/utils/qs_queue.py +12 -0
  118. most_queue-2.8/most_queue/sim/utils/queue_priority_size.py +112 -0
  119. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/utils/servers.py +45 -1
  120. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/utils/stats_update.py +2 -2
  121. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/utils/tasks.py +21 -0
  122. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/vacations.py +364 -339
  123. {most_queue-2.6 → most_queue-2.8}/most_queue/structs.py +32 -1
  124. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/__init__.py +11 -7
  125. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/__init__.py +4 -0
  126. most_queue-2.8/most_queue/theory/fifo/erlang.py +249 -0
  127. most_queue-2.8/most_queue/theory/fifo/gi_g_approx.py +223 -0
  128. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/gi_m_n.py +257 -258
  129. most_queue-2.8/most_queue/theory/fifo/gmc_takahasi.py +331 -0
  130. most_queue-2.8/most_queue/theory/fifo/hkhk_takahasi.py +475 -0
  131. most_queue-2.8/most_queue/theory/fifo/m_g_inf.py +114 -0
  132. most_queue-2.8/most_queue/theory/fifo/mg1_lcfs_pr.py +106 -0
  133. most_queue-2.8/most_queue/theory/fifo/mg1_ps.py +119 -0
  134. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/mgn_takahasi.py +250 -61
  135. most_queue-2.8/most_queue/theory/fifo/takahasi_base.py +211 -0
  136. most_queue-2.8/most_queue/theory/impatience/mmn.py +147 -0
  137. most_queue-2.8/most_queue/theory/matrix/__init__.py +7 -0
  138. most_queue-2.8/most_queue/theory/matrix/map_ph1.py +190 -0
  139. most_queue-2.8/most_queue/theory/matrix/qbd.py +147 -0
  140. most_queue-2.8/most_queue/theory/negative/mg1_disasters.py +228 -0
  141. most_queue-2.8/most_queue/theory/negative/mgn_disaster.py +690 -0
  142. most_queue-2.8/most_queue/theory/negative/mgn_rcs.py +755 -0
  143. most_queue-2.8/most_queue/theory/networks/__init__.py +8 -0
  144. most_queue-2.8/most_queue/theory/networks/negative_network.py +247 -0
  145. most_queue-2.8/most_queue/theory/retrial/__init__.py +8 -0
  146. most_queue-2.8/most_queue/theory/retrial/mg1.py +102 -0
  147. most_queue-2.8/most_queue/theory/retrial/mm1.py +160 -0
  148. most_queue-2.8/most_queue/theory/srpt/__init__.py +22 -0
  149. most_queue-2.8/most_queue/theory/srpt/_base.py +136 -0
  150. most_queue-2.8/most_queue/theory/srpt/mg1_fb.py +68 -0
  151. most_queue-2.8/most_queue/theory/srpt/mg1_psjf.py +53 -0
  152. most_queue-2.8/most_queue/theory/srpt/mg1_sjf.py +46 -0
  153. most_queue-2.8/most_queue/theory/srpt/mg1_spjf.py +96 -0
  154. most_queue-2.8/most_queue/theory/srpt/mg1_srpt.py +61 -0
  155. most_queue-2.8/most_queue/theory/srpt/utils/__init__.py +12 -0
  156. most_queue-2.8/most_queue/theory/srpt/utils/load_below.py +123 -0
  157. most_queue-2.8/most_queue/theory/srpt/utils/predictor.py +153 -0
  158. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/busy_periods.py +1 -2
  159. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/conditional.py +1 -1
  160. most_queue-2.8/most_queue/theory/utils/derivative.py +93 -0
  161. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/passage_time.py +4 -2
  162. most_queue-2.8/most_queue/theory/utils/restarts.py +241 -0
  163. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/timing.py +2 -2
  164. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/vacations/m_h2_h2warm.py +1 -1
  165. most_queue-2.8/most_queue/theory/vacations/mg1_unreliable.py +159 -0
  166. most_queue-2.8/most_queue/theory/vacations/mg1_vacations.py +228 -0
  167. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/vacations/mg1_warm_calc.py +1 -1
  168. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/vacations/mgn_with_h2_delay_cold_warm.py +1 -1
  169. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/vacations/mmn_with_h2_cold_and_h2_warmup.py +1 -1
  170. {most_queue-2.6 → most_queue-2.8}/pyproject.toml +77 -69
  171. {most_queue-2.6 → most_queue-2.8}/tests/default_params.yaml +9 -0
  172. most_queue-2.8/tests/mgn_disaster_w_v_vs_l_neg.png +0 -0
  173. most_queue-2.8/tests/test_erlang.py +136 -0
  174. most_queue-2.8/tests/test_gi_g_approx.py +145 -0
  175. most_queue-2.8/tests/test_h2_h2_n_calc.py +159 -0
  176. most_queue-2.8/tests/test_h2_m_n_calc.py +140 -0
  177. most_queue-2.8/tests/test_m_g_inf.py +73 -0
  178. most_queue-2.8/tests/test_map_ph1.py +161 -0
  179. {most_queue-2.6 → most_queue-2.8}/tests/test_mg1_calc.py +3 -2
  180. {most_queue-2.6 → most_queue-2.8}/tests/test_mg1_disaster.py +1 -2
  181. most_queue-2.8/tests/test_mg1_fb.py +98 -0
  182. most_queue-2.8/tests/test_mg1_predictions_table.py +180 -0
  183. most_queue-2.8/tests/test_mg1_ps_lcfs.py +100 -0
  184. most_queue-2.8/tests/test_mg1_psjf.py +80 -0
  185. most_queue-2.8/tests/test_mg1_sjf.py +79 -0
  186. most_queue-2.8/tests/test_mg1_spjf.py +99 -0
  187. most_queue-2.8/tests/test_mg1_srpt.py +80 -0
  188. most_queue-2.8/tests/test_mg1_unreliable.py +109 -0
  189. most_queue-2.8/tests/test_mg1_vacations.py +152 -0
  190. most_queue-2.8/tests/test_mgn_disaster.py +309 -0
  191. most_queue-2.8/tests/test_mgn_rcs.py +255 -0
  192. most_queue-2.8/tests/test_negative_network.py +504 -0
  193. most_queue-2.8/tests/test_network_negative_calc.py +183 -0
  194. most_queue-2.8/tests/test_retrial_erlang_a.py +199 -0
  195. most_queue-2.8/tests/test_size_based_disciplines.py +89 -0
  196. most_queue-2.8/tests/test_size_based_fcfs_regression.py +56 -0
  197. most_queue-2.8/tests/test_srpt_vs_fcfs.py +104 -0
  198. most_queue-2.8/tests/test_tt_vs_sim_cv105.py +132 -0
  199. most_queue-2.8/tests/test_tt_vs_sim_gamma_cvl1.py +126 -0
  200. most_queue-2.8/tests/units/test_map_ph.py +101 -0
  201. most_queue-2.8/tests/units/test_queue_priority_size.py +89 -0
  202. most_queue-2.8/tests/units/test_size_based_rankers.py +86 -0
  203. {most_queue-2.6 → most_queue-2.8}/tests/units/test_weibull.py +1 -6
  204. most_queue-2.8/tutorials/disciplines_comparison.ipynb +471 -0
  205. {most_queue-2.6 → most_queue-2.8}/tutorials/m_h2_h2warm.ipynb +1 -1
  206. most_queue-2.8/tutorials/map_ph_correlation.ipynb +2437 -0
  207. {most_queue-2.6 → most_queue-2.8}/tutorials/mgn_takahasi_takami.ipynb +1 -1
  208. {most_queue-2.6 → most_queue-2.8}/tutorials/network_with_priorities.ipynb +1 -1
  209. {most_queue-2.6 → most_queue-2.8}/tutorials/priority_queue.ipynb +1 -1
  210. {most_queue-2.6 → most_queue-2.8}/tutorials/queue_sim.ipynb +1 -1
  211. most_queue-2.8/tutorials/srpt_basics.ipynb +407 -0
  212. most_queue-2.8/works/articles/habr_article_1.md +258 -0
  213. most_queue-2.8/works/articles/habr_article_1_tables.html +111 -0
  214. most_queue-2.8/works/articles/pics/1.png +0 -0
  215. most_queue-2.8/works/articles/pics/2.png +0 -0
  216. most_queue-2.8/works/articles/pics/3.png +0 -0
  217. most_queue-2.8/works/articles/pics/4.png +0 -0
  218. most_queue-2.8/works/articles/pics/5.png +0 -0
  219. most_queue-2.8/works/negative_queues/README_latex.md +45 -0
  220. most_queue-2.8/works/negative_queues/README_package.txt +32 -0
  221. most_queue-2.8/works/negative_queues/base_parameters.yaml +31 -0
  222. most_queue-2.8/works/negative_queues/citations.bib +175 -0
  223. most_queue-2.8/works/negative_queues/export_fixed_service_tables.py +181 -0
  224. most_queue-2.8/works/negative_queues/export_tables_from_results.py +248 -0
  225. most_queue-2.8/works/negative_queues/generate_transition_diagrams.py +1015 -0
  226. most_queue-2.8/works/negative_queues/generated_tables_fixed.tex +24 -0
  227. most_queue-2.8/works/negative_queues/most-queue.code-workspace +11 -0
  228. most_queue-2.8/works/negative_queues/negative_queues_figures/channels/results.json +1 -0
  229. most_queue-2.8/works/negative_queues/negative_queues_figures/channels/v_ave.png +0 -0
  230. most_queue-2.8/works/negative_queues/negative_queues_figures/channels/v_ave_err.png +0 -0
  231. most_queue-2.8/works/negative_queues/negative_queues_figures/channels/v_broken_ave.png +0 -0
  232. most_queue-2.8/works/negative_queues/negative_queues_figures/channels/v_broken_ave_err.png +0 -0
  233. most_queue-2.8/works/negative_queues/negative_queues_figures/channels/v_served_ave.png +0 -0
  234. most_queue-2.8/works/negative_queues/negative_queues_figures/channels/v_served_ave_err.png +0 -0
  235. most_queue-2.8/works/negative_queues/negative_queues_figures/channels/w_ave.png +0 -0
  236. most_queue-2.8/works/negative_queues/negative_queues_figures/channels/w_ave_err.png +0 -0
  237. most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/results.json +1 -0
  238. most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/v_ave.png +0 -0
  239. most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/v_ave_err.png +0 -0
  240. most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/v_broken_ave.png +0 -0
  241. most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/v_broken_ave_err.png +0 -0
  242. most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/v_served_ave.png +0 -0
  243. most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/v_served_ave_err.png +0 -0
  244. most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/w_ave.png +0 -0
  245. most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/w_ave_err.png +0 -0
  246. most_queue-2.8/works/negative_queues/negative_queues_figures/combined/v1_n_cv1_2_oldstyle.png +0 -0
  247. most_queue-2.8/works/negative_queues/negative_queues_figures/combined/v1_n_fixed_cv1_2.png +0 -0
  248. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/results.json +1 -0
  249. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/v_ave.png +0 -0
  250. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/v_ave_err.png +0 -0
  251. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/v_broken_ave.png +0 -0
  252. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/v_broken_ave_err.png +0 -0
  253. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/v_served_ave.png +0 -0
  254. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/v_served_ave_err.png +0 -0
  255. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/w_ave.png +0 -0
  256. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/w_ave_err.png +0 -0
  257. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels/results.json +1 -0
  258. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels/v_ave.png +0 -0
  259. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels/v_ave_err.png +0 -0
  260. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv0_8/results.json +1 -0
  261. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv0_8/v_ave.png +0 -0
  262. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv0_8/v_ave_err.png +0 -0
  263. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv1_2/results.json +1 -0
  264. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv1_2/v_ave.png +0 -0
  265. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv1_2/v_ave_err.png +0 -0
  266. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv_compare/v_ave.png +0 -0
  267. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/coefs/results.json +1 -0
  268. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/coefs/v_ave.png +0 -0
  269. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/coefs/v_ave_err.png +0 -0
  270. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/q.png +0 -0
  271. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/results.json +1 -0
  272. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/sigma_v.png +0 -0
  273. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/sigma_w.png +0 -0
  274. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/v_ave.png +0 -0
  275. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/v_ave_err.png +0 -0
  276. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/w_ave.png +0 -0
  277. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/w_ave_err.png +0 -0
  278. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/q.png +0 -0
  279. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/results.json +1 -0
  280. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/sigma_v.png +0 -0
  281. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/sigma_w.png +0 -0
  282. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/v_ave.png +0 -0
  283. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/v_ave_err.png +0 -0
  284. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/w_ave.png +0 -0
  285. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/w_ave_err.png +0 -0
  286. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/q.png +0 -0
  287. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/results.json +1 -0
  288. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/sigma_v.png +0 -0
  289. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/sigma_w.png +0 -0
  290. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/v_ave.png +0 -0
  291. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/v_ave_err.png +0 -0
  292. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/w_ave.png +0 -0
  293. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/w_ave_err.png +0 -0
  294. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv_compare/q.png +0 -0
  295. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv_compare/v_ave.png +0 -0
  296. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/utilization/results.json +1 -0
  297. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/utilization/v_ave.png +0 -0
  298. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/utilization/v_ave_err.png +0 -0
  299. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/results.json +1 -0
  300. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/v_ave.png +0 -0
  301. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/v_ave_err.png +0 -0
  302. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/v_broken_ave.png +0 -0
  303. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/v_broken_ave_err.png +0 -0
  304. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/v_served_ave.png +0 -0
  305. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/v_served_ave_err.png +0 -0
  306. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/w_ave.png +0 -0
  307. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/w_ave_err.png +0 -0
  308. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/diagrams/disaster_arrivals.png +0 -0
  309. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/diagrams/disaster_arrivals_/321/201/321/203/320/277/320/265/321/200.png +0 -0
  310. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/diagrams/disaster_negative_arrivals_pretty.png +0 -0
  311. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/diagrams/disaster_negative_arrivals_pretty.svg +1137 -0
  312. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/diagrams/disaster_service.png +0 -0
  313. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/diagrams/disaster_transitions.png +0 -0
  314. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels/results.json +1 -0
  315. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels/v_ave.png +0 -0
  316. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels/v_ave_err.png +0 -0
  317. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv0_8/results.json +1 -0
  318. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv0_8/v_ave.png +0 -0
  319. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv0_8/v_ave_err.png +0 -0
  320. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv1_2/results.json +1 -0
  321. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv1_2/v_ave.png +0 -0
  322. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv1_2/v_ave_err.png +0 -0
  323. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv_compare/v_ave.png +0 -0
  324. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/coefs/results.json +1 -0
  325. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/coefs/v_ave.png +0 -0
  326. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/coefs/v_ave_err.png +0 -0
  327. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/q.png +0 -0
  328. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/results.json +1 -0
  329. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/sigma_v.png +0 -0
  330. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/sigma_w.png +0 -0
  331. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/v_ave.png +0 -0
  332. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/v_ave_err.png +0 -0
  333. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/w_ave.png +0 -0
  334. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/w_ave_err.png +0 -0
  335. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/q.png +0 -0
  336. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/results.json +1 -0
  337. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/sigma_v.png +0 -0
  338. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/sigma_w.png +0 -0
  339. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/v_ave.png +0 -0
  340. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/v_ave_err.png +0 -0
  341. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/w_ave.png +0 -0
  342. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/w_ave_err.png +0 -0
  343. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/q.png +0 -0
  344. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/results.json +1 -0
  345. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/sigma_v.png +0 -0
  346. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/sigma_w.png +0 -0
  347. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/v_ave.png +0 -0
  348. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/v_ave_err.png +0 -0
  349. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/w_ave.png +0 -0
  350. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/w_ave_err.png +0 -0
  351. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv_compare/q.png +0 -0
  352. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv_compare/v_ave.png +0 -0
  353. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/utilization/results.json +1 -0
  354. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/utilization/v_ave.png +0 -0
  355. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/utilization/v_ave_err.png +0 -0
  356. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv0_8/results.json +1 -0
  357. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv0_8/v_ave.png +0 -0
  358. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv0_8/v_ave_err.png +0 -0
  359. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv1_2/results.json +1 -0
  360. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv1_2/v_ave.png +0 -0
  361. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv1_2/v_ave_err.png +0 -0
  362. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv_compare/v_ave.png +0 -0
  363. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/q.png +0 -0
  364. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/results.json +1 -0
  365. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/sigma_v.png +0 -0
  366. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/sigma_w.png +0 -0
  367. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/v_ave.png +0 -0
  368. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/v_ave_err.png +0 -0
  369. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/w_ave.png +0 -0
  370. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/w_ave_err.png +0 -0
  371. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/q.png +0 -0
  372. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/results.json +1 -0
  373. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/sigma_v.png +0 -0
  374. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/sigma_w.png +0 -0
  375. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/v_ave.png +0 -0
  376. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/v_ave_err.png +0 -0
  377. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/w_ave.png +0 -0
  378. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/w_ave_err.png +0 -0
  379. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv_compare/q.png +0 -0
  380. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv_compare/v_ave.png +0 -0
  381. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/results.json +1 -0
  382. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/v_ave.png +0 -0
  383. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/v_ave_err.png +0 -0
  384. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/v_broken_ave.png +0 -0
  385. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/v_broken_ave_err.png +0 -0
  386. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/v_served_ave.png +0 -0
  387. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/v_served_ave_err.png +0 -0
  388. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/w_ave.png +0 -0
  389. most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/w_ave_err.png +0 -0
  390. most_queue-2.8/works/negative_queues/negative_queues_figures/paper_fig2_delta_0_300/combined/v1_n_cv1_2_oldstyle.png +0 -0
  391. most_queue-2.8/works/negative_queues/negative_queues_figures/paper_fig2_delta_0_300/dis_clear/results.json +1 -0
  392. most_queue-2.8/works/negative_queues/negative_queues_figures/paper_fig2_delta_0_300/dis_requeue/results.json +1 -0
  393. most_queue-2.8/works/negative_queues/negative_queues_figures/paper_fig2_delta_0_300/rcs_remove/results.json +1 -0
  394. most_queue-2.8/works/negative_queues/negative_queues_figures/paper_fig2_delta_0_300/rcs_requeue/results.json +1 -0
  395. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/results.json +1 -0
  396. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/v_ave.png +0 -0
  397. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/v_ave_err.png +0 -0
  398. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/v_broken_ave.png +0 -0
  399. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/v_broken_ave_err.png +0 -0
  400. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/v_served_ave.png +0 -0
  401. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/v_served_ave_err.png +0 -0
  402. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/w_ave.png +0 -0
  403. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/w_ave_err.png +0 -0
  404. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/results.json +1 -0
  405. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/v_ave.png +0 -0
  406. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/v_ave_err.png +0 -0
  407. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/v_broken_ave.png +0 -0
  408. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/v_broken_ave_err.png +0 -0
  409. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/v_served_ave.png +0 -0
  410. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/v_served_ave_err.png +0 -0
  411. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/w_ave.png +0 -0
  412. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/w_ave_err.png +0 -0
  413. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/Untitled Diagram.drawio +97 -0
  414. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrival.jpeg +0 -0
  415. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrival2.jpeg +0 -0
  416. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrival_/320/261/320/265/320/266/320/265/320/262/321/213/320/271.jpeg +0 -0
  417. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrival_/320/272/320/260/321/202.jpeg +0 -0
  418. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrivals.drawio +141 -0
  419. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrivals.png +0 -0
  420. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrivals_/320/272/320/260/321/202_/321/207/320/261.png +0 -0
  421. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrivals_/321/201/321/203/320/277/320/265/321/200.png +0 -0
  422. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrivals_/321/207/320/261.png +0 -0
  423. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/rcs_arrivals.png +0 -0
  424. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/rcs_negative_arrivals_pretty.png +0 -0
  425. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/rcs_negative_arrivals_pretty.svg +1562 -0
  426. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/rcs_service.png +0 -0
  427. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/rcs_transitions.png +0 -0
  428. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels/results.json +1 -0
  429. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels/v_ave.png +0 -0
  430. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels/v_ave_err.png +0 -0
  431. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv0_8/results.json +1 -0
  432. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv0_8/v_ave.png +0 -0
  433. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv0_8/v_ave_err.png +0 -0
  434. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv1_2/results.json +1 -0
  435. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv1_2/v_ave.png +0 -0
  436. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv1_2/v_ave_err.png +0 -0
  437. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv_compare/v_ave.png +0 -0
  438. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/coefs/results.json +1 -0
  439. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/coefs/v_ave.png +0 -0
  440. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/coefs/v_ave_err.png +0 -0
  441. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/q.png +0 -0
  442. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/results.json +1 -0
  443. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/sigma_v.png +0 -0
  444. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/sigma_w.png +0 -0
  445. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/v_ave.png +0 -0
  446. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/v_ave_err.png +0 -0
  447. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/w_ave.png +0 -0
  448. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/w_ave_err.png +0 -0
  449. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/q.png +0 -0
  450. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/results.json +1 -0
  451. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/sigma_v.png +0 -0
  452. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/sigma_w.png +0 -0
  453. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/v_ave.png +0 -0
  454. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/v_ave_err.png +0 -0
  455. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/w_ave.png +0 -0
  456. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/w_ave_err.png +0 -0
  457. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/q.png +0 -0
  458. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/results.json +1 -0
  459. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/sigma_v.png +0 -0
  460. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/sigma_w.png +0 -0
  461. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/v_ave.png +0 -0
  462. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/v_ave_err.png +0 -0
  463. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/w_ave.png +0 -0
  464. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/w_ave_err.png +0 -0
  465. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv_compare/q.png +0 -0
  466. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv_compare/v_ave.png +0 -0
  467. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/utilization/results.json +1 -0
  468. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/utilization/v_ave.png +0 -0
  469. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/utilization/v_ave_err.png +0 -0
  470. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels/results.json +1 -0
  471. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels/v_ave.png +0 -0
  472. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels/v_ave_err.png +0 -0
  473. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv0_8/results.json +1 -0
  474. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv0_8/v_ave.png +0 -0
  475. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv0_8/v_ave_err.png +0 -0
  476. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv1_2/results.json +1 -0
  477. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv1_2/v_ave.png +0 -0
  478. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv1_2/v_ave_err.png +0 -0
  479. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv_compare/v_ave.png +0 -0
  480. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/coefs/results.json +1 -0
  481. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/coefs/v_ave.png +0 -0
  482. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/coefs/v_ave_err.png +0 -0
  483. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/q.png +0 -0
  484. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/results.json +1 -0
  485. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/sigma_v.png +0 -0
  486. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/sigma_w.png +0 -0
  487. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/v_ave.png +0 -0
  488. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/v_ave_err.png +0 -0
  489. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/w_ave.png +0 -0
  490. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/w_ave_err.png +0 -0
  491. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/q.png +0 -0
  492. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/results.json +1 -0
  493. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/sigma_v.png +0 -0
  494. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/sigma_w.png +0 -0
  495. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/v_ave.png +0 -0
  496. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/v_ave_err.png +0 -0
  497. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/w_ave.png +0 -0
  498. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/w_ave_err.png +0 -0
  499. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/q.png +0 -0
  500. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/results.json +1 -0
  501. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/sigma_v.png +0 -0
  502. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/sigma_w.png +0 -0
  503. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/v_ave.png +0 -0
  504. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/v_ave_err.png +0 -0
  505. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/w_ave.png +0 -0
  506. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/w_ave_err.png +0 -0
  507. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv_compare/q.png +0 -0
  508. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv_compare/v_ave.png +0 -0
  509. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/utilization/results.json +1 -0
  510. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/utilization/v_ave.png +0 -0
  511. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/utilization/v_ave_err.png +0 -0
  512. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv0_8/results.json +1 -0
  513. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv0_8/v_ave.png +0 -0
  514. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv0_8/v_ave_err.png +0 -0
  515. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv1_2/results.json +1 -0
  516. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv1_2/v_ave.png +0 -0
  517. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv1_2/v_ave_err.png +0 -0
  518. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv_compare/v_ave.png +0 -0
  519. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/q.png +0 -0
  520. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/results.json +1 -0
  521. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/sigma_v.png +0 -0
  522. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/sigma_w.png +0 -0
  523. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/v_ave.png +0 -0
  524. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/v_ave_err.png +0 -0
  525. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/w_ave.png +0 -0
  526. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/w_ave_err.png +0 -0
  527. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/q.png +0 -0
  528. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/results.json +1 -0
  529. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/sigma_v.png +0 -0
  530. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/sigma_w.png +0 -0
  531. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/v_ave.png +0 -0
  532. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/v_ave_err.png +0 -0
  533. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/w_ave.png +0 -0
  534. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/w_ave_err.png +0 -0
  535. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv_compare/q.png +0 -0
  536. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv_compare/v_ave.png +0 -0
  537. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/results.json +1 -0
  538. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/v_ave.png +0 -0
  539. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/v_ave_err.png +0 -0
  540. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/v_broken_ave.png +0 -0
  541. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/v_broken_ave_err.png +0 -0
  542. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/v_served_ave.png +0 -0
  543. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/v_served_ave_err.png +0 -0
  544. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/w_ave.png +0 -0
  545. most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/w_ave_err.png +0 -0
  546. most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/results.json +1 -0
  547. most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/v_ave.png +0 -0
  548. most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/v_ave_err.png +0 -0
  549. most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/v_broken_ave.png +0 -0
  550. most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/v_broken_ave_err.png +0 -0
  551. most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/v_served_ave.png +0 -0
  552. most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/v_served_ave_err.png +0 -0
  553. most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/w_ave.png +0 -0
  554. most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/w_ave_err.png +0 -0
  555. most_queue-2.8/works/negative_queues/negative_queues_takahasi_takami.md +808 -0
  556. most_queue-2.8/works/negative_queues/negative_queues_takahasi_takami.tex +607 -0
  557. most_queue-2.8/works/negative_queues/negative_queues_takahasi_takami_v3.pdf +0 -0
  558. most_queue-2.8/works/negative_queues/plot_channels_4disciplines_oldstyle.py +136 -0
  559. most_queue-2.8/works/negative_queues/plot_channels_cv_compare.py +108 -0
  560. most_queue-2.8/works/negative_queues/plot_channels_fixed_2disciplines_cv1_2.py +106 -0
  561. most_queue-2.8/works/negative_queues/plot_negative_rate_cv_compare.py +131 -0
  562. most_queue-2.8/works/negative_queues/prompt_disaster_negative_arrival_3channels_4levels.md +55 -0
  563. most_queue-2.8/works/negative_queues/prompt_rcs_negative_arrival_up_3channels_4levels.md +98 -0
  564. most_queue-2.8/works/negative_queues/run_channels_for_paper_fig2.py +132 -0
  565. most_queue-2.8/works/negative_queues/run_table_cv_points.py +148 -0
  566. most_queue-2.8/works/negative_queues/work_mgn_negatives.py +688 -0
  567. most_queue-2.8/works/negative_queues//320/276/320/261/320/267/320/276/321/200_/320/273/320/270/321/202/320/265/321/200/320/260/321/202/321/203/321/200/321/2131.md +118 -0
  568. most_queue-2.8/works/negative_queues//320/276/320/261/320/267/320/276/321/200_/320/273/320/270/321/202/320/265/321/200/320/260/321/202/321/203/321/200/321/2132.md +120 -0
  569. most_queue-2.8/works/queueing_systems_review/RL.md +328 -0
  570. most_queue-2.8/works/queueing_systems_review/SRPT/SPJF.md +450 -0
  571. most_queue-2.8/works/queueing_systems_review/SRPT/shrage.md +193 -0
  572. most_queue-2.8/works/queueing_systems_review/Scheduling /321/201 /320/277/321/200/320/265/320/264/321/201/320/272/320/260/320/267/320/260/320/275/320/270/321/217/320/274/320/270 /320/270 LLM-/321/201/320/270/321/201/321/202/320/265/320/274/321/213.md" +401 -0
  573. most_queue-2.8/works/queueing_systems_review/general.md +238 -0
  574. most_queue-2.6/PKG-INFO +0 -247
  575. most_queue-2.6/README.md +0 -206
  576. most_queue-2.6/docs/models.md +0 -406
  577. most_queue-2.6/most_queue/sim/networks/base_network_sim.py +0 -111
  578. most_queue-2.6/most_queue/theory/negative/mg1_disasters.py +0 -134
  579. most_queue-2.6/most_queue/theory/negative/mgn_disaster.py +0 -456
  580. most_queue-2.6/most_queue/theory/negative/mgn_rcs.py +0 -321
  581. most_queue-2.6/most_queue/theory/negative/structs.py +0 -1
  582. most_queue-2.6/tests/test_mgn_disaster.py +0 -81
  583. most_queue-2.6/tests/test_mgn_rcs.py +0 -84
  584. most_queue-2.6/works/negative_queues/base_parameters.yaml +0 -21
  585. most_queue-2.6/works/negative_queues/work_mgn_negatives.py +0 -333
  586. {most_queue-2.6 → most_queue-2.8}/LICENSE +0 -0
  587. {most_queue-2.6 → most_queue-2.8}/assets/3.gif +0 -0
  588. {most_queue-2.6 → most_queue-2.8}/deploy.txt +0 -0
  589. {most_queue-2.6 → most_queue-2.8}/googleb31d3dccb40f969f.html +0 -0
  590. {most_queue-2.6 → most_queue-2.8}/most_queue/constants.py +0 -0
  591. {most_queue-2.6 → most_queue-2.8}/most_queue/io/__init__.py +0 -0
  592. {most_queue-2.6 → most_queue-2.8}/most_queue/io/tables.py +0 -0
  593. {most_queue-2.6 → most_queue-2.8}/most_queue/misc/approx_cdf_make.py +0 -0
  594. {most_queue-2.6 → most_queue-2.8}/most_queue/misc/compare_fj_calc.py +0 -0
  595. {most_queue-2.6 → most_queue-2.8}/most_queue/misc/flow_sum.py +0 -0
  596. {most_queue-2.6 → most_queue-2.8}/most_queue/misc/run_mgn_with_h2_delay_cold_warm.py +0 -0
  597. {most_queue-2.6 → most_queue-2.8}/most_queue/misc/tests/test_fj_delta.py +0 -0
  598. {most_queue-2.6 → most_queue-2.8}/most_queue/misc/tests/test_network_opt_approx.py +0 -0
  599. {most_queue-2.6 → most_queue-2.8}/most_queue/misc/tests/test_network_opt_plus.py +0 -0
  600. {most_queue-2.6 → most_queue-2.8}/most_queue/misc/vacations_paper_utils.py +0 -0
  601. {most_queue-2.6 → most_queue-2.8}/most_queue/random/__init__.py +0 -0
  602. {most_queue-2.6 → most_queue-2.8}/most_queue/random/distributions.yaml +0 -0
  603. {most_queue-2.6 → most_queue-2.8}/most_queue/random/utils/base.py +0 -0
  604. {most_queue-2.6 → most_queue-2.8}/most_queue/random/utils/fit.py +0 -0
  605. {most_queue-2.6 → most_queue-2.8}/most_queue/random/utils/load.py +0 -0
  606. {most_queue-2.6 → most_queue-2.8}/most_queue/random/utils/params.py +0 -0
  607. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/networks/__init__.py +0 -0
  608. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/utils/__init__.py +0 -0
  609. {most_queue-2.6 → most_queue-2.8}/most_queue/sim/utils/phase.py +0 -0
  610. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/base_queue.py +0 -0
  611. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/batch/__init__.py +0 -0
  612. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/batch/mm1.py +0 -0
  613. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/calc_params.py +0 -0
  614. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/closed/__init__.py +0 -0
  615. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/closed/engset.py +0 -0
  616. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/ek_d_n.py +0 -0
  617. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/gi_m_1.py +0 -0
  618. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/m_d_n.py +0 -0
  619. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/mg1.py +0 -0
  620. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/mmnr.py +0 -0
  621. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fork_join/__init__.py +0 -0
  622. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fork_join/m_m_n.py +0 -0
  623. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fork_join/split_join.py +0 -0
  624. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/impatience/__init__.py +0 -0
  625. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/impatience/mm1.py +0 -0
  626. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/negative/mg1_rcs.py +0 -0
  627. /most_queue-2.6/most_queue/theory/networks/__init__.py → /most_queue-2.8/most_queue/theory/negative/structs.py +0 -0
  628. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/base_network_calc.py +0 -0
  629. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/network_viewer.py +0 -0
  630. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/open_network.py +0 -0
  631. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/open_network_prty.py +0 -0
  632. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/opt/__init__.py +0 -0
  633. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/opt/transition.py +0 -0
  634. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/opt/transition_approx.py +0 -0
  635. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/opt/transition_plus.py +0 -0
  636. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/__init__.py +0 -0
  637. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/mgn_invar_approx.py +0 -0
  638. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/non_preemptive/__init__.py +0 -0
  639. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/non_preemptive/mg1.py +0 -0
  640. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/preemptive/__init__.py +0 -0
  641. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/preemptive/m_ph_n_busy_approx.py +0 -0
  642. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/preemptive/mg1.py +0 -0
  643. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/preemptive/mm2_3cls_busy_approx.py +0 -0
  644. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/preemptive/mmn_2cls_pr_busy_approx.py +0 -0
  645. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/r_example.gexf +0 -0
  646. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/__init__.py +0 -0
  647. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/binom_probs.py +0 -0
  648. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/conv.py +0 -0
  649. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/diff5dots.py +0 -0
  650. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/flow_sum.py +0 -0
  651. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/max_dist.py +0 -0
  652. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/moments.py +0 -0
  653. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/q_poisson_arrival_calc.py +0 -0
  654. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/residual.py +0 -0
  655. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/student_stat.py +0 -0
  656. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/transforms.py +0 -0
  657. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/utilization_approx.py +0 -0
  658. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/validation.py +0 -0
  659. {most_queue-2.6 → most_queue-2.8}/most_queue/theory/vacations/__init__.py +0 -0
  660. {most_queue-2.6 → most_queue-2.8}/requirements.txt +0 -0
  661. {most_queue-2.6 → most_queue-2.8}/tests/Dockerfile +0 -0
  662. {most_queue-2.6 → most_queue-2.8}/tests/__init__.py +0 -0
  663. {most_queue-2.6 → most_queue-2.8}/tests/run.sh +0 -0
  664. {most_queue-2.6 → most_queue-2.8}/tests/test_base_qs_sim.py +0 -0
  665. {most_queue-2.6 → most_queue-2.8}/tests/test_batch.py +0 -0
  666. {most_queue-2.6 → most_queue-2.8}/tests/test_ek_d_n.py +0 -0
  667. {most_queue-2.6 → most_queue-2.8}/tests/test_engset.py +0 -0
  668. {most_queue-2.6 → most_queue-2.8}/tests/test_fj_sim.py +0 -0
  669. {most_queue-2.6 → most_queue-2.8}/tests/test_gi_m_1_calc.py +0 -0
  670. {most_queue-2.6 → most_queue-2.8}/tests/test_gi_m_n_calc.py +0 -0
  671. {most_queue-2.6 → most_queue-2.8}/tests/test_impatience.py +0 -0
  672. {most_queue-2.6 → most_queue-2.8}/tests/test_m_d_n_calc.py +0 -0
  673. {most_queue-2.6 → most_queue-2.8}/tests/test_m_h2_h2warm.py +0 -0
  674. {most_queue-2.6 → most_queue-2.8}/tests/test_m_ph_n_prty.py +0 -0
  675. {most_queue-2.6 → most_queue-2.8}/tests/test_mg1_rcs.py +0 -0
  676. {most_queue-2.6 → most_queue-2.8}/tests/test_mg1_warmup.py +0 -0
  677. {most_queue-2.6 → most_queue-2.8}/tests/test_mgn_tt.py +0 -0
  678. {most_queue-2.6 → most_queue-2.8}/tests/test_mgn_with_h2_delay_cold_warm.py +0 -0
  679. {most_queue-2.6 → most_queue-2.8}/tests/test_mm2_3cls_prty_busy.py +0 -0
  680. {most_queue-2.6 → most_queue-2.8}/tests/test_mmn_h2cold_h2warm.py +0 -0
  681. {most_queue-2.6 → most_queue-2.8}/tests/test_mmn_prty_busy_approx.py +0 -0
  682. {most_queue-2.6 → most_queue-2.8}/tests/test_network_im_prty.py +0 -0
  683. {most_queue-2.6 → most_queue-2.8}/tests/test_network_no_prty.py +0 -0
  684. {most_queue-2.6 → most_queue-2.8}/tests/test_network_opt.py +0 -0
  685. {most_queue-2.6 → most_queue-2.8}/tests/test_qs_sim.py +0 -0
  686. {most_queue-2.6 → most_queue-2.8}/tests/test_qs_sim_prty.py +0 -0
  687. {most_queue-2.6 → most_queue-2.8}/tests/units/test_busy_moments_calc.py +0 -0
  688. {most_queue-2.6 → most_queue-2.8}/tests/units/test_central_moments.py +0 -0
  689. {most_queue-2.6 → most_queue-2.8}/tests/units/test_conditionals.py +0 -0
  690. {most_queue-2.6 → most_queue-2.8}/tests/units/test_h2_params_cv.py +0 -0
  691. {most_queue-2.6 → most_queue-2.8}/tests/units/test_queue_types.py +0 -0
  692. {most_queue-2.6 → most_queue-2.8}/tests/units/test_tt_up_probs.py +0 -0
  693. {most_queue-2.6 → most_queue-2.8}/tests/units/test_v1_on_channels.py +0 -0
  694. {most_queue-2.6 → most_queue-2.8}/tests/units/test_v1_utlization_approx.py +0 -0
  695. {most_queue-2.6 → most_queue-2.8}/works/__init__.py +0 -0
  696. {most_queue-2.6 → most_queue-2.8}/works/negative_queues/__init__.py +0 -0
  697. {most_queue-2.6 → most_queue-2.8}/works/vacations/__init__.py +0 -0
  698. {most_queue-2.6 → most_queue-2.8}/works/vacations/base_parameters.yaml +0 -0
  699. {most_queue-2.6 → most_queue-2.8}/works/vacations/channels.py +0 -0
  700. {most_queue-2.6 → most_queue-2.8}/works/vacations/cooling.py +0 -0
  701. {most_queue-2.6 → most_queue-2.8}/works/vacations/cooling_delay.py +0 -0
  702. {most_queue-2.6 → most_queue-2.8}/works/vacations/main.py +0 -0
  703. {most_queue-2.6 → most_queue-2.8}/works/vacations/run_one_calc_vs_sim.py +0 -0
  704. {most_queue-2.6 → most_queue-2.8}/works/vacations/service.py +0 -0
  705. {most_queue-2.6 → most_queue-2.8}/works/vacations/utilization.py +0 -0
  706. {most_queue-2.6 → most_queue-2.8}/works/vacations/utils.py +0 -0
  707. {most_queue-2.6 → most_queue-2.8}/works/vacations/warmup.py +0 -0
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: lit-search
3
+ description: Поиск научной литературы по теории очередей (arXiv + OpenAlex + Crossref) для работ над most_queue. Use when searching for queueing theory papers, verifying references, or doing gap-analysis of models (EPIC-001 and beyond).
4
+ ---
5
+
6
+ # Поиск литературы для most_queue
7
+
8
+ ## Быстрый поиск по трём базам
9
+
10
+ ```bash
11
+ python .claude/skills/lit-search/lit_search.py "<запрос>" --max 10
12
+ ```
13
+
14
+ Опрашивает arXiv API, OpenAlex и Crossref (все бесплатные, без ключей), дедуплицирует по
15
+ названию и печатает markdown-таблицу, отсортированную по цитируемости. Опции:
16
+ `--source arxiv|openalex|crossref|all`, `--abstracts` (аннотации, только arXiv).
17
+
18
+ ## Что чем искать
19
+
20
+ - **OpenAlex** — основной источник: покрывает журналы (Operations Research, Queueing Systems,
21
+ Performance Evaluation), даёт цитируемость и DOI. Классика теории очередей — здесь.
22
+ - **Crossref** — проверка/уточнение DOI и метаданных, широкий охват.
23
+ - **arXiv** — свежие препринты (категории math.PR, cs.PF); единственный источник с аннотациями
24
+ и бесплатными PDF: `https://arxiv.org/pdf/<id>`.
25
+ - **WebSearch/WebFetch** — обзорный поиск, страницы авторов, лекционные заметки
26
+ (например, Harchol-Balter публикует главы книг у себя на сайте).
27
+ - **Semantic Scholar API** — без ключа почти всегда 429, не использовать.
28
+
29
+ ## Куда складывать найденное
30
+
31
+ - PDF первоисточников → `docs/статьи/` (используемые в документации) или `works/articles/`.
32
+ - Конспекты → `works/queueing_systems_review/<тема>/`.
33
+ - Ссылки в roadmap/эпике оформлять как «Автор, Название, Журнал, Год, DOI».
34
+
35
+ ## Чтение PDF
36
+
37
+ arXiv PDF скачивать в scratchpad (`curl -L -o`), читать инструментом Read (постранично) или
38
+ скиллом pdf. Платные журнальные PDF недоступны — искать препринт на arXiv/author page через
39
+ WebSearch или опираться на конспекты в `works/`.
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env python3
2
+ """Literature search helper: queries arXiv, OpenAlex and Crossref, prints a markdown table.
3
+
4
+ Usage:
5
+ python lit_search.py "retrial queue M/G/1" [--max 10] [--source arxiv|openalex|crossref|all]
6
+ python lit_search.py "MAP/PH/1" --max 5 --abstracts
7
+
8
+ Only stdlib is used. All APIs are free and keyless.
9
+ """
10
+
11
+ import argparse
12
+ import json
13
+ import sys
14
+ import time
15
+ import urllib.parse
16
+ import urllib.request
17
+ import xml.etree.ElementTree as ET
18
+
19
+ UA = {"User-Agent": "most-queue-lit-search/1.0 (mailto:xabarov1985@gmail.com)"}
20
+
21
+
22
+ def _get(url: str) -> bytes:
23
+ req = urllib.request.Request(url, headers=UA)
24
+ with urllib.request.urlopen(req, timeout=30) as resp:
25
+ return resp.read()
26
+
27
+
28
+ def search_arxiv(query: str, limit: int) -> list[dict]:
29
+ """Search arXiv Atom API, return normalized result dicts."""
30
+ q = urllib.parse.quote(f'all:"{query}"' if " " in query else f"all:{query}")
31
+ url = f"https://export.arxiv.org/api/query?search_query={q}&start=0&max_results={limit}&sortBy=relevance"
32
+ ns = {"a": "http://www.w3.org/2005/Atom"}
33
+ root = ET.fromstring(_get(url))
34
+ out = []
35
+ for e in root.findall("a:entry", ns):
36
+ out.append(
37
+ {
38
+ "source": "arxiv",
39
+ "title": " ".join((e.findtext("a:title", "", ns) or "").split()),
40
+ "year": (e.findtext("a:published", "", ns) or "")[:4],
41
+ "venue": "arXiv",
42
+ "citations": None,
43
+ "id": (e.findtext("a:id", "", ns) or "").replace("http://arxiv.org/abs/", "arXiv:"),
44
+ "abstract": " ".join((e.findtext("a:summary", "", ns) or "").split()),
45
+ }
46
+ )
47
+ return out
48
+
49
+
50
+ def search_openalex(query: str, limit: int) -> list[dict]:
51
+ """Search OpenAlex works API, return normalized result dicts."""
52
+ q = urllib.parse.quote(query)
53
+ url = (
54
+ f"https://api.openalex.org/works?search={q}&per-page={limit}"
55
+ "&select=title,publication_year,doi,cited_by_count,primary_location&sort=relevance_score:desc"
56
+ )
57
+ data = json.loads(_get(url))
58
+ out = []
59
+ for w in data.get("results", []):
60
+ loc = w.get("primary_location") or {}
61
+ src = (loc.get("source") or {}).get("display_name") or ""
62
+ out.append(
63
+ {
64
+ "source": "openalex",
65
+ "title": w.get("title") or "",
66
+ "year": str(w.get("publication_year") or ""),
67
+ "venue": src,
68
+ "citations": w.get("cited_by_count"),
69
+ "id": (w.get("doi") or "").replace("https://doi.org/", "doi:"),
70
+ "abstract": "",
71
+ }
72
+ )
73
+ return out
74
+
75
+
76
+ def search_crossref(query: str, limit: int) -> list[dict]:
77
+ """Search Crossref works API, return normalized result dicts."""
78
+ q = urllib.parse.quote(query)
79
+ url = (
80
+ f"https://api.crossref.org/works?query={q}&rows={limit}"
81
+ "&select=title,DOI,is-referenced-by-count,container-title,published"
82
+ )
83
+ data = json.loads(_get(url))
84
+ out = []
85
+ for w in data.get("message", {}).get("items", []):
86
+ pub = w.get("published", {}).get("date-parts", [[None]])
87
+ out.append(
88
+ {
89
+ "source": "crossref",
90
+ "title": (w.get("title") or [""])[0],
91
+ "year": str(pub[0][0] or ""),
92
+ "venue": (w.get("container-title") or [""])[0],
93
+ "citations": w.get("is-referenced-by-count"),
94
+ "id": "doi:" + w.get("DOI", ""),
95
+ "abstract": "",
96
+ }
97
+ )
98
+ return out
99
+
100
+
101
+ SOURCES = {"arxiv": search_arxiv, "openalex": search_openalex, "crossref": search_crossref}
102
+
103
+
104
+ def main() -> None:
105
+ """CLI entry point: query sources, dedup, print markdown table."""
106
+ ap = argparse.ArgumentParser(description=(__doc__ or "").splitlines()[0])
107
+ ap.add_argument("query")
108
+ ap.add_argument("--max", type=int, default=10, dest="limit", help="results per source")
109
+ ap.add_argument("--source", default="all", choices=[*SOURCES, "all"])
110
+ ap.add_argument("--abstracts", action="store_true", help="print abstracts (arXiv only)")
111
+ args = ap.parse_args()
112
+
113
+ names = list(SOURCES) if args.source == "all" else [args.source]
114
+ rows = []
115
+ for name in names:
116
+ try:
117
+ rows += SOURCES[name](args.query, args.limit)
118
+ except Exception as exc: # pylint: disable=broad-exception-caught
119
+ print(f"[warn] {name} failed: {exc}", file=sys.stderr)
120
+ time.sleep(0.5)
121
+
122
+ # dedup by normalized title, prefer entries with citation counts
123
+ seen: dict[str, dict] = {}
124
+ for r in rows:
125
+ key = "".join(ch for ch in r["title"].lower() if ch.isalnum())[:80]
126
+ if key not in seen or (r["citations"] or 0) > (seen[key]["citations"] or 0):
127
+ seen[key] = r
128
+ rows = sorted(seen.values(), key=lambda r: -(r["citations"] or 0))
129
+
130
+ print(f"## Результаты поиска: `{args.query}` ({len(rows)} уникальных)\n")
131
+ print("| Год | Название | Где | Цит. | ID | Источник |")
132
+ print("|-----|----------|-----|------|----|----------|")
133
+ for r in rows:
134
+ cit = "" if r["citations"] is None else str(r["citations"])
135
+ print(f"| {r['year']} | {r['title'][:100]} | {r['venue'][:40]} | {cit} | {r['id']} | {r['source']} |")
136
+
137
+ if args.abstracts:
138
+ for r in rows:
139
+ if r["abstract"]:
140
+ print(f"\n### {r['title']}\n{r['abstract']}")
141
+
142
+
143
+ if __name__ == "__main__":
144
+ main()
@@ -0,0 +1,45 @@
1
+ ---
2
+ description: Pytest quality standards � run after major edits, zero-tolerance failures, no silencing tricks
3
+ globs: **/*.py
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Pytest Quality Standards
8
+
9
+ ## Run pytest after every significant code change
10
+
11
+ After editing simulation core, theory calculators, or utils, run:
12
+
13
+ ```bash
14
+ .venv/bin/pytest tests/ -q --tb=short
15
+ ```
16
+
17
+ For quick feedback on a single changed file:
18
+
19
+ ```bash
20
+ .venv/bin/pytest tests/units/test_<module>.py -q --tb=short
21
+ ```
22
+
23
+ ## Passing threshold
24
+
25
+ All tests must pass. A session with any failures or errors is not acceptable.
26
+
27
+ ## Forbidden workarounds
28
+
29
+ Never silence test failures with:
30
+
31
+ - `# noqa`
32
+ - `# type: ignore` (unless suppressing a genuine 3rd-party stub gap, not your code)
33
+ - `@pytest.mark.skip` / `@pytest.mark.xfail` without an explanation comment and a linked issue
34
+ - `filterwarnings = error` exceptions added silently
35
+ - Lowering tolerances (`rtol`, `atol`) below what the theory supports just to make a test pass
36
+
37
+ Fix the root cause instead.
38
+
39
+ ## Tolerance conventions (`default_params.yaml`)
40
+
41
+ Simulation results are stochastic. Use the project tolerances from `tests/default_params.yaml`:
42
+ - `MOMENTS_RTOL` � relative tolerance for moment comparisons
43
+ - `MOMENTS_ATOL` � absolute tolerance fallback
44
+
45
+ Do **not** tighten tolerances below these values without justifying with sample-size analysis.
@@ -0,0 +1,98 @@
1
+ ---
2
+ description: Python code quality standards — pylint 10/10, docstrings, ASCII, type hints, no lazy imports
3
+ globs: most_queue/**/*.py
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Python Code Quality Standards
8
+
9
+ ## Pylint target: 10.00/10
10
+
11
+ After every substantive edit run pylint on changed files:
12
+
13
+ ```bash
14
+ .venv/bin/pylint <changed_file_or_package> --score=yes
15
+ ```
16
+
17
+ If score drops below 10.00, fix all reported issues before finishing.
18
+
19
+ ## Docstrings — required everywhere public
20
+
21
+ Every public module, class, and method must have a docstring.
22
+ Private helpers (`_name`) are exempt but encouraged.
23
+
24
+ ```python
25
+ # BAD — missing docstring on public method
26
+ def run(self) -> QueueResults:
27
+ ...
28
+
29
+ # GOOD
30
+ def run(self) -> QueueResults:
31
+ """Compute E[T] and E[W] averaged over the job-size distribution."""
32
+ ...
33
+ ```
34
+
35
+ ## ASCII-only source files
36
+
37
+ Python source files must contain only ASCII characters.
38
+ Use ASCII equivalents in docstrings and comments — never paste Unicode math symbols:
39
+
40
+ | Instead of | Write |
41
+ |---|---|
42
+ | `ρ_x`, `λ`, `∫` | `rho_x`, `lam`, `int` |
43
+ | `≥`, `≤` | `>=`, `<=` |
44
+ | `→`, `—` | `->`, `--` |
45
+
46
+ ## No imports inside functions
47
+
48
+ Lazy imports (`import` inside a function body) are forbidden.
49
+ Move all imports to the module top level.
50
+
51
+ ```python
52
+ # BAD
53
+ def get_pdf(t):
54
+ from scipy.stats import norm # C0415
55
+ return norm.pdf(t)
56
+
57
+ # GOOD — import at module level
58
+ from scipy.stats import norm
59
+
60
+ def get_pdf(t):
61
+ return norm.pdf(t)
62
+ ```
63
+
64
+ ## Type hints on all public signatures
65
+
66
+ ```python
67
+ # BAD
68
+ def conditional_mean_response(self, x):
69
+ ...
70
+
71
+ # GOOD
72
+ def conditional_mean_response(self, x: float) -> float:
73
+ ...
74
+ ```
75
+
76
+ ## Distribution API consistency
77
+
78
+ All `Distribution` subclasses in `most_queue.random.distributions` must
79
+ expose `get_pdf(params, t: float) -> float` and `get_cdf(params, t: float) -> float`
80
+ as static methods. Do **not** add private PDF/CDF helpers elsewhere — extend
81
+ the distribution class instead.
82
+
83
+ ## No nested quadrature for repeated inner integrals
84
+
85
+ When an inner integral appears inside an outer `quad` call, precompute it
86
+ on a grid with `cumulative_trapezoid` + `np.interp` instead of calling
87
+ `quad` again for every outer evaluation point.
88
+
89
+ ```python
90
+ # BAD — O(n²) nested quad
91
+ def outer(x_max):
92
+ quad(lambda x: f(x) * quad(lambda t: ..., 0, x)[0], 0, x_max)
93
+
94
+ # GOOD — precompute grid, look up with np.interp
95
+ grid_xs = np.linspace(0, x_max, 2000)
96
+ grid_int = cumulative_trapezoid(integrand(grid_xs), grid_xs, initial=0)
97
+ quad(lambda x: f(x) * np.interp(x, grid_xs, grid_int), 0, x_max)
98
+ ```
@@ -0,0 +1,130 @@
1
+ ---
2
+ name: add-theory-calculator
3
+ description: >-
4
+ Add a new analytical/numerical queueing-theory calculator to most-queue:
5
+ subclass BaseQueue, wire set_sources / set_servers, return QueueResults from
6
+ run(), reuse shared utilities, expose via theory/__init__.py. Use whenever the
7
+ user asks to implement a new theoretical model (M/G/1 variant, priority,
8
+ network, fork-join, vacations, �).
9
+ ---
10
+
11
+ # Adding a Theory Calculator
12
+
13
+ All analytical models in this repo follow the same contract. Stick to it so
14
+ the calculator interoperates with `io.tables`, the test pattern (see skill
15
+ `theory-vs-sim-test`), and downstream tooling.
16
+
17
+ ## Where to put the file
18
+
19
+ | Model type | Directory |
20
+ |------------|-----------|
21
+ | Single class FIFO (M/G/1, GI/M/n, �) | `most_queue/theory/fifo/` |
22
+ | Priorities | `most_queue/theory/priority/` |
23
+ | Vacations / warm-up / cooling | `most_queue/theory/vacations/` |
24
+ | Negative customers / disasters | `most_queue/theory/negative/` |
25
+ | Fork�join | `most_queue/theory/fork_join/` |
26
+ | Closed networks | `most_queue/theory/closed/` |
27
+ | Open networks | `most_queue/theory/networks/` |
28
+ | Impatience | `most_queue/theory/impatience/` |
29
+ | Batch arrivals | `most_queue/theory/batch/` |
30
+ | Size-based scheduling (SRPT/SJF/SPJF/�) | `most_queue/theory/srpt/` |
31
+
32
+ ## Required class skeleton
33
+
34
+ ```python
35
+ from most_queue.structs import QueueResults
36
+ from most_queue.theory.base_queue import BaseQueue
37
+
38
+
39
+ class MyModelCalc(BaseQueue):
40
+ """One-line summary. Cite the source paper / formula in the docstring."""
41
+
42
+ def __init__(self, n: int = 1, calc_params=None, buffer=None):
43
+ super().__init__(n=n, calc_params=calc_params, buffer=buffer)
44
+ # model-specific state
45
+
46
+ def set_sources(self, ...): # accept ?, or (params, kendall)
47
+ ...
48
+ self.is_sources_set = True # MUST set the flag
49
+
50
+ def set_servers(self, ...): # accept moments b, or (params, kendall)
51
+ ...
52
+ self.is_servers_set = True # MUST set the flag
53
+
54
+ def get_w(self, num_of_moments: int = 4) -> list[float]: ...
55
+ def get_v(self, num_of_moments: int = 4) -> list[float]: ...
56
+ def get_p(self) -> list[float]: ...
57
+
58
+ def run(self, num_of_moments: int = 4) -> QueueResults:
59
+ self._check_if_servers_and_sources_set()
60
+ start = self._measure_time()
61
+
62
+ w = self.get_w(num_of_moments)
63
+ v = self.get_v(num_of_moments)
64
+ p = self.get_p()
65
+
66
+ result = QueueResults(v=v, w=w, p=p, utilization=<your ?>)
67
+ self._set_duration(result, start)
68
+ return result
69
+ ```
70
+
71
+ ## Conventions to follow
72
+
73
+ 1. **Set the flags.** `is_sources_set` / `is_servers_set` must be set to
74
+ `True` at the end of the corresponding setter � `_check_if_servers_and_sources_set`
75
+ relies on them.
76
+ 2. **Return RAW moments.** `w` and `v` are raw (non-central) moments; the test
77
+ pattern compares raw. If you compute centrals internally, convert via
78
+ `most_queue.theory.utils.moments`.
79
+ 3. **Always set `utilization`** on `QueueResults` � the standard test asserts
80
+ `abs(UTILIZATION_FACTOR - result.utilization) < PROBS_ATOL`.
81
+ 4. **Time the run.** Use `start = self._measure_time()` and
82
+ `self._set_duration(result, start)` � `io.tables` printers display this.
83
+ 5. **Return the right results dataclass:**
84
+ - `QueueResults` � single-class FIFO and most special models
85
+ - `PriorityResults` � priorities
86
+ - `NetworkResults` � networks
87
+ - `VacationResults` � vacations / warm-up / cooling
88
+ - `NegativeArrivalsResults` � negative customers / disasters
89
+
90
+ ## Reuse, don't reinvent
91
+
92
+ Before writing math, check `most_queue/theory/utils/`:
93
+
94
+ | Module | Use for |
95
+ |--------|---------|
96
+ | `utils/conv.py` (`conv_moments`) | Convolution of two moment sequences |
97
+ | `utils/moments.py` | Raw ? central moments, factorial moments |
98
+ | `utils/transforms.py` (`lst_exp`, `lst_h2`, `lst_gamma`, �) | Laplace�Stieltjes transforms |
99
+ | `utils/busy_periods.py` | Busy-period moments via numerical differentiation of LST |
100
+ | `utils/residual.py` | Residual service-time distributions |
101
+ | `utils/flow_sum.py` | Combining renewal flows |
102
+ | `utils/q_poisson_arrival_calc.py` | PASTA-style state probabilities |
103
+ | `utils/conditional.py` | Conditional moments (e.g. `min(Exp, H2)`) |
104
+
105
+ ## Distribution interface (when you need a PDF/CDF or to align with sim)
106
+
107
+ `most_queue.random.distributions` provides classes (Exp, H2, Gamma, Cox,
108
+ Erlang, Pareto, Normal, �) with the contract:
109
+
110
+ ```python
111
+ ClassDist.get_params_by_mean_and_cv(mean, cv)
112
+ ClassDist.calc_theory_moments(params, k) # first k raw moments
113
+ inst = ClassDist(params, generator)
114
+ inst.generate() # sample one
115
+ ```
116
+
117
+ Use this to keep the simulation and the theory aligned (see skill
118
+ `theory-vs-sim-test`).
119
+
120
+ ## Checklist before opening a PR
121
+
122
+ - [ ] Subclassed `BaseQueue`; both `is_*_set` flags set in setters
123
+ - [ ] `run()` returns the appropriate dataclass with `utilization` and
124
+ `duration`
125
+ - [ ] Reused `theory/utils/*` rather than reimplementing convolution / LST
126
+ - [ ] Added `from .<module> import MyModelCalc` to `theory/__init__.py` if
127
+ the class is part of the public API
128
+ - [ ] New test file in `tests/` following the `theory-vs-sim-test` skill
129
+ - [ ] `pytest tests/` is fully green (see `.cursor/rules/pytest-quality.mdc`)
130
+ - [ ] At least 2 distributions tested (e.g. Exp + H2 or Gamma)
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: theory-vs-sim-test
3
+ description: >-
4
+ Author or fix a sim-vs-theory pytest in most-queue: load default_params.yaml,
5
+ set up matched theory + QsSim, compare moments via np.allclose with shared
6
+ tolerances, print io.tables for diagnostics. Use whenever a new theory
7
+ calculator is added, an existing test fails, or simulation/theory results need
8
+ cross-validation in this repo.
9
+ ---
10
+
11
+ # Theory-vs-Sim Test Pattern
12
+
13
+ Every numerical model in `most_queue/theory/**` is validated against
14
+ discrete-event simulation (`QsSim` and friends). The pattern below is the
15
+ project-wide convention � follow it for any new test.
16
+
17
+ ## Required imports
18
+
19
+ ```python
20
+ import os
21
+ import numpy as np
22
+ import yaml
23
+
24
+ from most_queue.io.tables import print_sojourn_moments, print_waiting_moments, probs_print
25
+ from most_queue.sim.base import QsSim # or specialised sim
26
+ from most_queue.theory.<area>.<model> import <ModelCalc> # the theory class
27
+ from most_queue.random.distributions import H2Distribution # or whichever fits the test
28
+ ```
29
+
30
+ ## Load shared tolerances from `tests/default_params.yaml`
31
+
32
+ Always read these constants � never hard-code tolerances in the test:
33
+
34
+ ```python
35
+ params_path = os.path.join(os.getcwd(), "tests", "default_params.yaml")
36
+ with open(params_path, "r", encoding="utf-8") as f:
37
+ params = yaml.safe_load(f)
38
+
39
+ ARRIVAL_RATE = float(params["arrival"]["rate"])
40
+ SERVICE_TIME_CV = float(params["service"]["cv"])
41
+ NUM_OF_JOBS = int(params["num_of_jobs"])
42
+ UTILIZATION_FACTOR = float(params["utilization_factor"])
43
+ MOMENTS_ATOL = float(params["moments_atol"])
44
+ MOMENTS_RTOL = float(params["moments_rtol"])
45
+ PROBS_ATOL = float(params["probs_atol"])
46
+ PROBS_RTOL = float(params["probs_rtol"])
47
+ ERROR_MSG = params["error_msg"]
48
+ ```
49
+
50
+ ## Standard test body
51
+
52
+ ```python
53
+ def test_<model>():
54
+ # 1. Match service distribution moments between theory and sim.
55
+ b1 = UTILIZATION_FACTOR * NUM_OF_CHANNELS / ARRIVAL_RATE
56
+ h2_params = H2Distribution.get_params_by_mean_and_cv(b1, SERVICE_TIME_CV)
57
+ b = H2Distribution.calc_theory_moments(h2_params, 5)
58
+
59
+ # 2. Theory.
60
+ calc = <ModelCalc>(...) # any constructor args your model needs
61
+ calc.set_sources(ARRIVAL_RATE) # or (params, kendall) for non-Markovian arrivals
62
+ calc.set_servers(b)
63
+ calc_results = calc.run()
64
+ assert abs(UTILIZATION_FACTOR - calc_results.utilization) < PROBS_ATOL
65
+
66
+ # 3. Simulation with the SAME distribution.
67
+ qs = QsSim(NUM_OF_CHANNELS)
68
+ qs.set_sources(ARRIVAL_RATE, "M")
69
+ qs.set_servers(h2_params, "H")
70
+ sim_results = qs.run(NUM_OF_JOBS)
71
+
72
+ # 4. Diagnostics (always print � helps debugging when CI flips).
73
+ print_waiting_moments(sim_results.w, calc_results.w)
74
+ print_sojourn_moments(sim_results.v, calc_results.v)
75
+ probs_print(sim_results.p, calc_results.p, 10)
76
+
77
+ # 5. Assertions. Compare RAW moments. Higher moments are noisy at
78
+ # NUM_OF_JOBS=100k ? typically validate the first 2 only.
79
+ assert np.allclose(sim_results.w[:2], calc_results.w[:2],
80
+ rtol=MOMENTS_RTOL, atol=MOMENTS_ATOL)
81
+ assert np.allclose(sim_results.v[:2], calc_results.v[:2],
82
+ rtol=MOMENTS_RTOL, atol=MOMENTS_ATOL)
83
+ assert np.allclose(np.array(sim_results.p[:10]),
84
+ np.array(calc_results.p[:10]),
85
+ atol=PROBS_ATOL, rtol=PROBS_RTOL), ERROR_MSG
86
+ ```
87
+
88
+ ## Why each piece is non-negotiable
89
+
90
+ | Step | Reason |
91
+ |------|--------|
92
+ | Same distribution moments on both sides | Otherwise the comparison is meaningless. Use the distribution's `get_params_by_mean_and_cv` + `calc_theory_moments`. |
93
+ | `default_params.yaml` constants | Project-wide tolerances � changing them silently is forbidden (see rule `pytest-quality.mdc`). |
94
+ | Compare only first 2 moments by default | Sample 3rd/4th moments require >1M jobs to converge; doing fewer means false negatives. |
95
+ | Always print `io.tables` | When a test fails in CI you need the actual numbers, not just the assertion. |
96
+
97
+ ## When defaults are not enough
98
+
99
+ - **High utilization (? ? 0.9)** or **heavy-tailed service (Pareto, large CV)**:
100
+ raise `NUM_OF_JOBS` to 500k�1M *in the test only*. Do **not** lower
101
+ `MOMENTS_RTOL` instead.
102
+ - **Multi-channel (n > 1)** with priorities or vacations: prefer the
103
+ specialised simulator (`QsSim` subclass in `most_queue/sim/`) over composing
104
+ with hooks.
105
+ - **Non-Markovian arrivals**: use `Gamma` for the sim side and pass the same
106
+ `(mean, cv)` to the theory class.
107
+
108
+ ## Diagnostic helpers (in `most_queue/io/tables`)
109
+
110
+ - `print_waiting_moments(sim.w, calc.w)`
111
+ - `print_sojourn_moments(sim.v, calc.v)`
112
+ - `print_raw_moments(sim_moments, calc_moments)`
113
+ - `probs_print(sim.p, calc.p, n_states)`
114
+
115
+ ## Reference tests in this repo
116
+
117
+ | File | What it validates |
118
+ |------|-------------------|
119
+ | `tests/test_mg1_calc.py` | Canonical M/G/1 vs sim � minimal, copy-as-template |
120
+ | `tests/test_gi_m_n_calc.py` | Non-Markovian arrivals (Gamma) |
121
+ | `tests/test_mgn_tt.py` | Takahashi�Takami M/G/n |
122
+ | `tests/test_mg1_warmup.py` | Vacation/warm-up extension to the pattern |
@@ -0,0 +1,3 @@
1
+ # Python Virtual Environment
2
+ Use `./.venv` for Python interpreter and package management.
3
+
@@ -0,0 +1,6 @@
1
+ # Keep GitHub's language statistics meaningful: the repo is a Python library,
2
+ # notebooks and research materials are documentation, not source code.
3
+ *.ipynb linguist-documentation
4
+ docs/** linguist-documentation
5
+ works/** linguist-documentation
6
+ tutorials/** linguist-documentation
@@ -0,0 +1,34 @@
1
+ name: tests
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+
10
+ jobs:
11
+ pytest:
12
+ runs-on: ubuntu-latest
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ python-version: ["3.10", "3.12"]
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - uses: actions/setup-python@v5
21
+ with:
22
+ python-version: ${{ matrix.python-version }}
23
+ cache: pip
24
+
25
+ - name: Install package and test dependencies
26
+ run: |
27
+ python -m pip install -U pip
28
+ python -m pip install -e .
29
+ python -m pip install pytest pytest-rerunfailures
30
+
31
+ - name: Run tests (fast set)
32
+ # --reruns 1: simulation-vs-theory tests are statistical; a single
33
+ # rerun absorbs rare unlucky sample paths without hiding real breakage
34
+ run: pytest tests/ -m "not slow" -q --reruns 1 --only-rerun AssertionError
@@ -162,11 +162,40 @@ cython_debug/
162
162
 
163
163
  .vscode
164
164
 
165
- works/negative_queues/results/*
165
+ # works/negative_queues (article sources, figures, scripts)
166
+ # keep sources in git, ignore generated artifacts and bulky results
167
+ works/negative_queues/*.zip
168
+ works/negative_queues_takahasi_takami_sources.zip
169
+ works/negative_queues/build/
170
+ works/negative_queues/results/
171
+ works/negative_queues/__pycache__/
172
+ works/negative_queues/*.aux
173
+ works/negative_queues/*.bbl
174
+ works/negative_queues/*.bcf
175
+ works/negative_queues/*.blg
176
+ works/negative_queues/*.fdb_latexmk
177
+ works/negative_queues/*.fls
178
+ works/negative_queues/*.log
179
+ works/negative_queues/*.out
180
+ works/negative_queues/*.run.xml
181
+ works/negative_queues/*.synctex.gz
182
+ works/negative_queues/*.toc
183
+ works/negative_queues/**/*.bkp
166
184
 
167
185
  # ignore all png files in tests/units folder
168
186
  tests/units/*.png
169
187
 
188
+ # Generated by examples/srpt_table.py (matplotlib)
189
+ examples/srpt_table.png
190
+
170
191
  # ignore all files in works/vacations/results
171
192
  works/vacations/results/*
172
193
 
194
+ # ignore article about negative queues
195
+ docs/negative_queues_takahasi_takami.md
196
+ docs/negative_queues_figures/
197
+ docs/books/
198
+ docs/статьи/
199
+ works/queueing_systems_review/SRPT/pdf/
200
+ works/experiments/rabbitmq_prefetch/
201
+ works/reviews/
@@ -6,6 +6,7 @@ repos:
6
6
  hooks:
7
7
  - id: check-yaml
8
8
  - id: check-added-large-files
9
+ args: ['--maxkb', '2048'] # allow assets (banner images up to ~2MB)
9
10
  - id: check-json
10
11
  - id: check-toml
11
12