wandb 0.19.3__py3-none-any.whl → 0.19.4rc1__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.
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.19.3"
13
+ __version__ = "0.19.4rc1"
14
14
 
15
15
 
16
16
  from wandb.errors import Error
wandb/__init__.pyi CHANGED
@@ -103,7 +103,7 @@ if TYPE_CHECKING:
103
103
  import wandb
104
104
  from wandb.plot import CustomChart
105
105
 
106
- __version__: str = "0.19.3"
106
+ __version__: str = "0.19.4rc1"
107
107
 
108
108
  run: Run | None
109
109
  config: wandb_config.Config
wandb/bin/gpu_stats CHANGED
Binary file
@@ -10,7 +10,6 @@ InterfaceRelay: Responses are routed to a relay queue (not matching uuids)
10
10
 
11
11
  import gzip
12
12
  import logging
13
- import os
14
13
  import time
15
14
  from abc import abstractmethod
16
15
  from pathlib import Path
@@ -100,8 +99,6 @@ class InterfaceBase:
100
99
 
101
100
  def _hack_set_run(self, run: "Run") -> None:
102
101
  self._run = run
103
- current_pid = os.getpid()
104
- self._run._set_iface_pid(current_pid)
105
102
 
106
103
  def publish_header(self) -> None:
107
104
  header = pb.HeaderRecord()
@@ -653,15 +650,13 @@ class InterfaceBase:
653
650
 
654
651
  def publish_partial_history(
655
652
  self,
653
+ run: "Run",
656
654
  data: dict,
657
655
  user_step: int,
658
656
  step: Optional[int] = None,
659
657
  flush: Optional[bool] = None,
660
658
  publish_step: bool = True,
661
- run: Optional["Run"] = None,
662
659
  ) -> None:
663
- run = run or self._run
664
-
665
660
  data = history_dict_to_json(run, data, step=user_step, ignore_copy_err=True)
666
661
  data.pop("_step", None)
667
662
 
@@ -688,12 +683,11 @@ class InterfaceBase:
688
683
 
689
684
  def publish_history(
690
685
  self,
686
+ run: "Run",
691
687
  data: dict,
692
688
  step: Optional[int] = None,
693
- run: Optional["Run"] = None,
694
689
  publish_step: bool = True,
695
690
  ) -> None:
696
- run = run or self._run
697
691
  data = history_dict_to_json(run, data, step=step)
698
692
  history = pb.HistoryRecord()
699
693
  if publish_step:
@@ -454,7 +454,9 @@ class TBEventConsumer:
454
454
  row[chart.spec.table_key] = chart.table
455
455
 
456
456
  self._tbwatcher._interface.publish_history(
457
- row, run=self._internal_run, publish_step=False
457
+ self._internal_run,
458
+ row,
459
+ publish_step=False,
458
460
  )
459
461
 
460
462
 
wandb/sdk/wandb_init.py CHANGED
@@ -11,6 +11,7 @@ For more on using `wandb.init()`, including code snippets, check out our
11
11
  from __future__ import annotations
12
12
 
13
13
  import copy
14
+ import dataclasses
14
15
  import json
15
16
  import logging
16
17
  import os
@@ -105,16 +106,40 @@ def _handle_launch_config(settings: Settings) -> dict[str, Any]:
105
106
  return launch_run_config
106
107
 
107
108
 
108
- class _WandbInit:
109
- _init_telemetry_obj: telemetry.TelemetryRecord
109
+ @dataclasses.dataclass(frozen=True)
110
+ class _ConfigParts:
111
+ base_no_artifacts: dict[str, Any]
112
+ """The run config passed to `init()` minus any artifact-valued keys."""
113
+
114
+ sweep_no_artifacts: dict[str, Any]
115
+ """The config loaded as part of a sweep minus any artifact-valued keys."""
116
+
117
+ launch_no_artifacts: dict[str, Any]
118
+ """The config loaded as part of Launch minus any artifact-valued keys."""
119
+
120
+ artifacts: dict[str, Any]
121
+ """Artifact keys removed from config dictionaries.
122
+
123
+ Due to implementation details of how a Run is constructed,
124
+ artifacts must be inserted into its config after initialization.
125
+ """
126
+
110
127
 
111
- def __init__(self, wl: wandb_setup._WandbSetup) -> None:
128
+ class _WandbInit:
129
+ def __init__(
130
+ self,
131
+ wl: wandb_setup._WandbSetup,
132
+ telemetry: telemetry.TelemetryRecord,
133
+ ) -> None:
112
134
  self._wl = wl
