wandb 0.18.0__py3-none-win32.whl → 0.18.1__py3-none-win32.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. wandb/__init__.py +2 -2
  2. wandb/__init__.pyi +1 -1
  3. wandb/apis/public/runs.py +2 -0
  4. wandb/bin/wandb-core +0 -0
  5. wandb/cli/cli.py +0 -2
  6. wandb/data_types.py +9 -2019
  7. wandb/env.py +0 -5
  8. wandb/{sklearn → integration/sklearn}/calculate/calibration_curves.py +7 -7
  9. wandb/{sklearn → integration/sklearn}/calculate/class_proportions.py +1 -1
  10. wandb/{sklearn → integration/sklearn}/calculate/confusion_matrix.py +3 -2
  11. wandb/{sklearn → integration/sklearn}/calculate/elbow_curve.py +6 -6
  12. wandb/{sklearn → integration/sklearn}/calculate/learning_curve.py +2 -2
  13. wandb/{sklearn → integration/sklearn}/calculate/outlier_candidates.py +2 -2
  14. wandb/{sklearn → integration/sklearn}/calculate/residuals.py +8 -8
  15. wandb/{sklearn → integration/sklearn}/calculate/silhouette.py +2 -2
  16. wandb/{sklearn → integration/sklearn}/calculate/summary_metrics.py +2 -2
  17. wandb/{sklearn → integration/sklearn}/plot/classifier.py +5 -5
  18. wandb/{sklearn → integration/sklearn}/plot/clusterer.py +10 -6
  19. wandb/{sklearn → integration/sklearn}/plot/regressor.py +5 -5
  20. wandb/{sklearn → integration/sklearn}/plot/shared.py +3 -3
  21. wandb/{sklearn → integration/sklearn}/utils.py +8 -8
  22. wandb/{wandb_torch.py → integration/torch/wandb_torch.py} +36 -32
  23. wandb/proto/v3/wandb_base_pb2.py +2 -1
  24. wandb/proto/v3/wandb_internal_pb2.py +2 -1
  25. wandb/proto/v3/wandb_server_pb2.py +2 -1
  26. wandb/proto/v3/wandb_settings_pb2.py +2 -1
  27. wandb/proto/v3/wandb_telemetry_pb2.py +2 -1
  28. wandb/proto/v4/wandb_base_pb2.py +2 -1
  29. wandb/proto/v4/wandb_internal_pb2.py +2 -1
  30. wandb/proto/v4/wandb_server_pb2.py +2 -1
  31. wandb/proto/v4/wandb_settings_pb2.py +2 -1
  32. wandb/proto/v4/wandb_telemetry_pb2.py +2 -1
  33. wandb/proto/v5/wandb_base_pb2.py +3 -2
  34. wandb/proto/v5/wandb_internal_pb2.py +3 -2
  35. wandb/proto/v5/wandb_server_pb2.py +3 -2
  36. wandb/proto/v5/wandb_settings_pb2.py +3 -2
  37. wandb/proto/v5/wandb_telemetry_pb2.py +3 -2
  38. wandb/sdk/data_types/audio.py +165 -0
  39. wandb/sdk/data_types/bokeh.py +70 -0
  40. wandb/sdk/data_types/graph.py +405 -0
  41. wandb/sdk/data_types/image.py +156 -0
  42. wandb/sdk/data_types/table.py +1204 -0
  43. wandb/sdk/data_types/trace_tree.py +2 -2
  44. wandb/sdk/data_types/utils.py +49 -0
  45. wandb/sdk/service/service.py +2 -9
  46. wandb/sdk/service/streams.py +0 -7
  47. wandb/sdk/wandb_init.py +10 -3
  48. wandb/sdk/wandb_run.py +6 -152
  49. wandb/sdk/wandb_setup.py +1 -1
  50. wandb/sklearn.py +35 -0
  51. wandb/util.py +6 -2
  52. {wandb-0.18.0.dist-info → wandb-0.18.1.dist-info}/METADATA +1 -1
  53. {wandb-0.18.0.dist-info → wandb-0.18.1.dist-info}/RECORD +61 -57
  54. wandb/sdk/lib/console.py +0 -39
  55. /wandb/{sklearn → integration/sklearn}/__init__.py +0 -0
  56. /wandb/{sklearn → integration/sklearn}/calculate/__init__.py +0 -0
  57. /wandb/{sklearn → integration/sklearn}/calculate/decision_boundaries.py +0 -0
  58. /wandb/{sklearn → integration/sklearn}/calculate/feature_importances.py +0 -0
  59. /wandb/{sklearn → integration/sklearn}/plot/__init__.py +0 -0
  60. {wandb-0.18.0.dist-info → wandb-0.18.1.dist-info}/WHEEL +0 -0
  61. {wandb-0.18.0.dist-info → wandb-0.18.1.dist-info}/entry_points.txt +0 -0
  62. {wandb-0.18.0.dist-info → wandb-0.18.1.dist-info}/licenses/LICENSE +0 -0
