wandb 0.18.6__py3-none-any.whl → 0.19.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. package_readme.md +8 -0
  2. wandb/__init__.py +5 -7
  3. wandb/__init__.pyi +51 -30
  4. wandb/analytics/sentry.py +4 -10
  5. wandb/apis/importers/internals/internal.py +6 -6
  6. wandb/apis/importers/internals/protocols.py +11 -7
  7. wandb/apis/public/api.py +5 -1
  8. wandb/apis/public/jobs.py +1 -7
  9. wandb/apis/public/reports.py +6 -17
  10. wandb/apis/public/runs.py +12 -10
  11. wandb/bin/gpu_stats +0 -0
  12. wandb/cli/cli.py +9 -45
  13. wandb/env.py +3 -5
  14. wandb/errors/links.py +1 -1
  15. wandb/errors/term.py +1 -6
  16. wandb/filesync/dir_watcher.py +3 -3
  17. wandb/filesync/step_upload.py +2 -5
  18. wandb/integration/fastai/__init__.py +1 -6
  19. wandb/integration/gym/__init__.py +1 -7
  20. wandb/integration/keras/callbacks/metrics_logger.py +1 -8
  21. wandb/integration/keras/callbacks/model_checkpoint.py +1 -8
  22. wandb/integration/keras/keras.py +3 -5
  23. wandb/integration/lightgbm/__init__.py +1 -1
  24. wandb/integration/sb3/sb3.py +1 -7
  25. wandb/integration/sklearn/utils.py +1 -1
  26. wandb/integration/tensorboard/log.py +1 -2
  27. wandb/integration/torch/wandb_torch.py +1 -1
  28. wandb/integration/ultralytics/bbox_utils.py +9 -2
  29. wandb/jupyter.py +4 -4
  30. wandb/proto/v3/wandb_internal_pb2.py +31 -31
  31. wandb/proto/v3/wandb_settings_pb2.py +2 -2
  32. wandb/proto/v3/wandb_telemetry_pb2.py +4 -4
  33. wandb/proto/v4/wandb_internal_pb2.py +31 -31
  34. wandb/proto/v4/wandb_settings_pb2.py +2 -2
  35. wandb/proto/v4/wandb_telemetry_pb2.py +4 -4
  36. wandb/proto/v5/wandb_internal_pb2.py +31 -31
  37. wandb/proto/v5/wandb_settings_pb2.py +2 -2
  38. wandb/proto/v5/wandb_telemetry_pb2.py +4 -4
  39. wandb/proto/wandb_deprecated.py +3 -11
  40. wandb/proto/wandb_generate_deprecated.py +3 -7
  41. wandb/sdk/artifacts/artifact.py +3 -11
  42. wandb/sdk/artifacts/artifact_file_cache.py +2 -5
  43. wandb/sdk/artifacts/artifact_saver.py +2 -6
  44. wandb/sdk/artifacts/storage_handlers/gcs_handler.py +2 -4
  45. wandb/sdk/artifacts/storage_handlers/local_file_handler.py +2 -4
  46. wandb/sdk/artifacts/storage_handlers/s3_handler.py +2 -4
  47. wandb/sdk/backend/backend.py +1 -1
  48. wandb/sdk/data_types/base_types/wb_value.py +20 -10
  49. wandb/sdk/data_types/histogram.py +1 -3
  50. wandb/sdk/data_types/object_3d.py +2 -6
  51. wandb/sdk/data_types/table.py +1 -1
  52. wandb/sdk/data_types/utils.py +1 -2
  53. wandb/sdk/data_types/video.py +15 -4
  54. wandb/sdk/integration_utils/auto_logging.py +1 -8
  55. wandb/sdk/interface/interface.py +12 -5
  56. wandb/sdk/interface/interface_queue.py +0 -6
  57. wandb/sdk/interface/interface_shared.py +9 -0
  58. wandb/sdk/interface/router.py +1 -2
  59. wandb/sdk/interface/router_queue.py +0 -3
  60. wandb/sdk/interface/router_relay.py +0 -2
  61. wandb/sdk/internal/file_stream.py +1 -4
  62. wandb/sdk/internal/flow_control.py +1 -1
  63. wandb/sdk/internal/handler.py +8 -5
  64. wandb/sdk/internal/internal.py +3 -17
  65. wandb/sdk/internal/internal_api.py +3 -10
  66. wandb/sdk/internal/internal_util.py +0 -3
  67. wandb/sdk/internal/job_builder.py +20 -12
  68. wandb/sdk/internal/progress.py +1 -5
  69. wandb/sdk/internal/sender.py +9 -15
  70. wandb/sdk/internal/settings_static.py +4 -10
  71. wandb/sdk/internal/system/assets/cpu.py +2 -2
  72. wandb/sdk/internal/system/assets/disk.py +3 -3
  73. wandb/sdk/internal/system/assets/gpu.py +7 -7
  74. wandb/sdk/internal/system/assets/gpu_amd.py +1 -7
  75. wandb/sdk/internal/system/assets/interfaces.py +11 -13
  76. wandb/sdk/internal/system/assets/ipu.py +1 -1
  77. wandb/sdk/internal/system/assets/memory.py +2 -2
  78. wandb/sdk/internal/system/assets/open_metrics.py +2 -8
  79. wandb/sdk/internal/system/assets/trainium.py +3 -9
  80. wandb/sdk/internal/system/system_info.py +14 -13
  81. wandb/sdk/internal/system/system_monitor.py +5 -12
  82. wandb/sdk/internal/tb_watcher.py +1 -1
  83. wandb/sdk/internal/writer.py +2 -4
  84. wandb/sdk/launch/__init__.py +2 -1
  85. wandb/sdk/launch/agent/run_queue_item_file_saver.py +1 -7
  86. wandb/sdk/launch/create_job.py +2 -3
  87. wandb/sdk/launch/runner/abstract.py +1 -6
  88. wandb/sdk/launch/runner/kubernetes_monitor.py +2 -4
  89. wandb/sdk/lib/apikey.py +2 -6
  90. wandb/sdk/lib/fsm.py +12 -6
  91. wandb/sdk/lib/ipython.py +1 -6
  92. wandb/sdk/lib/module.py +0 -3
  93. wandb/sdk/lib/progress.py +2 -3
  94. wandb/sdk/lib/run_moment.py +1 -7
  95. wandb/sdk/lib/server.py +10 -24
  96. wandb/sdk/lib/sock_client.py +0 -5
  97. wandb/sdk/service/server.py +3 -12
  98. wandb/sdk/service/server_sock.py +0 -2
  99. wandb/sdk/service/service.py +5 -5
  100. wandb/sdk/wandb_init.py +215 -166
  101. wandb/sdk/wandb_login.py +17 -27
  102. wandb/sdk/wandb_run.py +129 -161
  103. wandb/sdk/wandb_settings.py +978 -1760
  104. wandb/sdk/wandb_setup.py +87 -94
  105. wandb/sdk/wandb_watch.py +1 -1
  106. wandb/sync/sync.py +1 -2
  107. wandb/util.py +7 -40
  108. wandb/wandb_controller.py +10 -12
  109. {wandb-0.18.6.dist-info → wandb-0.19.0.dist-info}/METADATA +13 -4
  110. {wandb-0.18.6.dist-info → wandb-0.19.0.dist-info}/RECORD +113 -119
  111. {wandb-0.18.6.dist-info → wandb-0.19.0.dist-info}/WHEEL +1 -1
  112. wandb/integration/magic.py +0 -556
  113. wandb/magic.py +0 -3
  114. wandb/sdk/lib/_settings_toposort_generate.py +0 -159
  115. wandb/sdk/lib/_settings_toposort_generated.py +0 -250
  116. wandb/sdk/lib/reporting.py +0 -99
  117. wandb/sdk/lib/tracelog.py +0 -255
  118. {wandb-0.18.6.dist-info → wandb-0.19.0.dist-info}/entry_points.txt +0 -0
  119. {wandb-0.18.6.dist-info → wandb-0.19.0.dist-info}/licenses/LICENSE +0 -0
