wandb 0.18.2__py3-none-musllinux_1_2_x86_64.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.
- package_readme.md +89 -0
- wandb/__init__.py +245 -0
- wandb/__init__.pyi +1139 -0
- wandb/__main__.py +3 -0
- wandb/_globals.py +19 -0
- wandb/agents/__init__.py +0 -0
- wandb/agents/pyagent.py +363 -0
- wandb/analytics/__init__.py +3 -0
- wandb/analytics/sentry.py +266 -0
- wandb/apis/__init__.py +48 -0
- wandb/apis/attrs.py +40 -0
- wandb/apis/importers/__init__.py +1 -0
- wandb/apis/importers/internals/internal.py +385 -0
- wandb/apis/importers/internals/protocols.py +99 -0
- wandb/apis/importers/internals/util.py +78 -0
- wandb/apis/importers/mlflow.py +254 -0
- wandb/apis/importers/validation.py +108 -0
- wandb/apis/importers/wandb.py +1603 -0
- wandb/apis/internal.py +232 -0
- wandb/apis/normalize.py +89 -0
- wandb/apis/paginator.py +81 -0
- wandb/apis/public/__init__.py +34 -0
- wandb/apis/public/api.py +1305 -0
- wandb/apis/public/artifacts.py +1090 -0
- wandb/apis/public/const.py +4 -0
- wandb/apis/public/files.py +195 -0
- wandb/apis/public/history.py +149 -0
- wandb/apis/public/jobs.py +659 -0
- wandb/apis/public/projects.py +154 -0
- wandb/apis/public/query_generator.py +166 -0
- wandb/apis/public/reports.py +469 -0
- wandb/apis/public/runs.py +914 -0
- wandb/apis/public/sweeps.py +240 -0
- wandb/apis/public/teams.py +198 -0
- wandb/apis/public/users.py +136 -0
- wandb/apis/reports/__init__.py +1 -0
- wandb/apis/reports/v1/__init__.py +8 -0
- wandb/apis/reports/v2/__init__.py +8 -0
- wandb/apis/workspaces/__init__.py +8 -0
- wandb/beta/workflows.py +288 -0
- wandb/bin/nvidia_gpu_stats +0 -0
- wandb/bin/wandb-core +0 -0
- wandb/cli/__init__.py +0 -0
- wandb/cli/cli.py +3004 -0
- wandb/data_types.py +63 -0
- wandb/docker/__init__.py +342 -0
- wandb/docker/auth.py +436 -0
- wandb/docker/wandb-entrypoint.sh +33 -0
- wandb/docker/www_authenticate.py +94 -0
- wandb/env.py +514 -0
- wandb/errors/__init__.py +17 -0
- wandb/errors/errors.py +37 -0
- wandb/errors/term.py +103 -0
- wandb/errors/util.py +57 -0
- wandb/errors/warnings.py +2 -0
- wandb/filesync/__init__.py +0 -0
- wandb/filesync/dir_watcher.py +403 -0
- wandb/filesync/stats.py +100 -0
- wandb/filesync/step_checksum.py +142 -0
- wandb/filesync/step_prepare.py +179 -0
- wandb/filesync/step_upload.py +290 -0
- wandb/filesync/upload_job.py +142 -0
- wandb/integration/__init__.py +0 -0
- wandb/integration/catboost/__init__.py +5 -0
- wandb/integration/catboost/catboost.py +178 -0
- wandb/integration/cohere/__init__.py +3 -0
- wandb/integration/cohere/cohere.py +21 -0
- wandb/integration/cohere/resolver.py +347 -0
- wandb/integration/diffusers/__init__.py +3 -0
- wandb/integration/diffusers/autologger.py +76 -0
- wandb/integration/diffusers/pipeline_resolver.py +50 -0
- wandb/integration/diffusers/resolvers/__init__.py +9 -0
- wandb/integration/diffusers/resolvers/multimodal.py +882 -0
- wandb/integration/diffusers/resolvers/utils.py +102 -0
- wandb/integration/fastai/__init__.py +249 -0
- wandb/integration/gym/__init__.py +105 -0
- wandb/integration/huggingface/__init__.py +3 -0
- wandb/integration/huggingface/huggingface.py +18 -0
- wandb/integration/huggingface/resolver.py +213 -0
- wandb/integration/keras/__init__.py +11 -0
- wandb/integration/keras/callbacks/__init__.py +5 -0
- wandb/integration/keras/callbacks/metrics_logger.py +136 -0
- wandb/integration/keras/callbacks/model_checkpoint.py +195 -0
- wandb/integration/keras/callbacks/tables_builder.py +226 -0
- wandb/integration/keras/keras.py +1091 -0
- wandb/integration/kfp/__init__.py +6 -0
- wandb/integration/kfp/helpers.py +28 -0
- wandb/integration/kfp/kfp_patch.py +324 -0
- wandb/integration/kfp/wandb_logging.py +182 -0
- wandb/integration/langchain/__init__.py +3 -0
- wandb/integration/langchain/wandb_tracer.py +48 -0
- wandb/integration/lightgbm/__init__.py +239 -0
- wandb/integration/lightning/__init__.py +0 -0
- wandb/integration/lightning/fabric/__init__.py +3 -0
- wandb/integration/lightning/fabric/logger.py +762 -0
- wandb/integration/magic.py +556 -0
- wandb/integration/metaflow/__init__.py +3 -0
- wandb/integration/metaflow/metaflow.py +383 -0
- wandb/integration/openai/__init__.py +3 -0
- wandb/integration/openai/fine_tuning.py +480 -0
- wandb/integration/openai/openai.py +22 -0
- wandb/integration/openai/resolver.py +240 -0
- wandb/integration/prodigy/__init__.py +3 -0
- wandb/integration/prodigy/prodigy.py +299 -0
- wandb/integration/sacred/__init__.py +117 -0
- wandb/integration/sagemaker/__init__.py +12 -0
- wandb/integration/sagemaker/auth.py +28 -0
- wandb/integration/sagemaker/config.py +49 -0
- wandb/integration/sagemaker/files.py +3 -0
- wandb/integration/sagemaker/resources.py +34 -0
- wandb/integration/sb3/__init__.py +3 -0
- wandb/integration/sb3/sb3.py +153 -0
- wandb/integration/sklearn/__init__.py +37 -0
- wandb/integration/sklearn/calculate/__init__.py +32 -0
- wandb/integration/sklearn/calculate/calibration_curves.py +125 -0
- wandb/integration/sklearn/calculate/class_proportions.py +68 -0
- wandb/integration/sklearn/calculate/confusion_matrix.py +93 -0
- wandb/integration/sklearn/calculate/decision_boundaries.py +40 -0
- wandb/integration/sklearn/calculate/elbow_curve.py +55 -0
- wandb/integration/sklearn/calculate/feature_importances.py +67 -0
- wandb/integration/sklearn/calculate/learning_curve.py +64 -0
- wandb/integration/sklearn/calculate/outlier_candidates.py +69 -0
- wandb/integration/sklearn/calculate/residuals.py +86 -0
- wandb/integration/sklearn/calculate/silhouette.py +118 -0
- wandb/integration/sklearn/calculate/summary_metrics.py +62 -0
- wandb/integration/sklearn/plot/__init__.py +35 -0
- wandb/integration/sklearn/plot/classifier.py +329 -0
- wandb/integration/sklearn/plot/clusterer.py +146 -0
- wandb/integration/sklearn/plot/regressor.py +121 -0
- wandb/integration/sklearn/plot/shared.py +91 -0
- wandb/integration/sklearn/utils.py +183 -0
- wandb/integration/tensorboard/__init__.py +10 -0
- wandb/integration/tensorboard/log.py +355 -0
- wandb/integration/tensorboard/monkeypatch.py +185 -0
- wandb/integration/tensorflow/__init__.py +5 -0
- wandb/integration/tensorflow/estimator_hook.py +54 -0
- wandb/integration/torch/__init__.py +0 -0
- wandb/integration/torch/wandb_torch.py +554 -0
- wandb/integration/ultralytics/__init__.py +11 -0
- wandb/integration/ultralytics/bbox_utils.py +208 -0
- wandb/integration/ultralytics/callback.py +524 -0
- wandb/integration/ultralytics/classification_utils.py +83 -0
- wandb/integration/ultralytics/mask_utils.py +202 -0
- wandb/integration/ultralytics/pose_utils.py +103 -0
- wandb/integration/xgboost/__init__.py +11 -0
- wandb/integration/xgboost/xgboost.py +189 -0
- wandb/integration/yolov8/__init__.py +0 -0
- wandb/integration/yolov8/yolov8.py +284 -0
- wandb/jupyter.py +515 -0
- wandb/magic.py +3 -0
- wandb/mpmain/__init__.py +0 -0
- wandb/mpmain/__main__.py +1 -0
- wandb/old/__init__.py +0 -0
- wandb/old/core.py +53 -0
- wandb/old/settings.py +173 -0
- wandb/old/summary.py +440 -0
- wandb/plot/__init__.py +19 -0
- wandb/plot/bar.py +45 -0
- wandb/plot/confusion_matrix.py +100 -0
- wandb/plot/histogram.py +39 -0
- wandb/plot/line.py +43 -0
- wandb/plot/line_series.py +88 -0
- wandb/plot/pr_curve.py +136 -0
- wandb/plot/roc_curve.py +118 -0
- wandb/plot/scatter.py +32 -0
- wandb/plot/utils.py +183 -0
- wandb/plot/viz.py +123 -0
- wandb/proto/__init__.py +0 -0
- wandb/proto/v3/__init__.py +0 -0
- wandb/proto/v3/wandb_base_pb2.py +55 -0
- wandb/proto/v3/wandb_internal_pb2.py +1608 -0
- wandb/proto/v3/wandb_server_pb2.py +208 -0
- wandb/proto/v3/wandb_settings_pb2.py +112 -0
- wandb/proto/v3/wandb_telemetry_pb2.py +106 -0
- wandb/proto/v4/__init__.py +0 -0
- wandb/proto/v4/wandb_base_pb2.py +30 -0
- wandb/proto/v4/wandb_internal_pb2.py +360 -0
- wandb/proto/v4/wandb_server_pb2.py +63 -0
- wandb/proto/v4/wandb_settings_pb2.py +45 -0
- wandb/proto/v4/wandb_telemetry_pb2.py +41 -0
- wandb/proto/v5/wandb_base_pb2.py +31 -0
- wandb/proto/v5/wandb_internal_pb2.py +361 -0
- wandb/proto/v5/wandb_server_pb2.py +64 -0
- wandb/proto/v5/wandb_settings_pb2.py +46 -0
- wandb/proto/v5/wandb_telemetry_pb2.py +42 -0
- wandb/proto/wandb_base_pb2.py +10 -0
- wandb/proto/wandb_deprecated.py +53 -0
- wandb/proto/wandb_generate_deprecated.py +34 -0
- wandb/proto/wandb_generate_proto.py +49 -0
- wandb/proto/wandb_internal_pb2.py +16 -0
- wandb/proto/wandb_server_pb2.py +10 -0
- wandb/proto/wandb_settings_pb2.py +10 -0
- wandb/proto/wandb_telemetry_pb2.py +10 -0
- wandb/py.typed +0 -0
- wandb/sdk/__init__.py +37 -0
- wandb/sdk/artifacts/__init__.py +0 -0
- wandb/sdk/artifacts/_validators.py +90 -0
- wandb/sdk/artifacts/artifact.py +2389 -0
- wandb/sdk/artifacts/artifact_download_logger.py +43 -0
- wandb/sdk/artifacts/artifact_file_cache.py +253 -0
- wandb/sdk/artifacts/artifact_instance_cache.py +17 -0
- wandb/sdk/artifacts/artifact_manifest.py +74 -0
- wandb/sdk/artifacts/artifact_manifest_entry.py +249 -0
- wandb/sdk/artifacts/artifact_manifests/__init__.py +0 -0
- wandb/sdk/artifacts/artifact_manifests/artifact_manifest_v1.py +92 -0
- wandb/sdk/artifacts/artifact_saver.py +269 -0
- wandb/sdk/artifacts/artifact_state.py +11 -0
- wandb/sdk/artifacts/artifact_ttl.py +7 -0
- wandb/sdk/artifacts/exceptions.py +57 -0
- wandb/sdk/artifacts/staging.py +25 -0
- wandb/sdk/artifacts/storage_handler.py +62 -0
- wandb/sdk/artifacts/storage_handlers/__init__.py +0 -0
- wandb/sdk/artifacts/storage_handlers/azure_handler.py +208 -0
- wandb/sdk/artifacts/storage_handlers/gcs_handler.py +228 -0
- wandb/sdk/artifacts/storage_handlers/http_handler.py +114 -0
- wandb/sdk/artifacts/storage_handlers/local_file_handler.py +141 -0
- wandb/sdk/artifacts/storage_handlers/multi_handler.py +56 -0
- wandb/sdk/artifacts/storage_handlers/s3_handler.py +300 -0
- wandb/sdk/artifacts/storage_handlers/tracking_handler.py +72 -0
- wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +135 -0
- wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +74 -0
- wandb/sdk/artifacts/storage_layout.py +6 -0
- wandb/sdk/artifacts/storage_policies/__init__.py +4 -0
- wandb/sdk/artifacts/storage_policies/register.py +1 -0
- wandb/sdk/artifacts/storage_policies/wandb_storage_policy.py +378 -0
- wandb/sdk/artifacts/storage_policy.py +72 -0
- wandb/sdk/backend/__init__.py +0 -0
- wandb/sdk/backend/backend.py +222 -0
- wandb/sdk/data_types/__init__.py +0 -0
- wandb/sdk/data_types/_dtypes.py +914 -0
- wandb/sdk/data_types/_private.py +10 -0
- wandb/sdk/data_types/audio.py +165 -0
- wandb/sdk/data_types/base_types/__init__.py +0 -0
- wandb/sdk/data_types/base_types/json_metadata.py +55 -0
- wandb/sdk/data_types/base_types/media.py +315 -0
- wandb/sdk/data_types/base_types/wb_value.py +272 -0
- wandb/sdk/data_types/bokeh.py +70 -0
- wandb/sdk/data_types/graph.py +405 -0
- wandb/sdk/data_types/helper_types/__init__.py +0 -0
- wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +295 -0
- wandb/sdk/data_types/helper_types/classes.py +159 -0
- wandb/sdk/data_types/helper_types/image_mask.py +235 -0
- wandb/sdk/data_types/histogram.py +96 -0
- wandb/sdk/data_types/html.py +115 -0
- wandb/sdk/data_types/image.py +845 -0
- wandb/sdk/data_types/molecule.py +241 -0
- wandb/sdk/data_types/object_3d.py +474 -0
- wandb/sdk/data_types/plotly.py +82 -0
- wandb/sdk/data_types/saved_model.py +446 -0
- wandb/sdk/data_types/table.py +1204 -0
- wandb/sdk/data_types/trace_tree.py +438 -0
- wandb/sdk/data_types/utils.py +229 -0
- wandb/sdk/data_types/video.py +247 -0
- wandb/sdk/integration_utils/__init__.py +0 -0
- wandb/sdk/integration_utils/auto_logging.py +239 -0
- wandb/sdk/integration_utils/data_logging.py +475 -0
- wandb/sdk/interface/__init__.py +0 -0
- wandb/sdk/interface/constants.py +4 -0
- wandb/sdk/interface/interface.py +972 -0
- wandb/sdk/interface/interface_queue.py +59 -0
- wandb/sdk/interface/interface_relay.py +53 -0
- wandb/sdk/interface/interface_shared.py +537 -0
- wandb/sdk/interface/interface_sock.py +61 -0
- wandb/sdk/interface/message_future.py +27 -0
- wandb/sdk/interface/message_future_poll.py +50 -0
- wandb/sdk/interface/router.py +118 -0
- wandb/sdk/interface/router_queue.py +44 -0
- wandb/sdk/interface/router_relay.py +39 -0
- wandb/sdk/interface/router_sock.py +36 -0
- wandb/sdk/interface/summary_record.py +67 -0
- wandb/sdk/internal/__init__.py +0 -0
- wandb/sdk/internal/context.py +89 -0
- wandb/sdk/internal/datastore.py +297 -0
- wandb/sdk/internal/file_pusher.py +181 -0
- wandb/sdk/internal/file_stream.py +695 -0
- wandb/sdk/internal/flow_control.py +263 -0
- wandb/sdk/internal/handler.py +901 -0
- wandb/sdk/internal/internal.py +417 -0
- wandb/sdk/internal/internal_api.py +4358 -0
- wandb/sdk/internal/internal_util.py +100 -0
- wandb/sdk/internal/job_builder.py +629 -0
- wandb/sdk/internal/profiler.py +78 -0
- wandb/sdk/internal/progress.py +83 -0
- wandb/sdk/internal/run.py +25 -0
- wandb/sdk/internal/sample.py +70 -0
- wandb/sdk/internal/sender.py +1686 -0
- wandb/sdk/internal/sender_config.py +197 -0
- wandb/sdk/internal/settings_static.py +90 -0
- wandb/sdk/internal/system/__init__.py +0 -0
- wandb/sdk/internal/system/assets/__init__.py +27 -0
- wandb/sdk/internal/system/assets/aggregators.py +37 -0
- wandb/sdk/internal/system/assets/asset_registry.py +20 -0
- wandb/sdk/internal/system/assets/cpu.py +163 -0
- wandb/sdk/internal/system/assets/disk.py +210 -0
- wandb/sdk/internal/system/assets/gpu.py +416 -0
- wandb/sdk/internal/system/assets/gpu_amd.py +239 -0
- wandb/sdk/internal/system/assets/gpu_apple.py +177 -0
- wandb/sdk/internal/system/assets/interfaces.py +207 -0
- wandb/sdk/internal/system/assets/ipu.py +177 -0
- wandb/sdk/internal/system/assets/memory.py +166 -0
- wandb/sdk/internal/system/assets/network.py +125 -0
- wandb/sdk/internal/system/assets/open_metrics.py +299 -0
- wandb/sdk/internal/system/assets/tpu.py +154 -0
- wandb/sdk/internal/system/assets/trainium.py +399 -0
- wandb/sdk/internal/system/env_probe_helpers.py +13 -0
- wandb/sdk/internal/system/system_info.py +249 -0
- wandb/sdk/internal/system/system_monitor.py +229 -0
- wandb/sdk/internal/tb_watcher.py +518 -0
- wandb/sdk/internal/thread_local_settings.py +18 -0
- wandb/sdk/internal/writer.py +206 -0
- wandb/sdk/launch/__init__.py +14 -0
- wandb/sdk/launch/_launch.py +330 -0
- wandb/sdk/launch/_launch_add.py +255 -0
- wandb/sdk/launch/_project_spec.py +566 -0
- wandb/sdk/launch/agent/__init__.py +5 -0
- wandb/sdk/launch/agent/agent.py +924 -0
- wandb/sdk/launch/agent/config.py +296 -0
- wandb/sdk/launch/agent/job_status_tracker.py +53 -0
- wandb/sdk/launch/agent/run_queue_item_file_saver.py +45 -0
- wandb/sdk/launch/builder/__init__.py +0 -0
- wandb/sdk/launch/builder/abstract.py +156 -0
- wandb/sdk/launch/builder/build.py +297 -0
- wandb/sdk/launch/builder/context_manager.py +235 -0
- wandb/sdk/launch/builder/docker_builder.py +177 -0
- wandb/sdk/launch/builder/kaniko_builder.py +595 -0
- wandb/sdk/launch/builder/noop.py +58 -0
- wandb/sdk/launch/builder/templates/_wandb_bootstrap.py +188 -0
- wandb/sdk/launch/builder/templates/dockerfile.py +92 -0
- wandb/sdk/launch/create_job.py +528 -0
- wandb/sdk/launch/environment/abstract.py +29 -0
- wandb/sdk/launch/environment/aws_environment.py +322 -0
- wandb/sdk/launch/environment/azure_environment.py +105 -0
- wandb/sdk/launch/environment/gcp_environment.py +335 -0
- wandb/sdk/launch/environment/local_environment.py +66 -0
- wandb/sdk/launch/errors.py +19 -0
- wandb/sdk/launch/git_reference.py +109 -0
- wandb/sdk/launch/inputs/files.py +148 -0
- wandb/sdk/launch/inputs/internal.py +315 -0
- wandb/sdk/launch/inputs/manage.py +113 -0
- wandb/sdk/launch/inputs/schema.py +39 -0
- wandb/sdk/launch/loader.py +249 -0
- wandb/sdk/launch/registry/abstract.py +48 -0
- wandb/sdk/launch/registry/anon.py +29 -0
- wandb/sdk/launch/registry/azure_container_registry.py +124 -0
- wandb/sdk/launch/registry/elastic_container_registry.py +192 -0
- wandb/sdk/launch/registry/google_artifact_registry.py +219 -0
- wandb/sdk/launch/registry/local_registry.py +67 -0
- wandb/sdk/launch/runner/__init__.py +0 -0
- wandb/sdk/launch/runner/abstract.py +195 -0
- wandb/sdk/launch/runner/kubernetes_monitor.py +474 -0
- wandb/sdk/launch/runner/kubernetes_runner.py +963 -0
- wandb/sdk/launch/runner/local_container.py +301 -0
- wandb/sdk/launch/runner/local_process.py +78 -0
- wandb/sdk/launch/runner/sagemaker_runner.py +426 -0
- wandb/sdk/launch/runner/vertex_runner.py +230 -0
- wandb/sdk/launch/sweeps/__init__.py +39 -0
- wandb/sdk/launch/sweeps/scheduler.py +742 -0
- wandb/sdk/launch/sweeps/scheduler_sweep.py +91 -0
- wandb/sdk/launch/sweeps/utils.py +316 -0
- wandb/sdk/launch/utils.py +746 -0
- wandb/sdk/launch/wandb_reference.py +138 -0
- wandb/sdk/lib/__init__.py +5 -0
- wandb/sdk/lib/_settings_toposort_generate.py +159 -0
- wandb/sdk/lib/_settings_toposort_generated.py +250 -0
- wandb/sdk/lib/_wburls_generate.py +25 -0
- wandb/sdk/lib/_wburls_generated.py +22 -0
- wandb/sdk/lib/apikey.py +273 -0
- wandb/sdk/lib/capped_dict.py +26 -0
- wandb/sdk/lib/config_util.py +101 -0
- wandb/sdk/lib/credentials.py +141 -0
- wandb/sdk/lib/deprecate.py +42 -0
- wandb/sdk/lib/disabled.py +29 -0
- wandb/sdk/lib/exit_hooks.py +54 -0
- wandb/sdk/lib/file_stream_utils.py +118 -0
- wandb/sdk/lib/filenames.py +64 -0
- wandb/sdk/lib/filesystem.py +372 -0
- wandb/sdk/lib/fsm.py +174 -0
- wandb/sdk/lib/gitlib.py +239 -0
- wandb/sdk/lib/gql_request.py +65 -0
- wandb/sdk/lib/handler_util.py +21 -0
- wandb/sdk/lib/hashutil.py +84 -0
- wandb/sdk/lib/import_hooks.py +275 -0
- wandb/sdk/lib/ipython.py +146 -0
- wandb/sdk/lib/json_util.py +80 -0
- wandb/sdk/lib/lazyloader.py +63 -0
- wandb/sdk/lib/mailbox.py +460 -0
- wandb/sdk/lib/module.py +69 -0
- wandb/sdk/lib/paths.py +106 -0
- wandb/sdk/lib/preinit.py +42 -0
- wandb/sdk/lib/printer.py +313 -0
- wandb/sdk/lib/proto_util.py +90 -0
- wandb/sdk/lib/redirect.py +845 -0
- wandb/sdk/lib/reporting.py +99 -0
- wandb/sdk/lib/retry.py +289 -0
- wandb/sdk/lib/run_moment.py +78 -0
- wandb/sdk/lib/runid.py +12 -0
- wandb/sdk/lib/server.py +52 -0
- wandb/sdk/lib/service_connection.py +216 -0
- wandb/sdk/lib/service_token.py +94 -0
- wandb/sdk/lib/sock_client.py +295 -0
- wandb/sdk/lib/sparkline.py +45 -0
- wandb/sdk/lib/telemetry.py +100 -0
- wandb/sdk/lib/timed_input.py +133 -0
- wandb/sdk/lib/timer.py +19 -0
- wandb/sdk/lib/tracelog.py +255 -0
- wandb/sdk/lib/wburls.py +46 -0
- wandb/sdk/service/__init__.py +0 -0
- wandb/sdk/service/_startup_debug.py +22 -0
- wandb/sdk/service/port_file.py +53 -0
- wandb/sdk/service/server.py +116 -0
- wandb/sdk/service/server_sock.py +276 -0
- wandb/sdk/service/service.py +242 -0
- wandb/sdk/service/streams.py +417 -0
- wandb/sdk/verify/__init__.py +0 -0
- wandb/sdk/verify/verify.py +501 -0
- wandb/sdk/wandb_alerts.py +12 -0
- wandb/sdk/wandb_config.py +322 -0
- wandb/sdk/wandb_helper.py +54 -0
- wandb/sdk/wandb_init.py +1266 -0
- wandb/sdk/wandb_login.py +349 -0
- wandb/sdk/wandb_metric.py +110 -0
- wandb/sdk/wandb_require.py +97 -0
- wandb/sdk/wandb_require_helpers.py +44 -0
- wandb/sdk/wandb_run.py +4236 -0
- wandb/sdk/wandb_settings.py +2001 -0
- wandb/sdk/wandb_setup.py +409 -0
- wandb/sdk/wandb_summary.py +150 -0
- wandb/sdk/wandb_sweep.py +119 -0
- wandb/sdk/wandb_sync.py +81 -0
- wandb/sdk/wandb_watch.py +144 -0
- wandb/sklearn.py +35 -0
- wandb/sync/__init__.py +3 -0
- wandb/sync/sync.py +443 -0
- wandb/trigger.py +29 -0
- wandb/util.py +1956 -0
- wandb/vendor/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/setup.py +40 -0
- wandb/vendor/gql-0.2.0/tests/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/tests/starwars/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/tests/starwars/fixtures.py +96 -0
- wandb/vendor/gql-0.2.0/tests/starwars/schema.py +146 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_dsl.py +293 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_query.py +355 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_validation.py +171 -0
- wandb/vendor/gql-0.2.0/tests/test_client.py +31 -0
- wandb/vendor/gql-0.2.0/tests/test_transport.py +89 -0
- wandb/vendor/gql-0.2.0/wandb_gql/__init__.py +4 -0
- wandb/vendor/gql-0.2.0/wandb_gql/client.py +75 -0
- wandb/vendor/gql-0.2.0/wandb_gql/dsl.py +152 -0
- wandb/vendor/gql-0.2.0/wandb_gql/gql.py +10 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/http.py +6 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/local_schema.py +15 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/requests.py +46 -0
- wandb/vendor/gql-0.2.0/wandb_gql/utils.py +21 -0
- wandb/vendor/graphql-core-1.1/setup.py +86 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/__init__.py +287 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/__init__.py +6 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/base.py +42 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/format_error.py +11 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/located_error.py +29 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/syntax_error.py +36 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/__init__.py +26 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/base.py +311 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executor.py +398 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/asyncio.py +53 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/gevent.py +22 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/process.py +32 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/sync.py +7 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/thread.py +35 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/utils.py +6 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/executor.py +66 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/fragment.py +252 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/resolver.py +151 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/utils.py +7 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/middleware.py +57 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/values.py +145 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/graphql.py +60 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/ast.py +1349 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/base.py +19 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/lexer.py +435 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/location.py +30 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/parser.py +779 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/printer.py +193 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/source.py +18 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/visitor.py +222 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/visitor_meta.py +82 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/cached_property.py +17 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/contain_subset.py +28 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/default_ordered_dict.py +40 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/ordereddict.py +8 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/pair_set.py +43 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/version.py +78 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/__init__.py +67 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/definition.py +619 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/directives.py +132 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/introspection.py +440 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/scalars.py +131 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/schema.py +100 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/typemap.py +145 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/assert_valid_name.py +9 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_from_value.py +65 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_to_code.py +49 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_to_dict.py +24 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/base.py +75 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/build_ast_schema.py +291 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/build_client_schema.py +250 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/concat_ast.py +9 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/extend_schema.py +357 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/get_field_def.py +27 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/get_operation_ast.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/introspection_query.py +90 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/is_valid_literal_value.py +67 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/is_valid_value.py +66 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/quoted_or_list.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/schema_printer.py +168 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/suggestion_list.py +56 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_comparators.py +69 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_from_ast.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_info.py +149 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/value_from_ast.py +69 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/__init__.py +4 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/__init__.py +79 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/arguments_of_correct_type.py +24 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/base.py +8 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/default_values_of_correct_type.py +44 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/fields_on_correct_type.py +113 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/fragments_on_composite_types.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_argument_names.py +70 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_directives.py +97 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_fragment_names.py +19 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_type_names.py +43 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/lone_anonymous_operation.py +23 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_fragment_cycles.py +59 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_undefined_variables.py +36 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_unused_fragments.py +38 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_unused_variables.py +37 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/overlapping_fields_can_be_merged.py +529 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/possible_fragment_spreads.py +44 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/provided_non_null_arguments.py +46 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/scalar_leafs.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_argument_names.py +32 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_fragment_names.py +28 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_input_field_names.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_operation_names.py +31 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_variable_names.py +27 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/variables_are_input_types.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/variables_in_allowed_position.py +53 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/validation.py +158 -0
- wandb/vendor/promise-2.3.0/conftest.py +30 -0
- wandb/vendor/promise-2.3.0/setup.py +64 -0
- wandb/vendor/promise-2.3.0/tests/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/tests/conftest.py +8 -0
- wandb/vendor/promise-2.3.0/tests/test_awaitable.py +32 -0
- wandb/vendor/promise-2.3.0/tests/test_awaitable_35.py +47 -0
- wandb/vendor/promise-2.3.0/tests/test_benchmark.py +116 -0
- wandb/vendor/promise-2.3.0/tests/test_complex_threads.py +23 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader.py +452 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader_awaitable_35.py +99 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader_extra.py +65 -0
- wandb/vendor/promise-2.3.0/tests/test_extra.py +670 -0
- wandb/vendor/promise-2.3.0/tests/test_issues.py +132 -0
- wandb/vendor/promise-2.3.0/tests/test_promise_list.py +70 -0
- wandb/vendor/promise-2.3.0/tests/test_spec.py +584 -0
- wandb/vendor/promise-2.3.0/tests/test_thread_safety.py +115 -0
- wandb/vendor/promise-2.3.0/tests/utils.py +3 -0
- wandb/vendor/promise-2.3.0/wandb_promise/__init__.py +38 -0
- wandb/vendor/promise-2.3.0/wandb_promise/async_.py +135 -0
- wandb/vendor/promise-2.3.0/wandb_promise/compat.py +32 -0
- wandb/vendor/promise-2.3.0/wandb_promise/dataloader.py +326 -0
- wandb/vendor/promise-2.3.0/wandb_promise/iterate_promise.py +12 -0
- wandb/vendor/promise-2.3.0/wandb_promise/promise.py +848 -0
- wandb/vendor/promise-2.3.0/wandb_promise/promise_list.py +151 -0
- wandb/vendor/promise-2.3.0/wandb_promise/pyutils/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/wandb_promise/pyutils/version.py +83 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/asyncio.py +22 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/gevent.py +21 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/immediate.py +27 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/thread.py +18 -0
- wandb/vendor/promise-2.3.0/wandb_promise/utils.py +56 -0
- wandb/vendor/pygments/__init__.py +90 -0
- wandb/vendor/pygments/cmdline.py +568 -0
- wandb/vendor/pygments/console.py +74 -0
- wandb/vendor/pygments/filter.py +74 -0
- wandb/vendor/pygments/filters/__init__.py +350 -0
- wandb/vendor/pygments/formatter.py +95 -0
- wandb/vendor/pygments/formatters/__init__.py +153 -0
- wandb/vendor/pygments/formatters/_mapping.py +85 -0
- wandb/vendor/pygments/formatters/bbcode.py +109 -0
- wandb/vendor/pygments/formatters/html.py +851 -0
- wandb/vendor/pygments/formatters/img.py +600 -0
- wandb/vendor/pygments/formatters/irc.py +182 -0
- wandb/vendor/pygments/formatters/latex.py +482 -0
- wandb/vendor/pygments/formatters/other.py +160 -0
- wandb/vendor/pygments/formatters/rtf.py +147 -0
- wandb/vendor/pygments/formatters/svg.py +153 -0
- wandb/vendor/pygments/formatters/terminal.py +136 -0
- wandb/vendor/pygments/formatters/terminal256.py +309 -0
- wandb/vendor/pygments/lexer.py +871 -0
- wandb/vendor/pygments/lexers/__init__.py +329 -0
- wandb/vendor/pygments/lexers/_asy_builtins.py +1645 -0
- wandb/vendor/pygments/lexers/_cl_builtins.py +232 -0
- wandb/vendor/pygments/lexers/_cocoa_builtins.py +72 -0
- wandb/vendor/pygments/lexers/_csound_builtins.py +1346 -0
- wandb/vendor/pygments/lexers/_lasso_builtins.py +5327 -0
- wandb/vendor/pygments/lexers/_lua_builtins.py +295 -0
- wandb/vendor/pygments/lexers/_mapping.py +500 -0
- wandb/vendor/pygments/lexers/_mql_builtins.py +1172 -0
- wandb/vendor/pygments/lexers/_openedge_builtins.py +2547 -0
- wandb/vendor/pygments/lexers/_php_builtins.py +4756 -0
- wandb/vendor/pygments/lexers/_postgres_builtins.py +621 -0
- wandb/vendor/pygments/lexers/_scilab_builtins.py +3094 -0
- wandb/vendor/pygments/lexers/_sourcemod_builtins.py +1163 -0
- wandb/vendor/pygments/lexers/_stan_builtins.py +532 -0
- wandb/vendor/pygments/lexers/_stata_builtins.py +419 -0
- wandb/vendor/pygments/lexers/_tsql_builtins.py +1004 -0
- wandb/vendor/pygments/lexers/_vim_builtins.py +1939 -0
- wandb/vendor/pygments/lexers/actionscript.py +240 -0
- wandb/vendor/pygments/lexers/agile.py +24 -0
- wandb/vendor/pygments/lexers/algebra.py +221 -0
- wandb/vendor/pygments/lexers/ambient.py +76 -0
- wandb/vendor/pygments/lexers/ampl.py +87 -0
- wandb/vendor/pygments/lexers/apl.py +101 -0
- wandb/vendor/pygments/lexers/archetype.py +318 -0
- wandb/vendor/pygments/lexers/asm.py +641 -0
- wandb/vendor/pygments/lexers/automation.py +374 -0
- wandb/vendor/pygments/lexers/basic.py +500 -0
- wandb/vendor/pygments/lexers/bibtex.py +160 -0
- wandb/vendor/pygments/lexers/business.py +612 -0
- wandb/vendor/pygments/lexers/c_cpp.py +252 -0
- wandb/vendor/pygments/lexers/c_like.py +541 -0
- wandb/vendor/pygments/lexers/capnproto.py +78 -0
- wandb/vendor/pygments/lexers/chapel.py +102 -0
- wandb/vendor/pygments/lexers/clean.py +288 -0
- wandb/vendor/pygments/lexers/compiled.py +34 -0
- wandb/vendor/pygments/lexers/configs.py +833 -0
- wandb/vendor/pygments/lexers/console.py +114 -0
- wandb/vendor/pygments/lexers/crystal.py +393 -0
- wandb/vendor/pygments/lexers/csound.py +366 -0
- wandb/vendor/pygments/lexers/css.py +689 -0
- wandb/vendor/pygments/lexers/d.py +251 -0
- wandb/vendor/pygments/lexers/dalvik.py +125 -0
- wandb/vendor/pygments/lexers/data.py +555 -0
- wandb/vendor/pygments/lexers/diff.py +165 -0
- wandb/vendor/pygments/lexers/dotnet.py +691 -0
- wandb/vendor/pygments/lexers/dsls.py +878 -0
- wandb/vendor/pygments/lexers/dylan.py +289 -0
- wandb/vendor/pygments/lexers/ecl.py +125 -0
- wandb/vendor/pygments/lexers/eiffel.py +65 -0
- wandb/vendor/pygments/lexers/elm.py +121 -0
- wandb/vendor/pygments/lexers/erlang.py +533 -0
- wandb/vendor/pygments/lexers/esoteric.py +277 -0
- wandb/vendor/pygments/lexers/ezhil.py +69 -0
- wandb/vendor/pygments/lexers/factor.py +344 -0
- wandb/vendor/pygments/lexers/fantom.py +250 -0
- wandb/vendor/pygments/lexers/felix.py +273 -0
- wandb/vendor/pygments/lexers/forth.py +177 -0
- wandb/vendor/pygments/lexers/fortran.py +205 -0
- wandb/vendor/pygments/lexers/foxpro.py +428 -0
- wandb/vendor/pygments/lexers/functional.py +21 -0
- wandb/vendor/pygments/lexers/go.py +101 -0
- wandb/vendor/pygments/lexers/grammar_notation.py +213 -0
- wandb/vendor/pygments/lexers/graph.py +80 -0
- wandb/vendor/pygments/lexers/graphics.py +553 -0
- wandb/vendor/pygments/lexers/haskell.py +843 -0
- wandb/vendor/pygments/lexers/haxe.py +936 -0
- wandb/vendor/pygments/lexers/hdl.py +382 -0
- wandb/vendor/pygments/lexers/hexdump.py +103 -0
- wandb/vendor/pygments/lexers/html.py +602 -0
- wandb/vendor/pygments/lexers/idl.py +270 -0
- wandb/vendor/pygments/lexers/igor.py +288 -0
- wandb/vendor/pygments/lexers/inferno.py +96 -0
- wandb/vendor/pygments/lexers/installers.py +322 -0
- wandb/vendor/pygments/lexers/int_fiction.py +1343 -0
- wandb/vendor/pygments/lexers/iolang.py +63 -0
- wandb/vendor/pygments/lexers/j.py +146 -0
- wandb/vendor/pygments/lexers/javascript.py +1525 -0
- wandb/vendor/pygments/lexers/julia.py +333 -0
- wandb/vendor/pygments/lexers/jvm.py +1573 -0
- wandb/vendor/pygments/lexers/lisp.py +2621 -0
- wandb/vendor/pygments/lexers/make.py +202 -0
- wandb/vendor/pygments/lexers/markup.py +595 -0
- wandb/vendor/pygments/lexers/math.py +21 -0
- wandb/vendor/pygments/lexers/matlab.py +663 -0
- wandb/vendor/pygments/lexers/ml.py +769 -0
- wandb/vendor/pygments/lexers/modeling.py +358 -0
- wandb/vendor/pygments/lexers/modula2.py +1561 -0
- wandb/vendor/pygments/lexers/monte.py +204 -0
- wandb/vendor/pygments/lexers/ncl.py +894 -0
- wandb/vendor/pygments/lexers/nimrod.py +159 -0
- wandb/vendor/pygments/lexers/nit.py +64 -0
- wandb/vendor/pygments/lexers/nix.py +136 -0
- wandb/vendor/pygments/lexers/oberon.py +105 -0
- wandb/vendor/pygments/lexers/objective.py +504 -0
- wandb/vendor/pygments/lexers/ooc.py +85 -0
- wandb/vendor/pygments/lexers/other.py +41 -0
- wandb/vendor/pygments/lexers/parasail.py +79 -0
- wandb/vendor/pygments/lexers/parsers.py +835 -0
- wandb/vendor/pygments/lexers/pascal.py +644 -0
- wandb/vendor/pygments/lexers/pawn.py +199 -0
- wandb/vendor/pygments/lexers/perl.py +620 -0
- wandb/vendor/pygments/lexers/php.py +267 -0
- wandb/vendor/pygments/lexers/praat.py +294 -0
- wandb/vendor/pygments/lexers/prolog.py +306 -0
- wandb/vendor/pygments/lexers/python.py +939 -0
- wandb/vendor/pygments/lexers/qvt.py +152 -0
- wandb/vendor/pygments/lexers/r.py +453 -0
- wandb/vendor/pygments/lexers/rdf.py +270 -0
- wandb/vendor/pygments/lexers/rebol.py +431 -0
- wandb/vendor/pygments/lexers/resource.py +85 -0
- wandb/vendor/pygments/lexers/rnc.py +67 -0
- wandb/vendor/pygments/lexers/roboconf.py +82 -0
- wandb/vendor/pygments/lexers/robotframework.py +560 -0
- wandb/vendor/pygments/lexers/ruby.py +519 -0
- wandb/vendor/pygments/lexers/rust.py +220 -0
- wandb/vendor/pygments/lexers/sas.py +228 -0
- wandb/vendor/pygments/lexers/scripting.py +1222 -0
- wandb/vendor/pygments/lexers/shell.py +794 -0
- wandb/vendor/pygments/lexers/smalltalk.py +195 -0
- wandb/vendor/pygments/lexers/smv.py +79 -0
- wandb/vendor/pygments/lexers/snobol.py +83 -0
- wandb/vendor/pygments/lexers/special.py +103 -0
- wandb/vendor/pygments/lexers/sql.py +681 -0
- wandb/vendor/pygments/lexers/stata.py +108 -0
- wandb/vendor/pygments/lexers/supercollider.py +90 -0
- wandb/vendor/pygments/lexers/tcl.py +145 -0
- wandb/vendor/pygments/lexers/templates.py +2283 -0
- wandb/vendor/pygments/lexers/testing.py +207 -0
- wandb/vendor/pygments/lexers/text.py +25 -0
- wandb/vendor/pygments/lexers/textedit.py +169 -0
- wandb/vendor/pygments/lexers/textfmts.py +297 -0
- wandb/vendor/pygments/lexers/theorem.py +458 -0
- wandb/vendor/pygments/lexers/trafficscript.py +54 -0
- wandb/vendor/pygments/lexers/typoscript.py +226 -0
- wandb/vendor/pygments/lexers/urbi.py +133 -0
- wandb/vendor/pygments/lexers/varnish.py +190 -0
- wandb/vendor/pygments/lexers/verification.py +111 -0
- wandb/vendor/pygments/lexers/web.py +24 -0
- wandb/vendor/pygments/lexers/webmisc.py +988 -0
- wandb/vendor/pygments/lexers/whiley.py +116 -0
- wandb/vendor/pygments/lexers/x10.py +69 -0
- wandb/vendor/pygments/modeline.py +44 -0
- wandb/vendor/pygments/plugin.py +68 -0
- wandb/vendor/pygments/regexopt.py +92 -0
- wandb/vendor/pygments/scanner.py +105 -0
- wandb/vendor/pygments/sphinxext.py +158 -0
- wandb/vendor/pygments/style.py +155 -0
- wandb/vendor/pygments/styles/__init__.py +80 -0
- wandb/vendor/pygments/styles/abap.py +29 -0
- wandb/vendor/pygments/styles/algol.py +63 -0
- wandb/vendor/pygments/styles/algol_nu.py +63 -0
- wandb/vendor/pygments/styles/arduino.py +98 -0
- wandb/vendor/pygments/styles/autumn.py +65 -0
- wandb/vendor/pygments/styles/borland.py +51 -0
- wandb/vendor/pygments/styles/bw.py +49 -0
- wandb/vendor/pygments/styles/colorful.py +81 -0
- wandb/vendor/pygments/styles/default.py +73 -0
- wandb/vendor/pygments/styles/emacs.py +72 -0
- wandb/vendor/pygments/styles/friendly.py +72 -0
- wandb/vendor/pygments/styles/fruity.py +42 -0
- wandb/vendor/pygments/styles/igor.py +29 -0
- wandb/vendor/pygments/styles/lovelace.py +97 -0
- wandb/vendor/pygments/styles/manni.py +75 -0
- wandb/vendor/pygments/styles/monokai.py +106 -0
- wandb/vendor/pygments/styles/murphy.py +80 -0
- wandb/vendor/pygments/styles/native.py +65 -0
- wandb/vendor/pygments/styles/paraiso_dark.py +125 -0
- wandb/vendor/pygments/styles/paraiso_light.py +125 -0
- wandb/vendor/pygments/styles/pastie.py +75 -0
- wandb/vendor/pygments/styles/perldoc.py +69 -0
- wandb/vendor/pygments/styles/rainbow_dash.py +89 -0
- wandb/vendor/pygments/styles/rrt.py +33 -0
- wandb/vendor/pygments/styles/sas.py +44 -0
- wandb/vendor/pygments/styles/stata.py +40 -0
- wandb/vendor/pygments/styles/tango.py +141 -0
- wandb/vendor/pygments/styles/trac.py +63 -0
- wandb/vendor/pygments/styles/vim.py +63 -0
- wandb/vendor/pygments/styles/vs.py +38 -0
- wandb/vendor/pygments/styles/xcode.py +51 -0
- wandb/vendor/pygments/token.py +213 -0
- wandb/vendor/pygments/unistring.py +217 -0
- wandb/vendor/pygments/util.py +388 -0
- wandb/vendor/pynvml/__init__.py +0 -0
- wandb/vendor/pynvml/pynvml.py +4779 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/__init__.py +17 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/events.py +615 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/__init__.py +98 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/api.py +369 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/fsevents.py +172 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/fsevents2.py +239 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify.py +218 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify_buffer.py +81 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify_c.py +575 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/kqueue.py +730 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/polling.py +145 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/read_directory_changes.py +133 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/winapi.py +348 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/patterns.py +265 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/tricks/__init__.py +174 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/__init__.py +151 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/bricks.py +249 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/compat.py +29 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/decorators.py +198 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/delayed_queue.py +88 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/dirsnapshot.py +293 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/echo.py +157 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/event_backport.py +41 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/importlib2.py +40 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/platform.py +57 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/unicode_paths.py +64 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/win32stat.py +123 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/version.py +28 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/watchmedo.py +577 -0
- wandb/wandb_agent.py +588 -0
- wandb/wandb_controller.py +721 -0
- wandb/wandb_run.py +9 -0
- wandb-0.18.2.dist-info/METADATA +213 -0
- wandb-0.18.2.dist-info/RECORD +827 -0
- wandb-0.18.2.dist-info/WHEEL +5 -0
- wandb-0.18.2.dist-info/entry_points.txt +3 -0
- wandb-0.18.2.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,10 @@
|
|
1
|
+
import atexit
|
2
|
+
import tempfile
|
3
|
+
|
4
|
+
# Staging directory, so we can encode raw data into files, then hash them before
|
5
|
+
# we put them into the Run directory to be uploaded.
|
6
|
+
MEDIA_TMP = tempfile.TemporaryDirectory("wandb-media")
|
7
|
+
|
8
|
+
|
9
|
+
def _cleanup_media_tmp_dir() -> None:
|
10
|
+
atexit.register(MEDIA_TMP.cleanup)
|
@@ -0,0 +1,165 @@
|
|
1
|
+
import hashlib
|
2
|
+
import os
|
3
|
+
from typing import Optional
|
4
|
+
|
5
|
+
from wandb import util
|
6
|
+
from wandb.sdk.lib import filesystem, runid
|
7
|
+
|
8
|
+
from . import _dtypes
|
9
|
+
from ._private import MEDIA_TMP
|
10
|
+
from .base_types.media import BatchableMedia
|
11
|
+
|
12
|
+
|
13
|
+
class Audio(BatchableMedia):
|
14
|
+
"""Wandb class for audio clips.
|
15
|
+
|
16
|
+
Arguments:
|
17
|
+
data_or_path: (string or numpy array) A path to an audio file
|
18
|
+
or a numpy array of audio data.
|
19
|
+
sample_rate: (int) Sample rate, required when passing in raw
|
20
|
+
numpy array of audio data.
|
21
|
+
caption: (string) Caption to display with audio.
|
22
|
+
"""
|
23
|
+
|
24
|
+
_log_type = "audio-file"
|
25
|
+
|
26
|
+
def __init__(self, data_or_path, sample_rate=None, caption=None):
|
27
|
+
"""Accept a path to an audio file or a numpy array of audio data."""
|
28
|
+
super().__init__()
|
29
|
+
self._duration = None
|
30
|
+
self._sample_rate = sample_rate
|
31
|
+
self._caption = caption
|
32
|
+
|
33
|
+
if isinstance(data_or_path, str):
|
34
|
+
if self.path_is_reference(data_or_path):
|
35
|
+
self._path = data_or_path
|
36
|
+
self._sha256 = hashlib.sha256(data_or_path.encode("utf-8")).hexdigest()
|
37
|
+
self._is_tmp = False
|
38
|
+
else:
|
39
|
+
self._set_file(data_or_path, is_tmp=False)
|
40
|
+
else:
|
41
|
+
if sample_rate is None:
|
42
|
+
raise ValueError(
|
43
|
+
'Argument "sample_rate" is required when instantiating wandb.Audio with raw data.'
|
44
|
+
)
|
45
|
+
|
46
|
+
soundfile = util.get_module(
|
47
|
+
"soundfile",
|
48
|
+
required='Raw audio requires the soundfile package. To get it, run "pip install soundfile"',
|
49
|
+
)
|
50
|
+
|
51
|
+
tmp_path = os.path.join(MEDIA_TMP.name, runid.generate_id() + ".wav")
|
52
|
+
soundfile.write(tmp_path, data_or_path, sample_rate)
|
53
|
+
self._duration = len(data_or_path) / float(sample_rate)
|
54
|
+
|
55
|
+
self._set_file(tmp_path, is_tmp=True)
|
56
|
+
|
57
|
+
@classmethod
|
58
|
+
def get_media_subdir(cls):
|
59
|
+
return os.path.join("media", "audio")
|
60
|
+
|
61
|
+
@classmethod
|
62
|
+
def from_json(cls, json_obj, source_artifact):
|
63
|
+
return cls(
|
64
|
+
source_artifact.get_entry(json_obj["path"]).download(),
|
65
|
+
caption=json_obj["caption"],
|
66
|
+
)
|
67
|
+
|
68
|
+
def bind_to_run(
|
69
|
+
self, run, key, step, id_=None, ignore_copy_err: Optional[bool] = None
|
70
|
+
):
|
71
|
+
if self.path_is_reference(self._path):
|
72
|
+
raise ValueError(
|
73
|
+
"Audio media created by a reference to external storage cannot currently be added to a run"
|
74
|
+
)
|
75
|
+
|
76
|
+
return super().bind_to_run(run, key, step, id_, ignore_copy_err)
|
77
|
+
|
78
|
+
def to_json(self, run):
|
79
|
+
json_dict = super().to_json(run)
|
80
|
+
json_dict.update(
|
81
|
+
{
|
82
|
+
"_type": self._log_type,
|
83
|
+
"caption": self._caption,
|
84
|
+
}
|
85
|
+
)
|
86
|
+
return json_dict
|
87
|
+
|
88
|
+
@classmethod
|
89
|
+
def seq_to_json(cls, seq, run, key, step):
|
90
|
+
audio_list = list(seq)
|
91
|
+
|
92
|
+
util.get_module(
|
93
|
+
"soundfile",
|
94
|
+
required="wandb.Audio requires the soundfile package. To get it, run: pip install soundfile",
|
95
|
+
)
|
96
|
+
base_path = os.path.join(run.dir, "media", "audio")
|
97
|
+
filesystem.mkdir_exists_ok(base_path)
|
98
|
+
meta = {
|
99
|
+
"_type": "audio",
|
100
|
+
"count": len(audio_list),
|
101
|
+
"audio": [a.to_json(run) for a in audio_list],
|
102
|
+
}
|
103
|
+
sample_rates = cls.sample_rates(audio_list)
|
104
|
+
if sample_rates:
|
105
|
+
meta["sampleRates"] = sample_rates
|
106
|
+
durations = cls.durations(audio_list)
|
107
|
+
if durations:
|
108
|
+
meta["durations"] = durations
|
109
|
+
captions = cls.captions(audio_list)
|
110
|
+
if captions:
|
111
|
+
meta["captions"] = captions
|
112
|
+
|
113
|
+
return meta
|
114
|
+
|
115
|
+
@classmethod
|
116
|
+
def durations(cls, audio_list):
|
117
|
+
return [a._duration for a in audio_list]
|
118
|
+
|
119
|
+
@classmethod
|
120
|
+
def sample_rates(cls, audio_list):
|
121
|
+
return [a._sample_rate for a in audio_list]
|
122
|
+
|
123
|
+
@classmethod
|
124
|
+
def captions(cls, audio_list):
|
125
|
+
captions = [a._caption for a in audio_list]
|
126
|
+
if all(c is None for c in captions):
|
127
|
+
return False
|
128
|
+
else:
|
129
|
+
return ["" if c is None else c for c in captions]
|
130
|
+
|
131
|
+
def resolve_ref(self):
|
132
|
+
if self.path_is_reference(self._path):
|
133
|
+
# this object was already created using a ref:
|
134
|
+
return self._path
|
135
|
+
source_artifact = self._artifact_source.artifact
|
136
|
+
|
137
|
+
resolved_name = source_artifact._local_path_to_name(self._path)
|
138
|
+
if resolved_name is not None:
|
139
|
+
target_entry = source_artifact.manifest.get_entry_by_path(resolved_name)
|
140
|
+
if target_entry is not None:
|
141
|
+
return target_entry.ref
|
142
|
+
|
143
|
+
return None
|
144
|
+
|
145
|
+
def __eq__(self, other):
|
146
|
+
if self.path_is_reference(self._path) or self.path_is_reference(other._path):
|
147
|
+
# one or more of these objects is an unresolved reference -- we'll compare
|
148
|
+
# their reference paths instead of their SHAs:
|
149
|
+
return (
|
150
|
+
self.resolve_ref() == other.resolve_ref()
|
151
|
+
and self._caption == other._caption
|
152
|
+
)
|
153
|
+
|
154
|
+
return super().__eq__(other) and self._caption == other._caption
|
155
|
+
|
156
|
+
def __ne__(self, other):
|
157
|
+
return not self.__eq__(other)
|
158
|
+
|
159
|
+
|
160
|
+
class _AudioFileType(_dtypes.Type):
|
161
|
+
name = "audio-file"
|
162
|
+
types = [Audio]
|
163
|
+
|
164
|
+
|
165
|
+
_dtypes.TypeRegistry.add(_AudioFileType)
|
File without changes
|
@@ -0,0 +1,55 @@
|
|
1
|
+
import codecs
|
2
|
+
import os
|
3
|
+
from typing import TYPE_CHECKING, Type, Union
|
4
|
+
|
5
|
+
from wandb import util
|
6
|
+
from wandb.sdk.lib import runid
|
7
|
+
|
8
|
+
from .._private import MEDIA_TMP
|
9
|
+
from .media import Media
|
10
|
+
|
11
|
+
if TYPE_CHECKING: # pragma: no cover
|
12
|
+
from wandb.sdk.artifacts.artifact import Artifact
|
13
|
+
|
14
|
+
from ...wandb_run import Run as LocalRun
|
15
|
+
|
16
|
+
|
17
|
+
# Allows encoding of arbitrary JSON structures
|
18
|
+
# as a file
|
19
|
+
#
|
20
|
+
# This class should be used as an abstract class
|
21
|
+
# extended to have validation methods
|
22
|
+
|
23
|
+
|
24
|
+
class JSONMetadata(Media):
|
25
|
+
"""JSONMetadata is a type for encoding arbitrary metadata as files."""
|
26
|
+
|
27
|
+
def __init__(self, val: dict) -> None:
|
28
|
+
super().__init__()
|
29
|
+
|
30
|
+
self.validate(val)
|
31
|
+
self._val = val
|
32
|
+
|
33
|
+
ext = "." + self.type_name() + ".json"
|
34
|
+
tmp_path = os.path.join(MEDIA_TMP.name, runid.generate_id() + ext)
|
35
|
+
with codecs.open(tmp_path, "w", encoding="utf-8") as fp:
|
36
|
+
util.json_dump_uncompressed(self._val, fp)
|
37
|
+
self._set_file(tmp_path, is_tmp=True, extension=ext)
|
38
|
+
|
39
|
+
@classmethod
|
40
|
+
def get_media_subdir(cls: Type["JSONMetadata"]) -> str:
|
41
|
+
return os.path.join("media", "metadata", cls.type_name())
|
42
|
+
|
43
|
+
def to_json(self, run_or_artifact: Union["LocalRun", "Artifact"]) -> dict:
|
44
|
+
json_dict = super().to_json(run_or_artifact)
|
45
|
+
json_dict["_type"] = self.type_name()
|
46
|
+
|
47
|
+
return json_dict
|
48
|
+
|
49
|
+
# These methods should be overridden in the child class
|
50
|
+
@classmethod
|
51
|
+
def type_name(cls) -> str:
|
52
|
+
return "metadata"
|
53
|
+
|
54
|
+
def validate(self, val: dict) -> bool:
|
55
|
+
return True
|
@@ -0,0 +1,315 @@
|
|
1
|
+
import hashlib
|
2
|
+
import os
|
3
|
+
import platform
|
4
|
+
import re
|
5
|
+
import shutil
|
6
|
+
from typing import TYPE_CHECKING, Optional, Sequence, Type, Union, cast
|
7
|
+
|
8
|
+
import wandb
|
9
|
+
from wandb import util
|
10
|
+
from wandb._globals import _datatypes_callback
|
11
|
+
from wandb.sdk.lib import filesystem
|
12
|
+
from wandb.sdk.lib.paths import LogicalPath
|
13
|
+
|
14
|
+
from .wb_value import WBValue
|
15
|
+
|
16
|
+
if TYPE_CHECKING: # pragma: no cover
|
17
|
+
import numpy as np
|
18
|
+
|
19
|
+
from wandb.sdk.artifacts.artifact import Artifact
|
20
|
+
|
21
|
+
from ...wandb_run import Run as LocalRun
|
22
|
+
|
23
|
+
|
24
|
+
SYS_PLATFORM = platform.system()
|
25
|
+
|
26
|
+
|
27
|
+
def _wb_filename(
|
28
|
+
key: Union[str, int], step: Union[str, int], id: Union[str, int], extension: str
|
29
|
+
) -> str:
|
30
|
+
return f"{str(key)}_{str(step)}_{str(id)}{extension}"
|
31
|
+
|
32
|
+
|
33
|
+
class Media(WBValue):
|
34
|
+
"""A WBValue stored as a file outside JSON that can be rendered in a media panel.
|
35
|
+
|
36
|
+
If necessary, we move or copy the file into the Run's media directory so that it
|
37
|
+
gets uploaded.
|
38
|
+
"""
|
39
|
+
|
40
|
+
_path: Optional[str]
|
41
|
+
_run: Optional["LocalRun"]
|
42
|
+
_caption: Optional[str]
|
43
|
+
_is_tmp: Optional[bool]
|
44
|
+
_extension: Optional[str]
|
45
|
+
_sha256: Optional[str]
|
46
|
+
_size: Optional[int]
|
47
|
+
|
48
|
+
def __init__(self, caption: Optional[str] = None) -> None:
|
49
|
+
super().__init__()
|
50
|
+
self._path = None
|
51
|
+
# The run under which this object is bound, if any.
|
52
|
+
self._run = None
|
53
|
+
self._caption = caption
|
54
|
+
|
55
|
+
def _set_file(
|
56
|
+
self, path: str, is_tmp: bool = False, extension: Optional[str] = None
|
57
|
+
) -> None:
|
58
|
+
self._path = path
|
59
|
+
self._is_tmp = is_tmp
|
60
|
+
self._extension = extension
|
61
|
+
assert extension is None or path.endswith(
|
62
|
+
extension
|
63
|
+
), f'Media file extension "{extension}" must occur at the end of path "{path}".'
|
64
|
+
|
65
|
+
with open(self._path, "rb") as f:
|
66
|
+
self._sha256 = hashlib.sha256(f.read()).hexdigest()
|
67
|
+
self._size = os.path.getsize(self._path)
|
68
|
+
|
69
|
+
@classmethod
|
70
|
+
def get_media_subdir(cls: Type["Media"]) -> str:
|
71
|
+
raise NotImplementedError
|
72
|
+
|
73
|
+
@staticmethod
|
74
|
+
def captions(
|
75
|
+
media_items: Sequence["Media"],
|
76
|
+
) -> Union[bool, Sequence[Optional[str]]]:
|
77
|
+
if media_items[0]._caption is not None:
|
78
|
+
return [m._caption for m in media_items]
|
79
|
+
else:
|
80
|
+
return False
|
81
|
+
|
82
|
+
def is_bound(self) -> bool:
|
83
|
+
return self._run is not None
|
84
|
+
|
85
|
+
def file_is_set(self) -> bool:
|
86
|
+
return self._path is not None and self._sha256 is not None
|
87
|
+
|
88
|
+
def bind_to_run(
|
89
|
+
self,
|
90
|
+
run: "LocalRun",
|
91
|
+
key: Union[int, str],
|
92
|
+
step: Union[int, str],
|
93
|
+
id_: Optional[Union[int, str]] = None,
|
94
|
+
ignore_copy_err: Optional[bool] = None,
|
95
|
+
) -> None:
|
96
|
+
"""Bind this object to a particular Run.
|
97
|
+
|
98
|
+
Calling this function is necessary so that we have somewhere specific to put the
|
99
|
+
file associated with this object, from which other Runs can refer to it.
|
100
|
+
"""
|
101
|
+
assert self.file_is_set(), "bind_to_run called before _set_file"
|
102
|
+
|
103
|
+
if SYS_PLATFORM == "Windows" and not util.check_windows_valid_filename(key):
|
104
|
+
raise ValueError(
|
105
|
+
f"Media {key} is invalid. Please remove invalid filename characters"
|
106
|
+
)
|
107
|
+
|
108
|
+
# The following two assertions are guaranteed to pass
|
109
|
+
# by definition file_is_set, but are needed for
|
110
|
+
# mypy to understand that these are strings below.
|
111
|
+
assert isinstance(self._path, str)
|
112
|
+
assert isinstance(self._sha256, str)
|
113
|
+
|
114
|
+
assert run is not None, 'Argument "run" must not be None.'
|
115
|
+
self._run = run
|
116
|
+
|
117
|
+
if self._extension is None:
|
118
|
+
_, extension = os.path.splitext(os.path.basename(self._path))
|
119
|
+
else:
|
120
|
+
extension = self._extension
|
121
|
+
|
122
|
+
if id_ is None:
|
123
|
+
id_ = self._sha256[:20]
|
124
|
+
|
125
|
+
file_path = _wb_filename(key, step, id_, extension)
|
126
|
+
media_path = os.path.join(self.get_media_subdir(), file_path)
|
127
|
+
new_path = os.path.join(self._run.dir, media_path)
|
128
|
+
filesystem.mkdir_exists_ok(os.path.dirname(new_path))
|
129
|
+
|
130
|
+
if self._is_tmp:
|
131
|
+
shutil.move(self._path, new_path)
|
132
|
+
self._path = new_path
|
133
|
+
self._is_tmp = False
|
134
|
+
_datatypes_callback(media_path)
|
135
|
+
else:
|
136
|
+
try:
|
137
|
+
shutil.copy(self._path, new_path)
|
138
|
+
except shutil.SameFileError as e:
|
139
|
+
if not ignore_copy_err:
|
140
|
+
raise e
|
141
|
+
self._path = new_path
|
142
|
+
_datatypes_callback(media_path)
|
143
|
+
|
144
|
+
def to_json(self, run: Union["LocalRun", "Artifact"]) -> dict:
|
145
|
+
"""Serialize the object into a JSON blob.
|
146
|
+
|
147
|
+
Uses run or artifact to store additional data. If `run_or_artifact` is a
|
148
|
+
wandb.Run then `self.bind_to_run()` must have been previously been called.
|
149
|
+
|
150
|
+
Args:
|
151
|
+
run_or_artifact (wandb.Run | wandb.Artifact): the Run or Artifact for which
|
152
|
+
this object should be generating JSON for - this is useful to store
|
153
|
+
additional data if needed.
|
154
|
+
|
155
|
+
Returns:
|
156
|
+
dict: JSON representation
|
157
|
+
"""
|
158
|
+
# NOTE: uses of Audio in this class are a temporary hack -- when Ref support moves up
|
159
|
+
# into Media itself we should get rid of them
|
160
|
+
from wandb import Image
|
161
|
+
from wandb.data_types import Audio
|
162
|
+
from wandb.sdk.wandb_run import Run
|
163
|
+
|
164
|
+
json_obj = {}
|
165
|
+
|
166
|
+
if isinstance(run, Run):
|
167
|
+
json_obj.update(
|
168
|
+
{
|
169
|
+
"_type": "file", # TODO(adrian): This isn't (yet) a real media type we support on the frontend.
|
170
|
+
"sha256": self._sha256,
|
171
|
+
"size": self._size,
|
172
|
+
}
|
173
|
+
)
|
174
|
+
artifact_entry_url = self._get_artifact_entry_ref_url()
|
175
|
+
if artifact_entry_url is not None:
|
176
|
+
json_obj["artifact_path"] = artifact_entry_url
|
177
|
+
artifact_entry_latest_url = self._get_artifact_entry_latest_ref_url()
|
178
|
+
if artifact_entry_latest_url is not None:
|
179
|
+
json_obj["_latest_artifact_path"] = artifact_entry_latest_url
|
180
|
+
|
181
|
+
if artifact_entry_url is None or self.is_bound():
|
182
|
+
assert self.is_bound(), "Value of type {} must be bound to a run with bind_to_run() before being serialized to JSON.".format(
|
183
|
+
type(self).__name__
|
184
|
+
)
|
185
|
+
|
186
|
+
assert (
|
187
|
+
self._run is run
|
188
|
+
), "We don't support referring to media files across runs."
|
189
|
+
|
190
|
+
# The following two assertions are guaranteed to pass
|
191
|
+
# by definition is_bound, but are needed for
|
192
|
+
# mypy to understand that these are strings below.
|
193
|
+
assert isinstance(self._path, str)
|
194
|
+
json_obj["path"] = LogicalPath(
|
195
|
+
os.path.relpath(self._path, self._run.dir)
|
196
|
+
)
|
197
|
+
|
198
|
+
elif isinstance(run, wandb.Artifact):
|
199
|
+
if self.file_is_set():
|
200
|
+
# The following two assertions are guaranteed to pass
|
201
|
+
# by definition of the call above, but are needed for
|
202
|
+
# mypy to understand that these are strings below.
|
203
|
+
assert isinstance(self._path, str)
|
204
|
+
assert isinstance(self._sha256, str)
|
205
|
+
artifact = run # Checks if the concrete image has already been added to this artifact
|
206
|
+
name = artifact.get_added_local_path_name(self._path)
|
207
|
+
if name is None:
|
208
|
+
if self._is_tmp:
|
209
|
+
name = os.path.join(
|
210
|
+
self.get_media_subdir(), os.path.basename(self._path)
|
211
|
+
)
|
212
|
+
else:
|
213
|
+
# If the files is not temporary, include the first 8 characters of the file's SHA256 to
|
214
|
+
# avoid name collisions. This way, if there are two images `dir1/img.png` and `dir2/img.png`
|
215
|
+
# we end up with a unique path for each.
|
216
|
+
name = os.path.join(
|
217
|
+
self.get_media_subdir(),
|
218
|
+
self._sha256[:20],
|
219
|
+
os.path.basename(self._path),
|
220
|
+
)
|
221
|
+
|
222
|
+
# if not, check to see if there is a source artifact for this object
|
223
|
+
if (
|
224
|
+
self._artifact_source is not None
|
225
|
+
# and self._artifact_source.artifact != artifact
|
226
|
+
):
|
227
|
+
default_root = self._artifact_source.artifact._default_root()
|
228
|
+
# if there is, get the name of the entry (this might make sense to move to a helper off artifact)
|
229
|
+
if self._path.startswith(default_root):
|
230
|
+
name = self._path[len(default_root) :]
|
231
|
+
name = name.lstrip(os.sep)
|
232
|
+
|
233
|
+
# Add this image as a reference
|
234
|
+
path = self._artifact_source.artifact.get_entry(name)
|
235
|
+
artifact.add_reference(path.ref_url(), name=name)
|
236
|
+
elif (
|
237
|
+
isinstance(self, Audio) or isinstance(self, Image)
|
238
|
+
) and self.path_is_reference(self._path):
|
239
|
+
artifact.add_reference(self._path, name=name)
|
240
|
+
else:
|
241
|
+
entry = artifact.add_file(
|
242
|
+
self._path, name=name, is_tmp=self._is_tmp
|
243
|
+
)
|
244
|
+
name = entry.path
|
245
|
+
|
246
|
+
json_obj["path"] = name
|
247
|
+
json_obj["sha256"] = self._sha256
|
248
|
+
json_obj["_type"] = self._log_type
|
249
|
+
return json_obj
|
250
|
+
|
251
|
+
@classmethod
|
252
|
+
def from_json(
|
253
|
+
cls: Type["Media"], json_obj: dict, source_artifact: "Artifact"
|
254
|
+
) -> "Media":
|
255
|
+
"""Likely will need to override for any more complicated media objects."""
|
256
|
+
return cls(source_artifact.get_entry(json_obj["path"]).download())
|
257
|
+
|
258
|
+
def __eq__(self, other: object) -> bool:
|
259
|
+
"""Likely will need to override for any more complicated media objects."""
|
260
|
+
return (
|
261
|
+
isinstance(other, self.__class__)
|
262
|
+
and hasattr(self, "_sha256")
|
263
|
+
and hasattr(other, "_sha256")
|
264
|
+
and self._sha256 == other._sha256
|
265
|
+
)
|
266
|
+
|
267
|
+
@staticmethod
|
268
|
+
def path_is_reference(path: Optional[str]) -> bool:
|
269
|
+
return bool(path and re.match(r"^(gs|s3|https?)://", path))
|
270
|
+
|
271
|
+
|
272
|
+
class BatchableMedia(Media):
|
273
|
+
"""Media that is treated in batches.
|
274
|
+
|
275
|
+
E.g. images and thumbnails. Apart from images, we just use these batches to help
|
276
|
+
organize files by name in the media directory.
|
277
|
+
"""
|
278
|
+
|
279
|
+
def __init__(self) -> None:
|
280
|
+
super().__init__()
|
281
|
+
|
282
|
+
@classmethod
|
283
|
+
def seq_to_json(
|
284
|
+
cls: Type["BatchableMedia"],
|
285
|
+
seq: Sequence["BatchableMedia"],
|
286
|
+
run: "LocalRun",
|
287
|
+
key: str,
|
288
|
+
step: Union[int, str],
|
289
|
+
) -> dict:
|
290
|
+
raise NotImplementedError
|
291
|
+
|
292
|
+
|
293
|
+
def _numpy_arrays_to_lists(
|
294
|
+
payload: Union[dict, Sequence, "np.ndarray"],
|
295
|
+
) -> Union[Sequence, dict, str, int, float, bool]:
|
296
|
+
# Casts all numpy arrays to lists so we don't convert them to histograms, primarily for Plotly
|
297
|
+
|
298
|
+
if isinstance(payload, dict):
|
299
|
+
res = {}
|
300
|
+
for key, val in payload.items():
|
301
|
+
res[key] = _numpy_arrays_to_lists(val)
|
302
|
+
return res
|
303
|
+
elif isinstance(payload, Sequence) and not isinstance(payload, str):
|
304
|
+
return [_numpy_arrays_to_lists(v) for v in payload]
|
305
|
+
elif util.is_numpy_array(payload):
|
306
|
+
if TYPE_CHECKING:
|
307
|
+
payload = cast("np.ndarray", payload)
|
308
|
+
return [
|
309
|
+
_numpy_arrays_to_lists(v)
|
310
|
+
for v in (payload.tolist() if payload.ndim > 0 else [payload.tolist()])
|
311
|
+
]
|
312
|
+
# Protects against logging non serializable objects
|
313
|
+
elif isinstance(payload, Media):
|
314
|
+
return str(payload.__class__.__name__)
|
315
|
+
return payload # type: ignore
|