wandb 0.15.3__py3-none-any.whl → 0.15.5__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- wandb/__init__.py +1 -1
- wandb/analytics/sentry.py +1 -0
- wandb/apis/importers/base.py +20 -5
- wandb/apis/importers/mlflow.py +7 -1
- wandb/apis/internal.py +12 -0
- wandb/apis/public.py +247 -1387
- wandb/apis/reports/_panels.py +58 -35
- wandb/beta/workflows.py +6 -7
- wandb/cli/cli.py +130 -60
- wandb/data_types.py +3 -1
- wandb/filesync/dir_watcher.py +21 -27
- wandb/filesync/step_checksum.py +8 -8
- wandb/filesync/step_prepare.py +23 -10
- wandb/filesync/step_upload.py +13 -13
- wandb/filesync/upload_job.py +4 -8
- wandb/integration/cohere/__init__.py +3 -0
- wandb/integration/cohere/cohere.py +21 -0
- wandb/integration/cohere/resolver.py +347 -0
- wandb/integration/gym/__init__.py +4 -6
- wandb/integration/huggingface/__init__.py +3 -0
- wandb/integration/huggingface/huggingface.py +18 -0
- wandb/integration/huggingface/resolver.py +213 -0
- wandb/integration/langchain/wandb_tracer.py +16 -179
- wandb/integration/openai/__init__.py +1 -3
- wandb/integration/openai/openai.py +11 -143
- wandb/integration/openai/resolver.py +111 -38
- wandb/integration/sagemaker/config.py +2 -2
- wandb/integration/tensorboard/log.py +4 -4
- wandb/old/settings.py +24 -7
- wandb/proto/v3/wandb_telemetry_pb2.py +12 -12
- wandb/proto/v4/wandb_telemetry_pb2.py +12 -12
- wandb/proto/wandb_deprecated.py +3 -1
- wandb/sdk/__init__.py +1 -1
- wandb/sdk/artifacts/__init__.py +0 -0
- wandb/sdk/artifacts/artifact.py +2101 -0
- wandb/sdk/artifacts/artifact_download_logger.py +42 -0
- wandb/sdk/artifacts/artifact_manifest.py +67 -0
- wandb/sdk/artifacts/artifact_manifest_entry.py +159 -0
- wandb/sdk/artifacts/artifact_manifests/__init__.py +0 -0
- wandb/sdk/artifacts/artifact_manifests/artifact_manifest_v1.py +91 -0
- wandb/sdk/{internal → artifacts}/artifact_saver.py +6 -5
- wandb/sdk/artifacts/artifact_state.py +10 -0
- wandb/sdk/{interface/artifacts/artifact_cache.py → artifacts/artifacts_cache.py} +22 -12
- wandb/sdk/artifacts/exceptions.py +55 -0
- wandb/sdk/artifacts/storage_handler.py +59 -0
- wandb/sdk/artifacts/storage_handlers/__init__.py +0 -0
- wandb/sdk/artifacts/storage_handlers/azure_handler.py +192 -0
- wandb/sdk/artifacts/storage_handlers/gcs_handler.py +224 -0
- wandb/sdk/artifacts/storage_handlers/http_handler.py +112 -0
- wandb/sdk/artifacts/storage_handlers/local_file_handler.py +134 -0
- wandb/sdk/artifacts/storage_handlers/multi_handler.py +53 -0
- wandb/sdk/artifacts/storage_handlers/s3_handler.py +301 -0
- wandb/sdk/artifacts/storage_handlers/tracking_handler.py +67 -0
- wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +132 -0
- wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +72 -0
- wandb/sdk/artifacts/storage_layout.py +6 -0
- wandb/sdk/artifacts/storage_policies/__init__.py +0 -0
- wandb/sdk/artifacts/storage_policies/s3_bucket_policy.py +61 -0
- wandb/sdk/artifacts/storage_policies/wandb_storage_policy.py +386 -0
- wandb/sdk/{interface/artifacts/artifact_storage.py → artifacts/storage_policy.py} +5 -57
- wandb/sdk/data_types/_dtypes.py +7 -12
- wandb/sdk/data_types/base_types/json_metadata.py +3 -2
- wandb/sdk/data_types/base_types/media.py +8 -8
- wandb/sdk/data_types/base_types/wb_value.py +12 -13
- wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +5 -6
- wandb/sdk/data_types/helper_types/classes.py +6 -8
- wandb/sdk/data_types/helper_types/image_mask.py +5 -6
- wandb/sdk/data_types/histogram.py +4 -3
- wandb/sdk/data_types/html.py +3 -4
- wandb/sdk/data_types/image.py +11 -9
- wandb/sdk/data_types/molecule.py +5 -3
- wandb/sdk/data_types/object_3d.py +7 -5
- wandb/sdk/data_types/plotly.py +3 -2
- wandb/sdk/data_types/saved_model.py +11 -11
- wandb/sdk/data_types/trace_tree.py +5 -4
- wandb/sdk/data_types/utils.py +3 -5
- wandb/sdk/data_types/video.py +5 -4
- wandb/sdk/integration_utils/auto_logging.py +215 -0
- wandb/sdk/interface/interface.py +15 -15
- wandb/sdk/internal/file_pusher.py +8 -16
- wandb/sdk/internal/file_stream.py +5 -11
- wandb/sdk/internal/handler.py +13 -1
- wandb/sdk/internal/internal_api.py +287 -13
- wandb/sdk/internal/job_builder.py +119 -30
- wandb/sdk/internal/sender.py +6 -26
- wandb/sdk/internal/settings_static.py +2 -0
- wandb/sdk/internal/system/assets/__init__.py +2 -0
- wandb/sdk/internal/system/assets/gpu.py +42 -0
- wandb/sdk/internal/system/assets/gpu_amd.py +216 -0
- wandb/sdk/internal/system/env_probe_helpers.py +13 -0
- wandb/sdk/internal/system/system_info.py +3 -3
- wandb/sdk/internal/tb_watcher.py +32 -22
- wandb/sdk/internal/thread_local_settings.py +18 -0
- wandb/sdk/launch/_project_spec.py +57 -11
- wandb/sdk/launch/agent/agent.py +147 -65
- wandb/sdk/launch/agent/job_status_tracker.py +34 -0
- wandb/sdk/launch/agent/run_queue_item_file_saver.py +45 -0
- wandb/sdk/launch/builder/abstract.py +5 -1
- wandb/sdk/launch/builder/build.py +21 -18
- wandb/sdk/launch/builder/docker_builder.py +10 -4
- wandb/sdk/launch/builder/kaniko_builder.py +113 -23
- wandb/sdk/launch/builder/noop.py +6 -3
- wandb/sdk/launch/builder/templates/_wandb_bootstrap.py +46 -14
- wandb/sdk/launch/environment/aws_environment.py +3 -2
- wandb/sdk/launch/environment/azure_environment.py +124 -0
- wandb/sdk/launch/environment/gcp_environment.py +2 -4
- wandb/sdk/launch/environment/local_environment.py +1 -1
- wandb/sdk/launch/errors.py +19 -0
- wandb/sdk/launch/github_reference.py +32 -19
- wandb/sdk/launch/launch.py +3 -8
- wandb/sdk/launch/launch_add.py +6 -2
- wandb/sdk/launch/loader.py +21 -2
- wandb/sdk/launch/registry/azure_container_registry.py +132 -0
- wandb/sdk/launch/registry/elastic_container_registry.py +39 -5
- wandb/sdk/launch/registry/google_artifact_registry.py +68 -26
- wandb/sdk/launch/registry/local_registry.py +2 -1
- wandb/sdk/launch/runner/abstract.py +24 -3
- wandb/sdk/launch/runner/kubernetes_runner.py +479 -26
- wandb/sdk/launch/runner/local_container.py +103 -51
- wandb/sdk/launch/runner/local_process.py +1 -1
- wandb/sdk/launch/runner/sagemaker_runner.py +60 -10
- wandb/sdk/launch/runner/vertex_runner.py +10 -5
- wandb/sdk/launch/sweeps/__init__.py +7 -9
- wandb/sdk/launch/sweeps/scheduler.py +307 -77
- wandb/sdk/launch/sweeps/scheduler_sweep.py +2 -1
- wandb/sdk/launch/sweeps/utils.py +82 -35
- wandb/sdk/launch/utils.py +89 -75
- wandb/sdk/lib/_settings_toposort_generated.py +7 -0
- wandb/sdk/lib/capped_dict.py +26 -0
- wandb/sdk/lib/{git.py → gitlib.py} +76 -59
- wandb/sdk/lib/hashutil.py +12 -4
- wandb/sdk/lib/paths.py +96 -8
- wandb/sdk/lib/sock_client.py +2 -2
- wandb/sdk/lib/timer.py +1 -0
- wandb/sdk/service/server.py +22 -9
- wandb/sdk/service/server_sock.py +1 -1
- wandb/sdk/service/service.py +27 -8
- wandb/sdk/verify/verify.py +4 -7
- wandb/sdk/wandb_config.py +2 -6
- wandb/sdk/wandb_init.py +57 -53
- wandb/sdk/wandb_require.py +7 -0
- wandb/sdk/wandb_run.py +61 -223
- wandb/sdk/wandb_settings.py +28 -4
- wandb/testing/relay.py +15 -2
- wandb/util.py +74 -36
- {wandb-0.15.3.dist-info → wandb-0.15.5.dist-info}/METADATA +15 -9
- {wandb-0.15.3.dist-info → wandb-0.15.5.dist-info}/RECORD +151 -116
- {wandb-0.15.3.dist-info → wandb-0.15.5.dist-info}/entry_points.txt +1 -0
- wandb/integration/langchain/util.py +0 -191
- wandb/sdk/interface/artifacts/__init__.py +0 -33
- wandb/sdk/interface/artifacts/artifact.py +0 -615
- wandb/sdk/interface/artifacts/artifact_manifest.py +0 -131
- wandb/sdk/wandb_artifacts.py +0 -2226
- {wandb-0.15.3.dist-info → wandb-0.15.5.dist-info}/LICENSE +0 -0
- {wandb-0.15.3.dist-info → wandb-0.15.5.dist-info}/WHEEL +0 -0
- {wandb-0.15.3.dist-info → wandb-0.15.5.dist-info}/top_level.txt +0 -0
wandb/testing/relay.py
CHANGED
@@ -4,6 +4,7 @@ import logging
|
|
4
4
|
import socket
|
5
5
|
import sys
|
6
6
|
import threading
|
7
|
+
import traceback
|
7
8
|
import urllib.parse
|
8
9
|
from collections import defaultdict, deque
|
9
10
|
from copy import deepcopy
|
@@ -294,7 +295,9 @@ class QueryResolver:
|
|
294
295
|
}
|
295
296
|
post_processed_data = {
|
296
297
|
"name": name,
|
297
|
-
"dropped": [request_data["dropped"]]
|
298
|
+
"dropped": [request_data["dropped"]]
|
299
|
+
if "dropped" in request_data
|
300
|
+
else [],
|
298
301
|
"files": files,
|
299
302
|
}
|
300
303
|
return post_processed_data
|
@@ -642,7 +645,17 @@ class RelayServer:
|
|
642
645
|
}
|
643
646
|
self.context.raw_data.append(raw_data)
|
644
647
|
|
645
|
-
|
648
|
+
try:
|
649
|
+
snooped_context = self.resolver.resolve(
|
650
|
+
request_data,
|
651
|
+
response_data,
|
652
|
+
**kwargs,
|
653
|
+
)
|
654
|
+
except Exception as e:
|
655
|
+
print("Failed to resolve context: ", e)
|
656
|
+
traceback.print_exc()
|
657
|
+
snooped_context = None
|
658
|
+
|
646
659
|
if snooped_context is not None:
|
647
660
|
self.context.upsert(snooped_context)
|
648
661
|
|
wandb/util.py
CHANGED
@@ -21,7 +21,9 @@ import tempfile
|
|
21
21
|
import threading
|
22
22
|
import time
|
23
23
|
import traceback
|
24
|
+
import types
|
24
25
|
import urllib
|
26
|
+
from dataclasses import asdict, is_dataclass
|
25
27
|
from datetime import date, datetime, timedelta
|
26
28
|
from importlib import import_module
|
27
29
|
from sys import getsizeof
|
@@ -50,14 +52,14 @@ import yaml
|
|
50
52
|
import wandb
|
51
53
|
import wandb.env
|
52
54
|
from wandb.errors import AuthenticationError, CommError, UsageError, term
|
55
|
+
from wandb.sdk.internal.thread_local_settings import _thread_local_api_settings
|
53
56
|
from wandb.sdk.lib import filesystem, runid
|
54
|
-
from wandb.sdk.lib.paths import FilePathStr,
|
57
|
+
from wandb.sdk.lib.paths import FilePathStr, StrPath
|
55
58
|
|
56
59
|
if TYPE_CHECKING:
|
57
|
-
import wandb.apis.public
|
58
60
|
import wandb.sdk.internal.settings_static
|
59
|
-
import wandb.sdk.wandb_artifacts
|
60
61
|
import wandb.sdk.wandb_settings
|
62
|
+
from wandb.sdk.artifacts.artifact import Artifact
|
61
63
|
|
62
64
|
CheckRetryFnType = Callable[[Exception], Union[bool, timedelta]]
|
63
65
|
|
@@ -179,25 +181,59 @@ def vendor_import(name: str) -> Any:
|
|
179
181
|
return module
|
180
182
|
|
181
183
|
|
182
|
-
|
184
|
+
class LazyModuleState:
|
185
|
+
def __init__(self, module: types.ModuleType) -> None:
|
186
|
+
self.module = module
|
187
|
+
self.load_started = False
|
188
|
+
self.lock = threading.RLock()
|
189
|
+
|
190
|
+
def load(self) -> None:
|
191
|
+
with self.lock:
|
192
|
+
if self.load_started:
|
193
|
+
return
|
194
|
+
self.load_started = True
|
195
|
+
assert self.module.__spec__ is not None
|
196
|
+
assert self.module.__spec__.loader is not None
|
197
|
+
self.module.__spec__.loader.exec_module(self.module)
|
198
|
+
self.module.__class__ = types.ModuleType
|
199
|
+
|
200
|
+
|
201
|
+
class LazyModule(types.ModuleType):
|
202
|
+
def __getattribute__(self, name: str) -> Any:
|
203
|
+
state = object.__getattribute__(self, "__lazy_module_state__")
|
204
|
+
state.load()
|
205
|
+
return object.__getattribute__(self, name)
|
206
|
+
|
207
|
+
def __setattr__(self, name: str, value: Any) -> None:
|
208
|
+
state = object.__getattribute__(self, "__lazy_module_state__")
|
209
|
+
state.load()
|
210
|
+
object.__setattr__(self, name, value)
|
211
|
+
|
212
|
+
def __delattr__(self, name: str) -> None:
|
213
|
+
state = object.__getattribute__(self, "__lazy_module_state__")
|
214
|
+
state.load()
|
215
|
+
object.__delattr__(self, name)
|
216
|
+
|
217
|
+
|
218
|
+
def import_module_lazy(name: str) -> types.ModuleType:
|
183
219
|
"""Import a module lazily, only when it is used.
|
184
220
|
|
221
|
+
Inspired by importlib.util.LazyLoader, but improved so that the module loading is
|
222
|
+
thread-safe. Circular dependency between modules can lead to a deadlock if the two
|
223
|
+
modules are loaded from different threads.
|
224
|
+
|
185
225
|
:param (str) name: Dot-separated module path. E.g., 'scipy.stats'.
|
186
226
|
"""
|
187
227
|
try:
|
188
228
|
return sys.modules[name]
|
189
229
|
except KeyError:
|
190
|
-
|
191
|
-
if
|
230
|
+
spec = importlib.util.find_spec(name)
|
231
|
+
if spec is None:
|
192
232
|
raise ModuleNotFoundError
|
193
|
-
|
194
|
-
module =
|
233
|
+
module = importlib.util.module_from_spec(spec)
|
234
|
+
module.__lazy_module_state__ = LazyModuleState(module) # type: ignore
|
235
|
+
module.__class__ = LazyModule
|
195
236
|
sys.modules[name] = module
|
196
|
-
|
197
|
-
assert module_spec.loader is not None
|
198
|
-
lazy_loader = importlib.util.LazyLoader(module_spec.loader)
|
199
|
-
lazy_loader.exec_module(module)
|
200
|
-
|
201
237
|
return module
|
202
238
|
|
203
239
|
|
@@ -595,7 +631,7 @@ def json_friendly( # noqa: C901
|
|
595
631
|
|
596
632
|
|
597
633
|
def json_friendly_val(val: Any) -> Any:
|
598
|
-
"""Make any value (including dict, slice, sequence,
|
634
|
+
"""Make any value (including dict, slice, sequence, dataclass) JSON friendly."""
|
599
635
|
converted: Union[dict, list]
|
600
636
|
if isinstance(val, dict):
|
601
637
|
converted = {}
|
@@ -613,6 +649,9 @@ def json_friendly_val(val: Any) -> Any:
|
|
613
649
|
for value in val:
|
614
650
|
converted.append(json_friendly_val(value))
|
615
651
|
return converted
|
652
|
+
if is_dataclass(val) and not isinstance(val, type):
|
653
|
+
converted = asdict(val)
|
654
|
+
return converted
|
616
655
|
else:
|
617
656
|
if val.__class__.__module__ not in ("builtins", "__builtin__"):
|
618
657
|
val = str(val)
|
@@ -1246,7 +1285,17 @@ def guess_data_type(shape: Sequence[int], risky: bool = False) -> Optional[str]:
|
|
1246
1285
|
def download_file_from_url(
|
1247
1286
|
dest_path: str, source_url: str, api_key: Optional[str] = None
|
1248
1287
|
) -> None:
|
1249
|
-
|
1288
|
+
auth = None
|
1289
|
+
if not _thread_local_api_settings.cookies:
|
1290
|
+
auth = ("api", api_key or "")
|
1291
|
+
response = requests.get(
|
1292
|
+
source_url,
|
1293
|
+
auth=auth,
|
1294
|
+
headers=_thread_local_api_settings.headers,
|
1295
|
+
cookies=_thread_local_api_settings.cookies,
|
1296
|
+
stream=True,
|
1297
|
+
timeout=5,
|
1298
|
+
)
|
1250
1299
|
response.raise_for_status()
|
1251
1300
|
|
1252
1301
|
if os.sep in dest_path:
|
@@ -1289,7 +1338,9 @@ def from_human_size(size: str, units: Optional[List[Tuple[str, Any]]] = None) ->
|
|
1289
1338
|
|
1290
1339
|
def auto_project_name(program: Optional[str]) -> str:
|
1291
1340
|
# if we're in git, set project name to git repo name + relative path within repo
|
1292
|
-
|
1341
|
+
from wandb.sdk.lib.gitlib import GitRepo
|
1342
|
+
|
1343
|
+
root_dir = GitRepo().root_dir
|
1293
1344
|
if root_dir is None:
|
1294
1345
|
return "uncategorized"
|
1295
1346
|
# On windows, GitRepo returns paths in unix style, but os.path is windows
|
@@ -1311,10 +1362,10 @@ def auto_project_name(program: Optional[str]) -> str:
|
|
1311
1362
|
|
1312
1363
|
|
1313
1364
|
# TODO(hugh): Deprecate version here and use wandb/sdk/lib/paths.py
|
1314
|
-
def to_forward_slash_path(path: str) ->
|
1365
|
+
def to_forward_slash_path(path: str) -> str:
|
1315
1366
|
if platform.system() == "Windows":
|
1316
1367
|
path = path.replace("\\", "/")
|
1317
|
-
return
|
1368
|
+
return path
|
1318
1369
|
|
1319
1370
|
|
1320
1371
|
# TODO(hugh): Deprecate version here and use wandb/sdk/lib/paths.py
|
@@ -1487,23 +1538,14 @@ def check_windows_valid_filename(path: Union[int, str]) -> bool:
|
|
1487
1538
|
return not bool(re.search(RE_WINFNAMES, path)) # type: ignore
|
1488
1539
|
|
1489
1540
|
|
1490
|
-
def artifact_to_json(
|
1491
|
-
artifact: Union["wandb.sdk.wandb_artifacts.Artifact", "wandb.apis.public.Artifact"]
|
1492
|
-
) -> Dict[str, Any]:
|
1493
|
-
# public.Artifact has the _sequence name, instances of wandb.Artifact
|
1494
|
-
# just have the name
|
1495
|
-
if hasattr(artifact, "_sequence_name"):
|
1496
|
-
sequence_name = artifact._sequence_name
|
1497
|
-
else:
|
1498
|
-
sequence_name = artifact.name.split(":")[0]
|
1499
|
-
|
1541
|
+
def artifact_to_json(artifact: "Artifact") -> Dict[str, Any]:
|
1500
1542
|
return {
|
1501
1543
|
"_type": "artifactVersion",
|
1502
1544
|
"_version": "v0",
|
1503
1545
|
"id": artifact.id,
|
1504
1546
|
"version": artifact.source_version,
|
1505
|
-
"sequenceName":
|
1506
|
-
"usedAs": artifact.
|
1547
|
+
"sequenceName": artifact.source_name.split(":")[0],
|
1548
|
+
"usedAs": artifact.use_as,
|
1507
1549
|
}
|
1508
1550
|
|
1509
1551
|
|
@@ -1513,11 +1555,7 @@ def check_dict_contains_nested_artifact(d: dict, nested: bool = False) -> bool:
|
|
1513
1555
|
contains_artifacts = check_dict_contains_nested_artifact(item, True)
|
1514
1556
|
if contains_artifacts:
|
1515
1557
|
return True
|
1516
|
-
elif (
|
1517
|
-
isinstance(item, wandb.Artifact)
|
1518
|
-
or isinstance(item, wandb.apis.public.Artifact)
|
1519
|
-
or _is_artifact_string(item)
|
1520
|
-
) and nested:
|
1558
|
+
elif (isinstance(item, wandb.Artifact) or _is_artifact_string(item)) and nested:
|
1521
1559
|
return True
|
1522
1560
|
return False
|
1523
1561
|
|
@@ -1597,7 +1635,7 @@ def _resolve_aliases(aliases: Optional[Union[str, Iterable[str]]]) -> List[str]:
|
|
1597
1635
|
|
1598
1636
|
|
1599
1637
|
def _is_artifact_object(v: Any) -> bool:
|
1600
|
-
return isinstance(v, wandb.Artifact)
|
1638
|
+
return isinstance(v, wandb.Artifact)
|
1601
1639
|
|
1602
1640
|
|
1603
1641
|
def _is_artifact_string(v: Any) -> bool:
|
@@ -1,11 +1,12 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: wandb
|
3
|
-
Version: 0.15.
|
3
|
+
Version: 0.15.5
|
4
4
|
Summary: A CLI and library for interacting with the Weights and Biases API.
|
5
5
|
Home-page: https://github.com/wandb/wandb
|
6
6
|
Author: Weights & Biases
|
7
7
|
Author-email: support@wandb.com
|
8
8
|
License: MIT license
|
9
|
+
Platform: UNKNOWN
|
9
10
|
Classifier: Development Status :: 5 - Production/Stable
|
10
11
|
Classifier: Intended Audience :: Developers
|
11
12
|
Classifier: Intended Audience :: Science/Research
|
@@ -23,7 +24,7 @@ Classifier: Topic :: System :: Monitoring
|
|
23
24
|
Requires-Python: >=3.6
|
24
25
|
Description-Content-Type: text/markdown
|
25
26
|
License-File: LICENSE
|
26
|
-
Requires-Dist: Click (!=8.0.0,>=7.
|
27
|
+
Requires-Dist: Click (!=8.0.0,>=7.1)
|
27
28
|
Requires-Dist: GitPython (!=3.1.29,>=1.0.0)
|
28
29
|
Requires-Dist: requests (<3,>=2.0.0)
|
29
30
|
Requires-Dist: psutil (>=5.0.0)
|
@@ -58,18 +59,22 @@ Requires-Dist: google-cloud-storage ; extra == 'kubeflow'
|
|
58
59
|
Requires-Dist: sh ; extra == 'kubeflow'
|
59
60
|
Provides-Extra: launch
|
60
61
|
Requires-Dist: awscli ; extra == 'launch'
|
61
|
-
Requires-Dist:
|
62
|
-
Requires-Dist:
|
63
|
-
Requires-Dist:
|
64
|
-
Requires-Dist: iso8601 ; extra == 'launch'
|
65
|
-
Requires-Dist: typing-extensions ; extra == 'launch'
|
62
|
+
Requires-Dist: azure-identity ; extra == 'launch'
|
63
|
+
Requires-Dist: azure-containerregistry ; extra == 'launch'
|
64
|
+
Requires-Dist: azure-storage-blob ; extra == 'launch'
|
66
65
|
Requires-Dist: boto3 ; extra == 'launch'
|
67
66
|
Requires-Dist: botocore ; extra == 'launch'
|
67
|
+
Requires-Dist: chardet ; extra == 'launch'
|
68
68
|
Requires-Dist: google-auth ; extra == 'launch'
|
69
|
+
Requires-Dist: google-cloud-artifact-registry ; extra == 'launch'
|
69
70
|
Requires-Dist: google-cloud-compute ; extra == 'launch'
|
70
71
|
Requires-Dist: google-cloud-storage ; extra == 'launch'
|
71
|
-
Requires-Dist:
|
72
|
+
Requires-Dist: iso8601 ; extra == 'launch'
|
72
73
|
Requires-Dist: kubernetes ; extra == 'launch'
|
74
|
+
Requires-Dist: optuna ; extra == 'launch'
|
75
|
+
Requires-Dist: nbconvert ; extra == 'launch'
|
76
|
+
Requires-Dist: nbformat ; extra == 'launch'
|
77
|
+
Requires-Dist: typing-extensions ; extra == 'launch'
|
73
78
|
Provides-Extra: media
|
74
79
|
Requires-Dist: numpy ; extra == 'media'
|
75
80
|
Requires-Dist: moviepy ; extra == 'media'
|
@@ -80,7 +85,6 @@ Requires-Dist: plotly ; extra == 'media'
|
|
80
85
|
Requires-Dist: rdkit-pypi ; extra == 'media'
|
81
86
|
Provides-Extra: models
|
82
87
|
Requires-Dist: cloudpickle ; extra == 'models'
|
83
|
-
Provides-Extra: service
|
84
88
|
Provides-Extra: sweeps
|
85
89
|
Requires-Dist: sweeps (>=0.2.0) ; extra == 'sweeps'
|
86
90
|
|
@@ -179,3 +183,5 @@ Got questions, feedback or want to join a community of ML engineers working on e
|
|
179
183
|
<a href="https://bit.ly/wb-slack"><img src="https://svgshare.com/i/M93.svg" alt="slack" width="55"/></a> Join our [slack](https://bit.ly/wb-slack) community.
|
180
184
|
|
181
185
|
[![Twitter](https://img.shields.io/twitter/follow/weights_biases?style=social)](https://twitter.com/weights_biases) Follow us on [Twitter](https://twitter.com/weights_biases).
|
186
|
+
|
187
|
+
|