dttlib 0.8.2__tar.gz → 0.9.1__tar.gz
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.
- {dttlib-0.8.2 → dttlib-0.9.1}/Cargo.lock +8 -8
- {dttlib-0.8.2 → dttlib-0.9.1}/Cargo.toml +3 -3
- {dttlib-0.8.2 → dttlib-0.9.1}/PKG-INFO +1 -1
- dttlib-0.9.1/build.rs +18 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/dtt_macros/src/builder_lite.rs +25 -1
- {dttlib-0.8.2 → dttlib-0.9.1}/dttlib.pyi +251 -26
- {dttlib-0.8.2 → dttlib-0.9.1}/pipelines/src/accumulator.rs +15 -5
- {dttlib-0.8.2 → dttlib-0.9.1}/pipelines/src/lib.rs +80 -56
- {dttlib-0.8.2 → dttlib-0.9.1}/pipelines/src/pipe.rs +7 -7
- {dttlib-0.8.2 → dttlib-0.9.1}/pipelines/src/publisher.rs +17 -7
- {dttlib-0.8.2 → dttlib-0.9.1}/pipelines/src/python.rs +54 -15
- {dttlib-0.8.2 → dttlib-0.9.1}/pipelines/src/stateless/mod.rs +14 -11
- dttlib-0.9.1/pipelines/src/stateless/pure.rs +209 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pipelines/src/unsynced_pipe.rs +7 -7
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/arithmetic/average.rs +3 -2
- dttlib-0.9.1/src/analysis/arithmetic/complex.rs +34 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/arithmetic/mod.rs +2 -0
- dttlib-0.9.1/src/analysis/arithmetic/phase.rs +29 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/arithmetic/real.rs +4 -3
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/arithmetic/sqrt.rs +3 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/conditioning/convert.rs +3 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/conditioning/decimate.rs +9 -5
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/conditioning/heterodyne.rs +3 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/conditioning/mod.rs +61 -40
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/conditioning/partition.rs +4 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/conditioning/subtract_start_average.rs +5 -3
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/conditioning/time_delay.rs +6 -5
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/conditioning/time_shift.rs +3 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/conditioning/trim.rs +4 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/fourier_tools/asd.rs +4 -3
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/fourier_tools/csd.rs +3 -3
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/fourier_tools/fft.rs +1 -1
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/general/maybe_into.rs +2 -2
- dttlib-0.9.1/src/analysis/graph/analysis/analysis_edge.rs +82 -0
- dttlib-0.9.1/src/analysis/graph/analysis/analysis_node.rs +59 -0
- dttlib-0.9.1/src/analysis/graph/analysis/graph_to_pipeline.rs +932 -0
- dttlib-0.9.1/src/analysis/graph/analysis/mod.rs +819 -0
- dttlib-0.9.1/src/analysis/graph/analysis/output_source.rs +331 -0
- dttlib-0.9.1/src/analysis/graph/analysis/view_graph_to_pipeline.rs +743 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/graph/mod.rs +0 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/graph/scheme.rs +44 -3
- dttlib-0.9.1/src/analysis/result/analysis_id.rs +316 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/result/analysis_result.rs +11 -9
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/result/edge_data_type.rs +83 -84
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/result/freq_domain_value.rs +2 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/result/mod.rs +1 -1
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/result/record.rs +7 -3
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/result/time_domain_value.rs +2 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/scope/downsample.rs +34 -23
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/scope/inline_fft.rs +4 -3
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/scope/splice.rs +11 -8
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/types/frequency_domain_array.rs +42 -7
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/types/math_traits.rs +12 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/types/time_domain_array.rs +77 -12
- {dttlib-0.8.2 → dttlib-0.9.1}/src/data_source/buffer.rs +9 -4
- {dttlib-0.8.2 → dttlib-0.9.1}/src/data_source/data_distributor.rs +30 -13
- {dttlib-0.8.2 → dttlib-0.9.1}/src/data_source/dummy.rs +30 -20
- {dttlib-0.8.2 → dttlib-0.9.1}/src/data_source/nds2_direct.rs +12 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/data_source/nds_cache/mod.rs +12 -5
- {dttlib-0.8.2 → dttlib-0.9.1}/src/data_source/random.rs +30 -20
- {dttlib-0.8.2 → dttlib-0.9.1}/src/errors.rs +16 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/gds_sigp/decimate.rs +2 -3
- {dttlib-0.8.2 → dttlib-0.9.1}/src/gds_sigp/fft.rs +6 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/lib.rs +6 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/channel_params/channel.rs +15 -1
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/channel_params/channel_id.rs +59 -14
- dttlib-0.9.1/src/params/channel_params/channel_name.rs +70 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/channel_params/channel_settings.rs +52 -11
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/channel_params/mod.rs +3 -1
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/channel_params/unit.rs +7 -3
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/custom_pipeline.rs +24 -11
- {dttlib-0.8.2 → dttlib-0.9.1}/src/python/dtt_types.rs +2 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/python/dttlib.rs +10 -4
- {dttlib-0.8.2 → dttlib-0.9.1}/src/run.rs +5 -4
- {dttlib-0.8.2 → dttlib-0.9.1}/src/run_context.rs +1 -1
- {dttlib-0.8.2 → dttlib-0.9.1}/src/scope_view/mod.rs +5 -5
- dttlib-0.9.1/src/scope_view/pipeline_graph.rs +340 -0
- dttlib-0.9.1/src/scope_view/view_set.rs +259 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/timeline/ffttools.rs +9 -1
- {dttlib-0.8.2 → dttlib-0.9.1}/src/timeline/general.rs +11 -3
- {dttlib-0.8.2 → dttlib-0.9.1}/src/timeline/init.rs +35 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/src/timeline/mod.rs +9 -10
- {dttlib-0.8.2 → dttlib-0.9.1}/src/user/mod.rs +21 -10
- {dttlib-0.8.2 → dttlib-0.9.1}/test_dttlib.py +35 -2
- {dttlib-0.8.2 → dttlib-0.9.1}/user_messages/src/lib.rs +20 -1
- dttlib-0.8.2/build.rs +0 -52
- dttlib-0.8.2/pipelines/src/stateless/pure.rs +0 -89
- dttlib-0.8.2/src/analysis/graph/analysis.rs +0 -956
- dttlib-0.8.2/src/analysis/graph/graph_to_pipeline.rs +0 -687
- dttlib-0.8.2/src/analysis/graph/view_graph_to_pipeline.rs +0 -568
- dttlib-0.8.2/src/analysis/result/analysis_id.rs +0 -167
- dttlib-0.8.2/src/scope_view/pipeline_graph.rs +0 -123
- dttlib-0.8.2/src/scope_view/view_set.rs +0 -130
- {dttlib-0.8.2 → dttlib-0.9.1}/.cargo/config.toml +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/.devcontainer/Dockerfile +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/.devcontainer/devcontainer.json +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/.gitignore +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/.gitlab-ci.yml +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/.python-version +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/CHANGES.md +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/COPYING +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/COPYING-GPL-3 +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/PUBLISH.md +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/README.md +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/bacon.toml +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/build_wheel.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/cycle.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/devel_bullseye.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/docs/cache_design.md +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/dtt_macros/Cargo.toml +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/dtt_macros/src/lib.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/gen_stub +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/include/nds2.h +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/linked_libraries.json +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pipeline_macros/Cargo.toml +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pipeline_macros/src/box_async.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pipeline_macros/src/derive.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pipeline_macros/src/gen.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pipeline_macros/src/lib.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pipelines/Cargo.toml +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pipelines/src/README.md +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pipelines/src/complex.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/publish_bullseye.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build/build.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build/build_docker.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build/build_docker_base.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build/build_docker_debian.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build/dttbuild/Dockerfile +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build/dttbuild/install_python.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build/dttbuild_base/Dockerfile +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build/dttbuild_base/build_clang.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build/dttbuild_base_conda/Dockerfile +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build/dttbuild_base_conda/dttbuild.yaml +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build/dttbuild_debian/Dockerfile +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build/py_versions.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_build.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pypi_upload.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/pyproject.toml +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/run.py +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/setup_conda.sh +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/custom/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/fourier_tools/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/general/identity.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/general/into.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/general/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/scope/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/types/linear.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/analysis/types/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/bin/stub_gen.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/c_math.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/constraints/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/data_source/channel_query.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/data_source/data_source_pipeline.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/data_source/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/data_source/nds_cache/gap_handler.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/data_source/no_data.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/gds_sigp/asd.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/gds_sigp/heterodyne.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/gds_sigp/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/channel_params/channel_type.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/channel_params/decimation_parameters/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/channel_params/nds_data_type.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/constraints/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/excitation_params.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/params/test_params.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/python/mod.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/timeline/constraints.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/src/tokio_setup.rs +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/test_dtt.py +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/user_messages/Cargo.toml +0 -0
- {dttlib-0.8.2 → dttlib-0.9.1}/wrapper.h +0 -0
|
@@ -1408,7 +1408,7 @@ checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
|
|
|
1408
1408
|
|
|
1409
1409
|
[[package]]
|
|
1410
1410
|
name = "dtt_macros"
|
|
1411
|
-
version = "0.
|
|
1411
|
+
version = "0.9.1"
|
|
1412
1412
|
dependencies = [
|
|
1413
1413
|
"proc-macro2",
|
|
1414
1414
|
"quote",
|
|
@@ -1417,7 +1417,7 @@ dependencies = [
|
|
|
1417
1417
|
|
|
1418
1418
|
[[package]]
|
|
1419
1419
|
name = "dttlib"
|
|
1420
|
-
version = "0.
|
|
1420
|
+
version = "0.9.1"
|
|
1421
1421
|
dependencies = [
|
|
1422
1422
|
"bindgen",
|
|
1423
1423
|
"dtt_macros",
|
|
@@ -2969,7 +2969,7 @@ dependencies = [
|
|
|
2969
2969
|
[[package]]
|
|
2970
2970
|
name = "nds-cache-rs"
|
|
2971
2971
|
version = "0.1.0"
|
|
2972
|
-
source = "git+https://git.ligo.org/cds/software/cr_tools/nds-cache-rs.git?tag=
|
|
2972
|
+
source = "git+https://git.ligo.org/cds/software/cr_tools/nds-cache-rs.git?tag=dev_20#d215ac31d0ae035a42f588e0a96677b40fa3bd1c"
|
|
2973
2973
|
dependencies = [
|
|
2974
2974
|
"arrakis",
|
|
2975
2975
|
"bitcode",
|
|
@@ -3008,7 +3008,7 @@ dependencies = [
|
|
|
3008
3008
|
|
|
3009
3009
|
[[package]]
|
|
3010
3010
|
name = "nds_test"
|
|
3011
|
-
version = "0.
|
|
3011
|
+
version = "0.9.1"
|
|
3012
3012
|
dependencies = [
|
|
3013
3013
|
"dttlib",
|
|
3014
3014
|
"eframe",
|
|
@@ -3572,7 +3572,7 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
|
|
3572
3572
|
|
|
3573
3573
|
[[package]]
|
|
3574
3574
|
name = "pipeline_macros"
|
|
3575
|
-
version = "0.
|
|
3575
|
+
version = "0.9.1"
|
|
3576
3576
|
dependencies = [
|
|
3577
3577
|
"proc-macro2",
|
|
3578
3578
|
"quote",
|
|
@@ -3581,7 +3581,7 @@ dependencies = [
|
|
|
3581
3581
|
|
|
3582
3582
|
[[package]]
|
|
3583
3583
|
name = "pipelines"
|
|
3584
|
-
version = "0.
|
|
3584
|
+
version = "0.9.1"
|
|
3585
3585
|
dependencies = [
|
|
3586
3586
|
"futures",
|
|
3587
3587
|
"num-complex",
|
|
@@ -4770,7 +4770,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
|
|
|
4770
4770
|
[[package]]
|
|
4771
4771
|
name = "ts-tree-rs"
|
|
4772
4772
|
version = "0.1.0"
|
|
4773
|
-
source = "git+https://git.ligo.org/cds/software/cr_tools/ts-tree-rs.git?tag=
|
|
4773
|
+
source = "git+https://git.ligo.org/cds/software/cr_tools/ts-tree-rs.git?tag=dev_2#299c2191a8d81998c7496432860d5256258aaff8"
|
|
4774
4774
|
dependencies = [
|
|
4775
4775
|
"intrusive-collections",
|
|
4776
4776
|
"itertools 0.13.0",
|
|
@@ -4861,7 +4861,7 @@ dependencies = [
|
|
|
4861
4861
|
|
|
4862
4862
|
[[package]]
|
|
4863
4863
|
name = "user_messages"
|
|
4864
|
-
version = "0.
|
|
4864
|
+
version = "0.9.1"
|
|
4865
4865
|
dependencies = [
|
|
4866
4866
|
"log",
|
|
4867
4867
|
"pretty_env_logger",
|
|
@@ -7,7 +7,7 @@ authors = ["Erik von Reis <erik.vonreis@ligo.org>"]
|
|
|
7
7
|
edition = "2024"
|
|
8
8
|
homepage = "https://git.ligo.org/cds/software/cr-tools/dtt_rust"
|
|
9
9
|
repository = "https://git.ligo.org/cds/software/cr-tools/dtt_rust"
|
|
10
|
-
version = "0.
|
|
10
|
+
version = "0.9.1"
|
|
11
11
|
|
|
12
12
|
[package]
|
|
13
13
|
name = "dttlib"
|
|
@@ -38,7 +38,7 @@ required-features = ["python"]
|
|
|
38
38
|
|
|
39
39
|
[workspace.dependencies]
|
|
40
40
|
# python
|
|
41
|
-
pyo3 = { version="0.24", features=["num-complex", "macros"]}
|
|
41
|
+
pyo3 = { version="0.24", features=["num-complex", "macros", "multiple-pymethods"]}
|
|
42
42
|
pyo3-stub-gen = { version="0.11"}
|
|
43
43
|
numpy = {version="0.24"}
|
|
44
44
|
|
|
@@ -82,7 +82,7 @@ num-rational = {version = "0.4"}
|
|
|
82
82
|
|
|
83
83
|
# ligo
|
|
84
84
|
nds2_client_rs = { git="https://git.ligo.org/erik.vonreis/nds_client_rs.git", tag = "dev_0", optional = true }
|
|
85
|
-
nds-cache-rs = { git = "https://git.ligo.org/cds/software/cr_tools/nds-cache-rs.git", tag = "
|
|
85
|
+
nds-cache-rs = { git = "https://git.ligo.org/cds/software/cr_tools/nds-cache-rs.git", tag = "dev_20"}
|
|
86
86
|
ligo_hires_gps_time = {workspace = true}
|
|
87
87
|
|
|
88
88
|
# workspace
|
dttlib-0.9.1/build.rs
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
use std::env;
|
|
2
|
+
use std::path::PathBuf;
|
|
3
|
+
|
|
4
|
+
fn main() {
|
|
5
|
+
println!("cargo:rustc-link-lib=gds-sigp");
|
|
6
|
+
println!("cargo:rustc-link-lib=fftw3");
|
|
7
|
+
|
|
8
|
+
let bindings = bindgen::Builder::default()
|
|
9
|
+
.header("wrapper.h")
|
|
10
|
+
.generate()
|
|
11
|
+
.expect("Unable to generate bindings");
|
|
12
|
+
|
|
13
|
+
let out_path =
|
|
14
|
+
PathBuf::from(env::var("OUT_DIR").expect("Environment var OUT_DIR must be a path"));
|
|
15
|
+
bindings
|
|
16
|
+
.write_to_file(out_path.join("bindings.rs"))
|
|
17
|
+
.expect("Couldn't write bindings");
|
|
18
|
+
}
|
|
@@ -4,9 +4,21 @@
|
|
|
4
4
|
//! # Examples
|
|
5
5
|
//!
|
|
6
6
|
//! ```
|
|
7
|
+
//! use dtt_macros::*;
|
|
8
|
+
//!
|
|
9
|
+
//! struct NeedsCustomFunc {
|
|
10
|
+
//! // this structure needs a special function
|
|
11
|
+
//! // for initialization
|
|
12
|
+
//! }
|
|
13
|
+
//!
|
|
14
|
+
//! struct DontModify {
|
|
15
|
+
//! // this structure is created internally
|
|
16
|
+
//! // so should not be set during initialization
|
|
17
|
+
//! }
|
|
18
|
+
//!
|
|
7
19
|
//! #[builder_lite]
|
|
8
20
|
//! struct MyStruct {
|
|
9
|
-
//! field_a:
|
|
21
|
+
//! field_a: i32,
|
|
10
22
|
//! field_b: String,
|
|
11
23
|
//! #[no_builder]
|
|
12
24
|
//! field_c: NeedsCustomFunc,
|
|
@@ -18,6 +30,18 @@
|
|
|
18
30
|
//! expands to
|
|
19
31
|
//!
|
|
20
32
|
//! ```
|
|
33
|
+
//! use dtt_macros::*;
|
|
34
|
+
//!
|
|
35
|
+
//! struct NeedsCustomFunc {
|
|
36
|
+
//! // this structure needs a special function
|
|
37
|
+
//! // for initialization
|
|
38
|
+
//! }
|
|
39
|
+
//!
|
|
40
|
+
//! struct DontModify {
|
|
41
|
+
//! // this structure is created internally
|
|
42
|
+
//! // so should not be set during initialization
|
|
43
|
+
//! }
|
|
44
|
+
//!
|
|
21
45
|
//! struct MyStruct {
|
|
22
46
|
//! field_a: i32,
|
|
23
47
|
//! field_b: String,
|
|
@@ -5,7 +5,7 @@ import builtins
|
|
|
5
5
|
import typing
|
|
6
6
|
from enum import Enum
|
|
7
7
|
|
|
8
|
-
class
|
|
8
|
+
class AnalysisHeaderId:
|
|
9
9
|
r"""
|
|
10
10
|
This is the name of a result
|
|
11
11
|
Can be of the simple form "SomeChannelName"
|
|
@@ -14,15 +14,33 @@ class AnalysisID:
|
|
|
14
14
|
Structured to avoid unnecessary string parsing
|
|
15
15
|
"""
|
|
16
16
|
@staticmethod
|
|
17
|
-
def from_channel(channel:
|
|
17
|
+
def from_channel(channel: ChannelHeader) -> AnalysisHeaderId: ...
|
|
18
18
|
def __new__(
|
|
19
|
-
cls, name: builtins.str, args: typing.Sequence[
|
|
20
|
-
) ->
|
|
21
|
-
def first_channel(self) ->
|
|
19
|
+
cls, name: builtins.str, args: typing.Sequence[AnalysisHeaderId]
|
|
20
|
+
) -> AnalysisHeaderId: ...
|
|
21
|
+
def first_channel(self) -> ChannelHeader:
|
|
22
22
|
r"""
|
|
23
23
|
get the first channel
|
|
24
24
|
"""
|
|
25
|
-
|
|
25
|
+
def add_to_set_recursive(
|
|
26
|
+
self, set: builtins.set[AnalysisHeaderId]
|
|
27
|
+
) -> builtins.set[AnalysisHeaderId]:
|
|
28
|
+
r"""
|
|
29
|
+
The set is pass-through ownership so that the function is usable from python
|
|
30
|
+
|
|
31
|
+
This function is needed to "flesh out" the collection of analyses request
|
|
32
|
+
by the user to include all intermediate analyses
|
|
33
|
+
"""
|
|
34
|
+
def add_trend(self, trend: TrendType) -> AnalysisHeaderId: ...
|
|
35
|
+
def to_analysis_name_id(self) -> AnalysisNameId: ...
|
|
36
|
+
def get_channels(self) -> builtins.set[ChannelHeader]: ...
|
|
37
|
+
class Simple(AnalysisHeaderId):
|
|
38
|
+
__match_args__ = ("channel",)
|
|
39
|
+
@property
|
|
40
|
+
def channel(self) -> ChannelHeader: ...
|
|
41
|
+
def __new__(cls, channel: ChannelHeader) -> AnalysisHeaderId.Simple: ...
|
|
42
|
+
|
|
43
|
+
class Compound(AnalysisHeaderId):
|
|
26
44
|
__match_args__ = (
|
|
27
45
|
"name",
|
|
28
46
|
"args",
|
|
@@ -30,16 +48,202 @@ class AnalysisID:
|
|
|
30
48
|
@property
|
|
31
49
|
def name(self) -> builtins.str: ...
|
|
32
50
|
@property
|
|
33
|
-
def args(self) -> builtins.list[
|
|
51
|
+
def args(self) -> builtins.list[AnalysisHeaderId]: ...
|
|
34
52
|
def __new__(
|
|
35
|
-
cls, name: builtins.str, args: typing.Sequence[
|
|
36
|
-
) ->
|
|
53
|
+
cls, name: builtins.str, args: typing.Sequence[AnalysisHeaderId]
|
|
54
|
+
) -> AnalysisHeaderId.Compound: ...
|
|
55
|
+
|
|
56
|
+
class AnalysisId:
|
|
57
|
+
r"""
|
|
58
|
+
This is the name of a result
|
|
59
|
+
Can be of the simple form "SomeChannelName"
|
|
60
|
+
Or the compound form "Name(OtherID1, OtherID2, ...)"
|
|
37
61
|
|
|
38
|
-
|
|
62
|
+
Structured to avoid unnecessary string parsing
|
|
63
|
+
"""
|
|
64
|
+
@staticmethod
|
|
65
|
+
def from_channel(channel: Channel) -> AnalysisId: ...
|
|
66
|
+
def __new__(
|
|
67
|
+
cls, name: builtins.str, args: typing.Sequence[AnalysisId]
|
|
68
|
+
) -> AnalysisId: ...
|
|
69
|
+
def first_channel(self) -> Channel:
|
|
70
|
+
r"""
|
|
71
|
+
get the first channel
|
|
72
|
+
"""
|
|
73
|
+
def add_to_set_recursive(
|
|
74
|
+
self, set: builtins.set[AnalysisId]
|
|
75
|
+
) -> builtins.set[AnalysisId]:
|
|
76
|
+
r"""
|
|
77
|
+
The set is pass-through ownership so that the function is usable from python
|
|
78
|
+
|
|
79
|
+
This function is needed to "flesh out" the collection of analyses request
|
|
80
|
+
by the user to include all intermediate analyses
|
|
81
|
+
"""
|
|
82
|
+
def add_trend(self, trend: TrendType) -> AnalysisId: ...
|
|
83
|
+
def to_analysis_name_id(self) -> AnalysisNameId: ...
|
|
84
|
+
def get_channels(self) -> builtins.set[Channel]: ...
|
|
85
|
+
class Simple(AnalysisId):
|
|
39
86
|
__match_args__ = ("channel",)
|
|
40
87
|
@property
|
|
41
88
|
def channel(self) -> Channel: ...
|
|
42
|
-
def __new__(cls, channel: Channel) ->
|
|
89
|
+
def __new__(cls, channel: Channel) -> AnalysisId.Simple: ...
|
|
90
|
+
|
|
91
|
+
class Compound(AnalysisId):
|
|
92
|
+
__match_args__ = (
|
|
93
|
+
"name",
|
|
94
|
+
"args",
|
|
95
|
+
)
|
|
96
|
+
@property
|
|
97
|
+
def name(self) -> builtins.str: ...
|
|
98
|
+
@property
|
|
99
|
+
def args(self) -> builtins.list[AnalysisId]: ...
|
|
100
|
+
def __new__(
|
|
101
|
+
cls, name: builtins.str, args: typing.Sequence[AnalysisId]
|
|
102
|
+
) -> AnalysisId.Compound: ...
|
|
103
|
+
|
|
104
|
+
class AnalysisNameId:
|
|
105
|
+
r"""
|
|
106
|
+
This is the name of a result
|
|
107
|
+
Can be of the simple form "SomeChannelName"
|
|
108
|
+
Or the compound form "Name(OtherID1, OtherID2, ...)"
|
|
109
|
+
|
|
110
|
+
Structured to avoid unnecessary string parsing
|
|
111
|
+
"""
|
|
112
|
+
@staticmethod
|
|
113
|
+
def from_channel(channel: ChannelName) -> AnalysisNameId: ...
|
|
114
|
+
def __new__(
|
|
115
|
+
cls, name: builtins.str, args: typing.Sequence[AnalysisNameId]
|
|
116
|
+
) -> AnalysisNameId: ...
|
|
117
|
+
def first_channel(self) -> ChannelName:
|
|
118
|
+
r"""
|
|
119
|
+
get the first channel
|
|
120
|
+
"""
|
|
121
|
+
def add_to_set_recursive(
|
|
122
|
+
self, set: builtins.set[AnalysisNameId]
|
|
123
|
+
) -> builtins.set[AnalysisNameId]:
|
|
124
|
+
r"""
|
|
125
|
+
The set is pass-through ownership so that the function is usable from python
|
|
126
|
+
|
|
127
|
+
This function is needed to "flesh out" the collection of analyses request
|
|
128
|
+
by the user to include all intermediate analyses
|
|
129
|
+
"""
|
|
130
|
+
def add_trend(self, trend: TrendType) -> AnalysisRequestId: ...
|
|
131
|
+
def to_analysis_name_id(self) -> AnalysisNameId: ...
|
|
132
|
+
def get_channels(self) -> builtins.set[ChannelName]: ...
|
|
133
|
+
class Simple(AnalysisNameId):
|
|
134
|
+
__match_args__ = ("channel",)
|
|
135
|
+
@property
|
|
136
|
+
def channel(self) -> ChannelName: ...
|
|
137
|
+
def __new__(cls, channel: ChannelName) -> AnalysisNameId.Simple: ...
|
|
138
|
+
|
|
139
|
+
class Compound(AnalysisNameId):
|
|
140
|
+
__match_args__ = (
|
|
141
|
+
"name",
|
|
142
|
+
"args",
|
|
143
|
+
)
|
|
144
|
+
@property
|
|
145
|
+
def name(self) -> builtins.str: ...
|
|
146
|
+
@property
|
|
147
|
+
def args(self) -> builtins.list[AnalysisNameId]: ...
|
|
148
|
+
def __new__(
|
|
149
|
+
cls, name: builtins.str, args: typing.Sequence[AnalysisNameId]
|
|
150
|
+
) -> AnalysisNameId.Compound: ...
|
|
151
|
+
|
|
152
|
+
class AnalysisRequestId:
|
|
153
|
+
r"""
|
|
154
|
+
This is the name of a result
|
|
155
|
+
Can be of the simple form "SomeChannelName"
|
|
156
|
+
Or the compound form "Name(OtherID1, OtherID2, ...)"
|
|
157
|
+
|
|
158
|
+
Structured to avoid unnecessary string parsing
|
|
159
|
+
"""
|
|
160
|
+
@staticmethod
|
|
161
|
+
def from_channel(channel: ChannelId) -> AnalysisRequestId: ...
|
|
162
|
+
def __new__(
|
|
163
|
+
cls, name: builtins.str, args: typing.Sequence[AnalysisRequestId]
|
|
164
|
+
) -> AnalysisRequestId: ...
|
|
165
|
+
def first_channel(self) -> ChannelId:
|
|
166
|
+
r"""
|
|
167
|
+
get the first channel
|
|
168
|
+
"""
|
|
169
|
+
def add_to_set_recursive(
|
|
170
|
+
self, set: builtins.set[AnalysisRequestId]
|
|
171
|
+
) -> builtins.set[AnalysisRequestId]:
|
|
172
|
+
r"""
|
|
173
|
+
The set is pass-through ownership so that the function is usable from python
|
|
174
|
+
|
|
175
|
+
This function is needed to "flesh out" the collection of analyses request
|
|
176
|
+
by the user to include all intermediate analyses
|
|
177
|
+
"""
|
|
178
|
+
def add_trend(self, trend: TrendType) -> AnalysisRequestId: ...
|
|
179
|
+
def to_analysis_name_id(self) -> AnalysisNameId: ...
|
|
180
|
+
def get_channels(self) -> builtins.set[ChannelId]: ...
|
|
181
|
+
class Simple(AnalysisRequestId):
|
|
182
|
+
__match_args__ = ("channel",)
|
|
183
|
+
@property
|
|
184
|
+
def channel(self) -> ChannelId: ...
|
|
185
|
+
def __new__(cls, channel: ChannelId) -> AnalysisRequestId.Simple: ...
|
|
186
|
+
|
|
187
|
+
class Compound(AnalysisRequestId):
|
|
188
|
+
__match_args__ = (
|
|
189
|
+
"name",
|
|
190
|
+
"args",
|
|
191
|
+
)
|
|
192
|
+
@property
|
|
193
|
+
def name(self) -> builtins.str: ...
|
|
194
|
+
@property
|
|
195
|
+
def args(self) -> builtins.list[AnalysisRequestId]: ...
|
|
196
|
+
def __new__(
|
|
197
|
+
cls, name: builtins.str, args: typing.Sequence[AnalysisRequestId]
|
|
198
|
+
) -> AnalysisRequestId.Compound: ...
|
|
199
|
+
|
|
200
|
+
class AnalysisSettingsId:
|
|
201
|
+
r"""
|
|
202
|
+
This is the name of a result
|
|
203
|
+
Can be of the simple form "SomeChannelName"
|
|
204
|
+
Or the compound form "Name(OtherID1, OtherID2, ...)"
|
|
205
|
+
|
|
206
|
+
Structured to avoid unnecessary string parsing
|
|
207
|
+
"""
|
|
208
|
+
@staticmethod
|
|
209
|
+
def from_channel(channel: ChannelSettings) -> AnalysisSettingsId: ...
|
|
210
|
+
def __new__(
|
|
211
|
+
cls, name: builtins.str, args: typing.Sequence[AnalysisSettingsId]
|
|
212
|
+
) -> AnalysisSettingsId: ...
|
|
213
|
+
def first_channel(self) -> ChannelSettings:
|
|
214
|
+
r"""
|
|
215
|
+
get the first channel
|
|
216
|
+
"""
|
|
217
|
+
def add_to_set_recursive(
|
|
218
|
+
self, set: builtins.set[AnalysisSettingsId]
|
|
219
|
+
) -> builtins.set[AnalysisSettingsId]:
|
|
220
|
+
r"""
|
|
221
|
+
The set is pass-through ownership so that the function is usable from python
|
|
222
|
+
|
|
223
|
+
This function is needed to "flesh out" the collection of analyses request
|
|
224
|
+
by the user to include all intermediate analyses
|
|
225
|
+
"""
|
|
226
|
+
def add_trend(self, trend: TrendType) -> AnalysisSettingsId: ...
|
|
227
|
+
def to_analysis_name_id(self) -> AnalysisNameId: ...
|
|
228
|
+
def get_channels(self) -> builtins.set[ChannelSettings]: ...
|
|
229
|
+
class Simple(AnalysisSettingsId):
|
|
230
|
+
__match_args__ = ("channel",)
|
|
231
|
+
@property
|
|
232
|
+
def channel(self) -> ChannelSettings: ...
|
|
233
|
+
def __new__(cls, channel: ChannelSettings) -> AnalysisSettingsId.Simple: ...
|
|
234
|
+
|
|
235
|
+
class Compound(AnalysisSettingsId):
|
|
236
|
+
__match_args__ = (
|
|
237
|
+
"name",
|
|
238
|
+
"args",
|
|
239
|
+
)
|
|
240
|
+
@property
|
|
241
|
+
def name(self) -> builtins.str: ...
|
|
242
|
+
@property
|
|
243
|
+
def args(self) -> builtins.list[AnalysisSettingsId]: ...
|
|
244
|
+
def __new__(
|
|
245
|
+
cls, name: builtins.str, args: typing.Sequence[AnalysisSettingsId]
|
|
246
|
+
) -> AnalysisSettingsId.Compound: ...
|
|
43
247
|
|
|
44
248
|
class Channel:
|
|
45
249
|
@property
|
|
@@ -82,6 +286,19 @@ class Channel:
|
|
|
82
286
|
cls, name: builtins.str, data_type: NDSDataType, period: PipDuration
|
|
83
287
|
) -> Channel: ...
|
|
84
288
|
|
|
289
|
+
class ChannelHeader:
|
|
290
|
+
r"""
|
|
291
|
+
Used internally to map full name and trend info
|
|
292
|
+
this is the minimum needed information
|
|
293
|
+
to generate a request to the cache or other data source
|
|
294
|
+
"""
|
|
295
|
+
@property
|
|
296
|
+
def name(self) -> builtins.str: ...
|
|
297
|
+
@property
|
|
298
|
+
def trend_type(self) -> TrendType: ...
|
|
299
|
+
@property
|
|
300
|
+
def trend_stat(self) -> TrendStat: ...
|
|
301
|
+
|
|
85
302
|
class ChannelId:
|
|
86
303
|
r"""
|
|
87
304
|
Provides enough info to query a channel from an NDS server by name.
|
|
@@ -97,6 +314,14 @@ class ChannelId:
|
|
|
97
314
|
One ChannelID will return into a channel for each.
|
|
98
315
|
"""
|
|
99
316
|
|
|
317
|
+
class ChannelName:
|
|
318
|
+
r"""
|
|
319
|
+
Provides enough info to query a channel from an NDS server by name.
|
|
320
|
+
"""
|
|
321
|
+
@property
|
|
322
|
+
def name(self) -> builtins.str: ...
|
|
323
|
+
def __new__(cls, name: builtins.str) -> ChannelName: ...
|
|
324
|
+
|
|
100
325
|
class ChannelParams:
|
|
101
326
|
@property
|
|
102
327
|
def active(self) -> builtins.bool: ...
|
|
@@ -270,11 +495,11 @@ class FreqDomainArray:
|
|
|
270
495
|
@property
|
|
271
496
|
def data(self) -> typing.Any: ...
|
|
272
497
|
@property
|
|
273
|
-
def id(self) ->
|
|
498
|
+
def id(self) -> AnalysisId: ...
|
|
274
499
|
@property
|
|
275
500
|
def unit(self) -> Unit: ...
|
|
276
501
|
def clone_metadata(
|
|
277
|
-
self, id:
|
|
502
|
+
self, id: AnalysisId, unit: Unit, new_data: typing.Any
|
|
278
503
|
) -> FreqDomainArray:
|
|
279
504
|
r"""
|
|
280
505
|
Copy everything from another object except replace the data
|
|
@@ -644,18 +869,7 @@ class ScopeViewHandle:
|
|
|
644
869
|
Update the span of a view. This is a pythonic wrapper. Rust code should call update_online() or update_fixed().
|
|
645
870
|
"""
|
|
646
871
|
def close(self) -> None: ...
|
|
647
|
-
def get_result_store(self) -> builtins.dict[
|
|
648
|
-
|
|
649
|
-
class SetMember:
|
|
650
|
-
class Channel(SetMember):
|
|
651
|
-
__match_args__ = ("_0",)
|
|
652
|
-
@property
|
|
653
|
-
def _0(self) -> Channel: ...
|
|
654
|
-
def __new__(cls, _0: Channel) -> SetMember.Channel: ...
|
|
655
|
-
def __len__(self) -> builtins.int: ...
|
|
656
|
-
def __getitem__(self, key: builtins.int) -> typing.Any: ...
|
|
657
|
-
|
|
658
|
-
...
|
|
872
|
+
def get_result_store(self) -> builtins.dict[AnalysisId, typing.Any]: ...
|
|
659
873
|
|
|
660
874
|
class SimpleUnit:
|
|
661
875
|
r"""
|
|
@@ -1057,7 +1271,7 @@ class TimeDomainArray:
|
|
|
1057
1271
|
@property
|
|
1058
1272
|
def total_gap_size(self) -> builtins.int: ...
|
|
1059
1273
|
@property
|
|
1060
|
-
def id(self) ->
|
|
1274
|
+
def id(self) -> AnalysisId: ...
|
|
1061
1275
|
@property
|
|
1062
1276
|
def unit(self) -> Unit: ...
|
|
1063
1277
|
@property
|
|
@@ -1077,6 +1291,13 @@ class TimeDomainArray:
|
|
|
1077
1291
|
but the return value can be greater or equal to the length of the array
|
|
1078
1292
|
and therefore out of bounds
|
|
1079
1293
|
"""
|
|
1294
|
+
def timestamps(self) -> builtins.list[PipInstant]: ...
|
|
1295
|
+
def delta_t_seconds(self, t0: PipInstant) -> builtins.list[builtins.float]:
|
|
1296
|
+
r"""
|
|
1297
|
+
Get the timestamps transformed into a delta time from some t0
|
|
1298
|
+
return values in seconds as floating point
|
|
1299
|
+
Useful for getting relative timestamps to a point of time on a graph
|
|
1300
|
+
"""
|
|
1080
1301
|
|
|
1081
1302
|
class Timeline: ...
|
|
1082
1303
|
|
|
@@ -1110,6 +1331,10 @@ class ViewSet:
|
|
|
1110
1331
|
for turning a simple list of channel names into a ViewSet with
|
|
1111
1332
|
unresolved channel names
|
|
1112
1333
|
"""
|
|
1334
|
+
@staticmethod
|
|
1335
|
+
def from_analysis_request_ids(
|
|
1336
|
+
request_ids: builtins.set[AnalysisRequestId],
|
|
1337
|
+
) -> ViewSet: ...
|
|
1113
1338
|
def has_unresolved_channels(self) -> builtins.bool: ...
|
|
1114
1339
|
def to_resolved_channel_names(self) -> builtins.list[builtins.str]:
|
|
1115
1340
|
r"""
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
//! This pipeline will only calculate one value at function call at a time.
|
|
8
8
|
|
|
9
9
|
use crate::pipe::Pipe1;
|
|
10
|
-
use crate::{PipeData, PipeResult, PipelineOutput, PipelineSubscriber};
|
|
10
|
+
use crate::{PipeData, PipeResult, PipelineError, PipelineOutput, PipelineSubscriber};
|
|
11
11
|
use futures::FutureExt;
|
|
12
12
|
use futures::future::BoxFuture;
|
|
13
13
|
use std::sync::Arc;
|
|
14
14
|
use tokio::runtime::Handle;
|
|
15
|
-
use user_messages::UserMsgProvider;
|
|
15
|
+
use user_messages::{UserMsgProvider, panic_report};
|
|
16
16
|
|
|
17
17
|
type AccumGenFn<I, T, U> =
|
|
18
18
|
fn(Box<dyn UserMsgProvider>, Arc<I>, Option<Arc<T>>, n: f64) -> (Arc<T>, f64, PipeResult<U>);
|
|
@@ -37,8 +37,18 @@ fn accum_generate<I: PipeData, T: PipeData, U: PipeData>(
|
|
|
37
37
|
let inp = input.clone();
|
|
38
38
|
let accum_val = state.value.clone();
|
|
39
39
|
let n = state.n;
|
|
40
|
-
let
|
|
41
|
-
let (value,
|
|
40
|
+
let rc2 = rc.ump_clone();
|
|
41
|
+
let jh = Handle::current().spawn_blocking(move || g(rc2, inp.value, accum_val, n));
|
|
42
|
+
let (value, new_n, output) = match jh.await {
|
|
43
|
+
Ok(v) => v,
|
|
44
|
+
Err(e) => {
|
|
45
|
+
panic_report!(
|
|
46
|
+
rc.user_message_handle(),
|
|
47
|
+
"Error while running accumulator calculation thread: {}",
|
|
48
|
+
e.to_string()
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
42
52
|
state.n = new_n;
|
|
43
53
|
state.value = Some(value.clone());
|
|
44
54
|
output
|
|
@@ -52,7 +62,7 @@ impl<I: PipeData, T: PipeData, U: PipeData> Accumulator<I, T, U> {
|
|
|
52
62
|
name: String,
|
|
53
63
|
input: &PipelineSubscriber<I>,
|
|
54
64
|
generate: AccumGenFn<I, T, U>,
|
|
55
|
-
) -> PipelineSubscriber<U> {
|
|
65
|
+
) -> Result<PipelineSubscriber<U>, PipelineError> {
|
|
56
66
|
let p = Accumulator {
|
|
57
67
|
n: 1.0, // start at 1. The generator is responsible for incrementing if needed.
|
|
58
68
|
generate_ptr: generate,
|