podstack 1.3.15__tar.gz → 1.3.17__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.
Files changed (33) hide show
  1. {podstack-1.3.15 → podstack-1.3.17}/PKG-INFO +1 -1
  2. {podstack-1.3.15 → podstack-1.3.17}/podstack/registry/__init__.py +33 -11
  3. {podstack-1.3.15 → podstack-1.3.17}/podstack/registry/client.py +9 -0
  4. {podstack-1.3.15 → podstack-1.3.17}/podstack/registry/experiment.py +20 -0
  5. {podstack-1.3.15 → podstack-1.3.17}/podstack.egg-info/PKG-INFO +1 -1
  6. {podstack-1.3.15 → podstack-1.3.17}/pyproject.toml +1 -1
  7. {podstack-1.3.15 → podstack-1.3.17}/LICENSE +0 -0
  8. {podstack-1.3.15 → podstack-1.3.17}/README.md +0 -0
  9. {podstack-1.3.15 → podstack-1.3.17}/podstack/__init__.py +0 -0
  10. {podstack-1.3.15 → podstack-1.3.17}/podstack/annotations.py +0 -0
  11. {podstack-1.3.15 → podstack-1.3.17}/podstack/client.py +0 -0
  12. {podstack-1.3.15 → podstack-1.3.17}/podstack/exceptions.py +0 -0
  13. {podstack-1.3.15 → podstack-1.3.17}/podstack/execution.py +0 -0
  14. {podstack-1.3.15 → podstack-1.3.17}/podstack/gpu_runner.py +0 -0
  15. {podstack-1.3.15 → podstack-1.3.17}/podstack/models.py +0 -0
  16. {podstack-1.3.15 → podstack-1.3.17}/podstack/notebook.py +0 -0
  17. {podstack-1.3.15 → podstack-1.3.17}/podstack/registry/autolog.py +0 -0
  18. {podstack-1.3.15 → podstack-1.3.17}/podstack/registry/exceptions.py +0 -0
  19. {podstack-1.3.15 → podstack-1.3.17}/podstack/registry/model.py +0 -0
  20. {podstack-1.3.15 → podstack-1.3.17}/podstack/registry/model_utils.py +0 -0
  21. {podstack-1.3.15 → podstack-1.3.17}/podstack.egg-info/SOURCES.txt +0 -0
  22. {podstack-1.3.15 → podstack-1.3.17}/podstack.egg-info/dependency_links.txt +0 -0
  23. {podstack-1.3.15 → podstack-1.3.17}/podstack.egg-info/requires.txt +0 -0
  24. {podstack-1.3.15 → podstack-1.3.17}/podstack.egg-info/top_level.txt +0 -0
  25. {podstack-1.3.15 → podstack-1.3.17}/podstack_gpu/__init__.py +0 -0
  26. {podstack-1.3.15 → podstack-1.3.17}/podstack_gpu/app.py +0 -0
  27. {podstack-1.3.15 → podstack-1.3.17}/podstack_gpu/exceptions.py +0 -0
  28. {podstack-1.3.15 → podstack-1.3.17}/podstack_gpu/image.py +0 -0
  29. {podstack-1.3.15 → podstack-1.3.17}/podstack_gpu/runner.py +0 -0
  30. {podstack-1.3.15 → podstack-1.3.17}/podstack_gpu/secret.py +0 -0
  31. {podstack-1.3.15 → podstack-1.3.17}/podstack_gpu/utils.py +0 -0
  32. {podstack-1.3.15 → podstack-1.3.17}/podstack_gpu/volume.py +0 -0
  33. {podstack-1.3.15 → podstack-1.3.17}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: podstack
3
- Version: 1.3.15
3
+ Version: 1.3.17
4
4
  Summary: Official Python SDK for Podstack GPU Notebook Platform
5
5
  Author-email: Podstack <support@podstack.ai>
6
6
  License-Expression: MIT