@@ -14,9 +14,9 @@ from enum import Enum
14
14
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
15
15
 
16
16
  import wandb
17
- import wandb.data_types
18
17
  from wandb.sdk.data_types import _dtypes
19
18
  from wandb.sdk.data_types.base_types.media import Media
19
+ from wandb.sdk.data_types.utils import _json_helper
20
20
 
21
21
  if TYPE_CHECKING: # pragma: no cover
22
22
  from wandb.sdk.artifacts.artifact import Artifact
@@ -142,7 +142,7 @@ def _fallback_serialize(obj: Any) -> str:
142
142
  def _safe_serialize(obj: dict) -> str:
143
143
  try:
144
144
  return json.dumps(
145
- wandb.data_types._json_helper(obj, None),
145
+ _json_helper(obj, None),
146
146
  skipkeys=True,
147
147
  default=_fallback_serialize,
148
148
  )
@@ -1,6 +1,8 @@
1
+ import datetime
1
2
  import logging
2
3
  import os
3
4
  import re
5
+ from decimal import Decimal
4
6
  from typing import TYPE_CHECKING, Optional, Sequence, Union, cast
5
7
 
6
8
  import wandb
@@ -178,3 +180,50 @@ def _prune_max_seq(seq: Sequence["BatchableMedia"]) -> Sequence["BatchableMedia"
178
180
  )
179
181
  items = seq[: seq[0].MAX_ITEMS]
180
182
  return items
183
+
184
+
185
+ def _json_helper(val, artifact):
186
+ if isinstance(val, WBValue):
187
+ return val.to_json(artifact)
188
+ elif val.__class__ is dict:
189
+ res = {}
190
+ for key in val:
191
+ res[key] = _json_helper(val[key], artifact)
192
+ return res
193
+
194
+ if hasattr(val, "tolist"):
195
+ py_val = val.tolist()
196
+ if val.__class__.__name__ == "datetime64" and isinstance(py_val, int):
197
+ # when numpy datetime64 .tolist() returns an int, it is nanoseconds.
198
+ # need to convert to milliseconds
199
+ return _json_helper(py_val / int(1e6), artifact)
200
+ return _json_helper(py_val, artifact)
201
+ elif hasattr(val, "item"):
202
+ return _json_helper(val.item(), artifact)
203
+
204
+ if isinstance(val, datetime.datetime):
205
+ if val.tzinfo is None:
206
+ val = datetime.datetime(
207
+ val.year,
208
+ val.month,
209
+ val.day,
210
+ val.hour,
211
+ val.minute,
212
+ val.second,
213
+ val.microsecond,
214
+ tzinfo=datetime.timezone.utc,
215
+ )
216
+ return int(val.timestamp() * 1000)
217
+ elif isinstance(val, datetime.date):
218
+ return int(
219
+ datetime.datetime(
220
+ val.year, val.month, val.day, tzinfo=datetime.timezone.utc
221
+ ).timestamp()
222
+ * 1000
223
+ )
224
+ elif isinstance(val, (list, tuple)):
225
+ return [_json_helper(i, artifact) for i in val]
226
+ elif isinstance(val, Decimal):
227
+ return float(val)
228
+ else:
229
+ return util.json_friendly(val)[0]
@@ -15,11 +15,7 @@ import time
15
15
  from typing import TYPE_CHECKING, Any, Dict, Optional