113
135
 
136
+ self._telemetry = telemetry
137
+ """Telemetry gathered before creating a run.
138
+
139
+ After the run is created, `telemetry.context()` is used instead.
140
+ """
141
+
114
142
  self.kwargs = None
115
- self.sweep_config: dict[str, Any] = {}
116
- self.launch_config: dict[str, Any] = {}
117
- self.config: dict[str, Any] = {}
118
143
  self.run: Run | None = None
119
144
  self.backend: Backend | None = None
120
145
 
@@ -122,8 +147,6 @@ class _WandbInit:
122
147
  self.notebook: wandb.jupyter.Notebook | None = None # type: ignore
123
148
  self.printer = printer.new_printer()
124
149
 
125
- self._init_telemetry_obj = telemetry.TelemetryRecord()
126
-
127
150
  self.deprecated_features_used: dict[str, str] = dict()
128
151
 
129
152
  @property
@@ -229,7 +252,7 @@ class _WandbInit:
229
252
  warn("run_id", init_settings.run_id)
230
253
  init_settings.run_id = None
231
254
 
232
- def compute_run_settings(self, init_settings: Settings) -> Settings:
255
+ def make_run_settings(self, init_settings: Settings) -> Settings:
233
256
  """Returns the run's settings.
234
257
 
235
258
  Args:
@@ -250,8 +273,7 @@ class _WandbInit:
250
273
  if not settings.sagemaker_disable and sagemaker.is_using_sagemaker():
251
274
  if sagemaker.set_run_id(settings):
252
275
  self._logger.info("set run ID and group based on SageMaker")
253
- with telemetry.context(obj=self._init_telemetry_obj) as tel:
254
- tel.feature.sagemaker = True
276
+ self._telemetry.feature.sagemaker = True
255
277
 
256
278
  # get status of code saving before applying user settings
257
279
  save_code_pre_user_settings = settings.save_code
@@ -355,25 +377,24 @@ class _WandbInit:
355
377
  run_id=settings.run_id,
356
378
  )
357
379
 
358
- def setup(
380
+ def make_run_config(
359
381
  self,
360
382
  settings: Settings,
361
383
  config: dict | str | None = None,
362
384
  config_exclude_keys: list[str] | None = None,
363
385
  config_include_keys: list[str] | None = None,
364
- monitor_gym: bool | None = None,
365
- ) -> None:
366
- """Compute the run's config and some telemetry."""
367
- with telemetry.context(obj=self._init_telemetry_obj) as tel:
368
- if config is not None:
369
- tel.feature.set_init_config = True
370
- if settings.run_name is not None:
371
- tel.feature.set_init_name = True
372
- if settings.run_id is not None:
373
- tel.feature.set_init_id = True
374
- if settings.run_tags is not None:
375
- tel.feature.set_init_tags = True
386
+ ) -> _ConfigParts:
387
+ """Construct the run's config.
388
+
389
+ Args:
390
+ settings: The run's finalized settings.
391
+ config: The config passed to `init()`.
392
+ config_exclude_keys: Deprecated. Keys to filter out from `config`.
393
+ config_include_keys: Deprecated. Keys to include from `config`.
376
394
 
395
+ Returns:
396
+ Initial values for the run's config.
397
+ """
377
398
  # TODO: remove this once officially deprecated
378
399
  if config_exclude_keys:
379
400
  self.deprecated_features_used["config_exclude_keys"] = (
@@ -389,49 +410,51 @@ class _WandbInit:
389
410
  exclude=config_exclude_keys,
390
411
  )
391
412
 
392
- # Construct the run's config.
393
- self.config = dict()
394
- self.init_artifact_config: dict[str, Any] = dict()
413
+ result = _ConfigParts(
414
+ base_no_artifacts=dict(),
415
+ sweep_no_artifacts=dict(),
416
+ launch_no_artifacts=dict(),
417
+ artifacts=dict(),
418
+ )
395
419
 
396
420
  if not settings.sagemaker_disable and sagemaker.is_using_sagemaker():
397
421
  sagemaker_config = sagemaker.parse_sm_config()
