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,264 @@
|
|
|
1
|
+
"""从封存的新历史取得有限的数值列和BOOL选择列,交付共同指标输入。
|
|
2
|
+
|
|
3
|
+
父对象拥有两路HistoricalCalculationBlocks和每路至多一个当前输入块。每次输出
|
|
4
|
+
最多batch_intervals个正区间,保留两路剩余范围而不收集整个窗口。
|
|
5
|
+
只回读已经解码并封存的新历史,不再次调用来源adapter或旧reader/decoder。
|
|
6
|
+
共同轴沿原零阶保持、TTL和末点语义;条件单独更新不能成为数值样本。
|
|
7
|
+
observation可指定原domain内已核实计算域,两路原样传递并按其与原请求取交集;
|
|
8
|
+
不派生context。None兼容原domain和原预算,本身不是实际观测证明。
|
|
9
|
+
|
|
10
|
+
构造先校验实际绑定与联合同步,固定状态和每个完整输出在创建前预约。
|
|
11
|
+
输出CalculationBlock独立持有金额和登记指针,旧输出不随下次推进变化。
|
|
12
|
+
父close关闭自有输出、两当前输入、两回读者及固定账目,不关闭借用历史。
|
|
13
|
+
取消前后核对实际预约/释放;构造清理持续失败保留原异常的恢复owner。
|
|
14
|
+
失败后不继续推进或返回前缀结果,已交付块仍独立可读至close。
|
|
15
|
+
本模块交付时间、样本或select口径输入,不做整窗归约或公共AnalysisRunner接线,也不承诺控制全进程RSS。
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
# 只组合原有限回读和公共时间输入协议,数值核及旧I/O保持独立。
|
|
19
|
+
from dataclasses import replace
|
|
20
|
+
from ..core.decoded_binding import DecodedBindings
|
|
21
|
+
from ..core.expression import CompiledExpression
|
|
22
|
+
from ..core.calculations import CalculationDefinition
|
|
23
|
+
from ..core.calculations_memory_reference import require_calculation_plan
|
|
24
|
+
from ..core.calculation_series_join import join_calculation_series, _joint_times
|
|
25
|
+
from ..core.models import Interval
|
|
26
|
+
from ..results.errors import ResultClosedError
|
|
27
|
+
from .history import DecodedHistoryStore, _metadata_bytes
|
|
28
|
+
from .hold import HoldContext
|
|
29
|
+
from .calculation_blocks import HistoricalCalculationBlocks, CalculationBlock, _calculation_observation
|
|
30
|
+
from .temporal_buffer import _BatchRegistry
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class HistoricalConditionalBlocks:
|
|
34
|
+
"""持有两路有限输入与独立输出登记,按共同窗口单向推进。
|
|
35
|
+
|
|
36
|
+
_cursor是尚未交付的半开区间左端;每路_current覆盖该点,过右端才换块。
|
|
37
|
+
点窗口只交付一次。已登记输出费用归各CalculationBlock,固定/未交付金额归父。
|
|
38
|
+
_failed或_closing后仅允许关闭,历史/原状态和绑定均由调用方管理。
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
def __init__(self, history, context, bindings, compiled, spec, condition, *,
|
|
42
|
+
backend='numpy', batch_intervals=64, observation=None):
|
|
43
|
+
"""核对联合依赖,预约固定金额,再创建两路自有分块者。
|
|
44
|
+
|
|
45
|
+
参数: history为封存历史,context/bindings为原保持和实际绑定,compiled
|
|
46
|
+
为值表达式,spec为时间、样本或select指标,condition为BOOL表达式;backend为
|
|
47
|
+
reference/numpy,batch_intervals为输出正区间上限。
|
|
48
|
+
observation为原domain内已核实Interval;None兼容原domain,不证明实际观测。
|
|
49
|
+
返回: 新有限联合owner。异常: 类型/能力/同步/预算/取消错误原样传播;
|
|
50
|
+
持续清理失败时原异常的conditional_blocks_cleanup_owner可再次close。
|
|
51
|
+
"""
|
|
52
|
+
# 先检查真实模型和支持范围,不用名称字符串冒充执行身份。
|
|
53
|
+
if (not isinstance(history, DecodedHistoryStore) or not isinstance(context, HoldContext)
|
|
54
|
+
or not isinstance(bindings, DecodedBindings) or not isinstance(compiled, CompiledExpression)
|
|
55
|
+
or not isinstance(spec, CalculationDefinition) or not isinstance(condition, CompiledExpression)):
|
|
56
|
+
raise TypeError('条件历史分块需要封存历史、上下文、实际绑定及两个编译表达式')
|
|
57
|
+
history._check('sealed')
|
|
58
|
+
if backend not in ('reference', 'numpy') or type(batch_intervals) is not int or batch_intervals < 1:
|
|
59
|
+
raise ValueError('条件历史分块需要合法后端和正整数batch_intervals')
|
|
60
|
+
# 三种samples与select保留原值更新标记,条件或TTL边界不会生成真实样本/选择行。
|
|
61
|
+
if spec.operation not in ('integral', 'min_time', 'max_time', 'time_weighted_mean', 'duration',
|
|
62
|
+
'sample_minimum', 'sample_maximum', 'sample_mean', 'select'):
|
|
63
|
+
raise ValueError('条件历史输入只支持已接线的时间、样本与select口径')
|
|
64
|
+
# 行流保留数值/BOOL/ENUM原值单位,不借联合条件静默转换输出。
|
|
65
|
+
if spec.operation == 'select' and spec.output_unit not in (None, compiled.root.unit):
|
|
66
|
+
raise ValueError('条件select历史输入必须保留原表达式单位')
|
|
67
|
+
if compiled.bindings.identity != bindings.identity:
|
|
68
|
+
raise ValueError('值表达式与当前实际绑定不同')
|
|
69
|
+
require_calculation_plan(compiled, spec, condition)
|
|
70
|
+
# 两路必须在同一显式观测域内计算,不能缩短原context或以短源EOF裁整个会话。
|
|
71
|
+
observed = _calculation_observation(context, observation)
|
|
72
|
+
left = max(observed.start_ns, spec.window.start_ns)
|
|
73
|
+
right = min(observed.end_ns, spec.window.end_ns)
|
|
74
|
+
actual = Interval(left, right) if left <= right else None
|
|
75
|
+
metadata = _metadata_bytes((context, bindings.sources, compiled.identity, condition.identity, spec))
|
|
76
|
+
# 先建立能在预约/子构造失败时安全关闭的固定字段,不持有任何借用资源的所有权。
|
|
77
|
+
self._budget, self._fixed_cost, self._inflight_cost = history.budget, 0, 0
|
|
78
|
+
self._closed = self._closing = self._failed = self._done = False
|
|
79
|
+
self._results = self._unpublished_block = None
|
|
80
|
+
self._blocks, self._current = (None, None), (None, None)
|
|
81
|
+
self._actual, self._cursor, self._batch_intervals = actual, left, batch_intervals
|
|
82
|
+
self._observation = observation
|
|
83
|
+
self._step_cost = 0
|
|
84
|
+
# 显式引用加原固定费;默认None不改变任何原金额,也不强制子层走显式分支。
|
|
85
|
+
fixed = 131072 + 16 * metadata + (0 if observation is None else 16 * _metadata_bytes(observation))
|
|
86
|
+
building = 0
|
|
87
|
+
try:
|
|
88
|
+
self._reserve(fixed, fixed=True)
|
|
89
|
+
self._results = _BatchRegistry()
|
|
90
|
+
self._blocks, self._current = [None, None], [None, None]
|
|
91
|
+
self._blocks[0] = HistoricalCalculationBlocks(history, context, bindings, compiled, spec,
|
|
92
|
+
backend=backend, batch_intervals=batch_intervals,
|
|
93
|
+
observation=self._observation)
|
|
94
|
+
# BOOL分块仅提供原条件列;内部duration配置不执行时长统计或改原请求。
|
|
95
|
+
building = 1
|
|
96
|
+
condition_spec = replace(spec, operation='duration', output_unit=None)
|
|
97
|
+
self._blocks[1] = HistoricalCalculationBlocks(history, context, bindings, condition, condition_spec,
|
|
98
|
+
backend=backend, batch_intervals=batch_intervals,
|
|
99
|
+
observation=self._observation)
|
|
100
|
+
except BaseException as exc:
|
|
101
|
+
# 尚未赋值的失败子构造可能已持有资源,必须从原异常接管其恢复句柄。
|
|
102
|
+
child = getattr(exc, 'calculation_blocks_cleanup_owner', None)
|
|
103
|
+
if child is not None:
|
|
104
|
+
self._blocks[building] = child
|
|
105
|
+
for attempt in range(2):
|
|
106
|
+
try:
|
|
107
|
+
self.close()
|
|
108
|
+
break
|
|
109
|
+
except BaseException as cleanup:
|
|
110
|
+
exc.add_note(f'条件历史初始化清理第{attempt + 1}次附加失败: {type(cleanup).__name__}')
|
|
111
|
+
if not self._closed:
|
|
112
|
+
exc.conditional_blocks_cleanup_owner = self
|
|
113
|
+
exc.add_note('释放恢复后调用conditional_blocks_cleanup_owner.close()')
|
|
114
|
+
raise
|
|
115
|
+
|
|
116
|
+
@property
|
|
117
|
+
def closed(self):
|
|
118
|
+
"""读取全部自有资源关闭事实。参数: 无。返回: bool。异常: 无。"""
|
|
119
|
+
return self._closed
|
|
120
|
+
|
|
121
|
+
@property
|
|
122
|
+
def failed(self):
|
|
123
|
+
"""读取不可继续推进的失败标志。参数: 无。返回: bool。异常: 无。"""
|
|
124
|
+
return self._failed
|
|
125
|
+
|
|
126
|
+
def __iter__(self):
|
|
127
|
+
"""返回本owner。参数: 无。返回: self。异常: 无。"""
|
|
128
|
+
return self
|
|
129
|
+
|
|
130
|
+
def _reserve(self, cost, *, fixed=False):
|
|
131
|
+
"""即使预约返回途中取消,也及时记录真正取得的自有金额。
|
|
132
|
+
|
|
133
|
+
参数: cost为保守bytes;fixed区分构造和当前未交付输出。
|
|
134
|
+
返回: None。异常: 超预算/取消原样传播,不靠发布后的总余额推断所有权。
|
|
135
|
+
"""
|
|
136
|
+
before = self._budget.ram_bytes
|
|
137
|
+
try:
|
|
138
|
+
self._budget.reserve_ram(cost)
|
|
139
|
+
finally:
|
|
140
|
+
# 本次原子预约没有其他子操作;真实增加cost才记录,失败前未取得则为0。
|
|
141
|
+
if self._budget.ram_bytes == before + cost:
|
|
142
|
+
if fixed:
|
|
143
|
+
self._fixed_cost = cost
|
|
144
|
+
else:
|
|
145
|
+
self._inflight_cost = cost
|
|
146
|
+
|
|
147
|
+
def _load(self, side):
|
|
148
|
+
"""只在本路当前块到达游标时关闭并取得下一块。
|
|
149
|
+
|
|
150
|
+
参数: side为0值/1条件。返回: 覆盖游标的有限CalculationSeries。
|
|
151
|
+
异常: 回读/关闭失败,或输入提前结束/范围错位;不能将意外EOF当正常完成。
|
|
152
|
+
"""
|
|
153
|
+
current = self._current[side]
|
|
154
|
+
if current is not None and current.series.observation.end_ns == self._cursor:
|
|
155
|
+
current.close()
|
|
156
|
+
self._current[side] = None
|
|
157
|
+
if self._current[side] is None:
|
|
158
|
+
try:
|
|
159
|
+
self._current[side] = next(self._blocks[side])
|
|
160
|
+
except StopIteration as exc:
|
|
161
|
+
raise ValueError('条件历史输入在完整窗口交付前意外结束') from exc
|
|
162
|
+
series = self._current[side].series
|
|
163
|
+
# 初始点和最终点可以是零区间;非终点旧块必须覆盖一个正区间。
|
|
164
|
+
if (series.observation.start_ns > self._cursor or series.observation.end_ns < self._cursor
|
|
165
|
+
or (self._cursor < self._actual.end_ns and series.observation.end_ns == self._cursor)
|
|
166
|
+
or series.observation.end_ns > self._actual.end_ns):
|
|
167
|
+
raise ValueError('条件历史两路当前块没有覆盖同一实际游标')
|
|
168
|
+
return series
|
|
169
|
+
|
|
170
|
+
def __next__(self):
|
|
171
|
+
"""产生一个有独立预算的联合块,保留尚未交付的两路剩余区间。
|
|
172
|
+
|
|
173
|
+
参数: 无。返回: CalculationBlock,最多batch_intervals+1行。
|
|
174
|
+
异常: StopIteration仅表示正常完整结束/无交集;其余失败后只允许close。
|
|
175
|
+
"""
|
|
176
|
+
if self._closed or self._closing or self._failed:
|
|
177
|
+
raise ResultClosedError('条件历史分块已关闭、正在关闭或推进失败')
|
|
178
|
+
if self._done or self._actual is None:
|
|
179
|
+
self._done = True
|
|
180
|
+
raise StopIteration
|
|
181
|
+
try:
|
|
182
|
+
value, condition = self._load(0), self._load(1)
|
|
183
|
+
right = min(value.observation.end_ns, condition.observation.end_ns)
|
|
184
|
+
candidate = Interval(self._cursor, right)
|
|
185
|
+
# 不保存合并轴,只找到第N个正区间右端;剩余输入块由下次继续使用。
|
|
186
|
+
for index, time in enumerate(_joint_times(value, condition, candidate)):
|
|
187
|
+
if index == self._batch_intervals:
|
|
188
|
+
right = time
|
|
189
|
+
break
|
|
190
|
+
window = Interval(self._cursor, right)
|
|
191
|
+
# 两份输入、临时列与冻结输出的并存,完整来源/诊断均按当前元数据计费。
|
|
192
|
+
self._step_cost = 65536 + (self._batch_intervals + 1) * 8192 + 16 * _metadata_bytes((value, condition))
|
|
193
|
+
self._reserve(self._step_cost)
|
|
194
|
+
series = join_calculation_series(value, condition, window=window, max_intervals=self._batch_intervals)
|
|
195
|
+
self._unpublished_block = CalculationBlock(self, self._step_cost, series)
|
|
196
|
+
block = self._unpublished_block
|
|
197
|
+
# 输出对象一旦取得金额,未交付关闭以它为准,不重复抵销父inflight。
|
|
198
|
+
self._inflight_cost = 0
|
|
199
|
+
self._results.add(block)
|
|
200
|
+
self._unpublished_block = None
|
|
201
|
+
self._cursor, self._done = right, right == self._actual.end_ns
|
|
202
|
+
return block
|
|
203
|
+
except BaseException as exc:
|
|
204
|
+
self._failed = True
|
|
205
|
+
try:
|
|
206
|
+
self._release_unpublished()
|
|
207
|
+
except BaseException as cleanup:
|
|
208
|
+
# 保留原推进错误与恢复字段,不能让清理失败掩盖真正失败原因。
|
|
209
|
+
exc.add_note(f'条件历史未交付块清理附加失败: {type(cleanup).__name__}')
|
|
210
|
+
raise
|
|
211
|
+
|
|
212
|
+
def _release_unpublished(self):
|
|
213
|
+
"""关闭未交付块或抵销尚未转交的输出金额,释放前后取消均可重试。
|
|
214
|
+
|
|
215
|
+
参数: 无。返回: None。异常: 块关闭/扣账/取消错误原样传播。
|
|
216
|
+
"""
|
|
217
|
+
if self._unpublished_block is not None:
|
|
218
|
+
self._inflight_cost = 0
|
|
219
|
+
self._unpublished_block.close()
|
|
220
|
+
self._unpublished_block = None
|
|
221
|
+
if self._inflight_cost:
|
|
222
|
+
cost, before, released = self._inflight_cost, self._budget.ram_bytes, False
|
|
223
|
+
try:
|
|
224
|
+
self._budget.release_ram(cost)
|
|
225
|
+
released = True
|
|
226
|
+
finally:
|
|
227
|
+
if released or self._budget.ram_bytes == before - cost:
|
|
228
|
+
self._inflight_cost = 0
|
|
229
|
+
|
|
230
|
+
def close(self):
|
|
231
|
+
"""依次关闭自有输出、当前块、两回读者和固定金额,保留借用资源。
|
|
232
|
+
|
|
233
|
+
参数: 无。返回: None,重复关闭安全。异常: 关闭/释放取消可重试。
|
|
234
|
+
"""
|
|
235
|
+
if self._closed:
|
|
236
|
+
return
|
|
237
|
+
self._closing = True
|
|
238
|
+
self._release_unpublished()
|
|
239
|
+
while self._results:
|
|
240
|
+
# 输出可能已释放但脱链途中取消;重试关闭需完成残留登记的最小收尾。
|
|
241
|
+
block = self._results._first
|
|
242
|
+
block.close()
|
|
243
|
+
if block.closed and block._registry is self._results:
|
|
244
|
+
self._results.discard(block)
|
|
245
|
+
for side in range(2):
|
|
246
|
+
if self._current[side] is not None:
|
|
247
|
+
self._current[side].close()
|
|
248
|
+
self._current[side] = None
|
|
249
|
+
for side in range(2):
|
|
250
|
+
if self._blocks[side] is not None:
|
|
251
|
+
self._blocks[side].close()
|
|
252
|
+
self._blocks[side] = None
|
|
253
|
+
cost, before, released = self._fixed_cost, self._budget.ram_bytes, False
|
|
254
|
+
try:
|
|
255
|
+
if cost:
|
|
256
|
+
self._budget.release_ram(cost)
|
|
257
|
+
released = True
|
|
258
|
+
finally:
|
|
259
|
+
# 构造预约前失败也可关闭;真实固定金额释放后才宣布整体完成。
|
|
260
|
+
if released or self._budget.ram_bytes == before - cost:
|
|
261
|
+
self._fixed_cost = 0
|
|
262
|
+
self._closed = True
|
|
263
|
+
self._results = self._actual = None
|
|
264
|
+
self._observation = None
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"""有限步消费已创建的历史指标分块,交付最终条件积分 CalculationResult。
|
|
2
|
+
|
|
3
|
+
输入为调用方拥有的新鲜 HistoricalConditionalBlocks 及真实观测范围;不自行构造回读组件。
|
|
4
|
+
每个 step 最多取得一个有限块,独立面积核生成 Terms,条件归约累计跨块数值与值/条件覆盖、FALSE及真实样本事实。
|
|
5
|
+
EOF 后核对完整真实交集;只有正请求充分观测且全FALSE才可返回空选择0,再在已预约元数据空间内按 report/strict 等政策分类。
|
|
6
|
+
只拥有取得的当前块、归约及最终结果;借用 blocks/history/budget 均由调用方关闭。
|
|
7
|
+
新层 RAM 计费含有限块数组与随未知/来源增长的结果容器,不代表整进程 RSS。
|
|
8
|
+
文件读取由被借用的新历史分块执行,本层不写文件、不额外调用旧 reader/decoder。
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# 只组合已有真实模块;两条面积/归约数值路径独立,最终分类为共享非数值规则。
|
|
12
|
+
from ..core.conditional_integral_result import make_conditional_integral_result
|
|
13
|
+
from ..core.integral_sum import require_partial_limit
|
|
14
|
+
from ..core.conditional_integral_terms_reference import compute_conditional_integral_terms_reference
|
|
15
|
+
from ..core.conditional_integral_terms_numpy import compute_conditional_integral_terms_numpy
|
|
16
|
+
from ..core.models import Interval
|
|
17
|
+
from ..core.calculations import CalculationResult
|
|
18
|
+
from ..results.errors import ResultClosedError
|
|
19
|
+
from .history import _metadata_bytes
|
|
20
|
+
from .retained_metadata import retained_metadata_bytes
|
|
21
|
+
from .historical_conditional_blocks import HistoricalConditionalBlocks
|
|
22
|
+
from .conditional_integral_reduction import ConditionalIntegralReduction
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class HistoricalConditionalIntegral:
|
|
26
|
+
"""持有一次独占推进的积分分析,完成前不开放前缀结果。
|
|
27
|
+
|
|
28
|
+
blocks 必须尚未消费,存活期间不能由其他调用者推进;本对象不接管其所有权。
|
|
29
|
+
推进/分类/取消异常后只允许 close,数值失败仍作为完整带诊断的结果交付。
|
|
30
|
+
result 借用至 close;独立保留引用需由调用方另计预算。
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
def __init__(self, blocks: HistoricalConditionalBlocks, observation: Interval, *, partial_limit: int = 4096):
|
|
34
|
+
"""校验新鲜真实分块者,先预约固定状态再创建自有归约。
|
|
35
|
+
|
|
36
|
+
参数: blocks 为已创建的借用分块者;observation 为原真实域;partial_limit 为误差容量。
|
|
37
|
+
返回: None,初始化新的分析 owner。异常: 配置、预算、分配和取消原样传播。
|
|
38
|
+
持续清理失败时原异常.historical_conditional_integral_cleanup_owner 提供重试 close 的句柄。
|
|
39
|
+
"""
|
|
40
|
+
# 已有回读构造清理风险不在本层隐藏,必须由调用方先成功创建并保有句柄。
|
|
41
|
+
if not isinstance(blocks, HistoricalConditionalBlocks) or not isinstance(observation, Interval):
|
|
42
|
+
raise TypeError('历史积分需要真实HistoricalConditionalBlocks和Interval')
|
|
43
|
+
if (blocks.closed or blocks.failed or blocks._closing or blocks._done
|
|
44
|
+
or any(block is not None for block in blocks._current) or blocks._results):
|
|
45
|
+
raise ValueError('条件历史积分需要尚未消费且开放的联合分块者')
|
|
46
|
+
# 子对象可能已被错误地提前关闭或清理;先拒绝,再读取其可被清空的请求字段。
|
|
47
|
+
if any(child.closed or child.failed or child._closing for child in blocks._blocks):
|
|
48
|
+
raise ValueError('联合输入的子回读者已关闭、失败或正在清理')
|
|
49
|
+
value_blocks = blocks._blocks[0]
|
|
50
|
+
if value_blocks._spec.operation != 'integral':
|
|
51
|
+
raise ValueError('条件历史积分只支持integral')
|
|
52
|
+
if any(child._pending is not None or child._results or child._done
|
|
53
|
+
for child in blocks._blocks):
|
|
54
|
+
raise ValueError('联合输入的子回读者已被其他调用者推进')
|
|
55
|
+
limit = require_partial_limit(partial_limit)
|
|
56
|
+
left = max(observation.start_ns, value_blocks._spec.window.start_ns)
|
|
57
|
+
right = min(observation.end_ns, value_blocks._spec.window.end_ns)
|
|
58
|
+
actual = Interval(left, right) if left <= right else None
|
|
59
|
+
if actual != blocks._actual:
|
|
60
|
+
raise ValueError('真实观测与分块者的原请求交集不一致')
|
|
61
|
+
# 集成层读取同包既有冻结元数据,身份/单位来自实际compiled,而非外部自由文字。
|
|
62
|
+
self._blocks, self._budget = blocks, blocks._budget
|
|
63
|
+
self._backend = value_blocks._backend
|
|
64
|
+
self._held_cost = 0
|
|
65
|
+
self._reduction = self._current_block = self._result = None
|
|
66
|
+
self._failed = self._finished = self._closed = self._closing = False
|
|
67
|
+
cost = 65536 + 16 * _metadata_bytes((value_blocks._spec, observation, value_blocks._compiled.identity))
|
|
68
|
+
try:
|
|
69
|
+
self._reserve(cost)
|
|
70
|
+
self._reduction = ConditionalIntegralReduction(self._budget, value_blocks._spec, observation,
|
|
71
|
+
value_blocks._compiled.root.unit, value_blocks._compiled.identity,
|
|
72
|
+
backend=self._backend, partial_limit=limit)
|
|
73
|
+
except BaseException as exc:
|
|
74
|
+
# 自有归约构造持续清理失败时接管其公开恢复句柄,借用blocks仍不关闭。
|
|
75
|
+
child = getattr(exc, 'conditional_integral_reduction_cleanup_owner', None)
|
|
76
|
+
if child is not None:
|
|
77
|
+
self._reduction = child
|
|
78
|
+
try:
|
|
79
|
+
self.close()
|
|
80
|
+
except BaseException as cleanup:
|
|
81
|
+
exc.add_note(f'历史积分构造清理失败: {type(cleanup).__name__}')
|
|
82
|
+
if not self._closed:
|
|
83
|
+
try:
|
|
84
|
+
self.close()
|
|
85
|
+
except BaseException as retry:
|
|
86
|
+
exc.add_note(f'历史积分构造清理重试失败: {type(retry).__name__}')
|
|
87
|
+
if not self._closed:
|
|
88
|
+
exc.historical_conditional_integral_cleanup_owner = self
|
|
89
|
+
exc.add_note('释放恢复后调用historical_conditional_integral_cleanup_owner.close()')
|
|
90
|
+
raise
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def closed(self) -> bool:
|
|
94
|
+
"""读取实际关闭状态。参数: 无。返回: bool。异常: 无。"""
|
|
95
|
+
return self._closed # 仅自有金额及子owner已关闭才成立。
|
|
96
|
+
|
|
97
|
+
@property
|
|
98
|
+
def failed(self) -> bool:
|
|
99
|
+
"""读取操作失败状态。参数: 无。返回: bool。异常: 无。"""
|
|
100
|
+
return self._failed # 与可交付的数值失败CalculationResult区分。
|
|
101
|
+
|
|
102
|
+
@property
|
|
103
|
+
def finished(self) -> bool:
|
|
104
|
+
"""读取完整EOF分类事实。参数: 无。返回: bool。异常: 无。"""
|
|
105
|
+
return self._finished # 已读最后一块不等于分类完成。
|
|
106
|
+
|
|
107
|
+
@property
|
|
108
|
+
def result(self) -> CalculationResult:
|
|
109
|
+
"""借出完整窗口最终指标,关闭后不再开放。
|
|
110
|
+
|
|
111
|
+
参数: 无。返回: CalculationResult。异常: 未完成、失败或关闭时拒绝。
|
|
112
|
+
"""
|
|
113
|
+
self._require_open()
|
|
114
|
+
if self._failed or not self._finished:
|
|
115
|
+
raise RuntimeError('历史积分尚未成功完成')
|
|
116
|
+
return self._result # 所有来源/诊断仍由自有计费状态持有。
|
|
117
|
+
|
|
118
|
+
def _require_open(self) -> None:
|
|
119
|
+
"""拒绝关闭或清理中操作。参数: 无。返回: None。异常: ResultClosedError。"""
|
|
120
|
+
if self._closed or self._closing:
|
|
121
|
+
raise ResultClosedError('历史积分已关闭或正在清理')
|
|
122
|
+
|
|
123
|
+
def _reserve(self, amount: int) -> None:
|
|
124
|
+
"""按实际账本增加自有预算,覆盖成功后取消。
|
|
125
|
+
|
|
126
|
+
参数: amount 为 bytes。返回: None。异常: 原预算或取消异常。
|
|
127
|
+
"""
|
|
128
|
+
before = self._budget.ram_bytes
|
|
129
|
+
try:
|
|
130
|
+
self._budget.reserve_ram(amount)
|
|
131
|
+
finally:
|
|
132
|
+
# 单线程借用账本,成功后取消仍须持有该笔金额供关闭。
|
|
133
|
+
if self._budget.ram_bytes == before + amount:
|
|
134
|
+
self._held_cost += amount
|
|
135
|
+
|
|
136
|
+
def _release(self, amount: int) -> None:
|
|
137
|
+
"""按实际账本减少自有预算,释放前取消仍可重试。
|
|
138
|
+
|
|
139
|
+
参数: amount 为 bytes。返回: None。异常: 原释放或取消异常。
|
|
140
|
+
"""
|
|
141
|
+
before = self._budget.ram_bytes
|
|
142
|
+
try:
|
|
143
|
+
self._budget.release_ram(amount)
|
|
144
|
+
finally:
|
|
145
|
+
if self._budget.ram_bytes == before - amount:
|
|
146
|
+
self._held_cost -= amount # 成功后取消不能再扣同一笔。
|
|
147
|
+
|
|
148
|
+
def _finish(self) -> None:
|
|
149
|
+
"""在真实EOF后核对覆盖、预约完整元数据空间并分类。
|
|
150
|
+
|
|
151
|
+
参数: 无。返回: None。异常: 覆盖、预算、分配或取消错误传播。
|
|
152
|
+
"""
|
|
153
|
+
facts = number = result = None
|
|
154
|
+
try:
|
|
155
|
+
self._reduction.finish()
|
|
156
|
+
facts, number = self._reduction.facts, self._reduction.result
|
|
157
|
+
# refs不深复制;两类未知范围分类会分配新容器,按范围数另留实际工作余量。
|
|
158
|
+
self._reserve(65536 + retained_metadata_bytes(facts) + 4096 * (
|
|
159
|
+
len(facts.value_unknown_ranges) + len(facts.condition_unknown_ranges)))
|
|
160
|
+
result = make_conditional_integral_result(facts, number)
|
|
161
|
+
self._result = result
|
|
162
|
+
self._finished = True # 安装成功才开放整窗结果,完成后不再消费输入。
|
|
163
|
+
finally:
|
|
164
|
+
# 不把已释放费用覆盖的本层完成快照留在失败traceback局部中。
|
|
165
|
+
facts = number = result = None
|
|
166
|
+
|
|
167
|
+
def step(self) -> bool:
|
|
168
|
+
"""最多消费一个有限指标块;确认EOF并完成分类时返回False。
|
|
169
|
+
|
|
170
|
+
参数: 无。返回: True为消费了一块,False为已完成;完成后重复调用安全。
|
|
171
|
+
异常: 真实读取、预算、数值模型、分配、关闭或取消错误;此后只允许close。
|
|
172
|
+
"""
|
|
173
|
+
self._require_open()
|
|
174
|
+
if self._failed:
|
|
175
|
+
raise RuntimeError('失败的历史积分只能关闭')
|
|
176
|
+
if self._finished:
|
|
177
|
+
return False
|
|
178
|
+
terms = None
|
|
179
|
+
try:
|
|
180
|
+
# 只把next的StopIteration当EOF,核内异常不能被误解释为成功结束。
|
|
181
|
+
try:
|
|
182
|
+
self._current_block = next(self._blocks)
|
|
183
|
+
except StopIteration:
|
|
184
|
+
self._finish()
|
|
185
|
+
return False
|
|
186
|
+
# 当前块归本次分析所有;面积临时列(N或N-1)在计算前另行保守预约。
|
|
187
|
+
workspace = 65536 + 1024 * len(self._current_block.series.times_ns)
|
|
188
|
+
self._reserve(workspace)
|
|
189
|
+
compute = compute_conditional_integral_terms_reference if self._backend == 'reference' else compute_conditional_integral_terms_numpy
|
|
190
|
+
terms = compute(self._current_block.series, self._blocks._blocks[0]._spec)
|
|
191
|
+
self._reduction.push(terms)
|
|
192
|
+
terms = None # 不让有限块输出越过其工作空间存活期。
|
|
193
|
+
self._current_block.close()
|
|
194
|
+
self._current_block = None
|
|
195
|
+
self._release(workspace)
|
|
196
|
+
return True
|
|
197
|
+
except BaseException:
|
|
198
|
+
self._failed = True # 前缀和自有句柄保留以便显式关闭,不交付半成品。
|
|
199
|
+
raise
|
|
200
|
+
finally:
|
|
201
|
+
# 条件分支同样不让push异常的TB钉住本层新面积/选择列。
|
|
202
|
+
terms = None
|
|
203
|
+
|
|
204
|
+
def close(self) -> None:
|
|
205
|
+
"""关闭自有块、归约和最终结果,不关闭借用分块者或账本。
|
|
206
|
+
|
|
207
|
+
参数: 无。返回: None,重复成功关闭无副作用。
|
|
208
|
+
异常: 子关闭或预算取消原样传播;实际释放前后按句柄/账本支持重试。
|
|
209
|
+
"""
|
|
210
|
+
if self._closed:
|
|
211
|
+
return
|
|
212
|
+
self._closing = True
|
|
213
|
+
try:
|
|
214
|
+
# 每层只释放自己的金额,不能用总账差额替代未知的借用资源成本。
|
|
215
|
+
if self._current_block is not None:
|
|
216
|
+
self._current_block.close()
|
|
217
|
+
self._current_block = None
|
|
218
|
+
if self._reduction is not None:
|
|
219
|
+
self._reduction.close()
|
|
220
|
+
self._release(self._held_cost)
|
|
221
|
+
finally:
|
|
222
|
+
# 释放后取消也可结束;未关闭的子或当前块保留在owner上供再次close。
|
|
223
|
+
reduction_closed = self._reduction is None or self._reduction.closed
|
|
224
|
+
if self._current_block is None and reduction_closed and self._held_cost == 0:
|
|
225
|
+
self._result = self._reduction = self._blocks = None
|
|
226
|
+
self._closed = True
|