16
16
 
17
17
  from wandb import _sentry, termlog
18
- from wandb.env import (
19
- core_debug,
20
- core_error_reporting_enabled,
21
- is_require_legacy_service,
22
- )
18
+ from wandb.env import core_debug, error_reporting_enabled, is_require_legacy_service
23
19
  from wandb.errors import Error, WandbCoreNotAvailableError
24
20
  from wandb.sdk.lib.wburls import wburls
25
21
  from wandb.util import get_core_path, get_module
@@ -162,9 +158,6 @@ class _Service:
162
158
 
163
159
  executable = self._settings._executable
164
160
  exec_cmd_list = [executable, "-m"]
165
- # Add coverage collection if needed
166
- if os.environ.get("YEA_RUN_COVERAGE") and os.environ.get("COVERAGE_RCFILE"):
167
- exec_cmd_list += ["coverage", "run", "-m"]
168
161
 
169
162
  service_args = []
170
163
 
@@ -176,7 +169,7 @@ class _Service:
176
169
 
177
170
  service_args.extend([core_path])
178
171
 
179
- if not core_error_reporting_enabled(default="True"):
172
+ if not error_reporting_enabled():
180
173
  service_args.append("--no-observability")
181
174
 
182
175
  if core_debug(default="False"):
@@ -317,7 +317,6 @@ class StreamMux:
317
317
  # These could be done in parallel in the future
318
318
  for _sid, stream in started_streams.items():
319
319
  # dispatch all our final requests
320
- server_info_handle = stream.interface.deliver_request_server_info()
321
320
  poll_exit_handle = stream.interface.deliver_poll_exit()
322
321
  final_summary_handle = stream.interface.deliver_get_summary()
323
322
  sampled_history_handle = stream.interface.deliver_request_sampled_history()
@@ -327,11 +326,6 @@ class StreamMux:
327
326
  assert result
328
327
  internal_messages_response = result.response.internal_messages_response
329
328
 
330
- # wait for them, it's ok to do this serially but this can be improved
331
- result = server_info_handle.wait(timeout=-1)
332
- assert result
333
- server_info_response = result.response.server_info_response
334
-
335
329
  result = poll_exit_handle.wait(timeout=-1)
336
330
  assert result
337
331
  poll_exit_response = result.response.poll_exit_response
@@ -348,7 +342,6 @@ class StreamMux:
348
342
  sampled_history=sampled_history,
349
343
  final_summary=final_summary,
350
344
  poll_exit_response=poll_exit_response,
351
- server_info_response=server_info_response,
352
345
  internal_messages_response=internal_messages_response,
353
346
  settings=stream._settings, # type: ignore
354
347
  printer=printer,
wandb/sdk/wandb_init.py CHANGED
@@ -174,12 +174,19 @@ class _WandbInit:
174
174
 
175
175
  # we add this logic to be backward compatible with the old behavior of disable
176
176
  # where it would disable the service if the mode was set to disabled
177
+ # TODO: use the regular settins object to handle this
177
178
  mode = kwargs.get("mode")
178
179
  settings_mode = (kwargs.get("settings") or {}).get("mode") or os.environ.get(
179
- "WANDB_MODE"
180
+ wandb.env.MODE
180
181
  )
