idfkit 0.6.4__tar.gz → 0.7.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 (668) hide show
  1. {idfkit-0.6.4 → idfkit-0.7.0}/.vscode/settings.json +7 -0
  2. {idfkit-0.6.4 → idfkit-0.7.0}/AGENTS.md +1 -1
  3. {idfkit-0.6.4 → idfkit-0.7.0}/PKG-INFO +1 -1
  4. idfkit-0.7.0/docs/api/migration.md +119 -0
  5. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/simulation/results.md +1 -0
  6. {idfkit-0.6.4 → idfkit-0.7.0}/docs/concepts/version-compatibility.md +9 -0
  7. {idfkit-0.6.4 → idfkit-0.7.0}/docs/getting-started/quick-start.md +1 -0
  8. {idfkit-0.6.4 → idfkit-0.7.0}/docs/index.md +2 -0
  9. {idfkit-0.6.4 → idfkit-0.7.0}/docs/simulation/async.md +10 -1
  10. {idfkit-0.6.4 → idfkit-0.7.0}/docs/simulation/errors.md +23 -0
  11. idfkit-0.7.0/docs/simulation/migrating-versions.md +86 -0
  12. {idfkit-0.6.4 → idfkit-0.7.0}/docs/simulation/running.md +13 -0
  13. idfkit-0.7.0/docs/snippets/migration_versions/auto_migrate_simulate.py +20 -0
  14. idfkit-0.7.0/docs/snippets/migration_versions/quick_start.py +22 -0
  15. {idfkit-0.6.4 → idfkit-0.7.0}/docs/troubleshooting/errors.md +34 -1
  16. {idfkit-0.6.4 → idfkit-0.7.0}/mkdocs.yml +2 -0
  17. {idfkit-0.6.4 → idfkit-0.7.0}/pyproject.toml +3 -1
  18. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/__init__.py +10 -0
  19. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/exceptions.py +95 -14
  20. idfkit-0.7.0/src/idfkit/migration/__init__.py +64 -0
  21. idfkit-0.7.0/src/idfkit/migration/async_runner.py +308 -0
  22. idfkit-0.7.0/src/idfkit/migration/async_subprocess_backend.py +140 -0
  23. idfkit-0.7.0/src/idfkit/migration/chain.py +72 -0
  24. idfkit-0.7.0/src/idfkit/migration/diff.py +126 -0
  25. idfkit-0.7.0/src/idfkit/migration/progress.py +45 -0
  26. idfkit-0.7.0/src/idfkit/migration/protocol.py +95 -0
  27. idfkit-0.7.0/src/idfkit/migration/report.py +151 -0
  28. idfkit-0.7.0/src/idfkit/migration/runner.py +322 -0
  29. idfkit-0.7.0/src/idfkit/migration/subprocess_backend.py +174 -0
  30. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/_common.py +87 -0
  31. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/async_runner.py +22 -3
  32. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/config.py +60 -3
  33. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/result.py +5 -0
  34. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/runner.py +24 -3
  35. {idfkit-0.6.4 → idfkit-0.7.0}/tests/schedules/test_compact.py +305 -1
  36. {idfkit-0.6.4 → idfkit-0.7.0}/tests/schedules/test_day.py +238 -4
  37. idfkit-0.7.0/tests/schedules/test_evaluate.py +681 -0
  38. {idfkit-0.6.4 → idfkit-0.7.0}/tests/schedules/test_file.py +202 -0
  39. {idfkit-0.6.4 → idfkit-0.7.0}/tests/schedules/test_holidays.py +161 -0
  40. {idfkit-0.6.4 → idfkit-0.7.0}/tests/schedules/test_series.py +13 -0
  41. {idfkit-0.6.4 → idfkit-0.7.0}/tests/schedules/test_week.py +130 -38
  42. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_basic.py +61 -1
  43. idfkit-0.7.0/tests/test_codegen.py +634 -0
  44. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_compat_cli.py +314 -3
  45. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_compat_diff.py +81 -0
  46. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_compat_extract.py +90 -0
  47. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_docs.py +57 -0
  48. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_document.py +493 -1
  49. idfkit-0.7.0/tests/test_download.py +323 -0
  50. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_exceptions.py +159 -0
  51. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_expand.py +12 -0
  52. idfkit-0.7.0/tests/test_geometry.py +2500 -0
  53. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_geometry_builders.py +223 -1
  54. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_idf_roundtrip.py +339 -1
  55. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_introspection.py +138 -5
  56. idfkit-0.7.0/tests/test_migration_async_runner.py +268 -0
  57. idfkit-0.7.0/tests/test_migration_chain.py +47 -0
  58. idfkit-0.7.0/tests/test_migration_config.py +80 -0
  59. idfkit-0.7.0/tests/test_migration_diff.py +66 -0
  60. idfkit-0.7.0/tests/test_migration_e2e.py +74 -0
  61. idfkit-0.7.0/tests/test_migration_exceptions.py +59 -0
  62. idfkit-0.7.0/tests/test_migration_report.py +59 -0
  63. idfkit-0.7.0/tests/test_migration_runner.py +205 -0
  64. idfkit-0.7.0/tests/test_migration_subprocess_backend.py +139 -0
  65. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_objects.py +224 -0
  66. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_parsers.py +103 -0
  67. idfkit-0.7.0/tests/test_schema.py +720 -0
  68. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_async.py +345 -2
  69. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_batch.py +31 -2
  70. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_cache.py +23 -0
  71. idfkit-0.7.0/tests/test_simulation_config.py +353 -0
  72. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_csv_parser.py +25 -0
  73. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_err_parser.py +59 -0
  74. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_fs.py +312 -1
  75. idfkit-0.7.0/tests/test_simulation_html_parser.py +309 -0
  76. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_plotting.py +482 -0
  77. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_progress.py +34 -2
  78. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_progress_bars.py +23 -2
  79. idfkit-0.7.0/tests/test_simulation_result.py +620 -0
  80. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_runner.py +59 -11
  81. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_sql_parser.py +110 -0
  82. idfkit-0.7.0/tests/test_simulation_version_mismatch.py +80 -0
  83. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_thermal.py +87 -0
  84. idfkit-0.7.0/tests/test_validation.py +515 -0
  85. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_visualization.py +178 -0
  86. idfkit-0.7.0/tests/test_visualization_model.py +1509 -0
  87. idfkit-0.7.0/tests/test_weather_designday.py +518 -0
  88. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_weather_download.py +108 -25
  89. idfkit-0.7.0/tests/test_weather_index.py +767 -0
  90. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_weather_station.py +12 -0
  91. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_writers.py +315 -0
  92. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_zoning.py +210 -0
  93. {idfkit-0.6.4 → idfkit-0.7.0}/uv.lock +2 -0
  94. idfkit-0.6.4/tests/schedules/test_evaluate.py +0 -292
  95. idfkit-0.6.4/tests/test_geometry.py +0 -571
  96. idfkit-0.6.4/tests/test_schema.py +0 -265
  97. idfkit-0.6.4/tests/test_simulation_config.py +0 -189
  98. idfkit-0.6.4/tests/test_simulation_result.py +0 -278
  99. idfkit-0.6.4/tests/test_validation.py +0 -213
  100. idfkit-0.6.4/tests/test_visualization_model.py +0 -532
  101. idfkit-0.6.4/tests/test_weather_designday.py +0 -278
  102. idfkit-0.6.4/tests/test_weather_index.py +0 -415
  103. {idfkit-0.6.4 → idfkit-0.7.0}/.devcontainer/devcontainer.json +0 -0
  104. {idfkit-0.6.4 → idfkit-0.7.0}/.devcontainer/postCreateCommand.sh +0 -0
  105. {idfkit-0.6.4 → idfkit-0.7.0}/.github/actions/setup-python-env/action.yml +0 -0
  106. {idfkit-0.6.4 → idfkit-0.7.0}/.github/workflows/deploy-docs.yml +0 -0
  107. {idfkit-0.6.4 → idfkit-0.7.0}/.github/workflows/deploy-pr-docs.yml +0 -0
  108. {idfkit-0.6.4 → idfkit-0.7.0}/.github/workflows/main.yml +0 -0
  109. {idfkit-0.6.4 → idfkit-0.7.0}/.github/workflows/on-release-main.yml +0 -0
  110. {idfkit-0.6.4 → idfkit-0.7.0}/.github/workflows/validate-codecov-config.yml +0 -0
  111. {idfkit-0.6.4 → idfkit-0.7.0}/.gitignore +0 -0
  112. {idfkit-0.6.4 → idfkit-0.7.0}/.pre-commit-config.yaml +0 -0
  113. {idfkit-0.6.4 → idfkit-0.7.0}/.pre-commit-hooks.yaml +0 -0
  114. {idfkit-0.6.4 → idfkit-0.7.0}/.python-version +0 -0
  115. {idfkit-0.6.4 → idfkit-0.7.0}/.vscode/extensions.json +0 -0
  116. {idfkit-0.6.4 → idfkit-0.7.0}/CLAUDE.md +0 -0
  117. {idfkit-0.6.4 → idfkit-0.7.0}/CONTRIBUTING.md +0 -0
  118. {idfkit-0.6.4 → idfkit-0.7.0}/LICENSE +0 -0
  119. {idfkit-0.6.4 → idfkit-0.7.0}/Makefile +0 -0
  120. {idfkit-0.6.4 → idfkit-0.7.0}/README.md +0 -0
  121. {idfkit-0.6.4 → idfkit-0.7.0}/benchmarks/bench.py +0 -0
  122. {idfkit-0.6.4 → idfkit-0.7.0}/benchmarks/bench_progress.py +0 -0
  123. {idfkit-0.6.4 → idfkit-0.7.0}/benchmarks/bench_typecheckers.py +0 -0
  124. {idfkit-0.6.4 → idfkit-0.7.0}/benchmarks/profile_overloads.py +0 -0
  125. {idfkit-0.6.4 → idfkit-0.7.0}/benchmarks/profile_stubs.py +0 -0
  126. {idfkit-0.6.4 → idfkit-0.7.0}/benchmarks/progress_benchmark_results.json +0 -0
  127. {idfkit-0.6.4 → idfkit-0.7.0}/codecov.yaml +0 -0
  128. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/document.md +0 -0
  129. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/exceptions.md +0 -0
  130. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/geometry.md +0 -0
  131. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/geometry_builders.md +0 -0
  132. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/io.md +0 -0
  133. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/objects.md +0 -0
  134. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/references.md +0 -0
  135. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/schedules/index.md +0 -0
  136. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/schema.md +0 -0
  137. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/simulation/async.md +0 -0
  138. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/simulation/batch.md +0 -0
  139. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/simulation/cache.md +0 -0
  140. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/simulation/expand.md +0 -0
  141. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/simulation/fs.md +0 -0
  142. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/simulation/index.md +0 -0
  143. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/simulation/plotting.md +0 -0
  144. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/simulation/runner.md +0 -0
  145. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/simulation/sql.md +0 -0
  146. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/thermal.md +0 -0
  147. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/validation.md +0 -0
  148. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/versions.md +0 -0
  149. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/visualization.md +0 -0
  150. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/weather/designday.md +0 -0
  151. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/weather/download.md +0 -0
  152. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/weather/index.md +0 -0
  153. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/weather/station.md +0 -0
  154. {idfkit-0.6.4 → idfkit-0.7.0}/docs/api/zoning.md +0 -0
  155. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark.svg +0 -0
  156. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_add_objects.svg +0 -0
  157. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_add_objects_dark.svg +0 -0
  158. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_dark.svg +0 -0
  159. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_get_by_name.svg +0 -0
  160. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_get_by_name_dark.svg +0 -0
  161. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_get_by_type.svg +0 -0
  162. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_get_by_type_dark.svg +0 -0
  163. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_load_idf.svg +0 -0
  164. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_load_idf_dark.svg +0 -0
  165. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_modify_fields.svg +0 -0
  166. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_modify_fields_dark.svg +0 -0
  167. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_write_idf.svg +0 -0
  168. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/benchmark_write_idf_dark.svg +0 -0
  169. {idfkit-0.6.4 → idfkit-0.7.0}/docs/assets/construction-svg-example.svg +0 -0
  170. {idfkit-0.6.4 → idfkit-0.7.0}/docs/benchmarks.md +0 -0
  171. {idfkit-0.6.4 → idfkit-0.7.0}/docs/concepts/caching.md +0 -0
  172. {idfkit-0.6.4 → idfkit-0.7.0}/docs/concepts/cloud-storage.md +0 -0
  173. {idfkit-0.6.4 → idfkit-0.7.0}/docs/concepts/logging.md +0 -0
  174. {idfkit-0.6.4 → idfkit-0.7.0}/docs/concepts/simulation-architecture.md +0 -0
  175. {idfkit-0.6.4 → idfkit-0.7.0}/docs/concepts/type-safety.md +0 -0
  176. {idfkit-0.6.4 → idfkit-0.7.0}/docs/concepts/weather-pipeline.md +0 -0
  177. {idfkit-0.6.4 → idfkit-0.7.0}/docs/design/schedule-evaluator.md +0 -0
  178. {idfkit-0.6.4 → idfkit-0.7.0}/docs/examples/celery-integration.md +0 -0
  179. {idfkit-0.6.4 → idfkit-0.7.0}/docs/examples/cloud-simulations.md +0 -0
  180. {idfkit-0.6.4 → idfkit-0.7.0}/docs/examples/parametric-study.ipynb +0 -0
  181. {idfkit-0.6.4 → idfkit-0.7.0}/docs/examples/scythe.md +0 -0
  182. {idfkit-0.6.4 → idfkit-0.7.0}/docs/examples/sizing-workflow.ipynb +0 -0
  183. {idfkit-0.6.4 → idfkit-0.7.0}/docs/getting-started/core-tutorial.ipynb +0 -0
  184. {idfkit-0.6.4 → idfkit-0.7.0}/docs/getting-started/installation.md +0 -0
  185. {idfkit-0.6.4 → idfkit-0.7.0}/docs/idfkit-dev-guide.md +0 -0
  186. {idfkit-0.6.4 → idfkit-0.7.0}/docs/migration.md +0 -0
  187. {idfkit-0.6.4 → idfkit-0.7.0}/docs/overrides/.gitkeep +0 -0
  188. {idfkit-0.6.4 → idfkit-0.7.0}/docs/overrides/main.html +0 -0
  189. {idfkit-0.6.4 → idfkit-0.7.0}/docs/robots.txt +0 -0
  190. {idfkit-0.6.4 → idfkit-0.7.0}/docs/schedules/index.md +0 -0
  191. {idfkit-0.6.4 → idfkit-0.7.0}/docs/simulation/batch.md +0 -0
  192. {idfkit-0.6.4 → idfkit-0.7.0}/docs/simulation/caching.md +0 -0
  193. {idfkit-0.6.4 → idfkit-0.7.0}/docs/simulation/index.md +0 -0
  194. {idfkit-0.6.4 → idfkit-0.7.0}/docs/simulation/output-discovery.md +0 -0
  195. {idfkit-0.6.4 → idfkit-0.7.0}/docs/simulation/plotting.md +0 -0
  196. {idfkit-0.6.4 → idfkit-0.7.0}/docs/simulation/progress.md +0 -0
  197. {idfkit-0.6.4 → idfkit-0.7.0}/docs/simulation/results.md +0 -0
  198. {idfkit-0.6.4 → idfkit-0.7.0}/docs/simulation/sql-queries.md +0 -0
  199. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/caching/cache_location.py +0 -0
  200. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/caching/cache_management.py +0 -0
  201. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/caching/disabling_caching.py +0 -0
  202. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/caching/parallel_safety.py +0 -0
  203. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/caching/simulation_cache.py +0 -0
  204. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/caching/weather_file_cache.py +0 -0
  205. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/cloud-storage/1_local_preparation.py +0 -0
  206. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/cloud-storage/2_cloud_execution.py +0 -0
  207. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/cloud-storage/3_result_collection.py +0 -0
  208. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/cloud-storage/authentication.py +0 -0
  209. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/cloud-storage/implementing_custom_backends.py +0 -0
  210. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/cloud-storage/key_prefixes.py +0 -0
  211. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/cloud-storage/lazy_loading.py +0 -0
  212. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/cloud-storage/local_caching.py +0 -0
  213. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/cloud-storage/localfilesystem.py +0 -0
  214. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/cloud-storage/s3_compatible_services.py +0 -0
  215. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/cloud-storage/s3filesystem.py +0 -0
  216. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/cloud-storage/the_filesystem_protocol.py +0 -0
  217. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/logging/app_integration.py +0 -0
  218. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/logging/basic_setup.py +0 -0
  219. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/logging/debug_simulation.py +0 -0
  220. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/logging/django_integration.py +0 -0
  221. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/logging/file_handler.py +0 -0
  222. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/logging/silence.py +0 -0
  223. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/logging/structured_logging.py +0 -0
  224. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/logging/targeted_loggers.py +0 -0
  225. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/simulation-architecture/concurrent_execution.py +0 -0
  226. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/simulation-architecture/energyplus_discovery.py +0 -0
  227. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/simulation-architecture/lazy_loading.py +0 -0
  228. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/simulation-architecture/model_immutability.py +0 -0
  229. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/simulation-architecture/sqlite_over_eso.py +0 -0
  230. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/simulation-architecture/streaming.py +0 -0
  231. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/simulation-architecture/subprocess_execution.py +0 -0
  232. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/type-safety/autocomplete.py +0 -0
  233. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/type-safety/get_collection.py +0 -0
  234. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/type-safety/strict_fields.py +0 -0
  235. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/type-safety/version_info.py +0 -0
  236. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/weather-pipeline/ashrae_standards.py +0 -0
  237. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/weather-pipeline/bundled_index_no_dependencies.py +0 -0
  238. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/weather-pipeline/live_refresh_requires_openpyxl.py +0 -0
  239. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/weather-pipeline/spatial_search.py +0 -0
  240. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/weather-pipeline/spatial_search_2.py +0 -0
  241. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/concepts/weather-pipeline/wmo_numbers.py +0 -0
  242. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/1_holidays.py +0 -0
  243. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/2_design_days.py +0 -0
  244. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/4_schedulefile_support.py +0 -0
  245. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/4_schedulefile_support_2.py +0 -0
  246. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/4_schedulefile_support_3.py +0 -0
  247. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/batch_evaluation.py +0 -0
  248. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/convenience_on_idfdocument.py +0 -0
  249. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/core_function.py +0 -0
  250. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/error_handling.py +0 -0
  251. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/example_test.py +0 -0
  252. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/filesystem_integration.py +0 -0
  253. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/hierarchical_schedule_resolution.py +0 -0
  254. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/pandas_integration_optional.py +0 -0
  255. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/parsing_strategy.py +0 -0
  256. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/scheduledayhourly.py +0 -0
  257. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/design/schedule-evaluator/scheduledayinterval.py +0 -0
  258. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/celeryconfig.py +0 -0
  259. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/chain_workflow.py +0 -0
  260. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/docker_compose.py +0 -0
  261. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/dockerfile.py +0 -0
  262. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/poll_progress.py +0 -0
  263. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/project_layout.py +0 -0
  264. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/submit_batch.py +0 -0
  265. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/submit_parametric.py +0 -0
  266. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/submit_single.py +0 -0
  267. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/tasks_basic.py +0 -0
  268. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/tasks_parametric.py +0 -0
  269. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/tasks_with_cache.py +0 -0
  270. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/tasks_with_progress.py +0 -0
  271. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/tasks_with_retry.py +0 -0
  272. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/celery-integration/tasks_with_s3.py +0 -0
  273. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/cloud-simulations/basic_s3_usage.py +0 -0
  274. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/cloud-simulations/batch_downloads.py +0 -0
  275. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/cloud-simulations/batch_processing_with_s3.py +0 -0
  276. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/cloud-simulations/digitalocean_spaces.py +0 -0
  277. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/cloud-simulations/localstack.py +0 -0
  278. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/cloud-simulations/minimize_s3_round_trips.py +0 -0
  279. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/cloud-simulations/minio.py +0 -0
  280. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/cloud-simulations/step_1_create_jobs_locally.py +0 -0
  281. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/cloud-simulations/step_2_run_on_cloud_workers.py +0 -0
  282. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/cloud-simulations/step_3_collect_results.py +0 -0
  283. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/cloud-simulations/weather_file_handling.py +0 -0
  284. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/scythe/allocate.py +0 -0
  285. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/scythe/docker_worker.py +0 -0
  286. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/scythe/experiment_function.py +0 -0
  287. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/scythe/input_output_specs.py +0 -0
  288. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/scythe/weather_prep.py +0 -0
  289. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/examples/scythe/worker.py +0 -0
  290. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/installation/verify_installation.py +0 -0
  291. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/quick-start/apply_design_days.py +0 -0
  292. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/quick-start/create_a_new_model.py +0 -0
  293. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/quick-start/discover_available_fields.py +0 -0
  294. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/quick-start/discover_available_fields_3.py +0 -0
  295. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/quick-start/find_weather_stations.py +0 -0
  296. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/quick-start/load_a_model.py +0 -0
  297. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/quick-start/lossless_roundtrip.py +0 -0
  298. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/quick-start/modify_fields.py +0 -0
  299. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/quick-start/query_objects.py +0 -0
  300. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/quick-start/query_results.py +0 -0
  301. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/quick-start/run_a_simulation.py +0 -0
  302. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/getting-started/quick-start/write_output.py +0 -0
  303. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/index/find_weather_stations.py +0 -0
  304. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/index/quick_example.py +0 -0
  305. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/index/run_simulations.py +0 -0
  306. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/accessing_fields.py +0 -0
  307. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/accessing_fields_2.py +0 -0
  308. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/batch_updates.py +0 -0
  309. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/batch_updates_2.py +0 -0
  310. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/building_transforms.py +0 -0
  311. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/creating_objects.py +0 -0
  312. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/creating_objects_2.py +0 -0
  313. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/creating_objects_3.py +0 -0
  314. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/finding_referring_objects.py +0 -0
  315. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/finding_referring_objects_2.py +0 -0
  316. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/following_references.py +0 -0
  317. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/following_references_2.py +0 -0
  318. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/geometry.py +0 -0
  319. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/html_tabular_output.py +0 -0
  320. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/html_tabular_output_2.py +0 -0
  321. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/html_tabular_output_3.py +0 -0
  322. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/intersect_match.py +0 -0
  323. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/intersect_match_2.py +0 -0
  324. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/loading_a_file.py +0 -0
  325. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/loading_a_file_2.py +0 -0
  326. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/loading_a_file_3.py +0 -0
  327. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/output_formatting_modes.py +0 -0
  328. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/output_formatting_modes_2.py +0 -0
  329. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/range_checking.py +0 -0
  330. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/range_checking_2.py +0 -0
  331. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/reference_tracking_new_in_idfkit.py +0 -0
  332. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/removing_objects_by_index.py +0 -0
  333. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/removing_objects_by_index_2.py +0 -0
  334. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/renaming_with_cascading_updates_new_in_idfkit.py +0 -0
  335. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/running_a_simulation.py +0 -0
  336. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/running_a_simulation_2.py +0 -0
  337. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/running_a_simulation_3.py +0 -0
  338. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/saving_files.py +0 -0
  339. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/saving_files_2.py +0 -0
  340. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/saving_files_3.py +0 -0
  341. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/set_wwr.py +0 -0
  342. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/set_wwr_2.py +0 -0
  343. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/strict_mode.py +0 -0
  344. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/migration/validation_new_in_idfkit.py +0 -0
  345. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/schedules/index/design_day_evaluation.py +0 -0
  346. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/schedules/index/example_analyze_office_occupancy.py +0 -0
  347. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/schedules/index/holiday_support.py +0 -0
  348. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/schedules/index/interpolation.py +0 -0
  349. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/schedules/index/pandas_integration.py +0 -0
  350. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/schedules/index/quick_start.py +0 -0
  351. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/schedules/index/schedulefile_with_remote_storage.py +0 -0
  352. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/schedules/index/sub_hourly_timesteps.py +0 -0
  353. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/async/async_batch_processing.py +0 -0
  354. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/async/basic_usage.py +0 -0
  355. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/async/cancellation.py +0 -0
  356. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/async/collecting_streaming_results.py +0 -0
  357. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/async/early_termination.py +0 -0
  358. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/async/fastapi_integration.py +0 -0
  359. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/async/parametric_study.py +0 -0
  360. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/async/running_simulations_alongside_other_async_work.py +0 -0
  361. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/async/streaming_progress.py +0 -0
  362. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/batch/basic_usage.py +0 -0
  363. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/batch/batchresult.py +0 -0
  364. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/batch/caching.py +0 -0
  365. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/batch/cloud_storage.py +0 -0
  366. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/batch/error_handling.py +0 -0
  367. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/batch/parametric_studies.py +0 -0
  368. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/batch/progress_callbacks.py +0 -0
  369. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/batch/rich_progress_bar.py +0 -0
  370. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/batch/simulationjob.py +0 -0
  371. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/batch/worker_count.py +0 -0
  372. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/caching/basic_usage.py +0 -0
  373. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/caching/batch_processing.py +0 -0
  374. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/caching/cache_key_computation.py +0 -0
  375. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/caching/check_for_hit.py +0 -0
  376. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/caching/cleanup.py +0 -0
  377. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/caching/clear_cache.py +0 -0
  378. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/caching/custom_location.py +0 -0
  379. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/caching/disabling_caching.py +0 -0
  380. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/caching/manual_getput.py +0 -0
  381. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/caching/thread_and_process_safety.py +0 -0
  382. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/1_check_the_error_report_first.py +0 -0
  383. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/2_examine_raw_output.py +0 -0
  384. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/3_run_design_day_first.py +0 -0
  385. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/4_validate_before_simulation.py +0 -0
  386. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/batch_error_handling.py +0 -0
  387. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/by_severity.py +0 -0
  388. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/error_counts.py +0 -0
  389. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/error_report.py +0 -0
  390. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/error_report_from_file.py +0 -0
  391. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/error_report_from_file_2.py +0 -0
  392. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/non_exception_failures.py +0 -0
  393. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/simulation_exceptions.py +0 -0
  394. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/summary.py +0 -0
  395. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/errors/timeout_handling.py +0 -0
  396. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/index/lazy_loading.py +0 -0
  397. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/index/model_safety.py +0 -0
  398. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/index/parallel_execution.py +0 -0
  399. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/index/quick_start.py +0 -0
  400. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/index/requirements.py +0 -0
  401. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/output-discovery/add_all_matching.py +0 -0
  402. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/output-discovery/basic_usage.py +0 -0
  403. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/output-discovery/creating_an_index.py +0 -0
  404. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/output-discovery/creating_an_index_2.py +0 -0
  405. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/output-discovery/filter_by_units.py +0 -0
  406. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/output-discovery/list_all_variables.py +0 -0
  407. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/output-discovery/reporting_frequencies.py +0 -0
  408. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/output-discovery/search_variables.py +0 -0
  409. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/output-discovery/selective_addition.py +0 -0
  410. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/output-discovery/workflow_discover_then_request.py +0 -0
  411. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/auto_detection.py +0 -0
  412. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/basic_usage.py +0 -0
  413. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/basic_usage_2.py +0 -0
  414. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/comfort_hours.py +0 -0
  415. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/customization.py +0 -0
  416. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/customization_2.py +0 -0
  417. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/dataframe_integration.py +0 -0
  418. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/different_variables.py +0 -0
  419. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/energy_balance.py +0 -0
  420. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/explicit_backend.py +0 -0
  421. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/matplotlib.py +0 -0
  422. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/plotbackend_protocol.py +0 -0
  423. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/plotly.py +0 -0
  424. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/quick_start.py +0 -0
  425. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/same_variable_multiple_keys.py +0 -0
  426. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/temperature_profile.py +0 -0
  427. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/plotting/time_series_plotting.py +0 -0
  428. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/async_batch_with_stream_progress.py +0 -0
  429. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/async_callbacks.py +0 -0
  430. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/batch_progress_bar_with_tqdm.py +0 -0
  431. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/cloud_execution.py +0 -0
  432. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/cloud_execution_2.py +0 -0
  433. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/cloud_logging_aws_cloudwatch_gcp_cloud_logging.py +0 -0
  434. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/cloud_logging_aws_cloudwatch_gcp_cloud_logging_2.py +0 -0
  435. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/customising_the_tqdm_bar.py +0 -0
  436. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/dual_progress_tracking.py +0 -0
  437. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/fastapi_websocket.py +0 -0
  438. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/jupyter_ipywidgets.py +0 -0
  439. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/one_liner.py +0 -0
  440. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/quick_start.py +0 -0
  441. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/quick_start_2.py +0 -0
  442. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/rich_console.py +0 -0
  443. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/rich_console_2.py +0 -0
  444. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/server_sent_events_sse.py +0 -0
  445. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/simple_console_log.py +0 -0
  446. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/structured_logging.py +0 -0
  447. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/using_progressparser_directly.py +0 -0
  448. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/progress/websocket_forwarding.py +0 -0
  449. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/results/csv_output.py +0 -0
  450. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/results/error_report.py +0 -0
  451. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/results/html_tabular_output.py +0 -0
  452. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/results/html_tabular_output_2.py +0 -0
  453. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/results/lazy_loading.py +0 -0
  454. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/results/output_file_paths.py +0 -0
  455. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/results/output_variables.py +0 -0
  456. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/results/reconstructing_from_directory.py +0 -0
  457. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/results/simulationresult_overview.py +0 -0
  458. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/results/sql_database.py +0 -0
  459. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/annual_simulation.py +0 -0
  460. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/automatic_temporary_directory.py +0 -0
  461. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/basic_usage.py +0 -0
  462. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/caching.py +0 -0
  463. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/checking_success.py +0 -0
  464. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/cloud_storage.py +0 -0
  465. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/default_mode.py +0 -0
  466. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/design_day_only.py +0 -0
  467. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/energyplus_discovery.py +0 -0
  468. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/expanding_hvac_templates.py +0 -0
  469. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/explicit_directory.py +0 -0
  470. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/extra_arguments.py +0 -0
  471. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/ground_heat_transfer_slab_basement.py +0 -0
  472. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/model_safety.py +0 -0
  473. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/output_suffix_modes.py +0 -0
  474. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/simulation_errors.py +0 -0
  475. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/running/timeout.py +0 -0
  476. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/basic_query.py +0 -0
  477. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/context_manager.py +0 -0
  478. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/converting_to_dataframe.py +0 -0
  479. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/energyplus_time_convention.py +0 -0
  480. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/error_handling.py +0 -0
  481. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/filter_by_table.py +0 -0
  482. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/filtering_by_environment.py +0 -0
  483. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/list_available_variables.py +0 -0
  484. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/list_environments.py +0 -0
  485. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/opening_the_database_2.py +0 -0
  486. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/plotting_time_series.py +0 -0
  487. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/query_tabular_reports.py +0 -0
  488. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/simulation/sql-queries/search_variables.py +0 -0
  489. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/all_design_days.py +0 -0
  490. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/ashrae_621_ventilation.py +0 -0
  491. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/ashrae_901_energy_standard.py +0 -0
  492. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/basic_application.py +0 -0
  493. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/basic_usage.py +0 -0
  494. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/by_type.py +0 -0
  495. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/complete_workflow.py +0 -0
  496. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/error_handling.py +0 -0
  497. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/location_object.py +0 -0
  498. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/quick_apply.py +0 -0
  499. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/skip_site_location_update.py +0 -0
  500. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/summary_output.py +0 -0
  501. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/design-days/with_wet_bulb_design_day.py +0 -0
  502. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/downloads/basic_usage.py +0 -0
  503. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/downloads/batch_downloads.py +0 -0
  504. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/downloads/caching.py +0 -0
  505. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/downloads/clear_cache.py +0 -0
  506. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/downloads/custom_cache_directory.py +0 -0
  507. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/downloads/download_by_filename.py +0 -0
  508. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/downloads/error_handling.py +0 -0
  509. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/downloads/integration_example.py +0 -0
  510. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/downloads/offline_usage.py +0 -0
  511. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/downloads/weatherfiles.py +0 -0
  512. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/geocoding/address_formats.py +0 -0
  513. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/geocoding/alternative_direct_coordinates.py +0 -0
  514. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/geocoding/basic_usage.py +0 -0
  515. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/geocoding/caching_results.py +0 -0
  516. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/geocoding/complete_workflow.py +0 -0
  517. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/geocoding/error_handling.py +0 -0
  518. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/geocoding/rate_limiting.py +0 -0
  519. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/geocoding/with_station_search.py +0 -0
  520. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/index/address_based_search.py +0 -0
  521. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/index/ashrae_design_days.py +0 -0
  522. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/index/installation.py +0 -0
  523. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/index/installation_2.py +0 -0
  524. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/index/quick_start.py +0 -0
  525. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/index/workflow_example.py +0 -0
  526. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/station-search/filter_by_coordinates.py +0 -0
  527. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/station-search/filter_by_country.py +0 -0
  528. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/station-search/get_by_filename.py +0 -0
  529. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/station-search/get_by_wmo_number.py +0 -0
  530. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/station-search/listing_countries.py +0 -0
  531. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/station-search/loading_the_index.py +0 -0
  532. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/station-search/refreshing_the_index.py +0 -0
  533. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/station-search/search_by_address.py +0 -0
  534. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/station-search/search_by_coordinates.py +0 -0
  535. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/station-search/search_by_filename.py +0 -0
  536. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/station-search/search_by_name.py +0 -0
  537. {idfkit-0.6.4 → idfkit-0.7.0}/docs/snippets/weather/station-search/search_tips.py +0 -0
  538. {idfkit-0.6.4 → idfkit-0.7.0}/docs/stylesheets/extra.css +0 -0
  539. {idfkit-0.6.4 → idfkit-0.7.0}/docs/troubleshooting/energyplus.md +0 -0
  540. {idfkit-0.6.4 → idfkit-0.7.0}/docs/weather/design-days.md +0 -0
  541. {idfkit-0.6.4 → idfkit-0.7.0}/docs/weather/downloads.md +0 -0
  542. {idfkit-0.6.4 → idfkit-0.7.0}/docs/weather/geocoding.md +0 -0
  543. {idfkit-0.6.4 → idfkit-0.7.0}/docs/weather/index.md +0 -0
  544. {idfkit-0.6.4 → idfkit-0.7.0}/docs/weather/station-search.md +0 -0
  545. {idfkit-0.6.4 → idfkit-0.7.0}/scripts/build_docs.sh +0 -0
  546. {idfkit-0.6.4 → idfkit-0.7.0}/scripts/build_weather_index.py +0 -0
  547. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/_compat.py +0 -0
  548. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/_compat_object.py +0 -0
  549. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/_generated_types.pyi +0 -0
  550. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/codegen/__init__.py +0 -0
  551. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/codegen/generate_doc_locations.py +0 -0
  552. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/codegen/generate_stubs.py +0 -0
  553. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/compat/__init__.py +0 -0
  554. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/compat/_checker.py +0 -0
  555. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/compat/_cli.py +0 -0
  556. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/compat/_diff.py +0 -0
  557. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/compat/_extract.py +0 -0
  558. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/compat/_models.py +0 -0
  559. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/compat/_sarif.py +0 -0
  560. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/cst.py +0 -0
  561. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/docs.py +0 -0
  562. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/document.py +0 -0
  563. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/document.pyi +0 -0
  564. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/download.py +0 -0
  565. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/epjson_parser.py +0 -0
  566. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/geometry.py +0 -0
  567. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/geometry_builders.py +0 -0
  568. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/idf_parser.py +0 -0
  569. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/introspection.py +0 -0
  570. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/objects.py +0 -0
  571. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/py.typed +0 -0
  572. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/references.py +0 -0
  573. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/__init__.py +0 -0
  574. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/builder.py +0 -0
  575. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/compact.py +0 -0
  576. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/day.py +0 -0
  577. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/day_types.py +0 -0
  578. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/evaluate.py +0 -0
  579. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/file.py +0 -0
  580. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/holidays.py +0 -0
  581. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/series.py +0 -0
  582. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/time_utils.py +0 -0
  583. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/types.py +0 -0
  584. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/week.py +0 -0
  585. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schedules/year.py +0 -0
  586. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schema.py +0 -0
  587. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V22-1-0/Energy+.schema.epJSON.gz +0 -0
  588. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V22-2-0/Energy+.schema.epJSON.gz +0 -0
  589. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V23-1-0/Energy+.schema.epJSON.gz +0 -0
  590. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V23-2-0/Energy+.schema.epJSON.gz +0 -0
  591. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V24-1-0/Energy+.schema.epJSON.gz +0 -0
  592. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V24-2-0/Energy+.schema.epJSON.gz +0 -0
  593. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V25-1-0/Energy+.schema.epJSON.gz +0 -0
  594. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V25-2-0/Energy+.schema.epJSON.gz +0 -0
  595. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V8-9-0/Energy+.schema.epJSON.gz +0 -0
  596. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V9-0-1/Energy+.schema.epJSON.gz +0 -0
  597. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V9-1-0/Energy+.schema.epJSON.gz +0 -0
  598. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V9-2-0/Energy+.schema.epJSON.gz +0 -0
  599. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V9-3-0/Energy+.schema.epJSON.gz +0 -0
  600. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V9-4-0/Energy+.schema.epJSON.gz +0 -0
  601. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V9-5-0/Energy+.schema.epJSON.gz +0 -0
  602. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/V9-6-0/Energy+.schema.epJSON.gz +0 -0
  603. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/schemas/doc_locations.json +0 -0
  604. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/__init__.py +0 -0
  605. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/async_batch.py +0 -0
  606. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/batch.py +0 -0
  607. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/cache.py +0 -0
  608. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/expand.py +0 -0
  609. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/fs.py +0 -0
  610. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/outputs.py +0 -0
  611. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/parsers/__init__.py +0 -0
  612. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/parsers/csv.py +0 -0
  613. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/parsers/err.py +0 -0
  614. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/parsers/html.py +0 -0
  615. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/parsers/rdd.py +0 -0
  616. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/parsers/sql.py +0 -0
  617. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/plotting/__init__.py +0 -0
  618. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/plotting/matplotlib.py +0 -0
  619. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/plotting/plotly.py +0 -0
  620. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/plotting/visualizations.py +0 -0
  621. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/progress.py +0 -0
  622. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/simulation/progress_bars.py +0 -0
  623. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/thermal/__init__.py +0 -0
  624. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/thermal/gas.py +0 -0
  625. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/thermal/properties.py +0 -0
  626. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/validation.py +0 -0
  627. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/versions.py +0 -0
  628. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/visualization/__init__.py +0 -0
  629. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/visualization/model.py +0 -0
  630. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/visualization/svg.py +0 -0
  631. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/weather/__init__.py +0 -0
  632. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/weather/data/stations.json.gz +0 -0
  633. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/weather/designday.py +0 -0
  634. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/weather/download.py +0 -0
  635. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/weather/geocode.py +0 -0
  636. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/weather/index.py +0 -0
  637. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/weather/spatial.py +0 -0
  638. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/weather/station.py +0 -0
  639. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/writers.py +0 -0
  640. {idfkit-0.6.4 → idfkit-0.7.0}/src/idfkit/zoning.py +0 -0
  641. {idfkit-0.6.4 → idfkit-0.7.0}/tests/conftest.py +0 -0
  642. {idfkit-0.6.4 → idfkit-0.7.0}/tests/fixtures/simulation/sample.csv +0 -0
  643. {idfkit-0.6.4 → idfkit-0.7.0}/tests/fixtures/simulation/sample.err +0 -0
  644. {idfkit-0.6.4 → idfkit-0.7.0}/tests/fixtures/simulation/sample.mdd +0 -0
  645. {idfkit-0.6.4 → idfkit-0.7.0}/tests/fixtures/simulation/sample.rdd +0 -0
  646. {idfkit-0.6.4 → idfkit-0.7.0}/tests/fixtures/simulation/sample_fatal.err +0 -0
  647. {idfkit-0.6.4 → idfkit-0.7.0}/tests/fixtures/weather/empty.ddy +0 -0
  648. {idfkit-0.6.4 → idfkit-0.7.0}/tests/fixtures/weather/sample.ddy +0 -0
  649. {idfkit-0.6.4 → idfkit-0.7.0}/tests/schedules/__init__.py +0 -0
  650. {idfkit-0.6.4 → idfkit-0.7.0}/tests/schedules/test_day_types.py +0 -0
  651. {idfkit-0.6.4 → idfkit-0.7.0}/tests/schedules/test_time_utils.py +0 -0
  652. {idfkit-0.6.4 → idfkit-0.7.0}/tests/schedules/test_types.py +0 -0
  653. {idfkit-0.6.4 → idfkit-0.7.0}/tests/schedules/test_year.py +0 -0
  654. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_epjson_roundtrip.py +0 -0
  655. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_eppy_compat.py +0 -0
  656. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_logging.py +0 -0
  657. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_references.py +0 -0
  658. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_roundtrip.py +0 -0
  659. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_schedule_builder.py +0 -0
  660. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_e2e.py +0 -0
  661. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_outputs.py +0 -0
  662. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_prep_outputs.py +0 -0
  663. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_simulation_rdd_parser.py +0 -0
  664. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_strict_typing.py +0 -0
  665. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_versions.py +0 -0
  666. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_weather_geocode.py +0 -0
  667. {idfkit-0.6.4 → idfkit-0.7.0}/tests/test_weather_spatial.py +0 -0
  668. {idfkit-0.6.4 → idfkit-0.7.0}/tox.ini +0 -0
