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