181
- _disable_service = mode == "disabled" or settings_mode == "disabled"
182
- setup_settings = {"_disable_service": _disable_service}
182
+ settings__disable_service = (kwargs.get("settings") or {}).get(
183
+ "_disable_service"
184
+ ) or os.environ.get(wandb.env._DISABLE_SERVICE)
185
+
186
+ setup_settings = {
187
+ "mode": mode or settings_mode,
188
+ "_disable_service": settings__disable_service,
189
+ }
183
190
 
184
191
  self._wl = wandb_setup.setup(settings=setup_settings)
185
192
  # Make sure we have a logger setup (might be an early logger)
wandb/sdk/wandb_run.py CHANGED
@@ -43,12 +43,12 @@ from wandb.apis import internal, public
43
43
  from wandb.apis.internal import Api
44
44
  from wandb.apis.public import Api as PublicApi
45
45
  from wandb.errors import CommError
46
+ from wandb.integration.torch import wandb_torch
46
47
  from wandb.proto.wandb_internal_pb2 import (
47
48
  MetricRecord,
48
49
  PollExitResponse,
49
50
  Result,
50
51
  RunRecord,
51
- ServerInfoResponse,
52
52
  )
53
53
  from wandb.sdk.artifacts.artifact import Artifact
54
54
  from wandb.sdk.internal import job_builder
@@ -62,7 +62,7 @@ from wandb.util import (
62
62
  _is_artifact_object,
63
63
  _is_artifact_string,
64
64
  _is_artifact_version_weave_dict,
65
- _is_py_or_dockerfile,
65
+ _is_py_requirements_or_dockerfile,
66
66
  _resolve_aliases,
67
67
  add_import_hook,
68
68
  parse_artifact_string,
@@ -105,7 +105,6 @@ if TYPE_CHECKING:
105
105
  import wandb.sdk.backend.backend
106
106
  import wandb.sdk.interface.interface_queue
107
107
  from wandb.proto.wandb_internal_pb2 import (
108
- CheckVersionResponse,
109
108
  GetSummaryResponse,
110
109
  InternalMessagesResponse,
111
110
  SampledHistoryResponse,
@@ -561,12 +560,10 @@ class Run:
561
560
 
562
561
  _run_status_checker: Optional[RunStatusChecker]
563
562
 
564
- _check_version: Optional["CheckVersionResponse"]
565
563
  _sampled_history: Optional["SampledHistoryResponse"]
566
564
  _final_summary: Optional["GetSummaryResponse"]
567
565
  _poll_exit_handle: Optional[MailboxHandle]
568
566
  _poll_exit_response: Optional[PollExitResponse]
569
- _server_info_response: Optional[ServerInfoResponse]
570
567
  _internal_messages_response: Optional["InternalMessagesResponse"]
571
568
 
572
569
  _stdout_slave_fd: Optional[int]
@@ -624,7 +621,7 @@ class Run:
624
621
  )
625
622
  self.summary._set_update_callback(self._summary_update_callback)
626
623
  self._step = 0
627
- self._torch_history: Optional[wandb.wandb_torch.TorchHistory] = None # type: ignore
624
+ self._torch_history: Optional[wandb_torch.TorchHistory] = None # type: ignore
628
625
 
629
626
  # todo: eventually would be nice to make this configurable using self._settings._start_time
630
627
  # need to test (jhr): if you set start time to 2 days ago and run a test for 15 minutes,
@@ -669,11 +666,9 @@ class Run:
669
666
  # Created when the run "starts".
670
667
  self._run_status_checker = None
671
668
 
672
- self._check_version = None
673
669
  self._sampled_history = None
674
670
  self._final_summary = None
675
671
  self._poll_exit_response = None
676
- self._server_info_response = None
677
672
  self._internal_messages_response = None
678
673
  self._poll_exit_handle = None
679
674
 
@@ -927,9 +922,9 @@ class Run:
927
922
  self.__dict__.update(state)
928
923
 
929
924
  @property
930
- def _torch(self) -> "wandb.wandb_torch.TorchHistory": # type: ignore
925
+ def _torch(self) -> "wandb_torch.TorchHistory": # type: ignore
931
926
  if self._torch_history is None:
932
- self._torch_history = wandb.wandb_torch.TorchHistory() # type: ignore
927
+ self._torch_history = wandb_torch.TorchHistory() # type: ignore
933
928
  return self._torch_history
934
929
 
935
930
  @property
@@ -1152,7 +1147,7 @@ class Run:
1152
1147
  name: Optional[str] = None,
1153
1148
  include_fn: Union[
1154
1149
  Callable[[str, str], bool], Callable[[str], bool]
1155
- ] = _is_py_or_dockerfile,
1150
+ ] = _is_py_requirements_or_dockerfile,
1156
1151
  exclude_fn: Union[
1157
1152
  Callable[[str, str], bool], Callable[[str], bool]
1158
1153
  ] = filenames.exclude_wandb_fn,
