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
chronaxis/core/models.py
ADDED
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
"""把调用者提供的内存观测构造成不可变模型,并检查身份、时间和质量约束。
|
|
2
|
+
|
|
3
|
+
输入包括会话和来源标识、整数纳秒坐标、原字段值及显式质量原因;输出时间范围、
|
|
4
|
+
时基、内存行、来源、会话、数据集和信号样本。构造时检查结构及范围,复制字段
|
|
5
|
+
映射为只读快照,拒绝来源时间回退,不排序或补齐数据。样本归属和声明类型
|
|
6
|
+
通过显式方法检查,模型构造不会执行信号绑定、保持或分析。
|
|
7
|
+
本模块只依赖标准库和整数时间协议,不读取文件,不加载NumPy或CAN组件,
|
|
8
|
+
不持有运行状态;SourceSpec当前只接受内存行。
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# 标准库负责冻结对象/映射和非有限诊断,不加载数组或外部来源。
|
|
12
|
+
import math
|
|
13
|
+
from collections.abc import Mapping
|
|
14
|
+
from dataclasses import dataclass
|
|
15
|
+
from types import MappingProxyType
|
|
16
|
+
|
|
17
|
+
# 时间协议已独立验证;共享输入校验不等于复用NumPy数值内核。
|
|
18
|
+
from ..timebase.conversion import INT64_MAX, INT64_MIN, checked_add_ns, require_int64_ns
|
|
19
|
+
from .types import QualityFlag, SignalDType, SourceType, TimeType
|
|
20
|
+
from .validation import require_identifier, require_scalar, require_sequence, require_text
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass(frozen=True)
|
|
24
|
+
class Interval:
|
|
25
|
+
"""保存左闭右开纳秒范围,允许零长度,不允许反向或跨度溢出。
|
|
26
|
+
|
|
27
|
+
构造校验时间/长度为int64;点上下文可显式包含end,不改变连续半开。
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
start_ns: int # 包含的开始坐标,整数纳秒。
|
|
31
|
+
end_ns: int # 连续范围不包含的终点,允许等于开始。
|
|
32
|
+
|
|
33
|
+
def __post_init__(self) -> None:
|
|
34
|
+
"""构造时验证边界及完整整数跨度。
|
|
35
|
+
|
|
36
|
+
参数: 无额外参数;读取start_ns/end_ns,拒绝bool和float。
|
|
37
|
+
返回: None;字段规范为精确Python整数并冻结。
|
|
38
|
+
异常: TypeError为错误类型;ValueError为反向;TimeOverflowError为超界。
|
|
39
|
+
副作用: 只在初始化中规范自身字段,不修改调用方输入。
|
|
40
|
+
"""
|
|
41
|
+
# 两端各自必须合法,不能用越界输入互相抵消。
|
|
42
|
+
start, end = require_int64_ns(self.start_ns, "start_ns"), require_int64_ns(self.end_ns, "end_ns")
|
|
43
|
+
# 相等合法,严格回退才违反半开范围。
|
|
44
|
+
if end < start:
|
|
45
|
+
# 不交换边界或默认为空范围。
|
|
46
|
+
raise ValueError("end_ns不能早于start_ns")
|
|
47
|
+
# 两端合法仍可能跨度超MAX,在Python整数域相减后检查。
|
|
48
|
+
require_int64_ns(end - start, "duration_ns")
|
|
49
|
+
# 规范整数容器,不改变实际纳秒位值。
|
|
50
|
+
object.__setattr__(self, "start_ns", start)
|
|
51
|
+
# 构造结束后禁止外部修改终点。
|
|
52
|
+
object.__setattr__(self, "end_ns", end)
|
|
53
|
+
|
|
54
|
+
def duration_ns(self) -> int:
|
|
55
|
+
"""返回已经验证的半开范围长度,不补样本周期。
|
|
56
|
+
|
|
57
|
+
参数: 无额外参数;读取当前边界。
|
|
58
|
+
返回: int;非负int64纳秒,零长度返回0。
|
|
59
|
+
异常: 无主动异常;构造已验证范围。
|
|
60
|
+
"""
|
|
61
|
+
# 已验证跨度不会wrap,也不多包含一个终点周期。
|
|
62
|
+
return self.end_ns - self.start_ns
|
|
63
|
+
|
|
64
|
+
def contains(self, time_ns: int, *, point: bool = False) -> bool:
|
|
65
|
+
"""检查连续半开或显式点上下文成员关系。
|
|
66
|
+
|
|
67
|
+
参数: time_ns为int64纳秒;point (bool)默认False,True包含实际末点。
|
|
68
|
+
返回: bool;零长度连续范围为空,点上下文可包含唯一端点。
|
|
69
|
+
异常: TypeError为时间/point类型错误;TimeOverflowError为坐标超界。
|
|
70
|
+
"""
|
|
71
|
+
# 校验查询坐标,不用float或非法数值参与范围判断。
|
|
72
|
+
time = require_int64_ns(time_ns)
|
|
73
|
+
# 点模式须显式布尔,不能将任意非零对象当作开关。
|
|
74
|
+
if type(point) is not bool:
|
|
75
|
+
# 配置类型错误与正常范围外分开。
|
|
76
|
+
raise TypeError("point必须为bool")
|
|
77
|
+
# 点视图包含end;连续视图严格小于end,两者下界都包含。
|
|
78
|
+
return self.start_ns <= time <= self.end_ns if point else self.start_ns <= time < self.end_ns
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
@dataclass(frozen=True)
|
|
82
|
+
class TimebaseSpec:
|
|
83
|
+
"""保存时间坐标种类及其起点声明,供来源映射和同步检查使用。
|
|
84
|
+
|
|
85
|
+
relative表示相对坐标,必须提供origin。absolute表示已经规范化的UTC纳秒,
|
|
86
|
+
不再接受相对起点。字段不可变,不读取机器时区;相同timebase_id本身不能
|
|
87
|
+
证明来源同步,联合计算仍须检查完整时基或显式同步证据。
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
timebase_id: str # 当前显式时间基准ID,不从文件名猜测。
|
|
91
|
+
time_type: TimeType # 相对坐标或已规范化UTC绝对坐标。
|
|
92
|
+
origin: str | None = None # 相对来源明确起点标签;绝对坐标使用UTC epoch。
|
|
93
|
+
|
|
94
|
+
def __post_init__(self) -> None:
|
|
95
|
+
"""检查时基类型和起点声明的一致性。
|
|
96
|
+
|
|
97
|
+
参数: 无额外参数;读取timebase_id/time_type/origin。
|
|
98
|
+
返回: None;保留调用者起点原文。
|
|
99
|
+
异常: TypeError为错误类型;ValueError为名称/起点缺项或冲突。
|
|
100
|
+
"""
|
|
101
|
+
# 时基ID采用简单标识,origin另作为非空来源事实。
|
|
102
|
+
require_identifier(self.timebase_id, "timebase_id")
|
|
103
|
+
# 字符串kind必须由配置层显式解析成类型,不能隐式猜测。
|
|
104
|
+
if not isinstance(self.time_type, TimeType):
|
|
105
|
+
# 未知类型在构造时失败,不静默采用relative。
|
|
106
|
+
raise TypeError("kind必须为TimeType")
|
|
107
|
+
# 相对0本身没有可核实公共起点,必须保留origin。
|
|
108
|
+
if self.time_type is TimeType.RELATIVE:
|
|
109
|
+
# 文本只校验,不能自动与其他origin合并。
|
|
110
|
+
require_text(self.origin, "origin")
|
|
111
|
+
elif self.origin is not None:
|
|
112
|
+
# UTC epoch不同时接收另一套相对起点含义。
|
|
113
|
+
raise ValueError("absolute时基不接受relative origin")
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
@dataclass(frozen=True)
|
|
117
|
+
class MemoryRow:
|
|
118
|
+
"""保存一条内存观测的原时间、来源序号和原字段值。
|
|
119
|
+
|
|
120
|
+
values会复制为只读映射,None、NaN和无穷值保留供后续质量检查。一行可以
|
|
121
|
+
包含多个字段或没有字段;sequence是稳定的非负来源序号,同时间不同序号
|
|
122
|
+
分别保留。本模型不为原字段绑定表达式别名。
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
time_ns: int # 来源原坐标,offset在分析层显式应用。
|
|
126
|
+
values: Mapping[str, int | float | bool | str | None] # 原字段到原值,非表达式名。
|
|
127
|
+
sequence: int # 来源内原序号,同时间不同序号不去重。
|
|
128
|
+
|
|
129
|
+
def __post_init__(self) -> None:
|
|
130
|
+
"""验证行容器并冻结字段值快照。
|
|
131
|
+
|
|
132
|
+
参数: 无额外参数;values接受Mapping,值仅原生不可变标量。
|
|
133
|
+
返回: None;时间/序号规范为整数、values为新只读映射。
|
|
134
|
+
异常: TypeError/ValueError为容器/字段/值/序号错误;TimeOverflowError为时间超界。
|
|
135
|
+
副作用: 复制值映射,不改原映射,不持有可变嵌套值。
|
|
136
|
+
"""
|
|
137
|
+
# 原时间先按整数协议校验,不能隐式猜测秒。
|
|
138
|
+
time = require_int64_ns(self.time_ns)
|
|
139
|
+
# 序号用于稳定身份,不用时间替代它。
|
|
140
|
+
sequence = require_sequence(self.sequence)
|
|
141
|
+
# 只接受明确键值映射,不从任意可迭代对象构造行。
|
|
142
|
+
if not isinstance(self.values, Mapping):
|
|
143
|
+
# 错误shape不能转成正常空行。
|
|
144
|
+
raise TypeError("values必须为字段Mapping")
|
|
145
|
+
# 新字典断开调用方后续修改,不使用共享全局缓存。
|
|
146
|
+
copied = dict(self.values)
|
|
147
|
+
# 每个原字段保持完整文本;原值不可变但可暂时无效。
|
|
148
|
+
for field, value in copied.items():
|
|
149
|
+
# 点号等合法原字段不转换为表达式别名。
|
|
150
|
+
require_text(field, "field")
|
|
151
|
+
# 容器或任意对象不能进入共享逻辑模型。
|
|
152
|
+
require_scalar(value)
|
|
153
|
+
# 只在构造期规范自己的坐标字段。
|
|
154
|
+
object.__setattr__(self, "time_ns", time)
|
|
155
|
+
# 序号保留原整数位值。
|
|
156
|
+
object.__setattr__(self, "sequence", sequence)
|
|
157
|
+
# 映射只读且各值不可变,冻结不是浅层共享原dict。
|
|
158
|
+
object.__setattr__(self, "values", MappingProxyType(copied))
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@dataclass(frozen=True)
|
|
162
|
+
class SourceSpec:
|
|
163
|
+
"""描述冻结内存来源及固定时钟偏移,不执行读取或绑定。
|
|
164
|
+
|
|
165
|
+
rows为原坐标、非递减顺序;sequence唯一,同时间不同序号保留。
|
|
166
|
+
observation边界是来源原坐标,未知端点为None,不补假设周期。
|
|
167
|
+
所有已知坐标加offset必须合法;无任何自动排序、同步推断或缓存优化。
|
|
168
|
+
"""
|
|
169
|
+
|
|
170
|
+
name: str # 会话内来源名,须唯一;跨会话可复用同名。
|
|
171
|
+
timebase: TimebaseSpec # 显式来源时基/起点,不继承上次任务。
|
|
172
|
+
rows: tuple[MemoryRow, ...] # 原顺序只读行;空来源合法。
|
|
173
|
+
offset_ns: int = 0 # 明确固定偏移,默认0不构成同步证明。
|
|
174
|
+
observation_start_ns: int | None = None # 已知来源开始坐标,否则unknown。
|
|
175
|
+
observation_end_ns: int | None = None # 已知来源末点坐标,否则unknown。
|
|
176
|
+
source_type: SourceType = SourceType.MEMORY # 此模型只描述内存行来源。
|
|
177
|
+
|
|
178
|
+
def __post_init__(self) -> None:
|
|
179
|
+
"""检查来源形状、顺序、身份和固定偏移范围。
|
|
180
|
+
|
|
181
|
+
参数: 无额外参数;rows必须tuple[MemoryRow],不隐式转换列表/生成器。
|
|
182
|
+
返回: None;offset及已知观测边界规范为整数,原rows保持顺序。
|
|
183
|
+
异常: TypeError为结构;ValueError为回退/重复序号/边界冲突;TimeOverflowError为坐标/偏移溢出。
|
|
184
|
+
副作用: 只用局部校验集合,无数据读写/排序/归并或后端数值执行。
|
|
185
|
+
"""
|
|
186
|
+
# 来源名不会从路径或语义名称自动生成。
|
|
187
|
+
require_identifier(self.name, "source.name")
|
|
188
|
+
# 明确typed时基、支持kind与不可变行容器。
|
|
189
|
+
if not isinstance(self.timebase, TimebaseSpec) or self.source_type is not SourceType.MEMORY or not isinstance(self.rows, tuple):
|
|
190
|
+
# 外部来源不能仅声明名字就冒充已接线。
|
|
191
|
+
raise TypeError("source需要TimebaseSpec、SourceType.MEMORY和tuple rows")
|
|
192
|
+
# 空来源也检查偏移,不跳过非法配置。
|
|
193
|
+
offset = require_int64_ns(self.offset_ns, "offset_ns")
|
|
194
|
+
# 未知端点保留None,已知端点不能为bool/float或超界。
|
|
195
|
+
start = None if self.observation_start_ns is None else require_int64_ns(self.observation_start_ns, "observation_start_ns")
|
|
196
|
+
# 起止独立可未知,不能从空数据假造完整范围。
|
|
197
|
+
end = None if self.observation_end_ns is None else require_int64_ns(self.observation_end_ns, "observation_end_ns")
|
|
198
|
+
# 双端已知才验证完整范围,不将unknown当0。
|
|
199
|
+
if start is not None and end is not None:
|
|
200
|
+
# 原观测范围不允许反向或超界跨度。
|
|
201
|
+
Interval(start, end)
|
|
202
|
+
# 已知端点的固定映射必须在纳秒协议内。
|
|
203
|
+
for boundary in (start, end):
|
|
204
|
+
# 只校验真实已声明端点,不扩展unknown。
|
|
205
|
+
if boundary is not None:
|
|
206
|
+
# 检查偏移后的完整坐标,无浮点运算。
|
|
207
|
+
checked_add_ns(boundary, offset)
|
|
208
|
+
# 前一坐标与身份集合只属于本次构造,不泄漏其他来源。
|
|
209
|
+
previous, sequences = None, set()
|
|
210
|
+
# 逐行验证模型;执行调度和数组计算由对应模块负责。
|
|
211
|
+
for row in self.rows:
|
|
212
|
+
# 同一tuple不能混入字典或任意对象。
|
|
213
|
+
if not isinstance(row, MemoryRow):
|
|
214
|
+
# 不在此隐式解析配置行。
|
|
215
|
+
raise TypeError("rows元素必须为MemoryRow")
|
|
216
|
+
# 相同时间允许,严格回退违背来源内有序契约。
|
|
217
|
+
if previous is not None and row.time_ns < previous:
|
|
218
|
+
# 不重新排序旧来源或掩盖输入错误。
|
|
219
|
+
raise ValueError("source rows时间必须非递减")
|
|
220
|
+
# sequence是来源内身份,同时间不同序号合法,重复身份拒绝。
|
|
221
|
+
if row.sequence in sequences:
|
|
222
|
+
# 不通过删除重复行修补身份冲突。
|
|
223
|
+
raise ValueError("source rows sequence重复")
|
|
224
|
+
# 已知观测边界的点视图两端包含。
|
|
225
|
+
if (start is not None and row.time_ns < start) or (end is not None and row.time_ns > end):
|
|
226
|
+
# 实际行不能超出自声明观测范围。
|
|
227
|
+
raise ValueError("source row超出已声明观测边界")
|
|
228
|
+
# 每个原坐标的固定偏移映射可表示,仍不证明公共起点。
|
|
229
|
+
checked_add_ns(row.time_ns, offset)
|
|
230
|
+
# 更新当前来源局部顺序检查状态。
|
|
231
|
+
previous = row.time_ns
|
|
232
|
+
# 保留全部唯一序号,不仅按时间去重。
|
|
233
|
+
sequences.add(row.sequence)
|
|
234
|
+
# 构造后冻结规范化偏移,原值意义不变。
|
|
235
|
+
object.__setattr__(self, "offset_ns", offset)
|
|
236
|
+
# 已知/未知起点事实原样保留。
|
|
237
|
+
object.__setattr__(self, "observation_start_ns", start)
|
|
238
|
+
# 不推断空来源或最后样本之后的周期。
|
|
239
|
+
object.__setattr__(self, "observation_end_ns", end)
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
@dataclass(frozen=True)
|
|
243
|
+
class SourceRef:
|
|
244
|
+
"""用会话、来源和原字段定位内存样本,不以别名当全局数据键。
|
|
245
|
+
|
|
246
|
+
字段文本保持点号和大小写;会话、来源和字段共同构成不可变身份。
|
|
247
|
+
"""
|
|
248
|
+
|
|
249
|
+
session_id: str # 输入所属会话,跨会话同名来源不相等。
|
|
250
|
+
source_name: str # 会话内来源名。
|
|
251
|
+
field: str # 内存原字段;不是semantic_id或Python属性路径。
|
|
252
|
+
|
|
253
|
+
def __post_init__(self) -> None:
|
|
254
|
+
"""验证可追溯身份,不解析字段为表达式。
|
|
255
|
+
|
|
256
|
+
参数: 无额外参数;读取三个定位字段。
|
|
257
|
+
返回: None;冻结完整来源身份。
|
|
258
|
+
异常: TypeError/ValueError为名称/字段缺失或非法。
|
|
259
|
+
"""
|
|
260
|
+
# 会话身份必须明确,不从当前全局对象继承。
|
|
261
|
+
require_identifier(self.session_id, "source_ref.session_id")
|
|
262
|
+
# 来源名依会话范围校验,具体归属由SessionSpec检查。
|
|
263
|
+
require_identifier(self.source_name, "source_ref.source_name")
|
|
264
|
+
# 原字段允许点号,不进行隐藏改名。
|
|
265
|
+
require_text(self.field, "source_ref.field")
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
@dataclass(frozen=True)
|
|
269
|
+
class SignalSample:
|
|
270
|
+
"""保留观测原值、显式有效性、质量原因及完整内存来源身份。
|
|
271
|
+
|
|
272
|
+
基础策略禁止全部非零质量位;有效0合法,None/NaN不能伪装有效。
|
|
273
|
+
invalid必须有原因但可保留原值;定义dtype另显式校验,不推断绑定。
|
|
274
|
+
"""
|
|
275
|
+
|
|
276
|
+
name: str # 计划内简单别名,尚不证明绑定已完成。
|
|
277
|
+
time_ns: int # 当前分析坐标;来源映射/会话归属另显式检查。
|
|
278
|
+
value: int | float | bool | str | None # 保留原逻辑标量,不自动补0。
|
|
279
|
+
valid: bool # 明确基础质量有效性,不接受0/1代替bool。
|
|
280
|
+
quality: QualityFlag # 可以组合的原因,NONE不替代valid。
|
|
281
|
+
source_ref: SourceRef # typed会话/来源/字段,不复用跨会话绑定。
|
|
282
|
+
sequence: int # 来源内稳定原序号。
|
|
283
|
+
|
|
284
|
+
def __post_init__(self) -> None:
|
|
285
|
+
"""拒绝类型/质量自相矛盾的样本,保留非法观测的诊断值。
|
|
286
|
+
|
|
287
|
+
参数: 无额外参数;valid/quality/source_ref须用明确类型。
|
|
288
|
+
返回: None;时间/序号规范为整数,其他事实冻结保留。
|
|
289
|
+
异常: TypeError为结构/标量类型;ValueError为有效性矛盾;TimeOverflowError为坐标超界。
|
|
290
|
+
副作用: 不更改原值/质量,不推断缺失为0,不运行绑定或数值变换。
|
|
291
|
+
"""
|
|
292
|
+
# 别名遵循安全简单名称,不能用semantic点号替代。
|
|
293
|
+
require_identifier(self.name, "sample.name")
|
|
294
|
+
# 模型时间遵循已有int64纳秒协议。
|
|
295
|
+
time = require_int64_ns(self.time_ns)
|
|
296
|
+
# 原值必须不可变,但无效值允许None或非有限浮点。
|
|
297
|
+
require_scalar(self.value)
|
|
298
|
+
# 原序号不由时间或其他任务自动填补。
|
|
299
|
+
sequence = require_sequence(self.sequence)
|
|
300
|
+
# 有效性/质量/来源需要typed声明,不使用整数truthiness。
|
|
301
|
+
if type(self.valid) is not bool or not isinstance(self.quality, QualityFlag) or not isinstance(self.source_ref, SourceRef):
|
|
302
|
+
# 未知质量位已由严格枚举构造拒绝,这里拒绝裸整数或字符串来源。
|
|
303
|
+
raise TypeError("sample需要bool valid、QualityFlag及SourceRef")
|
|
304
|
+
# 有效样本不能带基础禁止质量、缺值或非有限浮点。
|
|
305
|
+
if self.valid and (self.quality != QualityFlag.NONE or self.value is None or (type(self.value) is float and not math.isfinite(self.value))):
|
|
306
|
+
# 矛盾输入应明确失败,不能自动清质量或补0。
|
|
307
|
+
raise ValueError("valid=True与禁止质量、None或非有限值矛盾")
|
|
308
|
+
# 无效观测必须携带原因,NONE不能证明已知的失败。
|
|
309
|
+
if not self.valid and self.quality == QualityFlag.NONE:
|
|
310
|
+
# 让后续质量传播有可追溯事实,而不是无原因False。
|
|
311
|
+
raise ValueError("invalid样本必须保留非零质量原因")
|
|
312
|
+
# 只规范整数容器,不改变数据值或来源关系。
|
|
313
|
+
object.__setattr__(self, "time_ns", time)
|
|
314
|
+
# 冻结序号保持原位值。
|
|
315
|
+
object.__setattr__(self, "sequence", sequence)
|
|
316
|
+
|
|
317
|
+
def validate_dtype(self, dtype: SignalDType, choices: tuple[str, ...] = ()) -> None:
|
|
318
|
+
"""在已声明定义类型下验证有效值,不执行隐式归一化。
|
|
319
|
+
|
|
320
|
+
参数: dtype为SignalDType;choices仅ENUM使用,非空唯一原标签tuple。
|
|
321
|
+
返回: None;invalid占位不参与dtype数值校验,但声明域仍须合法。
|
|
322
|
+
异常: TypeError为类型不符;ValueError为枚举域/标签;OverflowError为整数范围超界。
|
|
323
|
+
副作用: 不转换原值、不推断dtype,也不修改质量;数值失败的质量标志由数值层产生。
|
|
324
|
+
"""
|
|
325
|
+
# dtype须由定义层显式声明,不从值推断。
|
|
326
|
+
if not isinstance(dtype, SignalDType) or not isinstance(choices, tuple):
|
|
327
|
+
# 字符串类型名和自由choice容器由配置层解析。
|
|
328
|
+
raise TypeError("dtype必须为SignalDType,choices必须为tuple")
|
|
329
|
+
# 枚举必须有明确唯一标签域,即使当前观测无效也先验证声明。
|
|
330
|
+
if dtype is SignalDType.ENUM:
|
|
331
|
+
# 空域不是有效枚举定义。
|
|
332
|
+
if not choices:
|
|
333
|
+
# 不把任意字符串当作正常枚举。
|
|
334
|
+
raise ValueError("enum需要非空choices")
|
|
335
|
+
# 标签保留完整字符串与大小写,不转表达式名。
|
|
336
|
+
for label in choices:
|
|
337
|
+
# 明确标签类型/非空约束,不以数值truthiness判断。
|
|
338
|
+
require_text(label, "choices.label")
|
|
339
|
+
# 同标签重复无法提供唯一声明域。
|
|
340
|
+
if len(set(choices)) != len(choices):
|
|
341
|
+
# 不自动去重以掩盖定义错误。
|
|
342
|
+
raise ValueError("choices标签重复")
|
|
343
|
+
elif choices:
|
|
344
|
+
# 非枚举不能接受未定义的choices含义。
|
|
345
|
+
raise ValueError("仅enum可声明choices")
|
|
346
|
+
# invalid占位可以保留原错误值,不应进入正常数值检查/计算。
|
|
347
|
+
if not self.valid:
|
|
348
|
+
# 原原因已经构造校验,返回不改变任何输入事实。
|
|
349
|
+
return
|
|
350
|
+
# bool和enum分别检查,Python bool不是整数。
|
|
351
|
+
expected_type = {SignalDType.INT64: int, SignalDType.UINT64: int,
|
|
352
|
+
SignalDType.FLOAT64: float, SignalDType.BOOL: bool, SignalDType.ENUM: str}[dtype]
|
|
353
|
+
# 原生类型严格匹配,不默认将整数转换为float或数值转换为bool。
|
|
354
|
+
if type(self.value) is not expected_type:
|
|
355
|
+
# 需要转换时由显式归一化层承担精度/质量检查。
|
|
356
|
+
raise TypeError(f"value与声明{dtype.value}类型不一致")
|
|
357
|
+
# 定宽整数检查仅针对有效位置,没有中间wrap。
|
|
358
|
+
if dtype in (SignalDType.INT64, SignalDType.UINT64):
|
|
359
|
+
# 独立声明signed/unsigned范围,其他逻辑类型不参与数值检查。
|
|
360
|
+
lower, upper = (INT64_MIN, INT64_MAX) if dtype is SignalDType.INT64 else (0, 2 ** 64 - 1)
|
|
361
|
+
# 超界输入不能通过Python无界整数放行。
|
|
362
|
+
if not lower <= self.value <= upper:
|
|
363
|
+
# 模型拒绝矛盾有效输入;数值计算层将溢出标为OVERFLOW并产生无效结果。
|
|
364
|
+
raise OverflowError(f"value超出{dtype.value}范围")
|
|
365
|
+
elif dtype is SignalDType.ENUM and self.value not in choices:
|
|
366
|
+
# 未声明标签不是正常的其他/默认枚举值。
|
|
367
|
+
raise ValueError("value不在声明枚举域")
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
@dataclass(frozen=True)
|
|
371
|
+
class SessionSpec:
|
|
372
|
+
"""保存一个会话的分析范围和来源集合。
|
|
373
|
+
|
|
374
|
+
sources必须为tuple,来源名在本会话内唯一,声明顺序保留。连续范围左闭右开,
|
|
375
|
+
实际点查询可包含末端。不同来源可以有不同origin;身份检查不能替代联合计算的
|
|
376
|
+
同步检查。本模型不可变,不保存执行缓存或跨任务状态。
|
|
377
|
+
"""
|
|
378
|
+
|
|
379
|
+
session_id: str # 明确会话边界身份。
|
|
380
|
+
timebase: TimebaseSpec # 会话分析坐标声明。
|
|
381
|
+
domain_start_ns: int # 连续开始包含。
|
|
382
|
+
domain_end_ns: int # 连续末端不含,真实点上下文包含。
|
|
383
|
+
sources: tuple[SourceSpec, ...] = () # 会话内来源名唯一;空会话描述合法。
|
|
384
|
+
|
|
385
|
+
def __post_init__(self) -> None:
|
|
386
|
+
"""校验会话范围、typed来源和唯一名称。
|
|
387
|
+
|
|
388
|
+
参数: 无额外参数;读取session_id、timebase、domain和sources。
|
|
389
|
+
返回: None;规范边界为整数,保留来源原顺序。
|
|
390
|
+
异常: TypeError为结构;ValueError为名称/重复来源/反向;TimeOverflowError为边界/跨度。
|
|
391
|
+
"""
|
|
392
|
+
# 会话ID不能从别的计划继承。
|
|
393
|
+
require_identifier(self.session_id, "session_id")
|
|
394
|
+
# 来源和时基需明确模型,不解析无类型配置字典。
|
|
395
|
+
if not isinstance(self.timebase, TimebaseSpec) or not isinstance(self.sources, tuple):
|
|
396
|
+
# 可变列表或未校验时基不进入冻结会话。
|
|
397
|
+
raise TypeError("session需要TimebaseSpec及tuple sources")
|
|
398
|
+
# 一次使用统一半开契约验证两个边界/跨度。
|
|
399
|
+
domain = Interval(self.domain_start_ns, self.domain_end_ns)
|
|
400
|
+
# 名称集合局部于当前会话,不影响其他同名来源。
|
|
401
|
+
names = set()
|
|
402
|
+
# 保留原来源声明顺序,不根据内容重排。
|
|
403
|
+
for source in self.sources:
|
|
404
|
+
# 每项都需真正实现的SourceSpec。
|
|
405
|
+
if not isinstance(source, SourceSpec):
|
|
406
|
+
# 只有类名/字典声明不能冒充已校验来源。
|
|
407
|
+
raise TypeError("sources元素必须为SourceSpec")
|
|
408
|
+
# 同会话名称重复时无法唯一定位样本。
|
|
409
|
+
if source.name in names:
|
|
410
|
+
# 跨会话同名允许,当前会话不能取第一个。
|
|
411
|
+
raise ValueError(f"session来源名重复:{source.name}")
|
|
412
|
+
# 仅登记当前会话已验证来源名。
|
|
413
|
+
names.add(source.name)
|
|
414
|
+
# 构造后只保留精确规范坐标。
|
|
415
|
+
object.__setattr__(self, "domain_start_ns", domain.start_ns)
|
|
416
|
+
# 末点语义由显式点模式表达,不加假设周期。
|
|
417
|
+
object.__setattr__(self, "domain_end_ns", domain.end_ns)
|
|
418
|
+
|
|
419
|
+
def validate_sample(self, sample: SignalSample) -> None:
|
|
420
|
+
"""检查样本会话/来源/字段和观测范围,不执行绑定或读取。
|
|
421
|
+
|
|
422
|
+
参数: sample为typed SignalSample,时间为分析坐标;原来源offset已显式应用。
|
|
423
|
+
返回: None;归属/点范围匹配才通过,不证明值与某行/定义已绑定。
|
|
424
|
+
异常: TypeError为非样本;ValueError为身份、字段或范围不符。
|
|
425
|
+
"""
|
|
426
|
+
# 校验实际模型后再使用typed来源信息。
|
|
427
|
+
if not isinstance(sample, SignalSample):
|
|
428
|
+
# 字典不能绕过样本质量构造检查。
|
|
429
|
+
raise TypeError("sample必须为SignalSample")
|
|
430
|
+
# 同名来源跨会话不能复用旧输入引用。
|
|
431
|
+
if sample.source_ref.session_id != self.session_id:
|
|
432
|
+
# 身份不匹配不是正常缺失值,执行前拒绝。
|
|
433
|
+
raise ValueError("sample的session_id与当前会话不一致")
|
|
434
|
+
# 逐来源寻找明确名称;构造已证明最多一个匹配。
|
|
435
|
+
source = next((item for item in self.sources if item.name == sample.source_ref.source_name), None)
|
|
436
|
+
# 未定义来源不能靠别名或semantic_id补齐。
|
|
437
|
+
if source is None:
|
|
438
|
+
# 不默认选择第一个来源。
|
|
439
|
+
raise ValueError("sample来源未在当前会话声明")
|
|
440
|
+
# 原字段须在本内存来源实际行中出现,空来源不能伪造字段存在。
|
|
441
|
+
if not any(sample.source_ref.field in row.values for row in source.rows):
|
|
442
|
+
# 列定位与别名绑定是不同事实,字段缺项明确失败。
|
|
443
|
+
raise ValueError("sample原字段在当前memory来源不存在")
|
|
444
|
+
# 会话真实点范围包含end,不增加终点之后连续时间。
|
|
445
|
+
if not Interval(self.domain_start_ns, self.domain_end_ns).contains(sample.time_ns, point=True):
|
|
446
|
+
# 模型范围外不当作有效会话输入。
|
|
447
|
+
raise ValueError("sample时间超出会话点范围")
|
|
448
|
+
# 已知来源观测边界映射到分析坐标后同样包含真实末点。
|
|
449
|
+
if source.observation_start_ns is not None and sample.time_ns < checked_add_ns(source.observation_start_ns, source.offset_ns):
|
|
450
|
+
# 来源开始之前不能借其他来源延长覆盖。
|
|
451
|
+
raise ValueError("sample早于来源观测开始")
|
|
452
|
+
# unknown端点不伪装完整覆盖;这里只校验明确声明边界。
|
|
453
|
+
if source.observation_end_ns is not None and sample.time_ns > checked_add_ns(source.observation_end_ns, source.offset_ns):
|
|
454
|
+
# 来源结束之后不能用更长会话假造来源观测。
|
|
455
|
+
raise ValueError("sample晚于来源观测结束")
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
@dataclass(frozen=True)
|
|
459
|
+
class DatasetSpec:
|
|
460
|
+
"""保存一个分析对象、一个会话及其数据集身份。
|
|
461
|
+
|
|
462
|
+
dataset_id和entity_id分别标明输入集合与试验对象,session必须为SessionSpec。
|
|
463
|
+
模型不可变,不把多个实体或会话接成同一条时间轴,也不会创建运行状态。
|
|
464
|
+
批量独立计划需由另外的执行能力处理。
|
|
465
|
+
"""
|
|
466
|
+
|
|
467
|
+
dataset_id: str # 当前输入数据集ID。
|
|
468
|
+
entity_id: str # 试验对象身份,不写死车辆或电池领域。
|
|
469
|
+
session: SessionSpec # 首版单会话,来源在会话中明确声明。
|
|
470
|
+
|
|
471
|
+
def __post_init__(self) -> None:
|
|
472
|
+
"""检查首版数据集身份与单会话类型。
|
|
473
|
+
|
|
474
|
+
参数: 无额外参数;dataset_id/entity_id为简单标识,session为SessionSpec。
|
|
475
|
+
返回: None;保留冻结会话描述,不创建运行状态。
|
|
476
|
+
异常: TypeError/ValueError为身份或会话类型错误。
|
|
477
|
+
"""
|
|
478
|
+
# 数据集与实体分别校验,不把两者混为时间基准。
|
|
479
|
+
require_identifier(self.dataset_id, "dataset_id")
|
|
480
|
+
# 任意试验对象都可用,不加入领域本体。
|
|
481
|
+
require_identifier(self.entity_id, "entity_id")
|
|
482
|
+
# 多会话列表或无类型配置不隐式串接为单会话。
|
|
483
|
+
if not isinstance(self.session, SessionSpec):
|
|
484
|
+
# 单个Dataset只接受一个SessionSpec;批量任务由批量执行接口管理。
|
|
485
|
+
raise TypeError("dataset首版需要一个SessionSpec")
|