@@ -347,25 +347,47 @@ def load_model(model_name: str, version: int = None, stage: str = None, framewor
347
347
  def log_dataset(
348
348
  name: str,
349
349
  path: str = None,
350
+ source_path: str = None,
351
+ df=None,
352
+ context: str = "training",
353
+ split: str = None,
354
+ digest: str = None,
355
+ source_type: str = "local",
356
+ tags: dict = None,
350
357
  version: str = None,
351
358
  description: str = None,
352
- digest: str = None,
353
359
  num_rows: int = None,
354
- num_features: int = None
360
+ num_features: int = None,
355
361
  ):
356
362
  """
357
- Log dataset metadata for the active run.
363
+ Log a dataset to the active run.
358
364
 
359
365
  Args:
360
366
  name: Dataset name.
361
- path: Dataset path or URI.
362
- version: Dataset version string.
363
- description: Dataset description.
364
- digest: Hash/digest of the dataset.
365
- num_rows: Number of rows/samples.
366
- num_features: Number of features/columns.
367
- """
368
- _get_client().log_dataset(name, path, version, description, digest, num_rows, num_features)
367
+ path: Local file path or URI.
368
+ source_path: Alias for path.
369
+ df: Optional pandas DataFrame for auto schema/profile computation.
370
+ context: One of "training", "validation", "test".
371
+ split: Alias for context ("train", "val", "test").
372
+ digest: SHA-256 hex digest (auto-computed from path if not provided).
373
+ source_type: One of "local", "s3", "gcs", "url".
374
+ tags: Optional dict of string tags.
375
+ """
376
+ return _get_client().log_dataset(
377
+ name=name,
378
+ path=path,
379
+ source_path=source_path,
380
+ df=df,
381
+ context=context,
382
+ split=split,
383
+ digest=digest,
384
+ source_type=source_type,
385
+ tags=tags,
386
+ version=version,
387
+ description=description,
388
+ num_rows=num_rows,
389
+ num_features=num_features,
390
+ )
369
391
 
370
392
 
371
393
  def compare_runs(run_ids: list, metric_keys: list = None) -> dict:
@@ -977,8 +977,10 @@ class RegistryClient:
977
977
  self,
978
978
  name: str,
979
979
  path: str = None,
980
+ source_path: str = None,
980
981
  df=None,
981
982
  context: str = "training",
983
+ split: str = None,
982
984
  digest: str = None,
983
985
  source_type: str = "local",
984
986
  tags: dict = None,
@@ -1021,6 +1023,13 @@ class RegistryClient:
1021
1023
  if not self._active_run:
1022
1024
  raise NoActiveRunError()
1023
1025
 
1026
+ # Aliases
1027
+ if source_path and not path:
1028
+ path = source_path
1029
+ if split:
1030
+ _split_map = {"train": "training", "val": "validation", "valid": "validation", "test": "test"}
1031
+ context = _split_map.get(split.lower(), split)
1032
+
1024
1033
  schema: Dict[str, str] = {}
1025
1034
  profile: Dict[str, Any] = {}
1026
1035
 
@@ -98,6 +98,26 @@ class Dataset:
98
98
  tags: Dict[str, str] = field(default_factory=dict)
99
99
  created_at: Optional[str] = None
100
100
 
101
+ def __getitem__(self, key: str):
102
+ # Convenience aliases
103
+ if key == "rows":
104
+ return self.profile.get("num_rows")
105
+ if key == "num_features":
106
+ return self.profile.get("num_features")
107
+ if key == "path":
108
+ return self.source
109
+ try:
110
+ return getattr(self, key)
111
+ except AttributeError:
112
+ raise KeyError(key)
113
+
114
+ def get(self, key: str, default=None):
115
+ try:
116
+ val = self[key]
117
+ return val if val is not None else default
118
+ except KeyError:
119
+ return default
120
+
101
121
  @classmethod
102
122
  def from_dict(cls, data: Dict[str, Any]) -> "Dataset":
103
123
  """Create a Dataset from a dict."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: podstack
3
- Version: 1.3.15
3
+ Version: 1.3.17
4
4
  Summary: Official Python SDK for Podstack GPU Notebook Platform
5
5
  Author-email: Podstack <support@podstack.ai>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "podstack"
7
- version = "1.3.15"
7
+ version = "1.3.17"
8
8
  description = "Official Python SDK for Podstack GPU Notebook Platform"
9
9
  readme = "README.md"
10
10
  license = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes