dttlib 0.7.7__cp313-cp313-manylinux_2_31_x86_64.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.

Potentially problematic release.


This version of dttlib might be problematic. Click here for more details.

dttlib/__init__.pyi ADDED
@@ -0,0 +1,1251 @@
1
+ # This file is automatically generated by pyo3_stub_gen
2
+ # ruff: noqa: E501, F401
3
+
4
+ import builtins
5
+ import typing
6
+ from enum import Enum
7
+
8
+ class AnalysisID:
9
+ r"""
10
+ This is the name of a result
11
+ Can be of the simple form "SomeChannelName"
12
+ Or the compound form "Name(OtherID1, OtherID2, ...)"
13
+
14
+ Structured to avoid unnecessary string parsing
15
+ """
16
+ @staticmethod
17
+ def from_channel(channel: Channel) -> AnalysisID: ...
18
+ def __new__(
19
+ cls, name: builtins.str, args: typing.Sequence[AnalysisID]
20
+ ) -> AnalysisID: ...
21
+ def first_channel(self) -> Channel:
22
+ r"""
23
+ get the first channel
24
+ """
25
+ class Compound(AnalysisID):
26
+ __match_args__ = (
27
+ "name",
28
+ "args",
29
+ )
30
+ @property
31
+ def name(self) -> builtins.str: ...
32
+ @property
33
+ def args(self) -> builtins.list[AnalysisID]: ...
34
+ def __new__(
35
+ cls, name: builtins.str, args: typing.Sequence[AnalysisID]
36
+ ) -> AnalysisID.Compound: ...
37
+
38
+ class Simple(AnalysisID):
39
+ __match_args__ = ("channel",)
40
+ @property
41
+ def channel(self) -> Channel: ...
42
+ def __new__(cls, channel: Channel) -> AnalysisID.Simple: ...
43
+
44
+ class Channel:
45
+ @property
46
+ def name(self) -> builtins.str: ...
47
+ @property
48
+ def data_type(self) -> NDSDataType: ...
49
+ @property
50
+ def channel_type(self) -> ChannelType: ...
51
+ @property
52
+ def rate_hz(self) -> builtins.float: ...
53
+ @property
54
+ def dcu_id(self) -> typing.Optional[builtins.int]: ...
55
+ @property
56
+ def channel_number(self) -> typing.Optional[builtins.int]: ...
57
+ @property
58
+ def calibration(self) -> typing.Optional[builtins.int]: ...
59
+ @property
60
+ def heterodyne_freq_hz(self) -> typing.Optional[builtins.float]: ...
61
+ @property
62
+ def gain(self) -> typing.Optional[builtins.float]: ...
63
+ @property
64
+ def slope(self) -> typing.Optional[builtins.float]: ...
65
+ @property
66
+ def offset(self) -> typing.Optional[builtins.float]: ...
67
+ @property
68
+ def use_active_time(self) -> builtins.bool: ...
69
+ @property
70
+ def units(self) -> Unit: ...
71
+ @property
72
+ def trend_stat(self) -> TrendStat: ...
73
+ @property
74
+ def trend_type(self) -> TrendType: ...
75
+ @property
76
+ def online(self) -> builtins.bool: ...
77
+ @property
78
+ def testpoint(self) -> builtins.bool: ...
79
+ def __new__(
80
+ cls, name: builtins.str, data_type: NDSDataType, rate_hz: builtins.float
81
+ ) -> Channel: ...
82
+
83
+ class ChannelId:
84
+ r"""
85
+ Provides enough info to query a channel from an NDS server by name.
86
+ """
87
+ @property
88
+ def name(self) -> builtins.str: ...
89
+ @property
90
+ def trend_type(self) -> TrendType: ...
91
+ def __new__(cls, name: builtins.str, trend_type: TrendType) -> ChannelId: ...
92
+ def expected_stats(self) -> builtins.list[TrendStat]:
93
+ r"""
94
+ These are the stats we expect to get for a single trend request.
95
+ One ChannelID will return into a channel for each.
96
+ """
97
+
98
+ class ChannelParams:
99
+ @property
100
+ def active(self) -> builtins.bool: ...
101
+ @property
102
+ def channel(self) -> Channel: ...
103
+
104
+ class ChannelQuery:
105
+ r"""
106
+ Constraints on a channel query
107
+ to a data source
108
+ """
109
+ def __new__(
110
+ cls,
111
+ pattern: typing.Optional[builtins.str] = None,
112
+ channel_types: typing.Optional[typing.Sequence[ChannelType]] = None,
113
+ data_types: typing.Optional[typing.Sequence[NDSDataType]] = None,
114
+ min_sample_rate: typing.Optional[builtins.float] = None,
115
+ max_sample_rate: typing.Optional[builtins.float] = None,
116
+ gps_start: typing.Optional[builtins.int] = None,
117
+ gps_end: typing.Optional[builtins.int] = None,
118
+ ) -> ChannelQuery: ...
119
+
120
+ class ChannelSettings:
121
+ r"""
122
+ full record of a channel including some pre-calculated timeline info used
123
+ in DTT tests.
124
+ """
125
+ @property
126
+ def channel(self) -> Channel: ...
127
+ @property
128
+ def raw_decimation_params(self) -> DecimationParameters: ...
129
+ @property
130
+ def heterodyned_decimation_params(self) -> DecimationParameters: ...
131
+ @property
132
+ def do_heterodyne(self) -> builtins.bool: ...
133
+ @property
134
+ def decimation_delays(self) -> DecimationDelays: ...
135
+
136
+ class ChannelSettingsParams:
137
+ @property
138
+ def active(self) -> builtins.bool: ...
139
+ @property
140
+ def channel(self) -> ChannelSettings: ...
141
+
142
+ class CustomPipeline: ...
143
+
144
+ class DTT:
145
+ r"""
146
+ ## immutable "global" values
147
+ A DTT struct stores channels used to communicate with the user.
148
+ The user owns the struct and merely drops it when done.
149
+ The entire core will shut down at that point.
150
+ Most public API is called on this structure.
151
+
152
+ Applications should use the init_...() functions to create this structure.
153
+ """
154
+ def set_data_source(self, data_source: DataSource) -> None:
155
+ r"""
156
+ set the desired data source
157
+ """
158
+ def set_test_params(self, params: TestParams) -> None:
159
+ r"""
160
+ Set up a test. Eventually, the library will send an updated Timeline object
161
+ on the associated output receiver.
162
+ Start the test with run_test().
163
+ An error means the DTT management process has died.
164
+ """
165
+ def run_test(self) -> None:
166
+ r"""
167
+ Start a test.
168
+ The test must already be configured with set_test_params.
169
+ As the test is run, status messages and results will appear on
170
+ the associated output receiver.
171
+ An error means the DTT management process has died.
172
+ """
173
+ def no_op(self) -> None:
174
+ r"""
175
+ Send a no-op message.
176
+ """
177
+ def new_online_scope_view(
178
+ self, set: ViewSet, span_pip: PipDuration
179
+ ) -> ScopeViewHandle:
180
+ r"""
181
+ Create a new online scope view and return a handle to it.
182
+ Drop all clones of the handle to close the view.
183
+ """
184
+ def new_fixed_scope_view(
185
+ self, set: ViewSet, start_pip: PipInstant, end_pip: PipInstant
186
+ ) -> ScopeViewHandle:
187
+ r"""
188
+ Create a new fixed scope view and return a handle to it.
189
+ Drop all clones of the handle to close the view
190
+ """
191
+ def find_channels(self, query: ChannelQuery) -> None: ...
192
+ def __new__(cls, callback: typing.Any) -> DTT:
193
+ r"""
194
+ Creation of a DTT object from Python requires a callback function as an argument.
195
+ The call back will receive [ResponseToUser] messages from the [DTT] object
196
+ Since the [DTT] object is asynchronous under the hood, most methods
197
+ return immediately without any result. [ResponseToUser] messages
198
+ are the primary way to get feedback from the DTT object.
199
+ """
200
+
201
+ class DataSource:
202
+ r"""
203
+ wrappers needed for python
204
+ """
205
+ def now(self) -> PipInstant: ...
206
+
207
+ class DecimationDelays:
208
+ r"""
209
+ collects the delays associated with the total decimation on the channel
210
+ """
211
+
212
+ ...
213
+
214
+ class DecimationParameters:
215
+ r"""
216
+ Values used to generate a decimation pipeline for a single stage of decimation
217
+ """
218
+ @property
219
+ def filter(self) -> DecimationFilter:
220
+ r"""
221
+ anti-aliasing filter
222
+ """
223
+ @property
224
+ def num_decs(self) -> builtins.int:
225
+ r"""
226
+ number of x2 decimations
227
+ """
228
+
229
+ class Excitation:
230
+ @property
231
+ def channel(self) -> Channel: ...
232
+ @property
233
+ def read_back_channel(self) -> typing.Optional[Channel]: ...
234
+
235
+ class ExcitationParams:
236
+ @property
237
+ def active(self) -> builtins.bool: ...
238
+ @property
239
+ def excitation(self) -> Excitation: ...
240
+
241
+ class ExcitationSettings:
242
+ @property
243
+ def channel(self) -> ChannelSettings: ...
244
+ @property
245
+ def read_back_channel(self) -> typing.Optional[ChannelSettings]: ...
246
+
247
+ class ExcitationSettingsParams:
248
+ @property
249
+ def active(self) -> builtins.bool: ...
250
+ @property
251
+ def excitation(self) -> ExcitationSettings: ...
252
+
253
+ class FreqDomainArray:
254
+ @property
255
+ def start_gps_pip(self) -> PipInstant: ...
256
+ @property
257
+ def start_hz(self) -> builtins.float: ...
258
+ @property
259
+ def bucket_width_hz(self) -> builtins.float: ...
260
+ @property
261
+ def overlap(self) -> builtins.float: ...
262
+ @property
263
+ def sequence_index(self) -> builtins.int: ...
264
+ @property
265
+ def sequence_size(self) -> builtins.int: ...
266
+ @property
267
+ def n(self) -> builtins.float: ...
268
+ @property
269
+ def data(self) -> typing.Any: ...
270
+ @property
271
+ def id(self) -> AnalysisID: ...
272
+ @property
273
+ def unit(self) -> Unit: ...
274
+ def clone_metadata(
275
+ self, id: AnalysisID, unit: Unit, new_data: typing.Any
276
+ ) -> FreqDomainArray:
277
+ r"""
278
+ Copy everything from another object except replace the data
279
+ with a new python list of data
280
+ """
281
+
282
+ class InlineFFTParams:
283
+ @property
284
+ def bandwidth_hz(self) -> builtins.float: ...
285
+ @property
286
+ def overlap(self) -> builtins.float: ...
287
+ @property
288
+ def start_pip(self) -> PipInstant: ...
289
+ @property
290
+ def end_pip(self) -> PipInstant: ...
291
+ @property
292
+ def window(self) -> FFTWindow: ...
293
+ @bandwidth_hz.setter
294
+ def bandwidth_hz(self, value: builtins.float) -> None: ...
295
+ @overlap.setter
296
+ def overlap(self, value: builtins.float) -> None: ...
297
+ @start_pip.setter
298
+ def start_pip(self, value: PipInstant) -> None: ...
299
+ @end_pip.setter
300
+ def end_pip(self, value: PipInstant) -> None: ...
301
+ @window.setter
302
+ def window(self, value: FFTWindow) -> None: ...
303
+ def __new__(cls) -> InlineFFTParams: ...
304
+
305
+ class MessageJob:
306
+ def get_tag(self) -> builtins.str:
307
+ r"""
308
+ Helps with sorting messages without having to match on them first
309
+ """
310
+ class SetMessage(MessageJob):
311
+ __match_args__ = (
312
+ "tag",
313
+ "msg",
314
+ )
315
+ @property
316
+ def tag(self) -> builtins.str: ...
317
+ @property
318
+ def msg(self) -> UserMessage: ...
319
+ def __new__(
320
+ cls, tag: builtins.str, msg: UserMessage
321
+ ) -> MessageJob.SetMessage: ...
322
+
323
+ class ClearMessage(MessageJob):
324
+ __match_args__ = ("tag",)
325
+ @property
326
+ def tag(self) -> builtins.str: ...
327
+ def __new__(cls, tag: builtins.str) -> MessageJob.ClearMessage: ...
328
+
329
+ class NDS2Cache:
330
+ r"""
331
+ Data source that gets all its data directly from an NDS2 server (no local caching).
332
+ """
333
+ def __new__(
334
+ cls, size_bytes: builtins.int, default_file_path: builtins.str
335
+ ) -> NDS2Cache: ...
336
+ def as_ref(self) -> DataSource: ...
337
+
338
+ class PipDuration:
339
+ def __sub__(self, other: PipDuration) -> PipDuration: ...
340
+ def __add__(self, other: typing.Any) -> typing.Any:
341
+ r"""
342
+ Add a duration to get a combined duration
343
+ or Add a instant to get a new instant
344
+ """
345
+ def __mul__(self, other: typing.Any) -> typing.Any:
346
+ r"""
347
+ Multiply by a number to get a scaled duration
348
+ """
349
+ def __rmul__(self, other: typing.Any) -> typing.Any: ...
350
+ def __truediv__(self, other: typing.Any) -> typing.Any:
351
+ r"""
352
+ Divide by a float or number to get a scaled duration
353
+ Divide by a duration to get a ratio.
354
+ """
355
+ def __floordiv__(self, other: typing.Any) -> typing.Any:
356
+ r"""
357
+ Divide by a float or number to get a scaled duration
358
+ Divide by a duration to get a ratio
359
+ """
360
+ def __mod__(self, other: typing.Any) -> typing.Any:
361
+ r"""
362
+ Get the remainder from an equivalent integer division
363
+ """
364
+ def __neg__(self) -> typing.Any: ...
365
+ def __pos__(self) -> typing.Any: ...
366
+ def __abs__(self) -> typing.Any: ...
367
+ @staticmethod
368
+ def freq_hz_to_period(rate_hz: builtins.float) -> PipDuration:
369
+ r"""
370
+ Convert a frequency as Hz into a duration that represents the corresponding period.
371
+ """
372
+ def period_to_freq_hz(self) -> builtins.float:
373
+ r"""
374
+ Convert a duration that represents a period into the corresponding frequency as Hz.
375
+ """
376
+ @staticmethod
377
+ def from_seconds(seconds: builtins.float) -> PipDuration:
378
+ r"""
379
+ Create a duration given the length in seconds.
380
+ """
381
+ def to_seconds(self) -> builtins.float:
382
+ r"""
383
+ Return the length of the duration as seconds.
384
+ """
385
+ @staticmethod
386
+ def from_sec(seconds: builtins.int) -> PipDuration:
387
+ r"""
388
+ Create a duration given the length in seconds.
389
+ """
390
+ def to_sec(self) -> builtins.int:
391
+ r"""
392
+ Round the duration to the nearest second.
393
+
394
+ Return 0 for negative durations.
395
+ """
396
+ @staticmethod
397
+ def from_nanoseconds(nanoseconds: builtins.int) -> PipDuration:
398
+ r"""
399
+ Create a duration given the length in nanoseconds.
400
+ """
401
+ def to_nanoseconds(self) -> builtins.int:
402
+ r"""
403
+ Return the length to the nearest nanosecond,
404
+ but return zero if the duration is negative.
405
+ """
406
+ def to_seconds_nanoseconds(self) -> tuple[builtins.int, builtins.int]:
407
+ r"""
408
+ Return the length as seconds and nanoseconds
409
+ """
410
+ @staticmethod
411
+ def from_pips(pips: builtins.int) -> PipDuration:
412
+ r"""
413
+ Create a duration object from a numerical value of the same units.
414
+ """
415
+ @staticmethod
416
+ def from_seconds_nanoseconds(
417
+ seconds: builtins.int, nano: builtins.int
418
+ ) -> PipDuration:
419
+ r"""
420
+ Create a duration given the length as seconds and nanoseconds
421
+ """
422
+ def to_pips(self) -> builtins.int:
423
+ r"""
424
+ Return duration in units of the type..
425
+ """
426
+ def is_empty(self) -> builtins.bool:
427
+ r"""
428
+ True if the length of the duration is zero.
429
+ """
430
+ def abs(self) -> PipDuration:
431
+ r"""
432
+ Return a non-negative duration of the same magnitude.
433
+ """
434
+ def snap_to_step(self, step: PipDuration) -> PipDuration:
435
+ r"""
436
+ Snap to the nearest integer multiple of a step size.
437
+ """
438
+ def snap_down_to_step(self, step: PipDuration) -> PipDuration:
439
+ r"""
440
+ Snap to the largest integer <= self that's a multiple of a step size.
441
+
442
+ Like snap_to_step, but takes the floor rather than the nearest.
443
+ """
444
+ def snap_up_to_step(self, step: PipDuration) -> PipDuration:
445
+ r"""
446
+ Snap to the smallest integer >= self that's a multiple of a step size.
447
+
448
+ Like snap_to_step, but takes the ceiling rather than the nearest.
449
+ """
450
+ @staticmethod
451
+ def rate_hz() -> builtins.int:
452
+ r"""
453
+ Return the rate of the units in Hz
454
+ """
455
+
456
+ class PipInstant:
457
+ def __add__(self, other: PipDuration) -> PipInstant: ...
458
+ def __sub__(self, other: typing.Any) -> typing.Any:
459
+ r"""
460
+ Subtract a duration to get an instant,
461
+ or subtract a instant to get the difference as a duration.
462
+ """
463
+ @staticmethod
464
+ def now() -> PipInstant:
465
+ r"""
466
+ return the current time
467
+ """
468
+ def to_gpst_pips(self) -> builtins.int:
469
+ r"""
470
+ Return the number of steps since the GPS epoch.
471
+ """
472
+ def to_gpst_seconds_nanoseconds(self) -> tuple[builtins.int, builtins.int]:
473
+ r"""
474
+ Return the nearest nanosecond since the GPS epoch.
475
+ """
476
+ def to_gpst_nanoseconds(self) -> builtins.int:
477
+ r"""
478
+ If positive, return nanoseconds since the GPS epoch, otherwise zero.
479
+ """
480
+ def to_gpst_sec(self) -> builtins.int:
481
+ r"""
482
+ Return the seconds since GPS epoch rounded down to the latest second
483
+ earlier than or coincident with the instant.
484
+
485
+ Returns 0 for instants before the GPS epoch.
486
+ """
487
+ def to_gpst_seconds(self) -> builtins.float:
488
+ r"""
489
+ Return the number of seconds since the GPS epoch.
490
+ """
491
+ @staticmethod
492
+ def from_gpst_seconds_nanoseconds(
493
+ seconds: builtins.int, nano: builtins.int
494
+ ) -> PipInstant:
495
+ r"""
496
+ Create an instant given seconds + nanoseconds since the GPS epoch.
497
+ """
498
+ @staticmethod
499
+ def from_gpst_nanoseconds(nano: builtins.int) -> PipInstant:
500
+ r"""
501
+ Create an instant given nanoseconds since the GPS epoch.
502
+ """
503
+ @staticmethod
504
+ def from_gpst_seconds(seconds: builtins.float) -> PipInstant:
505
+ r"""
506
+ Create an instant given seconds since the GPS epoch.
507
+ """
508
+ @staticmethod
509
+ def gpst_epoch() -> PipInstant:
510
+ r"""
511
+ Create an instant at Midnight UTC, Jan 6 1980,
512
+ the reference epoch for the GPS time system.
513
+ """
514
+ @staticmethod
515
+ def from_gpst_sec(seconds: builtins.int) -> PipInstant:
516
+ r"""
517
+ Create an instant given whole seconds since the GPS epoch.
518
+ """
519
+ @staticmethod
520
+ def from_gpst_pips(pips: builtins.int) -> PipInstant:
521
+ r"""
522
+ Create an instant given steps since the GPS epoch.
523
+ """
524
+ def snap_to_step(self, step: PipDuration) -> PipInstant:
525
+ r"""
526
+ Snap to the nearest integer multiple of a step size.
527
+ """
528
+ def snap_down_to_step(self, step: PipDuration) -> PipInstant:
529
+ r"""
530
+ Snap to the largest integer <= self that's a multiple of a step size.
531
+
532
+ Like snap_to_step, but takes the floor rather than the nearest.
533
+ """
534
+ def snap_up_to_step(self, step: PipDuration) -> PipInstant:
535
+ r"""
536
+ Snap to the smallest integer >= self that's a multiple of a step size.
537
+
538
+ Like snap_to_step, but takes the ceiling rather than the nearest.
539
+ """
540
+ @staticmethod
541
+ def rate_hz() -> builtins.int:
542
+ r"""
543
+ Return the rate of the units in Hz
544
+ """
545
+
546
+ class ResponseToUser:
547
+ r"""
548
+ Any data sent to the user from a [DTT] struct
549
+ In python, these will be passed to the callback function
550
+ passed to the [dttlib.init](crate::python::dttlib::init) function
551
+ """
552
+ class AllMessages(ResponseToUser):
553
+ __match_args__ = ("_0",)
554
+ @property
555
+ def _0(self) -> builtins.dict[builtins.str, UserMessage]: ...
556
+ def __new__(
557
+ cls, _0: typing.Mapping[builtins.str, UserMessage]
558
+ ) -> ResponseToUser.AllMessages: ...
559
+ def __len__(self) -> builtins.int: ...
560
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
561
+
562
+ class UpdateMessages(ResponseToUser):
563
+ __match_args__ = ("message_job",)
564
+ @property
565
+ def message_job(self) -> MessageJob: ...
566
+ def __new__(cls, message_job: MessageJob) -> ResponseToUser.UpdateMessages: ...
567
+
568
+ class NewTimeline(ResponseToUser):
569
+ __match_args__ = ("_0",)
570
+ @property
571
+ def _0(self) -> Timeline: ...
572
+ def __new__(cls, _0: Timeline) -> ResponseToUser.NewTimeline: ...
573
+ def __len__(self) -> builtins.int: ...
574
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
575
+
576
+ class NewResult(ResponseToUser):
577
+ __match_args__ = ("_0",)
578
+ @property
579
+ def _0(self) -> typing.Any: ...
580
+ def __new__(cls, _0: typing.Any) -> ResponseToUser.NewResult: ...
581
+ def __len__(self) -> builtins.int: ...
582
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
583
+
584
+ class FinalResults(ResponseToUser):
585
+ __match_args__ = ("_0",)
586
+ @property
587
+ def _0(self) -> ResultsRecord: ...
588
+ def __new__(cls, _0: ResultsRecord) -> ResponseToUser.FinalResults: ...
589
+ def __len__(self) -> builtins.int: ...
590
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
591
+
592
+ class ScopeViewResult(ResponseToUser):
593
+ __match_args__ = (
594
+ "id",
595
+ "result",
596
+ )
597
+ @property
598
+ def id(self) -> builtins.int: ...
599
+ @property
600
+ def result(self) -> typing.Any: ...
601
+ def __new__(
602
+ cls, id: builtins.int, result: typing.Any
603
+ ) -> ResponseToUser.ScopeViewResult: ...
604
+
605
+ class ScopeViewDone(ResponseToUser):
606
+ __match_args__ = ("id",)
607
+ @property
608
+ def id(self) -> builtins.int: ...
609
+ def __new__(cls, id: builtins.int) -> ResponseToUser.ScopeViewDone: ...
610
+
611
+ class ChannelQueryResult(ResponseToUser):
612
+ __match_args__ = ("channels",)
613
+ @property
614
+ def channels(self) -> builtins.list[Channel]: ...
615
+ def __new__(
616
+ cls, channels: typing.Sequence[Channel]
617
+ ) -> ResponseToUser.ChannelQueryResult: ...
618
+
619
+ ...
620
+
621
+ class ResultsRecord:
622
+ r"""
623
+ Store analysis results for a given test.
624
+ """
625
+
626
+ ...
627
+
628
+ class ScopeViewHandle:
629
+ r"""
630
+ Clonable handle used to update a view
631
+ """
632
+ @property
633
+ def id(self) -> builtins.int: ...
634
+ def set_fft_params(self, params: InlineFFTParams) -> None: ...
635
+ def update(
636
+ self,
637
+ span_pip: typing.Optional[PipDuration] = None,
638
+ start_pip: typing.Optional[PipInstant] = None,
639
+ end_pip: typing.Optional[PipInstant] = None,
640
+ ) -> None:
641
+ r"""
642
+ Update the span of a view. This is a pythonic wrapper. Rust code should call update_online() or update_fixed().
643
+ """
644
+ def close(self) -> None: ...
645
+ def get_result_store(self) -> builtins.dict[AnalysisID, typing.Any]: ...
646
+
647
+ class SetMember:
648
+ class Channel(SetMember):
649
+ __match_args__ = ("_0",)
650
+ @property
651
+ def _0(self) -> Channel: ...
652
+ def __new__(cls, _0: Channel) -> SetMember.Channel: ...
653
+ def __len__(self) -> builtins.int: ...
654
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
655
+
656
+ ...
657
+
658
+ class SimpleUnit:
659
+ r"""
660
+ allow some standard units
661
+ to take care of custom string generation
662
+ and handling of slightly different unit names for the same units
663
+ and, potentially for some automatic conversion.
664
+ """
665
+ class Counts(SimpleUnit):
666
+ __match_args__ = ((),)
667
+ def __new__(cls) -> SimpleUnit.Counts: ...
668
+ def __len__(self) -> builtins.int: ...
669
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
670
+
671
+ class Custom(SimpleUnit):
672
+ __match_args__ = ("_0",)
673
+ @property
674
+ def _0(self) -> builtins.str: ...
675
+ def __new__(cls, _0: builtins.str) -> SimpleUnit.Custom: ...
676
+ def __len__(self) -> builtins.int: ...
677
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
678
+
679
+ ...
680
+
681
+ class StartTime:
682
+ r"""
683
+ An unbound StartTime will be bound when the run starts.
684
+ """
685
+ @staticmethod
686
+ def new(start_pip: typing.Optional[PipInstant]) -> StartTime: ...
687
+ class Unbound(StartTime):
688
+ r"""
689
+ An unbound start time means the start of the test is not yet determined.
690
+ """
691
+
692
+ __match_args__ = ((),)
693
+ def __new__(cls) -> StartTime.Unbound: ...
694
+ def __len__(self) -> builtins.int: ...
695
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
696
+
697
+ class Bound(StartTime):
698
+ r"""
699
+ A bound start time holds the start time of the test
700
+ """
701
+
702
+ __match_args__ = ("start_pip",)
703
+ @property
704
+ def start_pip(self) -> PipInstant:
705
+ r"""
706
+ The start time of the test.
707
+ """
708
+ def __new__(cls, start_pip: PipInstant) -> StartTime.Bound: ...
709
+
710
+ class TestParams:
711
+ @property
712
+ def version(self) -> builtins.int:
713
+ r"""
714
+ # Version
715
+ increment this number if releasing a new version of the struct
716
+ """
717
+ @property
718
+ def test_type(self) -> TestType:
719
+ r"""
720
+ # Test Type
721
+ """
722
+ @property
723
+ def start_time_pip(self) -> StartTime:
724
+ r"""
725
+ # Start Time
726
+ """
727
+ @property
728
+ def measurement_time_pip(self) -> PipDuration:
729
+ r"""
730
+ # time constraints
731
+ if both time and cycles are set to true,
732
+ then the measurement span will be
733
+ the least time that satisfies both.
734
+ minimum time span of a single segment
735
+ """
736
+ @property
737
+ def use_measurement_time(self) -> builtins.bool: ...
738
+ @property
739
+ def measurement_cycles(self) -> builtins.int:
740
+ r"""
741
+ minimum number of cycles
742
+ """
743
+ @property
744
+ def use_measurement_cycles(self) -> builtins.bool: ...
745
+ @property
746
+ def settling_time_frac(self) -> builtins.float:
747
+ r"""
748
+ # ramps and settling
749
+ fraction of measurement time needed to "settle" the system
750
+ """
751
+ @property
752
+ def ramp_down_pip(self) -> PipDuration:
753
+ r"""
754
+ time to ramp down excitations
755
+ """
756
+ @property
757
+ def ramp_up_pip(self) -> PipDuration:
758
+ r"""
759
+ time to ramp up excitations
760
+ """
761
+ @property
762
+ def calc_power_spectrum(self) -> builtins.bool:
763
+ r"""
764
+ # sine_options config
765
+ Whether to calculate power spectrum
766
+ Needed for sine response and swept sine
767
+ """
768
+ @property
769
+ def max_harmonic_order(self) -> builtins.int:
770
+ r"""
771
+ Maximum harmonic order to calculate
772
+ """
773
+ @property
774
+ def average_size(self) -> builtins.int:
775
+ r"""
776
+ # Averaging
777
+ Total number of segments to average
778
+ """
779
+ @property
780
+ def average_type(self) -> AverageType: ...
781
+ @property
782
+ def measurement_channels(self) -> builtins.list[ChannelSettingsParams]:
783
+ r"""
784
+ ## channel parameters
785
+ """
786
+ @property
787
+ def excitations(self) -> builtins.list[ExcitationSettingsParams]: ...
788
+ @property
789
+ def start_hz(self) -> builtins.float:
790
+ r"""
791
+ # FFT Tools params
792
+ """
793
+ @property
794
+ def stop_hz(self) -> builtins.float: ...
795
+ @property
796
+ def band_width_hz(self) -> builtins.float: ...
797
+ @property
798
+ def overlap(self) -> builtins.float:
799
+ r"""
800
+ as a fraction of the length of one segment
801
+ """
802
+ @property
803
+ def remove_mean(self) -> builtins.bool:
804
+ r"""
805
+ when true, subtract out the mean
806
+ """
807
+ @property
808
+ def quiet_time_pip(self) -> PipDuration:
809
+ r"""
810
+ time of from end of excitation to end of measurement
811
+ purpose is to prevent correlation from one segment to the next
812
+ due to time delay when using a random input
813
+ """
814
+ @property
815
+ def remove_decimation_delay(self) -> builtins.bool:
816
+ r"""
817
+ when false, don't remove the delay incurred by decimation filters
818
+ this should maybe always be true!
819
+ """
820
+ @property
821
+ def fft_window(self) -> FFTWindow:
822
+ r"""
823
+ Attenuation window to use on FFT input
824
+ """
825
+ @property
826
+ def custom_pipelines(self) -> builtins.list[CustomPipeline]:
827
+ r"""
828
+ Custom pipelines
829
+ User-provided pipelines written in python.
830
+ """
831
+ @staticmethod
832
+ def default_fft_params() -> TestParams: ...
833
+
834
+ class ThumpDuration:
835
+ def __sub__(self, other: ThumpDuration) -> ThumpDuration: ...
836
+ def __add__(self, other: typing.Any) -> typing.Any:
837
+ r"""
838
+ Add a duration to get a combined duration
839
+ or Add a instant to get a new instant
840
+ """
841
+ def __mul__(self, other: typing.Any) -> typing.Any:
842
+ r"""
843
+ Multiply by a number to get a scaled duration
844
+ """
845
+ def __rmul__(self, other: typing.Any) -> typing.Any: ...
846
+ def __truediv__(self, other: typing.Any) -> typing.Any:
847
+ r"""
848
+ Divide by a float or number to get a scaled duration
849
+ Divide by a duration to get a ratio.
850
+ """
851
+ def __floordiv__(self, other: typing.Any) -> typing.Any:
852
+ r"""
853
+ Divide by a float or number to get a scaled duration
854
+ Divide by a duration to get a ratio
855
+ """
856
+ def __mod__(self, other: typing.Any) -> typing.Any:
857
+ r"""
858
+ Get the remainder from an equivalent integer division
859
+ """
860
+ def __neg__(self) -> typing.Any: ...
861
+ def __pos__(self) -> typing.Any: ...
862
+ def __abs__(self) -> typing.Any: ...
863
+ @staticmethod
864
+ def freq_hz_to_period(rate_hz: builtins.float) -> ThumpDuration:
865
+ r"""
866
+ Convert a frequency as Hz into a duration that represents the corresponding period.
867
+ """
868
+ def period_to_freq_hz(self) -> builtins.float:
869
+ r"""
870
+ Convert a duration that represents a period into the corresponding frequency as Hz.
871
+ """
872
+ @staticmethod
873
+ def from_seconds(seconds: builtins.float) -> ThumpDuration:
874
+ r"""
875
+ Create a duration given the length in seconds.
876
+ """
877
+ def to_seconds(self) -> builtins.float:
878
+ r"""
879
+ Return the length of the duration as seconds.
880
+ """
881
+ @staticmethod
882
+ def from_sec(seconds: builtins.int) -> ThumpDuration:
883
+ r"""
884
+ Create a duration given the length in seconds.
885
+ """
886
+ def to_sec(self) -> builtins.int:
887
+ r"""
888
+ Round the duration to the nearest second.
889
+
890
+ Return 0 for negative durations.
891
+ """
892
+ @staticmethod
893
+ def from_nanoseconds(nanoseconds: builtins.int) -> ThumpDuration:
894
+ r"""
895
+ Create a duration given the length in nanoseconds.
896
+ """
897
+ def to_nanoseconds(self) -> builtins.int:
898
+ r"""
899
+ Return the length to the nearest nanosecond,
900
+ but return zero if the duration is negative.
901
+ """
902
+ def to_seconds_nanoseconds(self) -> tuple[builtins.int, builtins.int]:
903
+ r"""
904
+ Return the length as seconds and nanoseconds
905
+ """
906
+ @staticmethod
907
+ def from_thumps(thumps: builtins.int) -> ThumpDuration:
908
+ r"""
909
+ Create a duration object from a numerical value of the same units.
910
+ """
911
+ @staticmethod
912
+ def from_seconds_nanoseconds(
913
+ seconds: builtins.int, nano: builtins.int
914
+ ) -> ThumpDuration:
915
+ r"""
916
+ Create a duration given the length as seconds and nanoseconds
917
+ """
918
+ def to_thumps(self) -> builtins.int:
919
+ r"""
920
+ Return duration in units of the type..
921
+ """
922
+ def is_empty(self) -> builtins.bool:
923
+ r"""
924
+ True if the length of the duration is zero.
925
+ """
926
+ def abs(self) -> ThumpDuration:
927
+ r"""
928
+ Return a non-negative duration of the same magnitude.
929
+ """
930
+ def snap_to_step(self, step: ThumpDuration) -> ThumpDuration:
931
+ r"""
932
+ Snap to the nearest integer multiple of a step size.
933
+ """
934
+ def snap_down_to_step(self, step: ThumpDuration) -> ThumpDuration:
935
+ r"""
936
+ Snap to the largest integer <= self that's a multiple of a step size.
937
+
938
+ Like snap_to_step, but takes the floor rather than the nearest.
939
+ """
940
+ def snap_up_to_step(self, step: ThumpDuration) -> ThumpDuration:
941
+ r"""
942
+ Snap to the smallest integer >= self that's a multiple of a step size.
943
+
944
+ Like snap_to_step, but takes the ceiling rather than the nearest.
945
+ """
946
+ @staticmethod
947
+ def rate_hz() -> builtins.int:
948
+ r"""
949
+ Return the rate of the units in Hz
950
+ """
951
+
952
+ class ThumpInstant:
953
+ def __add__(self, other: ThumpDuration) -> ThumpInstant: ...
954
+ def __sub__(self, other: typing.Any) -> typing.Any:
955
+ r"""
956
+ Subtract a duration to get an instant,
957
+ or subtract a instant to get the difference as a duration.
958
+ """
959
+ @staticmethod
960
+ def now() -> ThumpInstant:
961
+ r"""
962
+ return the current time
963
+ """
964
+ def to_gpst_thumps(self) -> builtins.int:
965
+ r"""
966
+ Return the number of steps since the GPS epoch.
967
+ """
968
+ def to_gpst_seconds_nanoseconds(self) -> tuple[builtins.int, builtins.int]:
969
+ r"""
970
+ Return the nearest nanosecond since the GPS epoch.
971
+ """
972
+ def to_gpst_nanoseconds(self) -> builtins.int:
973
+ r"""
974
+ If positive, return nanoseconds since the GPS epoch, otherwise zero.
975
+ """
976
+ def to_gpst_sec(self) -> builtins.int:
977
+ r"""
978
+ Return the seconds since GPS epoch rounded down to the latest second
979
+ earlier than or coincident with the instant.
980
+
981
+ Returns 0 for instants before the GPS epoch.
982
+ """
983
+ def to_gpst_seconds(self) -> builtins.float:
984
+ r"""
985
+ Return the number of seconds since the GPS epoch.
986
+ """
987
+ @staticmethod
988
+ def from_gpst_seconds_nanoseconds(
989
+ seconds: builtins.int, nano: builtins.int
990
+ ) -> ThumpInstant:
991
+ r"""
992
+ Create an instant given seconds + nanoseconds since the GPS epoch.
993
+ """
994
+ @staticmethod
995
+ def from_gpst_nanoseconds(nano: builtins.int) -> ThumpInstant:
996
+ r"""
997
+ Create an instant given nanoseconds since the GPS epoch.
998
+ """
999
+ @staticmethod
1000
+ def from_gpst_seconds(seconds: builtins.float) -> ThumpInstant:
1001
+ r"""
1002
+ Create an instant given seconds since the GPS epoch.
1003
+ """
1004
+ @staticmethod
1005
+ def gpst_epoch() -> ThumpInstant:
1006
+ r"""
1007
+ Create an instant at Midnight UTC, Jan 6 1980,
1008
+ the reference epoch for the GPS time system.
1009
+ """
1010
+ @staticmethod
1011
+ def from_gpst_sec(seconds: builtins.int) -> ThumpInstant:
1012
+ r"""
1013
+ Create an instant given whole seconds since the GPS epoch.
1014
+ """
1015
+ @staticmethod
1016
+ def from_gpst_thumps(thumps: builtins.int) -> ThumpInstant:
1017
+ r"""
1018
+ Create an instant given steps since the GPS epoch.
1019
+ """
1020
+ def snap_to_step(self, step: ThumpDuration) -> ThumpInstant:
1021
+ r"""
1022
+ Snap to the nearest integer multiple of a step size.
1023
+ """
1024
+ def snap_down_to_step(self, step: ThumpDuration) -> ThumpInstant:
1025
+ r"""
1026
+ Snap to the largest integer <= self that's a multiple of a step size.
1027
+
1028
+ Like snap_to_step, but takes the floor rather than the nearest.
1029
+ """
1030
+ def snap_up_to_step(self, step: ThumpDuration) -> ThumpInstant:
1031
+ r"""
1032
+ Snap to the smallest integer >= self that's a multiple of a step size.
1033
+
1034
+ Like snap_to_step, but takes the ceiling rather than the nearest.
1035
+ """
1036
+ @staticmethod
1037
+ def rate_hz() -> builtins.int:
1038
+ r"""
1039
+ Return the rate of the units in Hz
1040
+ """
1041
+
1042
+ class TimeDomainArray:
1043
+ @property
1044
+ def start_gps_pip(self) -> PipInstant: ...
1045
+ @property
1046
+ def period_pip(self) -> PipDuration: ...
1047
+ @property
1048
+ def n(self) -> builtins.float: ...
1049
+ @property
1050
+ def sequence_index(self) -> builtins.int: ...
1051
+ @property
1052
+ def sequence_size(self) -> builtins.int: ...
1053
+ @property
1054
+ def data(self) -> typing.Any: ...
1055
+ @property
1056
+ def total_gap_size(self) -> builtins.int: ...
1057
+ @property
1058
+ def id(self) -> AnalysisID: ...
1059
+ @property
1060
+ def unit(self) -> Unit: ...
1061
+ @property
1062
+ def rate_hz(self) -> builtins.float: ...
1063
+ def end_gps_pip(self) -> PipInstant:
1064
+ r"""
1065
+ return the time of the first timestamp after the end of the time series
1066
+ equal to the start time of the following series if it is contiguous.
1067
+ """
1068
+ def len(self) -> builtins.int: ...
1069
+ def is_empty(self) -> builtins.bool: ...
1070
+ def index_to_gps_instant(self, index: builtins.int) -> PipInstant: ...
1071
+ def gps_instant_to_index(self, instant: PipInstant) -> builtins.int:
1072
+ r"""
1073
+ return the a non-negative index that's closes to the time given
1074
+ if the time given is before the start, the return value is zero
1075
+ but the return value can be greater or equal to the length of the array
1076
+ and therefore out of bounds
1077
+ """
1078
+
1079
+ class Timeline: ...
1080
+
1081
+ class Unit:
1082
+ r"""
1083
+ map a simple unit to a rational power
1084
+ """
1085
+
1086
+ ...
1087
+
1088
+ class UserMessage:
1089
+ @property
1090
+ def severity(self) -> Severity: ...
1091
+ @property
1092
+ def message(self) -> builtins.str: ...
1093
+ def __repr__(self) -> builtins.str: ...
1094
+
1095
+ class ViewSet:
1096
+ @staticmethod
1097
+ def from_channels(channels: typing.Sequence[Channel]) -> ViewSet:
1098
+ r"""
1099
+ convenience function
1100
+ for turning a simple list of channels into a ViewSet
1101
+ """
1102
+ @staticmethod
1103
+ def from_channel_names(
1104
+ channel_names: typing.Sequence[builtins.str], trend: TrendType
1105
+ ) -> ViewSet:
1106
+ r"""
1107
+ convenience function
1108
+ for turning a simple list of channel names into a ViewSet with
1109
+ unresolved channel names
1110
+ """
1111
+ def has_unresolved_channels(self) -> builtins.bool: ...
1112
+ def to_resolved_channel_names(self) -> builtins.list[builtins.str]:
1113
+ r"""
1114
+ Return the resolved names of any channels in the set
1115
+ Including expected resolved names of unresolved channels.
1116
+ """
1117
+
1118
+ class AverageType(Enum):
1119
+ Fixed = ...
1120
+ Exponential = ...
1121
+ Accumulative = ...
1122
+ ConvergingExponential = ...
1123
+
1124
+ class ChannelType(Enum):
1125
+ r"""
1126
+ channel type is used in NDS queries. I'm not sure how
1127
+ important these are, or how they map to NDS records.
1128
+ """
1129
+
1130
+ Unknown = ...
1131
+ Online = ...
1132
+ Raw = ...
1133
+ RDS = ...
1134
+ STrend = ...
1135
+ MTrend = ...
1136
+ TestPoint = ...
1137
+ Static = ...
1138
+
1139
+ class DataFlow(Enum):
1140
+ Unordered = ...
1141
+ r"""
1142
+ Data is sent repeatedly as
1143
+ more of the request is filled in.
1144
+
1145
+ Each response gives all the data available.
1146
+
1147
+ This is how NDScope expects data.
1148
+ """
1149
+ Ordered = ...
1150
+ r"""
1151
+ Data is returned from the earliest time stamp to the latest.
1152
+ Data is returned only once.
1153
+ This is how DTT expects data.
1154
+ """
1155
+
1156
+ class DecimationFilter(Enum):
1157
+ FirLS1 = ...
1158
+ FirPM1 = ...
1159
+ FirLS2 = ...
1160
+ FirLS3 = ...
1161
+
1162
+ class FFTWindow(Enum):
1163
+ Uniform = ...
1164
+ Hann = ...
1165
+ FlatTop = ...
1166
+ Welch = ...
1167
+ Bartlett = ...
1168
+ BlackmanHarris = ...
1169
+ Hamming = ...
1170
+
1171
+ class NDSDataType(Enum):
1172
+ r"""
1173
+ These values are taken from the NDS2 client
1174
+ With a hoped-for extension for
1175
+ Complex128
1176
+ Note the names for complex take the total size of the number
1177
+ Not the size of real or imaginary components as the actual NDS2 client does.
1178
+
1179
+ So an NDS2 Client type Complex32 is an NDSDataType::Complex64
1180
+ """
1181
+
1182
+ Int16 = ...
1183
+ Int32 = ...
1184
+ Int64 = ...
1185
+ Float32 = ...
1186
+ Float64 = ...
1187
+ Complex64 = ...
1188
+ UInt32 = ...
1189
+ Complex128 = ...
1190
+ r"""
1191
+ not yet implemented in NDS or Arrakis
1192
+ """
1193
+ UInt64 = ...
1194
+ UInt16 = ...
1195
+ Int8 = ...
1196
+ UInt8 = ...
1197
+
1198
+ class Severity(Enum):
1199
+ Debug = ...
1200
+ Notice = ...
1201
+ ConfigurationWarning = ...
1202
+ Warning = ...
1203
+ Error = ...
1204
+ ConfigurationError = ...
1205
+ FatalError = ...
1206
+ SystemError = ...
1207
+
1208
+ class TestType(Enum):
1209
+ r"""
1210
+ Parameters unique to the test type
1211
+ """
1212
+
1213
+ FFTTools = ...
1214
+ SweptSine = ...
1215
+ SineResponse = ...
1216
+ TimeSeries = ...
1217
+
1218
+ class TrendStat(Enum):
1219
+ r"""
1220
+ Channel statistics type for a trend channel, or Raw for raw channels
1221
+ """
1222
+
1223
+ Raw = ...
1224
+ r"""
1225
+ Raw data, not a trend channel
1226
+ """
1227
+ Mean = ...
1228
+ Rms = ...
1229
+ r"""
1230
+ Root-mean-square
1231
+ """
1232
+ Min = ...
1233
+ Max = ...
1234
+ N = ...
1235
+ r"""
1236
+ Number of data points in the trend bucket
1237
+ """
1238
+
1239
+ def data_name(self) -> builtins.str:
1240
+ r"""
1241
+ used for names of exported data blocks
1242
+ """
1243
+
1244
+ class TrendType(Enum):
1245
+ r"""
1246
+ The trend of a ChannelId
1247
+ """
1248
+
1249
+ Raw = ...
1250
+ Minute = ...
1251
+ Second = ...