chronaxis 0.1.0.dev0__py3-none-any.whl

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 (917) hide show
  1. chronaxis/__init__.py +72 -0
  2. chronaxis/__main__.py +12 -0
  3. chronaxis/analysis_cli.py +181 -0
  4. chronaxis/batch/__init__.py +14 -0
  5. chronaxis/batch/api.py +46 -0
  6. chronaxis/batch/cli.py +48 -0
  7. chronaxis/batch/config.py +37 -0
  8. chronaxis/batch/models.py +202 -0
  9. chronaxis/batch/process_transport.py +149 -0
  10. chronaxis/batch/process_tree.py +72 -0
  11. chronaxis/batch/publication.py +41 -0
  12. chronaxis/batch/runner.py +236 -0
  13. chronaxis/batch/templates.py +42 -0
  14. chronaxis/can_dependencies.py +42 -0
  15. chronaxis/cli.py +193 -0
  16. chronaxis/configuration/__init__.py +46 -0
  17. chronaxis/configuration/cli.py +41 -0
  18. chronaxis/configuration/diagnostics.py +107 -0
  19. chronaxis/configuration/explanation.py +233 -0
  20. chronaxis/configuration/file_tools.py +140 -0
  21. chronaxis/configuration/imports.py +144 -0
  22. chronaxis/configuration/initialization.py +36 -0
  23. chronaxis/configuration/json_parser.py +114 -0
  24. chronaxis/configuration/models.py +74 -0
  25. chronaxis/configuration/origins.py +90 -0
  26. chronaxis/configuration/overrides.py +55 -0
  27. chronaxis/configuration/resolution.py +150 -0
  28. chronaxis/configuration/template_catalog.py +68 -0
  29. chronaxis/configuration/templates/batch/analysis-annotated.yaml +18 -0
  30. chronaxis/configuration/templates/batch/analysis-minimal.yaml +18 -0
  31. chronaxis/configuration/templates/batch/annotated.yaml +6 -0
  32. chronaxis/configuration/templates/batch/minimal.yaml +6 -0
  33. chronaxis/configuration/templates/can-asc/annotated.yaml +18 -0
  34. chronaxis/configuration/templates/can-asc/minimal.yaml +18 -0
  35. chronaxis/configuration/templates/can-blf/annotated.yaml +18 -0
  36. chronaxis/configuration/templates/can-blf/minimal.yaml +18 -0
  37. chronaxis/configuration/templates/can-export/annotated.yaml +23 -0
  38. chronaxis/configuration/templates/can-export/minimal.yaml +23 -0
  39. chronaxis/configuration/templates/catalog.json +233 -0
  40. chronaxis/configuration/templates/charge-session/annotated.yaml +38 -0
  41. chronaxis/configuration/templates/charge-session/minimal.yaml +38 -0
  42. chronaxis/configuration/templates/command-response/annotated.yaml +32 -0
  43. chronaxis/configuration/templates/command-response/minimal.yaml +36 -0
  44. chronaxis/configuration/templates/fault-window/annotated.yaml +25 -0
  45. chronaxis/configuration/templates/fault-window/minimal.yaml +27 -0
  46. chronaxis/configuration/templates/ini-mapping/annotated.yaml +20 -0
  47. chronaxis/configuration/templates/ini-mapping/minimal.yaml +20 -0
  48. chronaxis/configuration/templates/raw-can-csv/annotated.yaml +34 -0
  49. chronaxis/configuration/templates/raw-can-csv/minimal.yaml +35 -0
  50. chronaxis/configuration/templates/shared/charge-session.asc +5 -0
  51. chronaxis/configuration/templates/shared/command-response.asc +8 -0
  52. chronaxis/configuration/templates/shared/fault-window.asc +5 -0
  53. chronaxis/configuration/templates/shared/power.asc +7 -0
  54. chronaxis/configuration/templates/shared/sample.asc +6 -0
  55. chronaxis/configuration/templates/shared/sample.blf +0 -0
  56. chronaxis/configuration/templates/shared/sample.csv +5 -0
  57. chronaxis/configuration/templates/shared/sample.dbc +11 -0
  58. chronaxis/configuration/templates/shared/signals.csv +6 -0
  59. chronaxis/configuration/templates/shared/source.ini +5 -0
  60. chronaxis/configuration/templates/shared/stability.asc +9 -0
  61. chronaxis/configuration/templates/shared/teaching.dbc +27 -0
  62. chronaxis/configuration/templates/shared/threshold.asc +7 -0
  63. chronaxis/configuration/templates/signal-csv/annotated.yaml +27 -0
  64. chronaxis/configuration/templates/signal-csv/minimal.yaml +27 -0
  65. chronaxis/configuration/templates/signal-export/annotated.yaml +27 -0
  66. chronaxis/configuration/templates/signal-export/minimal.yaml +29 -0
  67. chronaxis/configuration/templates/stability/annotated.yaml +35 -0
  68. chronaxis/configuration/templates/stability/minimal.yaml +35 -0
  69. chronaxis/configuration/templates/threshold/annotated.yaml +22 -0
  70. chronaxis/configuration/templates/threshold/minimal.yaml +22 -0
  71. chronaxis/configuration/yaml_parser.py +125 -0
  72. chronaxis/core/__init__.py +71 -0
  73. chronaxis/core/binding.py +449 -0
  74. chronaxis/core/calculation_series_join.py +106 -0
  75. chronaxis/core/calculations.py +435 -0
  76. chronaxis/core/calculations_memory_numpy.py +136 -0
  77. chronaxis/core/calculations_memory_reference.py +165 -0
  78. chronaxis/core/calculations_numpy.py +298 -0
  79. chronaxis/core/calculations_reference.py +294 -0
  80. chronaxis/core/condition_evidence.py +182 -0
  81. chronaxis/core/conditional_integral_result.py +43 -0
  82. chronaxis/core/conditional_integral_terms.py +146 -0
  83. chronaxis/core/conditional_integral_terms_numpy.py +148 -0
  84. chronaxis/core/conditional_integral_terms_reference.py +111 -0
  85. chronaxis/core/conditional_time_reduction.py +118 -0
  86. chronaxis/core/conditional_time_reduction_numpy.py +223 -0
  87. chronaxis/core/conditional_time_reduction_reference.py +213 -0
  88. chronaxis/core/declarations.py +192 -0
  89. chronaxis/core/decoded_binding.py +197 -0
  90. chronaxis/core/direct_message.py +387 -0
  91. chronaxis/core/export_interpolation.py +54 -0
  92. chronaxis/core/expression.py +642 -0
  93. chronaxis/core/expression_numpy.py +314 -0
  94. chronaxis/core/expression_reference.py +272 -0
  95. chronaxis/core/integral_result.py +53 -0
  96. chronaxis/core/integral_sum.py +77 -0
  97. chronaxis/core/integral_sum_numpy.py +224 -0
  98. chronaxis/core/integral_sum_reference.py +148 -0
  99. chronaxis/core/integral_terms.py +119 -0
  100. chronaxis/core/integral_terms_numpy.py +127 -0
  101. chronaxis/core/integral_terms_reference.py +91 -0
  102. chronaxis/core/mean_weights_numpy.py +29 -0
  103. chronaxis/core/mean_weights_reference.py +27 -0
  104. chronaxis/core/message_binding.py +305 -0
  105. chronaxis/core/models.py +485 -0
  106. chronaxis/core/normalize_numpy.py +396 -0
  107. chronaxis/core/numeric.py +472 -0
  108. chronaxis/core/numeric_numpy.py +440 -0
  109. chronaxis/core/record_intervals.py +115 -0
  110. chronaxis/core/sample_reduction.py +161 -0
  111. chronaxis/core/sample_reduction_numpy.py +160 -0
  112. chronaxis/core/sample_reduction_reference.py +154 -0
  113. chronaxis/core/selection.py +74 -0
  114. chronaxis/core/sequence.py +160 -0
  115. chronaxis/core/sequence_reference.py +248 -0
  116. chronaxis/core/stability.py +249 -0
  117. chronaxis/core/start_end.py +169 -0
  118. chronaxis/core/state.py +494 -0
  119. chronaxis/core/state_numpy.py +296 -0
  120. chronaxis/core/temporal.py +373 -0
  121. chronaxis/core/temporal_clock.py +25 -0
  122. chronaxis/core/temporal_memory_numpy.py +163 -0
  123. chronaxis/core/temporal_memory_reference.py +161 -0
  124. chronaxis/core/temporal_numpy.py +345 -0
  125. chronaxis/core/temporal_reference.py +304 -0
  126. chronaxis/core/time_reduction.py +190 -0
  127. chronaxis/core/time_reduction_numpy.py +205 -0
  128. chronaxis/core/time_reduction_reference.py +203 -0
  129. chronaxis/core/types.py +105 -0
  130. chronaxis/core/units.py +81 -0
  131. chronaxis/core/validation.py +94 -0
  132. chronaxis/core/window_delta.py +123 -0
  133. chronaxis/core/window_delta_numpy.py +78 -0
  134. chronaxis/core/window_delta_reference.py +69 -0
  135. chronaxis/core/windows.py +224 -0
  136. chronaxis/core/windows_numpy.py +78 -0
  137. chronaxis/core/windows_reference.py +61 -0
  138. chronaxis/execution/__init__.py +6 -0
  139. chronaxis/execution/batch_signal_groups.py +122 -0
  140. chronaxis/execution/bindings.py +296 -0
  141. chronaxis/execution/boundaries.py +568 -0
  142. chronaxis/execution/calculation_blocks.py +338 -0
  143. chronaxis/execution/calculation_values.py +55 -0
  144. chronaxis/execution/can_batch_reader.py +356 -0
  145. chronaxis/execution/can_reader.py +948 -0
  146. chronaxis/execution/can_reference_template.py +61 -0
  147. chronaxis/execution/condition_evidence.py +370 -0
  148. chronaxis/execution/conditional_integral_facts.py +310 -0
  149. chronaxis/execution/conditional_integral_reduction.py +216 -0
  150. chronaxis/execution/csv_observation.py +524 -0
  151. chronaxis/execution/csv_reader.py +662 -0
  152. chronaxis/execution/current_message_calculation.py +225 -0
  153. chronaxis/execution/driver_expression.py +274 -0
  154. chronaxis/execution/expressions.py +618 -0
  155. chronaxis/execution/frame_capture.py +245 -0
  156. chronaxis/execution/groups.py +236 -0
  157. chronaxis/execution/historical_conditional_blocks.py +264 -0
  158. chronaxis/execution/historical_conditional_integral.py +226 -0
  159. chronaxis/execution/historical_conditional_time_calculation.py +368 -0
  160. chronaxis/execution/historical_integral.py +219 -0
  161. chronaxis/execution/historical_observation.py +372 -0
  162. chronaxis/execution/historical_sample_calculation.py +338 -0
  163. chronaxis/execution/historical_selection_rows.py +300 -0
  164. chronaxis/execution/historical_time_calculation.py +341 -0
  165. chronaxis/execution/history.py +572 -0
  166. chronaxis/execution/history_records.py +225 -0
  167. chronaxis/execution/hold.py +448 -0
  168. chronaxis/execution/integral_facts.py +311 -0
  169. chronaxis/execution/integral_reduction.py +216 -0
  170. chronaxis/execution/legacy_frame_samples.py +94 -0
  171. chronaxis/execution/memory_reader.py +247 -0
  172. chronaxis/execution/message_bindings.py +293 -0
  173. chronaxis/execution/message_delivery.py +37 -0
  174. chronaxis/execution/observed_ingestion.py +551 -0
  175. chronaxis/execution/raw_signal_groups.py +192 -0
  176. chronaxis/execution/record_alarm_duration.py +114 -0
  177. chronaxis/execution/record_delta_condition.py +167 -0
  178. chronaxis/execution/record_diagnostics.py +87 -0
  179. chronaxis/execution/record_event_durations.py +143 -0
  180. chronaxis/execution/record_export_samples.py +94 -0
  181. chronaxis/execution/record_exports.py +155 -0
  182. chronaxis/execution/record_integral.py +196 -0
  183. chronaxis/execution/record_point_buffer.py +101 -0
  184. chronaxis/execution/record_rule_timeline.py +344 -0
  185. chronaxis/execution/record_sample.py +46 -0
  186. chronaxis/execution/record_sample_series.py +29 -0
  187. chronaxis/execution/record_scope_calculations.py +290 -0
  188. chronaxis/execution/record_selection.py +62 -0
  189. chronaxis/execution/record_sequences.py +199 -0
  190. chronaxis/execution/record_session_calculations.py +778 -0
  191. chronaxis/execution/record_signal_export.py +133 -0
  192. chronaxis/execution/record_source_cursor.py +295 -0
  193. chronaxis/execution/record_time_calculation.py +322 -0
  194. chronaxis/execution/record_time_indexes.py +143 -0
  195. chronaxis/execution/record_value_history.py +160 -0
  196. chronaxis/execution/record_windows.py +229 -0
  197. chronaxis/execution/required_expression.py +52 -0
  198. chronaxis/execution/retained_metadata.py +71 -0
  199. chronaxis/execution/run_session.py +402 -0
  200. chronaxis/execution/scanned_signal_proof.py +550 -0
  201. chronaxis/execution/signal_validity.py +40 -0
  202. chronaxis/execution/state.py +280 -0
  203. chronaxis/execution/temporal_buffer.py +508 -0
  204. chronaxis/execution/text_can_reader.py +359 -0
  205. chronaxis/execution/timeline.py +309 -0
  206. chronaxis/execution/timeline_multi.py +415 -0
  207. chronaxis/execution/window_delta_events.py +220 -0
  208. chronaxis/execution/window_replay.py +350 -0
  209. chronaxis/execution/windows.py +173 -0
  210. chronaxis/guide/README.md +70 -0
  211. chronaxis/guide/api/AnalysisError.md +14 -0
  212. chronaxis/guide/api/AnalysisPlan.md +96 -0
  213. chronaxis/guide/api/AnalysisResult.md +398 -0
  214. chronaxis/guide/api/AnalysisRunner.md +155 -0
  215. chronaxis/guide/api/BatchJob.md +19 -0
  216. chronaxis/guide/api/BatchJobResult.md +61 -0
  217. chronaxis/guide/api/BatchPlan.md +48 -0
  218. chronaxis/guide/api/BatchReport.md +108 -0
  219. chronaxis/guide/api/BatchRunner.md +84 -0
  220. chronaxis/guide/api/OutputManifest.md +23 -0
  221. chronaxis/guide/api/PlanFragment.md +47 -0
  222. chronaxis/guide/api/PlanValidationError.md +98 -0
  223. chronaxis/guide/api/PresetSpec.md +63 -0
  224. chronaxis/guide/api/ResultClosedError.md +14 -0
  225. chronaxis/guide/api/RunMetadata.md +100 -0
  226. chronaxis/guide/api/TimeConversion.md +29 -0
  227. chronaxis/guide/api/TimeOverflowError.md +17 -0
  228. chronaxis/guide/api/build_preset.md +36 -0
  229. chronaxis/guide/api/checked_add_ns.md +30 -0
  230. chronaxis/guide/api/convert_time.md +40 -0
  231. chronaxis/guide/api/explain_analysis_plan.md +38 -0
  232. chronaxis/guide/api/index.json +185 -0
  233. chronaxis/guide/api/load_analysis_plan.md +34 -0
  234. chronaxis/guide/api/load_batch_plan.md +36 -0
  235. chronaxis/guide/api/parse_datetime_ns.md +35 -0
  236. chronaxis/guide/api/parse_duration.md +30 -0
  237. chronaxis/guide/api/resolve_preset_roles.md +37 -0
  238. chronaxis/guide/api/run_batch.md +38 -0
  239. chronaxis/guide/api/shift_times_reference.md +33 -0
  240. chronaxis/guide/api/time_deltas_reference.md +37 -0
  241. chronaxis/guide/api/validate_analysis_plan.md +38 -0
  242. chronaxis/guide/en/README.md +74 -0
  243. chronaxis/guide/en/api/AnalysisError.md +14 -0
  244. chronaxis/guide/en/api/AnalysisPlan.md +93 -0
  245. chronaxis/guide/en/api/AnalysisResult.md +398 -0
  246. chronaxis/guide/en/api/AnalysisRunner.md +191 -0
  247. chronaxis/guide/en/api/BatchJob.md +17 -0
  248. chronaxis/guide/en/api/BatchJobResult.md +43 -0
  249. chronaxis/guide/en/api/BatchPlan.md +37 -0
  250. chronaxis/guide/en/api/BatchReport.md +52 -0
  251. chronaxis/guide/en/api/BatchRunner.md +51 -0
  252. chronaxis/guide/en/api/OutputManifest.md +23 -0
  253. chronaxis/guide/en/api/PlanFragment.md +33 -0
  254. chronaxis/guide/en/api/PlanValidationError.md +58 -0
  255. chronaxis/guide/en/api/PresetSpec.md +51 -0
  256. chronaxis/guide/en/api/ResultClosedError.md +14 -0
  257. chronaxis/guide/en/api/RunMetadata.md +100 -0
  258. chronaxis/guide/en/api/TimeConversion.md +23 -0
  259. chronaxis/guide/en/api/TimeOverflowError.md +14 -0
  260. chronaxis/guide/en/api/build_preset.md +23 -0
  261. chronaxis/guide/en/api/checked_add_ns.md +21 -0
  262. chronaxis/guide/en/api/convert_time.md +25 -0
  263. chronaxis/guide/en/api/explain_analysis_plan.md +30 -0
  264. chronaxis/guide/en/api/index.json +185 -0
  265. chronaxis/guide/en/api/load_analysis_plan.md +27 -0
  266. chronaxis/guide/en/api/load_batch_plan.md +28 -0
  267. chronaxis/guide/en/api/parse_datetime_ns.md +23 -0
  268. chronaxis/guide/en/api/parse_duration.md +20 -0
  269. chronaxis/guide/en/api/resolve_preset_roles.md +23 -0
  270. chronaxis/guide/en/api/run_batch.md +39 -0
  271. chronaxis/guide/en/api/shift_times_reference.md +21 -0
  272. chronaxis/guide/en/api/time_deltas_reference.md +22 -0
  273. chronaxis/guide/en/api/validate_analysis_plan.md +29 -0
  274. chronaxis/guide/en/fields/analysis/calculations-all-1.json +345 -0
  275. chronaxis/guide/en/fields/analysis/calculations-all-2.json +300 -0
  276. chronaxis/guide/en/fields/analysis/calculations-all-3.json +84 -0
  277. chronaxis/guide/en/fields/analysis/config_version-all-1.json +24 -0
  278. chronaxis/guide/en/fields/analysis/dataset-all-1.json +344 -0
  279. chronaxis/guide/en/fields/analysis/derived-all-1.json +147 -0
  280. chronaxis/guide/en/fields/analysis/diagnostics-all-1.json +69 -0
  281. chronaxis/guide/en/fields/analysis/execution-all-1.json +167 -0
  282. chronaxis/guide/en/fields/analysis/imports-all-1.json +39 -0
  283. chronaxis/guide/en/fields/analysis/intervals-all-1.json +173 -0
  284. chronaxis/guide/en/fields/analysis/message_calculations-all-1.json +345 -0
  285. chronaxis/guide/en/fields/analysis/message_calculations-all-2.json +270 -0
  286. chronaxis/guide/en/fields/analysis/metadata-all-1.json +24 -0
  287. chronaxis/guide/en/fields/analysis/outputs-all-1.json +332 -0
  288. chronaxis/guide/en/fields/analysis/outputs-all-2.json +319 -0
  289. chronaxis/guide/en/fields/analysis/outputs-all-3.json +321 -0
  290. chronaxis/guide/en/fields/analysis/outputs-all-4.json +236 -0
  291. chronaxis/guide/en/fields/analysis/outputs-all-5.json +246 -0
  292. chronaxis/guide/en/fields/analysis/outputs-all-6.json +214 -0
  293. chronaxis/guide/en/fields/analysis/overrides-all-1.json +104 -0
  294. chronaxis/guide/en/fields/analysis/presets-charge_session-1.json +398 -0
  295. chronaxis/guide/en/fields/analysis/presets-charge_session-2.json +114 -0
  296. chronaxis/guide/en/fields/analysis/presets-command_response-1.json +376 -0
  297. chronaxis/guide/en/fields/analysis/presets-fault_context-1.json +285 -0
  298. chronaxis/guide/en/fields/analysis/presets-threshold_excursion-1.json +317 -0
  299. chronaxis/guide/en/fields/analysis/rules-condition_duration-1.json +344 -0
  300. chronaxis/guide/en/fields/analysis/rules-condition_duration-2.json +27 -0
  301. chronaxis/guide/en/fields/analysis/rules-debounce-1.json +335 -0
  302. chronaxis/guide/en/fields/analysis/rules-falling_edge-1.json +317 -0
  303. chronaxis/guide/en/fields/analysis/rules-hysteresis-1.json +334 -0
  304. chronaxis/guide/en/fields/analysis/rules-hysteresis-2.json +27 -0
  305. chronaxis/guide/en/fields/analysis/rules-rising_edge-1.json +317 -0
  306. chronaxis/guide/en/fields/analysis/rules-start_end-1.json +333 -0
  307. chronaxis/guide/en/fields/analysis/rules-start_end-2.json +60 -0
  308. chronaxis/guide/en/fields/analysis/rules-start_only-1.json +334 -0
  309. chronaxis/guide/en/fields/analysis/rules-window_delta-1.json +338 -0
  310. chronaxis/guide/en/fields/analysis/rules-window_delta-2.json +96 -0
  311. chronaxis/guide/en/fields/analysis/sequences-all-1.json +378 -0
  312. chronaxis/guide/en/fields/analysis/sequences-all-2.json +70 -0
  313. chronaxis/guide/en/fields/analysis/signals-variant-1-1.json +349 -0
  314. chronaxis/guide/en/fields/analysis/signals-variant-1-2.json +297 -0
  315. chronaxis/guide/en/fields/analysis/signals-variant-1-3.json +323 -0
  316. chronaxis/guide/en/fields/analysis/signals-variant-1-4.json +192 -0
  317. chronaxis/guide/en/fields/analysis/signals-variant-2-1.json +327 -0
  318. chronaxis/guide/en/fields/analysis/signals-variant-2-2.json +312 -0
  319. chronaxis/guide/en/fields/analysis/signals-variant-2-3.json +294 -0
  320. chronaxis/guide/en/fields/analysis/signals-variant-2-4.json +253 -0
  321. chronaxis/guide/en/fields/analysis/signals-variant-2-5.json +44 -0
  322. chronaxis/guide/en/fields/analysis/sources-can_asc-1.json +318 -0
  323. chronaxis/guide/en/fields/analysis/sources-can_asc-2.json +310 -0
  324. chronaxis/guide/en/fields/analysis/sources-can_asc-3.json +311 -0
  325. chronaxis/guide/en/fields/analysis/sources-can_asc-4.json +69 -0
  326. chronaxis/guide/en/fields/analysis/sources-can_blf-1.json +317 -0
  327. chronaxis/guide/en/fields/analysis/sources-can_blf-2.json +310 -0
  328. chronaxis/guide/en/fields/analysis/sources-can_blf-3.json +317 -0
  329. chronaxis/guide/en/fields/analysis/sources-memory-1.json +332 -0
  330. chronaxis/guide/en/fields/analysis/sources-memory-2.json +125 -0
  331. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-1.json +330 -0
  332. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-10.json +233 -0
  333. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-11.json +225 -0
  334. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-12.json +228 -0
  335. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-13.json +226 -0
  336. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-14.json +230 -0
  337. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-15.json +227 -0
  338. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-16.json +230 -0
  339. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-17.json +238 -0
  340. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-18.json +239 -0
  341. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-19.json +233 -0
  342. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-2.json +310 -0
  343. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-20.json +242 -0
  344. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-21.json +230 -0
  345. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-22.json +228 -0
  346. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-23.json +230 -0
  347. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-24.json +223 -0
  348. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-25.json +290 -0
  349. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-26.json +131 -0
  350. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-3.json +297 -0
  351. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-4.json +226 -0
  352. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-5.json +230 -0
  353. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-6.json +227 -0
  354. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-7.json +230 -0
  355. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-8.json +238 -0
  356. chronaxis/guide/en/fields/analysis/sources-raw_can_csv-9.json +239 -0
  357. chronaxis/guide/en/fields/analysis/sources-signal_csv-1.json +331 -0
  358. chronaxis/guide/en/fields/analysis/sources-signal_csv-2.json +307 -0
  359. chronaxis/guide/en/fields/analysis/sources-signal_csv-3.json +315 -0
  360. chronaxis/guide/en/fields/analysis/sources-variant-6-1.json +319 -0
  361. chronaxis/guide/en/fields/analysis/sources-variant-6-2.json +307 -0
  362. chronaxis/guide/en/fields/analysis/sources-variant-6-3.json +312 -0
  363. chronaxis/guide/en/fields/analysis/sources-variant-6-4.json +113 -0
  364. chronaxis/guide/en/fields/analysis/windows-all-1.json +361 -0
  365. chronaxis/guide/en/fields/analysis/windows-all-2.json +187 -0
  366. chronaxis/guide/en/fields/batch/backend-all-1.json +26 -0
  367. chronaxis/guide/en/fields/batch/batch_version-all-1.json +22 -0
  368. chronaxis/guide/en/fields/batch/fail_fast-all-1.json +22 -0
  369. chronaxis/guide/en/fields/batch/inputs-all-1.json +161 -0
  370. chronaxis/guide/en/fields/batch/jobs-all-1.json +58 -0
  371. chronaxis/guide/en/fields/batch/process_count-all-1.json +23 -0
  372. chronaxis/guide/en/fields/batch/source-all-1.json +22 -0
  373. chronaxis/guide/en/fields/batch/template-all-1.json +22 -0
  374. chronaxis/guide/en/fields/definitions/derived-all-1.json +121 -0
  375. chronaxis/guide/en/fields/definitions/signals-all-1.json +336 -0
  376. chronaxis/guide/en/fields/definitions/signals-all-2.json +307 -0
  377. chronaxis/guide/en/fields/definitions/signals-all-3.json +290 -0
  378. chronaxis/guide/en/fields/definitions/signals-all-4.json +347 -0
  379. chronaxis/guide/en/fields/definitions/signals-all-5.json +297 -0
  380. chronaxis/guide/en/fields/definitions/signals-all-6.json +259 -0
  381. chronaxis/guide/en/fields/definitions/signals-all-7.json +117 -0
  382. chronaxis/guide/en/fields/definitions/sources-all-1.json +332 -0
  383. chronaxis/guide/en/fields/definitions/sources-all-10.json +306 -0
  384. chronaxis/guide/en/fields/definitions/sources-all-11.json +294 -0
  385. chronaxis/guide/en/fields/definitions/sources-all-12.json +212 -0
  386. chronaxis/guide/en/fields/definitions/sources-all-13.json +217 -0
  387. chronaxis/guide/en/fields/definitions/sources-all-14.json +213 -0
  388. chronaxis/guide/en/fields/definitions/sources-all-15.json +214 -0
  389. chronaxis/guide/en/fields/definitions/sources-all-16.json +215 -0
  390. chronaxis/guide/en/fields/definitions/sources-all-17.json +213 -0
  391. chronaxis/guide/en/fields/definitions/sources-all-18.json +214 -0
  392. chronaxis/guide/en/fields/definitions/sources-all-19.json +213 -0
  393. chronaxis/guide/en/fields/definitions/sources-all-2.json +323 -0
  394. chronaxis/guide/en/fields/definitions/sources-all-20.json +217 -0
  395. chronaxis/guide/en/fields/definitions/sources-all-21.json +210 -0
  396. chronaxis/guide/en/fields/definitions/sources-all-22.json +214 -0
  397. chronaxis/guide/en/fields/definitions/sources-all-23.json +218 -0
  398. chronaxis/guide/en/fields/definitions/sources-all-24.json +209 -0
  399. chronaxis/guide/en/fields/definitions/sources-all-25.json +215 -0
  400. chronaxis/guide/en/fields/definitions/sources-all-26.json +218 -0
  401. chronaxis/guide/en/fields/definitions/sources-all-27.json +224 -0
  402. chronaxis/guide/en/fields/definitions/sources-all-28.json +215 -0
  403. chronaxis/guide/en/fields/definitions/sources-all-29.json +205 -0
  404. chronaxis/guide/en/fields/definitions/sources-all-3.json +303 -0
  405. chronaxis/guide/en/fields/definitions/sources-all-30.json +298 -0
  406. chronaxis/guide/en/fields/definitions/sources-all-31.json +315 -0
  407. chronaxis/guide/en/fields/definitions/sources-all-32.json +306 -0
  408. chronaxis/guide/en/fields/definitions/sources-all-33.json +209 -0
  409. chronaxis/guide/en/fields/definitions/sources-all-4.json +336 -0
  410. chronaxis/guide/en/fields/definitions/sources-all-5.json +299 -0
  411. chronaxis/guide/en/fields/definitions/sources-all-6.json +307 -0
  412. chronaxis/guide/en/fields/definitions/sources-all-7.json +320 -0
  413. chronaxis/guide/en/fields/definitions/sources-all-8.json +303 -0
  414. chronaxis/guide/en/fields/definitions/sources-all-9.json +315 -0
  415. chronaxis/guide/en/fields/index.json +3450 -0
  416. chronaxis/guide/en/fields/mapping/aliases-all-1.json +91 -0
  417. chronaxis/guide/en/fields/mapping/analysis-all-1.json +382 -0
  418. chronaxis/guide/en/fields/mapping/analysis-all-10.json +301 -0
  419. chronaxis/guide/en/fields/mapping/analysis-all-11.json +312 -0
  420. chronaxis/guide/en/fields/mapping/analysis-all-12.json +311 -0
  421. chronaxis/guide/en/fields/mapping/analysis-all-13.json +314 -0
  422. chronaxis/guide/en/fields/mapping/analysis-all-14.json +310 -0
  423. chronaxis/guide/en/fields/mapping/analysis-all-15.json +297 -0
  424. chronaxis/guide/en/fields/mapping/analysis-all-16.json +226 -0
  425. chronaxis/guide/en/fields/mapping/analysis-all-17.json +230 -0
  426. chronaxis/guide/en/fields/mapping/analysis-all-18.json +227 -0
  427. chronaxis/guide/en/fields/mapping/analysis-all-19.json +230 -0
  428. chronaxis/guide/en/fields/mapping/analysis-all-2.json +323 -0
  429. chronaxis/guide/en/fields/mapping/analysis-all-20.json +221 -0
  430. chronaxis/guide/en/fields/mapping/analysis-all-21.json +237 -0
  431. chronaxis/guide/en/fields/mapping/analysis-all-22.json +233 -0
  432. chronaxis/guide/en/fields/mapping/analysis-all-23.json +222 -0
  433. chronaxis/guide/en/fields/mapping/analysis-all-24.json +231 -0
  434. chronaxis/guide/en/fields/mapping/analysis-all-25.json +225 -0
  435. chronaxis/guide/en/fields/mapping/analysis-all-26.json +230 -0
  436. chronaxis/guide/en/fields/mapping/analysis-all-27.json +228 -0
  437. chronaxis/guide/en/fields/mapping/analysis-all-28.json +230 -0
  438. chronaxis/guide/en/fields/mapping/analysis-all-29.json +223 -0
  439. chronaxis/guide/en/fields/mapping/analysis-all-3.json +318 -0
  440. chronaxis/guide/en/fields/mapping/analysis-all-30.json +233 -0
  441. chronaxis/guide/en/fields/mapping/analysis-all-31.json +218 -0
  442. chronaxis/guide/en/fields/mapping/analysis-all-32.json +239 -0
  443. chronaxis/guide/en/fields/mapping/analysis-all-33.json +233 -0
  444. chronaxis/guide/en/fields/mapping/analysis-all-34.json +225 -0
  445. chronaxis/guide/en/fields/mapping/analysis-all-35.json +228 -0
  446. chronaxis/guide/en/fields/mapping/analysis-all-36.json +226 -0
  447. chronaxis/guide/en/fields/mapping/analysis-all-37.json +244 -0
  448. chronaxis/guide/en/fields/mapping/analysis-all-38.json +326 -0
  449. chronaxis/guide/en/fields/mapping/analysis-all-39.json +299 -0
  450. chronaxis/guide/en/fields/mapping/analysis-all-4.json +297 -0
  451. chronaxis/guide/en/fields/mapping/analysis-all-40.json +311 -0
  452. chronaxis/guide/en/fields/mapping/analysis-all-41.json +310 -0
  453. chronaxis/guide/en/fields/mapping/analysis-all-42.json +346 -0
  454. chronaxis/guide/en/fields/mapping/analysis-all-43.json +267 -0
  455. chronaxis/guide/en/fields/mapping/analysis-all-44.json +327 -0
  456. chronaxis/guide/en/fields/mapping/analysis-all-45.json +279 -0
  457. chronaxis/guide/en/fields/mapping/analysis-all-46.json +327 -0
  458. chronaxis/guide/en/fields/mapping/analysis-all-47.json +312 -0
  459. chronaxis/guide/en/fields/mapping/analysis-all-48.json +294 -0
  460. chronaxis/guide/en/fields/mapping/analysis-all-49.json +253 -0
  461. chronaxis/guide/en/fields/mapping/analysis-all-5.json +312 -0
  462. chronaxis/guide/en/fields/mapping/analysis-all-50.json +346 -0
  463. chronaxis/guide/en/fields/mapping/analysis-all-51.json +324 -0
  464. chronaxis/guide/en/fields/mapping/analysis-all-52.json +335 -0
  465. chronaxis/guide/en/fields/mapping/analysis-all-53.json +317 -0
  466. chronaxis/guide/en/fields/mapping/analysis-all-54.json +316 -0
  467. chronaxis/guide/en/fields/mapping/analysis-all-55.json +302 -0
  468. chronaxis/guide/en/fields/mapping/analysis-all-56.json +319 -0
  469. chronaxis/guide/en/fields/mapping/analysis-all-57.json +334 -0
  470. chronaxis/guide/en/fields/mapping/analysis-all-58.json +333 -0
  471. chronaxis/guide/en/fields/mapping/analysis-all-59.json +359 -0
  472. chronaxis/guide/en/fields/mapping/analysis-all-6.json +327 -0
  473. chronaxis/guide/en/fields/mapping/analysis-all-60.json +303 -0
  474. chronaxis/guide/en/fields/mapping/analysis-all-61.json +326 -0
  475. chronaxis/guide/en/fields/mapping/analysis-all-62.json +301 -0
  476. chronaxis/guide/en/fields/mapping/analysis-all-63.json +326 -0
  477. chronaxis/guide/en/fields/mapping/analysis-all-64.json +367 -0
  478. chronaxis/guide/en/fields/mapping/analysis-all-65.json +334 -0
  479. chronaxis/guide/en/fields/mapping/analysis-all-66.json +358 -0
  480. chronaxis/guide/en/fields/mapping/analysis-all-67.json +349 -0
  481. chronaxis/guide/en/fields/mapping/analysis-all-68.json +331 -0
  482. chronaxis/guide/en/fields/mapping/analysis-all-69.json +304 -0
  483. chronaxis/guide/en/fields/mapping/analysis-all-7.json +303 -0
  484. chronaxis/guide/en/fields/mapping/analysis-all-70.json +349 -0
  485. chronaxis/guide/en/fields/mapping/analysis-all-71.json +288 -0
  486. chronaxis/guide/en/fields/mapping/analysis-all-72.json +316 -0
  487. chronaxis/guide/en/fields/mapping/analysis-all-73.json +266 -0
  488. chronaxis/guide/en/fields/mapping/analysis-all-74.json +227 -0
  489. chronaxis/guide/en/fields/mapping/analysis-all-75.json +239 -0
  490. chronaxis/guide/en/fields/mapping/analysis-all-76.json +274 -0
  491. chronaxis/guide/en/fields/mapping/analysis-all-77.json +380 -0
  492. chronaxis/guide/en/fields/mapping/analysis-all-78.json +313 -0
  493. chronaxis/guide/en/fields/mapping/analysis-all-79.json +338 -0
  494. chronaxis/guide/en/fields/mapping/analysis-all-8.json +292 -0
  495. chronaxis/guide/en/fields/mapping/analysis-all-80.json +304 -0
  496. chronaxis/guide/en/fields/mapping/analysis-all-81.json +140 -0
  497. chronaxis/guide/en/fields/mapping/analysis-all-9.json +332 -0
  498. chronaxis/guide/en/fields/mapping/io_policy-all-1.json +19 -0
  499. chronaxis/guide/en/fields/mapping/mapping_version-all-1.json +19 -0
  500. chronaxis/guide/en/fields/mapping/path_base-all-1.json +19 -0
  501. chronaxis/guide/en/fields/mapping/sections-all-1.json +402 -0
  502. chronaxis/guide/en/fields/mapping/sections-all-2.json +232 -0
  503. chronaxis/guide/en/semantics.md +70 -0
  504. chronaxis/guide/en/tasks.json +290 -0
  505. chronaxis/guide/en/workflow.md +41 -0
  506. chronaxis/guide/examples/analysis-imports.yaml +22 -0
  507. chronaxis/guide/examples/analysis.yaml +23 -0
  508. chronaxis/guide/examples/batch-minimal.yaml +3 -0
  509. chronaxis/guide/examples/conditional-energy.yaml +36 -0
  510. chronaxis/guide/examples/data/activity.csv +6 -0
  511. chronaxis/guide/examples/data/can/activity.asc +11 -0
  512. chronaxis/guide/examples/data/can/calculation-minimal.asc +6 -0
  513. chronaxis/guide/examples/data/can/conditional-energy/part-1.asc +92 -0
  514. chronaxis/guide/examples/data/can/conditional-energy/part-2.asc +36 -0
  515. chronaxis/guide/examples/data/can/conditional-energy/signals.dbc +10 -0
  516. chronaxis/guide/examples/data/can/execution-comparison.asc +12 -0
  517. chronaxis/guide/examples/data/can/execution-report.asc +4 -0
  518. chronaxis/guide/examples/data/can/expression-extended.asc +11 -0
  519. chronaxis/guide/examples/data/can/interval-actual.asc +6 -0
  520. chronaxis/guide/examples/data/can/preset-charge-energy.asc +15 -0
  521. chronaxis/guide/examples/data/can/preset-charge-minimal.asc +11 -0
  522. chronaxis/guide/examples/data/can/preset-command-automatic.asc +11 -0
  523. chronaxis/guide/examples/data/can/preset-fault-context.asc +7 -0
  524. chronaxis/guide/examples/data/can/preset-threshold-delay.asc +7 -0
  525. chronaxis/guide/examples/data/can/preset-threshold-partial.asc +7 -0
  526. chronaxis/guide/examples/data/can/quality.asc +6 -0
  527. chronaxis/guide/examples/data/can/quickstart-parts/part1.asc +4 -0
  528. chronaxis/guide/examples/data/can/quickstart-parts/part2.asc +3 -0
  529. chronaxis/guide/examples/data/can/quickstart.asc +6 -0
  530. chronaxis/guide/examples/data/can/rule-condition_duration-extended.asc +35 -0
  531. chronaxis/guide/examples/data/can/rule-condition_duration-minimal.asc +19 -0
  532. chronaxis/guide/examples/data/can/rule-debounce-extended.asc +19 -0
  533. chronaxis/guide/examples/data/can/rule-falling_edge-extended.asc +35 -0
  534. chronaxis/guide/examples/data/can/rule-hysteresis-extended.asc +19 -0
  535. chronaxis/guide/examples/data/can/rule-start_end-extended.asc +35 -0
  536. chronaxis/guide/examples/data/can/rule-start_only-extended.asc +19 -0
  537. chronaxis/guide/examples/data/can/rule-window_delta-extended.asc +19 -0
  538. chronaxis/guide/examples/data/can/sequence-outcomes.asc +19 -0
  539. chronaxis/guide/examples/data/can/signal-types.asc +13 -0
  540. chronaxis/guide/examples/data/can/start-end.asc +30 -0
  541. chronaxis/guide/examples/data/can/teaching-base.asc +58 -0
  542. chronaxis/guide/examples/data/can/teaching.dbc +53 -0
  543. chronaxis/guide/examples/data/joint-current.csv +5 -0
  544. chronaxis/guide/examples/data/joint.asc +5 -0
  545. chronaxis/guide/examples/data/joint.dbc +7 -0
  546. chronaxis/guide/examples/data/message-clean.asc +6 -0
  547. chronaxis/guide/examples/data/message-direction.asc +7 -0
  548. chronaxis/guide/examples/data/message-direction.dbc +7 -0
  549. chronaxis/guide/examples/data/power.blf +0 -0
  550. chronaxis/guide/examples/data/power.dbc +6 -0
  551. chronaxis/guide/examples/data/quality.csv +5 -0
  552. chronaxis/guide/examples/data/raw-can-example.csv +5 -0
  553. chronaxis/guide/examples/data/signal-types.csv +5 -0
  554. chronaxis/guide/examples/data/signals.csv +6 -0
  555. chronaxis/guide/examples/data/timing.asc +6 -0
  556. chronaxis/guide/examples/data/timing.dbc +11 -0
  557. chronaxis/guide/examples/export-can-minimal.yaml +24 -0
  558. chronaxis/guide/examples/input-csv-minimal.yaml +23 -0
  559. chronaxis/guide/examples/preset-charge-energy.yaml +41 -0
  560. chronaxis/guide/examples/preset-charge-minimal.yaml +31 -0
  561. chronaxis/guide/examples/preset-fault-context.yaml +27 -0
  562. chronaxis/guide/examples/quality.yaml +19 -0
  563. chronaxis/guide/examples/sequence-outcomes.yaml +39 -0
  564. chronaxis/guide/examples/shared/definitions.yaml +14 -0
  565. chronaxis/guide/examples/signal-enum-minimal.yaml +19 -0
  566. chronaxis/guide/examples/signal-number-conversion.yaml +24 -0
  567. chronaxis/guide/examples/window-merged.yaml +28 -0
  568. chronaxis/guide/fields/analysis/calculations-all-1.json +360 -0
  569. chronaxis/guide/fields/analysis/calculations-all-2.json +299 -0
  570. chronaxis/guide/fields/analysis/calculations-all-3.json +70 -0
  571. chronaxis/guide/fields/analysis/config_version-all-1.json +24 -0
  572. chronaxis/guide/fields/analysis/dataset-all-1.json +344 -0
  573. chronaxis/guide/fields/analysis/derived-all-1.json +147 -0
  574. chronaxis/guide/fields/analysis/diagnostics-all-1.json +69 -0
  575. chronaxis/guide/fields/analysis/execution-all-1.json +167 -0
  576. chronaxis/guide/fields/analysis/imports-all-1.json +39 -0
  577. chronaxis/guide/fields/analysis/intervals-all-1.json +173 -0
  578. chronaxis/guide/fields/analysis/message_calculations-all-1.json +360 -0
  579. chronaxis/guide/fields/analysis/message_calculations-all-2.json +255 -0
  580. chronaxis/guide/fields/analysis/metadata-all-1.json +24 -0
  581. chronaxis/guide/fields/analysis/outputs-all-1.json +349 -0
  582. chronaxis/guide/fields/analysis/outputs-all-2.json +302 -0
  583. chronaxis/guide/fields/analysis/outputs-all-3.json +321 -0
  584. chronaxis/guide/fields/analysis/outputs-all-4.json +253 -0
  585. chronaxis/guide/fields/analysis/outputs-all-5.json +244 -0
  586. chronaxis/guide/fields/analysis/outputs-all-6.json +199 -0
  587. chronaxis/guide/fields/analysis/overrides-all-1.json +104 -0
  588. chronaxis/guide/fields/analysis/presets-charge_session-1.json +398 -0
  589. chronaxis/guide/fields/analysis/presets-charge_session-2.json +114 -0
  590. chronaxis/guide/fields/analysis/presets-command_response-1.json +376 -0
  591. chronaxis/guide/fields/analysis/presets-fault_context-1.json +285 -0
  592. chronaxis/guide/fields/analysis/presets-threshold_excursion-1.json +317 -0
  593. chronaxis/guide/fields/analysis/rules-condition_duration-1.json +344 -0
  594. chronaxis/guide/fields/analysis/rules-condition_duration-2.json +27 -0
  595. chronaxis/guide/fields/analysis/rules-debounce-1.json +335 -0
  596. chronaxis/guide/fields/analysis/rules-falling_edge-1.json +317 -0
  597. chronaxis/guide/fields/analysis/rules-hysteresis-1.json +334 -0
  598. chronaxis/guide/fields/analysis/rules-hysteresis-2.json +27 -0
  599. chronaxis/guide/fields/analysis/rules-rising_edge-1.json +317 -0
  600. chronaxis/guide/fields/analysis/rules-start_end-1.json +349 -0
  601. chronaxis/guide/fields/analysis/rules-start_end-2.json +44 -0
  602. chronaxis/guide/fields/analysis/rules-start_only-1.json +334 -0
  603. chronaxis/guide/fields/analysis/rules-window_delta-1.json +356 -0
  604. chronaxis/guide/fields/analysis/rules-window_delta-2.json +78 -0
  605. chronaxis/guide/fields/analysis/sequences-all-1.json +394 -0
  606. chronaxis/guide/fields/analysis/sequences-all-2.json +54 -0
  607. chronaxis/guide/fields/analysis/signals-variant-1-1.json +349 -0
  608. chronaxis/guide/fields/analysis/signals-variant-1-2.json +297 -0
  609. chronaxis/guide/fields/analysis/signals-variant-1-3.json +340 -0
  610. chronaxis/guide/fields/analysis/signals-variant-1-4.json +175 -0
  611. chronaxis/guide/fields/analysis/signals-variant-2-1.json +327 -0
  612. chronaxis/guide/fields/analysis/signals-variant-2-2.json +335 -0
  613. chronaxis/guide/fields/analysis/signals-variant-2-3.json +289 -0
  614. chronaxis/guide/fields/analysis/signals-variant-2-4.json +270 -0
  615. chronaxis/guide/fields/analysis/sources-can_asc-1.json +318 -0
  616. chronaxis/guide/fields/analysis/sources-can_asc-2.json +310 -0
  617. chronaxis/guide/fields/analysis/sources-can_asc-3.json +311 -0
  618. chronaxis/guide/fields/analysis/sources-can_asc-4.json +69 -0
  619. chronaxis/guide/fields/analysis/sources-can_blf-1.json +317 -0
  620. chronaxis/guide/fields/analysis/sources-can_blf-2.json +310 -0
  621. chronaxis/guide/fields/analysis/sources-can_blf-3.json +317 -0
  622. chronaxis/guide/fields/analysis/sources-memory-1.json +347 -0
  623. chronaxis/guide/fields/analysis/sources-memory-2.json +110 -0
  624. chronaxis/guide/fields/analysis/sources-raw_can_csv-1.json +330 -0
  625. chronaxis/guide/fields/analysis/sources-raw_can_csv-10.json +233 -0
  626. chronaxis/guide/fields/analysis/sources-raw_can_csv-11.json +225 -0
  627. chronaxis/guide/fields/analysis/sources-raw_can_csv-12.json +228 -0
  628. chronaxis/guide/fields/analysis/sources-raw_can_csv-13.json +226 -0
  629. chronaxis/guide/fields/analysis/sources-raw_can_csv-14.json +230 -0
  630. chronaxis/guide/fields/analysis/sources-raw_can_csv-15.json +227 -0
  631. chronaxis/guide/fields/analysis/sources-raw_can_csv-16.json +230 -0
  632. chronaxis/guide/fields/analysis/sources-raw_can_csv-17.json +238 -0
  633. chronaxis/guide/fields/analysis/sources-raw_can_csv-18.json +239 -0
  634. chronaxis/guide/fields/analysis/sources-raw_can_csv-19.json +233 -0
  635. chronaxis/guide/fields/analysis/sources-raw_can_csv-2.json +310 -0
  636. chronaxis/guide/fields/analysis/sources-raw_can_csv-20.json +242 -0
  637. chronaxis/guide/fields/analysis/sources-raw_can_csv-21.json +230 -0
  638. chronaxis/guide/fields/analysis/sources-raw_can_csv-22.json +228 -0
  639. chronaxis/guide/fields/analysis/sources-raw_can_csv-23.json +230 -0
  640. chronaxis/guide/fields/analysis/sources-raw_can_csv-24.json +223 -0
  641. chronaxis/guide/fields/analysis/sources-raw_can_csv-25.json +290 -0
  642. chronaxis/guide/fields/analysis/sources-raw_can_csv-26.json +131 -0
  643. chronaxis/guide/fields/analysis/sources-raw_can_csv-3.json +297 -0
  644. chronaxis/guide/fields/analysis/sources-raw_can_csv-4.json +226 -0
  645. chronaxis/guide/fields/analysis/sources-raw_can_csv-5.json +230 -0
  646. chronaxis/guide/fields/analysis/sources-raw_can_csv-6.json +227 -0
  647. chronaxis/guide/fields/analysis/sources-raw_can_csv-7.json +230 -0
  648. chronaxis/guide/fields/analysis/sources-raw_can_csv-8.json +238 -0
  649. chronaxis/guide/fields/analysis/sources-raw_can_csv-9.json +239 -0
  650. chronaxis/guide/fields/analysis/sources-signal_csv-1.json +331 -0
  651. chronaxis/guide/fields/analysis/sources-signal_csv-2.json +327 -0
  652. chronaxis/guide/fields/analysis/sources-signal_csv-3.json +295 -0
  653. chronaxis/guide/fields/analysis/sources-variant-6-1.json +319 -0
  654. chronaxis/guide/fields/analysis/sources-variant-6-2.json +327 -0
  655. chronaxis/guide/fields/analysis/sources-variant-6-3.json +314 -0
  656. chronaxis/guide/fields/analysis/sources-variant-6-4.json +91 -0
  657. chronaxis/guide/fields/analysis/windows-all-1.json +361 -0
  658. chronaxis/guide/fields/analysis/windows-all-2.json +187 -0
  659. chronaxis/guide/fields/batch/backend-all-1.json +26 -0
  660. chronaxis/guide/fields/batch/batch_version-all-1.json +22 -0
  661. chronaxis/guide/fields/batch/fail_fast-all-1.json +22 -0
  662. chronaxis/guide/fields/batch/inputs-all-1.json +161 -0
  663. chronaxis/guide/fields/batch/jobs-all-1.json +58 -0
  664. chronaxis/guide/fields/batch/process_count-all-1.json +23 -0
  665. chronaxis/guide/fields/batch/source-all-1.json +22 -0
  666. chronaxis/guide/fields/batch/template-all-1.json +22 -0
  667. chronaxis/guide/fields/definitions/derived-all-1.json +121 -0
  668. chronaxis/guide/fields/definitions/signals-all-1.json +336 -0
  669. chronaxis/guide/fields/definitions/signals-all-2.json +307 -0
  670. chronaxis/guide/fields/definitions/signals-all-3.json +305 -0
  671. chronaxis/guide/fields/definitions/signals-all-4.json +352 -0
  672. chronaxis/guide/fields/definitions/signals-all-5.json +311 -0
  673. chronaxis/guide/fields/definitions/signals-all-6.json +254 -0
  674. chronaxis/guide/fields/definitions/signals-all-7.json +88 -0
  675. chronaxis/guide/fields/definitions/sources-all-1.json +332 -0
  676. chronaxis/guide/fields/definitions/sources-all-10.json +307 -0
  677. chronaxis/guide/fields/definitions/sources-all-11.json +280 -0
  678. chronaxis/guide/fields/definitions/sources-all-12.json +209 -0
  679. chronaxis/guide/fields/definitions/sources-all-13.json +219 -0
  680. chronaxis/guide/fields/definitions/sources-all-14.json +213 -0
  681. chronaxis/guide/fields/definitions/sources-all-15.json +212 -0
  682. chronaxis/guide/fields/definitions/sources-all-16.json +232 -0
  683. chronaxis/guide/fields/definitions/sources-all-17.json +213 -0
  684. chronaxis/guide/fields/definitions/sources-all-18.json +212 -0
  685. chronaxis/guide/fields/definitions/sources-all-19.json +217 -0
  686. chronaxis/guide/fields/definitions/sources-all-2.json +336 -0
  687. chronaxis/guide/fields/definitions/sources-all-20.json +228 -0
  688. chronaxis/guide/fields/definitions/sources-all-21.json +212 -0
  689. chronaxis/guide/fields/definitions/sources-all-22.json +232 -0
  690. chronaxis/guide/fields/definitions/sources-all-23.json +213 -0
  691. chronaxis/guide/fields/definitions/sources-all-24.json +212 -0
  692. chronaxis/guide/fields/definitions/sources-all-25.json +217 -0
  693. chronaxis/guide/fields/definitions/sources-all-26.json +228 -0
  694. chronaxis/guide/fields/definitions/sources-all-27.json +212 -0
  695. chronaxis/guide/fields/definitions/sources-all-28.json +217 -0
  696. chronaxis/guide/fields/definitions/sources-all-29.json +227 -0
  697. chronaxis/guide/fields/definitions/sources-all-3.json +306 -0
  698. chronaxis/guide/fields/definitions/sources-all-30.json +333 -0
  699. chronaxis/guide/fields/definitions/sources-all-31.json +302 -0
  700. chronaxis/guide/fields/definitions/sources-all-32.json +319 -0
  701. chronaxis/guide/fields/definitions/sources-all-33.json +89 -0
  702. chronaxis/guide/fields/definitions/sources-all-4.json +336 -0
  703. chronaxis/guide/fields/definitions/sources-all-5.json +313 -0
  704. chronaxis/guide/fields/definitions/sources-all-6.json +292 -0
  705. chronaxis/guide/fields/definitions/sources-all-7.json +319 -0
  706. chronaxis/guide/fields/definitions/sources-all-8.json +315 -0
  707. chronaxis/guide/fields/definitions/sources-all-9.json +318 -0
  708. chronaxis/guide/fields/index.json +3432 -0
  709. chronaxis/guide/fields/mapping/aliases-all-1.json +91 -0
  710. chronaxis/guide/fields/mapping/analysis-all-1.json +382 -0
  711. chronaxis/guide/fields/mapping/analysis-all-10.json +307 -0
  712. chronaxis/guide/fields/mapping/analysis-all-11.json +311 -0
  713. chronaxis/guide/fields/mapping/analysis-all-12.json +329 -0
  714. chronaxis/guide/fields/mapping/analysis-all-13.json +294 -0
  715. chronaxis/guide/fields/mapping/analysis-all-14.json +311 -0
  716. chronaxis/guide/fields/mapping/analysis-all-15.json +280 -0
  717. chronaxis/guide/fields/mapping/analysis-all-16.json +227 -0
  718. chronaxis/guide/fields/mapping/analysis-all-17.json +230 -0
  719. chronaxis/guide/fields/mapping/analysis-all-18.json +221 -0
  720. chronaxis/guide/fields/mapping/analysis-all-19.json +237 -0
  721. chronaxis/guide/fields/mapping/analysis-all-2.json +342 -0
  722. chronaxis/guide/fields/mapping/analysis-all-20.json +233 -0
  723. chronaxis/guide/fields/mapping/analysis-all-21.json +244 -0
  724. chronaxis/guide/fields/mapping/analysis-all-22.json +228 -0
  725. chronaxis/guide/fields/mapping/analysis-all-23.json +226 -0
  726. chronaxis/guide/fields/mapping/analysis-all-24.json +230 -0
  727. chronaxis/guide/fields/mapping/analysis-all-25.json +227 -0
  728. chronaxis/guide/fields/mapping/analysis-all-26.json +230 -0
  729. chronaxis/guide/fields/mapping/analysis-all-27.json +221 -0
  730. chronaxis/guide/fields/mapping/analysis-all-28.json +237 -0
  731. chronaxis/guide/fields/mapping/analysis-all-29.json +233 -0
  732. chronaxis/guide/fields/mapping/analysis-all-3.json +322 -0
  733. chronaxis/guide/fields/mapping/analysis-all-30.json +244 -0
  734. chronaxis/guide/fields/mapping/analysis-all-31.json +228 -0
  735. chronaxis/guide/fields/mapping/analysis-all-32.json +226 -0
  736. chronaxis/guide/fields/mapping/analysis-all-33.json +230 -0
  737. chronaxis/guide/fields/mapping/analysis-all-34.json +227 -0
  738. chronaxis/guide/fields/mapping/analysis-all-35.json +230 -0
  739. chronaxis/guide/fields/mapping/analysis-all-36.json +221 -0
  740. chronaxis/guide/fields/mapping/analysis-all-37.json +291 -0
  741. chronaxis/guide/fields/mapping/analysis-all-38.json +315 -0
  742. chronaxis/guide/fields/mapping/analysis-all-39.json +304 -0
  743. chronaxis/guide/fields/mapping/analysis-all-4.json +312 -0
  744. chronaxis/guide/fields/mapping/analysis-all-40.json +307 -0
  745. chronaxis/guide/fields/mapping/analysis-all-41.json +292 -0
  746. chronaxis/guide/fields/mapping/analysis-all-42.json +333 -0
  747. chronaxis/guide/fields/mapping/analysis-all-43.json +296 -0
  748. chronaxis/guide/fields/mapping/analysis-all-44.json +322 -0
  749. chronaxis/guide/fields/mapping/analysis-all-45.json +298 -0
  750. chronaxis/guide/fields/mapping/analysis-all-46.json +347 -0
  751. chronaxis/guide/fields/mapping/analysis-all-47.json +302 -0
  752. chronaxis/guide/fields/mapping/analysis-all-48.json +263 -0
  753. chronaxis/guide/fields/mapping/analysis-all-49.json +301 -0
  754. chronaxis/guide/fields/mapping/analysis-all-5.json +313 -0
  755. chronaxis/guide/fields/mapping/analysis-all-50.json +336 -0
  756. chronaxis/guide/fields/mapping/analysis-all-51.json +335 -0
  757. chronaxis/guide/fields/mapping/analysis-all-52.json +335 -0
  758. chronaxis/guide/fields/mapping/analysis-all-53.json +334 -0
  759. chronaxis/guide/fields/mapping/analysis-all-54.json +339 -0
  760. chronaxis/guide/fields/mapping/analysis-all-55.json +335 -0
  761. chronaxis/guide/fields/mapping/analysis-all-56.json +336 -0
  762. chronaxis/guide/fields/mapping/analysis-all-57.json +335 -0
  763. chronaxis/guide/fields/mapping/analysis-all-58.json +333 -0
  764. chronaxis/guide/fields/mapping/analysis-all-59.json +325 -0
  765. chronaxis/guide/fields/mapping/analysis-all-6.json +323 -0
  766. chronaxis/guide/fields/mapping/analysis-all-60.json +334 -0
  767. chronaxis/guide/fields/mapping/analysis-all-61.json +311 -0
  768. chronaxis/guide/fields/mapping/analysis-all-62.json +289 -0
  769. chronaxis/guide/fields/mapping/analysis-all-63.json +383 -0
  770. chronaxis/guide/fields/mapping/analysis-all-64.json +357 -0
  771. chronaxis/guide/fields/mapping/analysis-all-65.json +375 -0
  772. chronaxis/guide/fields/mapping/analysis-all-66.json +351 -0
  773. chronaxis/guide/fields/mapping/analysis-all-67.json +346 -0
  774. chronaxis/guide/fields/mapping/analysis-all-68.json +317 -0
  775. chronaxis/guide/fields/mapping/analysis-all-69.json +313 -0
  776. chronaxis/guide/fields/mapping/analysis-all-7.json +306 -0
  777. chronaxis/guide/fields/mapping/analysis-all-70.json +326 -0
  778. chronaxis/guide/fields/mapping/analysis-all-71.json +316 -0
  779. chronaxis/guide/fields/mapping/analysis-all-72.json +264 -0
  780. chronaxis/guide/fields/mapping/analysis-all-73.json +228 -0
  781. chronaxis/guide/fields/mapping/analysis-all-74.json +241 -0
  782. chronaxis/guide/fields/mapping/analysis-all-75.json +273 -0
  783. chronaxis/guide/fields/mapping/analysis-all-76.json +382 -0
  784. chronaxis/guide/fields/mapping/analysis-all-77.json +328 -0
  785. chronaxis/guide/fields/mapping/analysis-all-78.json +338 -0
  786. chronaxis/guide/fields/mapping/analysis-all-79.json +304 -0
  787. chronaxis/guide/fields/mapping/analysis-all-8.json +309 -0
  788. chronaxis/guide/fields/mapping/analysis-all-80.json +140 -0
  789. chronaxis/guide/fields/mapping/analysis-all-9.json +329 -0
  790. chronaxis/guide/fields/mapping/io_policy-all-1.json +19 -0
  791. chronaxis/guide/fields/mapping/mapping_version-all-1.json +19 -0
  792. chronaxis/guide/fields/mapping/path_base-all-1.json +19 -0
  793. chronaxis/guide/fields/mapping/sections-all-1.json +402 -0
  794. chronaxis/guide/fields/mapping/sections-all-2.json +232 -0
  795. chronaxis/guide/lookup.py +90 -0
  796. chronaxis/guide/manifest.json +614 -0
  797. chronaxis/guide/run_analysis.py +34 -0
  798. chronaxis/guide/schemas/analysis.schema.json +8451 -0
  799. chronaxis/guide/schemas/batch-v1.schema.json +172 -0
  800. chronaxis/guide/schemas/definitions.schema.json +29 -0
  801. chronaxis/guide/schemas/legacy-import-v1.schema.json +143 -0
  802. chronaxis/guide/semantics.md +62 -0
  803. chronaxis/guide/tasks.json +290 -0
  804. chronaxis/guide/workflow.md +38 -0
  805. chronaxis/legacy/__init__.py +46 -0
  806. chronaxis/legacy/batch_read.py +412 -0
  807. chronaxis/legacy/batch_validation.py +134 -0
  808. chronaxis/legacy/batch_wire.py +264 -0
  809. chronaxis/legacy/batch_worker.py +417 -0
  810. chronaxis/legacy/binding.py +154 -0
  811. chronaxis/legacy/dbc_cycles.py +47 -0
  812. chronaxis/legacy/decode_policy.py +28 -0
  813. chronaxis/legacy/disjunction.py +79 -0
  814. chronaxis/legacy/export_worker.py +147 -0
  815. chronaxis/legacy/export_write.py +378 -0
  816. chronaxis/legacy/message_store.py +562 -0
  817. chronaxis/legacy/process_read.py +526 -0
  818. chronaxis/legacy/raw_store.py +341 -0
  819. chronaxis/legacy/records.py +709 -0
  820. chronaxis/legacy/required_records.py +122 -0
  821. chronaxis/legacy/sum.py +403 -0
  822. chronaxis/legacy/sum_numpy.py +43 -0
  823. chronaxis/legacy/updates.py +277 -0
  824. chronaxis/legacy/vendor/sclicer_functions_v1/can_processor.py +138 -0
  825. chronaxis/legacy/vendor/sclicer_functions_v1/file_processor.py +218 -0
  826. chronaxis/legacy/vendor/sclicer_functions_v1/utils.py +447 -0
  827. chronaxis/legacy/worker.py +352 -0
  828. chronaxis/migration/__init__.py +11 -0
  829. chronaxis/migration/api.py +270 -0
  830. chronaxis/migration/ini.py +110 -0
  831. chronaxis/migration/legacy_sum.py +304 -0
  832. chronaxis/migration/models.py +83 -0
  833. chronaxis/migration/publication.py +230 -0
  834. chronaxis/migration/sclicer.py +241 -0
  835. chronaxis/migration/slope.py +78 -0
  836. chronaxis/migration/start_end.py +48 -0
  837. chronaxis/planning/__init__.py +19 -0
  838. chronaxis/planning/channels.py +30 -0
  839. chronaxis/planning/checks.py +447 -0
  840. chronaxis/planning/config_groups.py +215 -0
  841. chronaxis/planning/dbc_defaults.py +88 -0
  842. chronaxis/planning/export_options.py +247 -0
  843. chronaxis/planning/input_defaults.py +62 -0
  844. chronaxis/planning/input_paths.py +124 -0
  845. chronaxis/planning/input_requirements.py +250 -0
  846. chronaxis/planning/inputs.py +306 -0
  847. chronaxis/planning/intervals.py +242 -0
  848. chronaxis/planning/legacy_execution.py +38 -0
  849. chronaxis/planning/message_calculations.py +171 -0
  850. chronaxis/planning/models.py +369 -0
  851. chronaxis/planning/nodes.py +355 -0
  852. chronaxis/planning/plan.py +294 -0
  853. chronaxis/planning/preset_models.py +211 -0
  854. chronaxis/planning/record_execution.py +76 -0
  855. chronaxis/planning/reports.py +523 -0
  856. chronaxis/planning/sequences.py +91 -0
  857. chronaxis/planning/signal_groups.py +61 -0
  858. chronaxis/planning/signal_validity.py +46 -0
  859. chronaxis/planning/text_inputs.py +110 -0
  860. chronaxis/presets.py +270 -0
  861. chronaxis/results/__init__.py +34 -0
  862. chronaxis/results/analysis_outcome.py +67 -0
  863. chronaxis/results/artifact_exports.py +212 -0
  864. chronaxis/results/binding_metadata.py +54 -0
  865. chronaxis/results/budget.py +138 -0
  866. chronaxis/results/can_metadata.py +247 -0
  867. chronaxis/results/codec.py +246 -0
  868. chronaxis/results/errors.py +25 -0
  869. chronaxis/results/export_files.py +216 -0
  870. chronaxis/results/frame_exports.py +299 -0
  871. chronaxis/results/frame_patch.py +186 -0
  872. chronaxis/results/frame_rebuild.py +458 -0
  873. chronaxis/results/frame_sort.py +223 -0
  874. chronaxis/results/input_diagnostics.py +51 -0
  875. chronaxis/results/manifest.py +343 -0
  876. chronaxis/results/merge_runs.py +207 -0
  877. chronaxis/results/owned_directory.py +32 -0
  878. chronaxis/results/raw_exports.py +689 -0
  879. chronaxis/results/readable.py +355 -0
  880. chronaxis/results/readable_format.py +94 -0
  881. chronaxis/results/result.py +734 -0
  882. chronaxis/results/rows.py +57 -0
  883. chronaxis/results/signal_exports.py +209 -0
  884. chronaxis/results/signal_grid.py +219 -0
  885. chronaxis/results/spool.py +421 -0
  886. chronaxis/results/summary.py +350 -0
  887. chronaxis/results/text_can_metadata.py +64 -0
  888. chronaxis/results/threshold_metadata.py +105 -0
  889. chronaxis/runner.py +121 -0
  890. chronaxis/sources/__init__.py +23 -0
  891. chronaxis/sources/asc.py +412 -0
  892. chronaxis/sources/blf.py +101 -0
  893. chronaxis/sources/can_spec.py +179 -0
  894. chronaxis/sources/can_updates.py +160 -0
  895. chronaxis/sources/csv_spec.py +133 -0
  896. chronaxis/sources/descriptions.py +65 -0
  897. chronaxis/sources/memory.py +299 -0
  898. chronaxis/sources/models.py +497 -0
  899. chronaxis/sources/packing.py +170 -0
  900. chronaxis/sources/protocol.py +221 -0
  901. chronaxis/sources/raw_can.py +62 -0
  902. chronaxis/sources/raw_csv.py +470 -0
  903. chronaxis/sources/raw_csv_layout.py +310 -0
  904. chronaxis/sources/signal_csv.py +608 -0
  905. chronaxis/sources/text_can_decode.py +421 -0
  906. chronaxis/sources/text_can_ref.py +48 -0
  907. chronaxis/sources/text_can_spec.py +61 -0
  908. chronaxis/timebase/__init__.py +19 -0
  909. chronaxis/timebase/conversion.py +364 -0
  910. chronaxis/timebase/numpy_ops.py +104 -0
  911. chronaxis/user_guide.py +81 -0
  912. chronaxis-0.1.0.dev0.dist-info/METADATA +172 -0
  913. chronaxis-0.1.0.dev0.dist-info/RECORD +917 -0
  914. chronaxis-0.1.0.dev0.dist-info/WHEEL +5 -0
  915. chronaxis-0.1.0.dev0.dist-info/entry_points.txt +2 -0
  916. chronaxis-0.1.0.dev0.dist-info/licenses/LICENSE +21 -0
  917. chronaxis-0.1.0.dev0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,618 @@
