nominal 1.105.0__py3-none-any.whl → 1.107.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- CHANGELOG.md +19 -0
- nominal/core/dataset.py +4 -0
- nominal/experimental/compute/_buckets.py +35 -4
- nominal/experimental/dataset_utils/__init__.py +5 -0
- nominal/experimental/dataset_utils/_dataset_utils.py +52 -0
- nominal/experimental/migration/migration_data_config.py +11 -0
- nominal/experimental/migration/migration_utils.py +51 -14
- {nominal-1.105.0.dist-info → nominal-1.107.0.dist-info}/METADATA +2 -2
- {nominal-1.105.0.dist-info → nominal-1.107.0.dist-info}/RECORD +12 -9
- {nominal-1.105.0.dist-info → nominal-1.107.0.dist-info}/WHEEL +0 -0
- {nominal-1.105.0.dist-info → nominal-1.107.0.dist-info}/entry_points.txt +0 -0
- {nominal-1.105.0.dist-info → nominal-1.107.0.dist-info}/licenses/LICENSE +0 -0
CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.107.0](https://github.com/nominal-io/nominal-client/compare/v1.106.0...v1.107.0) (2026-01-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* make migration preserve uuid and dataset include options configurable ([#584](https://github.com/nominal-io/nominal-client/issues/584)) ([95ae64d](https://github.com/nominal-io/nominal-client/commit/95ae64de267ad957d15641378b6b418e8c234faa))
|
|
9
|
+
|
|
10
|
+
## [1.106.0](https://github.com/nominal-io/nominal-client/compare/v1.105.0...v1.106.0) (2026-01-21)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* create dataset with uuid endpoint for mgiration ([#580](https://github.com/nominal-io/nominal-client/issues/580)) ([f3a3b38](https://github.com/nominal-io/nominal-client/commit/f3a3b383d62e8466af617179479918ef0d1ee534))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* handle case where compute returns a non-bucketed response for a bucketed query ([#579](https://github.com/nominal-io/nominal-client/issues/579)) ([58b84f5](https://github.com/nominal-io/nominal-client/commit/58b84f55d282a84c8eb6703816b16920e3b8ecf3))
|
|
21
|
+
|
|
3
22
|
## [1.105.0](https://github.com/nominal-io/nominal-client/compare/v1.104.3...v1.105.0) (2026-01-21)
|
|
4
23
|
|
|
5
24
|
|
nominal/core/dataset.py
CHANGED
|
@@ -1093,6 +1093,7 @@ def _construct_new_ingest_options(
|
|
|
1093
1093
|
tag_columns=tag_columns,
|
|
1094
1094
|
is_archive=file_type.is_parquet_archive(),
|
|
1095
1095
|
additional_file_tags={**tags} if tags else None,
|
|
1096
|
+
exclude_columns=[],
|
|
1096
1097
|
)
|
|
1097
1098
|
)
|
|
1098
1099
|
else:
|
|
@@ -1107,6 +1108,7 @@ def _construct_new_ingest_options(
|
|
|
1107
1108
|
channel_prefix=channel_prefix,
|
|
1108
1109
|
tag_columns=tag_columns,
|
|
1109
1110
|
additional_file_tags={**tags} if tags else None,
|
|
1111
|
+
exclude_columns=[],
|
|
1110
1112
|
)
|
|
1111
1113
|
)
|
|
1112
1114
|
|
|
@@ -1139,6 +1141,7 @@ def _construct_existing_ingest_options(
|
|
|
1139
1141
|
tag_columns=tag_columns,
|
|
1140
1142
|
is_archive=file_type.is_parquet_archive(),
|
|
1141
1143
|
additional_file_tags={**tags} if tags else None,
|
|
1144
|
+
exclude_columns=[],
|
|
1142
1145
|
)
|
|
1143
1146
|
)
|
|
1144
1147
|
else:
|
|
@@ -1152,5 +1155,6 @@ def _construct_existing_ingest_options(
|
|
|
1152
1155
|
timestamp_metadata=timestamp_metadata,
|
|
1153
1156
|
tag_columns=tag_columns,
|
|
1154
1157
|
additional_file_tags={**tags} if tags else None,
|
|
1158
|
+
exclude_columns=[],
|
|
1155
1159
|
)
|
|
1156
1160
|
)
|
|
@@ -317,10 +317,41 @@ def _compute_buckets(
|
|
|
317
317
|
def _numeric_buckets_from_compute_response(
|
|
318
318
|
response: scout_compute_api.ComputeNodeResponse,
|
|
319
319
|
) -> Iterable[tuple[api.Timestamp, scout_compute_api.NumericBucket]]:
|
|
320
|
-
if response.
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
320
|
+
if response.numeric_point is not None:
|
|
321
|
+
# single point would be returned-- create a synthetic bucket
|
|
322
|
+
val = response.numeric_point.value
|
|
323
|
+
yield (
|
|
324
|
+
response.numeric_point.timestamp,
|
|
325
|
+
scout_compute_api.NumericBucket(
|
|
326
|
+
count=1,
|
|
327
|
+
first_point=response.numeric_point,
|
|
328
|
+
max=val,
|
|
329
|
+
mean=val,
|
|
330
|
+
min=val,
|
|
331
|
+
variance=0,
|
|
332
|
+
last_point=response.numeric_point,
|
|
333
|
+
),
|
|
334
|
+
)
|
|
335
|
+
elif response.numeric is not None:
|
|
336
|
+
# Not enough points to reach the number of requested bucket count, so
|
|
337
|
+
# gets returned as all of the raw data.
|
|
338
|
+
for timestamp, value in zip(response.numeric.timestamps, response.numeric.values):
|
|
339
|
+
point = scout_compute_api.NumericPoint(timestamp, value)
|
|
340
|
+
yield (
|
|
341
|
+
timestamp,
|
|
342
|
+
scout_compute_api.NumericBucket(
|
|
343
|
+
count=1,
|
|
344
|
+
first_point=point,
|
|
345
|
+
max=value,
|
|
346
|
+
min=value,
|
|
347
|
+
mean=value,
|
|
348
|
+
variance=0,
|
|
349
|
+
last_point=point,
|
|
350
|
+
),
|
|
351
|
+
)
|
|
352
|
+
elif response.bucketed_numeric is not None:
|
|
353
|
+
# Actually bucketed data
|
|
354
|
+
yield from zip(response.bucketed_numeric.timestamps, response.bucketed_numeric.buckets)
|
|
324
355
|
|
|
325
356
|
|
|
326
357
|
def _timestamp_from_conjure(timestamp: api.Timestamp) -> params.NanosecondsUTC:
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from collections.abc import Mapping, Sequence
|
|
2
|
+
|
|
3
|
+
from nominal_api import scout_catalog
|
|
4
|
+
|
|
5
|
+
from nominal.core import Dataset, NominalClient
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def create_dataset_with_uuid(
|
|
9
|
+
client: NominalClient,
|
|
10
|
+
dataset_uuid: str,
|
|
11
|
+
name: str,
|
|
12
|
+
*,
|
|
13
|
+
description: str | None = None,
|
|
14
|
+
labels: Sequence[str] = (),
|
|
15
|
+
properties: Mapping[str, str] | None = None,
|
|
16
|
+
) -> Dataset:
|
|
17
|
+
"""Create a dataset with a specific UUID.
|
|
18
|
+
|
|
19
|
+
This is useful for migrations where the dataset UUID must be controlled by the caller.
|
|
20
|
+
Throws a conflict error if a dataset with the specified UUID already exists.
|
|
21
|
+
|
|
22
|
+
This endpoint is not intended for general use. Use `NominalClient.create_dataset` instead
|
|
23
|
+
to create a new dataset with an auto-generated UUID.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
client: The NominalClient to use for creating the dataset.
|
|
27
|
+
dataset_uuid: The UUID to assign to the new dataset.
|
|
28
|
+
name: Name of the dataset to create.
|
|
29
|
+
description: Human readable description of the dataset.
|
|
30
|
+
labels: Text labels to apply to the created dataset.
|
|
31
|
+
properties: Key-value properties to apply to the created dataset.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
Reference to the created dataset in Nominal.
|
|
35
|
+
"""
|
|
36
|
+
create_dataset_request = scout_catalog.CreateDataset(
|
|
37
|
+
name=name,
|
|
38
|
+
description=description,
|
|
39
|
+
labels=list(labels),
|
|
40
|
+
properties={} if properties is None else dict(properties),
|
|
41
|
+
is_v2_dataset=True,
|
|
42
|
+
metadata={},
|
|
43
|
+
origin_metadata=scout_catalog.DatasetOriginMetadata(),
|
|
44
|
+
workspace=client._clients.workspace_rid,
|
|
45
|
+
marking_rids=[],
|
|
46
|
+
)
|
|
47
|
+
request = scout_catalog.CreateDatasetWithUuidRequest(
|
|
48
|
+
create_dataset=create_dataset_request,
|
|
49
|
+
uuid=dataset_uuid,
|
|
50
|
+
)
|
|
51
|
+
response = client._clients.catalog.create_dataset_with_uuid(client._clients.auth_header, request)
|
|
52
|
+
return Dataset._from_conjure(client._clients, response)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class MigrationDatasetConfig:
|
|
2
|
+
preserve_dataset_uuid: bool
|
|
3
|
+
include_dataset_files: bool
|
|
4
|
+
|
|
5
|
+
def __init__(self, preserve_dataset_uuid: bool, include_dataset_files: bool) -> None:
|
|
6
|
+
"""Args:
|
|
7
|
+
preserve_dataset_uuid (bool): If true, preserves the original dataset UUIDs during migration.
|
|
8
|
+
include_dataset_files (bool): If true, includes dataset files in the migration.
|
|
9
|
+
"""
|
|
10
|
+
self.preserve_dataset_uuid = preserve_dataset_uuid
|
|
11
|
+
self.include_dataset_files = include_dataset_files
|
|
@@ -26,6 +26,8 @@ from nominal.core._event_types import EventType, SearchEventOriginType
|
|
|
26
26
|
from nominal.core._utils.api_tools import Link, LinkDict
|
|
27
27
|
from nominal.core.attachment import Attachment
|
|
28
28
|
from nominal.core.run import Run
|
|
29
|
+
from nominal.experimental.dataset_utils import create_dataset_with_uuid
|
|
30
|
+
from nominal.experimental.migration.migration_data_config import MigrationDatasetConfig
|
|
29
31
|
from nominal.experimental.migration.migration_resources import MigrationResources
|
|
30
32
|
from nominal.ts import (
|
|
31
33
|
IntegralNanosecondsDuration,
|
|
@@ -422,6 +424,7 @@ def copy_dataset_from(
|
|
|
422
424
|
new_dataset_properties: dict[str, Any] | None = None,
|
|
423
425
|
new_dataset_labels: Sequence[str] | None = None,
|
|
424
426
|
include_files: bool = False,
|
|
427
|
+
preserve_uuid: bool = False,
|
|
425
428
|
) -> Dataset:
|
|
426
429
|
"""Copy a dataset from the source to the destination client.
|
|
427
430
|
|
|
@@ -435,6 +438,9 @@ def copy_dataset_from(
|
|
|
435
438
|
properties are used.
|
|
436
439
|
new_dataset_labels: Optional new labels for the copied dataset. If not provided, the original labels are used.
|
|
437
440
|
include_files: Whether to include files in the copied dataset.
|
|
441
|
+
preserve_uuid: If True, create the dataset with the same UUID as the source dataset.
|
|
442
|
+
This is useful for migrations where references to datasets must be preserved.
|
|
443
|
+
Throws a conflict error if a dataset with the UUID already exists.
|
|
438
444
|
|
|
439
445
|
Returns:
|
|
440
446
|
The newly created Dataset in the destination client.
|
|
@@ -448,12 +454,34 @@ def copy_dataset_from(
|
|
|
448
454
|
source_dataset.rid,
|
|
449
455
|
extra=log_extras,
|
|
450
456
|
)
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
+
|
|
458
|
+
dataset_name = new_dataset_name if new_dataset_name is not None else source_dataset.name
|
|
459
|
+
dataset_description = new_dataset_description if new_dataset_description is not None else source_dataset.description
|
|
460
|
+
dataset_properties = new_dataset_properties if new_dataset_properties is not None else source_dataset.properties
|
|
461
|
+
dataset_labels = new_dataset_labels if new_dataset_labels is not None else source_dataset.labels
|
|
462
|
+
|
|
463
|
+
if preserve_uuid:
|
|
464
|
+
# Extract the UUID from the source dataset's rid
|
|
465
|
+
match = UUID_PATTERN.search(source_dataset.rid)
|
|
466
|
+
if not match:
|
|
467
|
+
raise ValueError(f"Could not extract UUID from dataset rid: {source_dataset.rid}")
|
|
468
|
+
source_uuid = match.group(2)
|
|
469
|
+
new_dataset = create_dataset_with_uuid(
|
|
470
|
+
client=destination_client,
|
|
471
|
+
dataset_uuid=source_uuid,
|
|
472
|
+
name=dataset_name,
|
|
473
|
+
description=dataset_description,
|
|
474
|
+
labels=dataset_labels,
|
|
475
|
+
properties=dataset_properties,
|
|
476
|
+
)
|
|
477
|
+
else:
|
|
478
|
+
new_dataset = destination_client.create_dataset(
|
|
479
|
+
name=dataset_name,
|
|
480
|
+
description=dataset_description,
|
|
481
|
+
properties=dataset_properties,
|
|
482
|
+
labels=dataset_labels,
|
|
483
|
+
)
|
|
484
|
+
|
|
457
485
|
if include_files:
|
|
458
486
|
for source_file in source_dataset.list_files():
|
|
459
487
|
copy_file_to_dataset(source_file, new_dataset)
|
|
@@ -612,7 +640,7 @@ def clone_asset(
|
|
|
612
640
|
return copy_asset_from(
|
|
613
641
|
source_asset=source_asset,
|
|
614
642
|
destination_client=destination_client,
|
|
615
|
-
|
|
643
|
+
dataset_config=MigrationDatasetConfig(preserve_dataset_uuid=True, include_dataset_files=True),
|
|
616
644
|
include_events=True,
|
|
617
645
|
include_runs=True,
|
|
618
646
|
)
|
|
@@ -626,7 +654,7 @@ def copy_asset_from(
|
|
|
626
654
|
new_asset_description: str | None = None,
|
|
627
655
|
new_asset_properties: dict[str, Any] | None = None,
|
|
628
656
|
new_asset_labels: Sequence[str] | None = None,
|
|
629
|
-
|
|
657
|
+
dataset_config: MigrationDatasetConfig | None = None,
|
|
630
658
|
include_events: bool = False,
|
|
631
659
|
include_runs: bool = False,
|
|
632
660
|
) -> Asset:
|
|
@@ -639,7 +667,7 @@ def copy_asset_from(
|
|
|
639
667
|
new_asset_description: Optional new description for the copied asset. If not provided, original description used
|
|
640
668
|
new_asset_properties: Optional new properties for the copied asset. If not provided, original properties used.
|
|
641
669
|
new_asset_labels: Optional new labels for the copied asset. If not provided, the original labels are used.
|
|
642
|
-
|
|
670
|
+
dataset_config: Configuration for dataset migration.
|
|
643
671
|
include_events: Whether to include events in the copied dataset.
|
|
644
672
|
include_runs: Whether to include runs in the copied asset.
|
|
645
673
|
|
|
@@ -656,15 +684,16 @@ def copy_asset_from(
|
|
|
656
684
|
properties=new_asset_properties if new_asset_properties is not None else source_asset.properties,
|
|
657
685
|
labels=new_asset_labels if new_asset_labels is not None else source_asset.labels,
|
|
658
686
|
)
|
|
659
|
-
if
|
|
687
|
+
if dataset_config is not None:
|
|
660
688
|
source_datasets = source_asset.list_datasets()
|
|
661
689
|
for data_scope, source_dataset in source_datasets:
|
|
662
|
-
new_dataset =
|
|
690
|
+
new_dataset = copy_dataset_from(
|
|
663
691
|
source_dataset=source_dataset,
|
|
664
692
|
destination_client=destination_client,
|
|
693
|
+
preserve_uuid=dataset_config.preserve_dataset_uuid,
|
|
694
|
+
include_files=dataset_config.include_dataset_files,
|
|
665
695
|
)
|
|
666
696
|
new_asset.add_dataset(data_scope, new_dataset)
|
|
667
|
-
source_asset._list_dataset_scopes
|
|
668
697
|
|
|
669
698
|
if include_events:
|
|
670
699
|
source_events = source_asset.search_events(origin_types=SearchEventOriginType.get_manual_origin_types())
|
|
@@ -683,6 +712,7 @@ def copy_asset_from(
|
|
|
683
712
|
def copy_resources_to_destination_client(
|
|
684
713
|
destination_client: NominalClient,
|
|
685
714
|
migration_resources: MigrationResources,
|
|
715
|
+
dataset_config: MigrationDatasetConfig | None = None,
|
|
686
716
|
) -> tuple[Sequence[tuple[str, Dataset]], Sequence[Asset], Sequence[WorkbookTemplate], Sequence[Workbook]]:
|
|
687
717
|
"""Based on a list of assets and workbook templates, copy resources to destination client, creating
|
|
688
718
|
new datasets, datafiles, and workbooks along the way.
|
|
@@ -690,6 +720,7 @@ def copy_resources_to_destination_client(
|
|
|
690
720
|
Args:
|
|
691
721
|
destination_client (NominalClient): client of the tenant/workspace to copy resources to.
|
|
692
722
|
migration_resources (MigrationResources): resources to copy.
|
|
723
|
+
dataset_config (MigrationDataConfig | None): Configuration for dataset migration.
|
|
693
724
|
|
|
694
725
|
Returns:
|
|
695
726
|
All of the created resources.
|
|
@@ -704,7 +735,13 @@ def copy_resources_to_destination_client(
|
|
|
704
735
|
|
|
705
736
|
new_data_scopes_and_datasets: list[tuple[str, Dataset]] = []
|
|
706
737
|
for source_asset in migration_resources.source_assets:
|
|
707
|
-
new_asset =
|
|
738
|
+
new_asset = copy_asset_from(
|
|
739
|
+
source_asset.asset,
|
|
740
|
+
destination_client,
|
|
741
|
+
dataset_config=dataset_config,
|
|
742
|
+
include_events=True,
|
|
743
|
+
include_runs=True,
|
|
744
|
+
)
|
|
708
745
|
new_assets.append(new_asset)
|
|
709
746
|
new_data_scopes_and_datasets.extend(new_asset.list_datasets())
|
|
710
747
|
|
|
@@ -712,7 +749,7 @@ def copy_resources_to_destination_client(
|
|
|
712
749
|
new_template = clone_workbook_template(source_workbook_template, destination_client)
|
|
713
750
|
new_templates.append(new_template)
|
|
714
751
|
new_workbook = new_template.create_workbook(
|
|
715
|
-
title=new_template.title, description=new_template.description, asset=
|
|
752
|
+
title=new_template.title, description=new_template.description, asset=new_asset
|
|
716
753
|
)
|
|
717
754
|
logger.debug(
|
|
718
755
|
"Created new workbook %s (rid: %s) from template %s (rid: %s)",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nominal
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.107.0
|
|
4
4
|
Summary: Automate Nominal workflows in Python
|
|
5
5
|
Project-URL: Homepage, https://nominal.io
|
|
6
6
|
Project-URL: Documentation, https://docs.nominal.io
|
|
@@ -20,7 +20,7 @@ Requires-Dist: cachetools>=6.1.0
|
|
|
20
20
|
Requires-Dist: click<9,>=8
|
|
21
21
|
Requires-Dist: conjure-python-client<4,>=3.1.0
|
|
22
22
|
Requires-Dist: ffmpeg-python>=0.2.0
|
|
23
|
-
Requires-Dist: nominal-api==0.
|
|
23
|
+
Requires-Dist: nominal-api==0.1075.0
|
|
24
24
|
Requires-Dist: nominal-streaming==0.5.8; platform_python_implementation == 'CPython' and python_version >= '3.10' and ((sys_platform == 'win32' and platform_machine == 'AMD64') or (sys_platform == 'darwin' and platform_machine == 'arm64') or (sys_platform == 'linux' and (platform_machine == 'x86_64' or platform_machine == 'armv7l')))
|
|
25
25
|
Requires-Dist: openpyxl>=0.0.0
|
|
26
26
|
Requires-Dist: pandas>=0.0.0
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
CHANGELOG.md,sha256=
|
|
1
|
+
CHANGELOG.md,sha256=LlvOacqO09P7ACcAptB85kdGtLUHugltOBGRdfKe5Zs,89226
|
|
2
2
|
LICENSE,sha256=zEGHG9mjDjaIS3I79O8mweQo-yiTbqx8jJvUPppVAwk,1067
|
|
3
3
|
README.md,sha256=KKe0dxh_pHXCtB7I9G4qWGQYvot_BZU8yW6MJyuyUHM,311
|
|
4
4
|
nominal/__init__.py,sha256=rbraORnXUrNn1hywLXM0XwSQCd9UmQt20PDYlsBalfE,2167
|
|
@@ -41,7 +41,7 @@ nominal/core/client.py,sha256=Awt9WPkE-YXBfOwJMTL7Su8AZFJY3UMH7IKp5hI26YQ,68328
|
|
|
41
41
|
nominal/core/connection.py,sha256=LYllr3a1H2xp8-i4MaX1M7yK8X-HnwuIkciyK9XgLtQ,5175
|
|
42
42
|
nominal/core/containerized_extractors.py,sha256=fUz3-NHoNWYKqOCD15gLwGXDKVfdsW-x_kpXnkOI3BE,10224
|
|
43
43
|
nominal/core/data_review.py,sha256=Z_W1Okp_FSQDiVCk6aKb9gV0EXbE2jtiQaPqc6TaL0g,11038
|
|
44
|
-
nominal/core/dataset.py,sha256=
|
|
44
|
+
nominal/core/dataset.py,sha256=LqofzNAlOd3S_3Aaw6b7DoY50rj6GyMHbUClIA2TmpY,46792
|
|
45
45
|
nominal/core/dataset_file.py,sha256=8rCW6MO89MFbQ2NH0WtFWmJfRWeTxhmyuoGojuQQ4Qg,16545
|
|
46
46
|
nominal/core/datasource.py,sha256=V5UahbqsCNIdml978kOHiY6boIxKxbp76KscNBpN5xc,16934
|
|
47
47
|
nominal/core/event.py,sha256=8trZXyuAqRlKedgcqSgDIimXAAJBmEfDLyHkOOBwUC0,7762
|
|
@@ -75,20 +75,23 @@ nominal/exceptions/__init__.py,sha256=W2r_GWJkZQQ6t3HooFjGRdhIgJq3fBvRV7Yn6gseoO
|
|
|
75
75
|
nominal/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
76
76
|
nominal/experimental/compute/README.md,sha256=jdgqPSIVhMSTnY3qebtDdyd8SCi4o107EtKqui2L76A,4865
|
|
77
77
|
nominal/experimental/compute/__init__.py,sha256=NmjX_ZuCy5L0FYodpuFXpPLUyf1R8V-OitlEKLQvrAs,178
|
|
78
|
-
nominal/experimental/compute/_buckets.py,sha256=
|
|
78
|
+
nominal/experimental/compute/_buckets.py,sha256=W2RckTYEZSxT3fjCnjS1iUYSqRV8EzQEix5T1B0qr30,15523
|
|
79
79
|
nominal/experimental/compute/dsl/__init__.py,sha256=IDHrxnYLOy87zihq_HM1STtXPlxobzddvWbMOAQQh6A,502
|
|
80
80
|
nominal/experimental/compute/dsl/_enum_expr_impls.py,sha256=RtKenY8ClmSYZEmsBh2ttRyVv3OSVMyANvFgbUylX1I,6899
|
|
81
81
|
nominal/experimental/compute/dsl/_numeric_expr_impls.py,sha256=3EIMiysAUdwwrezr9aZ2vB4Z8xt-hHxeZ66h3lVLSV4,17083
|
|
82
82
|
nominal/experimental/compute/dsl/_range_expr_impls.py,sha256=VCcU8L8gfSLSBphi_B8JBcN6zDVskvjmgsa8waz1QEU,1741
|
|
83
83
|
nominal/experimental/compute/dsl/exprs.py,sha256=ppDbdblujuwN3vNkIqGwlTvbUmCnnjoOTCiHukpFGX8,10248
|
|
84
84
|
nominal/experimental/compute/dsl/params.py,sha256=xwFwDMGV1Ifi4pjQGLb0v0YU8jJ_XKatN1nIGU1sm0I,3295
|
|
85
|
+
nominal/experimental/dataset_utils/__init__.py,sha256=OpJWUldJ7p7sgFCE_jfosP9J6giUoktFBlVoUS9QwWE,134
|
|
86
|
+
nominal/experimental/dataset_utils/_dataset_utils.py,sha256=vk3xdfBxkYY0KFhx4THX8B2w-pATMQFnOQIZAZqD9Wg,1896
|
|
85
87
|
nominal/experimental/logging/__init__.py,sha256=9HrTkk_eyHv_w7EwqwOE1lf1Sa1Cm0cAf66beOsUfU0,322
|
|
86
88
|
nominal/experimental/logging/click_log_handler.py,sha256=ANLf4IGgmh95V0kJlr756wQrjmQKp6DEpc9Cj7J5qHM,2331
|
|
87
89
|
nominal/experimental/logging/nominal_log_handler.py,sha256=hyTxyjsvFnE7vtyrDJpunAqADHmXekNWALwxXPIJGCk,5120
|
|
88
90
|
nominal/experimental/logging/rich_log_handler.py,sha256=8yz_VtxNgJg2oiesnXz2iXoBvQrUP5pAsYkxknOXgXA,1231
|
|
89
91
|
nominal/experimental/migration/__init__.py,sha256=E2IgWJLwJ5bN6jbl8k5nHECKFx5aT11jKAzVYcyXn3o,460
|
|
92
|
+
nominal/experimental/migration/migration_data_config.py,sha256=sPwZjyLmL-_pHvDZvQspxrfW6yNZhEsQjDVwKA8IaXM,522
|
|
90
93
|
nominal/experimental/migration/migration_resources.py,sha256=Tf_7kNBeSaY8z2fTF7DAxk-9q3a7F8xXFVvxI8tTc9c,415
|
|
91
|
-
nominal/experimental/migration/migration_utils.py,sha256=
|
|
94
|
+
nominal/experimental/migration/migration_utils.py,sha256=isvxBH7pOjvT9PuJRfoMNHGJR17TYsSapDPVSRESCys,31804
|
|
92
95
|
nominal/experimental/rust_streaming/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
96
|
nominal/experimental/rust_streaming/rust_write_stream.py,sha256=oQ6ixwm8ct8ZDc_qNB7AucDt8o5-_aBVlW2fFCQ_nmA,1541
|
|
94
97
|
nominal/experimental/stream_v2/__init__.py,sha256=W39vK46pssx5sXvmsImMuJiEPs7iGtwrbYBI0bWnXCY,2313
|
|
@@ -107,8 +110,8 @@ nominal/thirdparty/polars/polars_export_handler.py,sha256=hGCSwXX9dC4MG01CmmjlTb
|
|
|
107
110
|
nominal/thirdparty/tdms/__init__.py,sha256=6n2ImFr2Wiil6JM1P5Q7Mpr0VzLcnDkmup_ftNpPq-s,142
|
|
108
111
|
nominal/thirdparty/tdms/_tdms.py,sha256=m4gxbpxB9MTLi2FuYvGlbUGSyDAZKFxbM3ia2x1wIz0,8746
|
|
109
112
|
nominal/ts/__init__.py,sha256=hmd0ENvDhxRnzDKGLxIub6QG8LpcxCgcyAct029CaEs,21442
|
|
110
|
-
nominal-1.
|
|
111
|
-
nominal-1.
|
|
112
|
-
nominal-1.
|
|
113
|
-
nominal-1.
|
|
114
|
-
nominal-1.
|
|
113
|
+
nominal-1.107.0.dist-info/METADATA,sha256=D3fDwR5cBgflwxhfN71NUezUmPKu6m6tr1arnRs0lWk,2307
|
|
114
|
+
nominal-1.107.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
115
|
+
nominal-1.107.0.dist-info/entry_points.txt,sha256=-mCLhxgg9R_lm5efT7vW9wuBH12izvY322R0a3TYxbE,66
|
|
116
|
+
nominal-1.107.0.dist-info/licenses/LICENSE,sha256=zEGHG9mjDjaIS3I79O8mweQo-yiTbqx8jJvUPppVAwk,1067
|
|
117
|
+
nominal-1.107.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|