@@ -22,5 +22,12 @@
22
22
  "tag:yaml.org,2002:python/name:material.extensions.emoji.twemoji",
23
23
  "tag:yaml.org,2002:python/name:pymdownx.superfences.fence_code_format",
24
24
  "tag:yaml.org,2002:python/object/apply:pymdownx.slugs.slugify mapping"
25
+ ],
26
+ "python-envs.pythonProjects": [
27
+ {
28
+ "path": ".",
29
+ "envManager": "ms-python.python:venv",
30
+ "packageManager": "ms-python.python:pip"
31
+ }
25
32
  ]
26
33
  }
@@ -177,7 +177,7 @@ idfkit searches for EnergyPlus in this order (see `src/idfkit/simulation/config.
177
177
  4. Platform default directories (newest version first):
178
178
  - Linux: `~/.local/EnergyPlus-*`, `~/EnergyPlus-*`, `/usr/local/EnergyPlus-*`, `/opt/EnergyPlus-*`
179
179
  - macOS: `~/Applications/EnergyPlus-*`, `/Applications/EnergyPlus-*`
180
- - Windows: `%ProgramFiles%/EnergyPlus-*`
180
+ - Windows: `%ProgramFiles%/EnergyPlus-*`, `%SystemDrive%\EnergyPlusV*` (e.g. `C:\EnergyPlusV25-2-0`)
181
181
 
182
182
  ### Verifying the Installation
183
183
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: idfkit
3
- Version: 0.6.4
3
+ Version: 0.7.0
4
4
  Summary: A fast, modern EnergyPlus IDF/epJSON parser with O(1) lookups and reference tracking
5
5
  Project-URL: Homepage, https://py.idfkit.com/
6
6
  Project-URL: Repository, https://github.com/idfkit/idfkit
@@ -0,0 +1,119 @@
1
+ # Migration API
2
+
3
+ Forward-migrate IDF models across EnergyPlus versions by orchestrating the
4
+ `Transition-VX-to-VY` binaries shipped in `PreProcess/IDFVersionUpdater`.
5
+
6
+ ## migrate
7
+
8
+ ::: idfkit.migration.runner.migrate
9
+ options:
10
+ show_root_heading: true
11
+ show_source: true
12
+
13
+ ## async_migrate
14
+
15
+ ::: idfkit.migration.async_runner.async_migrate
16
+ options:
17
+ show_root_heading: true
18
+ show_source: true
19
+
20
+ ## MigrationReport
21
+
22
+ ::: idfkit.migration.report.MigrationReport
23
+ options:
24
+ show_root_heading: true
25
+ show_source: true
26
+ members:
27
+ - migrated_model
28
+ - source_version
29
+ - target_version
30
+ - requested_target
31
+ - steps
32
+ - diff
33
+ - success
34
+ - completed_steps
35
+ - failed_step
36
+ - summary
37
+
38
+ ## MigrationStep
39
+
40
+ ::: idfkit.migration.report.MigrationStep
41
+ options:
42
+ show_root_heading: true
43
+ show_source: true
44
+
45
+ ## MigrationDiff
46
+
47
+ ::: idfkit.migration.report.MigrationDiff
48
+ options:
49
+ show_root_heading: true
50
+ show_source: true
51
+ members:
52
+ - added_object_types
53
+ - removed_object_types
54
+ - object_count_delta
55
+ - field_changes
56
+ - is_empty
57
+
58
+ ## FieldDelta
59
+
60
+ ::: idfkit.migration.report.FieldDelta
61
+ options:
62
+ show_root_heading: true
63
+ show_source: true
64
+
65
+ ## MigrationProgress
66
+
67
+ ::: idfkit.migration.progress.MigrationProgress
68
+ options:
69
+ show_root_heading: true
70
+ show_source: true
71
+
72
+ ## Migrator
73
+
74
+ ::: idfkit.migration.protocol.Migrator
75
+ options:
76
+ show_root_heading: true
77
+ show_source: true
78
+
79
+ ## AsyncMigrator
80
+
81
+ ::: idfkit.migration.protocol.AsyncMigrator
82
+ options:
83
+ show_root_heading: true
84
+ show_source: true
85
+
86
+ ## MigrationStepResult
87
+
88
+ ::: idfkit.migration.protocol.MigrationStepResult
89
+ options:
90
+ show_root_heading: true
91
+ show_source: true
92
+
93
+ ## SubprocessMigrator
94
+
95
+ ::: idfkit.migration.subprocess_backend.SubprocessMigrator
96
+ options:
97
+ show_root_heading: true
98
+ show_source: true
99
+
100
+ ## AsyncSubprocessMigrator
101
+
102
+ ::: idfkit.migration.async_subprocess_backend.AsyncSubprocessMigrator
103
+ options:
104
+ show_root_heading: true
105
+ show_source: true
106
+
107
+ ## plan_migration_chain
108
+
109
+ ::: idfkit.migration.chain.plan_migration_chain
110
+ options:
111
+ show_root_heading: true
112
+ show_source: true
113
+
114
+ ## document_diff
115
+
116
+ ::: idfkit.migration.diff.document_diff
117
+ options:
118
+ show_root_heading: true
119
+ show_source: true
@@ -30,6 +30,7 @@ Simulation result container and output file access.
30
30
  - html_path
31
31
  - rdd_path
32
32
  - mdd_path
33
+ - migration_report
33
34
  - from_directory
34
35
 
35
36
  ## ErrorReport
@@ -9,6 +9,15 @@ The linter parses Python source files using the AST (no code execution) and
9
9
  compares extracted string literals against the bundled epJSON schemas for
10
10
  different EnergyPlus versions.
11
11
 
12
+ !!! tip "Static linting vs. runtime migration"
13
+ The compatibility linter described here flags cross-version breakage
14
+ *statically* — it tells you which lines of your code reference object
15
+ types or choice values that won't exist in another EnergyPlus version.
16
+ To actually upgrade an existing IDF model, see
17
+ [Migrating Versions](../simulation/migrating-versions.md), which uses
18
+ `idfkit.migrate()` to forward-migrate models through the
19
+ `IDFVersionUpdater` transition binaries.
20
+
12
21
  ## What it detects
13
22
 
14
23
  | Code | Description |
@@ -105,5 +105,6 @@ unmodified objects:
105
105
 
106
106
  - [Core Tutorial](core-tutorial.ipynb) - Complete interactive walkthrough
107
107
  - [Simulation Guide](../simulation/index.md) - Deep dive into simulation features
108
+ - [Migrating Versions](../simulation/migrating-versions.md) - Move models forward across EnergyPlus releases
108
109
  - [Weather Guide](../weather/index.md) - Weather station search and design days
109
110
  - [API Reference](../api/document.md) - Full API documentation
@@ -49,6 +49,7 @@ pip install idfkit
49
49
  <span class="chip">:material-play-circle-outline: Simulation</span>
50
50
  <span class="chip">:material-weather-cloudy: Weather data</span>
51
51
  <span class="chip">:material-history: v8.9 -- v25.2</span>
52
+ <span class="chip">:material-update: Version migration</span>
52
53
 
53
54
  </div>
54
55
 
@@ -134,5 +135,6 @@ pip install idfkit
134
135
  |------|-------------|
135
136
  | [Core Tutorial](getting-started/core-tutorial.ipynb) | Interactive notebook covering basic, advanced, and expert usage |
136
137
  | [Migrating from eppy](migration.md) | Side-by-side comparison of eppy and idfkit APIs |
138
+ | [Migrating Versions](simulation/migrating-versions.md) | Forward-migrate IDF models across EnergyPlus releases |
137
139
  | [Benchmarks](benchmarks.md) | Performance comparison against eppy and other tools |
138
140
  | [Troubleshooting](troubleshooting/errors.md) | Common errors and solutions |
@@ -27,6 +27,10 @@ returns the same `SimulationResult`. The only difference is that EnergyPlus
27
27
  runs as an `asyncio` subprocess, so the event loop is free to do other work
28
28
  while waiting.
29
29
 
30
+ The `auto_migrate` flag and `result.migration_report` work identically to
31
+ the sync API. For pure async migration without simulating, see
32
+ [`async_migrate()`][idfkit.migration.async_runner.async_migrate].
33
+
30
34
  ## Async Batch Processing
31
35
 
32
36
  `async_simulate_batch()` mirrors `simulate_batch()` but uses an
@@ -194,10 +198,14 @@ don't block the event loop. This is transparent — no user action required.
194
198
  Error handling is identical to the sync API:
195
199
 
196
200
  ```python
197
- from idfkit.exceptions import SimulationError
201
+ from idfkit.exceptions import SimulationError, VersionMismatchError
198
202
 
199
203
  try:
200
204
  result = await async_simulate(model, weather, timeout=60)
205
+ except VersionMismatchError as e:
206
+ # Retry with auto_migrate, or migrate explicitly first.
207
+ print(f"Model is {e.current}, need {e.target}")
208
+ result = await async_simulate(model, weather, timeout=60, auto_migrate=True)
201
209
  except SimulationError as e:
202
210
  if e.exit_code is None:
203
211
  print("Simulation timed out")
@@ -212,4 +220,5 @@ never raises due to a single job failing.
212
220
 
213
221
  - [Running Simulations](running.md) — Sync simulation guide
214
222
  - [Batch Processing](batch.md) — Sync batch guide
223
+ - [Migrating Versions](migrating-versions.md) — Forward-migrate models with `auto_migrate` or `async_migrate`
215
224
  - [Simulation Architecture](../concepts/simulation-architecture.md) — Design decisions
@@ -67,6 +67,28 @@ The `simulate()` function raises `SimulationError` for certain failures:
67
67
  | EnergyPlus not found | `EnergyPlusNotFoundError` |
68
68
  | Timeout exceeded | `SimulationError` (exit_code=None) |
69
69
  | OS error starting process | `SimulationError` |
70
+ | Model version differs from installed EnergyPlus | `VersionMismatchError` |
71
+
72
+ ### Version Mismatch
73
+
74
+ By default `simulate()` refuses to run when `model.version` doesn't match
75
+ the installed EnergyPlus version, raising
76
+ [`VersionMismatchError`][idfkit.exceptions.VersionMismatchError] with a
77
+ suggested migration chain. Two ways to resolve it:
78
+
79
+ ```python
80
+ # Option A: let simulate() forward-migrate transparently
81
+ result = simulate(model, weather, auto_migrate=True)
82
+ print(result.migration_report.summary())
83
+
84
+ # Option B: migrate explicitly first, inspect the report, then simulate
85
+ from idfkit import migrate
86
+ report = migrate(model, target_version=(25, 2, 0))
87
+ result = simulate(report.migrated_model, weather)
88
+ ```
89
+
90
+ Backward migration (installed EnergyPlus older than the model) is never
91
+ attempted and always raises. See [Migrating Versions](migrating-versions.md).
70
92
 
71
93
  ### Timeout Handling
72
94
 
@@ -179,4 +201,5 @@ Or from string:
179
201
 
180
202
  - [Running Simulations](running.md) — Basic simulation guide
181
203
  - [Parsing Results](results.md) — Working with SimulationResult
204
+ - [Migrating Versions](migrating-versions.md) — Resolving `VersionMismatchError`
182
205
  - [Troubleshooting](../troubleshooting/errors.md) — Common error solutions
@@ -0,0 +1,86 @@
1
+ # Migrating Versions
2
+
3
+ EnergyPlus ships a new release roughly twice a year, and each release can
4
+ rename objects, drop fields, or alter defaults. idfkit's
5
+ [`migrate()`][idfkit.migration.runner.migrate] orchestrates the
6
+ `Transition-VX-to-VY` binaries shipped in `PreProcess/IDFVersionUpdater` to
7
+ forward-migrate an IDF model across one or more version steps in a single
8
+ call.
9
+
10
+ There are two ways to migrate a model:
11
+
12
+ | Approach | When to use |
13
+ |----------|-------------|
14
+ | Explicit `migrate(model, target_version=...)` | You want to inspect the migrated model, the structural diff, or per-step diagnostics before doing anything else. |
15
+ | `simulate(model, ..., auto_migrate=True)` | You want to run a simulation against the installed EnergyPlus and don't care about the intermediate steps. |
16
+
17
+ !!! note "Forward only"
18
+ EnergyPlus does not ship reverse transition binaries. Asking to migrate
19
+ *backwards* (target older than source) always raises
20
+ [`VersionMismatchError`][idfkit.exceptions.VersionMismatchError] with
21
+ `direction == "backward"`.
22
+
23
+ ## Explicit Migration
24
+
25
+ Call [`migrate()`][idfkit.migration.runner.migrate] directly when you need
26
+ the migrated [`IDFDocument`][idfkit.document.IDFDocument] in hand:
27
+
28
+ ```python
29
+ --8<-- "docs/snippets/migration_versions/quick_start.py:example"
30
+ ```
31
+
32
+ The returned [`MigrationReport`][idfkit.migration.report.MigrationReport]
33
+ exposes:
34
+
35
+ | Attribute | Description |
36
+ |-----------|-------------|
37
+ | `migrated_model` | The migrated `IDFDocument` (`None` on a no-op migration where source equals target). |
38
+ | `source_version` / `target_version` | The version range actually traversed. |
39
+ | `requested_target` | The version originally requested — differs from `target_version` only on partial failures. |
40
+ | `steps` | Ordered tuple of [`MigrationStep`][idfkit.migration.report.MigrationStep] records with stdout/stderr/audit per binary invocation. |
41
+ | `diff` | Structural [`MigrationDiff`][idfkit.migration.report.MigrationDiff] — added/removed object types, count deltas, and per-type field changes. |
42
+ | `success` | `True` only when every step succeeded. |
43
+ | `summary()` | Short human-readable summary suitable for logs or CLI. |
44
+
45
+ ## Transparent Migration During `simulate()`
46
+
47
+ When you only want a simulation result, pass `auto_migrate=True` and
48
+ `simulate()` will forward-migrate the model on your behalf if the
49
+ installed EnergyPlus version differs:
50
+
51
+ ```python
52
+ --8<-- "docs/snippets/migration_versions/auto_migrate_simulate.py:example"
53
+ ```
54
+
55
+ The resulting [`SimulationResult.migration_report`][idfkit.simulation.result.SimulationResult.migration_report]
56
+ is populated whenever a migration ran, and `None` otherwise. Without
57
+ `auto_migrate=True`, a version mismatch raises
58
+ [`VersionMismatchError`][idfkit.exceptions.VersionMismatchError] before the
59
+ simulation starts.
60
+
61
+ ## Async Migration
62
+
63
+ Both APIs have async counterparts with identical semantics:
64
+
65
+ - [`async_migrate()`][idfkit.migration.async_runner.async_migrate] — non-blocking
66
+ equivalent of `migrate()`, useful inside FastAPI handlers or other async
67
+ contexts where you want only the migration.
68
+ - [`async_simulate(..., auto_migrate=True)`][idfkit.simulation.async_runner.async_simulate]
69
+ — accepts the same `auto_migrate` flag and populates `migration_report`
70
+ on the returned `SimulationResult`.
71
+
72
+ ## Partial Failures
73
+
74
+ If a transition step fails midway,
75
+ [`MigrationError`][idfkit.exceptions.MigrationError] is raised. The
76
+ exception carries `from_version`, `to_version`, the binary's `exit_code`
77
+ and `stderr`, and `completed_steps` — the prefix of `(from, to)` pairs that
78
+ ran successfully — so you can recover partial progress or report exactly
79
+ which transition broke.
80
+
81
+ ## See Also
82
+
83
+ - [Migration API](../api/migration.md) — full reference for `migrate`, `MigrationReport`, and the `Migrator` protocol.
84
+ - [Version Compatibility](../concepts/version-compatibility.md) — the *static* `idfkit check` linter for catching cross-version breakage in your code before you migrate.
85
+ - [Running Simulations](running.md) — full `simulate()` parameter reference.
86
+ - [Error Handling](errors.md) — handling `VersionMismatchError` from `simulate()`.
@@ -105,6 +105,7 @@ def simulate(
105
105
  cache: SimulationCache | None = None,
106
106
  fs: FileSystem | None = None,
107
107
  on_progress: Callable[[SimulationProgress], Any] | Literal["tqdm"] | None = None,
108
+ auto_migrate: bool = False,
108
109
  ) -> SimulationResult:
109
110
  ```
110
111
 
@@ -134,6 +135,7 @@ def simulate(
134
135
  | `cache` | `None` | Simulation cache for result reuse |
135
136
  | `fs` | `None` | File system backend for cloud storage |
136
137
  | `on_progress` | `None` | Callback or `"tqdm"` for real-time progress updates |
138
+ | `auto_migrate` | `False` | Forward-migrate the model when its version differs from the installed EnergyPlus (see [Migrating Versions](migrating-versions.md)) |
137
139
 
138
140
  ## EnergyPlus Discovery
139
141
 
@@ -240,8 +242,19 @@ Enable content-addressed caching to avoid redundant simulations:
240
242
 
241
243
  See [Caching](caching.md) for details.
242
244
 
245
+ ## Version Migration
246
+
247
+ When `model.version` differs from the installed EnergyPlus,
248
+ `simulate()` raises [`VersionMismatchError`][idfkit.exceptions.VersionMismatchError]
249
+ by default. Pass `auto_migrate=True` to forward-migrate the model
250
+ transparently before the run; the resulting
251
+ [`MigrationReport`][idfkit.migration.report.MigrationReport] is attached to
252
+ [`SimulationResult.migration_report`][idfkit.simulation.result.SimulationResult.migration_report].
253
+ See [Migrating Versions](migrating-versions.md) for the full workflow.
254
+
243
255
  ## See Also
244
256
 
257
+ - [Migrating Versions](migrating-versions.md) — Forward-migrate IDF models across EnergyPlus releases
245
258
  - [Progress Tracking](progress.md) — Real-time progress with `on_progress`
246
259
  - [Parsing Results](results.md) — Working with `SimulationResult`
247
260
  - [Batch Processing](batch.md) — Running multiple simulations
@@ -0,0 +1,20 @@
1
+ from __future__ import annotations
2
+
3
+ from idfkit import IDFDocument
4
+ from idfkit.simulation import SimulationResult
5
+
6
+ model: IDFDocument = ... # type: ignore[assignment]
7
+ result: SimulationResult = ... # type: ignore[assignment]
8
+ # --8<-- [start:example]
9
+ from idfkit import load_idf
10
+ from idfkit.simulation import simulate
11
+
12
+ # Forward-migrate the model transparently before running.
13
+ model = load_idf("old_building.idf")
14
+ result = simulate(model, "weather.epw", design_day=True, auto_migrate=True)
15
+
16
+ if result.migration_report is not None:
17
+ print(result.migration_report.summary())
18
+
19
+ print(f"Simulation success: {result.success}")
20
+ # --8<-- [end:example]
@@ -0,0 +1,22 @@
1
+ from __future__ import annotations
2
+
3
+ from idfkit import IDFDocument, MigrationReport
4
+
5
+ model: IDFDocument = ... # type: ignore[assignment]
6
+ report: MigrationReport = ... # type: ignore[assignment]
7
+ # --8<-- [start:example]
8
+ from idfkit import load_idf, migrate
9
+ from idfkit.simulation import find_energyplus
10
+
11
+ # Load an older IDF (e.g. v22.1.0) and migrate to the installed EnergyPlus.
12
+ model = load_idf("old_building.idf")
13
+ config = find_energyplus()
14
+
15
+ report = migrate(model, target_version=config.version, energyplus=config)
16
+
17
+ print(report.summary())
18
+
19
+ migrated = report.migrated_model
20
+ if migrated is not None:
21
+ print(f"Migrated model version: {migrated.version}")
22
+ # --8<-- [end:example]
@@ -216,7 +216,7 @@ types, invalid bytes, or extra fields on non-extensible objects).
216
216
  doc = load_idf("file.idf", strict_parsing=False)
217
217
  ```
218
218
 
219
- ### Version Mismatch
219
+ ### Unsupported Schema Version
220
220
 
221
221
  ```
222
222
  ValueError: Schema for version (99, 0, 0) not found
@@ -237,6 +237,39 @@ ValueError: Schema for version (99, 0, 0) not found
237
237
  doc = load_idf("file.idf", version=(24, 1, 0))
238
238
  ```
239
239
 
240
+ ### Simulation Version Mismatch
241
+
242
+ ```
243
+ VersionMismatchError: Model version 22.1.0 does not match target EnergyPlus version 25.2.0.
244
+ Migration chain: 22.1.0->22.2.0 -> 22.2.0->23.1.0 -> ... -> 25.1.0->25.2.0
245
+ Call idfkit.migrate(model, target_version=...) to migrate explicitly.
246
+ ```
247
+
248
+ **Cause:** `simulate()` was called with a model whose `version` differs
249
+ from the installed EnergyPlus, and `auto_migrate` is `False` (the default).
250
+
251
+ **Solutions:**
252
+
253
+ 1. Forward-migrate transparently inside `simulate()`:
254
+ ```python
255
+ result = simulate(model, weather, auto_migrate=True)
256
+ print(result.migration_report.summary())
257
+ ```
258
+
259
+ 2. Migrate explicitly first so you can inspect the diff:
260
+ ```python
261
+ from idfkit import migrate
262
+ report = migrate(model, target_version=(25, 2, 0))
263
+ result = simulate(report.migrated_model, weather)
264
+ ```
265
+
266
+ !!! warning "Backward migration is not supported"
267
+ EnergyPlus ships no reverse transition binaries, so a model *newer*
268
+ than the installed EnergyPlus cannot be downgraded. Install a newer
269
+ EnergyPlus or load the model explicitly at an older version.
270
+
271
+ See [Migrating Versions](../simulation/migrating-versions.md) for the full workflow.
272
+
240
273
  ## Performance Issues
241
274
 
242
275
  ### Slow Station Index Loading
@@ -38,6 +38,7 @@ nav:
38
38
  - Plotting: simulation/plotting.md
39
39
  - Output Discovery: simulation/output-discovery.md
40
40
  - Error Handling: simulation/errors.md
41
+ - Migrating Versions: simulation/migrating-versions.md
41
42
 
42
43
  - Schedules:
43
44
  - Overview: schedules/index.md
@@ -82,6 +83,7 @@ nav:
82
83
  - Cache: api/simulation/cache.md
83
84
  - Plotting: api/simulation/plotting.md
84
85
  - File Systems: api/simulation/fs.md
86
+ - Migration: api/migration.md
85
87
  - Schedules:
86
88
  - Overview: api/schedules/index.md
87
89
  - Weather:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "idfkit"
3
- version = "v0.6.4"
3
+ version = "0.7.0"
4
4
  description = "A fast, modern EnergyPlus IDF/epJSON parser with O(1) lookups and reference tracking"
5
5
  authors = [{ name = "Samuel Letellier-Duchesne", email = "developers@idfkit.com" }]
6
6
  readme = "README.md"
@@ -80,6 +80,7 @@ dev = [
80
80
  "types-aiobotocore-s3>=2.5",
81
81
  "boto3>=1.26",
82
82
  "aiobotocore>=2.5",
83
+ "plotly>=5.0",
83
84
  ]
84
85
  benchmark = [
85
86
  "eppy>=0.5.63",
@@ -130,6 +131,7 @@ reportUnknownParameterType = false
130
131
  reportOptionalMemberAccess = false
131
132
  reportMissingParameterType = false
132
133
  reportMissingImports = false
134
+ reportMissingTypeStubs = false
133
135
  reportUntypedFunctionDecorator = false
134
136
  reportUntypedBaseClass = false
135
137
  reportMissingTypeArgument = false
@@ -46,6 +46,7 @@ from .exceptions import (
46
46
  IdfKitError,
47
47
  IDFParseError,
48
48
  InvalidFieldError,
49
+ MigrationError,
49
50
  NoDesignDaysError,
50
51
  ParseError,
51
52
  RangeError,
@@ -54,6 +55,7 @@ from .exceptions import (
54
55
  UnknownObjectTypeError,
55
56
  UnsupportedVersionError,
56
57
  ValidationFailedError,
58
+ VersionMismatchError,
57
59
  VersionNotFoundError,
58
60
  )
59
61
 
@@ -95,6 +97,9 @@ from .idf_parser import IDFParser, get_idf_version, parse_idf
95
97
 
96
98
  # Introspection
97
99
  from .introspection import FieldDescription, ObjectDescription
100
+
101
+ # Migration
102
+ from .migration import MigrationReport, async_migrate, migrate
98
103
  from .objects import IDFCollection, IDFObject
99
104
 
100
105
  # Reference graph
@@ -398,6 +403,8 @@ __all__ = [
398
403
  "IDFParser",
399
404
  "IdfKitError",
400
405
  "InvalidFieldError",
406
+ "MigrationError",
407
+ "MigrationReport",
401
408
  "NoDesignDaysError",
402
409
  "ObjectDescription",
403
410
  "ParseError",
@@ -413,12 +420,14 @@ __all__ = [
413
420
  "ValidationFailedError",
414
421
  "ValidationResult",
415
422
  "Vector3D",
423
+ "VersionMismatchError",
416
424
  "VersionNotFoundError",
417
425
  "ZoneFootprint",
418
426
  "ZonedBlock",
419
427
  "ZoningScheme",
420
428
  "__version__",
421
429
  "add_shading_block",
430
+ "async_migrate",
422
431
  "bounding_box",
423
432
  "calculate_surface_area",
424
433
  "calculate_surface_azimuth",
@@ -451,6 +460,7 @@ __all__ = [
451
460
  "link_horizontal_surfaces",
452
461
  "load_epjson",
453
462
  "load_idf",
463
+ "migrate",
454
464
  "new_document",
455
465
  "parse_epjson",
456
466
  "parse_idf",