398
- self._split_artifacts_from_config(sagemaker_config, self.config)
399
-
400
- with telemetry.context(obj=self._init_telemetry_obj) as tel:
401
- tel.feature.sagemaker = True
422
+ self._split_artifacts_from_config(
423
+ sagemaker_config,
424
+ config_target=result.base_no_artifacts,
425
+ artifacts=result.artifacts,
426
+ )
427
+ self._telemetry.feature.sagemaker = True
402
428
 
403
429
  if self._wl._config:
404
- self._split_artifacts_from_config(self._wl._config, self.config)
430
+ self._split_artifacts_from_config(
431
+ self._wl._config,
432
+ config_target=result.base_no_artifacts,
433
+ artifacts=result.artifacts,
434
+ )
405
435
 
406
436
  if config and isinstance(config, dict):
407
- self._split_artifacts_from_config(config, self.config)
408
-
409
- self.sweep_config = dict()
410
- sweep_config = self._wl._sweep_config or dict()
411
- if sweep_config:
412
- self._split_artifacts_from_config(sweep_config, self.sweep_config)
413
-
414
- if monitor_gym and len(wandb.patched["gym"]) == 0:
415
- wandb.gym.monitor() # type: ignore
416
-
417
- if wandb.patched["tensorboard"]:
418
- with telemetry.context(obj=self._init_telemetry_obj) as tel:
419
- tel.feature.tensorboard_patch = True
437
+ self._split_artifacts_from_config(
438
+ config,
439
+ config_target=result.base_no_artifacts,
440
+ artifacts=result.artifacts,
441
+ )
420
442
 
421
- if settings.sync_tensorboard:
422
- if len(wandb.patched["tensorboard"]) == 0:
423
- wandb.tensorboard.patch() # type: ignore
424
- with telemetry.context(obj=self._init_telemetry_obj) as tel:
425
- tel.feature.tensorboard_sync = True
443
+ if self._wl._sweep_config:
444
+ self._split_artifacts_from_config(
445
+ self._wl._sweep_config,
446
+ config_target=result.sweep_no_artifacts,
447
+ artifacts=result.artifacts,
448
+ )
426
449
 
427
- if not settings._noop:
428
- self._log_setup(settings)
450
+ if launch_config := _handle_launch_config(settings):
451
+ self._split_artifacts_from_config(
452
+ launch_config,
453
+ config_target=result.launch_no_artifacts,
454
+ artifacts=result.artifacts,
455
+ )
429
456
 
430
- if settings._jupyter:
431
- self._jupyter_setup(settings)
432
- launch_config = _handle_launch_config(settings)
433
- if launch_config:
434
- self._split_artifacts_from_config(launch_config, self.launch_config)
457
+ return result
435
458
 
436
459
  def teardown(self) -> None:
437
460
  # TODO: currently this is only called on failed wandb.init attempts
@@ -441,11 +464,14 @@ class _WandbInit:
441
464
  hook.call()
442
465
 
443
466
  def _split_artifacts_from_config(
444
- self, config_source: dict, config_target: dict
467
+ self,
468
+ config_source: dict,
469
+ config_target: dict,
470
+ artifacts: dict,
445
471
  ) -> None:
446
472
  for k, v in config_source.items():
447
473
  if _is_artifact_representation(v):
448
- self.init_artifact_config[k] = v
474
+ artifacts[k] = v
449
475
  else:
450
476
  config_target.setdefault(k, v)
451
477
 
@@ -540,7 +566,7 @@ class _WandbInit:
540
566
  ipython.display_pub.publish = ipython.display_pub._orig_publish
541
567
  del ipython.display_pub._orig_publish
542
568
 
543
- def _jupyter_setup(self, settings: Settings) -> None:
569
+ def monkeypatch_ipython(self, settings: Settings) -> None:
544
570
  """Add hooks, and session history saving."""
545
571
  self.notebook = wandb.jupyter.Notebook(settings) # type: ignore
546
572
  ipython = self.notebook.shell
@@ -566,7 +592,7 @@ class _WandbInit:
566
592
 
567
593
  ipython.display_pub.publish = publish
568
594
 
569
- def _log_setup(self, settings: Settings) -> None:
595
+ def setup_run_log_directory(self, settings: Settings) -> None:
570
596
  """Set up logging from settings."""
571
597
  filesystem.mkdir_exists_ok(os.path.dirname(settings.log_user))
572
598
  filesystem.mkdir_exists_ok(os.path.dirname(settings.log_internal))
@@ -598,15 +624,18 @@ class _WandbInit:
598
624
  self._logger.info(f"Logging user logs to {settings.log_user}")