1
+ """在有预算的保持快照上调用两个既有独立表达式数值核。
2
+
3
+ 输入为调用方的HoldQueries、实际解码证据绑定和预先编译的固定表达式tuple;
4
+ 输出须关闭的ExpressionResult,保存同轴结果、实际依赖更新和原样本引用。
5
+ owner先申请固定空间,再有预算地遍历元数据及各表达式DAG;查询先按节点、
6
+ 边、依赖、轴长和ENUM域申请暂存上界,再建立保持/context并求值。
7
+ 参考逐点调用独立标量核,NumPy调用整列数组核,没有标量回退或重新归一化。
8
+ 临时HoldResult始终关闭,返回结果独立计持有原样本及输出,不随state更新改变。
9
+ 本模块不编译任意文本、不读文件、不调度事件/deadline、不关闭调用方资源。
10
+ 来源关联核对配置及实际描述证据;state样本由调用方从绑定历史推进,本层模型
11
+ 没有历史SHA字段,不能把这种契约检查声称为逐条样本的防伪认证。
12
+ 预算是新分析层保守估算,不代表整个进程RSS或恶意修改私有字段的防护。
13
+ """
14
+
15
+ # 元数据按对象身份去重,避免对共享DAG反复展开或使用32层历史描述限制。
16
+ from collections.abc import Mapping
17
+ from dataclasses import fields, is_dataclass
18
+ from enum import Enum
19
+ from sys import getsizeof
20
+ from types import MappingProxyType
21
+ import numpy as np
22
+ from ..core.binding import _identity
23
+ from ..core.decoded_binding import DecodedBindings
24
+ from ..core.expression import CompiledExpression, ExprNode
25
+ from ..core.expression_reference import Evaluation, evaluate_reference
26
+ from ..core.expression_numpy import ArrayEvaluation, evaluate_numpy
27
+ from ..core.numeric import ScalarValue
28
+ from ..core.numeric_numpy import NumericArray
29
+ from ..results.errors import ResultClosedError
30
+ from ..timebase.conversion import require_int64_ns
31
+ from .bindings import _fingerprint
32
+ from .history import _metadata_bytes
33
+ from .history_records import estimate_record_bytes
34
+ from .hold import HoldQueries
35
+
36
+
37
+ class ExpressionResult:
38
+ """持有独立输出和样本预算;关闭后拒绝读取,owner关闭全部自有结果。
39
+
40
+ 数组按普通只读约定提供;外部另存已取得的rows/arrays/samples超过关闭时刻,
41
+ 须自行负责这些引用的内存,不把释放申请解释为强制销毁外部对象。
42
+ """
43
+
44
+ def __init__(self, owner, cost, times, payload, actual, samples, compiled):
45
+ """保存一次表达式查询的完整输出及其内存申请。
46
+
47
+ 参数:
48
+ owner: 创建本结果的ExpressionQueries,负责登记和统一关闭。
49
+ cost: 本结果持有的预算字节数,由查询入口提前申请。
50
+ times: 整数纳秒轴,为tuple或只读一维INT64数组。
51
+ payload: 参考Evaluation元组或NumPy ArrayEvaluation,与时间轴等长。
52
+ actual: 各查询点是否存在真实依赖更新,与时间轴等长。
53
+ samples: 保持查询使用的非空原样本元组,保留来源定位。
54
+ compiled: 本次使用的已登记编译对象,提供表达式及绑定身份。
55
+ 返回:
56
+ 新结果;不复制样本,不重新计算表达式。
57
+ 异常:
58
+ 构造失败由调用方释放本次预算,不向owner安装半成品。
59
+ """
60
+ # 结果取得自己的申请;关闭前不依赖state仍保留同一旧样本。
61
+ self._owner, self._cost, self._closed = owner, cost, False
62
+ self._times, self._payload, self._actual, self._samples = times, payload, actual, samples
63
+ self._binding_identity, self._compiled_identity = compiled.bindings.identity, compiled.identity
64
+
65
+ def _ensure_open(self):
66
+ """拒绝关闭后读取。参数: 无。返回: None。异常: ResultClosedError。"""
67
+ # 关闭已释放本对象预算,不能继续从它读取输出。
68
+ if self._closed:
69
+ raise ResultClosedError('表达式查询结果已关闭')
70
+
71
+ @property
72
+ def closed(self):
73
+ """读取关闭状态。参数: 无。返回: bool。异常: 无。"""
74
+ return self._closed
75
+
76
+ @property
77
+ def times_ns(self):
78
+ """读取自有整数ns轴。参数: 无。返回: tuple或只读int64列。异常: ResultClosedError。"""
79
+ self._ensure_open()
80
+ return self._times
81
+
82
+ @property
83
+ def rows(self) -> tuple[Evaluation, ...]:
84
+ """读取参考输出。参数: 无。返回: Evaluation tuple。异常: 关闭或后端类型错误。"""
85
+ self._ensure_open()
86
+ # 参考输出与数组输出有不同结构,禁止取错接口后误解字段。
87
+ if type(self._payload) is not tuple:
88
+ raise TypeError('NumPy表达式查询请读取arrays')
89
+ return self._payload
90
+
91
+ @property
92
+ def arrays(self) -> ArrayEvaluation:
93
+ """读取NumPy输出。参数: 无。返回: ArrayEvaluation。异常: 关闭或后端类型错误。"""
94
+ self._ensure_open()
95
+ # 数组接口只返回真实数组计算结果,不把参考元组包装成数组。
96
+ if not isinstance(self._payload, ArrayEvaluation):
97
+ raise TypeError('参考表达式查询请读取rows')
98
+ return self._payload
99
+
100
+ @property
101
+ def actual_update(self):
102
+ """读取实际依赖更新OR。参数: 无。返回: 同轴bool tuple或只读列。异常: 关闭。"""
103
+ self._ensure_open()
104
+ return self._actual
105
+
106
+ @property
107
+ def samples(self):
108
+ """读取非None原样本,保留dependencies顺序。参数: 无。返回: tuple。异常: 关闭。"""
109
+ self._ensure_open()
110
+ return self._samples
111
+
112
+ @property
113
+ def binding_identity(self):
114
+ """读取实际绑定身份。参数: 无。返回: SHA文本。异常: ResultClosedError。"""
115
+ self._ensure_open()
116
+ return self._binding_identity
117
+
118
+ @property
119
+ def compiled_identity(self):
120
+ """读取登记表达式身份。参数: 无。返回: SHA文本。异常: ResultClosedError。"""
121
+ self._ensure_open()
122
+ return self._compiled_identity
123
+
124
+ def close(self):
125
+ """释放本结果的申请及引用,保留调用方的保持查询对象。
126
+
127
+ 参数:
128
+ 无。
129
+ 返回:
130
+ None;重复关闭不会重复抵销申请。
131
+ 异常:
132
+ 预算账本不一致时传播内部错误。
133
+ 副作用:
134
+ 从owner登记表移除自身,丢弃时间轴、输出和原样本引用。
135
+ 外部提前取得的数组或行对象仍由外部调用方负责其生命周期。
136
+ """
137
+ if self._closed:
138
+ return
139
+ # 单线程快照只辨认本结果release是否实际完成,不改变其他owner的账目。
140
+ budget, cost = self._owner._budget, self._cost
141
+ before = budget.ram_bytes
142
+ released = False
143
+ try:
144
+ budget.release_ram(cost)
145
+ released = True
146
+ finally:
147
+ # 已扣账后的返回取消必须关闭,未扣账的取消保留原结果可重试。
148
+ if released or budget.ram_bytes == before - cost:
149
+ self._discard()
150
+
151
+ def _discard(self):
152
+ """移除当前结果并丢引用,预算抵销责任留给调用者。
153
+
154
+ 参数: 无;仅用于已释放结果或尚由查询持有申请的失败结果。
155
+ 返回: None,标记关闭。
156
+ 异常: 登记移除错误传播,finally仍关闭避免重复扣账。
157
+ """
158
+ # 不调用close抵销第二次金额,保留外层对本次唯一申请的清理责任。
159
+ try:
160
+ self._owner._results.discard(self)
161
+ finally:
162
+ self._closed, self._cost = True, 0
163
+ self._times = self._payload = self._actual = self._samples = self._owner = None
164
+
165
+
166
+ class ExpressionQueries:
167
+ """登记固定可执行表达式,按当前保持状态产生独立预算快照。
168
+
169
+ 不持有全量样本;绑定、声明、文本、DAG和ENUM域在固定申请中独立计账。
170
+ 查询仅接受登记的对象本身,不根据同名或同SHA接收另一个编译对象。
171
+ 调用方关闭holds/state后拒绝新查询,已返回结果仍可读至自身/本owner关闭。
172
+ """
173
+
174
+ def __init__(self, holds: HoldQueries, bindings: DecodedBindings, expressions: tuple[CompiledExpression, ...]):
175
+ """登记一组已编译表达式,并为固定元数据先申请空间。
176
+
177
+ 参数:
178
+ holds: 调用方的HoldQueries,包含当前状态及已核对的来源范围。
179
+ bindings: DecodedBindings,来自实际历史校核,静态声明不能代替。
180
+ expressions: CompiledExpression元组;只接受这些对象本身的后续查询。
181
+ 返回:
182
+ 新ExpressionQueries;不持有全部历史样本,也不关闭调用方资源。
183
+ 异常:
184
+ TypeError: 输入类型或元数据类型不符合已定义协议。
185
+ ValueError: 来源、转换、范围或表达式绑定不匹配。
186
+ BudgetExceededError: 固定元数据超预算;关闭本次部分构造并抵销申请。
187
+ 原构造异常不被清理失败替换;持续失败时从expression_queries_cleanup_owner恢复close。
188
+ 处理流程:
189
+ 先预留容器,再按对象身份遍历绑定、表达式及标签域,逐步增加申请。
190
+ 核对来源证据和同步条件,最后记录每个表达式的节点、边及枚举域成本。
191
+ """
192
+ if (not isinstance(holds, HoldQueries) or not isinstance(bindings, DecodedBindings)
193
+ or type(expressions) is not tuple or any(not isinstance(item, CompiledExpression) for item in expressions)):
194
+ raise TypeError('表达式查询需要HoldQueries/DecodedBindings及CompiledExpression tuple')
195
+ # 构造前确认调用方保持对象仍可用,此时尚未创建任何自有申请。
196
+ holds._ensure_open()
197
+ # 引用和遍历容器先有固定预留;后续每一对象/节点增长另申请后再加入容器。
198
+ self._budget, self._fixed_cost, self._closed = holds._budget, 0, False
199
+ self._holds = self._bindings = self._expressions = self._stats = self._labels = self._results = None
200
+ try:
201
+ self._charge(32768 + len(expressions) * 2048)
202
+ self._holds, self._bindings, self._expressions = holds, bindings, expressions
203
+ self._results, self._stats = set(), {}
204
+ # 标签映射可很宽;复制容器之前先计槽位,深域随后逐对象申请。
205
+ self._charge(8192 + len(holds._labels) * 1024)
206
+ self._labels = MappingProxyType(dict(holds._labels))
207
+ # 包括原描述/EOF和借用标签,owner在调用方lease关闭后仍计自身元数据引用。
208
+ self._walk_metadata((bindings, expressions, holds._context, self._labels))
209
+ # 原历史描述已按JSON深度协议验证;指纹临时树会重复编码共享来源定位。
210
+ # 此额外申请仅计实际描述,不把32层JSON限制施加给表达式DAG。
211
+ self._charge(16 * _metadata_bytes(holds._context.descriptions))
212
+ # 同名字段不能证明转换、来源及时间范围一致,必须逐项核对。
213
+ self._check_contract()
214
+ # 每棵树属于当前实际绑定,联合依赖仍要通过同步约束。
215
+ for compiled in expressions:
216
+ if not isinstance(compiled.bindings, DecodedBindings) or compiled.bindings.identity != bindings.identity:
217
+ raise ValueError('登记表达式与当前解码运行绑定不同')
218
+ bindings.require_synchronized(compiled.dependencies)
219
+ # 同一登记对象重复出现不增加查询选择语义;元数据早已按id去重。
220
+ if id(compiled) not in self._stats:
221
+ self._stats[id(compiled)] = self._node_counts(compiled)
222
+ except BaseException as exc:
223
+ # 部分构造也可能已持有固定申请;取消和分配失败均仅清理本owner。
224
+ try:
225
+ self.close()
226
+ except BaseException as cleanup:
227
+ exc.add_note(f'表达式查询初始化清理附加失败: {type(cleanup).__name__}')
228
+ # 固定申请分次产生,恢复owner保留完整自有金额,不动借用holds/state。
229
+ if not self._closed:
230
+ try:
231
+ self.close()
232
+ except BaseException as retry:
233
+ exc.add_note(f'表达式查询初始化清理重试失败: {type(retry).__name__}')
234
+ if not self._closed:
235
+ exc.expression_queries_cleanup_owner = self
236
+ exc.add_note('释放恢复后调用expression_queries_cleanup_owner.close()')
237
+ raise
238
+
239
+ def _charge(self, amount):
240
+ """逐步申请固定空间。参数: amount非负bytes。返回: None。异常: 预算超限。
241
+
242
+ 先申请再增加本owner计数,失败不改原申请,不启动后续容器增长。
243
+ """
244
+ before = self._budget.ram_bytes
245
+ try:
246
+ self._budget.reserve_ram(amount)
247
+ finally:
248
+ # reserve正常完成或已记账后取消,都先纳入构造owner再由其关闭收尾。
249
+ if self._budget.ram_bytes == before + amount:
250
+ self._fixed_cost += amount
251
+
252
+ def _walk_metadata(self, value):
253
+ """按对象身份遍历固定元数据,先计账再扩展遍历容器。
254
+
255
+ 参数:
256
+ value: 已冻结的绑定、表达式、来源描述及标签树。
257
+ 返回:
258
+ None;每个不同对象只计一次,DAG共享节点不反复展开。
259
+ 异常:
260
+ TypeError: 遇到协议之外的类型。
261
+ BudgetExceededError: 本次对象或容器的预留不足。
262
+ 边界:
263
+ 表达式树不套用历史JSON的32层限制;不扩大表达式允许的语法。
264
+ 预算包含对象浅大小、遍历集合、栈以及后续指纹计算的保守暂存。
265
+ """
266
+ stack, seen = [value], set()
267
+ while stack:
268
+ item = stack.pop()
269
+ # 共享节点按对象身份只展开一次,避免DAG重复持有量无限增长。
270
+ if id(item) in seen:
271
+ continue
272
+ # 16倍对象浅大小和固定槽位覆盖持有、visited、栈与稍后指纹临时树。
273
+ self._charge(1024 + getsizeof(item) * 16)
274
+ seen.add(id(item))
275
+ if is_dataclass(item) and not isinstance(item, type):
276
+ # 所有模型字段进入成本;字段信息只在已预留的局部容器中使用。
277
+ for entry in fields(item):
278
+ self._charge(512)
279
+ stack.append(getattr(item, entry.name))
280
+ elif isinstance(item, Mapping):
281
+ # 键和值均进入树;先预留全部槽位,再增长遍历栈。
282
+ self._charge(len(item) * 1024)
283
+ for key, child in item.items():
284
+ stack.append(key)
285
+ stack.append(child)
286
+ elif type(item) is tuple:
287
+ # 冻结序列仍需要遍历暂存,空tuple不会虚构子项。
288
+ self._charge(len(item) * 512)
289
+ stack.extend(item)
290
+ elif isinstance(item, Enum) or item is None or type(item) in (str, int, float, bool):
291
+ # 原生叶值已计入getsizeof;枚举是typed声明而非任意对象协议。
292
+ continue
293
+ else:
294
+ raise TypeError('表达式查询元数据含未支持类型')
295
+
296
+ def _check_contract(self):
297
+ """核对保持上下文与实际证据、投影内完整定义及会话domain,禁止同名借用。
298
+
299
+ 参数: 无。返回: None。异常: ValueError为来源/指纹/端点/定义不符。
300
+ 不重读历史;调用方仍负责从绑定历史推进当前state。
301
+ """
302
+ # 校验上下文契约,不重读历史;样本仍由调用方按同一绑定历史推进。
303
+ context, declarations = self._holds._context, self._bindings.declarations
304
+ if context.session_id != declarations.session_id or context.domain != declarations.domain:
305
+ raise ValueError('保持会话/domain与解码运行绑定不同')
306
+ evidence = {item.source: item for item in self._bindings.sources}
307
+ descriptions = {item.name: item for item in context.descriptions}
308
+ completions = {item.source: item for item in context.completions}
309
+ # 元数据遍历已经预付绑定及描述;保持状态必须恰好覆盖真实历史投影。
310
+ # 未使用声明仍在bindings.signals中供静态检查,不把它们当作实际读取事实。
311
+ definitions = {item.name: item for item in self._bindings.projected_signals}
312
+ if (evidence.keys() != descriptions.keys() or evidence.keys() != completions.keys()
313
+ or definitions.keys() != self._holds._definitions.keys()):
314
+ raise ValueError('保持来源/信号集合与解码运行绑定不同')
315
+ # 完整转换定义参与比对,不能只根据别名或目标类型借用旧状态。
316
+ for name, definition in definitions.items():
317
+ if _identity(definition.identity()) != _identity(self._holds._definitions[name].identity()):
318
+ raise ValueError('保持完整信号转换与解码运行绑定不同')
319
+ # 来源描述、观测范围和完整EOF记录共同匹配实际运行证据。
320
+ for name, proof in evidence.items():
321
+ description, completion = descriptions[name], completions[name]
322
+ if (_fingerprint(description) != proof.description_sha256
323
+ or description.observation_start_ns != proof.observation_start_ns
324
+ or completion.session_id != proof.session_id or not completion.source_eof
325
+ or completion.observed_end_ns != proof.observation_end_ns
326
+ or completion.batch_index + 1 != proof.progress_count):
327
+ raise ValueError('保持实际描述/范围/EOF与运行证据不同')
328
+
329
+ def _node_counts(self, compiled):
330
+ """记录表达式的唯一节点、全部参数边及枚举域暂存成本。
331
+
332
+ 参数:
333
+ compiled: 当前登记的CompiledExpression对象。
334
+ 返回:
335
+ 三项元组:唯一节点数、参数边数、枚举相关的暂存字节估算。
336
+ 异常:
337
+ TypeError: 节点不是ExprNode。
338
+ BudgetExceededError: 遍历节点及容器增长的固定申请不足。
339
+ 边界:
340
+ 用对象身份去重,不对递归节点作结构哈希;不同对象保守分别计账。
341
+ 即使查询轴为空,枚举标签构造和验证仍可能需要空间。
342
+ """
343
+ # 只遍历ExprNode;共享对象只展开一次,节点及全部参数边先计账再扩栈。
344
+ stack, seen, edges, enum_cost = [compiled.root], set(), 0, 0
345
+ while stack:
346
+ node = stack.pop()
347
+ if not isinstance(node, ExprNode):
348
+ raise TypeError('登记表达式需要typed ExprNode树')
349
+ if id(node) in seen:
350
+ continue
351
+ self._charge(4096 + len(node.args) * 512)
352
+ seen.add(id(node))
353
+ edges += len(node.args)
354
+ stack.extend(node.args)
355
+ # 核心模型/求值器会set/tuple固定域,N=0时这些临时量仍存在。
356
+ enum_cost += 16 * (getsizeof(node.labels) + sum(getsizeof(label) + 128 for label in node.labels))
357
+ for name in compiled.dependencies:
358
+ labels = self._labels[name]
359
+ enum_cost += 16 * (getsizeof(labels) + sum(getsizeof(label) + 128 for label in labels))
360
+ return len(seen), edges, enum_cost
361
+
362
+ @property
363
+ def closed(self):
364
+ """读取owner关闭状态。参数: 无。返回: bool。异常: 无。"""
365
+ return self._closed
366
+
367
+ def _ensure_open(self):
368
+ """拒绝owner/调用方保持/state关闭后新查询。参数: 无。返回: None。异常: 关闭。"""
369
+ if self._closed:
370
+ raise ResultClosedError('表达式查询owner已关闭')
371
+ # 上游保持对象继续检查state;已有结果不借此限制读取自身快照。
372
+ self._holds._ensure_open()
373
+
374
+ def _prepare(self, compiled, count, point):
375
+ """检查表达式登记关系,并预留本次输出、缓存及原样本的空间。
376
+
377
+ 参数:
378
+ compiled: 必须是本owner登记的对象本身。
379
+ count: 查询轴长度,空轴为0。
380
+ point: 原生bool,是否按点视图解释真实末端。
381
+ 返回:
382
+ 本次成功申请的字节数;调用方负责将其交给结果或在失败时释放。
383
+ 异常:
384
+ ResultClosedError: owner、保持对象或状态已关闭。
385
+ TypeError: point不是bool。
386
+ ValueError: 编译对象未登记。
387
+ BudgetExceededError: 无法预留本次查询空间。
388
+ 边界:
389
+ 成本随节点、边、依赖和轴长增长,也覆盖空轴对象头及固定枚举临时量。
390
+ 原样本引用单独计账;这里不创建保持列,也不执行数值运算。
391
+ """
392
+ self._ensure_open()
393
+ # 不接受整数或NumPy bool隐式充当点查询开关。
394
+ if type(point) is not bool:
395
+ raise TypeError('point需要bool')
396
+ # 身份摘要相同也不能绕过登记,只接受已保留成本的原对象。
397
+ if id(compiled) not in self._stats or not any(item is compiled for item in self._expressions):
398
+ raise ValueError('只能查询当前owner登记的CompiledExpression对象')
399
+ nodes, edges, enum_cost = self._stats[id(compiled)]
400
+ # 所有局部cache节点同时存活;4096/节点边依赖/点覆盖复制、整数掩码和isclose多核。
401
+ # (N+1)包括N=0的对象/列头/缓存容器,ENUM域另计而不是按轴长隐藏。
402
+ sample_cost = sum(estimate_record_bytes(sample) for name in compiled.dependencies
403
+ if (sample := self._holds._state.get(name)) is not None)
404
+ cost = 32768 + 4096 * (nodes + edges + len(compiled.dependencies) + 1) * (count + 1) + enum_cost * 4 + sample_cost
405
+ self._budget.reserve_ram(cost)
406
+ return cost
407
+
408
+ def _check_axis(self, times):
409
+ """检查规范整数轴非回退及最新状态限制,纯常量同样执行。
410
+
411
+ 参数: times已规范tuple或精确int64列。返回: None。异常: ValueError为回退。
412
+ 此处共享时间协议,不共享两个保持/表达式数值核。
413
+ """
414
+ # 数组轴用整列比较,参考tuple用独立整数协议;临时mask已在查询上界内。
415
+ backward = np.any(times[1:] < times[:-1]) if type(times) is np.ndarray else any(
416
+ right < left for left, right in zip(times, times[1:]))
417
+ if backward:
418
+ raise ValueError('表达式查询轴回退')
419
+ # 当前状态只能向后查询;等于最后更新时间合法,重复轴也合法。
420
+ last = self._holds._state.last_time_ns
421
+ if len(times) and last is not None and int(times[0]) < last:
422
+ raise ValueError('最新状态不能回溯已经提交的过去')
423
+
424
+ def _register(self, cost, times, payload, actual, samples, compiled):
425
+ """在完整申请中只构造结果,外层取得对象后负责登记。
426
+
427
+ 参数: cost/times/payload/actual/samples已完成输出、compiled登记对象。
428
+ 返回: ExpressionResult。异常: 构造错误由查询抵销,返回取消不遗留登记。
429
+ """
430
+ # 局部对象和集合安装分开,使半安装取消能准确撤销本批对象。
431
+ return ExpressionResult(self, cost, times, payload, actual, samples, compiled)
432
+
433
+ def _keep_hold(self, held, result):
434
+ """登记临时保持结果,列表增长失败也关闭刚取得的申请。
435
+
436
+ 参数: held本次临时列表、result新HoldResult。返回: None。
437
+ 异常: 列表分配错误传播;新结果关闭,之前结果仍由查询finally处理。
438
+ """
439
+ try:
440
+ held.append(result)
441
+ except BaseException:
442
+ # 新保持句柄尚未登记,必须就地关闭;此前句柄由查询finally关闭。
443
+ result.close()
444
+ raise
445
+
446
+ def query_reference(self, compiled, times_ns: tuple[int, ...], *, point=False) -> ExpressionResult:
447
+ """在当前状态上逐点执行独立参考保持和标量表达式计算。
448
+
449
+ 参数:
450
+ compiled: 当前owner登记的编译对象。
451
+ times_ns: 非递减整数纳秒tuple;不能回溯到已提交状态之前。
452
+ point: 默认False;True按点视图检查真实末端,仍排除有效期右端。
453
+ 返回:
454
+ 须关闭的ExpressionResult;rows为Evaluation元组,空轴得到空元组。
455
+ actual_update记录真实依赖更新,samples保留原样本及其定位。
456
+ 异常:
457
+ 类型、登记、时间轴、预算或数值错误原样传播;取消也释放本次申请。
458
+ 处理流程:
459
+ 先预留并检查轴,建立各依赖的独立保持结果,再逐点准备输入并求值。
460
+ 输出独立持有原样本预算;所有临时保持结果在finally关闭。
461
+ """
462
+ # 参考轴需要明确元组,避免消费任意迭代器后才发现预算不足。
463
+ if type(times_ns) is not tuple:
464
+ raise TypeError('参考表达式轴需要tuple')
465
+ held, output, cost = None, None, 0
466
+ before = self._budget.ram_bytes
467
+ try:
468
+ # _prepare的申请返回也在保护内,未开始数值核时可安全抵销后重试。
469
+ cost = self._prepare(compiled, len(times_ns), point)
470
+ held = []
471
+ # 先有查询预算,再逐值检查时间,不允许有损转换或回退。
472
+ times = tuple(require_int64_ns(time, 'expression.time_ns') for time in times_ns)
473
+ self._check_axis(times)
474
+ # 各依赖使用同一精确轴;逐项登记临时句柄,所有出口统一关闭。
475
+ for name in compiled.dependencies:
476
+ self._keep_hold(held, self._holds.query_reference(name, times, point=point))
477
+ # 结果与更新诊断分别累积,已知逻辑结果也要保留依赖质量。
478
+ rows, actual = [], []
479
+ # 参考实现逐点独立计算;每点只使用同轴保持输入。
480
+ for index, _ in enumerate(times):
481
+ context = {}
482
+ updated = False
483
+ for name, result in zip(compiled.dependencies, held):
484
+ row = result.rows[index]
485
+ context[name] = ScalarValue(row.value, result.definition.dtype, row.valid, row.quality, self._labels[name])
486
+ updated |= row.actual_update
487
+ rows.append(evaluate_reference(compiled, context, self._bindings))
488
+ actual.append(updated)
489
+ # 输出保留原记录定位,关闭临时保持后仍独立计持有量。
490
+ samples = tuple(result.sample for result in held if result.sample is not None)
491
+ # 先取得完整输出但暂不登记;临时保持全部关闭后才允许对外交付。
492
+ output = self._register(cost, times, tuple(rows), tuple(actual), samples, compiled)
493
+ for result in held:
494
+ result.close()
495
+ held = None
496
+ self._results.add(output)
497
+ return output
498
+ except BaseException:
499
+ # 失败输出不会再次close扣账;_prepare返回取消时只能新增其一次申请。
500
+ try:
501
+ if output is not None:
502
+ output._discard()
503
+ finally:
504
+ amount = cost if cost else max(0, self._budget.ram_bytes - before)
505
+ if amount:
506
+ self._budget.release_ram(amount)
507
+ raise
508
+ finally:
509
+ # 成功结果已保存独立样本及计账;临时保持句柄在所有出口关闭。
510
+ for result in held or ():
511
+ result.close()
512
+
513
+ def query_numpy(self, compiled, times_ns: np.ndarray, *, point=False) -> ExpressionResult:
514
+ """在当前状态上执行独立数组保持与整轴表达式计算。
515
+
516
+ 参数:
517
+ compiled: 当前owner登记的编译对象。
518
+ times_ns: 一维形状(N,)的INT64 ndarray,时间为整数纳秒且非递减。
519
+ point: 默认False;必须为原生bool,True检查真实末端点视图。
520
+ 返回:
521
+ 须关闭的ExpressionResult;arrays为ArrayEvaluation,轴及更新掩码只读。
522
+ N=0合法;常量表达式仍显式使用N作为结果长度。
523
+ 异常:
524
+ 数组布局、登记、时间轴、预算、数值或取消错误原样传播。
525
+ 处理流程:
526
+ 先申请空间,再复制轴、取得各依赖保持列并调用现有独立数组求值核。
527
+ 不逐点调用标量数值核;临时保持始终关闭,失败抵销本次申请。
528
+ """
529
+ # 禁止广播和浮点时间,轴必须使用精确一维INT64布局。
530
+ if type(times_ns) is not np.ndarray or times_ns.ndim != 1 or times_ns.dtype != np.dtype('int64'):
531
+ raise TypeError('NumPy表达式轴需要一维完整int64 ndarray')
532
+ held, output, cost = None, None, 0
533
+ before = self._budget.ram_bytes
534
+ try:
535
+ # 数组预算在任何轴/列复制之前申请,并覆盖申请返回取消的清理窗口。
536
+ cost = self._prepare(compiled, len(times_ns), point)
537
+ held = []
538
+ # 已取得预算才复制轴,查询结果不借用调用方可修改的存储。
539
+ times = times_ns.copy()
540
+ self._check_axis(times)
541
+ context = {}
542
+ actual = np.zeros(len(times), dtype='bool')
543
+ # 各依赖整轴独立保持;取得句柄后立即登记,部分失败也能清理。
544
+ for name in compiled.dependencies:
545
+ result = self._holds.query_numpy(name, times, point=point)
546
+ self._keep_hold(held, result)
547
+ arrays = result.arrays
548
+ # NumericArray复制三个列,已包含在树/依赖×N暂存上界,不借用可变输入。
549
+ context[name] = NumericArray(arrays.dtype, arrays.values, arrays.valid, arrays.quality, arrays.labels)
550
+ actual |= arrays.actual_update
551
+ # 整轴调用真实数组求值核;size让无依赖常量和空轴保持长度。
552
+ payload = evaluate_numpy(compiled, context, self._bindings, size=len(times))
553
+ # 输出保留原记录定位,关闭临时保持后仍独立计持有量。
554
+ samples = tuple(result.sample for result in held if result.sample is not None)
555
+ # 输出轴及真实更新掩码采用普通只读约定,避免外部原地改变诊断。
556
+ times.flags.writeable = actual.flags.writeable = False
557
+ # 临时保持先关闭,尚未登记的完整输出仍由本查询唯一持有。
558
+ output = self._register(cost, times, payload, actual, samples, compiled)
559
+ for result in held:
560
+ result.close()
561
+ held = None
562
+ self._results.add(output)
563
+ return output
564
+ except BaseException:
565
+ # 半安装取消只脱离自己的输出,不能扫描或关闭之前已交付结果。
566
+ try:
567
+ if output is not None:
568
+ output._discard()
569
+ finally:
570
+ amount = cost if cost else max(0, self._budget.ram_bytes - before)
571
+ if amount:
572
+ self._budget.release_ram(amount)
573
+ raise
574
+ finally:
575
+ # 成功结果已保存独立样本及计账;临时保持句柄在所有出口关闭。
576
+ for result in held or ():
577
+ result.close()
578
+
579
+ def close(self):
580
+ """关闭全部自有查询结果,再释放固定元数据申请。
581
+
582
+ 参数:
583
+ 无。
584
+ 返回:
585
+ None;重复关闭幂等,部分初始化失败也可调用。
586
+ 异常:
587
+ 预算账本不一致时传播内部错误。
588
+ 副作用:
589
+ 丢弃本owner持有的绑定、表达式、标签及登记引用。
590
+ 调用方的holds、state、history和运行绑定lease不由这里关闭。
591
+ """
592
+ if self._closed:
593
+ return
594
+ # 先逐项关闭结果的动态申请,再释放owner固定申请。
595
+ while self._results:
596
+ result = next(iter(self._results))
597
+ result.close()
598
+ # 已关闭对象的脱离曾被取消时,可在owner重试中移除而不再抵销成本。
599
+ self._results.discard(result)
600
+ cost, before = self._fixed_cost, self._budget.ram_bytes
601
+ released = False
602
+ try:
603
+ self._budget.release_ram(cost)
604
+ released = True
605
+ finally:
606
+ # 只有固定申请实际抵销后才关闭owner,返回取消也完成最小引用收尾。
607
+ if released or self._budget.ram_bytes == before - cost:
608
+ self._finish_close()
609
+
610
+ def _finish_close(self):
611
+ """丢弃已释放固定申请的owner引用,不再关闭上游或操作账本。
612
+
613
+ 参数: 无。返回: None,owner关闭。
614
+ 异常: 无主动异常;只在已释放固定空间的收尾调用。
615
+ """
616
+ # 与保持/state/运行绑定lease的所有权分离,借用引用在此释放。
617
+ self._closed, self._fixed_cost = True, 0
618
+ self._holds = self._bindings = self._expressions = self._stats = self._labels = self._results = None