@@ -2453,8 +2448,6 @@ class Run:
2453
2448
  sampled_history=self._sampled_history,
2454
2449
  final_summary=self._final_summary,
2455
2450
  poll_exit_response=self._poll_exit_response,
2456
- server_info_response=self._server_info_response,
2457
- check_version_response=self._check_version,
2458
2451
  internal_messages_response=self._internal_messages_response,
2459
2452
  reporter=self._reporter,
2460
2453
  quiet=self._quiet,
@@ -2676,25 +2669,6 @@ class Run:
2676
2669
 
2677
2670
  assert self._backend and self._backend.interface
2678
2671
 
2679
- if not self._settings._disable_update_check:
2680
- logger.info("communicating current version")
2681
- version_handle = self._backend.interface.deliver_check_version(
2682
- current_version=wandb.__version__
2683
- )
2684
- version_result = version_handle.wait(timeout=10)
2685
- if not version_result:
2686
- version_handle.abandon()
2687
- else:
2688
- self._check_version = version_result.response.check_version_response
2689
- logger.info("got version response %s", self._check_version)
2690
-
2691
- # get the server info before starting the defer state machine as
2692
- # it will stop communication with the server
2693
- server_info_handle = self._backend.interface.deliver_request_server_info()
2694
- result = server_info_handle.wait(timeout=-1)
2695
- assert result
2696
- self._server_info_response = result.response.server_info_response
2697
-
2698
2672
  exit_handle = self._backend.interface.deliver_exit(self._exit_code)
2699
2673
  exit_handle.add_probe(on_probe=self._on_probe_exit)
2700
2674
 
@@ -3712,27 +3686,6 @@ class Run:
3712
3686
  Run._header_sync_info(settings=settings, printer=printer)
3713
3687
  Run._header_run_info(settings=settings, printer=printer)
3714
3688
 
3715
- @staticmethod
3716
- def _header_version_check_info(
3717
- check_version: Optional["CheckVersionResponse"] = None,
3718
- *,
3719
- settings: "Settings",
3720
- printer: Union["PrinterTerm", "PrinterJupyter"],
3721
- ) -> None:
3722
- if not check_version or settings._offline:
3723
- return
3724
-
3725
- if check_version.delete_message:
3726
- printer.display(check_version.delete_message, level="error")
3727
- elif check_version.yank_message:
3728
- printer.display(check_version.yank_message, level="warn")
3729
-
3730
- printer.display(
3731
- check_version.upgrade_message,
3732
- off=not check_version.upgrade_message,
3733
- level="warn",
3734
- )
3735
-
3736
3689
  @staticmethod
