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,165 @@
|
|
|
1
|
+
"""从现有内存信号计算表达式,接入参考统计、TRUE时长或选择行流。
|
|
2
|
+
|
|
3
|
+
输入为已编译表达式、CalculationDefinition和可选布尔条件。先检查真实绑定
|
|
4
|
+
及多来源同步依据,再从原行提取依赖,按更新、有效期和窗口边界建立
|
|
5
|
+
共同纳秒轴;参考对齐与表达式求值生成CalculationSeries,最后得到CalculationResult。
|
|
6
|
+
duration主表达式需BOOL,select可保留数值、BOOL或ENUM原值;选择行流返回
|
|
7
|
+
SelectionRow迭代器,其输入和中间历史仍完整物化,不能据此宣称生产预算完成。
|
|
8
|
+
|
|
9
|
+
真实样本标志只取数值表达式的依赖更新;条件独自更新和合成窗口边界
|
|
10
|
+
不能新增数值样本。每个左端值用于直到下一时间的区间,末点不增加面积。
|
|
11
|
+
数值与条件分别保存有效性,原依赖质量另存,UNKNOWN不能当作FALSE。
|
|
12
|
+
|
|
13
|
+
依赖参考转换、对齐、表达式和指标模块,不读取日志、调用旧解码或写出。
|
|
14
|
+
这是完整内存历史的便利入口,创建本次局部结果,不修改输入,不跨任务
|
|
15
|
+
继承绑定或信号值,也不调用NumPy数值内核。
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
# 类型/身份协议明确检查,不使用无类型计划。
|
|
19
|
+
from .expression import CompiledExpression
|
|
20
|
+
# 真标量表达式解释,与NumPy数值独立。
|
|
21
|
+
from .expression_reference import evaluate_reference
|
|
22
|
+
# 当前指标/行流共享typed协议,数值与选择各有独立真实入口。
|
|
23
|
+
from .calculations import CalculationSeries, CalculationDefinition
|
|
24
|
+
# 实际ZOH/样本/coverage逐区间参考。
|
|
25
|
+
from .calculations_reference import compute_reference, select_reference
|
|
26
|
+
# 当前分析域用精确半开模型。
|
|
27
|
+
from .models import Interval
|
|
28
|
+
# 原行规范化和typed值,不重复DBCfactor。
|
|
29
|
+
from .numeric import ScalarValue, memory_series_reference
|
|
30
|
+
# 更新/TTL时间协议可共享,保持参考独立。
|
|
31
|
+
from .state import align_reference, common_timeline
|
|
32
|
+
# BOOL条件与数值类型严格分开。
|
|
33
|
+
from .types import SignalDType as D
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def require_calculation_plan(compiled, spec, condition):
|
|
37
|
+
"""检查指标表达式类型及可选条件是否属于同一真实输入。
|
|
38
|
+
|
|
39
|
+
参数:
|
|
40
|
+
compiled: 当前CompiledExpression;duration需BOOL,select可使用全部声明dtype。
|
|
41
|
+
spec: CalculationDefinition,其他标量统计要求数值根。
|
|
42
|
+
condition: 可选BOOL根的CompiledExpression,须与数值计划的绑定身份相同。
|
|
43
|
+
返回:
|
|
44
|
+
合并去重后的实际依赖名称元组,保留数值依赖在前的顺序。
|
|
45
|
+
异常:
|
|
46
|
+
TypeError: 数值计划或请求模型类型错误。
|
|
47
|
+
ValueError: 根与算子类型不匹配、条件不是BOOL、绑定身份冲突或同步不足。
|
|
48
|
+
边界:
|
|
49
|
+
只合并分析层依赖并检查当前同步声明,不改变旧读取范围或解码调用。
|
|
50
|
+
"""
|
|
51
|
+
# 配置必须真实已编译,不用metadata名称冒充运行。
|
|
52
|
+
if not isinstance(compiled, CompiledExpression) or not isinstance(spec, CalculationDefinition):
|
|
53
|
+
# 不隐式编译任意代码文本。
|
|
54
|
+
raise TypeError('memory指标需CompiledExpression及CalculationDefinition')
|
|
55
|
+
# duration只收BOOL;select保留原dtype;其他数值统计不将bool/enum当编码。
|
|
56
|
+
allowed = tuple(D) if spec.operation == 'select' else (D.BOOL,) if spec.operation == 'duration' else (D.INT64, D.UINT64, D.FLOAT64)
|
|
57
|
+
if compiled.root.dtype not in allowed:
|
|
58
|
+
# 程序错误不降为未知值。
|
|
59
|
+
raise ValueError('指标表达式dtype与算子不匹配')
|
|
60
|
+
# 可选条件身份必须当前完整绑定,不继承另一个任务。
|
|
61
|
+
if condition is not None:
|
|
62
|
+
# 只合法三值BOOL,与同名但不同值的绑定区分。
|
|
63
|
+
if not isinstance(condition, CompiledExpression) or condition.root.dtype is not D.BOOL or condition.bindings.identity != compiled.bindings.identity:
|
|
64
|
+
# 不自动重绑定或取第一个候选。
|
|
65
|
+
raise ValueError('指标条件需BOOL且真实binding identity相同')
|
|
66
|
+
# 合并静态依赖,不改变原旧路径调用/扫描范围。
|
|
67
|
+
names = tuple(dict.fromkeys(compiled.dependencies + (() if condition is None else condition.dependencies)))
|
|
68
|
+
# 多来源同步必须明确,单纯offset没有证明作用。
|
|
69
|
+
compiled.bindings.require_synchronized(names)
|
|
70
|
+
# 每次当前依赖列表隔离,不存全局缓存。
|
|
71
|
+
return names
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def build_calculation_series_reference(compiled, spec, *, condition=None):
|
|
75
|
+
"""从当前原行生成完整指标时间轴、值、条件和真实更新标志。
|
|
76
|
+
|
|
77
|
+
参数:
|
|
78
|
+
compiled: 当前已校验表达式,类型与spec算子匹配;spec为窗口与指标请求。
|
|
79
|
+
condition: 可选且绑定身份一致的BOOL表达式,省略表示不按条件筛选。
|
|
80
|
+
返回:
|
|
81
|
+
CalculationSeries。时间为整数纳秒,值与条件共用完整轴;窗口边界可参与
|
|
82
|
+
积分保持,但actual_value_updates为False,不作为真实样本。
|
|
83
|
+
异常:
|
|
84
|
+
绑定、时间、来源、同步或配置检查失败时传播底层异常。
|
|
85
|
+
流程:
|
|
86
|
+
提取依赖并归一化,加入域内窗口端点,参考保持后逐时间组求值。
|
|
87
|
+
条件依赖可增加时间边界,真实样本标志只来自数值依赖。
|
|
88
|
+
保留完整内存历史和新结果,不延长会话观测域,也不额外读取或解码。
|
|
89
|
+
"""
|
|
90
|
+
# 在运行前核实数值与条件的输入绑定,并检查合并依赖所需的同步依据。
|
|
91
|
+
names = require_calculation_plan(compiled, spec, condition)
|
|
92
|
+
# 独立参考原行归一化,仅当前已暴露输入。
|
|
93
|
+
histories = {name: memory_series_reference(compiled.bindings, name) for name in names}
|
|
94
|
+
# 实际域不按请求范围延长,EOF外不补周期。
|
|
95
|
+
session = compiled.bindings.session
|
|
96
|
+
# 只插入域内请求边界,协议轴也包括updates/TTL/source边界。
|
|
97
|
+
boundaries = tuple(time for time in (spec.window.start_ns, spec.window.end_ns) if session.domain_start_ns <= time <= session.domain_end_ns)
|
|
98
|
+
# 常量无依赖也明确当前会话域。
|
|
99
|
+
times = common_timeline(tuple(histories.values()), boundaries) if histories else tuple(sorted({session.domain_start_ns, session.domain_end_ns, *boundaries}))
|
|
100
|
+
# 当前连续保持独立标量求值,不采用数组参考。
|
|
101
|
+
aligned = {name: align_reference(history, times) for name, history in histories.items()}
|
|
102
|
+
# 每个输出列都保存typed原结果和独立诊断。
|
|
103
|
+
values, conditions, actual, diagnostics = [], [], [], []
|
|
104
|
+
# 参考逐完整时间组构造当前局部context。
|
|
105
|
+
for index in range(len(times)):
|
|
106
|
+
# 同时刻全部依赖已收齐,不逐字段更新产生瞬态选择。
|
|
107
|
+
context = {name: ScalarValue(states[index].value, compiled.bindings.resolve(name).dtype, states[index].valid, states[index].quality,
|
|
108
|
+
tuple(dict.fromkeys(label for _, label in compiled.bindings.resolve(name).choices)) if compiled.bindings.resolve(name).dtype is D.ENUM else ()) for name, states in aligned.items()}
|
|
109
|
+
# 数值表达式只传它自己的精确依赖键。
|
|
110
|
+
numeric = evaluate_reference(compiled, {name: context[name] for name in compiled.dependencies}, compiled.bindings)
|
|
111
|
+
# 保存实际数值及原依赖质量,不将invalid变成正常零。
|
|
112
|
+
values.append(numeric.value)
|
|
113
|
+
# 窗口/TTL边界的保持值不冒充样本;条件独自更新也不是数值样本。
|
|
114
|
+
actual.append(any(aligned[name][index].actual_update for name in compiled.dependencies))
|
|
115
|
+
# 条件可决定known且仍有原未知依赖诊断。
|
|
116
|
+
diagnostic = numeric.dependency_quality
|
|
117
|
+
# 只显式条件参与选择,无条件不同于全UNKNOWN。
|
|
118
|
+
if condition is not None:
|
|
119
|
+
# 当前绑定和精确依赖键通过公共执行门槛。
|
|
120
|
+
selected = evaluate_reference(condition, {name: context[name] for name in condition.dependencies}, compiled.bindings)
|
|
121
|
+
# TRUE/FALSE/UNKNOWN结果与数值独立保留。
|
|
122
|
+
conditions.append(selected.value)
|
|
123
|
+
# known选择不抹去原未知依赖质量。
|
|
124
|
+
diagnostic |= selected.dependency_quality
|
|
125
|
+
# 本组诊断不跨任务继承。
|
|
126
|
+
diagnostics.append(diagnostic)
|
|
127
|
+
# 当前完整值和可选条件计划身份一并关联。
|
|
128
|
+
identity = compiled.identity + ('' if condition is None else ':' + condition.identity)
|
|
129
|
+
# 真实原字段定位保留全部依赖,metadata不是绑定证明。
|
|
130
|
+
refs = tuple(compiled.bindings.source_ref(name) for name in names)
|
|
131
|
+
# 数值/条件都已按同一完整轴独立计算。
|
|
132
|
+
return CalculationSeries(Interval(session.domain_start_ns, session.domain_end_ns), times, tuple(values), tuple(actual), compiled.root.unit,
|
|
133
|
+
tuple(conditions) if condition is not None else None, tuple(diagnostics), identity, refs)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def select_memory_reference(compiled, spec, *, condition=None):
|
|
137
|
+
"""从现有内存信号独立对齐求值,返回真实更新选择行流。
|
|
138
|
+
|
|
139
|
+
参数: compiled当前绑定表达式;spec为select;condition可选同身份BOOL表达式。
|
|
140
|
+
返回: SelectionRow迭代器,不积累全部输出行。
|
|
141
|
+
异常: 构造时间轴/求值时传播输入错误;筛选配置错误在消费时传播。
|
|
142
|
+
边界: 输入和中间历史仍完整物化,不声明生产有界预算;不接旧reader/decoder。
|
|
143
|
+
"""
|
|
144
|
+
# 参考桥接与数组桥接独立提取、对齐和求值。
|
|
145
|
+
series = build_calculation_series_reference(compiled, spec, condition=condition)
|
|
146
|
+
return select_reference(series, spec)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def compute_memory_reference(compiled, spec, *, condition=None):
|
|
150
|
+
"""从已有内存行执行参考表达式和指标计算,返回完整指标结果。
|
|
151
|
+
|
|
152
|
+
参数:
|
|
153
|
+
compiled: 当前表达式;spec为数值统计或BOOL duration的CalculationDefinition。
|
|
154
|
+
condition: 可选且关联同一真实输入的BOOL表达式。
|
|
155
|
+
返回:
|
|
156
|
+
CalculationResult,保存面积、时间/样本统计或TRUE时长,以及覆盖、未知范围与来源。
|
|
157
|
+
异常:
|
|
158
|
+
输入、绑定或配置检查失败时传播底层异常;数值失败由指标质量明确报告。
|
|
159
|
+
流程:
|
|
160
|
+
先建立CalculationSeries,再独立执行参考指标计算;不修改原行或调用数组后端。
|
|
161
|
+
"""
|
|
162
|
+
# 将内存绑定的原始行和表达式结果交给指标计算器。
|
|
163
|
+
series = build_calculation_series_reference(compiled, spec, condition=condition)
|
|
164
|
+
# 独立参考面积/统计/覆盖,不调用数组后端。
|
|
165
|
+
return compute_reference(series, spec)
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
"""用数组计算保持值积分、时间统计、TRUE时长及真实样本统计。
|
|
2
|
+
|
|
3
|
+
compute_numpy接收CalculationSeries和CalculationDefinition,打包成同长数值与质量列,
|
|
4
|
+
裁剪时间端点,计算区间掩码,再归约面积、样本及覆盖时长,输出CalculationResult。
|
|
5
|
+
时间轴为形状(N,)的int64纳秒列,积分区间为形状(N-1,);先用整数端点
|
|
6
|
+
求差再换算秒。数值列保留声明类型,积分与样本平均先检查float64精度。
|
|
7
|
+
时间极值在正裁剪区间取左端值,time_weighted_mean先规范化有效时长权重,duration
|
|
8
|
+
用BOOL TRUE掩码归约时长;select_numpy批量筛选真实更新后逐行恢复typed输出。
|
|
9
|
+
|
|
10
|
+
条件以known和condition两个bool掩码区分已知真假与UNKNOWN(未知)。
|
|
11
|
+
无效数值的零和条件的False仅是存储占位,不能当作正常数据。
|
|
12
|
+
样本统计只含半开窗口内的真实数值更新,窗口与有效期边界不造新样本。
|
|
13
|
+
|
|
14
|
+
依赖NumPy与核心模型;只共享检查、单位和结果分类,不调用参考数值。
|
|
15
|
+
所有计算使用新数组,不修改输入,不读写文件;完整内存布局不代表已满足
|
|
16
|
+
生产流式内存预算,性能提升也需要另行测量。
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
# 真正列计算与归约,禁止object/vectorize替代数值内核。
|
|
20
|
+
import numpy as np
|
|
21
|
+
# 单位和输出政策不包含被测面积/覆盖算法。
|
|
22
|
+
from .calculations import make_calculation_result, calculation_unit
|
|
23
|
+
# 仅共享typed输入门槛,无参考计算调用。
|
|
24
|
+
from .calculations_reference import require_calculation
|
|
25
|
+
# 完整未知诊断区间恢复模型。
|
|
26
|
+
from .models import Interval
|
|
27
|
+
# 独立数组定宽→float精度判据及物理存储布局。
|
|
28
|
+
from .numeric_numpy import DTYPES, NumericArray, to_float_numpy
|
|
29
|
+
# 原因明确,不将UNKNOWN存储占位当真值。
|
|
30
|
+
from .types import QualityFlag as Q, Truth
|
|
31
|
+
# 共享冻结行模型,不调用参考筛选或归约。
|
|
32
|
+
from .selection import SelectionRow, require_selection
|
|
33
|
+
# 复用本数组后端的独立误差项算法,不调用参考归约或重新计算覆盖事实。
|
|
34
|
+
from .integral_sum_numpy import NumpyIntegralSum
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _sum_finite_numpy(values):
|
|
38
|
+
"""保留原顺序归约一列有限浮点项,避免大数消去时丢掉低位。
|
|
39
|
+
|
|
40
|
+
参数: values 为当前调用独占的一维 float64 选中列,不含未知占位或非有限项。
|
|
41
|
+
返回: (原量纲总和或None, 计算失败bool, QualityFlag),不转换物理单位。
|
|
42
|
+
异常: 结构错误、分配和取消直接传播;原序中间溢出由返回诊断说明。
|
|
43
|
+
流程: 原面积、真实样本或已规范化权重项依次推进同一个数组误差核。
|
|
44
|
+
容量取本次项数M:每项最多增加一个partial,因此不会引入固定4096阈值。
|
|
45
|
+
完整内存入口仍为O(M),不宣称有限批预算;不调用参考核或math.fsum。
|
|
46
|
+
"""
|
|
47
|
+
# 调用点均提供私有选择/乘法结果;只冻结本层列,不修改CalculationSeries原值。
|
|
48
|
+
keep = kernel = number = None
|
|
49
|
+
try:
|
|
50
|
+
values.setflags(write=False)
|
|
51
|
+
# 输入已选出有效项,(M,)全TRUE列不把未选Inf或未知占位送入归约。
|
|
52
|
+
keep = np.ones(len(values), dtype=bool)
|
|
53
|
+
keep.setflags(write=False)
|
|
54
|
+
# K个旧partial只可能产生K个lo加一个hi,任意前缀K不超过已消费项数。
|
|
55
|
+
kernel = NumpyIntegralSum(max(1, len(values)))
|
|
56
|
+
kernel.push_values(values, keep)
|
|
57
|
+
# raw_sum只是内部数值标签;factor保持1,外层仍只转换一次实际单位。
|
|
58
|
+
number = kernel.finish('raw_sum')
|
|
59
|
+
return number.value, number.calculation_failed, number.quality
|
|
60
|
+
finally:
|
|
61
|
+
# 异常traceback不额外保留本层选中列;原异常及其诊断不改变。
|
|
62
|
+
values = keep = kernel = number = None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def select_numpy(series, spec):
|
|
66
|
+
"""通过NumPy掩码筛选真实更新,再逐行装箱输出。
|
|
67
|
+
|
|
68
|
+
参数: series完整CalculationSeries;spec为select请求。
|
|
69
|
+
返回: SelectionRow迭代器,TRUE与UNKNOWN保留,FALSE排除。
|
|
70
|
+
异常: 开始消费时传播输入/配置错误,分配失败不吞。
|
|
71
|
+
流程: 建立(N,)时间、actual、known和TRUE列,批量选取输出索引。
|
|
72
|
+
输出循环只恢复typed行,不承担筛选计算。索引占O(N)内存,输出不攒列表。
|
|
73
|
+
"""
|
|
74
|
+
# 输入协议共享,实际选择计算用数组独立完成。
|
|
75
|
+
require_selection(series, spec)
|
|
76
|
+
start = max(spec.window.start_ns, series.observation.start_ns)
|
|
77
|
+
end = min(spec.window.end_ns, series.observation.end_ns)
|
|
78
|
+
# 精确纳秒列与同长布尔掩码,不将UNKNOWN的存储False当成已知FALSE。
|
|
79
|
+
times = np.array(series.times_ns, dtype=np.int64)
|
|
80
|
+
actual = np.array(series.actual_value_updates, dtype=bool)
|
|
81
|
+
known = np.ones(len(times), dtype=bool) if series.conditions is None else np.array([value.valid for value in series.conditions], dtype=bool)
|
|
82
|
+
truth = np.ones(len(times), dtype=bool) if series.conditions is None else np.array([value.value if value.valid else False for value in series.conditions], dtype=bool)
|
|
83
|
+
keep = actual & (times >= start) & (times < end) & (~known | truth)
|
|
84
|
+
# 索引数组先筛选;循环仅打包输出,不调用参考筛选。
|
|
85
|
+
for index in np.flatnonzero(keep):
|
|
86
|
+
selection = Truth.TRUE if known[index] else Truth.UNKNOWN
|
|
87
|
+
value = series.values[index]
|
|
88
|
+
condition_quality = Q.NONE if series.conditions is None else series.conditions[index].quality
|
|
89
|
+
yield SelectionRow(int(times[index]), value, selection, series.diagnostics[index] | value.quality | condition_quality,
|
|
90
|
+
series.binding_identity, series.source_refs, series.unit)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def compute_numpy(series, spec, *, step_ns=None):
|
|
94
|
+
"""批量计算保持面积、样本/时间统计、BOOL TRUE时长和覆盖。
|
|
95
|
+
|
|
96
|
+
参数:
|
|
97
|
+
series: 完整CalculationSeries;spec为CalculationDefinition,声明半开纳秒窗口与算子。
|
|
98
|
+
spec还提供输出单位及report或strict部分结果政策;duration需BOOL输入。
|
|
99
|
+
step_ns为可选固定/DBC周期,只接收所选驱动真实更新;按交集比例计算
|
|
100
|
+
面积、时长和均值权重,不改变实际坐标或输出第二套时间。
|
|
101
|
+
返回:
|
|
102
|
+
CalculationResult,保存数值、覆盖、未知范围、来源与质量原因;select另用行流入口。
|
|
103
|
+
积分区间使用(N-1,)数组,真实样本选择使用(N,)掩码;正常零与None分开。
|
|
104
|
+
异常:
|
|
105
|
+
类型、模型或单位配置错误直接传播;内存分配异常不转换成质量问题。
|
|
106
|
+
非有限计算、下溢和精度失败写入质量原因。
|
|
107
|
+
流程:
|
|
108
|
+
先打包列并检查精度,再裁剪整数时间区间、按有效值与TRUE掩码计算。
|
|
109
|
+
各覆盖时长独立归约,最后恢复未知区间并应用一次输出单位转换。
|
|
110
|
+
不逐样本调用参考计算,不广播错位输入,也不修改原列。
|
|
111
|
+
"""
|
|
112
|
+
# 静态模型门槛与数值实现分开。
|
|
113
|
+
require_calculation(series, spec, step_ns=step_ns)
|
|
114
|
+
# 输出维度及因子由明确单位表验证,不重复DBC缩放。
|
|
115
|
+
unit, factor = calculation_unit(spec, series.unit)
|
|
116
|
+
# Python仅求两个配置区间交集,不执行逐样本数值。
|
|
117
|
+
start = max(spec.window.start_ns, series.observation.start_ns)
|
|
118
|
+
# 不在EOF外补未知周期或面积。
|
|
119
|
+
end = min(spec.window.end_ns, series.observation.end_ns)
|
|
120
|
+
# 无实际交集明确None,不用空数组猜选择FALSE。
|
|
121
|
+
actual = Interval(start, end) if start <= end else None
|
|
122
|
+
# typed输入装箱N列,invalid位置存储0但有明确质量。
|
|
123
|
+
column = NumericArray(series.values[0].dtype, np.array([value.value if value.valid else 0 for value in series.values], dtype=DTYPES[series.values[0].dtype]),
|
|
124
|
+
np.array([value.valid for value in series.values], dtype=bool), np.array([int(value.quality) for value in series.values], dtype=np.uint16))
|
|
125
|
+
# 只有需要浮点面积/mean的算子检查整数精度,min/max保持精确整数。
|
|
126
|
+
values = to_float_numpy(column) if spec.operation in ('integral', 'sample_mean', 'time_weighted_mean') else column
|
|
127
|
+
# copy允许新增计算原因,绝不改只读输入列。
|
|
128
|
+
quality_values = values.quality.copy()
|
|
129
|
+
# 实际边界均为int64,绝对时间不先转float。
|
|
130
|
+
times = np.array(series.times_ns, dtype=np.int64)
|
|
131
|
+
# 全列端点先裁剪,不按完整相邻区间算面积。
|
|
132
|
+
left = np.maximum(times[:-1], np.int64(start))
|
|
133
|
+
# EOF/窗口右端不包含,point不会增加面积。
|
|
134
|
+
right = np.minimum(times[1:], np.int64(end))
|
|
135
|
+
# 只有正相交范围才允许端点减法,避免域外反序差wrap。
|
|
136
|
+
observed = right > left
|
|
137
|
+
# 默认0仅为明确没有面积,不意味着未知值0。
|
|
138
|
+
durations = np.zeros(len(left), dtype=np.int64)
|
|
139
|
+
# 正差≤已校验观测域跨度,安全int64减法。
|
|
140
|
+
np.subtract(right, left, out=durations, where=observed)
|
|
141
|
+
# 无条件为明确选择全部;条件未知单独掩码。
|
|
142
|
+
known = np.ones(len(times), dtype=bool) if series.conditions is None else np.array([value.valid for value in series.conditions], dtype=bool)
|
|
143
|
+
# 无效FALSE存储占位只能与known共同使用。
|
|
144
|
+
condition = np.ones(len(times), dtype=bool) if series.conditions is None else np.array([value.value if value.valid else False for value in series.conditions], dtype=bool)
|
|
145
|
+
# 条件结果原因不是known逻辑全部依赖原因,诊断另列。
|
|
146
|
+
condition_quality = np.zeros(len(times), dtype=np.uint16) if series.conditions is None else np.array([int(value.quality) for value in series.conditions], dtype=np.uint16)
|
|
147
|
+
# 只有效/TRUE/正观测区间可计算面积。
|
|
148
|
+
selected = observed & values.valid[:-1] & known[:-1] & condition[:-1]
|
|
149
|
+
# BOOL FALSE仍计值覆盖,但不增加TRUE持续时间。
|
|
150
|
+
if spec.operation == 'duration':
|
|
151
|
+
selected &= values.values[:-1]
|
|
152
|
+
# 面积数组形状为(N-1,),单位为输入值单位乘秒;掩码外的占位不用于结果。
|
|
153
|
+
areas = np.zeros(len(durations), dtype=np.float64)
|
|
154
|
+
seconds = None
|
|
155
|
+
if spec.operation == 'integral' or step_ns is not None and spec.operation in ('duration', 'time_weighted_mean'):
|
|
156
|
+
seconds = durations.astype(np.float64)
|
|
157
|
+
if step_ns is None:
|
|
158
|
+
seconds /= 1_000_000_000
|
|
159
|
+
else:
|
|
160
|
+
# 分母是未裁剪的真实记录对跨度;只为当前计算生成权重,不保存另一条轴。
|
|
161
|
+
seconds /= np.diff(times)
|
|
162
|
+
seconds *= step_ns / 1_000_000_000
|
|
163
|
+
# 统计算子不计算无关浮点面积。
|
|
164
|
+
if spec.operation == 'integral':
|
|
165
|
+
# 仅预期浮点范围错误转质量,配置/分配异常照常传播。
|
|
166
|
+
with np.errstate(over='ignore', under='ignore', invalid='ignore'):
|
|
167
|
+
# 实际UFUNC掩码乘法,不逐样本Python回调。
|
|
168
|
+
np.multiply(values.values[:-1], seconds, out=areas, where=selected)
|
|
169
|
+
# 有限性失败与非零面积下溢区别于有效0。
|
|
170
|
+
nonfinite = selected & ~np.isfinite(areas)
|
|
171
|
+
# 最小正输入乘正dt消失为0时明确精度原因。
|
|
172
|
+
underflow = selected & (areas == 0) & (values.values[:-1] != 0)
|
|
173
|
+
# 计算质量追加到当前值可用性;末point不参与面积。
|
|
174
|
+
quality_values[:-1][nonfinite] |= np.uint16(Q.NONFINITE)
|
|
175
|
+
# 下溢不能作为正常0进入归约。
|
|
176
|
+
quality_values[:-1][underflow] |= np.uint16(Q.PRECISION_LOSS)
|
|
177
|
+
# 每个算子的数值可用性按完整已知质量计算。
|
|
178
|
+
valid = quality_values == 0
|
|
179
|
+
# 重新排除面积溢出/精度失败,FALSE不构造未知选中集。
|
|
180
|
+
selected = observed & valid[:-1] & known[:-1] & condition[:-1]
|
|
181
|
+
# 再次建立完整选择掩码,保留FALSE的已知状态。
|
|
182
|
+
if spec.operation == 'duration':
|
|
183
|
+
selected &= values.values[:-1]
|
|
184
|
+
# 各duration求和非负且≤观测域跨度,已证明int64归约不wrap。
|
|
185
|
+
value_duration = int(np.sum(durations[valid[:-1]], dtype=np.int64))
|
|
186
|
+
# TRUE和FALSE都计入条件覆盖;UNKNOWN才不计。
|
|
187
|
+
known_duration = int(np.sum(durations[known[:-1]], dtype=np.int64))
|
|
188
|
+
# 正常数值与TRUE相交的真实时长。
|
|
189
|
+
selected_duration = int(np.sum(durations[selected], dtype=np.int64))
|
|
190
|
+
# 所选值未知独立于条件未知。
|
|
191
|
+
selected_unknown = int(np.sum(durations[observed & known[:-1] & condition[:-1] & ~valid[:-1]], dtype=np.int64))
|
|
192
|
+
# 明确FALSE占满实际域才有空选择证明。
|
|
193
|
+
false_duration = int(np.sum(durations[observed & known[:-1] & ~condition[:-1]], dtype=np.int64))
|
|
194
|
+
# 样本统计只计真实数值更新,窗口/TTL边界不是样本。
|
|
195
|
+
samples = (times >= start) & (times < end) & np.array(series.actual_value_updates, dtype=bool) & valid & known & condition
|
|
196
|
+
# duration的样本诊断计数只取真实TRUE更新,时长仍由(N-1,)区间归约。
|
|
197
|
+
if spec.operation == 'duration':
|
|
198
|
+
samples &= values.values
|
|
199
|
+
# 所有被观测区间左端或真实样本都有可追溯诊断。
|
|
200
|
+
relevant = np.concatenate((observed, np.array([False]))) | ((times >= start) & (times < end) & np.array(series.actual_value_updates, dtype=bool))
|
|
201
|
+
# 诊断列独立于结果valid,known决断也保留原依赖原因。
|
|
202
|
+
diagnostic = np.array([int(q) for q in series.diagnostics], dtype=np.uint16) | quality_values | condition_quality
|
|
203
|
+
# bitwise OR不会像sum质量整数溢出,不忽略失败原因。
|
|
204
|
+
quality = Q(int(np.bitwise_or.reduce(diagnostic[relevant], initial=np.uint16(0))))
|
|
205
|
+
# 未知范围循环只恢复输出interval,不做数值/覆盖计算。
|
|
206
|
+
value_unknown = tuple(Interval(int(left[index]), int(right[index])) for index in np.flatnonzero(observed & ~valid[:-1]))
|
|
207
|
+
# 条件FALSE已有明确判断,不进入条件未知区间。
|
|
208
|
+
condition_unknown = tuple(Interval(int(left[index]), int(right[index])) for index in np.flatnonzero(observed & ~known[:-1]))
|
|
209
|
+
# 无可核实面积或样本的归约保持None,不偷用空sum=0。
|
|
210
|
+
result, failed = None, False
|
|
211
|
+
# 浮点归约范围错误按质量记录,其他异常不吞。
|
|
212
|
+
with np.errstate(over='ignore', under='ignore', invalid='ignore'):
|
|
213
|
+
# 每种口径明确选择,不能叫模糊mean。
|
|
214
|
+
if spec.operation == 'integral' and np.any(selected):
|
|
215
|
+
# 原面积按时间顺序保留低位;覆盖、面积质量和最终单位转换仍走原路径。
|
|
216
|
+
result, failed, reduction_quality = _sum_finite_numpy(areas[selected])
|
|
217
|
+
quality |= reduction_quality
|
|
218
|
+
# 整数min仍精确,不隐式转大整数float。
|
|
219
|
+
elif np.any(samples) and spec.operation == 'sample_minimum':
|
|
220
|
+
# 只实际样本,不插入窗口左端保持值。
|
|
221
|
+
result = np.min(values.values[samples]).item()
|
|
222
|
+
# UINT64最大值保持原生Python int输出。
|
|
223
|
+
elif np.any(samples) and spec.operation == 'sample_maximum':
|
|
224
|
+
# 原统计值dtype保留。
|
|
225
|
+
result = np.max(values.values[samples]).item()
|
|
226
|
+
# 样本mean以样本数为分母,与下方时间权重归约分开。
|
|
227
|
+
elif np.any(samples) and spec.operation == 'sample_mean':
|
|
228
|
+
# 先原序求真实样本总和,再除原样本数;不预平均以掩盖中间溢出。
|
|
229
|
+
result, failed, reduction_quality = _sum_finite_numpy(values.values[samples])
|
|
230
|
+
quality |= reduction_quality
|
|
231
|
+
if not failed:
|
|
232
|
+
result = np.divide(np.float64(result), np.count_nonzero(samples)).item()
|
|
233
|
+
# 时间极值包含裁剪边界的保持值;数组原dtype保证整数精度。
|
|
234
|
+
elif np.any(selected) and spec.operation == 'min_time':
|
|
235
|
+
result = np.min(values.values[:-1][selected]).item()
|
|
236
|
+
elif np.any(selected) and spec.operation == 'max_time':
|
|
237
|
+
result = np.max(values.values[:-1][selected]).item()
|
|
238
|
+
# 规范化时长权重再乘值,避免中间值乘纳秒溢出。
|
|
239
|
+
elif np.any(selected) and spec.operation == 'time_weighted_mean':
|
|
240
|
+
selected_values = values.values[:-1][selected]
|
|
241
|
+
if step_ns is None:
|
|
242
|
+
weights = durations[selected].astype(np.float64) / selected_duration
|
|
243
|
+
else:
|
|
244
|
+
weights = seconds[selected]
|
|
245
|
+
denominator, _, _ = _sum_finite_numpy(weights)
|
|
246
|
+
# 原序求和会冻结借入列;归一化生成当前计算结果,不能原地改只读列。
|
|
247
|
+
weights = np.divide(weights, denominator)
|
|
248
|
+
terms = np.multiply(selected_values, weights)
|
|
249
|
+
if np.any(~np.isfinite(terms)):
|
|
250
|
+
failed, quality = True, quality | Q.NONFINITE
|
|
251
|
+
elif np.any((terms == 0) & (selected_values != 0)):
|
|
252
|
+
failed, quality = True, quality | Q.PRECISION_LOSS
|
|
253
|
+
else:
|
|
254
|
+
# 权重与逐项有限/下溢检查不变,仅让有效权重项的消去保留低位。
|
|
255
|
+
result, failed, reduction_quality = _sum_finite_numpy(terms)
|
|
256
|
+
quality |= reduction_quality
|
|
257
|
+
# 有已知布尔区间才产生可核实TRUE时长,全未知保持None。
|
|
258
|
+
elif spec.operation == 'duration' and np.any(observed & valid[:-1] & known[:-1] & condition[:-1]):
|
|
259
|
+
if step_ns is None:
|
|
260
|
+
result = selected_duration / 1_000_000_000
|
|
261
|
+
elif np.any(selected):
|
|
262
|
+
result, failed, reduction_quality = _sum_finite_numpy(seconds[selected])
|
|
263
|
+
quality |= reduction_quality
|
|
264
|
+
else:
|
|
265
|
+
result = 0.0
|
|
266
|
+
# 转换因子1保持整数极值,其他明确单位转换前校验精度。
|
|
267
|
+
if result is not None and factor != 1:
|
|
268
|
+
# 单项结果转float仍走独立尾位判据,不先丢大整数精度。
|
|
269
|
+
if type(result) is int:
|
|
270
|
+
# 结果单列typed布局不借参考运算。
|
|
271
|
+
converted = to_float_numpy(NumericArray(column.dtype, np.array([result], dtype=DTYPES[column.dtype]), np.array([True]), np.array([0], dtype=np.uint16)))
|
|
272
|
+
# 失败保留原覆盖,结果不能正常返回。
|
|
273
|
+
if not converted.valid[0]:
|
|
274
|
+
# 明确PRECISION_LOSS/NONFINITE输出诊断。
|
|
275
|
+
failed, quality = True, quality | Q(int(converted.quality[0]))
|
|
276
|
+
else:
|
|
277
|
+
# 仅已证明精确的整数结果才换单位。
|
|
278
|
+
result = converted.values[0].item()
|
|
279
|
+
# 不继续转换已失败候选。
|
|
280
|
+
if not failed:
|
|
281
|
+
# 一次UFUNC输出单位转换,符号不改变。
|
|
282
|
+
with np.errstate(over='ignore', under='ignore', invalid='ignore'):
|
|
283
|
+
# original用于检查非零转换下溢。
|
|
284
|
+
original, result = result, np.multiply(np.float64(result), factor).item()
|
|
285
|
+
# 非零输入输出0不能伪装正常有效零。
|
|
286
|
+
if result == 0 and original != 0:
|
|
287
|
+
# 未新增schema质量位,使用已有精度原因。
|
|
288
|
+
failed, quality = True, quality | Q.PRECISION_LOSS
|
|
289
|
+
# 总归约/转换非有限为计算失败,不正常Inf。
|
|
290
|
+
if type(result) is float and not np.isfinite(result):
|
|
291
|
+
# 覆盖事实不会改成0来掩盖算术失败。
|
|
292
|
+
failed, quality = True, quality | Q.NONFINITE
|
|
293
|
+
# 空选择证明必须有明确条件及非零连续观测。
|
|
294
|
+
all_false = series.conditions is not None and actual is not None and end > start and false_duration == end-start
|
|
295
|
+
# 只共享结果分类,全部聚合数值来自本独立数组内核。
|
|
296
|
+
return make_calculation_result(spec, series, result, unit, actual, value_duration, known_duration, selected_duration,
|
|
297
|
+
selected_unknown, int(np.count_nonzero(samples)), value_unknown, condition_unknown, quality,
|
|
298
|
+
all_false=all_false, calculation_failed=failed)
|