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__.py +5 -0
- dttlib/__init__.pyi +1251 -0
- dttlib/dttlib.cpython-313-x86_64-linux-gnu.so +0 -0
- dttlib/py.typed +0 -0
- dttlib-0.7.7.dist-info/METADATA +45 -0
- dttlib-0.7.7.dist-info/RECORD +16 -0
- dttlib-0.7.7.dist-info/WHEEL +4 -0
- dttlib-0.7.7.dist-info/licenses/COPYING +33 -0
- dttlib-0.7.7.dist-info/licenses/COPYING-GPL-3 +676 -0
- dttlib.libs/libfftw3-7229d6f2.so.3 +0 -0
- dttlib.libs/libfftw3f-3af7c840.so.3 +0 -0
- dttlib.libs/libgds-sigp-e0383b3d.so +0 -0
- dttlib.libs/libndsclient-5ff49674.so.1 +0 -0
- dttlib.libs/libndscxx-78126e77.so.1 +0 -0
- dttlib.libs/libpython3-c1ff1c4d.13.so.1.0 +0 -0
- dttlib.libs/libsasl2-86ae7ca3.so.2 +0 -0
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 = ...
|