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,150 @@
1
+ """按请求生成可独立加载的有效配置;只读配置,不读取业务输入。"""
2
+ from copy import deepcopy
3
+ from dataclasses import asdict
4
+ from pathlib import Path
5
+
6
+ from . import load_configuration, parse_configuration
7
+ from .file_tools import path_fields,validate_document,serialize_configuration,output_format,write_new_configuration
8
+
9
+
10
+ def _duration(value):
11
+ """纳秒用整数文本输出,不经浮点。参数: int。返回: 时长str。异常: 无。"""
12
+ return str(value)+'ns'
13
+
14
+
15
+ def _interval(choice):
16
+ """输出合法间隔对象,不为actual/dbc补伪周期。参数: IntervalChoice。返回: dict。异常: 无。"""
17
+ result={'mode':choice.mode}
18
+ if choice.step_ns is not None:result['value']=_duration(choice.step_ns)
19
+ if choice.driver is not None:result['driver']=choice.driver
20
+ return result
21
+
22
+
23
+ def _signal_defaults(raw,plan):
24
+ """复用当前编译的信号事实;只在展开或内部复核副本填写,不再读DBC。"""
25
+ from ..planning.signal_groups import declared_signals
26
+ for signal,typed in zip(declared_signals(raw['signals']),plan.signals):
27
+ signal.setdefault('dtype',typed.definition.dtype.value)
28
+ signal.setdefault('unit',typed.definition.unit)
29
+ if typed.definition.dtype.value=='enum':
30
+ signal.setdefault('choices',[list(pair) for pair in typed.definition.choices])
31
+
32
+
33
+ def _analysis_defaults(raw,plan):
34
+ """显式化已编译模型的适用默认值。参数: 独立原生配置、计划。返回: None。异常: 内部契约错误。
35
+
36
+ 只填写实际有含义且可重新加载的字段;不猜单位/方向/阈值,不写无关规则参数或DBC周期。
37
+ """
38
+ _signal_defaults(raw,plan)
39
+ raw.setdefault('execution',{}).update(asdict(plan.execution))
40
+ raw.setdefault('diagnostics',{}).update(asdict(plan.diagnostics))
41
+ outputs=raw.setdefault('outputs',{})
42
+ for key in ('tables','manifest','contributions'):outputs.setdefault(key,getattr(plan.outputs,key))
43
+ for key in ('signal_csv','can_frames'):
44
+ option=getattr(plan.outputs,key)
45
+ if option is None:outputs.setdefault(key,None);continue
46
+ item=outputs[key];item.setdefault('scope',option.scope)
47
+ grid=option.spec.resampling if key=='signal_csv' else option.resampling
48
+ if grid is not None:item['resampling'].setdefault('origin',_duration(grid.origin_ns))
49
+ if key=='can_frames':
50
+ item.setdefault('source_time_reference',option.spec.source_time_reference)
51
+ item.setdefault('output_offset',_duration(option.spec.output_offset_ns))
52
+ for index,(source,typed) in enumerate(zip(raw['sources'],plan.sources)):
53
+ # --defaults展开有效来源默认值;普通resolve仍保留用户简写。
54
+ from ..planning.input_defaults import source_defaults
55
+ source.update(source_defaults(source,index,inferred_type=typed.source_type))
56
+ source['time'].setdefault('offset','0s')
57
+ if typed.source_type=='signal_csv':
58
+ for key in ('encoding','delimiter'):source.setdefault(key,getattr(typed.config,key))
59
+ source.setdefault('missing_values',list(typed.config.missing_values))
60
+ elif typed.source_type in ('can_blf','can_asc','asc_or_blf','raw_can_csv'):
61
+ source.setdefault('reader_options',{}).setdefault('decode_policy',typed.config.decode_policy)
62
+ if typed.source_type=='can_blf':
63
+ for key in ('decode_scope','input_check'):source.setdefault(key,getattr(typed.config,key))
64
+ from ..planning.signal_groups import declared_signals
65
+ for signal,typed in zip(declared_signals(raw['signals']),plan.signals):
66
+ for key in ('scale','offset','sample_policy','same_time_policy'):
67
+ signal.setdefault(key,getattr(typed.definition,key))
68
+ for typed,expression in zip(plan.derived,plan.derived_expressions):
69
+ raw['derived'][typed.definition.name].setdefault('unit',expression.root.unit)
70
+ by_rule={item.rule_id:item for item in plan.rules}
71
+ for rule in raw.get('rules',[]):
72
+ typed=by_rule[rule['name']];kind=typed.rule_type
73
+ if kind=='condition_duration':rule.setdefault('selection_origin',typed.selection_origin)
74
+ elif kind in ('debounce','hysteresis'):
75
+ rule.setdefault('enter_delay',_duration(typed.stability.enter_ns))
76
+ rule.setdefault('exit_delay',_duration(typed.stability.exit_ns))
77
+ elif kind=='start_end':
78
+ rule.setdefault('emit_initial',typed.start_end.emit_initial)
79
+ rule.setdefault('timeout',None if typed.start_end.timeout_ns is None else _duration(typed.start_end.timeout_ns))
80
+ else:
81
+ rule.setdefault('emit_initial',typed.emit_initial)
82
+ if kind=='window_delta':
83
+ rule.setdefault('retrigger',typed.retrigger)
84
+ for key in ('monotonic','coverage_policy'):rule.setdefault(key,getattr(typed.window_delta,key))
85
+ for window,typed in zip(raw.get('windows',[]),plan.windows):
86
+ for key in ('pre','post'):window.setdefault(key,_duration(getattr(typed,key+'_ns')))
87
+ window.setdefault('merge',typed.merge)
88
+ for calculation,typed in zip(raw.get('calculations',[]),plan.calculations):
89
+ for key in ('unit','partial_policy','minimum_coverage'):calculation.setdefault(key,getattr(typed,key))
90
+ if typed.method is not None:calculation.setdefault('method',typed.method)
91
+ for sequence,typed in zip(raw.get('sequences',[]),plan.sequences):sequence.setdefault('max_pending',typed.max_pending)
92
+ intervals=raw.setdefault('intervals',{})
93
+ intervals.setdefault('default',_interval(plan.intervals.default))
94
+ # 每个消费者的驱动已由静态依赖确定;DBC周期仍须运行时读取,绝不虚构数值。
95
+ if plan.intervals.resolved:
96
+ intervals['overrides']={name:_interval(choice) for name,choice in plan.intervals.resolved}
97
+
98
+
99
+ def resolved_configuration(source, *, defaults=False):
100
+ """展开预设并固定路径。参数: 输入配置、是否填默认。返回: 原生配置。异常: 配置/IO错误。
101
+
102
+ 原配置不写回;省略defaults时保原显式值。公开预设构建器只在独立副本执行。
103
+ """
104
+ from ..presets import expand_presets
105
+ source=Path(source).absolute();document=load_configuration(source)
106
+ from .imports import expand_document_imports
107
+ document=expand_document_imports(document)
108
+ name,plan=validate_document(document,source.parent,return_plan=True);raw=deepcopy(document.data)
109
+ if name=='batch':
110
+ if defaults:
111
+ raw.setdefault('process_count',plan.process_count)
112
+ for key in ('fail_fast','backend'):raw.setdefault(key,getattr(plan,key))
113
+ else:
114
+ from ..planning.config_groups import normalize_configuration
115
+ analysis=normalize_configuration(raw['analysis'] if name=='mapping' else raw)
116
+ if name=='mapping':raw['analysis']=analysis
117
+ else:raw=analysis
118
+ if analysis.get('presets'):
119
+ expand_presets(analysis,tuple(item.definition for item in plan.signals))
120
+ analysis.pop('presets',None)
121
+ if defaults:_analysis_defaults(analysis,plan)
122
+ # 默认展开和预设内部片段统一还原成当前公共分组,不输出第二套配置语法。
123
+ if name!='batch':
124
+ from ..planning.config_groups import public_configuration
125
+ if name=='mapping':raw['analysis']=public_configuration(raw['analysis'])
126
+ else:raw=public_configuration(raw)
127
+ # 使用词法绝对定位,保留..与符号链接的原路径解释;不stat/open业务文件。
128
+ for owner,key in path_fields(raw,name):
129
+ owner[key]=str((source.parent/Path(owner[key])).absolute())
130
+ # 导出前复核全部有效字段;失败时还没有创建输出文件。
131
+ validation=deepcopy(raw)
132
+ if name!='batch':
133
+ _signal_defaults(validation['analysis'] if name=='mapping' else validation,plan)
134
+ checked=parse_configuration(serialize_configuration(validation,'json'),format='json',source=str(source))
135
+ validate_document(checked,source.parent)
136
+ return raw
137
+
138
+
139
+ def resolve_configuration(source, *, output=None, format=None, defaults=False):
140
+ """显示或导出有效配置。参数: 输入、可选新文件/格式/默认值。返回: 文本或Path。异常: 配置/IO错误。
141
+
142
+ 无输出文件时默认YAML写给调用者;有文件时扩展名定格式,显式格式不一致则拒绝。
143
+ """
144
+ chosen='yaml' if output is None else output_format(Path(output))
145
+ if format is not None:
146
+ if output is not None and format!=chosen:raise ValueError('--format与输出扩展名不一致')
147
+ chosen=format
148
+ raw=resolved_configuration(source,defaults=defaults)
149
+ text=serialize_configuration(raw,chosen)
150
+ return text if output is None else write_new_configuration(output,text)
@@ -0,0 +1,68 @@
1
+ """读取随包发布的合成场景模板;初始化命令与模板验收使用同一套资源。
2
+
3
+ 目录中保存最小版和完整注释版YAML及小型合成输入。本模块仅提供有限模板清单
4
+ 和文件内容,不创建用户目录、不执行分析、不把模板阈值当作真实设备参数。
5
+ """
6
+ from dataclasses import dataclass
7
+ from importlib.resources import files
8
+ import json
9
+ from pathlib import PurePosixPath
10
+
11
+
12
+ @dataclass(frozen=True)
13
+ class ConfigurationTemplate:
14
+ """可选场景及其入口;名称用于CLI选择,说明同时注明合成数据和预期行为。"""
15
+ name: str
16
+ title: str
17
+ config_type: str
18
+ entrypoint: str
19
+ expected: str
20
+
21
+
22
+ def _catalog():
23
+ """读取包内固定清单。参数: 无。返回: dict。异常: 缺失或损坏资源不隐藏。"""
24
+ root=files('chronaxis.configuration').joinpath('templates')
25
+ return root,json.loads(root.joinpath('catalog.json').read_text(encoding='utf-8'))
26
+
27
+
28
+ def available_templates():
29
+ """列出当前所有场景。参数: 无。返回: ConfigurationTemplate tuple。异常: 包资源错误。"""
30
+ _,catalog=_catalog()
31
+ return tuple(ConfigurationTemplate(item['name'],item['title'],item['config_type'],
32
+ item['entrypoint'],item['expected']) for item in catalog['templates'])
33
+
34
+
35
+ def _relative_path(text):
36
+ """限制包内及新目录内的相对路径。参数: 文本。返回: PurePosixPath。异常: ValueError。
37
+
38
+ 清单由项目维护;仍拒绝绝对路径、返回父目录和Windows反斜线,防止资源误配越界。
39
+ """
40
+ path=PurePosixPath(text)
41
+ if not text or not path.parts or '\\' in text or ':' in text or path.is_absolute() or '..' in path.parts:
42
+ raise ValueError('模板资源必须使用目录内的相对路径')
43
+ return path
44
+
45
+
46
+ def template_files(name,*,style='annotated'):
47
+ """取得一个场景的完整文件集。参数: 场景名、minimal/annotated。返回: (相对路径,bytes) tuple。
48
+
49
+ 异常: 未知场景/风格为ValueError,包内文件错误直接传播;不读取用户配置或写文件。
50
+ 两种风格只有注释不同,批量子计划也按同一风格选择。资源不含环境变量或模板执行。
51
+ """
52
+ if style not in ('minimal','annotated'):
53
+ raise ValueError('模板风格需要minimal或annotated')
54
+ root,catalog=_catalog()
55
+ match=next((item for item in catalog['templates'] if item['name']==name),None)
56
+ if match is None:
57
+ raise ValueError('未知配置场景:'+str(name))
58
+ entries=[dict(source=name+'/'+style+'.yaml',target=match['entrypoint']),*match['files']]
59
+ result=[]
60
+ targets=set()
61
+ for item in entries:
62
+ source=_relative_path(item['source'].replace('{style}',style))
63
+ target=_relative_path(item['target'])
64
+ if target.as_posix().casefold() in targets:
65
+ raise ValueError('模板输出路径重复:'+str(target))
66
+ targets.add(target.as_posix().casefold())
67
+ result.append((target.as_posix(),root.joinpath(*source.parts).read_bytes()))
68
+ return tuple(result)
@@ -0,0 +1,18 @@
1
+ %YAML 1.2
2
+ ---
3
+ config_version: 3 # 配置格式版本,不是业务参数
4
+ dataset: # 只保留本次任务名称;省略domain表示读取完整输入
5
+ name: batch_energy_example # 为此分析对象取名称,供表达式、规则或结果引用
6
+ sources: # 输入报文路径与对应DBC;格式按扩展名识别
7
+ - path: data/power.asc # 相对本配置所在目录的输入路径
8
+ dbc_by_channel: # 把日志通道对应到实际DBC;不能靠名称猜测
9
+ '1': data/teaching.dbc
10
+ signals: # 只声明本次分析使用的信号
11
+ - name: power # 为此分析对象取名称,供表达式、规则或结果引用
12
+ field: # 按报文ID和DBC信号名定位
13
+ frame_id: '0x200' # 0x为十六进制;无前缀为十进制
14
+ signal: Power # DBC里的原信号名
15
+ calculations: # 需要输出的计算结果
16
+ - name: energy # 为此分析对象取名称,供表达式、规则或结果引用
17
+ operation: integral # 选择统计或积分方法
18
+ expr: power # 使用分析信号名或白名单表达式
@@ -0,0 +1,18 @@
1
+ %YAML 1.2
2
+ ---
3
+ config_version: 3
4
+ dataset:
5
+ name: batch_energy_example
6
+ sources:
7
+ - path: data/power.asc
8
+ dbc_by_channel:
9
+ '1': data/teaching.dbc
10
+ signals:
11
+ - name: power
12
+ field:
13
+ frame_id: '0x200'
14
+ signal: Power
15
+ calculations:
16
+ - name: energy
17
+ operation: integral
18
+ expr: power
@@ -0,0 +1,6 @@
1
+ %YAML 1.2
2
+ ---
3
+ batch_version: 1 # 声明独立批量任务文件的结构版本;当前填写整数1
4
+ jobs: # 列出互相独立的分析任务,每项引用一份分析配置
5
+ - plan: analysis.yaml # 指定该任务的分析配置文件;相对于批量配置文件所在目录
6
+ - plan: analysis.yaml # 指定该任务的分析配置文件;相对于批量配置文件所在目录
@@ -0,0 +1,6 @@
1
+ %YAML 1.2
2
+ ---
3
+ batch_version: 1
4
+ jobs:
5
+ - plan: analysis.yaml
6
+ - plan: analysis.yaml
@@ -0,0 +1,18 @@
1
+ %YAML 1.2
2
+ ---
3
+ config_version: 3 # 声明分析文件采用的字段结构版本;当前填写整数3
4
+ dataset: # 设置本次分析名称及可选的对象、会话和时间范围
5
+ name: can_asc_example # 命名本次分析数据集;名称写入结果身份字段
6
+ sources: # 列出输入来源;每项规定数据位置、格式和时间解释方式
7
+ - path: data/sample.asc # 指定单个输入文件;相对路径从本配置文件所在目录计算
8
+ dbc_by_channel: # 为每个CAN通道指定解码用DBC文件;键是通道编号的字符串
9
+ '1': data/sample.dbc # 为这个通道指定DBC文件;路径相对当前配置文件,通道键须为字符串
10
+ signals: # 把输入字段定义为有名称、类型、单位和有效期的分析信号
11
+ - name: voltage # 给分析信号取名称;后续表达式和计算通过此名称引用它
12
+ field: # 指定来源中的原始字段;CSV填表头,CAN填写通道/报文ID/DBC信号名
13
+ signal: Voltage # 填写DBC中的信号名称,大小写须一致
14
+ frame_id: '0x100' # 选择包含信号的报文ID;从对应DBC取得,可写整数或支持的进制文本
15
+ calculations: # 列出希望获得的统计或积分结果,每项独立选择范围和算法
16
+ - name: voltage_area # 为这项计算结果取唯一名称;结果表用它区分计算项
17
+ expr: voltage # 指定参与计算的数值或信号表达式;引用前面已定义的信号
18
+ operation: integral # 选择计算方法;本例将有效数值乘持续时间后累计,例如功率乘秒得到能量
@@ -0,0 +1,18 @@
1
+ %YAML 1.2
2
+ ---
3
+ config_version: 3
4
+ dataset:
5
+ name: can_asc_example
6
+ sources:
7
+ - path: data/sample.asc
8
+ dbc_by_channel:
9
+ '1': data/sample.dbc
10
+ signals:
11
+ - name: voltage
12
+ field:
13
+ signal: Voltage
14
+ frame_id: '0x100'
15
+ calculations:
16
+ - name: voltage_area
17
+ expr: voltage
18
+ operation: integral
@@ -0,0 +1,18 @@
1
+ %YAML 1.2
2
+ ---
3
+ config_version: 3 # 声明分析文件采用的字段结构版本;当前填写整数3
4
+ dataset: # 设置本次分析名称及可选的对象、会话和时间范围
5
+ name: can_blf_example # 命名本次分析数据集;名称写入结果身份字段
6
+ sources: # 列出输入来源;每项规定数据位置、格式和时间解释方式
7
+ - path: data/sample.blf # 指定单个输入文件;相对路径从本配置文件所在目录计算
8
+ dbc_by_channel: # 为每个CAN通道指定解码用DBC文件;键是通道编号的字符串
9
+ '1': data/sample.dbc # 为这个通道指定DBC文件;路径相对当前配置文件,通道键须为字符串
10
+ signals: # 把输入字段定义为有名称、类型、单位和有效期的分析信号
11
+ - name: voltage # 给分析信号取名称;后续表达式和计算通过此名称引用它
12
+ field: # 指定来源中的原始字段;CSV填表头,CAN填写通道/报文ID/DBC信号名
13
+ signal: Voltage # 填写DBC中的信号名称,大小写须一致
14
+ frame_id: '0x100' # 选择包含信号的报文ID;从对应DBC取得,可写整数或支持的进制文本
15
+ calculations: # 列出希望获得的统计或积分结果,每项独立选择范围和算法
16
+ - name: voltage_area # 为这项计算结果取唯一名称;结果表用它区分计算项
17
+ expr: voltage # 指定参与计算的数值或信号表达式;引用前面已定义的信号
18
+ operation: integral # 选择计算方法;本例将有效数值乘持续时间后累计,例如功率乘秒得到能量
@@ -0,0 +1,18 @@
1
+ %YAML 1.2
2
+ ---
3
+ config_version: 3
4
+ dataset:
5
+ name: can_blf_example
6
+ sources:
7
+ - path: data/sample.blf
8
+ dbc_by_channel:
9
+ '1': data/sample.dbc
10
+ signals:
11
+ - name: voltage
12
+ field:
13
+ signal: Voltage
14
+ frame_id: '0x100'
15
+ calculations:
16
+ - name: voltage_area
17
+ expr: voltage
18
+ operation: integral
@@ -0,0 +1,23 @@
1
+ %YAML 1.2
2
+ ---
3
+ config_version: 3 # 声明分析文件采用的字段结构版本;当前填写整数3
4
+ dataset: # 设置本次分析名称及可选的对象、会话和时间范围
5
+ name: can_export_example # 命名本次分析数据集;名称写入结果身份字段
6
+ sources: # 列出输入来源;每项规定数据位置、格式和时间解释方式
7
+ - path: data/sample.asc # 指定单个输入文件;相对路径从本配置文件所在目录计算
8
+ dbc_by_channel: # 为每个CAN通道指定解码用DBC文件;键是通道编号的字符串
9
+ '1': data/sample.dbc # 为这个通道指定DBC文件;路径相对当前配置文件,通道键须为字符串
10
+ signals: # 把输入字段定义为有名称、类型、单位和有效期的分析信号
11
+ - name: voltage # 给分析信号取名称;后续表达式和计算通过此名称引用它
12
+ field: # 指定来源中的原始字段;CSV填表头,CAN填写通道/报文ID/DBC信号名
13
+ signal: Voltage # 填写DBC中的信号名称,大小写须一致
14
+ frame_id: '0x100' # 选择包含信号的报文ID;从对应DBC取得,可写整数或支持的进制文本
15
+ calculations: # 列出希望获得的统计或积分结果,每项独立选择范围和算法
16
+ - name: voltage_area # 为这项计算结果取唯一名称;结果表用它区分计算项
17
+ expr: voltage # 指定参与计算的数值或信号表达式;引用前面已定义的信号
18
+ operation: integral # 选择计算方法;本例将有效数值乘持续时间后累计,例如功率乘秒得到能量
19
+ outputs: # 选择额外导出的数据及格式;默认结果表由运行入口提供
20
+ can_frames: # 配置原始或重建CAN帧的额外导出;与信号CSV分别设置
21
+ format: asc # 选择输出报文文件格式;asc为文本,blf为二进制
22
+ metadata: # 保存说明性信息;字段不会自动校准数据或更改计算公式
23
+ device_label: home # 示例制作于home;实际使用改为本次设备标签(home/work),不会自动识别
@@ -0,0 +1,23 @@
1
+ %YAML 1.2
2
+ ---
3
+ config_version: 3
4
+ dataset:
5
+ name: can_export_example
6
+ sources:
7
+ - path: data/sample.asc
8
+ dbc_by_channel:
9
+ '1': data/sample.dbc
10
+ signals:
11
+ - name: voltage
12
+ field:
13
+ signal: Voltage
14
+ frame_id: '0x100'
15
+ calculations:
16
+ - name: voltage_area
17
+ expr: voltage
18
+ operation: integral
19
+ outputs:
20
+ can_frames:
21
+ format: asc
22
+ metadata: # 当前导出API要求来源标签;普通分析不需要此字段
23
+ device_label: home # 示例制作于home;实际使用改为本次设备标签(home/work),不会自动识别
@@ -0,0 +1,233 @@
1
+ {
2
+ "device_label": "home",
3
+ "data_kind": "synthetic",
4
+ "templates": [
5
+ {
6
+ "name": "can-asc",
7
+ "title": "CAN ASC与DBC",
8
+ "config_type": "analysis",
9
+ "entrypoint": "plan.yaml",
10
+ "expected": "原始字节1/3/1经DBC的2x+1得到3/7/3V,各持续1s,积分13V·s;第4帧为无关消息。",
11
+ "files": [
12
+ {
13
+ "source": "shared/sample.asc",
14
+ "target": "data/sample.asc"
15
+ },
16
+ {
17
+ "source": "shared/sample.dbc",
18
+ "target": "data/sample.dbc"
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "name": "can-blf",
24
+ "title": "CAN BLF与DBC",
25
+ "config_type": "analysis",
26
+ "entrypoint": "plan.yaml",
27
+ "expected": "原始字节1/3/1经DBC的2x+1得到3/7/3V,各持续1s,积分13V·s;第4帧为无关消息。",
28
+ "files": [
29
+ {
30
+ "source": "shared/sample.blf",
31
+ "target": "data/sample.blf"
32
+ },
33
+ {
34
+ "source": "shared/sample.dbc",
35
+ "target": "data/sample.dbc"
36
+ }
37
+ ]
38
+ },
39
+ {
40
+ "name": "charge-session",
41
+ "title": "充电活动:明确角色、单位与方向(ASC与DBC)",
42
+ "config_type": "analysis",
43
+ "entrypoint": "plan.yaml",
44
+ "expected": "活动[0s,2s),400V×10A×2s=8000J,输出8000/3600Wh;10A×2s=20As,输出20/3600Ah。",
45
+ "files": [
46
+ {
47
+ "source": "shared/charge-session.asc",
48
+ "target": "data/charge-session.asc"
49
+ },
50
+ {
51
+ "source": "shared/teaching.dbc",
52
+ "target": "data/teaching.dbc"
53
+ }
54
+ ]
55
+ },
56
+ {
57
+ "name": "fault-window",
58
+ "title": "故障事件与前后窗口(ASC与DBC)",
59
+ "config_type": "analysis",
60
+ "entrypoint": "plan.yaml",
61
+ "expected": "2s报警由假变真;向前1s、向后2s,输出片段[1s,4s)。",
62
+ "files": [
63
+ {
64
+ "source": "shared/fault-window.asc",
65
+ "target": "data/fault-window.asc"
66
+ },
67
+ {
68
+ "source": "shared/teaching.dbc",
69
+ "target": "data/teaching.dbc"
70
+ }
71
+ ]
72
+ },
73
+ {
74
+ "name": "command-response",
75
+ "title": "请求响应:匹配与等待到期(ASC与DBC)",
76
+ "config_type": "analysis",
77
+ "entrypoint": "plan.yaml",
78
+ "expected": "1s请求在2s响应,延迟1s;4s请求在6s达到2s等待上限,无响应。",
79
+ "files": [
80
+ {
81
+ "source": "shared/command-response.asc",
82
+ "target": "data/command-response.asc"
83
+ },
84
+ {
85
+ "source": "shared/teaching.dbc",
86
+ "target": "data/teaching.dbc"
87
+ }
88
+ ]
89
+ },
90
+ {
91
+ "name": "threshold",
92
+ "title": "阈值预设:进入与恢复门槛(ASC与DBC)",
93
+ "config_type": "analysis",
94
+ "entrypoint": "plan.yaml",
95
+ "expected": "85°C在0s进入,77°C保持活动,75°C在9s退出;活动时长9s。80/75°C只是合成例子。",
96
+ "files": [
97
+ {
98
+ "source": "shared/threshold.asc",
99
+ "target": "data/threshold.asc"
100
+ },
101
+ {
102
+ "source": "shared/teaching.dbc",
103
+ "target": "data/teaching.dbc"
104
+ }
105
+ ]
106
+ },
107
+ {
108
+ "name": "stability",
109
+ "title": "迟滞与去抖对照(ASC与DBC)",
110
+ "config_type": "analysis",
111
+ "entrypoint": "plan.yaml",
112
+ "expected": "迟滞活动[1s,4s),均值247/3°C;进入/退出各稳定1s的去抖活动[2s,4s),均值81°C。",
113
+ "files": [
114
+ {
115
+ "source": "shared/stability.asc",
116
+ "target": "data/stability.asc"
117
+ },
118
+ {
119
+ "source": "shared/teaching.dbc",
120
+ "target": "data/teaching.dbc"
121
+ }
122
+ ]
123
+ },
124
+ {
125
+ "name": "can-export",
126
+ "title": "CAN原帧导出",
127
+ "config_type": "analysis",
128
+ "entrypoint": "plan.yaml",
129
+ "expected": "分析积分13V·s;自动观测范围[0s,3s)内的3条原帧按原顺序导出,不重采样。",
130
+ "files": [
131
+ {
132
+ "source": "shared/sample.asc",
133
+ "target": "data/sample.asc"
134
+ },
135
+ {
136
+ "source": "shared/sample.dbc",
137
+ "target": "data/sample.dbc"
138
+ }
139
+ ]
140
+ },
141
+ {
142
+ "name": "signal-export",
143
+ "title": "信号导出与独立插值网格",
144
+ "config_type": "analysis",
145
+ "entrypoint": "plan.yaml",
146
+ "expected": "分析积分仍为38J。原采样与500ms线性网格分别导出;网格0到5.5s共12点,前3点为2/3/4W。",
147
+ "files": [
148
+ {
149
+ "source": "shared/power.asc",
150
+ "target": "data/power.asc"
151
+ },
152
+ {
153
+ "source": "shared/teaching.dbc",
154
+ "target": "data/teaching.dbc"
155
+ }
156
+ ]
157
+ },
158
+ {
159
+ "name": "batch",
160
+ "title": "两个独立任务的批量清单",
161
+ "config_type": "batch",
162
+ "entrypoint": "batch.yaml",
163
+ "expected": "两个任务各自读取同一合成输入,均完成且各得38J;它们不是同会话时间切片。",
164
+ "files": [
165
+ {
166
+ "source": "batch/analysis-{style}.yaml",
167
+ "target": "analysis.yaml"
168
+ },
169
+ {
170
+ "source": "shared/power.asc",
171
+ "target": "data/power.asc"
172
+ },
173
+ {
174
+ "source": "shared/teaching.dbc",
175
+ "target": "data/teaching.dbc"
176
+ }
177
+ ]
178
+ },
179
+ {
180
+ "name": "ini-mapping",
181
+ "title": "旧INI导入与唯一信号自动映射",
182
+ "config_type": "mapping",
183
+ "entrypoint": "mapping.yaml",
184
+ "expected": "以sclicer_single导入source.ini,原文保持;Power>3的活动为[1s,6s),窗口相同;会话积分仍38J。",
185
+ "files": [
186
+ {
187
+ "source": "shared/power.asc",
188
+ "target": "data/power.asc"
189
+ },
190
+ {
191
+ "source": "shared/teaching.dbc",
192
+ "target": "data/teaching.dbc"
193
+ },
194
+ {
195
+ "source": "shared/source.ini",
196
+ "target": "source.ini"
197
+ }
198
+ ]
199
+ },
200
+ {
201
+ "name": "raw-can-csv",
202
+ "title": "原始CAN CSV显式布局",
203
+ "config_type": "analysis",
204
+ "entrypoint": "plan.yaml",
205
+ "expected": "原始字节1/3/1经DBC的2x+1得到3/7/3V,各持续1s,积分13V·s;第4帧为无关消息。",
206
+ "files": [
207
+ {
208
+ "source": "shared/sample.csv",
209
+ "target": "data/sample.csv"
210
+ },
211
+ {
212
+ "source": "shared/sample.dbc",
213
+ "target": "data/sample.dbc"
214
+ }
215
+ ]
216
+ },
217
+ {
218
+ "name": "signal-csv",
219
+ "title": "信号CSV:积分与两种均值",
220
+ "config_type": "analysis",
221
+ "entrypoint": "plan.yaml",
222
+ "expected": "功率2/4/8/10W分别持续1/2/1/2秒,积分38J;样本均值6W,时间加权均值38/6W。",
223
+ "files": [
224
+ {
225
+ "source": "shared/signals.csv",
226
+ "target": "data/signals.csv"
227
+ }
228
+ ]
229
+ }
230
+ ],
231
+ "updated_at": "2026-10-28T17:13:13+08:00",
232
+ "change": "ASC/BLF教学模板采用必要配置,DBC提供示例周期。"
233
+ }