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,57 @@
|
|
|
1
|
+
"""为当前平坦结果确定所属表和稳定排序键,不构造额外结果包装。
|
|
2
|
+
|
|
3
|
+
输入为已计算的冻结行;输出为固定表名和纯标量tuple,不读取来源或复制数值历史。
|
|
4
|
+
每个表按会话、业务对象和真实顺序排序,父ID明确关联事件或片段。
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .summary import SummaryCalculationRow, SummaryCoverageCalculationRow, SummaryEventRow, SummarySequenceRow, SummarySegmentRow, SummaryContributionRow, SummaryInputRow, SummarySelectionRow, SUMMARY_MODELS
|
|
8
|
+
|
|
9
|
+
ResultRow = SummaryCalculationRow | SummaryEventRow | SummarySequenceRow | SummarySegmentRow | SummaryCoverageCalculationRow | SummaryContributionRow | SummaryInputRow | SummarySelectionRow
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def row_table(row: ResultRow) -> str:
|
|
13
|
+
"""返回行所属表名,不依赖外部对象属性反射。
|
|
14
|
+
|
|
15
|
+
参数: row为已登记的结果行之一。返回: 当前固定表名。
|
|
16
|
+
异常: TypeError为未注册类型。
|
|
17
|
+
"""
|
|
18
|
+
# 精确类型防止子类增加未经编解码登记的字段。
|
|
19
|
+
try:
|
|
20
|
+
if type(row) in SUMMARY_MODELS:
|
|
21
|
+
return SUMMARY_MODELS[type(row)][0]
|
|
22
|
+
raise TypeError('未注册结果行类型')
|
|
23
|
+
finally:
|
|
24
|
+
# 返回名已先求值;原错误/TB只保位置,不替抵费后的借入行继续持有完整refs。
|
|
25
|
+
row = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def row_sort_key(row: ResultRow) -> tuple:
|
|
29
|
+
"""给出session、规则、起点、序号为主的确定排序键。
|
|
30
|
+
|
|
31
|
+
参数: row为typed结果行。返回: 不含浮点值或可变对象的tuple。
|
|
32
|
+
异常: TypeError为非法行;不在这里排序或重复原数据读取。
|
|
33
|
+
"""
|
|
34
|
+
# 各表分别排序;序号为相同业务键提供稳定顺序。
|
|
35
|
+
try:
|
|
36
|
+
row_table(row)
|
|
37
|
+
if type(row) in SUMMARY_MODELS and SUMMARY_MODELS[type(row)][0]=='selections':
|
|
38
|
+
return (row.session_id,row.calculation_id,row.scope,row.parent_id or '',row.time_ns,
|
|
39
|
+
row.sequence,row.dataset_id,row.entity_id)
|
|
40
|
+
if type(row) in SUMMARY_MODELS and SUMMARY_MODELS[type(row)][0]=='input_trace':
|
|
41
|
+
return (row.session_id,row.source,row.original_sequence,row.sequence,row.dataset_id,row.entity_id)
|
|
42
|
+
if type(row) in SUMMARY_MODELS and SUMMARY_MODELS[type(row)][0]=='contributions':
|
|
43
|
+
return (row.session_id,row.calculation_id,row.evaluation_index,row.original_sequence,
|
|
44
|
+
row.sequence,row.dataset_id,row.entity_id)
|
|
45
|
+
if type(row) in SUMMARY_MODELS and SUMMARY_MODELS[type(row)][0]=='calculations':
|
|
46
|
+
return (row.session_id, row.calculation_id, row.scope, row.parent_id or '',
|
|
47
|
+
0, row.sequence, row.dataset_id, row.entity_id)
|
|
48
|
+
if type(row) is SummarySegmentRow:
|
|
49
|
+
return (row.session_id,row.window_id,row.start_ns if row.start_ns is not None else -(1<<63),
|
|
50
|
+
row.sequence,row.dataset_id,row.entity_id)
|
|
51
|
+
if type(row) in (SummaryEventRow, SummarySequenceRow):
|
|
52
|
+
time = row.start_ns if type(row) is SummaryEventRow else row.decided_ns
|
|
53
|
+
return (row.session_id,row.rule_id,time,row.sequence,row.dataset_id,row.entity_id)
|
|
54
|
+
raise TypeError('未注册结果排序类型')
|
|
55
|
+
finally:
|
|
56
|
+
# 正常key元组不变;取消保原TB,但本层不再借持行、事件或片段的完整实体树。
|
|
57
|
+
row = time = None
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"""将指定信号的已解码历史写为原始采样及可选连续量网格CSV长表。
|
|
2
|
+
|
|
3
|
+
输入为同次读取生成的HistorySample/HistoryProgress流及显式导出范围,不打开日志
|
|
4
|
+
或DBC;输出original.csv及清单,启用线性时另写resampled.csv。异步信号分别
|
|
5
|
+
一行,状态/计数不补点;显式连续量交给独立有界网格owner。
|
|
6
|
+
值无效时留空并保质量原因和完整来源引用;原无效值以既有安全编码保存。
|
|
7
|
+
逐行缓冲和编码先付预算,输入正常/失败/取消均关闭,整个目录最终独占发布。
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import csv
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from io import StringIO
|
|
13
|
+
import json
|
|
14
|
+
|
|
15
|
+
from ..core.models import Interval
|
|
16
|
+
from ..core.validation import require_identifier
|
|
17
|
+
from ..execution.record_sample import RecordSample
|
|
18
|
+
from ..execution.history_records import HistorySample, HistoryProgress, estimate_record_bytes
|
|
19
|
+
from ..execution.history import _metadata_bytes
|
|
20
|
+
from .budget import _reserve_owned_ram, _release_owned_ram, _cleanup_owner
|
|
21
|
+
from .codec import _pack
|
|
22
|
+
from .export_files import ExportFiles
|
|
23
|
+
from .signal_grid import SignalGridSpec, SignalGrid
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@dataclass(frozen=True)
|
|
27
|
+
class SignalCSVExportSpec:
|
|
28
|
+
"""指定待导出的已绑定别名;字段含义和单位沿用原绑定,不由文件名推断。"""
|
|
29
|
+
|
|
30
|
+
signals: tuple[str,...] # 唯一非空别名,最多4096,保持配置顺序。
|
|
31
|
+
resampling: SignalGridSpec | None = None # 默认原始采样,显式连续量才进入线性网格。
|
|
32
|
+
|
|
33
|
+
def __post_init__(self):
|
|
34
|
+
"""只核静态选择。参数: 无。返回: None。异常: 类型/数量/重复或非法别名。
|
|
35
|
+
"""
|
|
36
|
+
if type(self.signals) is not tuple or not 1 <= len(self.signals) <= 4096:
|
|
37
|
+
raise ValueError('信号CSV需要1到4096个显式别名')
|
|
38
|
+
for name in self.signals:
|
|
39
|
+
require_identifier(name,'signal_csv_export.signal')
|
|
40
|
+
if len(set(self.signals)) != len(self.signals):
|
|
41
|
+
raise ValueError('信号CSV别名重复')
|
|
42
|
+
if self.resampling is not None and (type(self.resampling) is not SignalGridSpec
|
|
43
|
+
or any(name not in self.signals for name in self.resampling.continuous)):
|
|
44
|
+
raise ValueError('重采样必须是所选信号的明确子集')
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
_COLUMNS = ('time_ns','source','signal','field','value','unit','valid','quality','status',
|
|
48
|
+
'sequence','source_ref_json','original_value_json')
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _csv_bytes(values):
|
|
52
|
+
"""编码一个有界CSV行。参数: values有限标量列表。返回: UTF8 bytes。异常: CSV/Unicode/内存错。
|
|
53
|
+
"""
|
|
54
|
+
# newline交由CSV处理,引号、逗号和换行按标准转义,不拼接未经转义的来源文字。
|
|
55
|
+
stream = StringIO(newline='')
|
|
56
|
+
csv.writer(stream,lineterminator='\n').writerow(values)
|
|
57
|
+
return stream.getvalue().encode('utf-8')
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _sample_row(sample, compact=False):
|
|
61
|
+
"""提取原样本可读列及完整证据。参数: sample已校验HistorySample,compact关闭原文/来源列。返回: 行tuple。异常: 安全编码错。
|
|
62
|
+
"""
|
|
63
|
+
value = sample.value
|
|
64
|
+
if compact:
|
|
65
|
+
return (sample.time_ns,sample.name,value.value if value.valid else '',sample.unit,int(value.quality))
|
|
66
|
+
return (sample.time_ns,sample.source_ref.source_name,sample.name,sample.source_ref.field,
|
|
67
|
+
value.value if value.valid else '',sample.unit,value.valid,int(value.quality),
|
|
68
|
+
'observed' if value.valid else 'invalid',sample.sequence,
|
|
69
|
+
json.dumps(_pack(sample.source_ref),ensure_ascii=False,allow_nan=False,separators=(',',':')),
|
|
70
|
+
json.dumps(_pack(sample.original_value),ensure_ascii=False,allow_nan=False,separators=(',',':'))
|
|
71
|
+
if sample.original_present else '')
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def _reference_json(sample):
|
|
75
|
+
"""编码实际端点引用。参数: sample或None。返回: JSON文本或空字符串。异常: 安全编码错。
|
|
76
|
+
"""
|
|
77
|
+
return '' if sample is None else json.dumps(_pack(sample.source_ref),ensure_ascii=False,
|
|
78
|
+
allow_nan=False,separators=(',',':'))
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _write_grid(owner, rows, counts, compact=False):
|
|
82
|
+
"""有界编码网格行及两端引用。参数: owner/rows/固定计数字典及compact引用开关。返回: None。异常: 编码/预算/I/O/取消错。
|
|
83
|
+
"""
|
|
84
|
+
owner.select_file('resampled.csv')
|
|
85
|
+
for row in rows:
|
|
86
|
+
_reserve_owned_ram(owner,8192+_metadata_bytes(row)*16,'_row_cost')
|
|
87
|
+
try:
|
|
88
|
+
# 左右时间和引用均来自实际采样,目标时间不伪装成原行记录。
|
|
89
|
+
left,right=row.left,row.right
|
|
90
|
+
values=(row.time_ns,row.name,'' if row.value is None else row.value,row.unit,
|
|
91
|
+
row.status,row.reason,row.quality)
|
|
92
|
+
if not compact:
|
|
93
|
+
values+=('' if left is None else left.time_ns,'' if right is None else right.time_ns,
|
|
94
|
+
_reference_json(left),_reference_json(right))
|
|
95
|
+
owner.append(_csv_bytes(values))
|
|
96
|
+
counts[row.status]+=1
|
|
97
|
+
finally:
|
|
98
|
+
_release_owned_ram(owner,owner._row_cost,'_row_cost')
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class SignalCSVWriter(ExportFiles):
|
|
102
|
+
"""复用原写文件和线性网格,支持逐样本推进而不强制暂存整份输入。"""
|
|
103
|
+
|
|
104
|
+
def __init__(self,spec,interval,destination,budget,*,device_label,check_cancel=None,
|
|
105
|
+
definitions=(),backend='numpy',compact=False,integrity=True):
|
|
106
|
+
"""预付输出状态并建立所需表。参数: 导出规格/范围/目标/预算与后端。返回: owner。异常: 原构造错。"""
|
|
107
|
+
if type(compact) is not bool:
|
|
108
|
+
raise TypeError('compact必须为bool')
|
|
109
|
+
if type(spec) is not SignalCSVExportSpec or type(interval) is not Interval:
|
|
110
|
+
raise TypeError('信号导出需要选择及明确Interval')
|
|
111
|
+
if (device_label not in ('home','work') or backend not in ('reference','numpy')
|
|
112
|
+
or check_cancel is not None and not callable(check_cancel)):
|
|
113
|
+
raise ValueError('导出需要实际设备标签及可选取消回调')
|
|
114
|
+
super().__init__(destination,budget,integrity=integrity)
|
|
115
|
+
self.spec,self.interval,self.definitions=spec,interval,definitions
|
|
116
|
+
self.device_label,self.backend,self.compact=device_label,backend,compact
|
|
117
|
+
self._check_cancel=check_cancel
|
|
118
|
+
self._count=self._invalid=0
|
|
119
|
+
self._grid_counts={'observed':0,'estimated':0,'missing':0}
|
|
120
|
+
self._selected=None
|
|
121
|
+
try:
|
|
122
|
+
_reserve_owned_ram(self,4096+sum(len(n.encode('utf-8'))*16+256 for n in spec.signals),'_fixed_cost')
|
|
123
|
+
self._selected=set(spec.signals)
|
|
124
|
+
if spec.resampling is not None:
|
|
125
|
+
try:
|
|
126
|
+
self.worker=SignalGrid(spec.resampling,definitions,interval,budget,
|
|
127
|
+
backend=backend,check_cancel=check_cancel)
|
|
128
|
+
except BaseException as error:
|
|
129
|
+
self.worker=getattr(error,'signal_grid_cleanup_owner',None);raise
|
|
130
|
+
self.open_file('resampled.csv')
|
|
131
|
+
self.append(_csv_bytes(('time_ns','signal','value','unit','status','reason','quality')+
|
|
132
|
+
(() if compact else ('left_time_ns','right_time_ns','left_ref_json','right_ref_json'))))
|
|
133
|
+
if not compact or spec.resampling is None or self._selected-set(spec.resampling.continuous):
|
|
134
|
+
self.select_file('original.csv')
|
|
135
|
+
self.append(_csv_bytes(('time_ns','signal','value','unit','quality') if compact else _COLUMNS))
|
|
136
|
+
except BaseException as error:
|
|
137
|
+
_cleanup_owner(self,error,'export_cleanup_owner','信号CSV构造');raise
|
|
138
|
+
|
|
139
|
+
def push(self,sample):
|
|
140
|
+
"""写一个已验证样本或推进原网格。参数: HistorySample/Progress。返回: None。异常: 原输入/写入错。"""
|
|
141
|
+
if self._closed:
|
|
142
|
+
raise ValueError('信号导出已关闭')
|
|
143
|
+
if self._check_cancel is not None: self._check_cancel()
|
|
144
|
+
if type(sample) is HistoryProgress: return
|
|
145
|
+
if type(sample) not in (HistorySample,RecordSample):
|
|
146
|
+
raise TypeError('信号导出只接受已解码历史记录')
|
|
147
|
+
if sample.name not in self._selected or not self.interval.start_ns<=sample.time_ns<self.interval.end_ns:
|
|
148
|
+
return
|
|
149
|
+
if self.worker is not None and sample.name in self.spec.resampling.continuous:
|
|
150
|
+
_write_grid(self,self.worker.push(sample),self._grid_counts,self.compact)
|
|
151
|
+
return
|
|
152
|
+
_reserve_owned_ram(self,estimate_record_bytes(sample)*2,'_row_cost')
|
|
153
|
+
try:
|
|
154
|
+
self.select_file('original.csv')
|
|
155
|
+
self.append(_csv_bytes(_sample_row(sample,self.compact)))
|
|
156
|
+
finally:
|
|
157
|
+
_release_owned_ram(self,self._row_cost,'_row_cost')
|
|
158
|
+
self._count+=1;self._invalid+=not sample.value.valid
|
|
159
|
+
|
|
160
|
+
def observed_end(self,end_ns):
|
|
161
|
+
"""在线调用方在末组交付前收紧EOF;不能用它改已经写出的记录。
|
|
162
|
+
|
|
163
|
+
参数: 实际末端,须在初始范围中。返回: None。异常: 越界。
|
|
164
|
+
"""
|
|
165
|
+
if not self.interval.start_ns<=end_ns<=self.interval.end_ns:
|
|
166
|
+
raise ValueError('导出末端超出声明范围')
|
|
167
|
+
self.interval=Interval(self.interval.start_ns,end_ns)
|
|
168
|
+
if self.worker is not None: self.worker.interval=self.interval
|
|
169
|
+
|
|
170
|
+
def complete(self):
|
|
171
|
+
"""结束网格、写一次必要清单并原子发布。参数: 无。返回: 输出Path。异常: 原完成错。"""
|
|
172
|
+
interval,spec=self.interval,self.spec
|
|
173
|
+
metadata={'export_type':'signal_csv','device_label':self.device_label,'signals':spec.signals,
|
|
174
|
+
'range_ns':(interval.start_ns,interval.end_ns),'resampling':False,
|
|
175
|
+
'rows':self._count,'observed':self._count-self._invalid,'invalid':self._invalid}
|
|
176
|
+
if self.worker is not None:
|
|
177
|
+
_write_grid(self,self.worker.finish(),self._grid_counts,self.compact)
|
|
178
|
+
grid=spec.resampling
|
|
179
|
+
metadata.update(resampling={'mode':'linear','continuous':grid.continuous,
|
|
180
|
+
'period_ns':grid.period_ns,'origin_ns':grid.origin_ns,'max_gap_ns':grid.max_gap_ns,
|
|
181
|
+
'causal':False,'numeric':'float64_estimate','ordering':'per_signal_monotonic'},
|
|
182
|
+
resampled_counts=self._grid_counts,backend=self.backend,
|
|
183
|
+
bindings=tuple({'name':d.name,'source':d.source,'field':d.field,'unit':d.unit,
|
|
184
|
+
'dtype':d.dtype.value,'same_time_policy':d.same_time_policy}
|
|
185
|
+
for d in self.definitions if d.name in grid.continuous))
|
|
186
|
+
if self.compact: metadata['row_format']='compact-v2'
|
|
187
|
+
return self.finish(metadata)
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def export_signal_csv(records,spec,interval,destination,budget,*,device_label,check_cancel=None,
|
|
191
|
+
definitions=(),backend='numpy',compact=False,integrity=True,file_consumer=None):
|
|
192
|
+
"""消费既有记录流并复用在线写出器,保原公开调用与关闭责任。
|
|
193
|
+
|
|
194
|
+
参数: 可关闭记录流、规格/范围/目标/预算;设备、取消、绑定、后端、精简开关。
|
|
195
|
+
integrity只在请求时计算文件摘要;file_consumer接收写入时取得的有限文件身份,供内部登记复用。
|
|
196
|
+
返回: 已完成输出目录。异常: 原格式/输入/预算/取消错;清理失败附真实owner。
|
|
197
|
+
"""
|
|
198
|
+
if file_consumer is not None and not callable(file_consumer):
|
|
199
|
+
raise TypeError('file_consumer须为回调')
|
|
200
|
+
owner=SignalCSVWriter(spec,interval,destination,budget,device_label=device_label,
|
|
201
|
+
check_cancel=check_cancel,definitions=definitions,backend=backend,compact=compact,integrity=integrity)
|
|
202
|
+
try:
|
|
203
|
+
owner.reader=iter(records)
|
|
204
|
+
for sample in owner.reader: owner.push(sample)
|
|
205
|
+
output=owner.complete()
|
|
206
|
+
if file_consumer is not None: file_consumer(tuple(owner.files))
|
|
207
|
+
return output
|
|
208
|
+
except BaseException as error:
|
|
209
|
+
_cleanup_owner(owner,error,'export_cleanup_owner','信号CSV导出');raise
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"""从有序信号历史生成离线线性网格,每个别名只保留相邻两组真实样本。
|
|
2
|
+
|
|
3
|
+
目标网格origin+k*period贯穿文件和批次,限制在明确半开导出范围。先收齐同刻
|
|
4
|
+
更新,按原绑定的last_by_sequence或冲突政策确定候选;缺两侧、无效更新或
|
|
5
|
+
间隔过大均产出空值及原因。其他状态信号由原始CSV路径保留,不进入本计算。
|
|
6
|
+
所有保留样本及有限网格块计费,失败/取消由上层文件owner接管关闭。
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from math import isnan
|
|
11
|
+
from ..core.binding import SignalDefinition
|
|
12
|
+
from ..core.models import Interval
|
|
13
|
+
from ..core.types import SignalDType
|
|
14
|
+
from ..core.validation import require_identifier
|
|
15
|
+
from ..core.export_interpolation import linear_reference, linear_numpy
|
|
16
|
+
from ..timebase.conversion import require_int64_ns
|
|
17
|
+
from ..execution.record_sample import RecordSample
|
|
18
|
+
from ..execution.history_records import HistorySample, estimate_record_bytes
|
|
19
|
+
from .budget import _reserve_owned_ram, _release_owned_ram, _cleanup_owner
|
|
20
|
+
from .errors import ResultClosedError
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass(frozen=True)
|
|
24
|
+
class SignalGridSpec:
|
|
25
|
+
"""显式连续信号及统一网格;不从DBC名字、dtype或消息周期推断类别/间隔。"""
|
|
26
|
+
|
|
27
|
+
continuous: tuple[str,...]
|
|
28
|
+
period_ns: int | None # None仅用于尚未解析的DBC声明;运行网格必须已解析。
|
|
29
|
+
origin_ns: int
|
|
30
|
+
max_gap_ns: int
|
|
31
|
+
|
|
32
|
+
def __post_init__(self):
|
|
33
|
+
"""核静态网格。参数: 无。返回: None。异常: 类型/数量/时间或名称非法。
|
|
34
|
+
"""
|
|
35
|
+
if type(self.continuous) is not tuple or not 1 <= len(self.continuous) <= 4096:
|
|
36
|
+
raise ValueError('连续信号需要有限非空tuple')
|
|
37
|
+
for name in self.continuous:
|
|
38
|
+
require_identifier(name,'signal_grid.continuous')
|
|
39
|
+
if len(set(self.continuous))!=len(self.continuous):
|
|
40
|
+
raise ValueError('连续信号重复')
|
|
41
|
+
for key in ('period_ns','origin_ns','max_gap_ns'):
|
|
42
|
+
value=getattr(self,key)
|
|
43
|
+
if key=='period_ns' and value is None:continue
|
|
44
|
+
if type(value) is not int:
|
|
45
|
+
raise TypeError('网格时间需要原生int纳秒')
|
|
46
|
+
require_int64_ns(value,key)
|
|
47
|
+
if self.period_ns is not None and self.period_ns<=0 or self.max_gap_ns<=0:
|
|
48
|
+
raise ValueError('网格周期和最大间隔必须为正')
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@dataclass(frozen=True)
|
|
52
|
+
class GridRow:
|
|
53
|
+
"""一个目标点的估计或缺失;左右引用是实际样本,不能伪造为目标点观测。"""
|
|
54
|
+
|
|
55
|
+
time_ns: int
|
|
56
|
+
name: str
|
|
57
|
+
unit: str
|
|
58
|
+
value: int | float | None
|
|
59
|
+
status: str
|
|
60
|
+
reason: str
|
|
61
|
+
quality: int
|
|
62
|
+
left: HistorySample | None
|
|
63
|
+
right: HistorySample | None
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _same_fact(left,right):
|
|
67
|
+
"""沿既有同刻事实比较,包括无效NaN。参数: 两HistorySample。返回: bool。异常: 模型属性错误。
|
|
68
|
+
"""
|
|
69
|
+
a,b=left.value,right.value
|
|
70
|
+
return (a.valid==b.valid and a.quality==b.quality and type(a.value) is type(b.value)
|
|
71
|
+
and (a.value==b.value or type(a.value) is float and isnan(a.value) and isnan(b.value)))
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class SignalGrid:
|
|
75
|
+
"""拥有每信号两个有界样本与单调目标游标;push/finish产出必须在下一次push前耗尽。"""
|
|
76
|
+
|
|
77
|
+
def __init__(self,spec,definitions,interval,budget,*,backend='numpy',check_cancel=None):
|
|
78
|
+
"""核声明并预付有限状态。参数: spec/definitions/interval/budget、backend和取消回调。
|
|
79
|
+
|
|
80
|
+
返回: owner。异常: 声明/预算错;持续释放失败附signal_grid_cleanup_owner。
|
|
81
|
+
"""
|
|
82
|
+
if type(spec) is not SignalGridSpec or spec.period_ns is None or type(interval) is not Interval or backend not in ('reference','numpy'):
|
|
83
|
+
raise TypeError('线性导出需要明确网格、范围和后端')
|
|
84
|
+
if type(definitions) is not tuple or any(type(d) is not SignalDefinition for d in definitions):
|
|
85
|
+
raise TypeError('线性导出需要原绑定定义tuple')
|
|
86
|
+
# 类型声明必须在读取之前核对,空文件也不能让状态/枚举误入连续插值。
|
|
87
|
+
for name in spec.continuous:
|
|
88
|
+
matches=tuple(d for d in definitions if d.name==name)
|
|
89
|
+
if len(matches)!=1 or matches[0].dtype not in (SignalDType.FLOAT64,SignalDType.INT64,SignalDType.UINT64):
|
|
90
|
+
raise ValueError('连续信号需要唯一数值绑定: '+name)
|
|
91
|
+
self.spec,self.interval,self.backend,self._check_cancel=spec,interval,backend,check_cancel
|
|
92
|
+
self._budget=budget
|
|
93
|
+
self._held_cost=self._fixed_cost=self._sample_cost=0
|
|
94
|
+
self._closed=self._finished=False
|
|
95
|
+
self.states=None
|
|
96
|
+
try:
|
|
97
|
+
_reserve_owned_ram(self,262144+len(spec.continuous)*4096,'_fixed_cost')
|
|
98
|
+
# ceil除法保证负时间、非零origin及跨文件都落在同一网格,不重置到首个样本。
|
|
99
|
+
first=spec.origin_ns+(-((spec.origin_ns-interval.start_ns)//spec.period_ns))*spec.period_ns
|
|
100
|
+
self.states={name:{'definition':next(d for d in definitions if d.name==name),'next':first,
|
|
101
|
+
'left':None,'pending':None,'left_conflict':False,'pending_conflict':False,
|
|
102
|
+
'left_cost':0,'pending_cost':0} for name in spec.continuous}
|
|
103
|
+
except BaseException as error:
|
|
104
|
+
_cleanup_owner(self,error,'signal_grid_cleanup_owner','线性网格构造')
|
|
105
|
+
raise
|
|
106
|
+
|
|
107
|
+
def _row(self,state,time_ns,value,status,reason,left,right):
|
|
108
|
+
"""构造单个有限结果。参数: state/目标/值/状态/原因/两端。返回: GridRow。异常: 无。
|
|
109
|
+
"""
|
|
110
|
+
definition=state['definition']
|
|
111
|
+
quality=(0 if left is None else int(left.value.quality)) | (0 if right is None else int(right.value.quality))
|
|
112
|
+
return GridRow(time_ns,definition.name,definition.unit,value,status,reason,quality,left,right)
|
|
113
|
+
|
|
114
|
+
def _until(self,state,limit_ns,right,conflict):
|
|
115
|
+
"""输出limit_ns之前的完整有限块。参数: state、独占limit_ns、右端/冲突。返回: GridRow迭代。异常: 数值/取消错误。
|
|
116
|
+
"""
|
|
117
|
+
left=state['left']; end=min(limit_ns,self.interval.end_ns)
|
|
118
|
+
if left is None and right is None:
|
|
119
|
+
reason='no_observation'
|
|
120
|
+
elif left is None:
|
|
121
|
+
reason='missing_left'
|
|
122
|
+
elif right is None:
|
|
123
|
+
reason='missing_right'
|
|
124
|
+
elif state['left_conflict'] or conflict:
|
|
125
|
+
reason='same_time_conflict'
|
|
126
|
+
elif not left.value.valid or not right.value.valid:
|
|
127
|
+
reason='invalid_neighbor'
|
|
128
|
+
elif right.time_ns-left.time_ns>self.spec.max_gap_ns:
|
|
129
|
+
reason='gap_too_large'
|
|
130
|
+
else:
|
|
131
|
+
reason=''
|
|
132
|
+
while state['next']<end:
|
|
133
|
+
if self._check_cancel is not None:
|
|
134
|
+
self._check_cancel()
|
|
135
|
+
# 每块最多256个点,内存费用已在构造预付;很长范围不会建立整段网格数组。
|
|
136
|
+
count=min(256,(end-1-state['next'])//self.spec.period_ns+1)
|
|
137
|
+
times=tuple(state['next']+i*self.spec.period_ns for i in range(count))
|
|
138
|
+
if reason:
|
|
139
|
+
values=(None,)*count
|
|
140
|
+
else:
|
|
141
|
+
kernel=linear_reference if self.backend=='reference' else linear_numpy
|
|
142
|
+
values=kernel(times,left.time_ns,right.time_ns,left.value.value,right.value.value)
|
|
143
|
+
for time,value in zip(times,values):
|
|
144
|
+
yield self._row(state,time,None if value is None else float(value),
|
|
145
|
+
'missing' if reason else 'estimated',reason,left,right)
|
|
146
|
+
state['next']=time+self.spec.period_ns
|
|
147
|
+
|
|
148
|
+
def _resolve(self,state):
|
|
149
|
+
"""结算已收齐的同刻更新。参数: state。返回: GridRow迭代。异常: 数值/预算/取消错误。
|
|
150
|
+
"""
|
|
151
|
+
right=state['pending']
|
|
152
|
+
if right is None:
|
|
153
|
+
return
|
|
154
|
+
conflict=state['pending_conflict']
|
|
155
|
+
yield from self._until(state,right.time_ns,right,conflict)
|
|
156
|
+
# 命中真实点直接使用该点,即使前一端缺失/无效/间隔太大也不阻止真实观测。
|
|
157
|
+
if state['next']==right.time_ns and state['next']<self.interval.end_ns:
|
|
158
|
+
reason='same_time_conflict' if conflict else '' if right.value.valid else 'invalid_update'
|
|
159
|
+
yield self._row(state,right.time_ns,None if reason else right.value.value,
|
|
160
|
+
'missing' if reason else 'observed',reason,right,right)
|
|
161
|
+
state['next']+=self.spec.period_ns
|
|
162
|
+
_release_owned_ram(self,state['left_cost'],'_sample_cost')
|
|
163
|
+
state.update(left=right,left_cost=state['pending_cost'],left_conflict=conflict,
|
|
164
|
+
pending=None,pending_cost=0,pending_conflict=False)
|
|
165
|
+
|
|
166
|
+
def push(self,sample):
|
|
167
|
+
"""处理一个连续信号更新,不跨范围借样本。参数: sample历史记录。返回: 已确定网格行迭代。异常: 声明/顺序/资源错。
|
|
168
|
+
"""
|
|
169
|
+
if self._closed or self._finished:
|
|
170
|
+
raise ResultClosedError('网格已关闭或完成')
|
|
171
|
+
if type(sample) not in (HistorySample,RecordSample) or sample.name not in self.states:
|
|
172
|
+
raise TypeError('网格需要所选连续信号历史')
|
|
173
|
+
state=self.states[sample.name]; definition=state['definition']
|
|
174
|
+
if (sample.value.dtype is not definition.dtype or sample.unit!=definition.unit
|
|
175
|
+
or sample.source_ref.source_name!=definition.source or sample.source_ref.field!=definition.field):
|
|
176
|
+
raise ValueError('网格样本与原绑定不一致')
|
|
177
|
+
if not self.interval.start_ns<=sample.time_ns<self.interval.end_ns:
|
|
178
|
+
return
|
|
179
|
+
pending=state['pending']
|
|
180
|
+
if pending is not None and sample.time_ns<pending.time_ns:
|
|
181
|
+
raise ValueError('网格输入同信号时间回退')
|
|
182
|
+
if pending is not None and sample.time_ns==pending.time_ns:
|
|
183
|
+
# 默认冲突产生明确缺值;last_by_sequence只按稳定原序号选定,不按到达次序。
|
|
184
|
+
if sample.sequence==pending.sequence:
|
|
185
|
+
raise ValueError('网格同刻原序号重复')
|
|
186
|
+
conflict=state['pending_conflict'] or not _same_fact(pending,sample) and definition.same_time_policy=='error'
|
|
187
|
+
if sample.sequence<pending.sequence:
|
|
188
|
+
state['pending_conflict']=conflict
|
|
189
|
+
return
|
|
190
|
+
cost=estimate_record_bytes(sample)
|
|
191
|
+
_reserve_owned_ram(self,cost,'_sample_cost')
|
|
192
|
+
old=state['pending_cost']
|
|
193
|
+
state.update(pending=sample,pending_cost=cost,pending_conflict=conflict)
|
|
194
|
+
_release_owned_ram(self,old,'_sample_cost')
|
|
195
|
+
else:
|
|
196
|
+
yield from self._resolve(state)
|
|
197
|
+
cost=estimate_record_bytes(sample)
|
|
198
|
+
_reserve_owned_ram(self,cost,'_sample_cost')
|
|
199
|
+
state.update(pending=sample,pending_cost=cost,pending_conflict=False)
|
|
200
|
+
|
|
201
|
+
def finish(self):
|
|
202
|
+
"""完整EOF后输出剩余真实点及缺后侧网格。参数: 无。返回: GridRow迭代。异常: 资源/取消错。
|
|
203
|
+
"""
|
|
204
|
+
if self._closed or self._finished:
|
|
205
|
+
raise ResultClosedError('网格不可再次完成')
|
|
206
|
+
for state in self.states.values():
|
|
207
|
+
yield from self._resolve(state)
|
|
208
|
+
yield from self._until(state,self.interval.end_ns,None,False)
|
|
209
|
+
self._finished=True
|
|
210
|
+
|
|
211
|
+
def close(self):
|
|
212
|
+
"""释放保留样本与有限状态,可重试。参数: 无。返回: None。异常: 原预算释放错误。
|
|
213
|
+
"""
|
|
214
|
+
if self._closed:
|
|
215
|
+
return
|
|
216
|
+
self.states=None
|
|
217
|
+
_release_owned_ram(self,self._sample_cost,'_sample_cost')
|
|
218
|
+
_release_owned_ram(self,self._fixed_cost,'_fixed_cost')
|
|
219
|
+
self._closed=True
|