package_readme.md CHANGED
@@ -68,6 +68,14 @@ Use your favorite framework with W&B. W&B integrations make it fast and easy to
68
68
 
69
69
   
70
70
 
71
+ # Python Version Support
72
+
73
+ We are committed to supporting our minimum required Python version for *at least* six months after its official end-of-life (EOL) date, as defined by the Python Software Foundation. You can find a list of Python EOL dates [here](https://devguide.python.org/versions/).
74
+
75
+ When we discontinue support for a Python version, we will increment the library’s minor version number to reflect this change.
76
+
77
+  
78
+
71
79
  # Contribution guidelines
72
80
  Weights & Biases ❤️ open source, and we welcome contributions from the community! See the [Contribution guide](https://github.com/wandb/wandb/blob/main/CONTRIBUTING.md) for more information on the development workflow and the internals of the wandb library. For wandb bugs and feature requests, visit [GitHub Issues](https://github.com/wandb/wandb/issues) or contact support@wandb.com.
73
81
 
wandb/__init__.py CHANGED
@@ -10,7 +10,7 @@ For reference documentation, see https://docs.wandb.com/ref/python.
10
10
  """
11
11
  from __future__ import annotations
12
12
 
13
- __version__ = "0.18.6"
13
+ __version__ = "0.19.0"
14
14
 
15
15
 
16
16
  from wandb.errors import Error
@@ -75,7 +75,7 @@ from wandb.data_types import JoinedTable
75
75
 
76
76
  from wandb.wandb_agent import agent
77
77
 
78
- from wandb.plot import visualize
78
+ from wandb.plot import visualize, plot_table
79
79
  from wandb.integration.sagemaker import sagemaker_auth
80
80
  from wandb.sdk.internal import profiler
81
81
 
@@ -142,9 +142,6 @@ mark_preempting = _preinit.PreInitCallable(
142
142
  "wandb.mark_preempting", wandb_sdk.wandb_run.Run.mark_preempting # type: ignore
143
143
  )
144
144
 
145
- plot_table = _preinit.PreInitCallable(
146
- "wandb.plot_table", wandb_sdk.wandb_run.Run.plot_table
147
- )
148
145
  alert = _preinit.PreInitCallable("wandb.alert", wandb_sdk.wandb_run.Run.alert) # type: ignore
149
146
 
150
147
  # record of patched libraries
@@ -208,8 +205,8 @@ if "dev" in __version__:
208
205
  )
209
206
 
210
207
  # Enable new features in dev versions.
211
- os.environ["WANDB__SHOW_OPERATION_STATS"] = os.environ.get(
212
- "WANDB__SHOW_OPERATION_STATS",
208
+ os.environ["WANDB_X_SHOW_OPERATION_STATS"] = os.environ.get(
209
+ "WANDB_X_SHOW_OPERATION_STATS",
213
210
  "true",
214
211
  )
215
212
 
@@ -251,4 +248,5 @@ __all__ = (
251
248
  "define_metric",
252
249
  "watch",
253
250
  "unwatch",
251
+ "plot_table",
254
252
  )
wandb/__init__.pyi CHANGED
@@ -54,6 +54,7 @@ __all__ = (
54
54
  "watch",
55
55
  "unwatch",
56
56
  "plot",
57
+ "plot_table",
57
58
  )
58
59
 
59
60
  import os
@@ -71,7 +72,8 @@ from typing import (
71
72
 
72
73
  import wandb.plot as plot
73
74
  from wandb.analytics import Sentry
74
- from wandb.apis import InternalApi, PublicApi
75
+ from wandb.apis import InternalApi
76
+ from wandb.apis import PublicApi as Api
75
77
  from wandb.data_types import (
76
78
  Audio,
77
79
  Graph,
@@ -98,14 +100,14 @@ from wandb.wandb_controller import _WandbController
98
100
  if TYPE_CHECKING:
99
101
  import torch # type: ignore [import-not-found]
100
102
 
103
+ import wandb
101
104
  from wandb.plot import CustomChart
102
105
 
103
- __version__: str = "0.18.6"
106
+ __version__: str = "0.19.0"
104
107
 
105
108
  run: Run | None
106
109
  config: wandb_config.Config
107
110
  summary: wandb_summary.Summary
108
- Api: type[PublicApi]
109
111
 
110
112
  # private attributes
111
113
  _sentry: Sentry
@@ -113,7 +115,7 @@ api: InternalApi
113
115
  patched: Dict[str, List[Callable]]
114
116
 
115
117
  def setup(
116
- settings: Optional[Settings] = None,
118
+ settings: Settings | None = None,
117
119
  ) -> Optional[_WandbSetup]:
118
120
  """Prepares W&B for use in the current process and its children.
119
121
 
@@ -129,8 +131,8 @@ def setup(
129
131
  See also `wandb.teardown()`.
130
132
 
131
133
  Args:
132
- settings (Optional[Union[Dict[str, Any], wandb.Settings]]): Configuration settings
133
- to apply globally. These can be overridden by subsequent `wandb.init()` calls.
134
+ settings: Configuration settings to apply globally. These can be
135
+ overridden by subsequent `wandb.init()` calls.
134
136
 
135
137
  Example:
136
138
  ```python
@@ -172,7 +174,7 @@ def setup(
172
174
  """
173
175
  ...
174
176
 
175
- def teardown(exit_code: Optional[int] = None) -> None:
177
+ def teardown(exit_code: int | None = None) -> None:
176
178
  """Waits for wandb to finish and frees resources.
177
179
 
178
180
  Completes any runs that were not explicitly finished
@@ -192,11 +194,10 @@ def init(
192
194
  project: str | None = None,
193
195
  entity: str | None = None,
194
196
  reinit: bool | None = None,
195
- tags: Sequence | None = None,
197
+ tags: Sequence[str] | None = None,
196
198
  group: str | None = None,
197
199
  name: str | None = None,
198
200
  notes: str | None = None,
199
- magic: dict | str | bool | None = None,
200
201
  config_exclude_keys: list[str] | None = None,
201
202
  config_include_keys: list[str] | None = None,
202
203
  anonymous: str | None = None,
@@ -335,10 +336,6 @@ def init(
335
336
  for more.
336
337
  reinit: (bool, optional) Allow multiple `wandb.init()` calls in the same
337
338
  process. (default: `False`)
338
- magic: (bool, dict, or str, optional) The bool controls whether we try to
339
- auto-instrument your script, capturing basic details of your run
340
- without you having to add more wandb code. (default: `False`)
341
- You can also pass a dict, json string, or yaml filename.
342
339
  config_exclude_keys: (list, optional) string keys to exclude from
343
340
  `wandb.config`.
344
341
  config_include_keys: (list, optional) string keys to include in
@@ -425,15 +422,25 @@ def init(
425
422
  """
426
423
  ...
427
424
 
428
- def finish(exit_code: int | None = None, quiet: bool | None = None) -> None:
429
- """Mark a run as finished, and finish uploading all data.
425
+ def finish(
426
+ exit_code: int | None = None,
427
+ quiet: bool | None = None,
428
+ ) -> None:
429
+ """Finish a run and upload any remaining data.
430
+
431
+ Marks the completion of a W&B run and ensures all data is synced to the server.
432
+ The run's final state is determined by its exit conditions and sync status.
430
433
 
431
- This is used when creating multiple runs in the same process.
432
- We automatically call this method when your script exits.
434
+ Run States:
435
+ - Running: Active run that is logging data and/or sending heartbeats.
436
+ - Crashed: Run that stopped sending heartbeats unexpectedly.
437
+ - Finished: Run completed successfully (`exit_code=0`) with all data synced.
438
+ - Failed: Run completed with errors (`exit_code!=0`).
433
439
 
434
440
  Args:
435
- exit_code: Set to something other than 0 to mark a run as failed
436
- quiet: Set to true to minimize log output
441
+ exit_code: Integer indicating the run's exit status. Use 0 for success,
442
+ any other value marks the run as failed.
443
+ quiet: Deprecated. Configure logging verbosity using `wandb.Settings(quiet=...)`.
437
444
  """
438
445
  ...
439
446
 
@@ -1107,23 +1114,37 @@ def link_model(
1107
1114
 
1108
1115
  def plot_table(
1109
1116
  vega_spec_name: str,
1110
- data_table: Table,
1117
+ data_table: wandb.Table,
1111
1118
  fields: dict[str, Any],
1112
1119
  string_fields: dict[str, Any] | None = None,
1113
1120
  split_table: bool = False,
1114
1121
  ) -> CustomChart:
1115
- """Create a custom plot on a table.
1122
+ """Creates a custom charts using a Vega-Lite specification and a `wandb.Table`.
1123
+
1124
+ This function creates a custom chart based on a Vega-Lite specification and
1125
+ a data table represented by a `wandb.Table` object. The specification needs
1126
+ to be predefined and stored in the W&B backend. The function returns a custom
1127
+ chart object that can be logged to W&B using `wandb.log()`.
1116
1128
 
1117
1129
  Args:
1118
- vega_spec_name: the name of the spec for the plot
1119
- data_table: a wandb.Table object containing the data to
1120
- be used on the visualization
1121
- fields: a dict mapping from table keys to fields that the custom
1122
- visualization needs
1123
- string_fields: a dict that provides values for any string constants
1124
- the custom visualization needs
1125
- split_table: a boolean that indicates whether the table should be in
1126
- a separate section in the UI
1130
+ vega_spec_name (str): The name or identifier of the Vega-Lite spec
1131
+ that defines the visualization structure.
1132
+ data_table (wandb.Table): A `wandb.Table` object containing the data to be
1133
+ visualized.
1134
+ fields (dict[str, Any]): A mapping between the fields in the Vega-Lite spec and the
1135
+ corresponding columns in the data table to be visualized.
1136
+ string_fields (dict[str, Any] | None): A dictionary for providing values for any string constants
1137
+ required by the custom visualization.
1138
+ split_table (bool): Whether the table should be split into a separate section
1139
+ in the W&B UI. If `True`, the table will be displayed in a section named
1140
+ "Custom Chart Tables". Default is `False`.
1141
+
1142
+ Returns:
1143
+ CustomChart: A custom chart object that can be logged to W&B. To log the
1144
+ chart, pass it to `wandb.log()`.
1145
+
1146
+ Raises:
1147
+ wandb.Error: If `data_table` is not a `wandb.Table` object.
1127
1148
  """
1128
1149
  ...
1129
1150
 
wandb/analytics/sentry.py CHANGED
@@ -9,14 +9,9 @@ import os
9
9
  import pathlib
10
10
  import sys
11
11
  from types import TracebackType
12
- from typing import TYPE_CHECKING, Any, Callable
12
+ from typing import TYPE_CHECKING, Any, Callable, Literal
13
13
  from urllib.parse import quote
14
14
 
15
- if sys.version_info >= (3, 8):
16
- from typing import Literal
17
- else:
18
- from typing_extensions import Literal
19
-
20
15
  import sentry_sdk # type: ignore
21
16
  import sentry_sdk.scope # type: ignore
22
17
  import sentry_sdk.utils # type: ignore
@@ -214,13 +209,12 @@ class Sentry:
214
209
  "sweep_url",
215
210
  "sweep_id",
216
211
  "deployment",
217
- "_disable_service",
218
- "_require_legacy_service",
212
+ "x_disable_service",
213
+ "x_require_legacy_service",
219
214
  "launch",
215
+ "_platform",
220
216
  )
221
217
 
222
- self.scope.set_tag("platform", wandb.util.get_platform_name())
223
-
224
218
  # set context
225
219
  if process_context:
226
220
  self.scope.set_tag("process_context", process_context)
@@ -311,19 +311,19 @@ def _make_settings(
311
311
  _settings_override = coalesce(settings_override, {})
312
312
 
313
313
  default_settings: Dict[str, Any] = {
314
- "files_dir": os.path.join(root_dir, "files"),
314
+ "x_files_dir": os.path.join(root_dir, "files"),
315
315
  "root_dir": root_dir,
316
316
  "sync_file": os.path.join(root_dir, "txlog.wandb"),
317
317
  "resume": "false",
318
318
  "program": None,
319
319
  "ignore_globs": [],
320
320
  "disable_job_creation": True,
321
- "_start_time": 0,
321
+ "x_start_time": 0,
322
322
  "_offline": None,
323
- "_sync": True,
324
- "_live_policy_rate_limit": 15, # matches dir_watcher
325
- "_live_policy_wait_time": 600, # matches dir_watcher
326
- "_file_stream_timeout_seconds": 60,
323
+ "x_sync": True,
324
+ "x_live_policy_rate_limit": 15, # matches dir_watcher
325
+ "x_live_policy_wait_time": 600, # matches dir_watcher
326
+ "x_file_stream_timeout_seconds": 60,
327
327
  }
328
328
 
329
329
  combined_settings = {**default_settings, **_settings_override}
@@ -1,14 +1,18 @@
1
1
  import logging
2
- import sys
3
- from typing import Any, Dict, Iterable, List, Literal, Optional, Tuple
2
+ from typing import (
3
+ Any,
4
+ Dict,
5
+ Iterable,
6
+ List,
7
+ Literal,
8
+ Optional,
9
+ Protocol,
10
+ Tuple,
11
+ runtime_checkable,
12
+ )
4
13
 
5
14
  from wandb.sdk.artifacts.artifact import Artifact
6
15
 
7
- if sys.version_info >= (3, 8):
8
- from typing import Protocol, runtime_checkable
9
- else:
10
- from typing_extensions import Protocol, runtime_checkable
11
-
12
16
  logger = logging.getLogger("import_logger")
13
17
 
14
18
  PathStr = str
wandb/apis/public/api.py CHANGED
@@ -1208,7 +1208,11 @@ class Api:
1208
1208
  entity=settings_entity, organization=organization
1209
1209
  )
1210
1210
  artifact = wandb.Artifact._from_name(
1211
- entity, project, artifact_name, self.client, enable_tracking
1211
+ entity=entity,
1212
+ project=project,
1213
+ name=artifact_name,
1214
+ client=self.client,
1215
+ enable_tracking=enable_tracking,
1212
1216
  )
1213
1217
  if type is not None and artifact.type != type:
1214
1218
  raise ValueError(
wandb/apis/public/jobs.py CHANGED
@@ -3,14 +3,8 @@
3
3
  import json
4
4
  import os
5
5
  import shutil
6
- import sys
7
6
  import time
8
- from typing import TYPE_CHECKING, Any, Dict, List, Mapping, Optional
9
-
10
- if sys.version_info >= (3, 8):
11
- from typing import Literal
12
- else:
13
- from typing_extensions import Literal
7
+ from typing import TYPE_CHECKING, Any, Dict, List, Literal, Mapping, Optional
14
8
 
15
9
  from wandb_gql import gql
16
10
 
@@ -2,7 +2,6 @@
2
2
 
3
3
  import ast
4
4
  import json
5
- import sys
6
5
  import urllib
7
6
 
8
7
  from wandb_gql import gql
@@ -228,22 +227,12 @@ class PythonMongoishQueryGenerator:
228
227
  ast.Not: "$not",
229
228
  }
230
229
 
231
- if sys.version_info >= (3, 8):
232
- AST_FIELDS = {
233
- ast.Constant: "value",
234
- ast.Name: "id",
235
- ast.List: "elts",
236
- ast.Tuple: "elts",
237
- }
238
- else:
239
- AST_FIELDS = {
240
- ast.Str: "s",
241
- ast.Num: "n",
242
- ast.Name: "id",
243
- ast.List: "elts",
244
- ast.Tuple: "elts",
245
- ast.NameConstant: "value",
246
- }
230
+ AST_FIELDS = {
231
+ ast.Constant: "value",
232
+ ast.Name: "id",
233
+ ast.List: "elts",
234
+ ast.Tuple: "elts",
235
+ }
247
236
 
248
237
  def __init__(self, run_set):
249
238
  self.run_set = run_set
wandb/apis/public/runs.py CHANGED
@@ -2,16 +2,19 @@
2
2
 
3
3
  import json
4
4
  import os
5
- import sys
6
5
  import tempfile
7
6
  import time
8
7
  import urllib
9
- from typing import TYPE_CHECKING, Any, Collection, Dict, List, Mapping, Optional
10
-
11
- if sys.version_info >= (3, 8):
12
- from typing import Literal
13
- else:
14
- from typing_extensions import Literal
8
+ from typing import (
9
+ TYPE_CHECKING,
10
+ Any,
11
+ Collection,
12
+ Dict,
13
+ List,
14
+ Literal,
15
+ Mapping,
16
+ Optional,
17
+ )
15
18
 
16
19
  from wandb_gql import gql
17
20
 
@@ -233,7 +236,6 @@ class Runs(Paginator):
233
236
  if not histories:
234
237
  return pd.DataFrame()
235
238
  combined_df = pd.concat(histories)
236
- combined_df.sort_values("run_id", inplace=True)
237
239
  combined_df.reset_index(drop=True, inplace=True)
238
240
  # sort columns for consistency
239
241
  combined_df = combined_df[(sorted(combined_df.columns))]
@@ -259,9 +261,9 @@ class Runs(Paginator):
259
261
  histories.append(df)
260
262
  if not histories:
261
263
  return pl.DataFrame()
262
- combined_df = pl.concat(histories, how="align")
264
+ combined_df = pl.concat(histories, how="vertical")
263
265
  # sort columns for consistency
264
- combined_df = combined_df.select(sorted(combined_df.columns)).sort("run_id")
266
+ combined_df = combined_df.select(sorted(combined_df.columns))
265
267
 
266
268
  return combined_df
267
269
 
wandb/bin/gpu_stats CHANGED
Binary file
wandb/cli/cli.py CHANGED
@@ -31,7 +31,6 @@ from wandb import Config, Error, env, util, wandb_agent, wandb_sdk
31
31
  from wandb.apis import InternalApi, PublicApi
32
32
  from wandb.apis.public import RunQueue
33
33
  from wandb.errors.links import url_registry
34
- from wandb.integration.magic import magic_install
35
34
  from wandb.sdk.artifacts._validators import is_artifact_registry_project
36
35
  from wandb.sdk.artifacts.artifact_file_cache import get_artifact_file_cache
37
36
  from wandb.sdk.launch import utils as launch_utils
@@ -129,7 +128,7 @@ def _get_cling_api(reset=None):
129
128
  if _api is None:
130
129
  # TODO(jhr): make a settings object that is better for non runs.
131
130
  # only override the necessary setting
132
- wandb.setup(settings=dict(_cli_only_mode=True))
131
+ wandb.setup(settings=wandb.Settings(x_cli_only_mode=True))
133
132
  _api = InternalApi()
134
133
  return _api
135
134
 
@@ -238,15 +237,18 @@ def login(key, host, cloud, relogin, anonymously, verify, no_offline=False):
238
237
  relogin = True
239
238
 
240
239
  login_settings = dict(
241
- _cli_only_mode=True,
242
- _disable_viewer=relogin and not verify,
240
+ x_cli_only_mode=True,
241
+ x_disable_viewer=relogin and not verify,
243
242
  anonymous=anon_mode,
243
+ base_url=host,
244
244
  )
245
- if host is not None:
246
- login_settings["base_url"] = host
247
245
 
248
246
  try:
249
- wandb.setup(settings=login_settings)
247
+ wandb.setup(
248
+ settings=wandb.Settings(
249
+ **{k: v for k, v in login_settings.items() if v is not None}
250
+ )
251
+ )
250
252
  except TypeError as e:
251
253
  wandb.termerror(str(e))
252
254
  sys.exit(1)
@@ -2656,44 +2658,6 @@ Run `git clone {}` and restore from there or pass the --no-git flag.""".format(r
2656
2658
  return commit, json_config, patch_content, repo, metadata
2657
2659
 
2658
2660
 
2659
- @cli.command(context_settings=CONTEXT, help="Run any script with wandb", hidden=True)
2660
- @click.pass_context
2661
- @click.argument("program")
2662
- @click.argument("args", nargs=-1)
2663
- @display_error
2664
- def magic(ctx, program, args):
2665
- def magic_run(cmd, globals, locals):
2666
- try:
2667
- exec(cmd, globals, locals)
2668
- finally:
2669
- pass
2670
-
2671
- sys.argv[:] = args
2672
- sys.argv.insert(0, program)
2673
- sys.path.insert(0, os.path.dirname(program))
2674
- try:
2675
- with open(program, "rb") as fp:
2676
- code = compile(fp.read(), program, "exec")
2677
- except OSError:
2678
- click.echo(
2679
- click.style("Could not launch program: {}".format(program), fg="red")
2680
- )
2681
- sys.exit(1)
2682
- globs = {
2683
- "__file__": program,
2684
- "__name__": "__main__",
2685
- "__package__": None,
2686
- "wandb_magic_install": magic_install,
2687
- }
2688
- prep = """
2689
- import __main__
2690
- __main__.__file__ = "{}"
2691
- wandb_magic_install()
2692
- """.format(program)
2693
- magic_run(prep, globs, None)
2694
- magic_run(code, globs, None)
2695
-
2696
-
2697
2661
  @cli.command("online", help="Enable W&B sync")
2698
2662
  @display_error
2699
2663
  def online():
wandb/env.py CHANGED
@@ -82,11 +82,11 @@ SENTRY_DSN = "WANDB_SENTRY_DSN"
82
82
  INIT_TIMEOUT = "WANDB_INIT_TIMEOUT"
83
83
  GIT_COMMIT = "WANDB_GIT_COMMIT"
84
84
  GIT_REMOTE_URL = "WANDB_GIT_REMOTE_URL"
85
- _EXECUTABLE = "WANDB_EXECUTABLE"
85
+ _EXECUTABLE = "WANDB_X_EXECUTABLE"
86
86
  LAUNCH_QUEUE_NAME = "WANDB_LAUNCH_QUEUE_NAME"
87
87
  LAUNCH_QUEUE_ENTITY = "WANDB_LAUNCH_QUEUE_ENTITY"
88
88
  LAUNCH_TRACE_ID = "WANDB_LAUNCH_TRACE_ID"
89
- _REQUIRE_LEGACY_SERVICE = "WANDB__REQUIRE_LEGACY_SERVICE"
89
+ _REQUIRE_LEGACY_SERVICE = "WANDB_X_REQUIRE_LEGACY_SERVICE"
90
90
 
91
91
  # For testing, to be removed in future version
92
92
  USE_V1_ARTIFACTS = "_WANDB_USE_V1_ARTIFACTS"
@@ -290,9 +290,7 @@ def get_base_url(
290
290
  if env is None:
291
291
  env = os.environ
292
292
 
293
- base_url = env.get(BASE_URL, default)
294
-
295
- return base_url.rstrip("/") if base_url is not None else base_url
293
+ return env.get(BASE_URL, default)
296
294
 
297
295
 
298
296
  def get_app_url(
wandb/errors/links.py CHANGED
@@ -19,7 +19,7 @@ class WBURL:
19
19
  class Registry:
20
20
  """A collection of URLs that can be associated with a name."""
21
21
 
22
- def __init__(self):
22
+ def __init__(self) -> None:
23
23
  self.urls: dict[str, WBURL] = {
24
24
  "wandb-launch": WBURL(
25
25
  "https://wandb.me/launch",
wandb/errors/term.py CHANGED
@@ -7,12 +7,7 @@ import logging
7
7
  import os
8
8
  import sys
9
9
  import threading
10
- from typing import TYPE_CHECKING, Iterator
11
-
12
- if sys.version_info < (3, 8):
13
- from typing_extensions import Protocol
14
- else:
15
- from typing import Protocol
10
+ from typing import TYPE_CHECKING, Iterator, Protocol
16
11
 
17
12
  import click
18
13
 
@@ -122,9 +122,9 @@ class PolicyLive(FileEventHandler):
122
122
  self._last_uploaded_time: Optional[float] = None
123
123
  self._last_uploaded_size: int = 0
124
124
  if settings is not None:
125
- if settings._live_policy_rate_limit is not None:
126
- self.RATE_LIMIT_SECONDS = settings._live_policy_rate_limit
127
- self._min_wait_time: Optional[float] = settings._live_policy_wait_time
125
+ if settings.x_live_policy_rate_limit is not None:
126
+ self.RATE_LIMIT_SECONDS = settings.x_live_policy_rate_limit
127
+ self._min_wait_time: Optional[float] = settings.x_live_policy_wait_time
128
128
  else:
129
129
  self._min_wait_time = None
130
130
 
@@ -21,15 +21,12 @@ from wandb.filesync import upload_job
21
21
  from wandb.sdk.lib.paths import LogicalPath
22
22
 
23
23
  if TYPE_CHECKING:
24
+ from typing import TypedDict
25
+
24
26
  from wandb.filesync import stats
25
27
  from wandb.sdk.internal import file_stream, internal_api, progress
26
28
  from wandb.sdk.internal.settings_static import SettingsStatic
27
29
 
28
- if sys.version_info >= (3, 8):
29
- from typing import TypedDict
30
- else:
31
- from typing_extensions import TypedDict
32
-
33
30
  class ArtifactStatus(TypedDict):
34
31
  finalize: bool
35
32
  pending_count: int
@@ -39,12 +39,7 @@ Examples:
39
39
  import random
40
40
  import sys
41
41
  from pathlib import Path
42
- from typing import Any, Optional
43
-
44
- if sys.version_info >= (3, 8):
45
- from typing import Literal
46
- else:
47
- from typing_extensions import Literal
42
+ from typing import Any, Literal, Optional
48
43
 
49
44
  import fastai
50
45
  from fastai.callbacks import TrackerCallback
@@ -1,16 +1,10 @@
1
1
  import re
2
2
  import sys
3
- from typing import Optional
3
+ from typing import Literal, Optional
4
4
 
5
5
  import wandb
6
6
  import wandb.util
7
7
 
8
- if sys.version_info >= (3, 8):
9
- from typing import Literal
10
- else:
11
- from typing_extensions import Literal
12
-
13
-
14
8
  _gym_version_lt_0_26: Optional[bool] = None
15
9
  _gymnasium_version_lt_1_0_0: Optional[bool] = None
16
10
 
@@ -1,5 +1,4 @@
1
- import sys
2
- from typing import Any, Dict, Optional, Union
1
+ from typing import Any, Dict, Literal, Optional, Union
3
2
 
4
3
  import tensorflow as tf # type: ignore
5
4
  from tensorflow.keras import callbacks
@@ -8,12 +7,6 @@ import wandb
8
7
  from wandb.integration.keras.keras import patch_tf_keras
9
8
  from wandb.sdk.lib import telemetry
10
9
 
11
- if sys.version_info >= (3, 8):
12
- from typing import Literal
13
- else:
14
- from typing_extensions import Literal
15
-
16
-
17
10
  LogStrategy = Literal["epoch", "batch"]
18
11
 
19
12