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,568 @@
|
|
|
1
|
+
"""从当前保持状态选择下一分析边界,合并同刻原因而不推进事件状态。
|
|
2
|
+
|
|
3
|
+
输入为已经登记实际解码表达式的ExpressionQueries、已处理的整数纳秒游标、
|
|
4
|
+
下一完整更新组时刻和当前未确认duration的冻结截止快照。输出须关闭的
|
|
5
|
+
BoundaryResult,只保存一个时刻、全部并列原因以及绑定和表达式身份。
|
|
6
|
+
查询先预留依赖、规则、来源及字符串空间,再扫描当前TTL、依赖来源EOF与
|
|
7
|
+
domain结束;每次重新计算,不积累过期timer,也不保存样本或完整更新组。
|
|
8
|
+
原因按固定顺序展示,该顺序不代表消费顺序;本模块不求值表达式、不提交
|
|
9
|
+
state、不推进Detector,不据EOF原因决定事件的closed/interrupted/truncated。
|
|
10
|
+
调用方负责先处理domain起点;这里不以start-1初始化,因此INT64_MIN可用。
|
|
11
|
+
owner只关闭自有结果和固定申请,上游关闭后已有结果仍独立可读。RAM为新
|
|
12
|
+
分析层保守计账,不代表整个进程RSS或外部另存引用的强制回收。device_label: home。
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
# 冻结边界协议只使用标准模型;保持和表达式资源由调用方负责关闭。
|
|
16
|
+
from dataclasses import dataclass
|
|
17
|
+
from sys import getsizeof
|
|
18
|
+
from types import MappingProxyType
|
|
19
|
+
|
|
20
|
+
from ..core.expression import CompiledExpression
|
|
21
|
+
from ..core.models import Interval
|
|
22
|
+
from ..core.validation import require_identifier
|
|
23
|
+
from ..results.errors import ResultClosedError
|
|
24
|
+
from ..timebase.conversion import require_int64_ns
|
|
25
|
+
from .expressions import ExpressionQueries
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# 这里只规定可重复展示的排序,不编码实际更新、TTL或EOF的执行优先级。
|
|
29
|
+
_REASON_ORDER = MappingProxyType({
|
|
30
|
+
'ttl': 0, 'duration': 1, 'update': 2, 'source_eof': 3, 'domain_end': 4,
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _require_native_ns(value, field):
|
|
35
|
+
"""要求原生int的精确有符号64位纳秒,拒绝隐式类型转换。
|
|
36
|
+
|
|
37
|
+
参数:
|
|
38
|
+
value: 待检查坐标,必须是原生int,不能为bool或NumPy整数标量。
|
|
39
|
+
field: 错误定位字段名称。
|
|
40
|
+
返回:
|
|
41
|
+
原int坐标,单位为纳秒,不舍入或取模。
|
|
42
|
+
异常:
|
|
43
|
+
TypeError: 输入不是原生int。
|
|
44
|
+
TimeOverflowError: 坐标超出有符号64位范围。
|
|
45
|
+
副作用:
|
|
46
|
+
无,不读取状态或申请查询预算。
|
|
47
|
+
"""
|
|
48
|
+
# 通用时间转换允许Integral;本内部快照接口明确采用原生int,先收紧类型。
|
|
49
|
+
if type(value) is not int:
|
|
50
|
+
raise TypeError(f'{field}需要原生int纳秒')
|
|
51
|
+
# 范围检查复用整数协议,超界直接拒绝,不能生成回绕后的早期截止。
|
|
52
|
+
return require_int64_ns(value, field)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@dataclass(frozen=True)
|
|
56
|
+
class RuleDeadline:
|
|
57
|
+
"""保存调用方当前未确认duration的一份截止快照,不持有Detector。
|
|
58
|
+
|
|
59
|
+
rule_id是当前规则的简单标识,time_ns是原生int64纳秒的精确截止时刻。
|
|
60
|
+
快照不证明某个候选仍存在;调用方须在每次规则或信号更新后重新取得快照。
|
|
61
|
+
本模型不相加duration,不生成零门槛timer,也不改变规则配置或检测状态。
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
rule_id: str # 当前duration规则标识,不能用表达式文本替代身份。
|
|
65
|
+
time_ns: int # 已检查的原生int64纳秒;查询再检查必须严格晚于游标。
|
|
66
|
+
|
|
67
|
+
def __post_init__(self):
|
|
68
|
+
"""校验冻结规则标识和整数截止,不读取候选状态。
|
|
69
|
+
|
|
70
|
+
参数:
|
|
71
|
+
无显式参数,读取rule_id与time_ns。
|
|
72
|
+
返回:
|
|
73
|
+
None,字段保持原值,不隐式改名或转换时间类型。
|
|
74
|
+
异常:
|
|
75
|
+
TypeError: 标识不是原生str或时间不是原生int。
|
|
76
|
+
ValueError: 标识为空、含点号、关键字或保留名称。
|
|
77
|
+
TimeOverflowError: 时间超出int64。
|
|
78
|
+
副作用:
|
|
79
|
+
无,不注册timer或打开资源。
|
|
80
|
+
"""
|
|
81
|
+
# 固定字符串不携带自定义比较行为;项目标识规则保持大小写和完整原文。
|
|
82
|
+
if type(self.rule_id) is not str:
|
|
83
|
+
raise TypeError('deadline.rule_id需要原生str')
|
|
84
|
+
require_identifier(self.rule_id, 'deadline.rule_id')
|
|
85
|
+
# 超int64直接拒绝,不返回饱和值;合法但超过domain的截止由query_next忽略。
|
|
86
|
+
_require_native_ns(self.time_ns, 'deadline.time_ns')
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
@dataclass(frozen=True)
|
|
90
|
+
class BoundaryReason:
|
|
91
|
+
"""描述选中时刻的一项事实原因,不能直接解释为事件结束状态。
|
|
92
|
+
|
|
93
|
+
ttl的target为信号别名,duration为规则标识,source_eof为来源标识;
|
|
94
|
+
update与domain_end的target固定为空串,不保存更新组或会话对象。
|
|
95
|
+
所有字段冻结;相同reason_type的多个目标可同时出现,同来源EOF只输出一次。
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
reason_type: str # ttl/duration/update/source_eof/domain_end中的一种。
|
|
99
|
+
target: str # 目标简单标识,update与domain_end固定为空串。
|
|
100
|
+
|
|
101
|
+
def __post_init__(self):
|
|
102
|
+
"""校验原因种类及对应目标格式,不推断数据有效性。
|
|
103
|
+
|
|
104
|
+
参数:
|
|
105
|
+
无显式参数,读取reason_type与target。
|
|
106
|
+
返回:
|
|
107
|
+
None,保留固定协议中的字符串。
|
|
108
|
+
异常:
|
|
109
|
+
TypeError: reason_type或target不是原生str。
|
|
110
|
+
ValueError: 原因未注册、标识不合法或无目标原因携带非空target。
|
|
111
|
+
副作用:
|
|
112
|
+
无,不求值条件或改变来源状态。
|
|
113
|
+
"""
|
|
114
|
+
# 原因分派仅接受固定文本,不执行任意对象或扩展字符串协议。
|
|
115
|
+
if type(self.reason_type) is not str or type(self.target) is not str:
|
|
116
|
+
raise TypeError('边界原因kind/target需要原生str')
|
|
117
|
+
if self.reason_type not in _REASON_ORDER:
|
|
118
|
+
raise ValueError('边界原因kind未注册')
|
|
119
|
+
# 三种有目标原因使用项目简单标识规则,避免混入字段文本或表达式路径。
|
|
120
|
+
if self.reason_type in ('ttl', 'duration', 'source_eof'):
|
|
121
|
+
require_identifier(self.target, 'boundary.target')
|
|
122
|
+
# 更新原因只证明下一完整组同刻,不用字符串冒充尚未消费的组对象。
|
|
123
|
+
elif self.target != '':
|
|
124
|
+
raise ValueError('update/domain_end的target必须为空串')
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def _reason_key(reason):
|
|
128
|
+
"""提供原因展示顺序,不改变时间或状态消费顺序。
|
|
129
|
+
|
|
130
|
+
参数:
|
|
131
|
+
reason: 已校验BoundaryReason。
|
|
132
|
+
返回:
|
|
133
|
+
(种类序号, target),同种类按保留大小写的目标字典序排列。
|
|
134
|
+
异常:
|
|
135
|
+
KeyError: 内部原因种类与固定协议不一致。
|
|
136
|
+
副作用:
|
|
137
|
+
无,只作为当前查询中已预留排序空间的key函数。
|
|
138
|
+
"""
|
|
139
|
+
# 固定种类顺序仅为了两个后端和不同输入排列得到相同可检查输出。
|
|
140
|
+
return _REASON_ORDER[reason.reason_type], reason.target
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class BoundaryResult:
|
|
144
|
+
"""持有单一边界的独立预算快照,关闭后拒绝读取内容。
|
|
145
|
+
|
|
146
|
+
time、原因tuple和两个身份不借用上游可变状态;上游资源关闭不清除此结果。
|
|
147
|
+
owner登记全部存活结果并负责最终关闭。调用方若另存已取得的原因或身份引用,
|
|
148
|
+
须自行负责关闭以后仍保留的外部引用,不把释放预算解释为强制销毁对象。
|
|
149
|
+
"""
|
|
150
|
+
|
|
151
|
+
def __init__(self, owner, cost, time_ns, reasons, binding_identity, compiled_identity):
|
|
152
|
+
"""在已预留空间中包装边界事实,不复制样本或重新扫描TTL。
|
|
153
|
+
|
|
154
|
+
参数:
|
|
155
|
+
owner: 本结果所属BoundaryQueries。
|
|
156
|
+
cost: 本查询成功申请的非负字节金额。
|
|
157
|
+
time_ns: 已选中的原生int64纳秒时刻。
|
|
158
|
+
reasons: 已校验、已排序的BoundaryReason tuple。
|
|
159
|
+
binding_identity、compiled_identity: 当前实际绑定与登记表达式的身份字符串。
|
|
160
|
+
返回:
|
|
161
|
+
新BoundaryResult,待owner登记后交给调用方。
|
|
162
|
+
异常:
|
|
163
|
+
MemoryError: 构造分配失败,由查询完整抵销申请。
|
|
164
|
+
副作用:
|
|
165
|
+
只建立结果自有字段;不追加owner登记或改动caller资源。
|
|
166
|
+
"""
|
|
167
|
+
# 已构造的冻结事实在完整申请中移交;两个身份是字符串,不保留compiled对象。
|
|
168
|
+
self._owner, self._cost, self._closed = owner, cost, False
|
|
169
|
+
self._time, self._reasons = time_ns, reasons
|
|
170
|
+
self._binding_identity, self._compiled_identity = binding_identity, compiled_identity
|
|
171
|
+
|
|
172
|
+
def _ensure_open(self):
|
|
173
|
+
"""拒绝关闭后读取,已有结果不再检查上游生命周期。
|
|
174
|
+
|
|
175
|
+
参数:
|
|
176
|
+
无。
|
|
177
|
+
返回:
|
|
178
|
+
None,打开结果可继续读取独立快照。
|
|
179
|
+
异常:
|
|
180
|
+
ResultClosedError: 本结果已关闭。
|
|
181
|
+
"""
|
|
182
|
+
# 本结果拥有独立申请;caller关闭不会使仍存活的快照提前失效。
|
|
183
|
+
if self._closed:
|
|
184
|
+
raise ResultClosedError('下一边界结果已关闭')
|
|
185
|
+
|
|
186
|
+
@property
|
|
187
|
+
def closed(self):
|
|
188
|
+
"""读取本结果是否关闭。
|
|
189
|
+
|
|
190
|
+
参数:
|
|
191
|
+
无。
|
|
192
|
+
返回:
|
|
193
|
+
bool;关闭后仍可检查此状态。
|
|
194
|
+
异常:
|
|
195
|
+
无。
|
|
196
|
+
"""
|
|
197
|
+
# 生命周期状态不需要访问已被清理的边界内容。
|
|
198
|
+
return self._closed
|
|
199
|
+
|
|
200
|
+
@property
|
|
201
|
+
def time_ns(self):
|
|
202
|
+
"""读取选中的精确纳秒时刻。
|
|
203
|
+
|
|
204
|
+
参数:
|
|
205
|
+
无。
|
|
206
|
+
返回:
|
|
207
|
+
原生int,严格晚于查询游标且不超过domain_end。
|
|
208
|
+
异常:
|
|
209
|
+
ResultClosedError: 结果已关闭。
|
|
210
|
+
"""
|
|
211
|
+
# 先检查自有申请仍存活,再提供不可变整数,不对其作float转换。
|
|
212
|
+
self._ensure_open()
|
|
213
|
+
return self._time
|
|
214
|
+
|
|
215
|
+
@property
|
|
216
|
+
def reasons(self):
|
|
217
|
+
"""读取同刻全部并列原因。
|
|
218
|
+
|
|
219
|
+
参数:
|
|
220
|
+
无。
|
|
221
|
+
返回:
|
|
222
|
+
BoundaryReason tuple,固定种类顺序及target字典序;不表示消费优先级。
|
|
223
|
+
异常:
|
|
224
|
+
ResultClosedError: 结果已关闭。
|
|
225
|
+
"""
|
|
226
|
+
# 输出为冻结tuple,不借由属性读取再次扫描更新或来源。
|
|
227
|
+
self._ensure_open()
|
|
228
|
+
return self._reasons
|
|
229
|
+
|
|
230
|
+
@property
|
|
231
|
+
def binding_identity(self):
|
|
232
|
+
"""读取查询时实际解码绑定身份。
|
|
233
|
+
|
|
234
|
+
参数:
|
|
235
|
+
无。
|
|
236
|
+
返回:
|
|
237
|
+
SHA字符串,与当前登记表达式所属绑定一致。
|
|
238
|
+
异常:
|
|
239
|
+
ResultClosedError: 结果已关闭。
|
|
240
|
+
"""
|
|
241
|
+
# 已保存字符串不需要上游lease或表达式owner继续打开。
|
|
242
|
+
self._ensure_open()
|
|
243
|
+
return self._binding_identity
|
|
244
|
+
|
|
245
|
+
@property
|
|
246
|
+
def compiled_identity(self):
|
|
247
|
+
"""读取本次登记表达式的完整身份。
|
|
248
|
+
|
|
249
|
+
参数:
|
|
250
|
+
无。
|
|
251
|
+
返回:
|
|
252
|
+
SHA字符串,不以同名表达式或同文本替代登记关系。
|
|
253
|
+
异常:
|
|
254
|
+
ResultClosedError: 结果已关闭。
|
|
255
|
+
"""
|
|
256
|
+
# 身份是独立快照的一部分,不保留表达式树及其ENUM域。
|
|
257
|
+
self._ensure_open()
|
|
258
|
+
return self._compiled_identity
|
|
259
|
+
|
|
260
|
+
def close(self):
|
|
261
|
+
"""抵销一次查询申请并解除owner登记,不关闭任何上游资源。
|
|
262
|
+
|
|
263
|
+
参数:
|
|
264
|
+
无。
|
|
265
|
+
返回:
|
|
266
|
+
None;重复关闭安全。
|
|
267
|
+
异常:
|
|
268
|
+
ValueError: 内部预算账本不一致,不能吞掉重复释放或漏计错误。
|
|
269
|
+
KeyboardInterrupt: 未释放金额可重试;已释放时最小关闭后传播取消。
|
|
270
|
+
副作用:
|
|
271
|
+
清除本结果持有的原因、身份及owner引用。
|
|
272
|
+
"""
|
|
273
|
+
# 已关闭结果不能再次抵销金额,closed属性仍保留可检查状态。
|
|
274
|
+
if self._closed:
|
|
275
|
+
return
|
|
276
|
+
# 单线程快照覆盖释放成功后的返回取消;未扣账时仍可重试。
|
|
277
|
+
budget, cost = self._owner._budget, self._cost
|
|
278
|
+
before, released = budget.ram_bytes, False
|
|
279
|
+
try:
|
|
280
|
+
budget.release_ram(cost)
|
|
281
|
+
released = True
|
|
282
|
+
finally:
|
|
283
|
+
if released or budget.ram_bytes == before - cost:
|
|
284
|
+
self._discard()
|
|
285
|
+
|
|
286
|
+
def _discard(self):
|
|
287
|
+
"""无扣账地移除登记并关闭字段,供查询撤销或释放后最小收尾。
|
|
288
|
+
|
|
289
|
+
参数: 无。返回: None;本方法不再次释放申请。
|
|
290
|
+
异常: 脱离取消传播,finally仍关闭,owner随后只移除残留登记。
|
|
291
|
+
"""
|
|
292
|
+
try:
|
|
293
|
+
self._owner._results.discard(self)
|
|
294
|
+
finally:
|
|
295
|
+
# 即使登记移除取消,也不能保留可再次扣账的结果或已释放大字符串。
|
|
296
|
+
self._closed, self._cost = True, 0
|
|
297
|
+
self._time = self._reasons = self._binding_identity = self._compiled_identity = self._owner = None
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
class BoundaryQueries:
|
|
301
|
+
"""借用表达式owner选择下一边界,所有存活结果各自计账。
|
|
302
|
+
|
|
303
|
+
固定申请只持本owner和登记容器;不复制表达式树、绑定、描述或ENUM域。
|
|
304
|
+
表达式owner继续拥有这些元数据,其关闭会丢弃内部引用并拒绝后续查询。
|
|
305
|
+
每次查询重新取得当前TTL,来源EOF仅按实际依赖去重;不持累积timer heap。
|
|
306
|
+
after必须已处理domain起点且不早于state最后提交时刻,caller负责该前提。
|
|
307
|
+
"""
|
|
308
|
+
|
|
309
|
+
def __init__(self, expressions: ExpressionQueries, *, observation=None):
|
|
310
|
+
"""先申请固定容器,再借用打开的表达式owner。
|
|
311
|
+
|
|
312
|
+
参数:
|
|
313
|
+
expressions: 当前实际解码绑定的ExpressionQueries,不能为空或关闭。
|
|
314
|
+
observation: 原请求范围内的实际Interval,None保持原HoldContext.domain。
|
|
315
|
+
返回:
|
|
316
|
+
新BoundaryQueries,未创建查询结果。
|
|
317
|
+
异常:
|
|
318
|
+
TypeError: 参数不是ExpressionQueries。
|
|
319
|
+
ResultClosedError: 表达式owner、保持owner或state已关闭。
|
|
320
|
+
BudgetExceededError、MemoryError: 固定申请或容器构造失败,抵销本次申请。
|
|
321
|
+
原异常身份保留;持续清理失败时从boundary_queries_cleanup_owner恢复close。
|
|
322
|
+
副作用:
|
|
323
|
+
只拥有固定预算及自有结果登记;不关闭、复制或推进caller资源。
|
|
324
|
+
"""
|
|
325
|
+
# 类型和上游生命周期先成立,不能借同名对象或关闭对象继续选边界。
|
|
326
|
+
if not isinstance(expressions, ExpressionQueries):
|
|
327
|
+
raise TypeError('边界查询需要ExpressionQueries')
|
|
328
|
+
expressions._ensure_open()
|
|
329
|
+
# 独立推进范围必须来自显式实际观测,不通过克隆保持上下文改变绑定身份。
|
|
330
|
+
domain = expressions._holds._context.domain
|
|
331
|
+
if observation is not None:
|
|
332
|
+
if not isinstance(observation, Interval):
|
|
333
|
+
raise TypeError('边界查询实际观测范围需要Interval或None')
|
|
334
|
+
if observation.start_ns < domain.start_ns or observation.end_ns > domain.end_ns:
|
|
335
|
+
raise ValueError('边界查询实际观测范围必须完全位于原domain内')
|
|
336
|
+
domain = observation
|
|
337
|
+
# 清理字段在分配前准备,失败关闭允许处理尚未建立的结果登记容器。
|
|
338
|
+
self._budget, self._fixed_cost, self._closed = expressions._budget, 0, False
|
|
339
|
+
self._expressions = self._results = None
|
|
340
|
+
self._domain = None
|
|
341
|
+
before = self._budget.ram_bytes
|
|
342
|
+
try:
|
|
343
|
+
# 申请在保护块内,返回取消仍要记录真实已申请金额。
|
|
344
|
+
self._budget.reserve_ram(32768)
|
|
345
|
+
self._fixed_cost = 32768
|
|
346
|
+
# 只有轻量owner引用及set容器属于本固定申请,不保存额外模型快照。
|
|
347
|
+
self._expressions, self._results = expressions, set()
|
|
348
|
+
self._domain = domain
|
|
349
|
+
except BaseException as exc:
|
|
350
|
+
if self._fixed_cost == 0 and self._budget.ram_bytes == before + 32768:
|
|
351
|
+
self._fixed_cost = 32768
|
|
352
|
+
# 构造失败或取消只清理本owner,不越权关闭已打开的表达式owner。
|
|
353
|
+
try:
|
|
354
|
+
self.close()
|
|
355
|
+
except BaseException as cleanup:
|
|
356
|
+
exc.add_note(f'边界查询初始化清理附加失败: {type(cleanup).__name__}')
|
|
357
|
+
if not self._closed:
|
|
358
|
+
try:
|
|
359
|
+
self.close()
|
|
360
|
+
except BaseException as retry:
|
|
361
|
+
exc.add_note(f'边界查询初始化清理重试失败: {type(retry).__name__}')
|
|
362
|
+
if not self._closed:
|
|
363
|
+
exc.boundary_queries_cleanup_owner = self
|
|
364
|
+
exc.add_note('释放恢复后调用boundary_queries_cleanup_owner.close()')
|
|
365
|
+
raise
|
|
366
|
+
|
|
367
|
+
@property
|
|
368
|
+
def closed(self):
|
|
369
|
+
"""读取边界owner是否关闭。
|
|
370
|
+
|
|
371
|
+
参数:
|
|
372
|
+
无。
|
|
373
|
+
返回:
|
|
374
|
+
bool,独立于caller是否已经关闭。
|
|
375
|
+
异常:
|
|
376
|
+
无。
|
|
377
|
+
"""
|
|
378
|
+
# 自身生命周期保留到重复close和恢复核对,无需查询caller。
|
|
379
|
+
return self._closed
|
|
380
|
+
|
|
381
|
+
def _ensure_open(self):
|
|
382
|
+
"""检查本owner及全部借用上游仍可创建新查询。
|
|
383
|
+
|
|
384
|
+
参数:
|
|
385
|
+
无。
|
|
386
|
+
返回:
|
|
387
|
+
None。
|
|
388
|
+
异常:
|
|
389
|
+
ResultClosedError: 本owner、表达式owner、保持owner或state已关闭。
|
|
390
|
+
"""
|
|
391
|
+
# 本owner关闭后借用引用被清理,先检查自身避免访问None。
|
|
392
|
+
if self._closed:
|
|
393
|
+
raise ResultClosedError('下一边界owner已关闭')
|
|
394
|
+
# 上游逐层检查生命周期;已有BoundaryResult只检查其自身,不受此限制。
|
|
395
|
+
self._expressions._ensure_open()
|
|
396
|
+
|
|
397
|
+
def _query_cost(self, compiled, deadlines):
|
|
398
|
+
"""只读取固定元数据大小,估算扫描、排序和结果独立持有空间。
|
|
399
|
+
|
|
400
|
+
参数:
|
|
401
|
+
compiled: 已登记表达式,依赖及实际绑定冻结。
|
|
402
|
+
deadlines: 已检查元素类型的RuleDeadline tuple,可含很长的rule_id。
|
|
403
|
+
返回:
|
|
404
|
+
原生int字节数,随依赖、规则、来源上界和字符串长度增长。
|
|
405
|
+
异常:
|
|
406
|
+
KeyError: 内部实际绑定不能解析已登记依赖。
|
|
407
|
+
边界:
|
|
408
|
+
本步骤不访问当前样本、不调用next_expiry、不创建依赖或来源集合。
|
|
409
|
+
"""
|
|
410
|
+
# 来源数至多等于依赖数;浅字符串成本按每次保留引用及临时排序保守放大。
|
|
411
|
+
strings = sum(getsizeof(name) + getsizeof(compiled.bindings.resolve(name).source)
|
|
412
|
+
for name in compiled.dependencies)
|
|
413
|
+
strings += sum(getsizeof(deadline.rule_id) for deadline in deadlines)
|
|
414
|
+
# 两个身份最终由结果独立持有,上游关闭不会使这些引用退出本次计账。
|
|
415
|
+
strings += getsizeof(compiled.bindings.identity) + getsizeof(compiled.identity)
|
|
416
|
+
# 槽位上界覆盖至多每依赖两候选、每规则一候选、update及domain_end与排序key。
|
|
417
|
+
return 32768 + 8192 * (len(compiled.dependencies) + len(deadlines) + 2) + strings * 16
|
|
418
|
+
|
|
419
|
+
def _register(self, cost, time_ns, reasons, compiled):
|
|
420
|
+
"""仅构造完整结果,查询外层拿到对象后再登记。
|
|
421
|
+
|
|
422
|
+
参数:
|
|
423
|
+
cost: 已成功预留的本次字节数。
|
|
424
|
+
time_ns、reasons: 已选出的精确时刻和冻结原因tuple。
|
|
425
|
+
compiled: 当前owner登记对象,用于取得两个身份字符串。
|
|
426
|
+
返回:
|
|
427
|
+
BoundaryResult,尚未登记,外层保有局部清理句柄。
|
|
428
|
+
异常:
|
|
429
|
+
MemoryError、KeyboardInterrupt: 构造或登记失败/取消,查询清理原申请。
|
|
430
|
+
副作用:
|
|
431
|
+
不建立登记归属;不改变caller状态。
|
|
432
|
+
"""
|
|
433
|
+
# 结果只保存必要字符串,不保留compiled、样本或Detector来延长其寿命。
|
|
434
|
+
return BoundaryResult(self, cost, time_ns, reasons, compiled.bindings.identity, compiled.identity)
|
|
435
|
+
|
|
436
|
+
def query_next(self, compiled, *, after_ns: int, next_group_ns: int | None = None,
|
|
437
|
+
duration_deadlines: tuple[RuleDeadline, ...] = ()) -> BoundaryResult | None:
|
|
438
|
+
"""选择严格晚于已处理游标的下一边界,保留该时刻全部并列原因。
|
|
439
|
+
|
|
440
|
+
参数:
|
|
441
|
+
compiled: 当前表达式owner登记的CompiledExpression原对象。
|
|
442
|
+
after_ns: 原生int64纳秒,位于闭区间domain内且不早于state最后提交时刻。
|
|
443
|
+
next_group_ns: 下一完整更新组的原生int64时刻或None,必须严格晚于after。
|
|
444
|
+
duration_deadlines: RuleDeadline tuple;rule_id唯一,每个截止严格晚于after。
|
|
445
|
+
返回:
|
|
446
|
+
须close的BoundaryResult;after等于domain_end时返回None。
|
|
447
|
+
合法未来更新或截止超过domain_end时忽略,domain_end自身仍为候选。
|
|
448
|
+
异常:
|
|
449
|
+
TypeError、TimeOverflowError: 计划、tuple、快照或时间类型/范围错误。
|
|
450
|
+
ValueError: 未登记对象、域外或回溯游标、过期截止、重复rule_id。
|
|
451
|
+
ResultClosedError: 本owner或借用上游关闭。
|
|
452
|
+
BudgetExceededError、MemoryError、KeyboardInterrupt: 预留、扫描、构造或取消错误。
|
|
453
|
+
副作用:
|
|
454
|
+
只登记本次结果;失败或取消抵销申请,不提交state或推进Detector。
|
|
455
|
+
边界:
|
|
456
|
+
起点初始化由caller完成,不使用start-1;原因排序不决定结束分类。
|
|
457
|
+
after到域末时仍完整校验入参,不用结束状态掩盖错误截止或重复规则。
|
|
458
|
+
"""
|
|
459
|
+
# 先核对当前可用上游及登记对象本身,SHA或表达式文本相同不能替代对象登记。
|
|
460
|
+
self._ensure_open()
|
|
461
|
+
expressions = self._expressions
|
|
462
|
+
if (not isinstance(compiled, CompiledExpression) or id(compiled) not in expressions._stats
|
|
463
|
+
or not any(item is compiled for item in expressions._expressions)):
|
|
464
|
+
raise ValueError('只能查询当前表达式owner登记的CompiledExpression对象')
|
|
465
|
+
# 所有入口坐标保持原生int64,下一组不得回退;检查只读取冻结协议,不扫描TTL。
|
|
466
|
+
after = _require_native_ns(after_ns, 'boundary.after_ns')
|
|
467
|
+
if next_group_ns is not None:
|
|
468
|
+
_require_native_ns(next_group_ns, 'boundary.next_group_ns')
|
|
469
|
+
if next_group_ns <= after:
|
|
470
|
+
raise ValueError('下一完整更新时间必须严格晚于已处理游标')
|
|
471
|
+
if type(duration_deadlines) is not tuple or any(type(item) is not RuleDeadline for item in duration_deadlines):
|
|
472
|
+
raise TypeError('duration_deadlines需要RuleDeadline tuple')
|
|
473
|
+
# domain闭区间允许最后真实点,但state只支持从已提交组向未来查询。
|
|
474
|
+
holds, domain = expressions._holds, self._domain
|
|
475
|
+
if not domain.start_ns <= after <= domain.end_ns:
|
|
476
|
+
raise ValueError('边界游标超出当前domain')
|
|
477
|
+
last = holds._state.last_time_ns
|
|
478
|
+
if last is not None and after < last:
|
|
479
|
+
raise ValueError('边界游标不能早于最新已提交组')
|
|
480
|
+
# 申请覆盖查询所有容器、长字符串与输出;预算不足时尚未扫描当前TTL或EOF。
|
|
481
|
+
cost = self._query_cost(compiled, duration_deadlines)
|
|
482
|
+
before, owned, result = self._budget.ram_bytes, False, None
|
|
483
|
+
try:
|
|
484
|
+
# 申请完成后的返回取消也处于清理边界内,不留下未交付预算。
|
|
485
|
+
self._budget.reserve_ram(cost)
|
|
486
|
+
owned = True
|
|
487
|
+
# 重复检查需要set,必须在预留之后;域外未来截止也先按完整输入协议核对。
|
|
488
|
+
rule_ids = set()
|
|
489
|
+
for deadline in duration_deadlines:
|
|
490
|
+
if deadline.rule_id in rule_ids:
|
|
491
|
+
raise ValueError('duration截止快照rule_id重复')
|
|
492
|
+
rule_ids.add(deadline.rule_id)
|
|
493
|
+
if deadline.time_ns <= after:
|
|
494
|
+
raise ValueError('duration截止必须严格晚于已处理游标')
|
|
495
|
+
# 域末不产生下一个边界;所有输入已验证,本次临时申请由finally释放。
|
|
496
|
+
if after == domain.end_ns:
|
|
497
|
+
return None
|
|
498
|
+
# domain_end恒在当前游标之后,保证无更新、无样本和纯常量查询仍有收尾边界。
|
|
499
|
+
candidates = [(domain.end_ns, BoundaryReason('domain_end', ''))]
|
|
500
|
+
sources = set()
|
|
501
|
+
for name in compiled.dependencies:
|
|
502
|
+
# 每次从当前样本重算TTL,新更新覆盖旧截止;空样本不伪造定时器。
|
|
503
|
+
expiry = holds.next_expiry(name, after)
|
|
504
|
+
if expiry is not None and after < expiry <= domain.end_ns:
|
|
505
|
+
candidates.append((expiry, BoundaryReason('ttl', name)))
|
|
506
|
+
# 同来源多列只产生一项EOF;未知空来源终点保持None,不能补成域末。
|
|
507
|
+
source = compiled.bindings.resolve(name).source
|
|
508
|
+
if source not in sources:
|
|
509
|
+
sources.add(source)
|
|
510
|
+
end = holds._bounds[source][1]
|
|
511
|
+
if end is not None and after < end <= domain.end_ns:
|
|
512
|
+
candidates.append((end, BoundaryReason('source_eof', source)))
|
|
513
|
+
# 只加入合法域内的当前duration快照,不保存未选中timer供未来复用。
|
|
514
|
+
for deadline in duration_deadlines:
|
|
515
|
+
if deadline.time_ns <= domain.end_ns:
|
|
516
|
+
candidates.append((deadline.time_ns, BoundaryReason('duration', deadline.rule_id)))
|
|
517
|
+
# 下一完整组只是一项时刻证据;不消费组、不把timer或EOF标成实际更新。
|
|
518
|
+
if next_group_ns is not None and next_group_ns <= domain.end_ns:
|
|
519
|
+
candidates.append((next_group_ns, BoundaryReason('update', '')))
|
|
520
|
+
# 每次只选择一个最早时刻,保留同刻全部原因;排序只影响可检查展示顺序。
|
|
521
|
+
time_ns = min(time for time, _ in candidates)
|
|
522
|
+
reasons = tuple(sorted((reason for time, reason in candidates if time == time_ns), key=_reason_key))
|
|
523
|
+
result = self._register(cost, time_ns, reasons, compiled)
|
|
524
|
+
# 有局部对象才安装;部分add失败仅撤销当前对象,不扫描旧结果。
|
|
525
|
+
self._results.add(result)
|
|
526
|
+
# 成功以后查询金额移交结果,临时容器消失但保守上界保留到结果关闭。
|
|
527
|
+
owned = False
|
|
528
|
+
return result
|
|
529
|
+
except BaseException:
|
|
530
|
+
if result is not None:
|
|
531
|
+
result._discard()
|
|
532
|
+
raise
|
|
533
|
+
finally:
|
|
534
|
+
# 拒绝、构造/登记故障及取消均只抵销本次金额,caller最新状态保持原样。
|
|
535
|
+
if owned or result is None and self._budget.ram_bytes == before + cost:
|
|
536
|
+
self._budget.release_ram(cost)
|
|
537
|
+
|
|
538
|
+
def close(self):
|
|
539
|
+
"""关闭全部自有结果与固定申请,保留caller表达式、保持、状态和历史。
|
|
540
|
+
|
|
541
|
+
参数:
|
|
542
|
+
无。
|
|
543
|
+
返回:
|
|
544
|
+
None;重复关闭安全,也允许构造中途失败时收尾。
|
|
545
|
+
异常:
|
|
546
|
+
ValueError: 内部账本金额不一致,不能静默绕过。
|
|
547
|
+
KeyboardInterrupt: 子结果/固定申请未释放可重试,已释放不会再次扣账。
|
|
548
|
+
副作用:
|
|
549
|
+
逐项关闭自有结果并丢弃caller引用,不打开或删除文件。
|
|
550
|
+
"""
|
|
551
|
+
# 已关闭owner不能再次释放固定申请,部分构造失败时_results可能仍为None。
|
|
552
|
+
if self._closed:
|
|
553
|
+
return
|
|
554
|
+
# 逐项关闭不另复制全部活动结果;每个结果自身解除登记并抵销一次查询金额。
|
|
555
|
+
while self._results:
|
|
556
|
+
result = next(iter(self._results))
|
|
557
|
+
result.close()
|
|
558
|
+
# 释放后脱离取消可能留下已关闭登记,重试只移除该项,不再扣账。
|
|
559
|
+
self._results.discard(result)
|
|
560
|
+
# 固定金额独立于caller元数据申请,释放后只清理本owner字段。
|
|
561
|
+
cost, before, released = self._fixed_cost, self._budget.ram_bytes, False
|
|
562
|
+
try:
|
|
563
|
+
self._budget.release_ram(cost)
|
|
564
|
+
released = True
|
|
565
|
+
finally:
|
|
566
|
+
if released or self._budget.ram_bytes == before - cost:
|
|
567
|
+
self._closed, self._fixed_cost = True, 0
|
|
568
|
+
self._expressions = self._results = self._domain = None
|