3737
3690
  def _header_wandb_version_info(
3738
3691
  *,
@@ -3846,8 +3799,6 @@ class Run:
3846
3799
  sampled_history: Optional["SampledHistoryResponse"] = None,
3847
3800
  final_summary: Optional["GetSummaryResponse"] = None,
3848
3801
  poll_exit_response: Optional[PollExitResponse] = None,
3849
- server_info_response: Optional[ServerInfoResponse] = None,
3850
- check_version_response: Optional["CheckVersionResponse"] = None,
3851
3802
  internal_messages_response: Optional["InternalMessagesResponse"] = None,
3852
3803
  reporter: Optional[Reporter] = None,
3853
3804
  quiet: Optional[bool] = None,
@@ -3870,23 +3821,11 @@ class Run:
3870
3821
  printer=printer,
3871
3822
  )
3872
3823
  Run._footer_log_dir_info(quiet=quiet, settings=settings, printer=printer)
3873
- Run._footer_version_check_info(
3874
- check_version=check_version_response,
3875
- quiet=quiet,
3876
- settings=settings,
3877
- printer=printer,
3878
- )
3879
3824
  Run._footer_notify_wandb_core(
3880
3825
  quiet=quiet,
3881
3826
  settings=settings,
3882
3827
  printer=printer,
3883
3828
  )
