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.
- chronaxis/__init__.py +72 -0
- chronaxis/__main__.py +12 -0
- chronaxis/analysis_cli.py +181 -0
- chronaxis/batch/__init__.py +14 -0
- chronaxis/batch/api.py +46 -0
- chronaxis/batch/cli.py +48 -0
- chronaxis/batch/config.py +37 -0
- chronaxis/batch/models.py +202 -0
- chronaxis/batch/process_transport.py +149 -0
- chronaxis/batch/process_tree.py +72 -0
- chronaxis/batch/publication.py +41 -0
- chronaxis/batch/runner.py +236 -0
- chronaxis/batch/templates.py +42 -0
- chronaxis/can_dependencies.py +42 -0
- chronaxis/cli.py +193 -0
- chronaxis/configuration/__init__.py +46 -0
- chronaxis/configuration/cli.py +41 -0
- chronaxis/configuration/diagnostics.py +107 -0
- chronaxis/configuration/explanation.py +233 -0
- chronaxis/configuration/file_tools.py +140 -0
- chronaxis/configuration/imports.py +144 -0
- chronaxis/configuration/initialization.py +36 -0
- chronaxis/configuration/json_parser.py +114 -0
- chronaxis/configuration/models.py +74 -0
- chronaxis/configuration/origins.py +90 -0
- chronaxis/configuration/overrides.py +55 -0
- chronaxis/configuration/resolution.py +150 -0
- chronaxis/configuration/template_catalog.py +68 -0
- chronaxis/configuration/templates/batch/analysis-annotated.yaml +18 -0
- chronaxis/configuration/templates/batch/analysis-minimal.yaml +18 -0
- chronaxis/configuration/templates/batch/annotated.yaml +6 -0
- chronaxis/configuration/templates/batch/minimal.yaml +6 -0
- chronaxis/configuration/templates/can-asc/annotated.yaml +18 -0
- chronaxis/configuration/templates/can-asc/minimal.yaml +18 -0
- chronaxis/configuration/templates/can-blf/annotated.yaml +18 -0
- chronaxis/configuration/templates/can-blf/minimal.yaml +18 -0
- chronaxis/configuration/templates/can-export/annotated.yaml +23 -0
- chronaxis/configuration/templates/can-export/minimal.yaml +23 -0
- chronaxis/configuration/templates/catalog.json +233 -0
- chronaxis/configuration/templates/charge-session/annotated.yaml +38 -0
- chronaxis/configuration/templates/charge-session/minimal.yaml +38 -0
- chronaxis/configuration/templates/command-response/annotated.yaml +32 -0
- chronaxis/configuration/templates/command-response/minimal.yaml +36 -0
- chronaxis/configuration/templates/fault-window/annotated.yaml +25 -0
- chronaxis/configuration/templates/fault-window/minimal.yaml +27 -0
- chronaxis/configuration/templates/ini-mapping/annotated.yaml +20 -0
- chronaxis/configuration/templates/ini-mapping/minimal.yaml +20 -0
- chronaxis/configuration/templates/raw-can-csv/annotated.yaml +34 -0
- chronaxis/configuration/templates/raw-can-csv/minimal.yaml +35 -0
- chronaxis/configuration/templates/shared/charge-session.asc +5 -0
- chronaxis/configuration/templates/shared/command-response.asc +8 -0
- chronaxis/configuration/templates/shared/fault-window.asc +5 -0
- chronaxis/configuration/templates/shared/power.asc +7 -0
- chronaxis/configuration/templates/shared/sample.asc +6 -0
- chronaxis/configuration/templates/shared/sample.blf +0 -0
- chronaxis/configuration/templates/shared/sample.csv +5 -0
- chronaxis/configuration/templates/shared/sample.dbc +11 -0
- chronaxis/configuration/templates/shared/signals.csv +6 -0
- chronaxis/configuration/templates/shared/source.ini +5 -0
- chronaxis/configuration/templates/shared/stability.asc +9 -0
- chronaxis/configuration/templates/shared/teaching.dbc +27 -0
- chronaxis/configuration/templates/shared/threshold.asc +7 -0
- chronaxis/configuration/templates/signal-csv/annotated.yaml +27 -0
- chronaxis/configuration/templates/signal-csv/minimal.yaml +27 -0
- chronaxis/configuration/templates/signal-export/annotated.yaml +27 -0
- chronaxis/configuration/templates/signal-export/minimal.yaml +29 -0
- chronaxis/configuration/templates/stability/annotated.yaml +35 -0
- chronaxis/configuration/templates/stability/minimal.yaml +35 -0
- chronaxis/configuration/templates/threshold/annotated.yaml +22 -0
- chronaxis/configuration/templates/threshold/minimal.yaml +22 -0
- chronaxis/configuration/yaml_parser.py +125 -0
- chronaxis/core/__init__.py +71 -0
- chronaxis/core/binding.py +449 -0
- chronaxis/core/calculation_series_join.py +106 -0
- chronaxis/core/calculations.py +435 -0
- chronaxis/core/calculations_memory_numpy.py +136 -0
- chronaxis/core/calculations_memory_reference.py +165 -0
- chronaxis/core/calculations_numpy.py +298 -0
- chronaxis/core/calculations_reference.py +294 -0
- chronaxis/core/condition_evidence.py +182 -0
- chronaxis/core/conditional_integral_result.py +43 -0
- chronaxis/core/conditional_integral_terms.py +146 -0
- chronaxis/core/conditional_integral_terms_numpy.py +148 -0
- chronaxis/core/conditional_integral_terms_reference.py +111 -0
- chronaxis/core/conditional_time_reduction.py +118 -0
- chronaxis/core/conditional_time_reduction_numpy.py +223 -0
- chronaxis/core/conditional_time_reduction_reference.py +213 -0
- chronaxis/core/declarations.py +192 -0
- chronaxis/core/decoded_binding.py +197 -0
- chronaxis/core/direct_message.py +387 -0
- chronaxis/core/export_interpolation.py +54 -0
- chronaxis/core/expression.py +642 -0
- chronaxis/core/expression_numpy.py +314 -0
- chronaxis/core/expression_reference.py +272 -0
- chronaxis/core/integral_result.py +53 -0
- chronaxis/core/integral_sum.py +77 -0
- chronaxis/core/integral_sum_numpy.py +224 -0
- chronaxis/core/integral_sum_reference.py +148 -0
- chronaxis/core/integral_terms.py +119 -0
- chronaxis/core/integral_terms_numpy.py +127 -0
- chronaxis/core/integral_terms_reference.py +91 -0
- chronaxis/core/mean_weights_numpy.py +29 -0
- chronaxis/core/mean_weights_reference.py +27 -0
- chronaxis/core/message_binding.py +305 -0
- chronaxis/core/models.py +485 -0
- chronaxis/core/normalize_numpy.py +396 -0
- chronaxis/core/numeric.py +472 -0
- chronaxis/core/numeric_numpy.py +440 -0
- chronaxis/core/record_intervals.py +115 -0
- chronaxis/core/sample_reduction.py +161 -0
- chronaxis/core/sample_reduction_numpy.py +160 -0
- chronaxis/core/sample_reduction_reference.py +154 -0
- chronaxis/core/selection.py +74 -0
- chronaxis/core/sequence.py +160 -0
- chronaxis/core/sequence_reference.py +248 -0
- chronaxis/core/stability.py +249 -0
- chronaxis/core/start_end.py +169 -0
- chronaxis/core/state.py +494 -0
- chronaxis/core/state_numpy.py +296 -0
- chronaxis/core/temporal.py +373 -0
- chronaxis/core/temporal_clock.py +25 -0
- chronaxis/core/temporal_memory_numpy.py +163 -0
- chronaxis/core/temporal_memory_reference.py +161 -0
- chronaxis/core/temporal_numpy.py +345 -0
- chronaxis/core/temporal_reference.py +304 -0
- chronaxis/core/time_reduction.py +190 -0
- chronaxis/core/time_reduction_numpy.py +205 -0
- chronaxis/core/time_reduction_reference.py +203 -0
- chronaxis/core/types.py +105 -0
- chronaxis/core/units.py +81 -0
- chronaxis/core/validation.py +94 -0
- chronaxis/core/window_delta.py +123 -0
- chronaxis/core/window_delta_numpy.py +78 -0
- chronaxis/core/window_delta_reference.py +69 -0
- chronaxis/core/windows.py +224 -0
- chronaxis/core/windows_numpy.py +78 -0
- chronaxis/core/windows_reference.py +61 -0
- chronaxis/execution/__init__.py +6 -0
- chronaxis/execution/batch_signal_groups.py +122 -0
- chronaxis/execution/bindings.py +296 -0
- chronaxis/execution/boundaries.py +568 -0
- chronaxis/execution/calculation_blocks.py +338 -0
- chronaxis/execution/calculation_values.py +55 -0
- chronaxis/execution/can_batch_reader.py +356 -0
- chronaxis/execution/can_reader.py +948 -0
- chronaxis/execution/can_reference_template.py +61 -0
- chronaxis/execution/condition_evidence.py +370 -0
- chronaxis/execution/conditional_integral_facts.py +310 -0
- chronaxis/execution/conditional_integral_reduction.py +216 -0
- chronaxis/execution/csv_observation.py +524 -0
- chronaxis/execution/csv_reader.py +662 -0
- chronaxis/execution/current_message_calculation.py +225 -0
- chronaxis/execution/driver_expression.py +274 -0
- chronaxis/execution/expressions.py +618 -0
- chronaxis/execution/frame_capture.py +245 -0
- chronaxis/execution/groups.py +236 -0
- chronaxis/execution/historical_conditional_blocks.py +264 -0
- chronaxis/execution/historical_conditional_integral.py +226 -0
- chronaxis/execution/historical_conditional_time_calculation.py +368 -0
- chronaxis/execution/historical_integral.py +219 -0
- chronaxis/execution/historical_observation.py +372 -0
- chronaxis/execution/historical_sample_calculation.py +338 -0
- chronaxis/execution/historical_selection_rows.py +300 -0
- chronaxis/execution/historical_time_calculation.py +341 -0
- chronaxis/execution/history.py +572 -0
- chronaxis/execution/history_records.py +225 -0
- chronaxis/execution/hold.py +448 -0
- chronaxis/execution/integral_facts.py +311 -0
- chronaxis/execution/integral_reduction.py +216 -0
- chronaxis/execution/legacy_frame_samples.py +94 -0
- chronaxis/execution/memory_reader.py +247 -0
- chronaxis/execution/message_bindings.py +293 -0
- chronaxis/execution/message_delivery.py +37 -0
- chronaxis/execution/observed_ingestion.py +551 -0
- chronaxis/execution/raw_signal_groups.py +192 -0
- chronaxis/execution/record_alarm_duration.py +114 -0
- chronaxis/execution/record_delta_condition.py +167 -0
- chronaxis/execution/record_diagnostics.py +87 -0
- chronaxis/execution/record_event_durations.py +143 -0
- chronaxis/execution/record_export_samples.py +94 -0
- chronaxis/execution/record_exports.py +155 -0
- chronaxis/execution/record_integral.py +196 -0
- chronaxis/execution/record_point_buffer.py +101 -0
- chronaxis/execution/record_rule_timeline.py +344 -0
- chronaxis/execution/record_sample.py +46 -0
- chronaxis/execution/record_sample_series.py +29 -0
- chronaxis/execution/record_scope_calculations.py +290 -0
- chronaxis/execution/record_selection.py +62 -0
- chronaxis/execution/record_sequences.py +199 -0
- chronaxis/execution/record_session_calculations.py +778 -0
- chronaxis/execution/record_signal_export.py +133 -0
- chronaxis/execution/record_source_cursor.py +295 -0
- chronaxis/execution/record_time_calculation.py +322 -0
- chronaxis/execution/record_time_indexes.py +143 -0
- chronaxis/execution/record_value_history.py +160 -0
- chronaxis/execution/record_windows.py +229 -0
- chronaxis/execution/required_expression.py +52 -0
- chronaxis/execution/retained_metadata.py +71 -0
- chronaxis/execution/run_session.py +402 -0
- chronaxis/execution/scanned_signal_proof.py +550 -0
- chronaxis/execution/signal_validity.py +40 -0
- chronaxis/execution/state.py +280 -0
- chronaxis/execution/temporal_buffer.py +508 -0
- chronaxis/execution/text_can_reader.py +359 -0
- chronaxis/execution/timeline.py +309 -0
- chronaxis/execution/timeline_multi.py +415 -0
- chronaxis/execution/window_delta_events.py +220 -0
- chronaxis/execution/window_replay.py +350 -0
- chronaxis/execution/windows.py +173 -0
- chronaxis/guide/README.md +70 -0
- chronaxis/guide/api/AnalysisError.md +14 -0
- chronaxis/guide/api/AnalysisPlan.md +96 -0
- chronaxis/guide/api/AnalysisResult.md +398 -0
- chronaxis/guide/api/AnalysisRunner.md +155 -0
- chronaxis/guide/api/BatchJob.md +19 -0
- chronaxis/guide/api/BatchJobResult.md +61 -0
- chronaxis/guide/api/BatchPlan.md +48 -0
- chronaxis/guide/api/BatchReport.md +108 -0
- chronaxis/guide/api/BatchRunner.md +84 -0
- chronaxis/guide/api/OutputManifest.md +23 -0
- chronaxis/guide/api/PlanFragment.md +47 -0
- chronaxis/guide/api/PlanValidationError.md +98 -0
- chronaxis/guide/api/PresetSpec.md +63 -0
- chronaxis/guide/api/ResultClosedError.md +14 -0
- chronaxis/guide/api/RunMetadata.md +100 -0
- chronaxis/guide/api/TimeConversion.md +29 -0
- chronaxis/guide/api/TimeOverflowError.md +17 -0
- chronaxis/guide/api/build_preset.md +36 -0
- chronaxis/guide/api/checked_add_ns.md +30 -0
- chronaxis/guide/api/convert_time.md +40 -0
- chronaxis/guide/api/explain_analysis_plan.md +38 -0
- chronaxis/guide/api/index.json +185 -0
- chronaxis/guide/api/load_analysis_plan.md +34 -0
- chronaxis/guide/api/load_batch_plan.md +36 -0
- chronaxis/guide/api/parse_datetime_ns.md +35 -0
- chronaxis/guide/api/parse_duration.md +30 -0
- chronaxis/guide/api/resolve_preset_roles.md +37 -0
- chronaxis/guide/api/run_batch.md +38 -0
- chronaxis/guide/api/shift_times_reference.md +33 -0
- chronaxis/guide/api/time_deltas_reference.md +37 -0
- chronaxis/guide/api/validate_analysis_plan.md +38 -0
- chronaxis/guide/en/README.md +74 -0
- chronaxis/guide/en/api/AnalysisError.md +14 -0
- chronaxis/guide/en/api/AnalysisPlan.md +93 -0
- chronaxis/guide/en/api/AnalysisResult.md +398 -0
- chronaxis/guide/en/api/AnalysisRunner.md +191 -0
- chronaxis/guide/en/api/BatchJob.md +17 -0
- chronaxis/guide/en/api/BatchJobResult.md +43 -0
- chronaxis/guide/en/api/BatchPlan.md +37 -0
- chronaxis/guide/en/api/BatchReport.md +52 -0
- chronaxis/guide/en/api/BatchRunner.md +51 -0
- chronaxis/guide/en/api/OutputManifest.md +23 -0
- chronaxis/guide/en/api/PlanFragment.md +33 -0
- chronaxis/guide/en/api/PlanValidationError.md +58 -0
- chronaxis/guide/en/api/PresetSpec.md +51 -0
- chronaxis/guide/en/api/ResultClosedError.md +14 -0
- chronaxis/guide/en/api/RunMetadata.md +100 -0
- chronaxis/guide/en/api/TimeConversion.md +23 -0
- chronaxis/guide/en/api/TimeOverflowError.md +14 -0
- chronaxis/guide/en/api/build_preset.md +23 -0
- chronaxis/guide/en/api/checked_add_ns.md +21 -0
- chronaxis/guide/en/api/convert_time.md +25 -0
- chronaxis/guide/en/api/explain_analysis_plan.md +30 -0
- chronaxis/guide/en/api/index.json +185 -0
- chronaxis/guide/en/api/load_analysis_plan.md +27 -0
- chronaxis/guide/en/api/load_batch_plan.md +28 -0
- chronaxis/guide/en/api/parse_datetime_ns.md +23 -0
- chronaxis/guide/en/api/parse_duration.md +20 -0
- chronaxis/guide/en/api/resolve_preset_roles.md +23 -0
- chronaxis/guide/en/api/run_batch.md +39 -0
- chronaxis/guide/en/api/shift_times_reference.md +21 -0
- chronaxis/guide/en/api/time_deltas_reference.md +22 -0
- chronaxis/guide/en/api/validate_analysis_plan.md +29 -0
- chronaxis/guide/en/fields/analysis/calculations-all-1.json +345 -0
- chronaxis/guide/en/fields/analysis/calculations-all-2.json +300 -0
- chronaxis/guide/en/fields/analysis/calculations-all-3.json +84 -0
- chronaxis/guide/en/fields/analysis/config_version-all-1.json +24 -0
- chronaxis/guide/en/fields/analysis/dataset-all-1.json +344 -0
- chronaxis/guide/en/fields/analysis/derived-all-1.json +147 -0
- chronaxis/guide/en/fields/analysis/diagnostics-all-1.json +69 -0
- chronaxis/guide/en/fields/analysis/execution-all-1.json +167 -0
- chronaxis/guide/en/fields/analysis/imports-all-1.json +39 -0
- chronaxis/guide/en/fields/analysis/intervals-all-1.json +173 -0
- chronaxis/guide/en/fields/analysis/message_calculations-all-1.json +345 -0
- chronaxis/guide/en/fields/analysis/message_calculations-all-2.json +270 -0
- chronaxis/guide/en/fields/analysis/metadata-all-1.json +24 -0
- chronaxis/guide/en/fields/analysis/outputs-all-1.json +332 -0
- chronaxis/guide/en/fields/analysis/outputs-all-2.json +319 -0
- chronaxis/guide/en/fields/analysis/outputs-all-3.json +321 -0
- chronaxis/guide/en/fields/analysis/outputs-all-4.json +236 -0
- chronaxis/guide/en/fields/analysis/outputs-all-5.json +246 -0
- chronaxis/guide/en/fields/analysis/outputs-all-6.json +214 -0
- chronaxis/guide/en/fields/analysis/overrides-all-1.json +104 -0
- chronaxis/guide/en/fields/analysis/presets-charge_session-1.json +398 -0
- chronaxis/guide/en/fields/analysis/presets-charge_session-2.json +114 -0
- chronaxis/guide/en/fields/analysis/presets-command_response-1.json +376 -0
- chronaxis/guide/en/fields/analysis/presets-fault_context-1.json +285 -0
- chronaxis/guide/en/fields/analysis/presets-threshold_excursion-1.json +317 -0
- chronaxis/guide/en/fields/analysis/rules-condition_duration-1.json +344 -0
- chronaxis/guide/en/fields/analysis/rules-condition_duration-2.json +27 -0
- chronaxis/guide/en/fields/analysis/rules-debounce-1.json +335 -0
- chronaxis/guide/en/fields/analysis/rules-falling_edge-1.json +317 -0
- chronaxis/guide/en/fields/analysis/rules-hysteresis-1.json +334 -0
- chronaxis/guide/en/fields/analysis/rules-hysteresis-2.json +27 -0
- chronaxis/guide/en/fields/analysis/rules-rising_edge-1.json +317 -0
- chronaxis/guide/en/fields/analysis/rules-start_end-1.json +333 -0
- chronaxis/guide/en/fields/analysis/rules-start_end-2.json +60 -0
- chronaxis/guide/en/fields/analysis/rules-start_only-1.json +334 -0
- chronaxis/guide/en/fields/analysis/rules-window_delta-1.json +338 -0
- chronaxis/guide/en/fields/analysis/rules-window_delta-2.json +96 -0
- chronaxis/guide/en/fields/analysis/sequences-all-1.json +378 -0
- chronaxis/guide/en/fields/analysis/sequences-all-2.json +70 -0
- chronaxis/guide/en/fields/analysis/signals-variant-1-1.json +349 -0
- chronaxis/guide/en/fields/analysis/signals-variant-1-2.json +297 -0
- chronaxis/guide/en/fields/analysis/signals-variant-1-3.json +323 -0
- chronaxis/guide/en/fields/analysis/signals-variant-1-4.json +192 -0
- chronaxis/guide/en/fields/analysis/signals-variant-2-1.json +327 -0
- chronaxis/guide/en/fields/analysis/signals-variant-2-2.json +312 -0
- chronaxis/guide/en/fields/analysis/signals-variant-2-3.json +294 -0
- chronaxis/guide/en/fields/analysis/signals-variant-2-4.json +253 -0
- chronaxis/guide/en/fields/analysis/signals-variant-2-5.json +44 -0
- chronaxis/guide/en/fields/analysis/sources-can_asc-1.json +318 -0
- chronaxis/guide/en/fields/analysis/sources-can_asc-2.json +310 -0
- chronaxis/guide/en/fields/analysis/sources-can_asc-3.json +311 -0
- chronaxis/guide/en/fields/analysis/sources-can_asc-4.json +69 -0
- chronaxis/guide/en/fields/analysis/sources-can_blf-1.json +317 -0
- chronaxis/guide/en/fields/analysis/sources-can_blf-2.json +310 -0
- chronaxis/guide/en/fields/analysis/sources-can_blf-3.json +317 -0
- chronaxis/guide/en/fields/analysis/sources-memory-1.json +332 -0
- chronaxis/guide/en/fields/analysis/sources-memory-2.json +125 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-1.json +330 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-10.json +233 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-11.json +225 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-12.json +228 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-13.json +226 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-14.json +230 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-15.json +227 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-16.json +230 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-17.json +238 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-18.json +239 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-19.json +233 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-2.json +310 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-20.json +242 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-21.json +230 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-22.json +228 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-23.json +230 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-24.json +223 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-25.json +290 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-26.json +131 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-3.json +297 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-4.json +226 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-5.json +230 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-6.json +227 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-7.json +230 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-8.json +238 -0
- chronaxis/guide/en/fields/analysis/sources-raw_can_csv-9.json +239 -0
- chronaxis/guide/en/fields/analysis/sources-signal_csv-1.json +331 -0
- chronaxis/guide/en/fields/analysis/sources-signal_csv-2.json +307 -0
- chronaxis/guide/en/fields/analysis/sources-signal_csv-3.json +315 -0
- chronaxis/guide/en/fields/analysis/sources-variant-6-1.json +319 -0
- chronaxis/guide/en/fields/analysis/sources-variant-6-2.json +307 -0
- chronaxis/guide/en/fields/analysis/sources-variant-6-3.json +312 -0
- chronaxis/guide/en/fields/analysis/sources-variant-6-4.json +113 -0
- chronaxis/guide/en/fields/analysis/windows-all-1.json +361 -0
- chronaxis/guide/en/fields/analysis/windows-all-2.json +187 -0
- chronaxis/guide/en/fields/batch/backend-all-1.json +26 -0
- chronaxis/guide/en/fields/batch/batch_version-all-1.json +22 -0
- chronaxis/guide/en/fields/batch/fail_fast-all-1.json +22 -0
- chronaxis/guide/en/fields/batch/inputs-all-1.json +161 -0
- chronaxis/guide/en/fields/batch/jobs-all-1.json +58 -0
- chronaxis/guide/en/fields/batch/process_count-all-1.json +23 -0
- chronaxis/guide/en/fields/batch/source-all-1.json +22 -0
- chronaxis/guide/en/fields/batch/template-all-1.json +22 -0
- chronaxis/guide/en/fields/definitions/derived-all-1.json +121 -0
- chronaxis/guide/en/fields/definitions/signals-all-1.json +336 -0
- chronaxis/guide/en/fields/definitions/signals-all-2.json +307 -0
- chronaxis/guide/en/fields/definitions/signals-all-3.json +290 -0
- chronaxis/guide/en/fields/definitions/signals-all-4.json +347 -0
- chronaxis/guide/en/fields/definitions/signals-all-5.json +297 -0
- chronaxis/guide/en/fields/definitions/signals-all-6.json +259 -0
- chronaxis/guide/en/fields/definitions/signals-all-7.json +117 -0
- chronaxis/guide/en/fields/definitions/sources-all-1.json +332 -0
- chronaxis/guide/en/fields/definitions/sources-all-10.json +306 -0
- chronaxis/guide/en/fields/definitions/sources-all-11.json +294 -0
- chronaxis/guide/en/fields/definitions/sources-all-12.json +212 -0
- chronaxis/guide/en/fields/definitions/sources-all-13.json +217 -0
- chronaxis/guide/en/fields/definitions/sources-all-14.json +213 -0
- chronaxis/guide/en/fields/definitions/sources-all-15.json +214 -0
- chronaxis/guide/en/fields/definitions/sources-all-16.json +215 -0
- chronaxis/guide/en/fields/definitions/sources-all-17.json +213 -0
- chronaxis/guide/en/fields/definitions/sources-all-18.json +214 -0
- chronaxis/guide/en/fields/definitions/sources-all-19.json +213 -0
- chronaxis/guide/en/fields/definitions/sources-all-2.json +323 -0
- chronaxis/guide/en/fields/definitions/sources-all-20.json +217 -0
- chronaxis/guide/en/fields/definitions/sources-all-21.json +210 -0
- chronaxis/guide/en/fields/definitions/sources-all-22.json +214 -0
- chronaxis/guide/en/fields/definitions/sources-all-23.json +218 -0
- chronaxis/guide/en/fields/definitions/sources-all-24.json +209 -0
- chronaxis/guide/en/fields/definitions/sources-all-25.json +215 -0
- chronaxis/guide/en/fields/definitions/sources-all-26.json +218 -0
- chronaxis/guide/en/fields/definitions/sources-all-27.json +224 -0
- chronaxis/guide/en/fields/definitions/sources-all-28.json +215 -0
- chronaxis/guide/en/fields/definitions/sources-all-29.json +205 -0
- chronaxis/guide/en/fields/definitions/sources-all-3.json +303 -0
- chronaxis/guide/en/fields/definitions/sources-all-30.json +298 -0
- chronaxis/guide/en/fields/definitions/sources-all-31.json +315 -0
- chronaxis/guide/en/fields/definitions/sources-all-32.json +306 -0
- chronaxis/guide/en/fields/definitions/sources-all-33.json +209 -0
- chronaxis/guide/en/fields/definitions/sources-all-4.json +336 -0
- chronaxis/guide/en/fields/definitions/sources-all-5.json +299 -0
- chronaxis/guide/en/fields/definitions/sources-all-6.json +307 -0
- chronaxis/guide/en/fields/definitions/sources-all-7.json +320 -0
- chronaxis/guide/en/fields/definitions/sources-all-8.json +303 -0
- chronaxis/guide/en/fields/definitions/sources-all-9.json +315 -0
- chronaxis/guide/en/fields/index.json +3450 -0
- chronaxis/guide/en/fields/mapping/aliases-all-1.json +91 -0
- chronaxis/guide/en/fields/mapping/analysis-all-1.json +382 -0
- chronaxis/guide/en/fields/mapping/analysis-all-10.json +301 -0
- chronaxis/guide/en/fields/mapping/analysis-all-11.json +312 -0
- chronaxis/guide/en/fields/mapping/analysis-all-12.json +311 -0
- chronaxis/guide/en/fields/mapping/analysis-all-13.json +314 -0
- chronaxis/guide/en/fields/mapping/analysis-all-14.json +310 -0
- chronaxis/guide/en/fields/mapping/analysis-all-15.json +297 -0
- chronaxis/guide/en/fields/mapping/analysis-all-16.json +226 -0
- chronaxis/guide/en/fields/mapping/analysis-all-17.json +230 -0
- chronaxis/guide/en/fields/mapping/analysis-all-18.json +227 -0
- chronaxis/guide/en/fields/mapping/analysis-all-19.json +230 -0
- chronaxis/guide/en/fields/mapping/analysis-all-2.json +323 -0
- chronaxis/guide/en/fields/mapping/analysis-all-20.json +221 -0
- chronaxis/guide/en/fields/mapping/analysis-all-21.json +237 -0
- chronaxis/guide/en/fields/mapping/analysis-all-22.json +233 -0
- chronaxis/guide/en/fields/mapping/analysis-all-23.json +222 -0
- chronaxis/guide/en/fields/mapping/analysis-all-24.json +231 -0
- chronaxis/guide/en/fields/mapping/analysis-all-25.json +225 -0
- chronaxis/guide/en/fields/mapping/analysis-all-26.json +230 -0
- chronaxis/guide/en/fields/mapping/analysis-all-27.json +228 -0
- chronaxis/guide/en/fields/mapping/analysis-all-28.json +230 -0
- chronaxis/guide/en/fields/mapping/analysis-all-29.json +223 -0
- chronaxis/guide/en/fields/mapping/analysis-all-3.json +318 -0
- chronaxis/guide/en/fields/mapping/analysis-all-30.json +233 -0
- chronaxis/guide/en/fields/mapping/analysis-all-31.json +218 -0
- chronaxis/guide/en/fields/mapping/analysis-all-32.json +239 -0
- chronaxis/guide/en/fields/mapping/analysis-all-33.json +233 -0
- chronaxis/guide/en/fields/mapping/analysis-all-34.json +225 -0
- chronaxis/guide/en/fields/mapping/analysis-all-35.json +228 -0
- chronaxis/guide/en/fields/mapping/analysis-all-36.json +226 -0
- chronaxis/guide/en/fields/mapping/analysis-all-37.json +244 -0
- chronaxis/guide/en/fields/mapping/analysis-all-38.json +326 -0
- chronaxis/guide/en/fields/mapping/analysis-all-39.json +299 -0
- chronaxis/guide/en/fields/mapping/analysis-all-4.json +297 -0
- chronaxis/guide/en/fields/mapping/analysis-all-40.json +311 -0
- chronaxis/guide/en/fields/mapping/analysis-all-41.json +310 -0
- chronaxis/guide/en/fields/mapping/analysis-all-42.json +346 -0
- chronaxis/guide/en/fields/mapping/analysis-all-43.json +267 -0
- chronaxis/guide/en/fields/mapping/analysis-all-44.json +327 -0
- chronaxis/guide/en/fields/mapping/analysis-all-45.json +279 -0
- chronaxis/guide/en/fields/mapping/analysis-all-46.json +327 -0
- chronaxis/guide/en/fields/mapping/analysis-all-47.json +312 -0
- chronaxis/guide/en/fields/mapping/analysis-all-48.json +294 -0
- chronaxis/guide/en/fields/mapping/analysis-all-49.json +253 -0
- chronaxis/guide/en/fields/mapping/analysis-all-5.json +312 -0
- chronaxis/guide/en/fields/mapping/analysis-all-50.json +346 -0
- chronaxis/guide/en/fields/mapping/analysis-all-51.json +324 -0
- chronaxis/guide/en/fields/mapping/analysis-all-52.json +335 -0
- chronaxis/guide/en/fields/mapping/analysis-all-53.json +317 -0
- chronaxis/guide/en/fields/mapping/analysis-all-54.json +316 -0
- chronaxis/guide/en/fields/mapping/analysis-all-55.json +302 -0
- chronaxis/guide/en/fields/mapping/analysis-all-56.json +319 -0
- chronaxis/guide/en/fields/mapping/analysis-all-57.json +334 -0
- chronaxis/guide/en/fields/mapping/analysis-all-58.json +333 -0
- chronaxis/guide/en/fields/mapping/analysis-all-59.json +359 -0
- chronaxis/guide/en/fields/mapping/analysis-all-6.json +327 -0
- chronaxis/guide/en/fields/mapping/analysis-all-60.json +303 -0
- chronaxis/guide/en/fields/mapping/analysis-all-61.json +326 -0
- chronaxis/guide/en/fields/mapping/analysis-all-62.json +301 -0
- chronaxis/guide/en/fields/mapping/analysis-all-63.json +326 -0
- chronaxis/guide/en/fields/mapping/analysis-all-64.json +367 -0
- chronaxis/guide/en/fields/mapping/analysis-all-65.json +334 -0
- chronaxis/guide/en/fields/mapping/analysis-all-66.json +358 -0
- chronaxis/guide/en/fields/mapping/analysis-all-67.json +349 -0
- chronaxis/guide/en/fields/mapping/analysis-all-68.json +331 -0
- chronaxis/guide/en/fields/mapping/analysis-all-69.json +304 -0
- chronaxis/guide/en/fields/mapping/analysis-all-7.json +303 -0
- chronaxis/guide/en/fields/mapping/analysis-all-70.json +349 -0
- chronaxis/guide/en/fields/mapping/analysis-all-71.json +288 -0
- chronaxis/guide/en/fields/mapping/analysis-all-72.json +316 -0
- chronaxis/guide/en/fields/mapping/analysis-all-73.json +266 -0
- chronaxis/guide/en/fields/mapping/analysis-all-74.json +227 -0
- chronaxis/guide/en/fields/mapping/analysis-all-75.json +239 -0
- chronaxis/guide/en/fields/mapping/analysis-all-76.json +274 -0
- chronaxis/guide/en/fields/mapping/analysis-all-77.json +380 -0
- chronaxis/guide/en/fields/mapping/analysis-all-78.json +313 -0
- chronaxis/guide/en/fields/mapping/analysis-all-79.json +338 -0
- chronaxis/guide/en/fields/mapping/analysis-all-8.json +292 -0
- chronaxis/guide/en/fields/mapping/analysis-all-80.json +304 -0
- chronaxis/guide/en/fields/mapping/analysis-all-81.json +140 -0
- chronaxis/guide/en/fields/mapping/analysis-all-9.json +332 -0
- chronaxis/guide/en/fields/mapping/io_policy-all-1.json +19 -0
- chronaxis/guide/en/fields/mapping/mapping_version-all-1.json +19 -0
- chronaxis/guide/en/fields/mapping/path_base-all-1.json +19 -0
- chronaxis/guide/en/fields/mapping/sections-all-1.json +402 -0
- chronaxis/guide/en/fields/mapping/sections-all-2.json +232 -0
- chronaxis/guide/en/semantics.md +70 -0
- chronaxis/guide/en/tasks.json +290 -0
- chronaxis/guide/en/workflow.md +41 -0
- chronaxis/guide/examples/analysis-imports.yaml +22 -0
- chronaxis/guide/examples/analysis.yaml +23 -0
- chronaxis/guide/examples/batch-minimal.yaml +3 -0
- chronaxis/guide/examples/conditional-energy.yaml +36 -0
- chronaxis/guide/examples/data/activity.csv +6 -0
- chronaxis/guide/examples/data/can/activity.asc +11 -0
- chronaxis/guide/examples/data/can/calculation-minimal.asc +6 -0
- chronaxis/guide/examples/data/can/conditional-energy/part-1.asc +92 -0
- chronaxis/guide/examples/data/can/conditional-energy/part-2.asc +36 -0
- chronaxis/guide/examples/data/can/conditional-energy/signals.dbc +10 -0
- chronaxis/guide/examples/data/can/execution-comparison.asc +12 -0
- chronaxis/guide/examples/data/can/execution-report.asc +4 -0
- chronaxis/guide/examples/data/can/expression-extended.asc +11 -0
- chronaxis/guide/examples/data/can/interval-actual.asc +6 -0
- chronaxis/guide/examples/data/can/preset-charge-energy.asc +15 -0
- chronaxis/guide/examples/data/can/preset-charge-minimal.asc +11 -0
- chronaxis/guide/examples/data/can/preset-command-automatic.asc +11 -0
- chronaxis/guide/examples/data/can/preset-fault-context.asc +7 -0
- chronaxis/guide/examples/data/can/preset-threshold-delay.asc +7 -0
- chronaxis/guide/examples/data/can/preset-threshold-partial.asc +7 -0
- chronaxis/guide/examples/data/can/quality.asc +6 -0
- chronaxis/guide/examples/data/can/quickstart-parts/part1.asc +4 -0
- chronaxis/guide/examples/data/can/quickstart-parts/part2.asc +3 -0
- chronaxis/guide/examples/data/can/quickstart.asc +6 -0
- chronaxis/guide/examples/data/can/rule-condition_duration-extended.asc +35 -0
- chronaxis/guide/examples/data/can/rule-condition_duration-minimal.asc +19 -0
- chronaxis/guide/examples/data/can/rule-debounce-extended.asc +19 -0
- chronaxis/guide/examples/data/can/rule-falling_edge-extended.asc +35 -0
- chronaxis/guide/examples/data/can/rule-hysteresis-extended.asc +19 -0
- chronaxis/guide/examples/data/can/rule-start_end-extended.asc +35 -0
- chronaxis/guide/examples/data/can/rule-start_only-extended.asc +19 -0
- chronaxis/guide/examples/data/can/rule-window_delta-extended.asc +19 -0
- chronaxis/guide/examples/data/can/sequence-outcomes.asc +19 -0
- chronaxis/guide/examples/data/can/signal-types.asc +13 -0
- chronaxis/guide/examples/data/can/start-end.asc +30 -0
- chronaxis/guide/examples/data/can/teaching-base.asc +58 -0
- chronaxis/guide/examples/data/can/teaching.dbc +53 -0
- chronaxis/guide/examples/data/joint-current.csv +5 -0
- chronaxis/guide/examples/data/joint.asc +5 -0
- chronaxis/guide/examples/data/joint.dbc +7 -0
- chronaxis/guide/examples/data/message-clean.asc +6 -0
- chronaxis/guide/examples/data/message-direction.asc +7 -0
- chronaxis/guide/examples/data/message-direction.dbc +7 -0
- chronaxis/guide/examples/data/power.blf +0 -0
- chronaxis/guide/examples/data/power.dbc +6 -0
- chronaxis/guide/examples/data/quality.csv +5 -0
- chronaxis/guide/examples/data/raw-can-example.csv +5 -0
- chronaxis/guide/examples/data/signal-types.csv +5 -0
- chronaxis/guide/examples/data/signals.csv +6 -0
- chronaxis/guide/examples/data/timing.asc +6 -0
- chronaxis/guide/examples/data/timing.dbc +11 -0
- chronaxis/guide/examples/export-can-minimal.yaml +24 -0
- chronaxis/guide/examples/input-csv-minimal.yaml +23 -0
- chronaxis/guide/examples/preset-charge-energy.yaml +41 -0
- chronaxis/guide/examples/preset-charge-minimal.yaml +31 -0
- chronaxis/guide/examples/preset-fault-context.yaml +27 -0
- chronaxis/guide/examples/quality.yaml +19 -0
- chronaxis/guide/examples/sequence-outcomes.yaml +39 -0
- chronaxis/guide/examples/shared/definitions.yaml +14 -0
- chronaxis/guide/examples/signal-enum-minimal.yaml +19 -0
- chronaxis/guide/examples/signal-number-conversion.yaml +24 -0
- chronaxis/guide/examples/window-merged.yaml +28 -0
- chronaxis/guide/fields/analysis/calculations-all-1.json +360 -0
- chronaxis/guide/fields/analysis/calculations-all-2.json +299 -0
- chronaxis/guide/fields/analysis/calculations-all-3.json +70 -0
- chronaxis/guide/fields/analysis/config_version-all-1.json +24 -0
- chronaxis/guide/fields/analysis/dataset-all-1.json +344 -0
- chronaxis/guide/fields/analysis/derived-all-1.json +147 -0
- chronaxis/guide/fields/analysis/diagnostics-all-1.json +69 -0
- chronaxis/guide/fields/analysis/execution-all-1.json +167 -0
- chronaxis/guide/fields/analysis/imports-all-1.json +39 -0
- chronaxis/guide/fields/analysis/intervals-all-1.json +173 -0
- chronaxis/guide/fields/analysis/message_calculations-all-1.json +360 -0
- chronaxis/guide/fields/analysis/message_calculations-all-2.json +255 -0
- chronaxis/guide/fields/analysis/metadata-all-1.json +24 -0
- chronaxis/guide/fields/analysis/outputs-all-1.json +349 -0
- chronaxis/guide/fields/analysis/outputs-all-2.json +302 -0
- chronaxis/guide/fields/analysis/outputs-all-3.json +321 -0
- chronaxis/guide/fields/analysis/outputs-all-4.json +253 -0
- chronaxis/guide/fields/analysis/outputs-all-5.json +244 -0
- chronaxis/guide/fields/analysis/outputs-all-6.json +199 -0
- chronaxis/guide/fields/analysis/overrides-all-1.json +104 -0
- chronaxis/guide/fields/analysis/presets-charge_session-1.json +398 -0
- chronaxis/guide/fields/analysis/presets-charge_session-2.json +114 -0
- chronaxis/guide/fields/analysis/presets-command_response-1.json +376 -0
- chronaxis/guide/fields/analysis/presets-fault_context-1.json +285 -0
- chronaxis/guide/fields/analysis/presets-threshold_excursion-1.json +317 -0
- chronaxis/guide/fields/analysis/rules-condition_duration-1.json +344 -0
- chronaxis/guide/fields/analysis/rules-condition_duration-2.json +27 -0
- chronaxis/guide/fields/analysis/rules-debounce-1.json +335 -0
- chronaxis/guide/fields/analysis/rules-falling_edge-1.json +317 -0
- chronaxis/guide/fields/analysis/rules-hysteresis-1.json +334 -0
- chronaxis/guide/fields/analysis/rules-hysteresis-2.json +27 -0
- chronaxis/guide/fields/analysis/rules-rising_edge-1.json +317 -0
- chronaxis/guide/fields/analysis/rules-start_end-1.json +349 -0
- chronaxis/guide/fields/analysis/rules-start_end-2.json +44 -0
- chronaxis/guide/fields/analysis/rules-start_only-1.json +334 -0
- chronaxis/guide/fields/analysis/rules-window_delta-1.json +356 -0
- chronaxis/guide/fields/analysis/rules-window_delta-2.json +78 -0
- chronaxis/guide/fields/analysis/sequences-all-1.json +394 -0
- chronaxis/guide/fields/analysis/sequences-all-2.json +54 -0
- chronaxis/guide/fields/analysis/signals-variant-1-1.json +349 -0
- chronaxis/guide/fields/analysis/signals-variant-1-2.json +297 -0
- chronaxis/guide/fields/analysis/signals-variant-1-3.json +340 -0
- chronaxis/guide/fields/analysis/signals-variant-1-4.json +175 -0
- chronaxis/guide/fields/analysis/signals-variant-2-1.json +327 -0
- chronaxis/guide/fields/analysis/signals-variant-2-2.json +335 -0
- chronaxis/guide/fields/analysis/signals-variant-2-3.json +289 -0
- chronaxis/guide/fields/analysis/signals-variant-2-4.json +270 -0
- chronaxis/guide/fields/analysis/sources-can_asc-1.json +318 -0
- chronaxis/guide/fields/analysis/sources-can_asc-2.json +310 -0
- chronaxis/guide/fields/analysis/sources-can_asc-3.json +311 -0
- chronaxis/guide/fields/analysis/sources-can_asc-4.json +69 -0
- chronaxis/guide/fields/analysis/sources-can_blf-1.json +317 -0
- chronaxis/guide/fields/analysis/sources-can_blf-2.json +310 -0
- chronaxis/guide/fields/analysis/sources-can_blf-3.json +317 -0
- chronaxis/guide/fields/analysis/sources-memory-1.json +347 -0
- chronaxis/guide/fields/analysis/sources-memory-2.json +110 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-1.json +330 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-10.json +233 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-11.json +225 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-12.json +228 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-13.json +226 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-14.json +230 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-15.json +227 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-16.json +230 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-17.json +238 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-18.json +239 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-19.json +233 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-2.json +310 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-20.json +242 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-21.json +230 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-22.json +228 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-23.json +230 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-24.json +223 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-25.json +290 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-26.json +131 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-3.json +297 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-4.json +226 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-5.json +230 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-6.json +227 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-7.json +230 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-8.json +238 -0
- chronaxis/guide/fields/analysis/sources-raw_can_csv-9.json +239 -0
- chronaxis/guide/fields/analysis/sources-signal_csv-1.json +331 -0
- chronaxis/guide/fields/analysis/sources-signal_csv-2.json +327 -0
- chronaxis/guide/fields/analysis/sources-signal_csv-3.json +295 -0
- chronaxis/guide/fields/analysis/sources-variant-6-1.json +319 -0
- chronaxis/guide/fields/analysis/sources-variant-6-2.json +327 -0
- chronaxis/guide/fields/analysis/sources-variant-6-3.json +314 -0
- chronaxis/guide/fields/analysis/sources-variant-6-4.json +91 -0
- chronaxis/guide/fields/analysis/windows-all-1.json +361 -0
- chronaxis/guide/fields/analysis/windows-all-2.json +187 -0
- chronaxis/guide/fields/batch/backend-all-1.json +26 -0
- chronaxis/guide/fields/batch/batch_version-all-1.json +22 -0
- chronaxis/guide/fields/batch/fail_fast-all-1.json +22 -0
- chronaxis/guide/fields/batch/inputs-all-1.json +161 -0
- chronaxis/guide/fields/batch/jobs-all-1.json +58 -0
- chronaxis/guide/fields/batch/process_count-all-1.json +23 -0
- chronaxis/guide/fields/batch/source-all-1.json +22 -0
- chronaxis/guide/fields/batch/template-all-1.json +22 -0
- chronaxis/guide/fields/definitions/derived-all-1.json +121 -0
- chronaxis/guide/fields/definitions/signals-all-1.json +336 -0
- chronaxis/guide/fields/definitions/signals-all-2.json +307 -0
- chronaxis/guide/fields/definitions/signals-all-3.json +305 -0
- chronaxis/guide/fields/definitions/signals-all-4.json +352 -0
- chronaxis/guide/fields/definitions/signals-all-5.json +311 -0
- chronaxis/guide/fields/definitions/signals-all-6.json +254 -0
- chronaxis/guide/fields/definitions/signals-all-7.json +88 -0
- chronaxis/guide/fields/definitions/sources-all-1.json +332 -0
- chronaxis/guide/fields/definitions/sources-all-10.json +307 -0
- chronaxis/guide/fields/definitions/sources-all-11.json +280 -0
- chronaxis/guide/fields/definitions/sources-all-12.json +209 -0
- chronaxis/guide/fields/definitions/sources-all-13.json +219 -0
- chronaxis/guide/fields/definitions/sources-all-14.json +213 -0
- chronaxis/guide/fields/definitions/sources-all-15.json +212 -0
- chronaxis/guide/fields/definitions/sources-all-16.json +232 -0
- chronaxis/guide/fields/definitions/sources-all-17.json +213 -0
- chronaxis/guide/fields/definitions/sources-all-18.json +212 -0
- chronaxis/guide/fields/definitions/sources-all-19.json +217 -0
- chronaxis/guide/fields/definitions/sources-all-2.json +336 -0
- chronaxis/guide/fields/definitions/sources-all-20.json +228 -0
- chronaxis/guide/fields/definitions/sources-all-21.json +212 -0
- chronaxis/guide/fields/definitions/sources-all-22.json +232 -0
- chronaxis/guide/fields/definitions/sources-all-23.json +213 -0
- chronaxis/guide/fields/definitions/sources-all-24.json +212 -0
- chronaxis/guide/fields/definitions/sources-all-25.json +217 -0
- chronaxis/guide/fields/definitions/sources-all-26.json +228 -0
- chronaxis/guide/fields/definitions/sources-all-27.json +212 -0
- chronaxis/guide/fields/definitions/sources-all-28.json +217 -0
- chronaxis/guide/fields/definitions/sources-all-29.json +227 -0
- chronaxis/guide/fields/definitions/sources-all-3.json +306 -0
- chronaxis/guide/fields/definitions/sources-all-30.json +333 -0
- chronaxis/guide/fields/definitions/sources-all-31.json +302 -0
- chronaxis/guide/fields/definitions/sources-all-32.json +319 -0
- chronaxis/guide/fields/definitions/sources-all-33.json +89 -0
- chronaxis/guide/fields/definitions/sources-all-4.json +336 -0
- chronaxis/guide/fields/definitions/sources-all-5.json +313 -0
- chronaxis/guide/fields/definitions/sources-all-6.json +292 -0
- chronaxis/guide/fields/definitions/sources-all-7.json +319 -0
- chronaxis/guide/fields/definitions/sources-all-8.json +315 -0
- chronaxis/guide/fields/definitions/sources-all-9.json +318 -0
- chronaxis/guide/fields/index.json +3432 -0
- chronaxis/guide/fields/mapping/aliases-all-1.json +91 -0
- chronaxis/guide/fields/mapping/analysis-all-1.json +382 -0
- chronaxis/guide/fields/mapping/analysis-all-10.json +307 -0
- chronaxis/guide/fields/mapping/analysis-all-11.json +311 -0
- chronaxis/guide/fields/mapping/analysis-all-12.json +329 -0
- chronaxis/guide/fields/mapping/analysis-all-13.json +294 -0
- chronaxis/guide/fields/mapping/analysis-all-14.json +311 -0
- chronaxis/guide/fields/mapping/analysis-all-15.json +280 -0
- chronaxis/guide/fields/mapping/analysis-all-16.json +227 -0
- chronaxis/guide/fields/mapping/analysis-all-17.json +230 -0
- chronaxis/guide/fields/mapping/analysis-all-18.json +221 -0
- chronaxis/guide/fields/mapping/analysis-all-19.json +237 -0
- chronaxis/guide/fields/mapping/analysis-all-2.json +342 -0
- chronaxis/guide/fields/mapping/analysis-all-20.json +233 -0
- chronaxis/guide/fields/mapping/analysis-all-21.json +244 -0
- chronaxis/guide/fields/mapping/analysis-all-22.json +228 -0
- chronaxis/guide/fields/mapping/analysis-all-23.json +226 -0
- chronaxis/guide/fields/mapping/analysis-all-24.json +230 -0
- chronaxis/guide/fields/mapping/analysis-all-25.json +227 -0
- chronaxis/guide/fields/mapping/analysis-all-26.json +230 -0
- chronaxis/guide/fields/mapping/analysis-all-27.json +221 -0
- chronaxis/guide/fields/mapping/analysis-all-28.json +237 -0
- chronaxis/guide/fields/mapping/analysis-all-29.json +233 -0
- chronaxis/guide/fields/mapping/analysis-all-3.json +322 -0
- chronaxis/guide/fields/mapping/analysis-all-30.json +244 -0
- chronaxis/guide/fields/mapping/analysis-all-31.json +228 -0
- chronaxis/guide/fields/mapping/analysis-all-32.json +226 -0
- chronaxis/guide/fields/mapping/analysis-all-33.json +230 -0
- chronaxis/guide/fields/mapping/analysis-all-34.json +227 -0
- chronaxis/guide/fields/mapping/analysis-all-35.json +230 -0
- chronaxis/guide/fields/mapping/analysis-all-36.json +221 -0
- chronaxis/guide/fields/mapping/analysis-all-37.json +291 -0
- chronaxis/guide/fields/mapping/analysis-all-38.json +315 -0
- chronaxis/guide/fields/mapping/analysis-all-39.json +304 -0
- chronaxis/guide/fields/mapping/analysis-all-4.json +312 -0
- chronaxis/guide/fields/mapping/analysis-all-40.json +307 -0
- chronaxis/guide/fields/mapping/analysis-all-41.json +292 -0
- chronaxis/guide/fields/mapping/analysis-all-42.json +333 -0
- chronaxis/guide/fields/mapping/analysis-all-43.json +296 -0
- chronaxis/guide/fields/mapping/analysis-all-44.json +322 -0
- chronaxis/guide/fields/mapping/analysis-all-45.json +298 -0
- chronaxis/guide/fields/mapping/analysis-all-46.json +347 -0
- chronaxis/guide/fields/mapping/analysis-all-47.json +302 -0
- chronaxis/guide/fields/mapping/analysis-all-48.json +263 -0
- chronaxis/guide/fields/mapping/analysis-all-49.json +301 -0
- chronaxis/guide/fields/mapping/analysis-all-5.json +313 -0
- chronaxis/guide/fields/mapping/analysis-all-50.json +336 -0
- chronaxis/guide/fields/mapping/analysis-all-51.json +335 -0
- chronaxis/guide/fields/mapping/analysis-all-52.json +335 -0
- chronaxis/guide/fields/mapping/analysis-all-53.json +334 -0
- chronaxis/guide/fields/mapping/analysis-all-54.json +339 -0
- chronaxis/guide/fields/mapping/analysis-all-55.json +335 -0
- chronaxis/guide/fields/mapping/analysis-all-56.json +336 -0
- chronaxis/guide/fields/mapping/analysis-all-57.json +335 -0
- chronaxis/guide/fields/mapping/analysis-all-58.json +333 -0
- chronaxis/guide/fields/mapping/analysis-all-59.json +325 -0
- chronaxis/guide/fields/mapping/analysis-all-6.json +323 -0
- chronaxis/guide/fields/mapping/analysis-all-60.json +334 -0
- chronaxis/guide/fields/mapping/analysis-all-61.json +311 -0
- chronaxis/guide/fields/mapping/analysis-all-62.json +289 -0
- chronaxis/guide/fields/mapping/analysis-all-63.json +383 -0
- chronaxis/guide/fields/mapping/analysis-all-64.json +357 -0
- chronaxis/guide/fields/mapping/analysis-all-65.json +375 -0
- chronaxis/guide/fields/mapping/analysis-all-66.json +351 -0
- chronaxis/guide/fields/mapping/analysis-all-67.json +346 -0
- chronaxis/guide/fields/mapping/analysis-all-68.json +317 -0
- chronaxis/guide/fields/mapping/analysis-all-69.json +313 -0
- chronaxis/guide/fields/mapping/analysis-all-7.json +306 -0
- chronaxis/guide/fields/mapping/analysis-all-70.json +326 -0
- chronaxis/guide/fields/mapping/analysis-all-71.json +316 -0
- chronaxis/guide/fields/mapping/analysis-all-72.json +264 -0
- chronaxis/guide/fields/mapping/analysis-all-73.json +228 -0
- chronaxis/guide/fields/mapping/analysis-all-74.json +241 -0
- chronaxis/guide/fields/mapping/analysis-all-75.json +273 -0
- chronaxis/guide/fields/mapping/analysis-all-76.json +382 -0
- chronaxis/guide/fields/mapping/analysis-all-77.json +328 -0
- chronaxis/guide/fields/mapping/analysis-all-78.json +338 -0
- chronaxis/guide/fields/mapping/analysis-all-79.json +304 -0
- chronaxis/guide/fields/mapping/analysis-all-8.json +309 -0
- chronaxis/guide/fields/mapping/analysis-all-80.json +140 -0
- chronaxis/guide/fields/mapping/analysis-all-9.json +329 -0
- chronaxis/guide/fields/mapping/io_policy-all-1.json +19 -0
- chronaxis/guide/fields/mapping/mapping_version-all-1.json +19 -0
- chronaxis/guide/fields/mapping/path_base-all-1.json +19 -0
- chronaxis/guide/fields/mapping/sections-all-1.json +402 -0
- chronaxis/guide/fields/mapping/sections-all-2.json +232 -0
- chronaxis/guide/lookup.py +90 -0
- chronaxis/guide/manifest.json +614 -0
- chronaxis/guide/run_analysis.py +34 -0
- chronaxis/guide/schemas/analysis.schema.json +8451 -0
- chronaxis/guide/schemas/batch-v1.schema.json +172 -0
- chronaxis/guide/schemas/definitions.schema.json +29 -0
- chronaxis/guide/schemas/legacy-import-v1.schema.json +143 -0
- chronaxis/guide/semantics.md +62 -0
- chronaxis/guide/tasks.json +290 -0
- chronaxis/guide/workflow.md +38 -0
- chronaxis/legacy/__init__.py +46 -0
- chronaxis/legacy/batch_read.py +412 -0
- chronaxis/legacy/batch_validation.py +134 -0
- chronaxis/legacy/batch_wire.py +264 -0
- chronaxis/legacy/batch_worker.py +417 -0
- chronaxis/legacy/binding.py +154 -0
- chronaxis/legacy/dbc_cycles.py +47 -0
- chronaxis/legacy/decode_policy.py +28 -0
- chronaxis/legacy/disjunction.py +79 -0
- chronaxis/legacy/export_worker.py +147 -0
- chronaxis/legacy/export_write.py +378 -0
- chronaxis/legacy/message_store.py +562 -0
- chronaxis/legacy/process_read.py +526 -0
- chronaxis/legacy/raw_store.py +341 -0
- chronaxis/legacy/records.py +709 -0
- chronaxis/legacy/required_records.py +122 -0
- chronaxis/legacy/sum.py +403 -0
- chronaxis/legacy/sum_numpy.py +43 -0
- chronaxis/legacy/updates.py +277 -0
- chronaxis/legacy/vendor/sclicer_functions_v1/can_processor.py +138 -0
- chronaxis/legacy/vendor/sclicer_functions_v1/file_processor.py +218 -0
- chronaxis/legacy/vendor/sclicer_functions_v1/utils.py +447 -0
- chronaxis/legacy/worker.py +352 -0
- chronaxis/migration/__init__.py +11 -0
- chronaxis/migration/api.py +270 -0
- chronaxis/migration/ini.py +110 -0
- chronaxis/migration/legacy_sum.py +304 -0
- chronaxis/migration/models.py +83 -0
- chronaxis/migration/publication.py +230 -0
- chronaxis/migration/sclicer.py +241 -0
- chronaxis/migration/slope.py +78 -0
- chronaxis/migration/start_end.py +48 -0
- chronaxis/planning/__init__.py +19 -0
- chronaxis/planning/channels.py +30 -0
- chronaxis/planning/checks.py +447 -0
- chronaxis/planning/config_groups.py +215 -0
- chronaxis/planning/dbc_defaults.py +88 -0
- chronaxis/planning/export_options.py +247 -0
- chronaxis/planning/input_defaults.py +62 -0
- chronaxis/planning/input_paths.py +124 -0
- chronaxis/planning/input_requirements.py +250 -0
- chronaxis/planning/inputs.py +306 -0
- chronaxis/planning/intervals.py +242 -0
- chronaxis/planning/legacy_execution.py +38 -0
- chronaxis/planning/message_calculations.py +171 -0
- chronaxis/planning/models.py +369 -0
- chronaxis/planning/nodes.py +355 -0
- chronaxis/planning/plan.py +294 -0
- chronaxis/planning/preset_models.py +211 -0
- chronaxis/planning/record_execution.py +76 -0
- chronaxis/planning/reports.py +523 -0
- chronaxis/planning/sequences.py +91 -0
- chronaxis/planning/signal_groups.py +61 -0
- chronaxis/planning/signal_validity.py +46 -0
- chronaxis/planning/text_inputs.py +110 -0
- chronaxis/presets.py +270 -0
- chronaxis/results/__init__.py +34 -0
- chronaxis/results/analysis_outcome.py +67 -0
- chronaxis/results/artifact_exports.py +212 -0
- chronaxis/results/binding_metadata.py +54 -0
- chronaxis/results/budget.py +138 -0
- chronaxis/results/can_metadata.py +247 -0
- chronaxis/results/codec.py +246 -0
- chronaxis/results/errors.py +25 -0
- chronaxis/results/export_files.py +216 -0
- chronaxis/results/frame_exports.py +299 -0
- chronaxis/results/frame_patch.py +186 -0
- chronaxis/results/frame_rebuild.py +458 -0
- chronaxis/results/frame_sort.py +223 -0
- chronaxis/results/input_diagnostics.py +51 -0
- chronaxis/results/manifest.py +343 -0
- chronaxis/results/merge_runs.py +207 -0
- chronaxis/results/owned_directory.py +32 -0
- chronaxis/results/raw_exports.py +689 -0
- chronaxis/results/readable.py +355 -0
- chronaxis/results/readable_format.py +94 -0
- chronaxis/results/result.py +734 -0
- chronaxis/results/rows.py +57 -0
- chronaxis/results/signal_exports.py +209 -0
- chronaxis/results/signal_grid.py +219 -0
- chronaxis/results/spool.py +421 -0
- chronaxis/results/summary.py +350 -0
- chronaxis/results/text_can_metadata.py +64 -0
- chronaxis/results/threshold_metadata.py +105 -0
- chronaxis/runner.py +121 -0
- chronaxis/sources/__init__.py +23 -0
- chronaxis/sources/asc.py +412 -0
- chronaxis/sources/blf.py +101 -0
- chronaxis/sources/can_spec.py +179 -0
- chronaxis/sources/can_updates.py +160 -0
- chronaxis/sources/csv_spec.py +133 -0
- chronaxis/sources/descriptions.py +65 -0
- chronaxis/sources/memory.py +299 -0
- chronaxis/sources/models.py +497 -0
- chronaxis/sources/packing.py +170 -0
- chronaxis/sources/protocol.py +221 -0
- chronaxis/sources/raw_can.py +62 -0
- chronaxis/sources/raw_csv.py +470 -0
- chronaxis/sources/raw_csv_layout.py +310 -0
- chronaxis/sources/signal_csv.py +608 -0
- chronaxis/sources/text_can_decode.py +421 -0
- chronaxis/sources/text_can_ref.py +48 -0
- chronaxis/sources/text_can_spec.py +61 -0
- chronaxis/timebase/__init__.py +19 -0
- chronaxis/timebase/conversion.py +364 -0
- chronaxis/timebase/numpy_ops.py +104 -0
- chronaxis/user_guide.py +81 -0
- chronaxis-0.1.0.dev0.dist-info/METADATA +172 -0
- chronaxis-0.1.0.dev0.dist-info/RECORD +917 -0
- chronaxis-0.1.0.dev0.dist-info/WHEEL +5 -0
- chronaxis-0.1.0.dev0.dist-info/entry_points.txt +2 -0
- chronaxis-0.1.0.dev0.dist-info/licenses/LICENSE +21 -0
- chronaxis-0.1.0.dev0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"""从已封存的新解码历史逐段计算一个窗口的表达式视图。
|
|
2
|
+
|
|
3
|
+
输入为实际运行绑定、原保持上下文、已编译表达式及域内Interval,坐标为整数纳秒。
|
|
4
|
+
先校验原历史身份,再打开独立状态与完整组游标;窗口前组只建立种子。
|
|
5
|
+
每步按真实更新、依赖TTL、来源终点或窗口末端拆分,返回须close的点/连续视图帧。
|
|
6
|
+
参考与NumPy分别调用既有独立表达式核,不物化完整样本、时间轴或帧列表。
|
|
7
|
+
资源属于本回读对象;原历史、调用方lease和原state借用,不重读旧报文/DBC。
|
|
8
|
+
提前停止不提供本次全文件EOF证明;运行绑定已有完整校验证据与部分回读分开。
|
|
9
|
+
新层保守预算包含前瞻、种子、查询和输出,不能代表外部留存量或进程RSS。
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
# 只组合已有封存历史、保持、表达式和精确边界,不实现新的数值或指标算法。
|
|
13
|
+
import numpy as np
|
|
14
|
+
from ..core.decoded_binding import DecodedBindings
|
|
15
|
+
from ..core.expression import CompiledExpression
|
|
16
|
+
from ..core.models import Interval
|
|
17
|
+
from ..results.errors import ResultClosedError
|
|
18
|
+
from .bindings import _fingerprint
|
|
19
|
+
from .boundaries import BoundaryQueries
|
|
20
|
+
from .expressions import ExpressionQueries
|
|
21
|
+
from .history import DecodedHistoryStore, _metadata_bytes
|
|
22
|
+
from .hold import HoldContext, HoldQueries
|
|
23
|
+
from .state import LatestSignalState
|
|
24
|
+
from .temporal_buffer import _BatchRegistry
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class WindowReplayFrame:
|
|
28
|
+
"""拥有一个时刻的点视图、可选连续视图及本步workspace。
|
|
29
|
+
|
|
30
|
+
连续值适用于[time_ns,end_ns),末点帧的两端相等且continuous_result为None。
|
|
31
|
+
点视图可能是保持值,只有ExpressionResult.actual_update才表示真实依赖更新。
|
|
32
|
+
两个子结果和链指针的预算在本帧close后释放,关闭过程中拒绝读取半关闭结果。
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
def __init__(self, owner, cost, time_ns, end_ns, point, continuous):
|
|
36
|
+
"""接收已计账的表达式结果,暂不安装登记。
|
|
37
|
+
|
|
38
|
+
参数: owner为回读者;cost为本步bytes;time_ns/end_ns为整数ns;
|
|
39
|
+
point为点ExpressionResult,continuous为连续结果或None。
|
|
40
|
+
返回: 新帧。异常: 构造失败由调用方回收子结果和workspace。
|
|
41
|
+
"""
|
|
42
|
+
# 本帧不复制数组或原样本;链指针及坐标包含在本步固定workspace内。
|
|
43
|
+
self._owner, self._cost, self._closed, self._closing = owner, cost, False, False
|
|
44
|
+
self._time, self._end, self._point, self._continuous = time_ns, end_ns, point, continuous
|
|
45
|
+
self._registry = self._previous = self._next = None
|
|
46
|
+
|
|
47
|
+
def _ensure_open(self):
|
|
48
|
+
"""拒绝释放或部分关闭后的读取。
|
|
49
|
+
|
|
50
|
+
参数: 无。返回: None。异常: ResultClosedError。
|
|
51
|
+
"""
|
|
52
|
+
if self._closed or self._closing:
|
|
53
|
+
raise ResultClosedError('窗口回读帧已关闭或正在关闭')
|
|
54
|
+
|
|
55
|
+
@property
|
|
56
|
+
def closed(self):
|
|
57
|
+
"""读取资源完成状态。参数: 无。返回: bool。异常: 无。"""
|
|
58
|
+
return self._closed
|
|
59
|
+
|
|
60
|
+
@property
|
|
61
|
+
def time_ns(self):
|
|
62
|
+
"""读取当前点坐标。参数: 无。返回: int纳秒。异常: 关闭时拒绝。"""
|
|
63
|
+
self._ensure_open()
|
|
64
|
+
return self._time
|
|
65
|
+
|
|
66
|
+
@property
|
|
67
|
+
def end_ns(self):
|
|
68
|
+
"""读取连续区间排除的右端。参数: 无。返回: int纳秒。异常: 关闭时拒绝。"""
|
|
69
|
+
self._ensure_open()
|
|
70
|
+
return self._end
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def point_result(self):
|
|
74
|
+
"""读取当前点表达式结果,保留actual_update和原样本。
|
|
75
|
+
|
|
76
|
+
参数: 无。返回: ExpressionResult。异常: 关闭时拒绝。
|
|
77
|
+
"""
|
|
78
|
+
self._ensure_open()
|
|
79
|
+
return self._point
|
|
80
|
+
|
|
81
|
+
@property
|
|
82
|
+
def continuous_result(self):
|
|
83
|
+
"""读取左闭右开区间的值,末点没有连续面积。
|
|
84
|
+
|
|
85
|
+
参数: 无。返回: ExpressionResult或None。异常: 关闭时拒绝。
|
|
86
|
+
"""
|
|
87
|
+
self._ensure_open()
|
|
88
|
+
return self._continuous
|
|
89
|
+
|
|
90
|
+
def _discard(self):
|
|
91
|
+
"""解除完整或部分链登记,不再次扣账。
|
|
92
|
+
|
|
93
|
+
参数: 无。返回: None。异常: 登记取消仍在finally关闭字段。
|
|
94
|
+
"""
|
|
95
|
+
try:
|
|
96
|
+
if self._registry is not None:
|
|
97
|
+
self._registry.discard(self)
|
|
98
|
+
finally:
|
|
99
|
+
# 预算已抵销时不能保留可再次释放的金额或大输出引用。
|
|
100
|
+
self._closed, self._cost = True, 0
|
|
101
|
+
self._owner = self._point = self._continuous = self._time = self._end = None
|
|
102
|
+
|
|
103
|
+
def close(self):
|
|
104
|
+
"""关闭子结果后释放本步申请,取消前可重试、实际扣账后最小关闭。
|
|
105
|
+
|
|
106
|
+
参数: 无。返回: None,幂等。异常: 子关闭/预算/取消传播。
|
|
107
|
+
"""
|
|
108
|
+
if self._closed:
|
|
109
|
+
return
|
|
110
|
+
self._closing = True
|
|
111
|
+
# 每个子结果完成才清字段,保留尚未成功关闭的句柄供下一次close。
|
|
112
|
+
for name in ('_continuous', '_point'):
|
|
113
|
+
child = getattr(self, name)
|
|
114
|
+
if child is not None:
|
|
115
|
+
child.close()
|
|
116
|
+
setattr(self, name, None)
|
|
117
|
+
budget, cost = self._owner._budget, self._cost
|
|
118
|
+
before, released = budget.ram_bytes, False
|
|
119
|
+
try:
|
|
120
|
+
budget.release_ram(cost)
|
|
121
|
+
released = True
|
|
122
|
+
finally:
|
|
123
|
+
if released or budget.ram_bytes == before - cost:
|
|
124
|
+
self._discard()
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
class HistoricalWindowReplay:
|
|
128
|
+
"""以独立种子状态回读一个有限窗口,原调用方状态不变。
|
|
129
|
+
|
|
130
|
+
_front由完整组游标持有且计账,消费以后才请求下一组;不另存历史列表。
|
|
131
|
+
输出帧登记在固定头指针链中,先前帧在后续失败后仍可读取。
|
|
132
|
+
单线程推进失败不可重试;close可重试并关闭自有查询、状态和游标。
|
|
133
|
+
迭代完成仍须close,以便调用方保留最后帧;完成窗口不等于全文件重放到EOF。
|
|
134
|
+
"""
|
|
135
|
+
|
|
136
|
+
def __init__(self, history: DecodedHistoryStore, context: HoldContext, bindings: DecodedBindings,
|
|
137
|
+
compiled: CompiledExpression, interval: Interval, *, backend='numpy'):
|
|
138
|
+
"""先预留元数据,再核对当前历史与绑定并创建独立回读资源。
|
|
139
|
+
|
|
140
|
+
参数: history为sealed新历史;context为原域与来源EOF事实;bindings为实际绑定;
|
|
141
|
+
compiled为该绑定的表达式;interval为域内含点端的窗口;backend为reference/numpy。
|
|
142
|
+
返回: 尚未读入种子的新回读者。
|
|
143
|
+
异常: 类型/域/来源身份/预算/构造取消;保留原异常,不关闭借用历史。
|
|
144
|
+
持续清理失败时,从异常的window_replay_cleanup_owner取得自有恢复句柄。
|
|
145
|
+
"""
|
|
146
|
+
if (not isinstance(history, DecodedHistoryStore) or not isinstance(context, HoldContext)
|
|
147
|
+
or not isinstance(bindings, DecodedBindings) or not isinstance(compiled, CompiledExpression)
|
|
148
|
+
or not isinstance(interval, Interval)):
|
|
149
|
+
raise TypeError('窗口回读需要封存历史、保持上下文、实际绑定、编译表达式和Interval')
|
|
150
|
+
history._check('sealed')
|
|
151
|
+
if backend not in ('reference', 'numpy'):
|
|
152
|
+
raise ValueError('窗口回读backend需要reference或numpy')
|
|
153
|
+
if not context.domain.start_ns <= interval.start_ns <= interval.end_ns <= context.domain.end_ns:
|
|
154
|
+
raise ValueError('窗口回读范围必须位于原绑定domain内')
|
|
155
|
+
# 元数据估算只遍历已有冻结树;临时指纹容器和子owner另在申请之后创建。
|
|
156
|
+
cost = 65536 + len(bindings.sources) * 8192 + 16 * _metadata_bytes((context, interval, bindings.sources))
|
|
157
|
+
self._budget, self._fixed_cost = history.budget, 0
|
|
158
|
+
self._closed = self._closing = self._failed = self._done = self._seeded = False
|
|
159
|
+
self._history = self._compiled = self._interval = self._results = None
|
|
160
|
+
self._state = self._holds = self._expressions = self._boundaries = self._groups = None
|
|
161
|
+
self._front = None
|
|
162
|
+
self._cursor, self._backend = interval.start_ns, backend
|
|
163
|
+
before = self._budget.ram_bytes
|
|
164
|
+
try:
|
|
165
|
+
self._budget.reserve_ram(cost)
|
|
166
|
+
self._fixed_cost = cost
|
|
167
|
+
self._history, self._compiled, self._interval = history, compiled, interval
|
|
168
|
+
self._results = _BatchRegistry()
|
|
169
|
+
# 匹配实际历史而非同名来源;指纹临时树已由本固定申请覆盖。
|
|
170
|
+
if {proof.source for proof in bindings.sources} != set(history.validators):
|
|
171
|
+
raise ValueError('窗口运行绑定与当前历史来源不同')
|
|
172
|
+
for proof in bindings.sources:
|
|
173
|
+
validator = history.validators[proof.source]
|
|
174
|
+
completion = history.source_completions[proof.source]
|
|
175
|
+
given_completion = next((item for item in context.completions if item.source == proof.source), None)
|
|
176
|
+
# 封存SHA只证明历史字节;外来观测/EOF及最终批进度仍须对照实际typed事实。
|
|
177
|
+
# 完成事实缺源时以None拒绝;不创建全源缓存,也不把最后批计数当全源总量。
|
|
178
|
+
if (proof.history_sha256 != history.hashes[proof.source].hexdigest()
|
|
179
|
+
or [proof.progress_count, proof.sample_count] != history.counts[proof.source]
|
|
180
|
+
or proof.description_sha256 != _fingerprint(validator.description)
|
|
181
|
+
or proof.request_sha256 != _fingerprint(validator.request)
|
|
182
|
+
or proof.session_id != completion.session_id
|
|
183
|
+
or proof.projected_aliases != validator.request.signal_names
|
|
184
|
+
or proof.observation_start_ns != validator.description.observation_start_ns
|
|
185
|
+
or proof.observation_end_ns != completion.observed_end_ns
|
|
186
|
+
or proof.source_eof != completion.source_eof
|
|
187
|
+
or given_completion != completion):
|
|
188
|
+
raise ValueError('窗口运行绑定与当前封存历史身份不同')
|
|
189
|
+
# 当前固定费已覆盖真实投影元数据;回读只持实际样本别名,不补未读取声明的空状态。
|
|
190
|
+
self._state = LatestSignalState(self._budget, bindings.projected_signals, context.session_id)
|
|
191
|
+
self._holds = HoldQueries(self._state, context)
|
|
192
|
+
self._expressions = ExpressionQueries(self._holds, bindings, (compiled,))
|
|
193
|
+
self._boundaries = BoundaryQueries(self._expressions)
|
|
194
|
+
# 首步成功预留workspace后才打开组游标及真实FD,构造不读取任何历史记录。
|
|
195
|
+
except BaseException as exc:
|
|
196
|
+
# 尚未赋值的失败子构造通过原异常交出句柄,父owner继续持有它的关闭责任。
|
|
197
|
+
for name, recovery_name in (('_state', 'state_cleanup_owner'),
|
|
198
|
+
('_holds', 'hold_queries_cleanup_owner'),
|
|
199
|
+
('_expressions', 'expression_queries_cleanup_owner'),
|
|
200
|
+
('_boundaries', 'boundary_queries_cleanup_owner')):
|
|
201
|
+
child = getattr(exc, recovery_name, None)
|
|
202
|
+
if child is not None:
|
|
203
|
+
setattr(self, name, child)
|
|
204
|
+
if self._fixed_cost == 0 and self._budget.ram_bytes == before + cost:
|
|
205
|
+
self._fixed_cost = cost
|
|
206
|
+
try:
|
|
207
|
+
self.close()
|
|
208
|
+
except BaseException as cleanup:
|
|
209
|
+
exc.add_note(f'窗口回读初始化清理附加失败: {type(cleanup).__name__}')
|
|
210
|
+
# 瞬时取消只重试一次;持续失败仍保留所有未关闭子对象,不能丢失自有费用。
|
|
211
|
+
if not self._closed:
|
|
212
|
+
try:
|
|
213
|
+
self.close()
|
|
214
|
+
except BaseException as retry:
|
|
215
|
+
exc.add_note(f'窗口回读初始化清理重试失败: {type(retry).__name__}')
|
|
216
|
+
if not self._closed:
|
|
217
|
+
exc.window_replay_cleanup_owner = self
|
|
218
|
+
exc.add_note('释放恢复后调用window_replay_cleanup_owner.close()')
|
|
219
|
+
raise
|
|
220
|
+
|
|
221
|
+
@property
|
|
222
|
+
def closed(self):
|
|
223
|
+
"""读取owner是否完全关闭。参数: 无。返回: bool。异常: 无。"""
|
|
224
|
+
return self._closed
|
|
225
|
+
|
|
226
|
+
@property
|
|
227
|
+
def failed(self):
|
|
228
|
+
"""读取推进失败状态。参数: 无。返回: bool。异常: 无。"""
|
|
229
|
+
return self._failed
|
|
230
|
+
|
|
231
|
+
def _ensure_open(self):
|
|
232
|
+
"""检查owner及借用历史仍可用,不允许故障后继续推进。
|
|
233
|
+
|
|
234
|
+
参数: 无。返回: None。异常: ResultClosedError。
|
|
235
|
+
"""
|
|
236
|
+
if self._closed or self._closing or self._failed:
|
|
237
|
+
raise ResultClosedError('窗口回读已关闭、正在关闭或推进失败')
|
|
238
|
+
self._history._check('sealed')
|
|
239
|
+
|
|
240
|
+
def __iter__(self):
|
|
241
|
+
"""返回当前独立回读者。参数: 无。返回: self。异常: 无。"""
|
|
242
|
+
return self
|
|
243
|
+
|
|
244
|
+
def _seed(self):
|
|
245
|
+
"""逐个消费窗口前完整组,保留第一个未消费前瞻。
|
|
246
|
+
|
|
247
|
+
参数: 无。返回: None。异常: 真实历史/原子state错误传播,外层标失败。
|
|
248
|
+
"""
|
|
249
|
+
self._groups = self._history.iter_groups()
|
|
250
|
+
self._front = next(self._groups, None)
|
|
251
|
+
while self._front is not None and self._front.time_ns < self._interval.start_ns:
|
|
252
|
+
self._state.apply(self._front)
|
|
253
|
+
# 上组已经提交state后才推进,原组预算不会早于消费释放。
|
|
254
|
+
self._front = next(self._groups, None)
|
|
255
|
+
self._seeded = True
|
|
256
|
+
|
|
257
|
+
def _query(self, *, point):
|
|
258
|
+
"""在已预留本步空间内调用原独立后端查询。
|
|
259
|
+
|
|
260
|
+
参数: point为是否点视图。返回: 须close的ExpressionResult。
|
|
261
|
+
异常: 原保持/表达式/预算错误传播;数组shape=(1,), int64纳秒。
|
|
262
|
+
"""
|
|
263
|
+
if self._backend == 'reference':
|
|
264
|
+
return self._expressions.query_reference(self._compiled, (self._cursor,), point=point)
|
|
265
|
+
return self._expressions.query_numpy(self._compiled, np.array([self._cursor], dtype=np.int64), point=point)
|
|
266
|
+
|
|
267
|
+
def __next__(self):
|
|
268
|
+
"""先预算再读种子或消费更新,返回一个准确区间及当前点。
|
|
269
|
+
|
|
270
|
+
参数: 无。返回: WindowReplayFrame;末点连续视图为None。
|
|
271
|
+
异常: StopIteration表示窗口完成;任何推进故障标failed,先前输出保持。
|
|
272
|
+
"""
|
|
273
|
+
self._ensure_open()
|
|
274
|
+
if self._done:
|
|
275
|
+
raise StopIteration
|
|
276
|
+
cost = 65536 + 32768 * len(self._state.definitions)
|
|
277
|
+
before, owned, frame = self._budget.ram_bytes, False, None
|
|
278
|
+
point = continuous = None
|
|
279
|
+
try:
|
|
280
|
+
self._budget.reserve_ram(cost)
|
|
281
|
+
owned = True
|
|
282
|
+
if not self._seeded:
|
|
283
|
+
self._seed()
|
|
284
|
+
if self._front is not None and self._front.time_ns == self._cursor:
|
|
285
|
+
self._state.apply(self._front)
|
|
286
|
+
self._front = next(self._groups, None)
|
|
287
|
+
right = self._interval.end_ns
|
|
288
|
+
if self._cursor < right:
|
|
289
|
+
boundary = self._boundaries.query_next(self._compiled, after_ns=self._cursor,
|
|
290
|
+
next_group_ns=None if self._front is None else self._front.time_ns)
|
|
291
|
+
try:
|
|
292
|
+
right = min(right, boundary.time_ns)
|
|
293
|
+
finally:
|
|
294
|
+
boundary.close()
|
|
295
|
+
# 种子保持值也返回点视图,真实样本计数必须使用actual_update而非帧数。
|
|
296
|
+
point = self._query(point=True)
|
|
297
|
+
if self._cursor < right:
|
|
298
|
+
continuous = self._query(point=False)
|
|
299
|
+
frame = WindowReplayFrame(self, cost, self._cursor, right, point, continuous)
|
|
300
|
+
owned = False
|
|
301
|
+
self._results.add(frame)
|
|
302
|
+
if self._cursor == self._interval.end_ns:
|
|
303
|
+
self._done = True
|
|
304
|
+
else:
|
|
305
|
+
self._cursor = right
|
|
306
|
+
return frame
|
|
307
|
+
except BaseException:
|
|
308
|
+
self._failed = True
|
|
309
|
+
# 清理只作用于本次未交付结果,先前帧及调用方资源不会被撤销。
|
|
310
|
+
if frame is not None:
|
|
311
|
+
frame.close()
|
|
312
|
+
else:
|
|
313
|
+
try:
|
|
314
|
+
if continuous is not None:
|
|
315
|
+
continuous.close()
|
|
316
|
+
finally:
|
|
317
|
+
if point is not None:
|
|
318
|
+
point.close()
|
|
319
|
+
raise
|
|
320
|
+
finally:
|
|
321
|
+
# 已成功reserve后的返回取消也计入本步清理,未成功不会抵销其他owner。
|
|
322
|
+
if owned or frame is None and self._budget.ram_bytes == before + cost:
|
|
323
|
+
self._budget.release_ram(cost)
|
|
324
|
+
|
|
325
|
+
def close(self):
|
|
326
|
+
"""按资源依赖关闭自有帧/查询/状态/游标,保留借用历史与原state。
|
|
327
|
+
|
|
328
|
+
参数: 无。返回: None,幂等。异常: 子关闭/预算取消,保留尚未完成句柄供重试。
|
|
329
|
+
"""
|
|
330
|
+
if self._closed:
|
|
331
|
+
return
|
|
332
|
+
self._closing = True
|
|
333
|
+
while self._results:
|
|
334
|
+
frame = next(iter(self._results))
|
|
335
|
+
frame.close()
|
|
336
|
+
self._results.discard(frame)
|
|
337
|
+
# 先关闭输出和查询,再释放种子状态与前瞻;每个完成以后才清本owner字段。
|
|
338
|
+
for name in ('_boundaries', '_expressions', '_holds', '_state', '_groups'):
|
|
339
|
+
child = getattr(self, name)
|
|
340
|
+
if child is not None:
|
|
341
|
+
child.close()
|
|
342
|
+
setattr(self, name, None)
|
|
343
|
+
cost, before, released = self._fixed_cost, self._budget.ram_bytes, False
|
|
344
|
+
try:
|
|
345
|
+
self._budget.release_ram(cost)
|
|
346
|
+
released = True
|
|
347
|
+
finally:
|
|
348
|
+
if released or self._budget.ram_bytes == before - cost:
|
|
349
|
+
self._closed, self._fixed_cost = True, 0
|
|
350
|
+
self._front = self._results = self._history = self._compiled = self._interval = None
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"""在分配窗口临时数组和片段元数据前申请预算,并拥有可关闭的查询结果。
|
|
2
|
+
|
|
3
|
+
输入是caller已提供的完整有限Event tuple、WindowSpec和真实观测Interval。
|
|
4
|
+
独立参考/NumPy内核仍分别扩展、分组、裁剪和计算覆盖,本层不重写数值算法。
|
|
5
|
+
完整冻结输入元数据与N事件临时量在内核前预留,整个workspace由SegmentBatch保有到close。
|
|
6
|
+
仅保守约束新查询层;caller预先物化的输入、外部另存引用和整个进程RSS另行说明。
|
|
7
|
+
不把独立batch当作可跨批分组的流式输入,不读取旧链/历史、不发布公共AnalysisRunner。
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
# 仅共享模型、预算和链式生命周期;两种数值执行入口保持独立。
|
|
11
|
+
from ..core.models import Interval
|
|
12
|
+
from ..core.temporal import Event
|
|
13
|
+
from ..core.windows import WindowSpec
|
|
14
|
+
from ..core.windows_reference import build_segments_reference
|
|
15
|
+
from ..core.windows_numpy import build_segments_numpy
|
|
16
|
+
from ..results.budget import ResourceBudget
|
|
17
|
+
from ..results.errors import ResultClosedError
|
|
18
|
+
from .history import _metadata_bytes
|
|
19
|
+
from .temporal_buffer import _BatchRegistry
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class SegmentBatch:
|
|
23
|
+
"""拥有一份完整窗口结果和预留成本,和其他已交付查询相互独立。
|
|
24
|
+
|
|
25
|
+
父事件ID/状态/完整SourceRef由片段引用,workspace覆盖这些冻结元数据的存活。
|
|
26
|
+
链指针放在本对象中,关闭不遗留随历史调用数增长的容器槽位。
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
def __init__(self, owner, cost, segments):
|
|
30
|
+
"""在已预留成本中构造局部批,不负责登记。
|
|
31
|
+
|
|
32
|
+
参数: owner真实查询、cost bytes、segments独立内核生成的tuple。
|
|
33
|
+
返回: 新批。异常: 分配/取消由外层抵销成本,未发布不隐藏失败。
|
|
34
|
+
"""
|
|
35
|
+
self._owner, self._cost, self._segments, self._closed = owner, cost, segments, False
|
|
36
|
+
self._registry = self._previous = self._next = None
|
|
37
|
+
|
|
38
|
+
@property
|
|
39
|
+
def closed(self):
|
|
40
|
+
"""读取关闭状态。参数: 无。返回: bool。异常: 无。"""
|
|
41
|
+
return self._closed
|
|
42
|
+
|
|
43
|
+
@property
|
|
44
|
+
def segments(self):
|
|
45
|
+
"""读取本查询全部片段。参数: 无。返回: Segment tuple。异常: ResultClosedError。"""
|
|
46
|
+
if self._closed:
|
|
47
|
+
raise ResultClosedError('窗口片段批已关闭')
|
|
48
|
+
return self._segments
|
|
49
|
+
|
|
50
|
+
def _discard(self):
|
|
51
|
+
"""脱离登记并丢弃输出,不重复扣账。
|
|
52
|
+
|
|
53
|
+
参数: 无。返回: None。异常: 脱链取消传播,finally仍标closed并丢弃元数据。
|
|
54
|
+
"""
|
|
55
|
+
try:
|
|
56
|
+
self._owner._results.discard(self)
|
|
57
|
+
finally:
|
|
58
|
+
self._closed, self._cost = True, 0
|
|
59
|
+
self._owner = self._segments = None
|
|
60
|
+
|
|
61
|
+
def close(self):
|
|
62
|
+
"""释放输出成本,区分扣账前后取消,重复关闭幂等。
|
|
63
|
+
|
|
64
|
+
参数: 无。返回: None。异常: 预算/取消传播;已抵销时仍完成最小关闭。
|
|
65
|
+
"""
|
|
66
|
+
if self._closed:
|
|
67
|
+
return
|
|
68
|
+
budget, cost = self._owner._budget, self._cost
|
|
69
|
+
before, released = budget.ram_bytes, False
|
|
70
|
+
try:
|
|
71
|
+
budget.release_ram(cost)
|
|
72
|
+
released = True
|
|
73
|
+
finally:
|
|
74
|
+
if released or budget.ram_bytes == before - cost:
|
|
75
|
+
self._discard()
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class WindowQueries:
|
|
79
|
+
"""为完整有限窗口输入提供预算边界,自有批必须及时close。
|
|
80
|
+
|
|
81
|
+
此owner无跨批活动/分组状态,每次build都要求该窗口的完整事件集合。
|
|
82
|
+
数值或协议失败不改变先前输出,也不把一个查询当作下一查询的部分输入。
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
def __init__(self, budget: ResourceBudget, *, backend='numpy'):
|
|
86
|
+
"""校验配置并申请固定生命周期开销后选择实际数值入口。
|
|
87
|
+
|
|
88
|
+
参数: 共享budget、reference或numpy后端。返回: 新owner。
|
|
89
|
+
异常: 类型/后端/预算/取消传播,申请返回取消也抵销固定成本。
|
|
90
|
+
"""
|
|
91
|
+
if not isinstance(budget, ResourceBudget) or backend not in ('reference', 'numpy'):
|
|
92
|
+
raise TypeError('窗口查询需要ResourceBudget与reference/numpy后端')
|
|
93
|
+
self._budget, self._fixed_cost, self._closed = budget, 0, False
|
|
94
|
+
self._results = self._build = None
|
|
95
|
+
fixed, before = 65536, budget.ram_bytes
|
|
96
|
+
try:
|
|
97
|
+
budget.reserve_ram(fixed)
|
|
98
|
+
self._fixed_cost = fixed
|
|
99
|
+
self._results = _BatchRegistry()
|
|
100
|
+
self._build = build_segments_reference if backend == 'reference' else build_segments_numpy
|
|
101
|
+
except BaseException:
|
|
102
|
+
if self._fixed_cost == 0 and budget.ram_bytes == before + fixed:
|
|
103
|
+
self._fixed_cost = fixed
|
|
104
|
+
self.close()
|
|
105
|
+
raise
|
|
106
|
+
|
|
107
|
+
@property
|
|
108
|
+
def closed(self):
|
|
109
|
+
"""读取关闭状态。参数: 无。返回: bool。异常: 无。"""
|
|
110
|
+
return self._closed
|
|
111
|
+
|
|
112
|
+
def _ensure_open(self):
|
|
113
|
+
"""拒绝关闭后执行。参数: 无。返回: None。异常: ResultClosedError。"""
|
|
114
|
+
if self._closed:
|
|
115
|
+
raise ResultClosedError('窗口查询已关闭')
|
|
116
|
+
|
|
117
|
+
def _construct(self, cost, segments):
|
|
118
|
+
"""构造局部结果。参数: 已预留bytes/内核结果tuple。返回: SegmentBatch。异常: 分配/取消。"""
|
|
119
|
+
return SegmentBatch(self, cost, segments)
|
|
120
|
+
|
|
121
|
+
def build(self, events: tuple[Event, ...], spec: WindowSpec, observation: Interval) -> SegmentBatch:
|
|
122
|
+
"""在预算门槛后执行一个完整窗口集合,保留全部真实父事件。
|
|
123
|
+
|
|
124
|
+
参数: 完整有序events、冻结spec及实际观测域observation,不用请求补EOF。
|
|
125
|
+
返回: 须close的SegmentBatch,空事件返回拥有成本的空批。
|
|
126
|
+
异常: typed协议/窗口归属/排序/时间溢出/预算/内核/交付取消均传播。
|
|
127
|
+
失败清理本次预留和局部登记,旧批仍可读;无数值状态变化,可再次合法查询。
|
|
128
|
+
"""
|
|
129
|
+
self._ensure_open()
|
|
130
|
+
# 此前只做常数空间类型遍历;详细窗口校验中的集合/数值数组由下方预留覆盖。
|
|
131
|
+
if (type(events) is not tuple or any(not isinstance(event, Event) for event in events)
|
|
132
|
+
or not isinstance(spec, WindowSpec) or not isinstance(observation, Interval)):
|
|
133
|
+
raise TypeError('窗口查询需要完整Event tuple/WindowSpec/真实Interval')
|
|
134
|
+
# N端点/掩码/分组索引为一维数组;参考临时分组、父关联与稳定ID串同样预先计入。
|
|
135
|
+
# 元数据估算读取完整SourceRef子类字段;保留全workspace至close,不宣称精确RSS。
|
|
136
|
+
cost = 65536 + 8192 * len(events) + 16 * _metadata_bytes((events, spec, observation))
|
|
137
|
+
before, reserved, result = self._budget.ram_bytes, False, None
|
|
138
|
+
try:
|
|
139
|
+
self._budget.reserve_ram(cost)
|
|
140
|
+
reserved = True
|
|
141
|
+
segments = self._build(events, spec, observation)
|
|
142
|
+
result = self._construct(cost, segments)
|
|
143
|
+
self._results.add(result)
|
|
144
|
+
return result
|
|
145
|
+
except BaseException:
|
|
146
|
+
try:
|
|
147
|
+
if result is not None:
|
|
148
|
+
result._discard()
|
|
149
|
+
finally:
|
|
150
|
+
if reserved or self._budget.ram_bytes == before + cost:
|
|
151
|
+
self._budget.release_ram(cost)
|
|
152
|
+
raise
|
|
153
|
+
|
|
154
|
+
def close(self):
|
|
155
|
+
"""关闭全部自有结果再抵销固定成本,支持关闭中断后重试。
|
|
156
|
+
|
|
157
|
+
参数: 无。返回: None,幂等。异常: 子结果/预算/取消传播,已扣账字段最小清理。
|
|
158
|
+
"""
|
|
159
|
+
if self._closed:
|
|
160
|
+
return
|
|
161
|
+
# 结果已扣账但脱链取消时可留下closed孤儿,owner最终清理登记且不再次扣账。
|
|
162
|
+
while self._results:
|
|
163
|
+
result = next(iter(self._results))
|
|
164
|
+
result.close()
|
|
165
|
+
self._results.discard(result)
|
|
166
|
+
cost, before, released = self._fixed_cost, self._budget.ram_bytes, False
|
|
167
|
+
try:
|
|
168
|
+
self._budget.release_ram(cost)
|
|
169
|
+
released = True
|
|
170
|
+
finally:
|
|
171
|
+
if released or self._budget.ram_bytes == before - cost:
|
|
172
|
+
self._closed, self._fixed_cost = True, 0
|
|
173
|
+
self._results = self._build = None
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# 用 AI 编写 Chronaxis 分析
|
|
2
|
+
|
|
3
|
+
[English guide](en/README.md)
|
|
4
|
+
|
|
5
|
+
从这份README开始,再按[任务索引](tasks.json)选择相关示例,只读任务需要的说明。阅读源码中的指南无需先安装Chronaxis、生成文件或导出ZIP;保留仓库目录结构即可。独立资料ZIP使用同一正文,解压时保留完整目录结构。
|
|
6
|
+
|
|
7
|
+
先向AI提供本README和[资料版本信息](manifest.json),再按需提供示例、接口或字段说明。未另行注明的相对命令以本README所在目录为起点;已安装环境使用下方工作目录示例;配置内部的ASC、DBC路径相对配置文件所在目录。运行分析需要安装匹配版本的Chronaxis,可用 `python -c "from importlib.metadata import version; print(version('chronaxis'))"` 核对。安装包已经附带普通指南文件,`python -m chronaxis guide`只显示中文README的路径,`--language en`选择英文,不写入或解压资料。源码指南同样直接阅读。资料版本与合成示例不代表私人日志已通过验证。
|
|
8
|
+
|
|
9
|
+
### 在已安装环境中直接使用
|
|
10
|
+
|
|
11
|
+
从自己的工作目录执行下列PowerShell命令。它直接读取安装目录的指南和示例,结果写到当前工作目录,不复制或修改安装资料:
|
|
12
|
+
|
|
13
|
+
```powershell
|
|
14
|
+
$guide = Split-Path (python -m chronaxis guide)
|
|
15
|
+
python "$guide/lookup.py" task CONDITION_ENERGY
|
|
16
|
+
python "$guide/run_analysis.py" "$guide/examples/conditional-energy.yaml" result-energy
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
下文的相对命令展示源码/独立指南目录用法;在安装环境执行时,也可像上面一样使用完整输入路径和自己的输出目录。
|
|
20
|
+
|
|
21
|
+
## 安装Chronaxis及默认运行依赖
|
|
22
|
+
|
|
23
|
+
普通安装本地 wheel 就会自动安装完整运行依赖,支持 BLF、ASC、原始报文 CSV、DBC 解码、已解码信号 CSV 和内存任务;无需添加 `[can]`。下面是在 Windows PowerShell 中创建环境并安装的完整命令;将 wheel 路径替换为实际收到的文件:
|
|
24
|
+
|
|
25
|
+
```powershell
|
|
26
|
+
py -3.12 -m venv .venv
|
|
27
|
+
.\.venv\Scripts\python.exe -m pip install ".\chronaxis-0.1.0.dev0-py3-none-any.whl"
|
|
28
|
+
.\.venv\Scripts\python.exe -m pip check
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
在后续命令中用同一个 `.venv\Scripts\python.exe`;无需激活环境。该版本声明并已验证的 CAN 依赖为 `python-can==4.6.1`、`cantools==39.4.3`、`natsort==8.4.0`,由 wheel 的默认依赖统一安装。不要为了消除缺模块错误单独安装任意最新版,也不要更改信号、阈值或 DBC。其他依赖版本不代表已验证支持;实际发布物以其安装元数据为准。本项目未声明发布到在线包索引,不能假定 `pip install chronaxis` 会取得这个包。离线安装须事先备齐依赖。
|
|
32
|
+
|
|
33
|
+
`dependency_missing` 表示运行环境缺少 CAN 依赖,不是信号绑定内容错误;按错误中的本地 wheel 安装命令修复。即使全部信号元数据已经手填、静态校验通过,实际运行仍需要相应读取/解码依赖。
|
|
34
|
+
|
|
35
|
+
## 我该读哪几份文件?
|
|
36
|
+
|
|
37
|
+
第一次使用时先读[从输入到结果](workflow.md),决定走单次计划、预设还是批量。
|
|
38
|
+
|
|
39
|
+
1. 从 [任务索引](tasks.json) 找中文需求,只读命中条目的范例、适用条件和相关字段。先用 BLF/ASC+DBC 场景;已解码信号表用 CSV,不需要 DBC。不要把别的发布版的配置或内部函数混进来。
|
|
40
|
+
2. 写分析配置,使用 YAML 或 JSON,分析版本为整数 3。范例是完整文件;保留 examples/data 相对位置。示例工程数值只适用于合成输入。缺真实时间基准、工程阈值、编码、单位或方向依据时,指出哪项缺失以及它会改变什么结果。
|
|
41
|
+
3. 写 Python,查 [公开 API 索引](api/index.json),再读对应单个 API 文件。文件用 load_analysis_plan,已展开字典用 AnalysisPlan.from_dict。预设构建得到 PlanFragment,不能直接交给 run。批量返回时逐任务核对状态。
|
|
42
|
+
4. 配置加载 → 检查声明 → 查看依赖 → 运行 → 写出结果。可用命令见下方;Python方式见 [完整调用](run_analysis.py)。报告实际输入、单位、边界、质量和未验证项。计算返回不代表发布完成。
|
|
43
|
+
|
|
44
|
+
## 一个从输入到结果的任务
|
|
45
|
+
|
|
46
|
+
需要具体参数时,用标准 Python 在本README所在目录查询,不用读取整份规范:
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
python lookup.py task 持续
|
|
50
|
+
python lookup.py api AnalysisRunner
|
|
51
|
+
python lookup.py field valid_for --schema analysis
|
|
52
|
+
python lookup.py field source_type --schema analysis --branch can_asc
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
字段表给出原规范位置及分支。参见[高风险语义与真实诊断](semantics.md)及[完整字段参考](fields/index.json)。条件必填、引用、时间单位和工程契约以完整规范及运行校验为准,不应把独立分片用作验证器。没有匹配项返回退出码1;先查正确的版本、名称或分支,不自动猜同义字段。
|
|
56
|
+
|
|
57
|
+
在这份资料的目录运行(Windows/Python 3.12,已安装项目默认运行依赖):
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
python -m chronaxis config init --list
|
|
61
|
+
python -m chronaxis validate examples/conditional-energy.yaml --format json
|
|
62
|
+
python -m chronaxis explain examples/conditional-energy.yaml --format json
|
|
63
|
+
python run_analysis.py examples/conditional-energy.yaml result-energy
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
这个例子连续读取两卷ASC,用DBC解码状态、电流和电压,要求`state == 0x2 and current >= 10`连续严格超过60秒,再对整个合格事件积分。恰好60秒的第一段被排除;第二段跨越分卷,实际区间为[61,122)秒,结果4000×61/3600000=0.06777777777777777kWh。默认从条件开始时刻积分,包括最初60秒;`confirmed_ns=121000000001`表示严格超过60秒的确认时刻,不是积分起点。完整配置位于任务`CONDITION_ENERGY`;预设`CHARGE`采用不同电流比较时,不能替代这个任务。
|
|
67
|
+
|
|
68
|
+
结果目录必须是新的。默认readable_csv在`事件结果.csv`同一行给出精确秒起止和energy_kwh(kWh),先检查每项指标的状态和说明;从run_manifest.json.outputs找到实际文件。原程序交换格式须显式设置outputs.tables为csv或jsonl,才按parent_id关联原表;CLI与清单中的`analysis_outcome`区分无观测、未知、条件未成立、时长不足和已有事件。没有事件不等于能量为0。换成自己的数据时按实际DBC替换路径、ID、信号和条件;已解码信号表仍可选`CSV`任务,不应用合成阈值替用户决定生产参数。
|
|
69
|
+
|
|
70
|
+
分析命令和配置解释只证明声明和执行路径;加载按需可读 DBC 元数据、展开来源目录,不扫描业务记录。真实运行、输出和关闭完成后才报告成功。独立样例不能证明其他设备具有相同含义。
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# AnalysisError
|
|
2
|
+
|
|
3
|
+
推荐导入:`from chronaxis import AnalysisError`
|
|
4
|
+
|
|
5
|
+
<a id="api-AnalysisError"></a>
|
|
6
|
+
## `AnalysisError`
|
|
7
|
+
|
|
8
|
+
表示分析或结果交付失败;异常本身不承诺旧输出已回滚。
|
|
9
|
+
|
|
10
|
+
```python
|
|
11
|
+
class AnalysisError(RuntimeError)
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
继承关系:RuntimeError。下表列本类声明的字段;基类字段及其约束见对应类型链接。
|