wandb 0.22.2__py3-none-macosx_12_0_arm64.whl → 0.22.3__py3-none-macosx_12_0_arm64.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.
- wandb/__init__.py +1 -1
- wandb/__init__.pyi +2 -2
- wandb/_pydantic/__init__.py +8 -1
- wandb/_pydantic/base.py +54 -18
- wandb/_pydantic/field_types.py +8 -3
- wandb/_pydantic/pagination.py +46 -0
- wandb/_pydantic/utils.py +2 -2
- wandb/apis/public/api.py +24 -19
- wandb/apis/public/artifacts.py +259 -270
- wandb/apis/public/registries/_utils.py +40 -54
- wandb/apis/public/registries/registries_search.py +70 -85
- wandb/apis/public/registries/registry.py +173 -156
- wandb/apis/public/runs.py +27 -6
- wandb/apis/public/utils.py +43 -20
- wandb/automations/_generated/create_automation.py +2 -2
- wandb/automations/_generated/create_generic_webhook_integration.py +4 -4
- wandb/automations/_generated/delete_automation.py +2 -2
- wandb/automations/_generated/fragments.py +31 -52
- wandb/automations/_generated/generic_webhook_integrations_by_entity.py +3 -3
- wandb/automations/_generated/get_automations.py +3 -3
- wandb/automations/_generated/get_automations_by_entity.py +3 -3
- wandb/automations/_generated/input_types.py +9 -9
- wandb/automations/_generated/integrations_by_entity.py +3 -3
- wandb/automations/_generated/operations.py +6 -6
- wandb/automations/_generated/slack_integrations_by_entity.py +3 -3
- wandb/automations/_generated/update_automation.py +2 -2
- wandb/automations/_utils.py +3 -3
- wandb/automations/actions.py +3 -3
- wandb/automations/automations.py +6 -5
- wandb/bin/gpu_stats +0 -0
- wandb/bin/wandb-core +0 -0
- wandb/cli/beta.py +8 -2
- wandb/cli/beta_leet.py +2 -1
- wandb/cli/beta_sync.py +1 -1
- wandb/errors/term.py +8 -8
- wandb/jupyter.py +0 -51
- wandb/old/settings.py +6 -6
- wandb/proto/v3/wandb_internal_pb2.py +351 -352
- wandb/proto/v3/wandb_server_pb2.py +38 -37
- wandb/proto/v3/wandb_settings_pb2.py +2 -2
- wandb/proto/v3/wandb_sync_pb2.py +19 -6
- wandb/proto/v4/wandb_internal_pb2.py +351 -352
- wandb/proto/v4/wandb_server_pb2.py +38 -37
- wandb/proto/v4/wandb_settings_pb2.py +2 -2
- wandb/proto/v4/wandb_sync_pb2.py +10 -6
- wandb/proto/v5/wandb_internal_pb2.py +351 -352
- wandb/proto/v5/wandb_server_pb2.py +38 -37
- wandb/proto/v5/wandb_settings_pb2.py +2 -2
- wandb/proto/v5/wandb_sync_pb2.py +10 -6
- wandb/proto/v6/wandb_internal_pb2.py +351 -352
- wandb/proto/v6/wandb_server_pb2.py +38 -37
- wandb/proto/v6/wandb_settings_pb2.py +2 -2
- wandb/proto/v6/wandb_sync_pb2.py +10 -6
- wandb/sdk/artifacts/_generated/__init__.py +96 -40
- wandb/sdk/artifacts/_generated/add_aliases.py +3 -3
- wandb/sdk/artifacts/_generated/add_artifact_collection_tags.py +26 -0
- wandb/sdk/artifacts/_generated/artifact_by_id.py +2 -2
- wandb/sdk/artifacts/_generated/artifact_by_name.py +3 -3
- wandb/sdk/artifacts/_generated/artifact_collection_membership_file_urls.py +27 -8
- wandb/sdk/artifacts/_generated/artifact_collection_membership_files.py +27 -8
- wandb/sdk/artifacts/_generated/artifact_created_by.py +7 -20
- wandb/sdk/artifacts/_generated/artifact_file_urls.py +19 -6
- wandb/sdk/artifacts/_generated/artifact_membership_by_name.py +26 -0
- wandb/sdk/artifacts/_generated/artifact_type.py +5 -5
- wandb/sdk/artifacts/_generated/artifact_used_by.py +8 -17
- wandb/sdk/artifacts/_generated/artifact_version_files.py +19 -8
- wandb/sdk/artifacts/_generated/delete_aliases.py +3 -3
- wandb/sdk/artifacts/_generated/delete_artifact.py +4 -4
- wandb/sdk/artifacts/_generated/delete_artifact_collection_tags.py +23 -0
- wandb/sdk/artifacts/_generated/delete_artifact_portfolio.py +4 -4
- wandb/sdk/artifacts/_generated/delete_artifact_sequence.py +4 -4
- wandb/sdk/artifacts/_generated/delete_registry.py +21 -0
- wandb/sdk/artifacts/_generated/fetch_artifact_manifest.py +8 -20
- wandb/sdk/artifacts/_generated/fetch_linked_artifacts.py +13 -35
- wandb/sdk/artifacts/_generated/fetch_org_info_from_entity.py +28 -0
- wandb/sdk/artifacts/_generated/fetch_registries.py +18 -8
- wandb/sdk/{projects → artifacts}/_generated/fetch_registry.py +4 -4
- wandb/sdk/artifacts/_generated/fragments.py +183 -333
- wandb/sdk/artifacts/_generated/input_types.py +133 -7
- wandb/sdk/artifacts/_generated/link_artifact.py +5 -5
- wandb/sdk/artifacts/_generated/operations.py +1053 -548
- wandb/sdk/artifacts/_generated/project_artifact_collection.py +9 -77
- wandb/sdk/artifacts/_generated/project_artifact_collections.py +21 -9
- wandb/sdk/artifacts/_generated/project_artifact_type.py +3 -3
- wandb/sdk/artifacts/_generated/project_artifact_types.py +19 -6
- wandb/sdk/artifacts/_generated/project_artifacts.py +7 -8
- wandb/sdk/artifacts/_generated/registry_collections.py +21 -9
- wandb/sdk/artifacts/_generated/registry_versions.py +20 -9
- wandb/sdk/artifacts/_generated/rename_registry.py +25 -0
- wandb/sdk/artifacts/_generated/run_input_artifacts.py +5 -9
- wandb/sdk/artifacts/_generated/run_output_artifacts.py +5 -9
- wandb/sdk/artifacts/_generated/type_info.py +2 -2
- wandb/sdk/artifacts/_generated/unlink_artifact.py +3 -5
- wandb/sdk/artifacts/_generated/update_artifact.py +3 -3
- wandb/sdk/artifacts/_generated/update_artifact_collection_type.py +28 -0
- wandb/sdk/artifacts/_generated/update_artifact_portfolio.py +7 -16
- wandb/sdk/artifacts/_generated/update_artifact_sequence.py +7 -16
- wandb/sdk/artifacts/_generated/upsert_registry.py +25 -0
- wandb/sdk/artifacts/_gqlutils.py +170 -6
- wandb/sdk/artifacts/_models/__init__.py +9 -0
- wandb/sdk/artifacts/_models/artifact_collection.py +109 -0
- wandb/sdk/artifacts/_models/manifest.py +26 -0
- wandb/sdk/artifacts/_models/pagination.py +26 -0
- wandb/sdk/artifacts/_models/registry.py +100 -0
- wandb/sdk/artifacts/_validators.py +45 -27
- wandb/sdk/artifacts/artifact.py +220 -215
- wandb/sdk/artifacts/artifact_file_cache.py +1 -1
- wandb/sdk/artifacts/artifact_manifest.py +37 -32
- wandb/sdk/artifacts/artifact_manifest_entry.py +80 -125
- wandb/sdk/artifacts/artifact_manifests/artifact_manifest_v1.py +43 -61
- wandb/sdk/artifacts/storage_handlers/gcs_handler.py +8 -6
- wandb/sdk/data_types/image.py +2 -2
- wandb/sdk/interface/interface.py +72 -64
- wandb/sdk/interface/interface_queue.py +27 -18
- wandb/sdk/interface/interface_shared.py +61 -23
- wandb/sdk/interface/interface_sock.py +9 -5
- wandb/sdk/internal/_generated/server_features_query.py +4 -4
- wandb/sdk/launch/inputs/schema.py +13 -10
- wandb/sdk/lib/apikey.py +8 -12
- wandb/sdk/lib/asyncio_compat.py +1 -1
- wandb/sdk/lib/asyncio_manager.py +5 -5
- wandb/sdk/lib/console_capture.py +38 -30
- wandb/sdk/lib/progress.py +159 -64
- wandb/sdk/lib/retry.py +3 -2
- wandb/sdk/lib/service/service_connection.py +2 -2
- wandb/sdk/lib/wb_logging.py +2 -1
- wandb/sdk/mailbox/mailbox.py +1 -1
- wandb/sdk/wandb_init.py +10 -13
- wandb/sdk/wandb_run.py +9 -46
- wandb/sdk/wandb_settings.py +102 -19
- {wandb-0.22.2.dist-info → wandb-0.22.3.dist-info}/METADATA +2 -1
- {wandb-0.22.2.dist-info → wandb-0.22.3.dist-info}/RECORD +135 -134
- wandb/sdk/artifacts/_generated/artifact_via_membership_by_name.py +0 -26
- wandb/sdk/artifacts/_generated/create_artifact_collection_tag_assignments.py +0 -36
- wandb/sdk/artifacts/_generated/delete_artifact_collection_tag_assignments.py +0 -25
- wandb/sdk/artifacts/_generated/move_artifact_collection.py +0 -35
- wandb/sdk/projects/_generated/__init__.py +0 -26
- wandb/sdk/projects/_generated/delete_project.py +0 -22
- wandb/sdk/projects/_generated/enums.py +0 -4
- wandb/sdk/projects/_generated/fragments.py +0 -41
- wandb/sdk/projects/_generated/input_types.py +0 -13
- wandb/sdk/projects/_generated/operations.py +0 -88
- wandb/sdk/projects/_generated/rename_project.py +0 -27
- wandb/sdk/projects/_generated/upsert_registry_project.py +0 -27
- {wandb-0.22.2.dist-info → wandb-0.22.3.dist-info}/WHEEL +0 -0
- {wandb-0.22.2.dist-info → wandb-0.22.3.dist-info}/entry_points.txt +0 -0
- {wandb-0.22.2.dist-info → wandb-0.22.3.dist-info}/licenses/LICENSE +0 -0
wandb/sdk/wandb_run.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import asyncio
|
|
4
3
|
import functools
|
|
5
4
|
import glob
|
|
6
5
|
import json
|
|
@@ -33,7 +32,6 @@ from wandb.errors import CommError, UsageError
|
|
|
33
32
|
from wandb.errors.links import url_registry
|
|
34
33
|
from wandb.integration.torch import wandb_torch
|
|
35
34
|
from wandb.plot import CustomChart, Visualize
|
|
36
|
-
from wandb.proto import wandb_internal_pb2 as pb
|
|
37
35
|
from wandb.proto.wandb_deprecated import Deprecated
|
|
38
36
|
from wandb.proto.wandb_internal_pb2 import (
|
|
39
37
|
MetricRecord,
|
|
@@ -44,7 +42,7 @@ from wandb.proto.wandb_internal_pb2 import (
|
|
|
44
42
|
from wandb.sdk.artifacts._internal_artifact import InternalArtifact
|
|
45
43
|
from wandb.sdk.artifacts.artifact import Artifact
|
|
46
44
|
from wandb.sdk.internal import job_builder
|
|
47
|
-
from wandb.sdk.lib import
|
|
45
|
+
from wandb.sdk.lib import wb_logging
|
|
48
46
|
from wandb.sdk.lib.import_hooks import (
|
|
49
47
|
register_post_import_hook,
|
|
50
48
|
unregister_post_import_hook,
|
|
@@ -489,7 +487,7 @@ class Run:
|
|
|
489
487
|
|
|
490
488
|
You can log data to a run with `wandb.Run.log()`. Anything you log using
|
|
491
489
|
`wandb.Run.log()` is sent to that run. See
|
|
492
|
-
[Create an experiment](https://docs.wandb.ai/guides/track/
|
|
490
|
+
[Create an experiment](https://docs.wandb.ai/guides/track/create-an-experiment/) or
|
|
493
491
|
[`wandb.init`](https://docs.wandb.ai/ref/python/init/) API reference page
|
|
494
492
|
or more information.
|
|
495
493
|
|
|
@@ -1574,15 +1572,13 @@ class Run:
|
|
|
1574
1572
|
|
|
1575
1573
|
@_log_to_run
|
|
1576
1574
|
def _console_callback(self, name: str, data: str) -> None:
|
|
1577
|
-
# logger.info("console callback: %s, %s", name, data)
|
|
1578
1575
|
if self._backend and self._backend.interface:
|
|
1579
|
-
|
|
1576
|
+
# nowait=True so that this can be called from an asyncio context.
|
|
1577
|
+
self._backend.interface.publish_output(name, data, nowait=True)
|
|
1580
1578
|
|
|
1581
1579
|
@_log_to_run
|
|
1582
1580
|
@_raise_if_finished
|
|
1583
1581
|
def _console_raw_callback(self, name: str, data: str) -> None:
|
|
1584
|
-
# logger.info("console callback: %s, %s", name, data)
|
|
1585
|
-
|
|
1586
1582
|
# NOTE: console output is only allowed on the process which installed the callback
|
|
1587
1583
|
# this will prevent potential corruption in the socket to the service. Other methods
|
|
1588
1584
|
# are protected by the _attach run decorator, but this callback was installed on the
|
|
@@ -1592,7 +1588,8 @@ class Run:
|
|
|
1592
1588
|
return
|
|
1593
1589
|
|
|
1594
1590
|
if self._backend and self._backend.interface:
|
|
1595
|
-
|
|
1591
|
+
# nowait=True so that this can be called from an asyncio context.
|
|
1592
|
+
self._backend.interface.publish_output_raw(name, data, nowait=True)
|
|
1596
1593
|
|
|
1597
1594
|
@_log_to_run
|
|
1598
1595
|
def _tensorboard_callback(
|
|
@@ -1861,7 +1858,7 @@ class Run:
|
|
|
1861
1858
|
run.log({"accuracy": 0.8}, step=current_step)
|
|
1862
1859
|
current_step += 1
|
|
1863
1860
|
run.log({"train-loss": 0.4}, step=current_step)
|
|
1864
|
-
run.log({"accuracy": 0.9}, step=current_step)
|
|
1861
|
+
run.log({"accuracy": 0.9}, step=current_step, commit=True)
|
|
1865
1862
|
```
|
|
1866
1863
|
|
|
1867
1864
|
Args:
|
|
@@ -2682,41 +2679,6 @@ class Run:
|
|
|
2682
2679
|
else:
|
|
2683
2680
|
return artifact
|
|
2684
2681
|
|
|
2685
|
-
async def _display_finish_stats(
|
|
2686
|
-
self,
|
|
2687
|
-
progress_printer: progress.ProgressPrinter,
|
|
2688
|
-
) -> None:
|
|
2689
|
-
last_result: Result | None = None
|
|
2690
|
-
|
|
2691
|
-
async def loop_update_printer() -> None:
|
|
2692
|
-
while True:
|
|
2693
|
-
if last_result:
|
|
2694
|
-
progress_printer.update(
|
|
2695
|
-
[last_result.response.poll_exit_response],
|
|
2696
|
-
)
|
|
2697
|
-
await asyncio.sleep(0.1)
|
|
2698
|
-
|
|
2699
|
-
async def loop_poll_exit() -> None:
|
|
2700
|
-
nonlocal last_result
|
|
2701
|
-
assert self._backend and self._backend.interface
|
|
2702
|
-
|
|
2703
|
-
while True:
|
|
2704
|
-
handle = await self._backend.interface.deliver_async(
|
|
2705
|
-
pb.Record(request=pb.Request(poll_exit=pb.PollExitRequest()))
|
|
2706
|
-
)
|
|
2707
|
-
|
|
2708
|
-
time_start = time.monotonic()
|
|
2709
|
-
last_result = await handle.wait_async(timeout=None)
|
|
2710
|
-
|
|
2711
|
-
# Update at most once a second.
|
|
2712
|
-
time_elapsed = time.monotonic() - time_start
|
|
2713
|
-
if time_elapsed < 1:
|
|
2714
|
-
await asyncio.sleep(1 - time_elapsed)
|
|
2715
|
-
|
|
2716
|
-
async with asyncio_compat.open_task_group() as task_group:
|
|
2717
|
-
task_group.start_soon(loop_update_printer())
|
|
2718
|
-
task_group.start_soon(loop_poll_exit())
|
|
2719
|
-
|
|
2720
2682
|
def _on_finish(self) -> None:
|
|
2721
2683
|
trigger.call("on_finished")
|
|
2722
2684
|
|
|
@@ -2741,8 +2703,9 @@ class Run:
|
|
|
2741
2703
|
exit_handle,
|
|
2742
2704
|
timeout=None,
|
|
2743
2705
|
display_progress=functools.partial(
|
|
2744
|
-
|
|
2706
|
+
progress.loop_printing_operation_stats,
|
|
2745
2707
|
progress_printer,
|
|
2708
|
+
self._backend.interface,
|
|
2746
2709
|
),
|
|
2747
2710
|
)
|
|
2748
2711
|
|
wandb/sdk/wandb_settings.py
CHANGED
|
@@ -254,7 +254,40 @@ class Settings(BaseModel, validate_assignment=True):
|
|
|
254
254
|
"""
|
|
255
255
|
|
|
256
256
|
console_multipart: bool = False
|
|
257
|
-
"""
|
|
257
|
+
"""Enable multipart console logging.
|
|
258
|
+
|
|
259
|
+
When True, the SDK writes console output to timestamped files
|
|
260
|
+
under the `logs/` directory instead of a single `output.log`.
|
|
261
|
+
|
|
262
|
+
Each part is uploaded as soon as it is closed, giving users live
|
|
263
|
+
access to logs while the run is active. Rollover cadence is
|
|
264
|
+
controlled by `console_chunk_max_bytes` and/or `console_chunk_max_seconds`.
|
|
265
|
+
If both limits are `0`, all logs are uploaded once at run finish.
|
|
266
|
+
|
|
267
|
+
Note: Uploaded chunks are immutable; terminal control sequences
|
|
268
|
+
that modify previous lines (e.g., progress bars using carriage returns)
|
|
269
|
+
only affect the current chunk.
|
|
270
|
+
"""
|
|
271
|
+
|
|
272
|
+
console_chunk_max_bytes: int = 0
|
|
273
|
+
"""Size-based rollover threshold for multipart console logs, in bytes.
|
|
274
|
+
|
|
275
|
+
Starts a new console log file when the current part reaches this
|
|
276
|
+
size. Has an effect only when `console_multipart` is `True`.
|
|
277
|
+
Can be combined with `console_chunk_max_seconds`; whichever limit is
|
|
278
|
+
hit first triggers the rollover. A value of `0` disables the
|
|
279
|
+
size-based limit.
|
|
280
|
+
"""
|
|
281
|
+
|
|
282
|
+
console_chunk_max_seconds: int = 0
|
|
283
|
+
"""Time-based rollover threshold for multipart console logs, in seconds.
|
|
284
|
+
|
|
285
|
+
Starts a new console log file after this many seconds have elapsed
|
|
286
|
+
since the current part began. Requires `console_multipart` to be
|
|
287
|
+
`True`. May be used with `console_chunk_max_bytes`; the first limit
|
|
288
|
+
reached closes the part. A value of `0` disables the time-based
|
|
289
|
+
limit.
|
|
290
|
+
"""
|
|
258
291
|
|
|
259
292
|
credentials_file: str = Field(
|
|
260
293
|
default_factory=lambda: str(credentials.DEFAULT_WANDB_CREDENTIALS_FILE)
|
|
@@ -1084,6 +1117,30 @@ class Settings(BaseModel, validate_assignment=True):
|
|
|
1084
1117
|
|
|
1085
1118
|
return "wrap"
|
|
1086
1119
|
|
|
1120
|
+
@field_validator("console_chunk_max_bytes", mode="after")
|
|
1121
|
+
@classmethod
|
|
1122
|
+
def validate_console_chunk_max_bytes(cls, value):
|
|
1123
|
+
"""Validate the console_chunk_max_bytes value.
|
|
1124
|
+
|
|
1125
|
+
<!-- lazydoc-ignore: internal -->
|
|
1126
|
+
"""
|
|
1127
|
+
if value < 0:
|
|
1128
|
+
raise ValueError("console_chunk_max_bytes must be non-negative")
|
|
1129
|
+
|
|
1130
|
+
return value
|
|
1131
|
+
|
|
1132
|
+
@field_validator("console_chunk_max_seconds", mode="after")
|
|
1133
|
+
@classmethod
|
|
1134
|
+
def validate_console_chunk_max_seconds(cls, value):
|
|
1135
|
+
"""Validate the console_chunk_max_seconds value.
|
|
1136
|
+
|
|
1137
|
+
<!-- lazydoc-ignore: internal -->
|
|
1138
|
+
"""
|
|
1139
|
+
if value < 0:
|
|
1140
|
+
raise ValueError("console_chunk_max_seconds must be non-negative")
|
|
1141
|
+
|
|
1142
|
+
return value
|
|
1143
|
+
|
|
1087
1144
|
@field_validator("x_executable", mode="before")
|
|
1088
1145
|
@classmethod
|
|
1089
1146
|
def validate_x_executable(cls, value):
|
|
@@ -1914,24 +1971,7 @@ class Settings(BaseModel, validate_assignment=True):
|
|
|
1914
1971
|
program = self.program or self._get_program()
|
|
1915
1972
|
|
|
1916
1973
|
if program is not None:
|
|
1917
|
-
|
|
1918
|
-
root = (
|
|
1919
|
-
GitRepo().root or os.getcwd()
|
|
1920
|
-
if not self.disable_git
|
|
1921
|
-
else os.getcwd()
|
|
1922
|
-
)
|
|
1923
|
-
except Exception:
|
|
1924
|
-
# if the git command fails, fall back to the current working directory
|
|
1925
|
-
root = os.getcwd()
|
|
1926
|
-
|
|
1927
|
-
self.program_relpath = self.program_relpath or self._get_program_relpath(
|
|
1928
|
-
program, root
|
|
1929
|
-
)
|
|
1930
|
-
program_abspath = os.path.abspath(
|
|
1931
|
-
os.path.join(root, os.path.relpath(os.getcwd(), root), program)
|
|
1932
|
-
)
|
|
1933
|
-
if os.path.exists(program_abspath):
|
|
1934
|
-
self.program_abspath = program_abspath
|
|
1974
|
+
self._setup_code_paths(program)
|
|
1935
1975
|
else:
|
|
1936
1976
|
program = "<python with no main file>"
|
|
1937
1977
|
|
|
@@ -2196,3 +2236,46 @@ class Settings(BaseModel, validate_assignment=True):
|
|
|
2196
2236
|
This is a compatibility property for Pydantic v1 to mimic v2's model_fields_set.
|
|
2197
2237
|
"""
|
|
2198
2238
|
return getattr(self, "__fields_set__", set())
|
|
2239
|
+
|
|
2240
|
+
def _setup_code_paths(self, program: str):
|
|
2241
|
+
"""Sets the program_abspath and program_relpath settings."""
|
|
2242
|
+
if self._jupyter and self.x_jupyter_root:
|
|
2243
|
+
self._infer_code_paths_for_jupyter(program)
|
|
2244
|
+
else:
|
|
2245
|
+
self._infer_code_path_for_program(program)
|
|
2246
|
+
|
|
2247
|
+
def _infer_code_path_for_program(self, program: str):
|
|
2248
|
+
"""Finds the program's absolute and relative paths."""
|
|
2249
|
+
try:
|
|
2250
|
+
root = (
|
|
2251
|
+
GitRepo().root or os.getcwd() if not self.disable_git else os.getcwd()
|
|
2252
|
+
)
|
|
2253
|
+
except Exception:
|
|
2254
|
+
# if the git command fails, fall back to the current working directory
|
|
2255
|
+
root = os.getcwd()
|
|
2256
|
+
|
|
2257
|
+
self.program_relpath = self.program_relpath or self._get_program_relpath(
|
|
2258
|
+
program, root
|
|
2259
|
+
)
|
|
2260
|
+
|
|
2261
|
+
program_abspath = os.path.abspath(
|
|
2262
|
+
os.path.join(root, os.path.relpath(os.getcwd(), root), program)
|
|
2263
|
+
)
|
|
2264
|
+
|
|
2265
|
+
if os.path.exists(program_abspath):
|
|
2266
|
+
self.program_abspath = program_abspath
|
|
2267
|
+
|
|
2268
|
+
def _infer_code_paths_for_jupyter(self, program: str):
|
|
2269
|
+
"""Find the notebook's absolute and relative paths.
|
|
2270
|
+
|
|
2271
|
+
Since the notebook's execution environment
|
|
2272
|
+
is not the same as the current working directory.
|
|
2273
|
+
We utilize the metadata provided by the jupyter server.
|
|
2274
|
+
"""
|
|
2275
|
+
if not self.x_jupyter_root or not program:
|
|
2276
|
+
return None
|
|
2277
|
+
|
|
2278
|
+
self.program_abspath = os.path.abspath(
|
|
2279
|
+
os.path.join(self.x_jupyter_root, program)
|
|
2280
|
+
)
|
|
2281
|
+
self.program_relpath = program
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: wandb
|
|
3
|
-
Version: 0.22.
|
|
3
|
+
Version: 0.22.3
|
|
4
4
|
Summary: A CLI and library for interacting with the Weights & Biases API.
|
|
5
5
|
Project-URL: Source, https://github.com/wandb/wandb
|
|
6
6
|
Project-URL: Bug Reports, https://github.com/wandb/wandb/issues
|
|
@@ -42,6 +42,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
42
42
|
Classifier: Programming Language :: Python :: 3.11
|
|
43
43
|
Classifier: Programming Language :: Python :: 3.12
|
|
44
44
|
Classifier: Programming Language :: Python :: 3.13
|
|
45
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
45
46
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
46
47
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
47
48
|
Classifier: Topic :: System :: Logging
|