dttlib 0.5.7__cp312-cp312-manylinux_2_31_x86_64.whl → 0.9.5__cp312-cp312-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.
dttlib/__init__.pyi CHANGED
@@ -5,6 +5,369 @@ import builtins
5
5
  import typing
6
6
  from enum import Enum
7
7
 
8
+ class AnalysisHeaderId:
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: ChannelHeader) -> AnalysisHeaderId: ...
18
+ def __new__(
19
+ cls, name: builtins.str, args: typing.Sequence[AnalysisHeaderId]
20
+ ) -> AnalysisHeaderId: ...
21
+ def first_channel(self) -> ChannelHeader:
22
+ r"""
23
+ get the first channel
24
+ """
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):
44
+ __match_args__ = (
45
+ "name",
46
+ "args",
47
+ )
48
+ @property
49
+ def name(self) -> builtins.str: ...
50
+ @property
51
+ def args(self) -> builtins.list[AnalysisHeaderId]: ...
52
+ def __new__(
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, ...)"
61
+
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):
86
+ __match_args__ = ("channel",)
87
+ @property
88
+ def channel(self) -> 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: ...
247
+
248
+ class Channel:
249
+ @property
250
+ def name(self) -> builtins.str: ...
251
+ @property
252
+ def data_type(self) -> NDSDataType: ...
253
+ @property
254
+ def channel_type(self) -> ChannelType: ...
255
+ @property
256
+ def period(self) -> PipDuration: ...
257
+ @property
258
+ def dcu_id(self) -> typing.Optional[builtins.int]: ...
259
+ @property
260
+ def channel_number(self) -> typing.Optional[builtins.int]: ...
261
+ @property
262
+ def calibration(self) -> typing.Optional[builtins.int]: ...
263
+ @property
264
+ def heterodyne_freq_hz(self) -> typing.Optional[builtins.float]: ...
265
+ @property
266
+ def gain(self) -> typing.Optional[builtins.float]: ...
267
+ @property
268
+ def slope(self) -> typing.Optional[builtins.float]: ...
269
+ @property
270
+ def offset(self) -> typing.Optional[builtins.float]: ...
271
+ @property
272
+ def use_active_time(self) -> builtins.bool: ...
273
+ @property
274
+ def units(self) -> Unit: ...
275
+ @property
276
+ def trend_stat(self) -> TrendStat: ...
277
+ @property
278
+ def trend_type(self) -> TrendType: ...
279
+ @property
280
+ def online(self) -> builtins.bool: ...
281
+ @property
282
+ def testpoint(self) -> builtins.bool: ...
283
+ @property
284
+ def rate_hz(self) -> builtins.float: ...
285
+ def __new__(
286
+ cls, name: builtins.str, data_type: NDSDataType, period: PipDuration
287
+ ) -> Channel: ...
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
+
302
+ class ChannelId:
303
+ r"""
304
+ Provides enough info to query a channel from an NDS server by name.
305
+ """
306
+ @property
307
+ def name(self) -> builtins.str: ...
308
+ @property
309
+ def trend_type(self) -> TrendType: ...
310
+ def __new__(cls, name: builtins.str, trend_type: TrendType) -> ChannelId: ...
311
+ def expected_stats(self) -> builtins.list[TrendStat]:
312
+ r"""
313
+ These are the stats we expect to get for a single trend request.
314
+ One ChannelID will return into a channel for each.
315
+ """
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
+
325
+ class ChannelParams:
326
+ @property
327
+ def active(self) -> builtins.bool: ...
328
+ @property
329
+ def channel(self) -> Channel: ...
330
+
331
+ class ChannelQuery:
332
+ r"""
333
+ Constraints on a channel query
334
+ to a data source
335
+ """
336
+ def __new__(
337
+ cls,
338
+ pattern: typing.Optional[builtins.str] = None,
339
+ channel_types: typing.Optional[typing.Sequence[ChannelType]] = None,
340
+ data_types: typing.Optional[typing.Sequence[NDSDataType]] = None,
341
+ min_sample_rate: typing.Optional[builtins.float] = None,
342
+ max_sample_rate: typing.Optional[builtins.float] = None,
343
+ gps_start: typing.Optional[builtins.int] = None,
344
+ gps_end: typing.Optional[builtins.int] = None,
345
+ ) -> ChannelQuery: ...
346
+
347
+ class ChannelSettings:
348
+ r"""
349
+ full record of a channel including some pre-calculated timeline info used
350
+ in DTT tests.
351
+ """
352
+ @property
353
+ def channel(self) -> Channel: ...
354
+ @property
355
+ def raw_decimation_params(self) -> DecimationParameters: ...
356
+ @property
357
+ def heterodyned_decimation_params(self) -> DecimationParameters: ...
358
+ @property
359
+ def do_heterodyne(self) -> builtins.bool: ...
360
+ @property
361
+ def decimation_delays(self) -> DecimationDelays: ...
362
+
363
+ class ChannelSettingsParams:
364
+ @property
365
+ def active(self) -> builtins.bool: ...
366
+ @property
367
+ def channel(self) -> ChannelSettings: ...
368
+
369
+ class CustomPipeline: ...
370
+
8
371
  class DTT:
9
372
  r"""
10
373
  ## immutable "global" values
@@ -15,9 +378,157 @@ class DTT:
15
378
 
16
379
  Applications should use the init_...() functions to create this structure.
17
380
  """
381
+ def set_data_source(self, data_source: DataSource) -> None:
382
+ r"""
383
+ set the desired data source
384
+ """
385
+ def set_test_params(self, params: TestParams) -> None:
386
+ r"""
387
+ Set up a test. Eventually, the library will send an updated Timeline object
388
+ on the associated output receiver.
389
+ Start the test with run_test().
390
+ An error means the DTT management process has died.
391
+ """
392
+ def run_test(self) -> None:
393
+ r"""
394
+ Start a test.
395
+ The test must already be configured with set_test_params.
396
+ As the test is run, status messages and results will appear on
397
+ the associated output receiver.
398
+ An error means the DTT management process has died.
399
+ """
400
+ def no_op(self) -> None:
401
+ r"""
402
+ Send a no-op message.
403
+ """
404
+ def new_online_scope_view(
405
+ self, set: ViewSet, span_pip: PipDuration
406
+ ) -> ScopeViewHandle:
407
+ r"""
408
+ Create a new online scope view and return a handle to it.
409
+ Drop all clones of the handle to close the view.
410
+ """
411
+ def new_fixed_scope_view(
412
+ self, set: ViewSet, start_pip: PipInstant, end_pip: PipInstant
413
+ ) -> ScopeViewHandle:
414
+ r"""
415
+ Create a new fixed scope view and return a handle to it.
416
+ Drop all clones of the handle to close the view
417
+ """
418
+ def find_channels(self, query: ChannelQuery) -> None: ...
419
+ def __new__(cls, callback: typing.Any) -> DTT:
420
+ r"""
421
+ Creation of a DTT object from Python requires a callback function as an argument.
422
+ The call back will receive [ResponseToUser] messages from the [DTT] object
423
+ Since the [DTT] object is asynchronous under the hood, most methods
424
+ return immediately without any result. [ResponseToUser] messages
425
+ are the primary way to get feedback from the DTT object.
426
+ """
427
+
428
+ class DataSource:
429
+ r"""
430
+ wrappers needed for python
431
+ """
432
+ def now(self) -> PipInstant: ...
433
+
434
+ class DecimationDelays:
435
+ r"""
436
+ collects the delays associated with the total decimation on the channel
437
+ """
18
438
 
19
439
  ...
20
440
 
441
+ class DecimationParameters:
442
+ r"""
443
+ Values used to generate a decimation pipeline for a single stage of decimation
444
+ """
445
+ @property
446
+ def filter(self) -> DecimationFilter:
447
+ r"""
448
+ anti-aliasing filter
449
+ """
450
+ @property
451
+ def num_decs(self) -> builtins.int:
452
+ r"""
453
+ number of x2 decimations
454
+ """
455
+
456
+ class Excitation:
457
+ @property
458
+ def channel(self) -> Channel: ...
459
+ @property
460
+ def read_back_channel(self) -> typing.Optional[Channel]: ...
461
+
462
+ class ExcitationParams:
463
+ @property
464
+ def active(self) -> builtins.bool: ...
465
+ @property
466
+ def excitation(self) -> Excitation: ...
467
+
468
+ class ExcitationSettings:
469
+ @property
470
+ def channel(self) -> ChannelSettings: ...
471
+ @property
472
+ def read_back_channel(self) -> typing.Optional[ChannelSettings]: ...
473
+
474
+ class ExcitationSettingsParams:
475
+ @property
476
+ def active(self) -> builtins.bool: ...
477
+ @property
478
+ def excitation(self) -> ExcitationSettings: ...
479
+
480
+ class FreqDomainArray:
481
+ @property
482
+ def start_gps_pip(self) -> PipInstant: ...
483
+ @property
484
+ def start_hz(self) -> builtins.float: ...
485
+ @property
486
+ def bucket_width_hz(self) -> builtins.float: ...
487
+ @property
488
+ def overlap(self) -> builtins.float: ...
489
+ @property
490
+ def sequence_index(self) -> builtins.int: ...
491
+ @property
492
+ def sequence_size(self) -> builtins.int: ...
493
+ @property
494
+ def n(self) -> builtins.float: ...
495
+ @property
496
+ def data(self) -> typing.Any: ...
497
+ @property
498
+ def id(self) -> AnalysisId: ...
499
+ @property
500
+ def unit(self) -> Unit: ...
501
+ def clone_metadata(
502
+ self, id: AnalysisId, unit: Unit, new_data: typing.Any
503
+ ) -> FreqDomainArray:
504
+ r"""
505
+ Copy everything from another object except replace the data
506
+ with a new python list of data
507
+ """
508
+
509
+ class InlineFFTParams:
510
+ @property
511
+ def bandwidth_hz(self) -> builtins.float: ...
512
+ @property
513
+ def overlap(self) -> builtins.float: ...
514
+ @property
515
+ def start_pip(self) -> PipInstant: ...
516
+ @property
517
+ def end_pip(self) -> PipInstant: ...
518
+ @property
519
+ def window(self) -> FFTWindow: ...
520
+ @bandwidth_hz.setter
521
+ def bandwidth_hz(self, value: builtins.float) -> None: ...
522
+ @overlap.setter
523
+ def overlap(self, value: builtins.float) -> None: ...
524
+ @start_pip.setter
525
+ def start_pip(self, value: PipInstant) -> None: ...
526
+ @end_pip.setter
527
+ def end_pip(self, value: PipInstant) -> None: ...
528
+ @window.setter
529
+ def window(self, value: FFTWindow) -> None: ...
530
+ def __new__(cls) -> InlineFFTParams: ...
531
+
21
532
  class MessageJob:
22
533
  def get_tag(self) -> builtins.str:
23
534
  r"""
@@ -42,6 +553,15 @@ class MessageJob:
42
553
  def tag(self) -> builtins.str: ...
43
554
  def __new__(cls, tag: builtins.str) -> MessageJob.ClearMessage: ...
44
555
 
556
+ class NDS2Cache:
557
+ r"""
558
+ Data source that gets all its data directly from an NDS2 server (no local caching).
559
+ """
560
+ def __new__(
561
+ cls, size_bytes: builtins.int, default_file_path: builtins.str
562
+ ) -> NDS2Cache: ...
563
+ def as_ref(self) -> DataSource: ...
564
+
45
565
  class PipDuration:
46
566
  def __sub__(self, other: PipDuration) -> PipDuration: ...
47
567
  def __add__(self, other: typing.Any) -> typing.Any:
@@ -167,6 +687,11 @@ class PipInstant:
167
687
  Subtract a duration to get an instant,
168
688
  or subtract a instant to get the difference as a duration.
169
689
  """
690
+ @staticmethod
691
+ def now() -> PipInstant:
692
+ r"""
693
+ return the current time
694
+ """
170
695
  def to_gpst_pips(self) -> builtins.int:
171
696
  r"""
172
697
  Return the number of steps since the GPS epoch.
@@ -245,6 +770,283 @@ class PipInstant:
245
770
  Return the rate of the units in Hz
246
771
  """
247
772
 
773
+ class ResponseToUser:
774
+ r"""
775
+ Any data sent to the user from a [DTT] struct
776
+ In python, these will be passed to the callback function
777
+ passed to the [dttlib.init](crate::python::dttlib::init) function
778
+ """
779
+ class AllMessages(ResponseToUser):
780
+ __match_args__ = ("_0",)
781
+ @property
782
+ def _0(self) -> builtins.dict[builtins.str, UserMessage]: ...
783
+ def __new__(
784
+ cls, _0: typing.Mapping[builtins.str, UserMessage]
785
+ ) -> ResponseToUser.AllMessages: ...
786
+ def __len__(self) -> builtins.int: ...
787
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
788
+
789
+ class UpdateMessages(ResponseToUser):
790
+ __match_args__ = ("message_job",)
791
+ @property
792
+ def message_job(self) -> MessageJob: ...
793
+ def __new__(cls, message_job: MessageJob) -> ResponseToUser.UpdateMessages: ...
794
+
795
+ class NewTimeline(ResponseToUser):
796
+ __match_args__ = ("_0",)
797
+ @property
798
+ def _0(self) -> Timeline: ...
799
+ def __new__(cls, _0: Timeline) -> ResponseToUser.NewTimeline: ...
800
+ def __len__(self) -> builtins.int: ...
801
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
802
+
803
+ class NewResult(ResponseToUser):
804
+ __match_args__ = ("_0",)
805
+ @property
806
+ def _0(self) -> typing.Any: ...
807
+ def __new__(cls, _0: typing.Any) -> ResponseToUser.NewResult: ...
808
+ def __len__(self) -> builtins.int: ...
809
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
810
+
811
+ class FinalResults(ResponseToUser):
812
+ __match_args__ = ("_0",)
813
+ @property
814
+ def _0(self) -> ResultsRecord: ...
815
+ def __new__(cls, _0: ResultsRecord) -> ResponseToUser.FinalResults: ...
816
+ def __len__(self) -> builtins.int: ...
817
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
818
+
819
+ class ScopeViewResult(ResponseToUser):
820
+ __match_args__ = (
821
+ "id",
822
+ "result",
823
+ )
824
+ @property
825
+ def id(self) -> builtins.int: ...
826
+ @property
827
+ def result(self) -> typing.Any: ...
828
+ def __new__(
829
+ cls, id: builtins.int, result: typing.Any
830
+ ) -> ResponseToUser.ScopeViewResult: ...
831
+
832
+ class ScopeViewDone(ResponseToUser):
833
+ __match_args__ = ("id",)
834
+ @property
835
+ def id(self) -> builtins.int: ...
836
+ def __new__(cls, id: builtins.int) -> ResponseToUser.ScopeViewDone: ...
837
+
838
+ class ChannelQueryResult(ResponseToUser):
839
+ __match_args__ = ("channels",)
840
+ @property
841
+ def channels(self) -> builtins.list[Channel]: ...
842
+ def __new__(
843
+ cls, channels: typing.Sequence[Channel]
844
+ ) -> ResponseToUser.ChannelQueryResult: ...
845
+
846
+ ...
847
+
848
+ class ResultsRecord:
849
+ r"""
850
+ Store analysis results for a given test.
851
+ """
852
+
853
+ ...
854
+
855
+ class ScopeViewHandle:
856
+ r"""
857
+ Clonable handle used to update a view
858
+ """
859
+ @property
860
+ def id(self) -> builtins.int: ...
861
+ def set_fft_params(self, params: InlineFFTParams) -> None: ...
862
+ def update(
863
+ self,
864
+ span_pip: typing.Optional[PipDuration] = None,
865
+ start_pip: typing.Optional[PipInstant] = None,
866
+ end_pip: typing.Optional[PipInstant] = None,
867
+ ) -> None:
868
+ r"""
869
+ Update the span of a view. This is a pythonic wrapper. Rust code should call update_online() or update_fixed().
870
+ """
871
+ def close(self) -> None: ...
872
+ def get_result_store(self) -> builtins.dict[AnalysisId, typing.Any]: ...
873
+
874
+ class SimpleUnit:
875
+ r"""
876
+ allow some standard units
877
+ to take care of custom string generation
878
+ and handling of slightly different unit names for the same units
879
+ and, potentially for some automatic conversion.
880
+ """
881
+ class Counts(SimpleUnit):
882
+ __match_args__ = ((),)
883
+ def __new__(cls) -> SimpleUnit.Counts: ...
884
+ def __len__(self) -> builtins.int: ...
885
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
886
+
887
+ class Custom(SimpleUnit):
888
+ __match_args__ = ("_0",)
889
+ @property
890
+ def _0(self) -> builtins.str: ...
891
+ def __new__(cls, _0: builtins.str) -> SimpleUnit.Custom: ...
892
+ def __len__(self) -> builtins.int: ...
893
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
894
+
895
+ ...
896
+
897
+ class StartTime:
898
+ r"""
899
+ An unbound StartTime will be bound when the run starts.
900
+ """
901
+ @staticmethod
902
+ def new(start_pip: typing.Optional[PipInstant]) -> StartTime: ...
903
+ class Unbound(StartTime):
904
+ r"""
905
+ An unbound start time means the start of the test is not yet determined.
906
+ """
907
+
908
+ __match_args__ = ((),)
909
+ def __new__(cls) -> StartTime.Unbound: ...
910
+ def __len__(self) -> builtins.int: ...
911
+ def __getitem__(self, key: builtins.int) -> typing.Any: ...
912
+
913
+ class Bound(StartTime):
914
+ r"""
915
+ A bound start time holds the start time of the test
916
+ """
917
+
918
+ __match_args__ = ("start_pip",)
919
+ @property
920
+ def start_pip(self) -> PipInstant:
921
+ r"""
922
+ The start time of the test.
923
+ """
924
+ def __new__(cls, start_pip: PipInstant) -> StartTime.Bound: ...
925
+
926
+ class TestParams:
927
+ @property
928
+ def version(self) -> builtins.int:
929
+ r"""
930
+ # Version
931
+ increment this number if releasing a new version of the struct
932
+ """
933
+ @property
934
+ def test_type(self) -> TestType:
935
+ r"""
936
+ # Test Type
937
+ """
938
+ @property
939
+ def start_time_pip(self) -> StartTime:
940
+ r"""
941
+ # Start Time
942
+ """
943
+ @property
944
+ def measurement_time_pip(self) -> PipDuration:
945
+ r"""
946
+ # time constraints
947
+ if both time and cycles are set to true,
948
+ then the measurement span will be
949
+ the least time that satisfies both.
950
+ minimum time span of a single segment
951
+ """
952
+ @property
953
+ def use_measurement_time(self) -> builtins.bool: ...
954
+ @property
955
+ def measurement_cycles(self) -> builtins.int:
956
+ r"""
957
+ minimum number of cycles
958
+ """
959
+ @property
960
+ def use_measurement_cycles(self) -> builtins.bool: ...
961
+ @property
962
+ def settling_time_frac(self) -> builtins.float:
963
+ r"""
964
+ # ramps and settling
965
+ fraction of measurement time needed to "settle" the system
966
+ """
967
+ @property
968
+ def ramp_down_pip(self) -> PipDuration:
969
+ r"""
970
+ time to ramp down excitations
971
+ """
972
+ @property
973
+ def ramp_up_pip(self) -> PipDuration:
974
+ r"""
975
+ time to ramp up excitations
976
+ """
977
+ @property
978
+ def calc_power_spectrum(self) -> builtins.bool:
979
+ r"""
980
+ # sine_options config
981
+ Whether to calculate power spectrum
982
+ Needed for sine response and swept sine
983
+ """
984
+ @property
985
+ def max_harmonic_order(self) -> builtins.int:
986
+ r"""
987
+ Maximum harmonic order to calculate
988
+ """
989
+ @property
990
+ def average_size(self) -> builtins.int:
991
+ r"""
992
+ # Averaging
993
+ Total number of segments to average
994
+ """
995
+ @property
996
+ def average_type(self) -> AverageType: ...
997
+ @property
998
+ def measurement_channels(self) -> builtins.list[ChannelSettingsParams]:
999
+ r"""
1000
+ ## channel parameters
1001
+ """
1002
+ @property
1003
+ def excitations(self) -> builtins.list[ExcitationSettingsParams]: ...
1004
+ @property
1005
+ def start_hz(self) -> builtins.float:
1006
+ r"""
1007
+ # FFT Tools params
1008
+ """
1009
+ @property
1010
+ def stop_hz(self) -> builtins.float: ...
1011
+ @property
1012
+ def band_width_hz(self) -> builtins.float: ...
1013
+ @property
1014
+ def overlap(self) -> builtins.float:
1015
+ r"""
1016
+ as a fraction of the length of one segment
1017
+ """
1018
+ @property
1019
+ def remove_mean(self) -> builtins.bool:
1020
+ r"""
1021
+ when true, subtract out the mean
1022
+ """
1023
+ @property
1024
+ def quiet_time_pip(self) -> PipDuration:
1025
+ r"""
1026
+ time of from end of excitation to end of measurement
1027
+ purpose is to prevent correlation from one segment to the next
1028
+ due to time delay when using a random input
1029
+ """
1030
+ @property
1031
+ def remove_decimation_delay(self) -> builtins.bool:
1032
+ r"""
1033
+ when false, don't remove the delay incurred by decimation filters
1034
+ this should maybe always be true!
1035
+ """
1036
+ @property
1037
+ def fft_window(self) -> FFTWindow:
1038
+ r"""
1039
+ Attenuation window to use on FFT input
1040
+ """
1041
+ @property
1042
+ def custom_pipelines(self) -> builtins.list[CustomPipeline]:
1043
+ r"""
1044
+ Custom pipelines
1045
+ User-provided pipelines written in python.
1046
+ """
1047
+ @staticmethod
1048
+ def default_fft_params() -> TestParams: ...
1049
+
248
1050
  class ThumpDuration:
249
1051
  def __sub__(self, other: ThumpDuration) -> ThumpDuration: ...
250
1052
  def __add__(self, other: typing.Any) -> typing.Any:
@@ -370,6 +1172,11 @@ class ThumpInstant:
370
1172
  Subtract a duration to get an instant,
371
1173
  or subtract a instant to get the difference as a duration.
372
1174
  """
1175
+ @staticmethod
1176
+ def now() -> ThumpInstant:
1177
+ r"""
1178
+ return the current time
1179
+ """
373
1180
  def to_gpst_thumps(self) -> builtins.int:
374
1181
  r"""
375
1182
  Return the number of steps since the GPS epoch.
@@ -448,6 +1255,61 @@ class ThumpInstant:
448
1255
  Return the rate of the units in Hz
449
1256
  """
450
1257
 
1258
+ class TimeDomainArray:
1259
+ @property
1260
+ def start_gps_pip(self) -> PipInstant: ...
1261
+ @property
1262
+ def real_end_gps_pip(self) -> typing.Optional[PipInstant]: ...
1263
+ @property
1264
+ def period_pip(self) -> PipDuration: ...
1265
+ @property
1266
+ def n(self) -> builtins.float: ...
1267
+ @property
1268
+ def sequence_index(self) -> builtins.int: ...
1269
+ @property
1270
+ def sequence_size(self) -> builtins.int: ...
1271
+ @property
1272
+ def data(self) -> typing.Any: ...
1273
+ @property
1274
+ def total_gap_size(self) -> builtins.int: ...
1275
+ @property
1276
+ def id(self) -> AnalysisId: ...
1277
+ @property
1278
+ def unit(self) -> Unit: ...
1279
+ @property
1280
+ def rate_hz(self) -> builtins.float: ...
1281
+ def end_gps_pip(self) -> PipInstant:
1282
+ r"""
1283
+ return the time of the first timestamp after the end of the time series
1284
+ equal to the start time of the following series if it is contiguous.
1285
+ """
1286
+ def len(self) -> builtins.int: ...
1287
+ def is_empty(self) -> builtins.bool: ...
1288
+ def index_to_gps_instant(self, index: builtins.int) -> PipInstant: ...
1289
+ def gps_instant_to_index(self, instant: PipInstant) -> builtins.int:
1290
+ r"""
1291
+ return the a non-negative index that's closes to the time given
1292
+ if the time given is before the start, the return value is zero
1293
+ but the return value can be greater or equal to the length of the array
1294
+ and therefore out of bounds
1295
+ """
1296
+ def timestamps(self) -> builtins.list[PipInstant]: ...
1297
+ def delta_t_seconds(self, t0: PipInstant) -> builtins.list[builtins.float]:
1298
+ r"""
1299
+ Get the timestamps transformed into a delta time from some t0
1300
+ return values in seconds as floating point
1301
+ Useful for getting relative timestamps to a point of time on a graph
1302
+ """
1303
+
1304
+ class Timeline: ...
1305
+
1306
+ class Unit:
1307
+ r"""
1308
+ map a simple unit to a rational power
1309
+ """
1310
+
1311
+ ...
1312
+
451
1313
  class UserMessage:
452
1314
  @property
453
1315
  def severity(self) -> Severity: ...
@@ -455,6 +1317,113 @@ class UserMessage:
455
1317
  def message(self) -> builtins.str: ...
456
1318
  def __repr__(self) -> builtins.str: ...
457
1319
 
1320
+ class ViewSet:
1321
+ @staticmethod
1322
+ def from_channels(channels: typing.Sequence[Channel]) -> ViewSet:
1323
+ r"""
1324
+ convenience function
1325
+ for turning a simple list of channels into a ViewSet
1326
+ """
1327
+ @staticmethod
1328
+ def from_channel_names(
1329
+ channel_names: typing.Sequence[builtins.str], trend: TrendType
1330
+ ) -> ViewSet:
1331
+ r"""
1332
+ convenience function
1333
+ for turning a simple list of channel names into a ViewSet with
1334
+ unresolved channel names
1335
+ """
1336
+ @staticmethod
1337
+ def from_analysis_request_ids(
1338
+ request_ids: builtins.set[AnalysisRequestId],
1339
+ ) -> ViewSet: ...
1340
+ def has_unresolved_channels(self) -> builtins.bool: ...
1341
+ def to_resolved_channel_names(self) -> builtins.list[builtins.str]:
1342
+ r"""
1343
+ Return the resolved names of any channels in the set
1344
+ Including expected resolved names of unresolved channels.
1345
+ """
1346
+
1347
+ class AverageType(Enum):
1348
+ Fixed = ...
1349
+ Exponential = ...
1350
+ Accumulative = ...
1351
+ ConvergingExponential = ...
1352
+
1353
+ class ChannelType(Enum):
1354
+ r"""
1355
+ channel type is used in NDS queries. I'm not sure how
1356
+ important these are, or how they map to NDS records.
1357
+ """
1358
+
1359
+ Unknown = ...
1360
+ Online = ...
1361
+ Raw = ...
1362
+ RDS = ...
1363
+ STrend = ...
1364
+ MTrend = ...
1365
+ TestPoint = ...
1366
+ Static = ...
1367
+
1368
+ class DataFlow(Enum):
1369
+ Unordered = ...
1370
+ r"""
1371
+ Data is sent repeatedly as
1372
+ more of the request is filled in.
1373
+
1374
+ Each response gives all the data available.
1375
+
1376
+ This is how NDScope expects data.
1377
+ """
1378
+ Ordered = ...
1379
+ r"""
1380
+ Data is returned from the earliest time stamp to the latest.
1381
+ Data is returned only once.
1382
+ This is how DTT expects data.
1383
+ """
1384
+
1385
+ class DecimationFilter(Enum):
1386
+ FirLS1 = ...
1387
+ FirPM1 = ...
1388
+ FirLS2 = ...
1389
+ FirLS3 = ...
1390
+
1391
+ class FFTWindow(Enum):
1392
+ Uniform = ...
1393
+ Hann = ...
1394
+ FlatTop = ...
1395
+ Welch = ...
1396
+ Bartlett = ...
1397
+ BlackmanHarris = ...
1398
+ Hamming = ...
1399
+
1400
+ class NDSDataType(Enum):
1401
+ r"""
1402
+ These values are taken from the NDS2 client
1403
+ With a hoped-for extension for
1404
+ Complex128
1405
+ Note the names for complex take the total size of the number
1406
+ Not the size of real or imaginary components as the actual NDS2 client does.
1407
+
1408
+ So an NDS2 Client type Complex32 is an NDSDataType::Complex64
1409
+ """
1410
+
1411
+ Int16 = ...
1412
+ Int32 = ...
1413
+ Int64 = ...
1414
+ Float32 = ...
1415
+ Float64 = ...
1416
+ Complex64 = ...
1417
+ UInt32 = ...
1418
+ Complex128 = ...
1419
+ r"""
1420
+ not yet implemented in NDS or Arrakis
1421
+ """
1422
+ UInt64 = ...
1423
+ UInt16 = ...
1424
+ Int8 = ...
1425
+ UInt8 = ...
1426
+
458
1427
  class Severity(Enum):
459
1428
  Debug = ...
460
1429
  Notice = ...
@@ -464,3 +1433,48 @@ class Severity(Enum):
464
1433
  ConfigurationError = ...
465
1434
  FatalError = ...
466
1435
  SystemError = ...
1436
+
1437
+ class TestType(Enum):
1438
+ r"""
1439
+ Parameters unique to the test type
1440
+ """
1441
+
1442
+ FFTTools = ...
1443
+ SweptSine = ...
1444
+ SineResponse = ...
1445
+ TimeSeries = ...
1446
+
1447
+ class TrendStat(Enum):
1448
+ r"""
1449
+ Channel statistics type for a trend channel, or Raw for raw channels
1450
+ """
1451
+
1452
+ Raw = ...
1453
+ r"""
1454
+ Raw data, not a trend channel
1455
+ """
1456
+ Mean = ...
1457
+ Rms = ...
1458
+ r"""
1459
+ Root-mean-square
1460
+ """
1461
+ Min = ...
1462
+ Max = ...
1463
+ N = ...
1464
+ r"""
1465
+ Number of data points in the trend bucket
1466
+ """
1467
+
1468
+ def data_name(self) -> builtins.str:
1469
+ r"""
1470
+ used for names of exported data blocks
1471
+ """
1472
+
1473
+ class TrendType(Enum):
1474
+ r"""
1475
+ The trend of a ChannelId
1476
+ """
1477
+
1478
+ Raw = ...
1479
+ Minute = ...
1480
+ Second = ...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dttlib
3
- Version: 0.5.7
3
+ Version: 0.9.5
4
4
  License-File: COPYING
5
5
  License-File: COPYING-GPL-3
6
6
  Summary: Advanced LIGO core library for online and offline frequency-domain diagnostics tool.
@@ -1,7 +1,7 @@
1
- dttlib-0.5.7.dist-info/METADATA,sha256=kEUkexu2aUrF79UpplRDgcdx0z75YqiB-pwOV3Znjus,1134
2
- dttlib-0.5.7.dist-info/WHEEL,sha256=xyoZKJtI-m0N6g-nM2T8mSKdKylokP17MIQBMPm-Ypc,108
3
- dttlib-0.5.7.dist-info/licenses/COPYING,sha256=jxnpJYe5OWc5-08NV3sStA6JFXKvqHwqTF14C_0Hwg4,1735
4
- dttlib-0.5.7.dist-info/licenses/COPYING-GPL-3,sha256=_ILKi2_bGNTj6Fz9irWNG80_Gymr54KJWr2R1kdj-Oc,35068
1
+ dttlib-0.9.5.dist-info/METADATA,sha256=ZCJZY5byhSfiq8dp7brllqXC3ZzqzIxh16wmmaKWBe8,1134
2
+ dttlib-0.9.5.dist-info/WHEEL,sha256=xn6znAgmO8PVVzwyWAAxgHSpmHAZ7tfeYQ1aqDiFzEg,109
3
+ dttlib-0.9.5.dist-info/licenses/COPYING,sha256=jxnpJYe5OWc5-08NV3sStA6JFXKvqHwqTF14C_0Hwg4,1735
4
+ dttlib-0.9.5.dist-info/licenses/COPYING-GPL-3,sha256=_ILKi2_bGNTj6Fz9irWNG80_Gymr54KJWr2R1kdj-Oc,35068
5
5
  dttlib.libs/libfftw3-7229d6f2.so.3,sha256=Ex3MhKZdYUUcoY8Jpo_V6MPRm_KzWt64b-ocxvEl2oA,2155385
6
6
  dttlib.libs/libfftw3f-3af7c840.so.3,sha256=_HfvElJPM-WSatYaasYuVXHcIBXkwxLj6_rB9MgRix0,2193217
7
7
  dttlib.libs/libgds-sigp-e0383b3d.so,sha256=WvqtrgK57AvmxmSsIYhflCcPWjzucEC55VQ2rFn4goQ,4411553
@@ -9,7 +9,7 @@ dttlib.libs/libndsclient-5ff49674.so.1,sha256=SGfyZdMIaAr0IRael2ezJAtdJDMOh6hLEj
9
9
  dttlib.libs/libndscxx-78126e77.so.1,sha256=AhQ61_vYZj6E4WWF47pWT6RCYMVoeIQF9h63_Mpwxcw,498241
10
10
  dttlib.libs/libsasl2-86ae7ca3.so.2,sha256=Wd_1atKWOKbLoJe63KBw9dDOYWz5HFvzOtdCsaSXUNE,117305
11
11
  dttlib/__init__.py,sha256=L7UhbeXBFuGgQPcm9TzTfdaOkGqKm-WPMQ5JEECDghE,107
12
- dttlib/__init__.pyi,sha256=gsZLnv4sNzSfPGEGTLJOrvDSiB-ltFWCO-EZGoc-Vyk,15673
13
- dttlib/dttlib.cpython-312-x86_64-linux-gnu.so,sha256=410va192CgOO8VFZvM7TDqmISMXBhFW5Wd4AhbvHk10,22421321
12
+ dttlib/__init__.pyi,sha256=bkN0OOE7TlX-e0bNo4id5ulvxOzcpKeLiD_wTdbwpTY,46978
13
+ dttlib/dttlib.cpython-312-x86_64-linux-gnu.so,sha256=Hi_Gq6gpWpzxKydfs2LYu2_Q8UBn6hThebFyuFHQLY8,23891865
14
14
  dttlib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- dttlib-0.5.7.dist-info/RECORD,,
15
+ dttlib-0.9.5.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: maturin (1.9.3)
2
+ Generator: maturin (1.10.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp312-cp312-manylinux_2_31_x86_64