599
625
  self._logger.info(f"Logging internal logs to {settings.log_internal}")
600
626
 
601
- def _make_run_disabled(self) -> Run:
627
+ def make_disabled_run(self, config: _ConfigParts) -> Run:
602
628
  """Returns a Run-like object where all methods are no-ops.
603
629
 
604
- This method is used when wandb.init(mode="disabled") is called or WANDB_MODE=disabled
605
- is set. It creates a Run object that mimics the behavior of a normal Run but doesn't
630
+ This method is used when the `mode` setting is set to "disabled", such as
631
+ by wandb.init(mode="disabled") or by setting the WANDB_MODE environment
632
+ variable to "disabled".
633
+
634
+ It creates a Run object that mimics the behavior of a normal Run but doesn't
606
635
  communicate with the W&B servers.
607
636
 
608
- The returned Run object has all expected attributes and methods, but they are
609
- no-op versions that don't perform any actual logging or communication.
637
+ The returned Run object has all expected attributes and methods, but they
638
+ are no-op versions that don't perform any actual logging or communication.
610
639
  """
611
640
  run_id = runid.generate_id()
612
641
  drun = Run(
@@ -624,8 +653,8 @@ class _WandbInit:
624
653
  )
625
654
  # config, summary, and metadata objects
626
655
  drun._config = wandb.sdk.wandb_config.Config()
627
- drun._config.update(self.sweep_config)
628
- drun._config.update(self.config)
656
+ drun._config.update(config.sweep_no_artifacts)
657
+ drun._config.update(config.base_no_artifacts)
629
658
  drun.summary = SummaryDisabled() # type: ignore
630
659
  drun._Run__metadata = wandb.sdk.wandb_metadata.Metadata()
631
660
 
@@ -710,18 +739,17 @@ class _WandbInit:
710
739
  percent_done = handle.percent_done
711
740
  self.printer.progress_update(line, percent_done=percent_done)
712
741
 
713
- def init(self, settings: Settings) -> Run: # noqa: C901
742
+ def init(self, settings: Settings, config: _ConfigParts) -> Run: # noqa: C901
714
743
  self._logger.info("calling init triggers")
715
744
  trigger.call("on_init")
716
745
 
717
746
  assert self._wl is not None
718
747
 
719
748
  self._logger.info(
720
- f"wandb.init called with sweep_config: {self.sweep_config}\nconfig: {self.config}"
749
+ f"wandb.init called with sweep_config: {config.sweep_no_artifacts}"
750
+ f"\nconfig: {config.base_no_artifacts}"
721
751
  )
722
752
 
723
- if settings._noop:
724
- return self._make_run_disabled()
725
753
  if (
726
754
  settings.reinit or (settings._jupyter and settings.reinit is not False)
727
755
  ) and len(self._wl._global_run_stack) > 0:
@@ -738,8 +766,11 @@ class _WandbInit:
738
766
  latest_run.finish()
739
767
  elif wandb.run is not None and os.getpid() == wandb.run._init_pid:
740
768
  self._logger.info("wandb.init() called when a run is still active")
769
+
770
+ # NOTE: Updates telemetry on the pre-existing run.
741
771
  with telemetry.context() as tel:
742
772
  tel.feature.init_return_run = True
773
+
743
774
  return wandb.run
744
775
 
745
776
  self._logger.info("starting backend")
@@ -765,14 +796,14 @@ class _WandbInit:
765
796
 
766
797
  # resuming needs access to the server, check server_status()?
767
798
  run = Run(
768
- config=self.config,
799
+ config=config.base_no_artifacts,
769
800
  settings=settings,
770
- sweep_config=self.sweep_config,
771
- launch_config=self.launch_config,
801
+ sweep_config=config.sweep_no_artifacts,
802
+ launch_config=config.launch_no_artifacts,
772
803
  )
773
804
 
774
805
  # Populate initial telemetry
775
- with telemetry.context(run=run, obj=self._init_telemetry_obj) as tel:
806
+ with telemetry.context(run=run, obj=self._telemetry) as tel:
776
807
  tel.cli_version = wandb.__version__
777
808
  tel.python_version = platform.python_version()
778
809
  tel.platform = f"{platform.system()}-{platform.machine()}".lower()
@@ -873,15 +904,11 @@ class _WandbInit:
873
904
 
874
905
  run_result: pb.RunUpdateResult | None = None
