nwp500-python 9.12.2__tar.gz → 9.13.0__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 (412) hide show
  1. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/.github/copilot-instructions.md +3 -0
  2. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/CHANGELOG.rst +1254 -0
  3. {nwp500_python-9.12.2/src/nwp500_python.egg-info → nwp500_python-9.13.0}/PKG-INFO +1 -1
  4. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/explanation/draws.rst +82 -124
  5. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/explanation/heating-elements.rst +6 -2
  6. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/explanation/index.rst +1 -0
  7. nwp500_python-9.13.0/docs/explanation/recovery-speed.rst +534 -0
  8. nwp500_python-9.13.0/docs/explanation/simulator-methodology.rst +955 -0
  9. nwp500_python-9.13.0/docs/explanation/simulator-tried.rst +1600 -0
  10. nwp500_python-9.13.0/docs/explanation/simulator.rst +1472 -0
  11. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/explanation/standby-loss.rst +112 -78
  12. nwp500_python-9.13.0/docs/how-to/calibrate-simulator.rst +687 -0
  13. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/simulate-heater.rst +514 -316
  14. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/python_api/sim.rst +88 -79
  15. nwp500_python-9.13.0/docs/reference/simulator-inputs.rst +1344 -0
  16. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/pyproject.toml +5 -0
  17. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/setup.cfg +2 -0
  18. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/cli/__main__.py +59 -14
  19. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/cli/calibration.py +147 -18
  20. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/cli/simulate.py +48 -45
  21. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/__init__.py +18 -8
  22. nwp500_python-9.13.0/src/nwp500/sim/api.py +2484 -0
  23. nwp500_python-9.13.0/src/nwp500/sim/calibration.py +1682 -0
  24. nwp500_python-9.13.0/src/nwp500/sim/carry.py +492 -0
  25. nwp500_python-9.13.0/src/nwp500/sim/circulation.py +116 -0
  26. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/codec.py +15 -1
  27. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/cold_supply.py +61 -17
  28. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/controller.py +516 -89
  29. nwp500_python-9.13.0/src/nwp500/sim/decay.py +335 -0
  30. nwp500_python-9.13.0/src/nwp500/sim/defaults.py +417 -0
  31. nwp500_python-9.13.0/src/nwp500/sim/delivery.py +394 -0
  32. nwp500_python-9.13.0/src/nwp500/sim/draw_ensemble.py +406 -0
  33. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/draw_forecast.py +15 -10
  34. nwp500_python-9.13.0/src/nwp500/sim/engine.py +1965 -0
  35. nwp500_python-9.13.0/src/nwp500/sim/extensions.py +25 -0
  36. nwp500_python-9.13.0/src/nwp500/sim/heat_pump_fit.py +1016 -0
  37. nwp500_python-9.13.0/src/nwp500/sim/heat_pump_recovery.py +120 -0
  38. nwp500_python-9.13.0/src/nwp500/sim/heating_trajectory.py +97 -0
  39. nwp500_python-9.13.0/src/nwp500/sim/history.py +249 -0
  40. nwp500_python-9.13.0/src/nwp500/sim/history_frame.py +97 -0
  41. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/inputs.py +67 -9
  42. nwp500_python-9.13.0/src/nwp500/sim/margins.py +272 -0
  43. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/params.py +601 -545
  44. nwp500_python-9.13.0/src/nwp500/sim/physics/__init__.py +3 -0
  45. nwp500_python-9.13.0/src/nwp500/sim/physics/draw.py +135 -0
  46. nwp500_python-9.13.0/src/nwp500/sim/physics/element.py +159 -0
  47. nwp500_python-9.13.0/src/nwp500/sim/physics/heat_pump.py +182 -0
  48. nwp500_python-9.13.0/src/nwp500/sim/physics/stratified.py +1440 -0
  49. nwp500_python-9.13.0/src/nwp500/sim/physics/water.py +86 -0
  50. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/profile.py +2 -3
  51. nwp500_python-9.13.0/src/nwp500/sim/ready.py +387 -0
  52. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/record.py +22 -3
  53. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/result.py +74 -21
  54. nwp500_python-9.13.0/src/nwp500/sim/tank_fit.py +898 -0
  55. nwp500_python-9.13.0/src/nwp500/sim/tank_physics.py +891 -0
  56. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/units.py +3 -1
  57. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim_adapters.py +219 -273
  58. nwp500_python-9.13.0/src/nwp500/sim_calibrate.py +1579 -0
  59. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim_home_assistant.py +155 -141
  60. nwp500_python-9.13.0/src/nwp500/sim_score.py +2017 -0
  61. {nwp500_python-9.12.2 → nwp500_python-9.13.0/src/nwp500_python.egg-info}/PKG-INFO +1 -1
  62. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500_python.egg-info/SOURCES.txt +37 -13
  63. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500_python.egg-info/scm_file_list.json +36 -12
  64. nwp500_python-9.13.0/src/nwp500_python.egg-info/scm_version.json +8 -0
  65. nwp500_python-9.13.0/tests/fixtures/sim/circulation_run_2026-10-29.json +3484 -0
  66. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/fixtures/sim/engine_golden.json +65 -65
  67. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/fixtures/sim/heater_params.json +43 -34
  68. nwp500_python-9.13.0/tests/fixtures/sim/heater_params_fitted.json +118 -0
  69. nwp500_python-9.13.0/tests/fixtures/sim/heater_params_two_zone.json +264 -0
  70. nwp500_python-9.13.0/tests/sim_cases.py +186 -0
  71. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_api_endpoints_201.py +1 -0
  72. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_app_queries.py +24 -14
  73. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_auth.py +2 -2
  74. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_ble_mqtt_adapter.py +5 -5
  75. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_ble_protocol.py +4 -7
  76. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_cli_calibrate.py +167 -3
  77. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_cli_commands.py +9 -6
  78. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_cli_simulate.py +107 -55
  79. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_cli_tristate_presentation.py +1 -1
  80. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_command_decorators.py +3 -2
  81. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_device_capabilities.py +4 -1
  82. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_models.py +16 -16
  83. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_mqtt_control_fail.py +9 -8
  84. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_mqtt_last_will.py +14 -15
  85. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_navilink_201_enums.py +18 -10
  86. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_protocol_correctness.py +19 -6
  87. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_api.py +444 -122
  88. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_calibrate.py +588 -645
  89. nwp500_python-9.13.0/tests/test_sim_calibration.py +487 -0
  90. nwp500_python-9.13.0/tests/test_sim_carry.py +978 -0
  91. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_change_history.py +263 -284
  92. nwp500_python-9.13.0/tests/test_sim_circulation.py +715 -0
  93. nwp500_python-9.13.0/tests/test_sim_cold_supply.py +384 -0
  94. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_controller.py +129 -13
  95. nwp500_python-9.13.0/tests/test_sim_correction_top.py +83 -0
  96. nwp500_python-9.13.0/tests/test_sim_defaults.py +313 -0
  97. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_documents.py +2 -8
  98. nwp500_python-9.13.0/tests/test_sim_draw.py +72 -0
  99. nwp500_python-9.13.0/tests/test_sim_draw_duration.py +199 -0
  100. nwp500_python-9.13.0/tests/test_sim_draw_ensemble.py +404 -0
  101. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_draw_forecast.py +4 -2
  102. nwp500_python-9.13.0/tests/test_sim_electric.py +505 -0
  103. nwp500_python-9.13.0/tests/test_sim_element.py +774 -0
  104. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_element_fit.py +10 -14
  105. nwp500_python-9.13.0/tests/test_sim_envelope.py +938 -0
  106. nwp500_python-9.13.0/tests/test_sim_fast_draws.py +112 -0
  107. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_forecast.py +68 -24
  108. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_golden.py +93 -15
  109. nwp500_python-9.13.0/tests/test_sim_heat_pump.py +355 -0
  110. nwp500_python-9.13.0/tests/test_sim_heat_pump_fit.py +680 -0
  111. nwp500_python-9.13.0/tests/test_sim_history.py +237 -0
  112. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_home_assistant.py +5 -1
  113. nwp500_python-9.13.0/tests/test_sim_hot_water.py +583 -0
  114. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_import_contract.py +7 -12
  115. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_live.py +2 -2
  116. nwp500_python-9.13.0/tests/test_sim_margins.py +396 -0
  117. nwp500_python-9.13.0/tests/test_sim_meter_reads.py +386 -0
  118. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_overlay.py +2 -2
  119. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_profile.py +6 -5
  120. nwp500_python-9.13.0/tests/test_sim_readiness.py +278 -0
  121. nwp500_python-9.13.0/tests/test_sim_ready.py +231 -0
  122. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_ready_api.py +244 -196
  123. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_replay.py +2 -15
  124. nwp500_python-9.13.0/tests/test_sim_resume.py +815 -0
  125. nwp500_python-9.13.0/tests/test_sim_score.py +716 -0
  126. nwp500_python-9.13.0/tests/test_sim_score_days.py +568 -0
  127. nwp500_python-9.13.0/tests/test_sim_stratified.py +1135 -0
  128. nwp500_python-9.13.0/tests/test_sim_tank_fit.py +715 -0
  129. nwp500_python-9.13.0/tests/test_sim_tank_physics.py +510 -0
  130. nwp500_python-9.13.0/tests/test_sim_undiluted_share.py +202 -0
  131. nwp500_python-9.13.0/tests/test_sim_walk_cost.py +174 -0
  132. nwp500_python-9.13.0/tests/test_sim_water.py +54 -0
  133. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tox.ini +2 -1
  134. nwp500_python-9.12.2/docs/explanation/recovery-speed.rst +0 -339
  135. nwp500_python-9.12.2/docs/explanation/simulator-methodology.rst +0 -726
  136. nwp500_python-9.12.2/docs/explanation/simulator.rst +0 -422
  137. nwp500_python-9.12.2/docs/how-to/calibrate-simulator.rst +0 -515
  138. nwp500_python-9.12.2/docs/reference/simulator-inputs.rst +0 -1263
  139. nwp500_python-9.12.2/src/nwp500/sim/api.py +0 -1948
  140. nwp500_python-9.12.2/src/nwp500/sim/book.py +0 -1262
  141. nwp500_python-9.12.2/src/nwp500/sim/calibration.py +0 -4002
  142. nwp500_python-9.12.2/src/nwp500/sim/circulation.py +0 -315
  143. nwp500_python-9.12.2/src/nwp500/sim/decay.py +0 -1122
  144. nwp500_python-9.12.2/src/nwp500/sim/defaults.py +0 -228
  145. nwp500_python-9.12.2/src/nwp500/sim/delivery.py +0 -639
  146. nwp500_python-9.12.2/src/nwp500/sim/engine.py +0 -1954
  147. nwp500_python-9.12.2/src/nwp500/sim/extensions.py +0 -187
  148. nwp500_python-9.12.2/src/nwp500/sim/heat_pump_recovery.py +0 -270
  149. nwp500_python-9.12.2/src/nwp500/sim/heating_trajectory.py +0 -344
  150. nwp500_python-9.12.2/src/nwp500/sim/physics/__init__.py +0 -2
  151. nwp500_python-9.12.2/src/nwp500/sim/physics/compressor.py +0 -485
  152. nwp500_python-9.12.2/src/nwp500/sim/physics/draw.py +0 -506
  153. nwp500_python-9.12.2/src/nwp500/sim/physics/element.py +0 -623
  154. nwp500_python-9.12.2/src/nwp500/sim/physics/refrigerant.py +0 -177
  155. nwp500_python-9.12.2/src/nwp500/sim/physics/tank.py +0 -140
  156. nwp500_python-9.12.2/src/nwp500/sim/ready.py +0 -685
  157. nwp500_python-9.12.2/src/nwp500/sim/tank_physics.py +0 -503
  158. nwp500_python-9.12.2/src/nwp500/sim_calibrate.py +0 -1823
  159. nwp500_python-9.12.2/src/nwp500_python.egg-info/scm_version.json +0 -8
  160. nwp500_python-9.12.2/tests/_sim_site.py +0 -124
  161. nwp500_python-9.12.2/tests/fixtures/sim/heater_params_fitted.json +0 -71
  162. nwp500_python-9.12.2/tests/test_sim_book.py +0 -598
  163. nwp500_python-9.12.2/tests/test_sim_book_history.py +0 -1289
  164. nwp500_python-9.12.2/tests/test_sim_bottom_loss.py +0 -678
  165. nwp500_python-9.12.2/tests/test_sim_calibration.py +0 -888
  166. nwp500_python-9.12.2/tests/test_sim_circulation.py +0 -550
  167. nwp500_python-9.12.2/tests/test_sim_cold_supply.py +0 -122
  168. nwp500_python-9.12.2/tests/test_sim_defaults.py +0 -206
  169. nwp500_python-9.12.2/tests/test_sim_draw_loss.py +0 -337
  170. nwp500_python-9.12.2/tests/test_sim_element.py +0 -869
  171. nwp500_python-9.12.2/tests/test_sim_evaporator.py +0 -59
  172. nwp500_python-9.12.2/tests/test_sim_fit_book.py +0 -757
  173. nwp500_python-9.12.2/tests/test_sim_hot_water.py +0 -706
  174. nwp500_python-9.12.2/tests/test_sim_readiness.py +0 -692
  175. nwp500_python-9.12.2/tests/test_sim_readiness_fit.py +0 -334
  176. nwp500_python-9.12.2/tests/test_sim_ready.py +0 -424
  177. nwp500_python-9.12.2/tests/test_sim_tank_physics.py +0 -184
  178. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/.coveragerc +0 -0
  179. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/.github/RESOLVING_PR_COMMENTS.md +0 -0
  180. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/.github/workflows/ci.yml +0 -0
  181. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/.github/workflows/release.yml +0 -0
  182. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/.gitignore +0 -0
  183. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/.pre-commit-config.yaml +0 -0
  184. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/.readthedocs.yml +0 -0
  185. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/AUTHORS.rst +0 -0
  186. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/CONTRIBUTING.rst +0 -0
  187. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/LICENSE.txt +0 -0
  188. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/Makefile +0 -0
  189. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/README.rst +0 -0
  190. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/RELEASE.md +0 -0
  191. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/Makefile +0 -0
  192. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/_static/.gitignore +0 -0
  193. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/_static/light-page.js +0 -0
  194. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/conf.py +0 -0
  195. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/explanation/architecture.rst +0 -0
  196. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/explanation/tank-energy.rst +0 -0
  197. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/explanation/tou-recovery-cap.rst +0 -0
  198. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/explanation/unknown-values.rst +0 -0
  199. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/explanation/what-starts-a-recovery.rst +0 -0
  200. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/authenticate.rst +0 -0
  201. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/auto-recovery.rst +0 -0
  202. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/bluetooth.rst +0 -0
  203. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/diagnose-mqtt.rst +0 -0
  204. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/home-assistant.rst +0 -0
  205. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/index.rst +0 -0
  206. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/maintenance.rst +0 -0
  207. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/manage-units.rst +0 -0
  208. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/monitor-status.rst +0 -0
  209. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/optimize-tou.rst +0 -0
  210. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/queue-commands.rst +0 -0
  211. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/schedule-operation.rst +0 -0
  212. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/how-to/track-energy.rst +0 -0
  213. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/index.rst +0 -0
  214. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/openapi.yaml +0 -0
  215. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/project/authors.rst +0 -0
  216. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/project/changelog.rst +0 -0
  217. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/project/contributing.rst +0 -0
  218. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/project/history.rst +0 -0
  219. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/project/license.rst +0 -0
  220. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/configuration.rst +0 -0
  221. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/enumerations.rst +0 -0
  222. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/index.rst +0 -0
  223. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/installation.rst +0 -0
  224. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/protocol/data_conversions.rst +0 -0
  225. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/protocol/device_features.rst +0 -0
  226. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/protocol/device_status.rst +0 -0
  227. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/protocol/error_codes.rst +0 -0
  228. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/protocol/mqtt_protocol.rst +0 -0
  229. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/protocol/quick_reference.rst +0 -0
  230. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/protocol/rest_api.rst +0 -0
  231. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/python_api/api_client.rst +0 -0
  232. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/python_api/auth_client.rst +0 -0
  233. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/python_api/cli.rst +0 -0
  234. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/python_api/events.rst +0 -0
  235. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/python_api/exceptions.rst +0 -0
  236. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/python_api/models.rst +0 -0
  237. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/reference/python_api/mqtt_client.rst +0 -0
  238. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/requirements.txt +0 -0
  239. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/docs/tutorials/getting-started.rst +0 -0
  240. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/.ruff.toml +0 -0
  241. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/README.md +0 -0
  242. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/air_filter_reset.py +0 -0
  243. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/anti_legionella.py +0 -0
  244. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/auto_recovery.py +0 -0
  245. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/combined_callbacks.py +0 -0
  246. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/demand_response.py +0 -0
  247. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/device_capabilities.py +0 -0
  248. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/device_status_debug.py +0 -0
  249. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/energy_analytics.py +0 -0
  250. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/error_code_demo.py +0 -0
  251. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/firmware_payload_capture.py +0 -0
  252. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/mqtt_diagnostics.py +0 -0
  253. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/power_control.py +0 -0
  254. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/recirculation_control.py +0 -0
  255. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/reconnection_demo.py +0 -0
  256. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/reservation_schedule.py +0 -0
  257. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/simple_auto_recovery.py +0 -0
  258. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/token_restoration.py +0 -0
  259. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/tou_openei.py +0 -0
  260. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/tou_schedule.py +0 -0
  261. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/advanced/water_reservation.py +0 -0
  262. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/beginner/01_authentication.py +0 -0
  263. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/beginner/02_list_devices.py +0 -0
  264. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/beginner/03_get_status.py +0 -0
  265. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/beginner/04_set_temperature.py +0 -0
  266. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/intermediate/advanced_auth_patterns.py +0 -0
  267. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/intermediate/command_queue.py +0 -0
  268. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/intermediate/device_status_callback.py +0 -0
  269. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/intermediate/error_handling.py +0 -0
  270. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/intermediate/event_driven_control.py +0 -0
  271. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/intermediate/improved_auth.py +0 -0
  272. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/intermediate/legacy_auth_constructor.py +0 -0
  273. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/intermediate/mqtt_realtime_monitoring.py +0 -0
  274. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/intermediate/periodic_requests.py +0 -0
  275. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/intermediate/set_mode.py +0 -0
  276. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/intermediate/vacation_mode.py +0 -0
  277. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/mask.py +0 -0
  278. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/simulator/lower-setpoint.json +0 -0
  279. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/simulator/plan.json +0 -0
  280. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/simulator/scenario.json +0 -0
  281. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/testing/periodic_device_info.py +0 -0
  282. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/testing/simple_periodic_info.py +0 -0
  283. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/testing/test_api_client.py +0 -0
  284. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/testing/test_mqtt_connection.py +0 -0
  285. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/testing/test_mqtt_messaging.py +0 -0
  286. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/examples/testing/test_periodic_minimal.py +0 -0
  287. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/scripts/README.md +0 -0
  288. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/scripts/bump_version.py +0 -0
  289. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/scripts/diagnose_mqtt_connection.py +0 -0
  290. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/scripts/extract_changelog.py +0 -0
  291. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/scripts/format.py +0 -0
  292. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/scripts/lint.py +0 -0
  293. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/scripts/setup-dev.py +0 -0
  294. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/scripts/validate_version.py +0 -0
  295. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/__init__.py +0 -0
  296. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/_base.py +0 -0
  297. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/api_client.py +0 -0
  298. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/auth.py +0 -0
  299. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/ble/__init__.py +0 -0
  300. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/ble/__main__.py +0 -0
  301. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/ble/client.py +0 -0
  302. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/ble/mqtt_adapter.py +0 -0
  303. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/ble/protocol.py +0 -0
  304. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/cli/__init__.py +0 -0
  305. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/cli/ble_backend.py +0 -0
  306. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/cli/handlers.py +0 -0
  307. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/cli/monitoring.py +0 -0
  308. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/cli/output_formatters.py +0 -0
  309. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/cli/presentation.py +0 -0
  310. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/cli/recording.py +0 -0
  311. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/cli/rich_output.py +0 -0
  312. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/cli/token_storage.py +0 -0
  313. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/command_decorators.py +0 -0
  314. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/config.py +0 -0
  315. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/converters.py +0 -0
  316. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/device_capabilities.py +0 -0
  317. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/device_info_cache.py +0 -0
  318. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/encoding.py +0 -0
  319. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/enums.py +0 -0
  320. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/events.py +0 -0
  321. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/exceptions.py +0 -0
  322. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/factory.py +0 -0
  323. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/field_factory.py +0 -0
  324. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/__init__.py +0 -0
  325. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/_converters.py +0 -0
  326. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/account.py +0 -0
  327. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/device.py +0 -0
  328. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/diagnostics.py +0 -0
  329. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/energy.py +0 -0
  330. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/feature.py +0 -0
  331. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/firmware.py +0 -0
  332. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/maintenance.py +0 -0
  333. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/mqtt_models.py +0 -0
  334. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/schedule.py +0 -0
  335. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/status.py +0 -0
  336. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/models/tou.py +0 -0
  337. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/__init__.py +0 -0
  338. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/_control_commands.py +0 -0
  339. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/_device_subscriptions.py +0 -0
  340. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/client.py +0 -0
  341. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/command_queue.py +0 -0
  342. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/connection.py +0 -0
  343. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/control.py +0 -0
  344. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/diagnostics.py +0 -0
  345. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/periodic.py +0 -0
  346. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/reconnection.py +0 -0
  347. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/state_tracker.py +0 -0
  348. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/subscriptions.py +0 -0
  349. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/types.py +0 -0
  350. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt/utils.py +0 -0
  351. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/mqtt_events.py +0 -0
  352. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/openei.py +0 -0
  353. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/py.typed +0 -0
  354. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/reservations.py +0 -0
  355. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/attribution.py +0 -0
  356. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/location_air.py +0 -0
  357. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/observed.py +0 -0
  358. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/schedules.py +0 -0
  359. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim/tou_triggers.py +0 -0
  360. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/sim_live.py +0 -0
  361. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/status_history.py +0 -0
  362. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/temperature.py +0 -0
  363. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/topic_builder.py +0 -0
  364. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/tou_schedule.py +0 -0
  365. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/unit_system.py +0 -0
  366. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500/utils.py +0 -0
  367. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500_python.egg-info/dependency_links.txt +0 -0
  368. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500_python.egg-info/entry_points.txt +0 -0
  369. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500_python.egg-info/not-zip-safe +0 -0
  370. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500_python.egg-info/requires.txt +0 -0
  371. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/src/nwp500_python.egg-info/top_level.txt +0 -0
  372. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/conftest.py +0 -0
  373. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_api_helpers.py +0 -0
  374. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_auth_session_lifecycle.py +0 -0
  375. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_auth_session_refresh.py +0 -0
  376. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_bug_fixes.py +0 -0
  377. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_canonical_schedule.py +0 -0
  378. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_cli_basic.py +0 -0
  379. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_command_queue.py +0 -0
  380. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_device_info_cache.py +0 -0
  381. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_device_rest_models.py +0 -0
  382. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_events.py +0 -0
  383. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_exceptions.py +0 -0
  384. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_model_converters.py +0 -0
  385. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_mqtt_clean_session_resume.py +0 -0
  386. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_mqtt_client_init.py +0 -0
  387. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_mqtt_events.py +0 -0
  388. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_mqtt_hypothesis.py +0 -0
  389. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_mqtt_reconnection.py +0 -0
  390. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_mqtt_reconnection_storm.py +0 -0
  391. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_mqtt_reliability.py +0 -0
  392. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_multi_device.py +0 -0
  393. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_openei.py +0 -0
  394. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_public_api.py +0 -0
  395. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_reservation_validation.py +0 -0
  396. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_reservations.py +0 -0
  397. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_adapters.py +0 -0
  398. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_codec.py +0 -0
  399. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_location_air.py +0 -0
  400. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_no_clock_no_state.py +0 -0
  401. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_observed.py +0 -0
  402. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_sim_schedules.py +0 -0
  403. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_status_history.py +0 -0
  404. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_temperature_converters.py +0 -0
  405. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_threading_model.py +0 -0
  406. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_token_storage.py +0 -0
  407. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_tou_api.py +0 -0
  408. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_tou_schedule.py +0 -0
  409. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_unit_switching.py +0 -0
  410. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_unit_system_process_wide.py +0 -0
  411. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_utility_modules.py +0 -0
  412. {nwp500_python-9.12.2 → nwp500_python-9.13.0}/tests/test_utils.py +0 -0
@@ -221,6 +221,9 @@ Removed
221
221
  - **aiohttp**: Used for async HTTP requests to the Navien API
222
222
  - **pydantic**: Used for data validation and models
223
223
 
224
+ ## Simulator Changes Tried and Dropped
225
+ Before changing the simulator's physics or its fitted defaults (`src/nwp500/sim/`), read `docs/explanation/simulator-tried.rst`: the changes already built or measured against the record and not kept (24 layers, a winter heat-map refit, a frost derate, a room node, a running-probe offset, an imposed start hold), what the record said, and where each is written up. When a change you try is not kept, add it there.
226
+
224
227
  ## Key Files & Directories
225
228
  - `src/nwp500/` - Main library code
226
229
  - `examples/` - Example scripts for API and MQTT usage