nominal 1.111.0__tar.gz → 1.111.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nominal-1.111.0 → nominal-1.111.2}/CHANGELOG.md +14 -0
- {nominal-1.111.0 → nominal-1.111.2}/PKG-INFO +2 -2
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/dataset.py +2 -2
- {nominal-1.111.0 → nominal-1.111.2}/nominal/thirdparty/polars/polars_export_handler.py +27 -2
- {nominal-1.111.0 → nominal-1.111.2}/pyproject.toml +3 -3
- {nominal-1.111.0 → nominal-1.111.2}/.gitignore +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/LICENSE +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/README.md +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/__main__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/_utils/README.md +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/_utils/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/_utils/dataclass_tools.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/_utils/deprecation_tools.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/_utils/iterator_tools.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/_utils/streaming_tools.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/_utils/timing_tools.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/__main__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/attachment.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/auth.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/config.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/dataset.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/download.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/mis.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/run.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/util/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/util/click_log_handler.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/util/global_decorators.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/cli/util/verify_connection.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/config/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/config/_config.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_checklist_types.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_clientsbunch.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_constants.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_event_types.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_stream/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_stream/batch_processor.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_stream/batch_processor_proto.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_stream/write_stream.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_stream/write_stream_base.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_types.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_utils/README.md +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_utils/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_utils/api_tools.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_utils/multipart.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_utils/multipart_downloader.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_utils/networking.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_utils/pagination_tools.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_utils/query_tools.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_utils/queueing.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/_video_types.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/asset.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/attachment.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/bounds.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/channel.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/checklist.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/client.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/connection.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/containerized_extractors.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/data_review.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/dataset_file.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/datasource.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/event.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/exceptions.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/filetype.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/log.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/run.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/secret.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/streaming_checklist.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/unit.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/user.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/video.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/video_file.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/workbook.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/workbook_template.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/core/workspace.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/exceptions/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/compute/README.md +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/compute/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/compute/_buckets.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/compute/dsl/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/compute/dsl/_enum_expr_impls.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/compute/dsl/_numeric_expr_impls.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/compute/dsl/_range_expr_impls.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/compute/dsl/exprs.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/compute/dsl/params.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/dataset_utils/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/dataset_utils/_dataset_utils.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/logging/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/logging/click_log_handler.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/logging/nominal_log_handler.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/logging/rich_log_handler.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/migration/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/migration/migration_data_config.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/migration/migration_resources.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/migration/migration_utils.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/rust_streaming/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/rust_streaming/rust_write_stream.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/stream_v2/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/stream_v2/_serializer.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/stream_v2/_write_stream.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/video_processing/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/video_processing/resolution.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/video_processing/video_conversion.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/nominal.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/py.typed +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/thirdparty/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/thirdparty/matlab/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/thirdparty/matlab/_matlab.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/thirdparty/pandas/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/thirdparty/pandas/_pandas.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/thirdparty/polars/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/thirdparty/tdms/__init__.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/thirdparty/tdms/_tdms.py +0 -0
- {nominal-1.111.0 → nominal-1.111.2}/nominal/ts/__init__.py +0 -0
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.111.2](https://github.com/nominal-io/nominal-client/compare/v1.111.1...v1.111.2) (2026-02-04)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* prevent decimated exports from bricking polars export handler ([#596](https://github.com/nominal-io/nominal-client/issues/596)) ([8106f74](https://github.com/nominal-io/nominal-client/commit/8106f74dbc985c3f62946dbc4861eefa8e064964))
|
|
9
|
+
|
|
10
|
+
## [1.111.1](https://github.com/nominal-io/nominal-client/compare/v1.111.0...v1.111.1) (2026-01-29)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* update bounds on dataset ([#598](https://github.com/nominal-io/nominal-client/issues/598)) ([9d57d3a](https://github.com/nominal-io/nominal-client/commit/9d57d3ae515359dce3ae4c102ffe230e3bf91faf))
|
|
16
|
+
|
|
3
17
|
## [1.111.0](https://github.com/nominal-io/nominal-client/compare/v1.110.0...v1.111.0) (2026-01-29)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nominal
|
|
3
|
-
Version: 1.111.
|
|
3
|
+
Version: 1.111.2
|
|
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
|
|
@@ -21,7 +21,7 @@ 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
23
|
Requires-Dist: nominal-api==0.1079.0
|
|
24
|
-
Requires-Dist: nominal-streaming==0.
|
|
24
|
+
Requires-Dist: nominal-streaming==0.7.12; 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' or platform_machine == 'aarch64' or platform_machine == 'arm64')))
|
|
25
25
|
Requires-Dist: openpyxl>=0.0.0
|
|
26
26
|
Requires-Dist: pandas>=0.0.0
|
|
27
27
|
Requires-Dist: polars>=0.0.0
|
|
@@ -118,8 +118,8 @@ class Dataset(DataSource, RefreshableMixin[scout_catalog.EnrichedDataset]):
|
|
|
118
118
|
end=_SecondsNanos.from_flexible(end).to_nanoseconds(),
|
|
119
119
|
)
|
|
120
120
|
request = scout_catalog.UpdateBoundsRequest(bounds=bounds._to_conjure())
|
|
121
|
-
|
|
122
|
-
return self.
|
|
121
|
+
self._clients.catalog.update_global_dataset_bounds(self._clients.auth_header, request, self.rid)
|
|
122
|
+
return self.refresh()
|
|
123
123
|
|
|
124
124
|
def _handle_ingest_response(self, response: ingest_api.IngestResponse) -> DatasetFile:
|
|
125
125
|
if response.details.dataset is None:
|
|
@@ -42,6 +42,10 @@ DEFAULT_POINTS_PER_DATAFRAME = 25_000_000
|
|
|
42
42
|
# Maximum number of channels to get data for within a single request to Nominal
|
|
43
43
|
DEFAULT_CHANNELS_PER_REQUEST = 25
|
|
44
44
|
|
|
45
|
+
# Maximum number of buckets / decimated points exported per compute query.
|
|
46
|
+
# TODO(drake) raise 1000 limit once backend limit is raised
|
|
47
|
+
MAX_NUM_BUCKETS = 1000
|
|
48
|
+
|
|
45
49
|
DEFAULT_EXPORTED_TIMESTAMP_COL_NAME = "timestamp"
|
|
46
50
|
_INTERNAL_TS_COL = "__nmnl_ts__" # internal join key, chosen to avoid collision with channel names
|
|
47
51
|
|
|
@@ -133,8 +137,8 @@ def _batch_channel_points_per_second(
|
|
|
133
137
|
if not channels:
|
|
134
138
|
logger.warning("No channels given!")
|
|
135
139
|
return {}
|
|
136
|
-
elif num_buckets >
|
|
137
|
-
raise ValueError("num_buckets must be <=
|
|
140
|
+
elif num_buckets > MAX_NUM_BUCKETS:
|
|
141
|
+
raise ValueError(f"num_buckets ({num_buckets}) must be <= {MAX_NUM_BUCKETS}")
|
|
138
142
|
|
|
139
143
|
# For each channel that has data with the given tags within the provided time range, add a
|
|
140
144
|
# compute expression to later retrieve decimated bucket stats
|
|
@@ -683,6 +687,27 @@ class PolarsExportHandler:
|
|
|
683
687
|
if None not in (buckets, resolution):
|
|
684
688
|
raise ValueError("Cannot export data decimated with both buckets and resolution")
|
|
685
689
|
|
|
690
|
+
if resolution is not None:
|
|
691
|
+
# If the batch duration is higher than this number, and data is actually downsampled with the
|
|
692
|
+
# given resolution, then it would error today if the batch duration is any larger than this.
|
|
693
|
+
computed_batch_duration = datetime.timedelta(seconds=(resolution * MAX_NUM_BUCKETS) / 1e9)
|
|
694
|
+
if batch_duration is None:
|
|
695
|
+
logger.info(
|
|
696
|
+
"Manually setting batch_duration to %fs (resolution=%dns)",
|
|
697
|
+
computed_batch_duration.total_seconds(),
|
|
698
|
+
resolution,
|
|
699
|
+
)
|
|
700
|
+
batch_duration = computed_batch_duration
|
|
701
|
+
elif computed_batch_duration < batch_duration:
|
|
702
|
+
logger.warning(
|
|
703
|
+
"Configured batch_duration of %fs would result in failing exports with resolution=%dns. "
|
|
704
|
+
"Setting batch_duration to %fs instead.",
|
|
705
|
+
batch_duration.total_seconds(),
|
|
706
|
+
resolution,
|
|
707
|
+
computed_batch_duration.total_seconds(),
|
|
708
|
+
)
|
|
709
|
+
batch_duration = computed_batch_duration
|
|
710
|
+
|
|
686
711
|
# Determine download schedule
|
|
687
712
|
export_jobs = self._compute_export_jobs(
|
|
688
713
|
channels, _TimeRange(start, end), timestamp_type, tags or {}, buckets, resolution, batch_duration
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "nominal"
|
|
3
|
-
version = "1.111.
|
|
3
|
+
version = "1.111.2"
|
|
4
4
|
description = "Automate Nominal workflows in Python"
|
|
5
5
|
authors = [
|
|
6
6
|
{ name = "Alexander Reynolds", email = "alex.reynolds@nominal.io" },
|
|
@@ -44,11 +44,11 @@ dependencies = [
|
|
|
44
44
|
# nominal-streaming wheels exist for:
|
|
45
45
|
# - Windows x86_64 (AMD64)
|
|
46
46
|
# - macOS arm64
|
|
47
|
-
# - Linux x86_64 and armv7l
|
|
47
|
+
# - Linux x86_64, arm64, and armv7l
|
|
48
48
|
# To be conservative and prevent installation of the rest of the package on exotic architectures, we explicitly
|
|
49
49
|
# list only the exact platforms supported
|
|
50
50
|
# TODO(drake): support more architectures and clean up dependency markers.
|
|
51
|
-
"nominal-streaming==0.
|
|
51
|
+
"nominal-streaming==0.7.12; 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' or platform_machine=='aarch64' or platform_machine=='arm64')))",
|
|
52
52
|
# Explicitly specifying urllib3 version to handle CVE present in earlier versions
|
|
53
53
|
"urllib3==2.6.3",
|
|
54
54
|
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/rust_streaming/rust_write_stream.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nominal-1.111.0 → nominal-1.111.2}/nominal/experimental/video_processing/video_conversion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|