3884
- Run._footer_local_warn(
3885
- server_info_response=server_info_response,
3886
- quiet=quiet,
3887
- settings=settings,
3888
- printer=printer,
3889
- )
3890
3829
  Run._footer_internal_messages(
3891
3830
  internal_messages_response=internal_messages_response,
3892
3831
  quiet=quiet,
@@ -3896,12 +3835,6 @@ class Run:
3896
3835
  Run._footer_reporter_warn_err(
3897
3836
  reporter=reporter, quiet=quiet, settings=settings, printer=printer
3898
3837
  )
3899
- Run._footer_server_messages(
3900
- server_info_response=server_info_response,
3901
- quiet=quiet,
3902
- settings=settings,
3903
- printer=printer,
3904
- )
3905
3838
 
3906
3839
  # fixme: Temporary hack until we move to rich which allows multiple spinners
3907
3840
  @staticmethod
@@ -4156,33 +4089,6 @@ class Run:
4156
4089
  if panel:
4157
4090
  printer.display(printer.panel(panel))
4158
4091
 
4159
- @staticmethod
4160
- def _footer_local_warn(
4161
- server_info_response: Optional[ServerInfoResponse] = None,
4162
- quiet: Optional[bool] = None,
4163
- *,
4164
- settings: "Settings",
4165
- printer: Union["PrinterTerm", "PrinterJupyter"],
4166
- ) -> None:
4167
- if (quiet or settings.quiet) or settings.silent:
4168
- return
4169
-
4170
- if settings._offline:
4171
- return
4172
-
4173
- if not server_info_response or not server_info_response.local_info:
4174
- return
4175
-
4176
- if settings.is_local:
4177
- local_info = server_info_response.local_info
4178
- latest_version, out_of_date = local_info.version, local_info.out_of_date
4179
- if out_of_date:
4180
- printer.display(
4181
- f"Upgrade to the {latest_version} version of W&B Server to get the latest features. "
4182
- f"Learn more: {printer.link(wburls.get('upgrade_server'))}",
4183
- level="warn",
4184
- )
4185
-
4186
4092
  @staticmethod
4187
4093
  def _footer_internal_messages(
4188
4094
  internal_messages_response: Optional["InternalMessagesResponse"] = None,
@@ -4200,58 +4106,6 @@ class Run:
4200
4106
  for message in internal_messages_response.messages.warning:
4201
4107
  printer.display(message, level="warn")
4202
4108
 
4203
- @staticmethod
4204
- def _footer_server_messages(
4205
- server_info_response: Optional[ServerInfoResponse] = None,
4206
- quiet: Optional[bool] = None,
4207
- *,
4208
- settings: "Settings",
4209
- printer: Union["PrinterTerm", "PrinterJupyter"],
4210
- ) -> None:
4211
- if (quiet or settings.quiet) or settings.silent:
4212
- return
4213
-
4214
- if settings.disable_hints:
4215
- return
4216
-
4217
- if server_info_response and server_info_response.server_messages:
4218
- for message in server_info_response.server_messages.item:
4219
- printer.display(
4220
- message.html_text if printer._html else message.utf_text,
4221
- default_text=message.plain_text,
4222
- level=message.level,
4223
- off=message.type.lower() != "footer",
4224
- )
4225
-
4226
- @staticmethod
4227
- def _footer_version_check_info(
4228
- check_version: Optional["CheckVersionResponse"] = None,
4229
- quiet: Optional[bool] = None,
4230
- *,
4231
- settings: "Settings",
4232
- printer: Union["PrinterTerm", "PrinterJupyter"],
4233
- ) -> None:
4234
- if not check_version:
4235
- return
4236
-
4237
- if settings._offline:
4238
- return
4239
-
4240
- if (quiet or settings.quiet) or settings.silent:
4241
- return
4242
-
4243
- if check_version.delete_message:
4244
- printer.display(check_version.delete_message, level="error")
4245
- elif check_version.yank_message:
4246
- printer.display(check_version.yank_message, level="warn")
4247
-
4248
- # only display upgrade message if packages are bad
4249
- if check_version.upgrade_message:
4250
- printer.display(
4251
- check_version.upgrade_message,
4252
- level="warn",
4253
- )
4254
-
4255
4109
  @staticmethod
4256
4110
  def _footer_notify_wandb_core(
4257
4111
  *,
wandb/sdk/wandb_setup.py CHANGED
@@ -281,7 +281,7 @@ class _WandbSetup__WandbSetup: # noqa: N801
281
281
  sys.exit(internal_exit_code)
282
282
 
283
283
  def _setup_manager(self) -> None:
284
- if self._settings._disable_service:
284
+ if self._settings._noop or self._settings._disable_service:
285
285
  return
286
286
  self._manager = wandb_manager._Manager(settings=self._settings)
287
287
 
wandb/sklearn.py ADDED
@@ -0,0 +1,35 @@
1
+ from wandb.integration.sklearn import (
2
+ plot_calibration_curve,
3
+ plot_class_proportions,
4
+ plot_classifier,
5
+ plot_clusterer,
6
+ plot_confusion_matrix,
7
+ plot_elbow_curve,
8
+ plot_feature_importances,
9
+ plot_learning_curve,
10
+ plot_outlier_candidates,
11
+ plot_precision_recall,
12
+ plot_regressor,
13
+ plot_residuals,
14
+ plot_roc,
15
+ plot_silhouette,
16
+ plot_summary_metrics,
17
+ )
18
+
19
+ __all__ = (
20
+ "plot_classifier",
21
+ "plot_clusterer",
22
+ "plot_regressor",
23
+ "plot_summary_metrics",
24
+ "plot_learning_curve",
25
+ "plot_feature_importances",
26
+ "plot_class_proportions",
27
+ "plot_calibration_curve",
28
+ "plot_roc",
29
+ "plot_precision_recall",
30
+ "plot_confusion_matrix",
31
+ "plot_elbow_curve",
32
+ "plot_silhouette",
33
+ "plot_residuals",
34
+ "plot_outlier_candidates",
35
+ )
wandb/util.py CHANGED
@@ -1554,9 +1554,13 @@ def _is_databricks() -> bool:
1554
1554
  return False
1555
1555
 
1556
1556
 
1557
- def _is_py_or_dockerfile(path: str) -> bool:
1557
+ def _is_py_requirements_or_dockerfile(path: str) -> bool:
1558
1558
  file = os.path.basename(path)
1559
- return file.endswith(".py") or file.startswith("Dockerfile")
1559
+ return (
1560
+ file.endswith(".py")
1561
+ or file.startswith("Dockerfile")
1562
+ or file == "requirements.txt"
1563
+ )
1560
1564
 
1561
1565
 
1562
1566
  def check_windows_valid_filename(path: Union[int, str]) -> bool:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wandb
3
- Version: 0.18.0
3
+ Version: 0.18.1
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