875
906
 
876
- if settings._offline:
877
- with telemetry.context(run=run) as tel:
878
- tel.feature.offline = True
879
-
880
- if settings.resume:
881
- wandb.termwarn(
882
- "`resume` will be ignored since W&B syncing is set to `offline`. "
883
- f"Starting a new run with run id {run.id}."
884
- )
907
+ if settings._offline and settings.resume:
908
+ wandb.termwarn(
909
+ "`resume` will be ignored since W&B syncing is set to `offline`. "
910
+ f"Starting a new run with run id {run.id}."
911
+ )
885
912
  error: wandb.Error | None = None
886
913
 
887
914
  timeout = settings.init_timeout
@@ -970,7 +997,7 @@ class _WandbInit:
970
997
  # put artifacts in run config here
971
998
  # since doing so earlier will cause an error
972
999
  # as the run is not upserted
973
- for k, v in self.init_artifact_config.items():
1000
+ for k, v in config.artifacts.items():
974
1001
  run.config.update({k: v}, allow_val_change=True)
975
1002
  job_artifact = run._launch_artifact_mapping.get(
976
1003
  wandb.util.LAUNCH_JOB_ARTIFACT_SLOT_NAME
@@ -1062,6 +1089,26 @@ def _attach(
1062
1089
  return run
1063
1090
 
1064
1091
 
1092
+ def _monkeypatch_openai_gym() -> None:
1093
+ """Patch OpenAI gym to log to the global `wandb.run`."""
1094
+ if len(wandb.patched["gym"]) > 0:
1095
+ return
1096
+
1097
+ from wandb.integration import gym
1098
+
1099
+ gym.monitor()
1100
+
1101
+
1102
+ def _monkeypatch_tensorboard() -> None:
1103
+ """Patch TensorBoard to log to the global `wandb.run`."""
1104
+ if len(wandb.patched["tensorboard"]) > 0:
1105
+ return
1106
+
1107
+ from wandb.integration import tensorboard as tb_module
1108
+
1109
+ tb_module.patch()
1110
+
1111
+
1065
1112
  def init( # noqa: C901
1066
1113
  entity: str | None = None,
1067
1114
  project: str | None = None,
@@ -1299,6 +1346,8 @@ def init( # noqa: C901
1299
1346
  """
1300
1347
  wandb._assert_is_user_process() # type: ignore
1301
1348
 
1349
+ init_telemetry = telemetry.TelemetryRecord()
1350
+
1302
1351
  init_settings = Settings()
1303
1352
  if isinstance(settings, dict):
1304
1353
  init_settings = Settings(**settings)
@@ -1346,26 +1395,55 @@ def init( # noqa: C901
1346
1395
  if resume_from is not None:
1347
1396
  init_settings.resume_from = resume_from # type: ignore
1348
1397
 
1398
+ if config is not None:
1399
+ init_telemetry.feature.set_init_config = True
1400
+
1349
1401
  wl: wandb_setup._WandbSetup | None = None
1350
1402
 
1351
1403
  try:
1352
1404
  wl = wandb.setup()
1353
1405
 
1354
- wi = _WandbInit(wl)
1406
+ wi = _WandbInit(wl, init_telemetry)
1355
1407
 
1356
1408
  wi.maybe_login(init_settings)
1357
- run_settings = wi.compute_run_settings(init_settings)
1409
+ run_settings = wi.make_run_settings(init_settings)
1410
+
1411
+ if run_settings.run_id is not None:
1412
+ init_telemetry.feature.set_init_id = True
1413
+ if run_settings.run_name is not None:
1414
+ init_telemetry.feature.set_init_name = True
1415
+ if run_settings.run_tags is not None:
1416
+ init_telemetry.feature.set_init_tags = True
1417
+ if run_settings._offline:
1418
+ init_telemetry.feature.offline = True
1419
+
1358
1420
  wi.set_run_id(run_settings)
1359
1421
 
1360
- wi.setup(
1422
+ run_config = wi.make_run_config(
1361
1423
  settings=run_settings,
1362
1424
  config=config,
1363
1425
  config_exclude_keys=config_exclude_keys,
1364
1426
  config_include_keys=config_include_keys,
1365
- monitor_gym=monitor_gym,
1366
1427
  )
1367
1428
 
1368
- return wi.init(run_settings)
1429
+ if run_settings._noop:
1430
+ return wi.make_disabled_run(run_config)
1431
+
1432
+ wi.setup_run_log_directory(run_settings)
1433
+ if run_settings._jupyter:
1434
+ wi.monkeypatch_ipython(run_settings)
1435
+
1436
+ if monitor_gym:
1437
+ _monkeypatch_openai_gym()
1438
+
1439
+ if wandb.patched["tensorboard"]:
1440
+ # NOTE: The user may have called the patch function directly.
1441
+ init_telemetry.feature.tensorboard_patch = True
1442
+ if run_settings.sync_tensorboard:
1443
+ _monkeypatch_tensorboard()
1444
+ init_telemetry.feature.tensorboard_sync = True
1445
+
1446
+ return wi.init(run_settings, run_config)
1369
1447
 
1370
1448
  except KeyboardInterrupt as e:
1371
1449
  if wl:
wandb/sdk/wandb_run.py CHANGED
@@ -547,8 +547,6 @@ class Run:
547
547
 
548
548
  _init_pid: int
549
549
  _attach_pid: int
550
- _iface_pid: int | None
551
- _iface_port: int | None
552
550
 
553
551
  _attach_id: str | None
554
552
  _is_attached: bool
@@ -707,10 +705,6 @@ class Run:
707
705
  if launch_trace_id:
708
706
  self._config[wandb_key]["launch_trace_id"] = launch_trace_id
709
707
 
710
- # interface pid and port configured when backend is configured (See _hack_set_run)
711
- # TODO: using pid isn't the best for windows as pid reuse can happen more often than unix
712
- self._iface_pid = None
713
- self._iface_port = None
714
708
  self._attach_id = None
715
709
  self._is_attached = False
716
710
  self._is_finished = False
@@ -721,12 +715,6 @@ class Run:
721
715
  if not self._settings.x_disable_service:
722
716
  self._attach_id = self._settings.run_id
723
717
 
724
- def _set_iface_pid(self, iface_pid: int) -> None:
725
- self._iface_pid = iface_pid
726
-
727
- def _set_iface_port(self, iface_port: int) -> None:
728
- self._iface_port = iface_port
729
-
730
718
  def _handle_launch_artifact_overrides(self) -> None:
731
719
  if self._settings.launch and (os.environ.get("WANDB_ARTIFACTS") is not None):
732
720
  try:
@@ -1442,6 +1430,7 @@ class Run:
1442
1430
 
1443
1431
  not_using_tensorboard = len(wandb.patched["tensorboard"]) == 0
1444
1432
  self._backend.interface.publish_partial_history(
1433
+ self,
1445
1434
  data,
1446
1435
  user_step=self._step,
1447
1436
  step=step,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wandb
3
- Version: 0.19.3
3
+ Version: 0.19.4rc1
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
@@ -1,6 +1,6 @@
1
1
  package_readme.md,sha256=U9047nyMDICgctm1HLm4HfXwFnFKsEn2m77hsYPUZ1I,4298
2
- wandb/__init__.py,sha256=5f1_Sih9Sxjo5YN6UOofmcFjW0XnL5FxgWk-saYyMhw,6988
3
- wandb/__init__.pyi,sha256=__KjZYDXGiHshy_OUrsV7chJrIiOon8DuzRjM6ubHnc,47024
2
+ wandb/__init__.py,sha256=amlCK5n_1hyN1-MkgQ3CWpMhvrRq-X8B9Q4iZemjWzY,6991
3
+ wandb/__init__.pyi,sha256=nZ_mrCwelWNIQBbhGrJ1cKX8z_IfihKjoMc3ByY0loM,47027
4
4
  wandb/__main__.py,sha256=gripuDgB7J8wMMeJt4CIBRjn1BMSFr5zvsrt585Pnj4,64
5
5
  wandb/_globals.py,sha256=CccwOAls5bxJArYHg12b08ZeKR8Qu9u57GtYWjBH0o0,702
6
6
  wandb/data_types.py,sha256=tjxcQ8padGuGxST192PyEDX_nhU__izHcAK-kaSyevI,2276
@@ -49,7 +49,7 @@ wandb/apis/reports/v1/__init__.py,sha256=L5l1BqMaap-w5wXCzn8pC8RXB7_72MsjTx8HeLu
49
49
  wandb/apis/reports/v2/__init__.py,sha256=jdLiTqf5QIRxnWH8drWV9Y06bZEhI5N6uGGSKAT7tv0,263
50
50
  wandb/apis/workspaces/__init__.py,sha256=buvqtqELpCFWC7sHzEuslJgx24ZWDj-5lo2mdV6aHdg,265
51
51
  wandb/beta/workflows.py,sha256=bk12HDWnxI4uuP0KyUbfclrTSoRVXrJibAuO_QBB5tI,10239
52
- wandb/bin/gpu_stats,sha256=SpqeMVNWRDIG2nWfK5L6jxR-eWJuQJDvBdX9pIvUX5g,10864536
52
+ wandb/bin/gpu_stats,sha256=UoDlCDMWg-7wj2egpk1UberOg7-mDcl8CTpERla_hGw,10856328
53
53
  wandb/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
54
  wandb/cli/beta.py,sha256=Um35Q9CeoQPS80g0wryo2WtSaD7VA0XqF_YCQNDNiSY,5438
55
55
  wandb/cli/cli.py,sha256=9UKKfjKwI_oRWK13UqQA3Ep1qH3HDCBXmKlOwcK0k_U,92726
@@ -203,13 +203,13 @@ wandb/sdk/__init__.py,sha256=N-GTAC0AzbZF2J8RzB33DTmYk9u-jubllCwvhWrPgsE,813
203
203
  wandb/sdk/wandb_alerts.py,sha256=SwBPBiXRxknMTMGbsVoMMWqWK65UWMcKAdTWZtdwAeo,193
204
204
  wandb/sdk/wandb_config.py,sha256=b7kxQVnIh5HCBZXb2pOGZ4c02xCVlW4IQiAu3N-8Opg,10856
205
205
  wandb/sdk/wandb_helper.py,sha256=IbJ7opO8UkfwCDekSjRYIrGBblUxnTPBfp1EdesfF4U,1824
206
- wandb/sdk/wandb_init.py,sha256=z19KqQWjmOcnswowWoq4VAHGalTmjLKwz1R-Rm1i-Bo,56484
206
+ wandb/sdk/wandb_init.py,sha256=XqlUH5OpIdyatgTKHMIsDM3xUSwVbgl_zFzezB8xOg8,58443
207
207
  wandb/sdk/wandb_login.py,sha256=DP7nDUGx2UmqGRBrvTmcpvzRBVeRD0qEENtmu4sjDAQ,10966
208
208
  wandb/sdk/wandb_metadata.py,sha256=nT6TUF4Yh-ka3VQGyKd3y9MTEHJUgRVT4ICyfJkbHFo,20111
209
209
  wandb/sdk/wandb_metric.py,sha256=a3GiQXr6H18m81uobYjlJaC8CL8iANzI42qxkxfZsDs,3268
210
210
  wandb/sdk/wandb_require.py,sha256=Y0ib8h27__t7hXos1F2srfsQzVfzH4BB6wq8E1aRbRA,2950
211
211
  wandb/sdk/wandb_require_helpers.py,sha256=ZmKv5aXXHDTTU6nYHMLKW4_pt9X-PlaMtbRJl77kHX8,1331
212
- wandb/sdk/wandb_run.py,sha256=eI6WIi2pmkBkP5aMgscMU9C94PjGVknEYQvVPlC-YDM,155668
212
+ wandb/sdk/wandb_run.py,sha256=Jk-KLMtrjX698iUCT2gjivutfR01ud9DjnuSiuVYop8,155193
213
213
  wandb/sdk/wandb_settings.py,sha256=gXZydMDYH8OLcAoK78mA4naRqBA2aKlsIGKn3i4OC0s,47290
214
214
  wandb/sdk/wandb_setup.py,sha256=7j3UBiqm8x7f4JsFPX5jR19wNRSRvf77TIyncd0HpJg,13014
215
215
  wandb/sdk/wandb_summary.py,sha256=yQdOVIPrZaZanhBQ7yuSfPLX0x6dxwkN_KAn4SgjSZU,4536
@@ -279,7 +279,7 @@ wandb/sdk/integration_utils/auto_logging.py,sha256=sblNn9BIG7memxTj23UfrGXyA06t3
279
279
  wandb/sdk/integration_utils/data_logging.py,sha256=DDFtDaUu50aeTTgxCHHYd2f85guqqf2xfEOburRlwwQ,19533
280
280
  wandb/sdk/interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
281
281
  wandb/sdk/interface/constants.py,sha256=NJNBFr7LkshLI837D3LU3JuEURLzBwza9H-kxcy4ihw,60
282
- wandb/sdk/interface/interface.py,sha256=-q9mxz8RpHz5_UNKT91sP7w5sOqEFQKkY2B4teLe2vM,36626
282
+ wandb/sdk/interface/interface.py,sha256=coqmzkIQr8s_hzryIhID__5JHw-waMkE65ICv1KcFMQ,36439
283
283
  wandb/sdk/interface/interface_queue.py,sha256=7lbQz6VYamqYlNpkC-Ckrn5az_Yc9CrbnmwKNFtta44,1700
284
284
  wandb/sdk/interface/interface_relay.py,sha256=vQUrk5KESKInZsXpOxWF4YcWRZFLJjNz1mdNywbWbbE,1514
285
285
  wandb/sdk/interface/interface_shared.py,sha256=F6kkd8Aaq_nZALIprMgul0xDkSB8uG0HXJ0-94uEZNw,21276
@@ -309,7 +309,7 @@ wandb/sdk/internal/sample.py,sha256=USAWLhEeP83J13BVOSIy1Rb3kDDKTK9kzR88SlhO7dw,
309
309
  wandb/sdk/internal/sender.py,sha256=TPidmgTSE2gYlC4uh-32eNtI-XRgHEoYVVkC5F-saCQ,65328
310
310
  wandb/sdk/internal/sender_config.py,sha256=qEuXwOskca3sYyDIRsswlXmj9StCCS0WKQ1qrBXbIjw,6767
311
311
  wandb/sdk/internal/settings_static.py,sha256=1Dc2MoVCIskHo7rKafjtrVxY9sQWZMNeee39LYBe9t0,3668
312
- wandb/sdk/internal/tb_watcher.py,sha256=MpHESnP4UpTq24GnYcBrF1csupFzCVL4dET-f4dj-98,18717
312
+ wandb/sdk/internal/tb_watcher.py,sha256=3AvQGlZLGkr8POhaSGzbeyIcX0YWkLkblJ0bksAB8U8,18738
313
313
  wandb/sdk/internal/thread_local_settings.py,sha256=UqD6kfjsy6mvxIWcjhd-vJWkNRCeU1whuRe_-VGIklQ,527
314
314
  wandb/sdk/internal/writer.py,sha256=jo_Ex7ik-0_rIahYDHIWcQjm_uxsUNVn92__bI8TloE,7267
315
315
  wandb/sdk/internal/system/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -816,8 +816,8 @@ wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/importlib2.py,sha256=cJIaJ2EQso
816
816
  wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/platform.py,sha256=UORYTNVcUSE2NpFcq9UVLIS-tsS0TS_Qw8akhKxn2eY,1506
817
817
  wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/unicode_paths.py,sha256=UWX8DB97ygkEeSxWQUYCHR4MahNilux7vl5TCTQtPPk,2190
818
818
  wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/win32stat.py,sha256=ZOevOTbSo8NRiIxkuBVGaG4yigWnPoO0goxAi-jsBkM,3828
819
- wandb-0.19.3.dist-info/METADATA,sha256=AGD2Iwy-cUjmtannnNpN4Nh9wQAjRZw7WgFow2-DvwI,10282
820
- wandb-0.19.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
821
- wandb-0.19.3.dist-info/entry_points.txt,sha256=v4FCOZ9gW7Pc6KLsmgQqpCiKTrA1wh2XHmNf-NUP1-I,67
822
- wandb-0.19.3.dist-info/licenses/LICENSE,sha256=izOKRJpGOx1PrJiGOKR0HsNdlB5JdH2d0Z4P7a7ssTc,1081
823
- wandb-0.19.3.dist-info/RECORD,,
819
+ wandb-0.19.4rc1.dist-info/METADATA,sha256=uyIurAspZwmJRHUtzVckSZv375aN1Lpvi7IqLuCgMbc,10285
820
+ wandb-0.19.4rc1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
821
+ wandb-0.19.4rc1.dist-info/entry_points.txt,sha256=v4FCOZ9gW7Pc6KLsmgQqpCiKTrA1wh2XHmNf-NUP1-I,67
822
+ wandb-0.19.4rc1.dist-info/licenses/LICENSE,sha256=izOKRJpGOx1PrJiGOKR0HsNdlB5JdH2d0Z4P7a7ssTc,1081
823
+ wandb-0.19.4rc1.dist-info/RECORD,,