wandb 0.21.2__py3-none-macosx_12_0_arm64.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 +97 -0
- wandb/__init__.py +248 -0
- wandb/__init__.pyi +1230 -0
- wandb/__main__.py +3 -0
- wandb/_iterutils.py +65 -0
- wandb/_pydantic/__init__.py +30 -0
- wandb/_pydantic/base.py +128 -0
- wandb/_pydantic/utils.py +80 -0
- wandb/_pydantic/v1_compat.py +284 -0
- wandb/agents/__init__.py +0 -0
- wandb/agents/pyagent.py +386 -0
- wandb/analytics/__init__.py +3 -0
- wandb/analytics/sentry.py +267 -0
- wandb/apis/__init__.py +48 -0
- wandb/apis/attrs.py +50 -0
- wandb/apis/importers/__init__.py +1 -0
- wandb/apis/importers/internals/internal.py +382 -0
- wandb/apis/importers/internals/protocols.py +103 -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 +1608 -0
- wandb/apis/internal.py +239 -0
- wandb/apis/normalize.py +81 -0
- wandb/apis/paginator.py +138 -0
- wandb/apis/public/__init__.py +35 -0
- wandb/apis/public/api.py +2449 -0
- wandb/apis/public/artifacts.py +1046 -0
- wandb/apis/public/automations.py +85 -0
- wandb/apis/public/const.py +4 -0
- wandb/apis/public/files.py +402 -0
- wandb/apis/public/history.py +201 -0
- wandb/apis/public/integrations.py +203 -0
- wandb/apis/public/jobs.py +742 -0
- wandb/apis/public/projects.py +276 -0
- wandb/apis/public/query_generator.py +176 -0
- wandb/apis/public/registries/__init__.py +0 -0
- wandb/apis/public/registries/_freezable_list.py +179 -0
- wandb/apis/public/registries/_utils.py +138 -0
- wandb/apis/public/registries/registries_search.py +347 -0
- wandb/apis/public/registries/registry.py +358 -0
- wandb/apis/public/reports.py +595 -0
- wandb/apis/public/runs.py +1216 -0
- wandb/apis/public/sweeps.py +440 -0
- wandb/apis/public/teams.py +235 -0
- wandb/apis/public/users.py +177 -0
- wandb/apis/public/utils.py +210 -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/automations/__init__.py +73 -0
- wandb/automations/_filters/__init__.py +40 -0
- wandb/automations/_filters/expressions.py +181 -0
- wandb/automations/_filters/operators.py +258 -0
- wandb/automations/_filters/run_metrics.py +330 -0
- wandb/automations/_generated/__init__.py +177 -0
- wandb/automations/_generated/create_automation.py +17 -0
- wandb/automations/_generated/create_generic_webhook_integration.py +43 -0
- wandb/automations/_generated/delete_automation.py +15 -0
- wandb/automations/_generated/enums.py +35 -0
- wandb/automations/_generated/fragments.py +358 -0
- wandb/automations/_generated/generic_webhook_integrations_by_entity.py +22 -0
- wandb/automations/_generated/get_automations.py +24 -0
- wandb/automations/_generated/get_automations_by_entity.py +26 -0
- wandb/automations/_generated/input_types.py +104 -0
- wandb/automations/_generated/integrations_by_entity.py +22 -0
- wandb/automations/_generated/operations.py +647 -0
- wandb/automations/_generated/slack_integrations_by_entity.py +22 -0
- wandb/automations/_generated/update_automation.py +17 -0
- wandb/automations/_utils.py +235 -0
- wandb/automations/_validators.py +165 -0
- wandb/automations/actions.py +218 -0
- wandb/automations/automations.py +85 -0
- wandb/automations/events.py +285 -0
- wandb/automations/integrations.py +45 -0
- wandb/automations/scopes.py +78 -0
- wandb/beta/workflows.py +324 -0
- wandb/bin/gpu_stats +0 -0
- wandb/bin/wandb-core +0 -0
- wandb/cli/__init__.py +0 -0
- wandb/cli/beta.py +175 -0
- wandb/cli/cli.py +2883 -0
- wandb/data_types.py +66 -0
- wandb/docker/__init__.py +290 -0
- wandb/docker/names.py +40 -0
- wandb/docker/wandb-entrypoint.sh +33 -0
- wandb/env.py +535 -0
- wandb/errors/__init__.py +17 -0
- wandb/errors/errors.py +40 -0
- wandb/errors/links.py +73 -0
- wandb/errors/term.py +415 -0
- wandb/errors/util.py +57 -0
- wandb/errors/warnings.py +2 -0
- wandb/filesync/__init__.py +0 -0
- wandb/filesync/dir_watcher.py +404 -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 +287 -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 +182 -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 +881 -0
- wandb/integration/diffusers/resolvers/utils.py +102 -0
- wandb/integration/fastai/__init__.py +243 -0
- wandb/integration/gym/__init__.py +98 -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 +129 -0
- wandb/integration/keras/callbacks/model_checkpoint.py +188 -0
- wandb/integration/keras/callbacks/tables_builder.py +228 -0
- wandb/integration/keras/keras.py +1086 -0
- wandb/integration/kfp/__init__.py +6 -0
- wandb/integration/kfp/helpers.py +28 -0
- wandb/integration/kfp/kfp_patch.py +335 -0
- wandb/integration/kfp/wandb_logging.py +182 -0
- wandb/integration/langchain/__init__.py +3 -0
- wandb/integration/langchain/wandb_tracer.py +49 -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 +763 -0
- wandb/integration/metaflow/__init__.py +9 -0
- wandb/integration/metaflow/data_pandas.py +74 -0
- wandb/integration/metaflow/data_pytorch.py +75 -0
- wandb/integration/metaflow/data_sklearn.py +76 -0
- wandb/integration/metaflow/errors.py +13 -0
- wandb/integration/metaflow/metaflow.py +327 -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 +291 -0
- wandb/integration/sacred/__init__.py +117 -0
- wandb/integration/sagemaker/__init__.py +14 -0
- wandb/integration/sagemaker/auth.py +29 -0
- wandb/integration/sagemaker/config.py +58 -0
- wandb/integration/sagemaker/files.py +2 -0
- wandb/integration/sagemaker/resources.py +63 -0
- wandb/integration/sb3/__init__.py +3 -0
- wandb/integration/sb3/sb3.py +147 -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 +184 -0
- wandb/integration/tensorboard/__init__.py +10 -0
- wandb/integration/tensorboard/log.py +351 -0
- wandb/integration/tensorboard/monkeypatch.py +186 -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 +215 -0
- wandb/integration/ultralytics/callback.py +528 -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/weave/__init__.py +6 -0
- wandb/integration/weave/interface.py +49 -0
- wandb/integration/weave/weave.py +63 -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 +538 -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 +176 -0
- wandb/old/summary.py +438 -0
- wandb/plot/__init__.py +30 -0
- wandb/plot/bar.py +71 -0
- wandb/plot/confusion_matrix.py +185 -0
- wandb/plot/custom_chart.py +147 -0
- wandb/plot/histogram.py +66 -0
- wandb/plot/line.py +75 -0
- wandb/plot/line_series.py +173 -0
- wandb/plot/pr_curve.py +186 -0
- wandb/plot/roc_curve.py +163 -0
- wandb/plot/scatter.py +66 -0
- wandb/plot/utils.py +184 -0
- wandb/plot/viz.py +41 -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 +1728 -0
- wandb/proto/v3/wandb_server_pb2.py +228 -0
- wandb/proto/v3/wandb_settings_pb2.py +122 -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 +382 -0
- wandb/proto/v4/wandb_server_pb2.py +67 -0
- wandb/proto/v4/wandb_settings_pb2.py +47 -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 +383 -0
- wandb/proto/v5/wandb_server_pb2.py +68 -0
- wandb/proto/v5/wandb_settings_pb2.py +48 -0
- wandb/proto/v5/wandb_telemetry_pb2.py +42 -0
- wandb/proto/v6/wandb_base_pb2.py +41 -0
- wandb/proto/v6/wandb_internal_pb2.py +393 -0
- wandb/proto/v6/wandb_server_pb2.py +78 -0
- wandb/proto/v6/wandb_settings_pb2.py +58 -0
- wandb/proto/v6/wandb_telemetry_pb2.py +52 -0
- wandb/proto/wandb_base_pb2.py +12 -0
- wandb/proto/wandb_deprecated.py +59 -0
- wandb/proto/wandb_generate_deprecated.py +30 -0
- wandb/proto/wandb_generate_proto.py +49 -0
- wandb/proto/wandb_internal_pb2.py +18 -0
- wandb/proto/wandb_server_pb2.py +12 -0
- wandb/proto/wandb_settings_pb2.py +12 -0
- wandb/proto/wandb_telemetry_pb2.py +12 -0
- wandb/py.typed +0 -0
- wandb/sdk/__init__.py +37 -0
- wandb/sdk/artifacts/__init__.py +0 -0
- wandb/sdk/artifacts/_factories.py +17 -0
- wandb/sdk/artifacts/_generated/__init__.py +508 -0
- wandb/sdk/artifacts/_generated/add_aliases.py +21 -0
- wandb/sdk/artifacts/_generated/artifact_by_id.py +17 -0
- wandb/sdk/artifacts/_generated/artifact_by_name.py +22 -0
- wandb/sdk/artifacts/_generated/artifact_collection_membership_file_urls.py +43 -0
- wandb/sdk/artifacts/_generated/artifact_collection_membership_files.py +43 -0
- wandb/sdk/artifacts/_generated/artifact_created_by.py +47 -0
- wandb/sdk/artifacts/_generated/artifact_file_urls.py +22 -0
- wandb/sdk/artifacts/_generated/artifact_type.py +31 -0
- wandb/sdk/artifacts/_generated/artifact_used_by.py +43 -0
- wandb/sdk/artifacts/_generated/artifact_version_files.py +36 -0
- wandb/sdk/artifacts/_generated/artifact_via_membership_by_name.py +26 -0
- wandb/sdk/artifacts/_generated/create_artifact_collection_tag_assignments.py +36 -0
- wandb/sdk/artifacts/_generated/delete_aliases.py +21 -0
- wandb/sdk/artifacts/_generated/delete_artifact.py +28 -0
- wandb/sdk/artifacts/_generated/delete_artifact_collection_tag_assignments.py +25 -0
- wandb/sdk/artifacts/_generated/delete_artifact_portfolio.py +35 -0
- wandb/sdk/artifacts/_generated/delete_artifact_sequence.py +35 -0
- wandb/sdk/artifacts/_generated/enums.py +22 -0
- wandb/sdk/artifacts/_generated/fetch_artifact_manifest.py +38 -0
- wandb/sdk/artifacts/_generated/fetch_linked_artifacts.py +67 -0
- wandb/sdk/artifacts/_generated/fetch_registries.py +32 -0
- wandb/sdk/artifacts/_generated/fragments.py +459 -0
- wandb/sdk/artifacts/_generated/input_types.py +46 -0
- wandb/sdk/artifacts/_generated/link_artifact.py +27 -0
- wandb/sdk/artifacts/_generated/move_artifact_collection.py +35 -0
- wandb/sdk/artifacts/_generated/operations.py +1223 -0
- wandb/sdk/artifacts/_generated/project_artifact_collection.py +101 -0
- wandb/sdk/artifacts/_generated/project_artifact_collections.py +33 -0
- wandb/sdk/artifacts/_generated/project_artifact_type.py +24 -0
- wandb/sdk/artifacts/_generated/project_artifact_types.py +24 -0
- wandb/sdk/artifacts/_generated/project_artifacts.py +42 -0
- wandb/sdk/artifacts/_generated/registry_collections.py +34 -0
- wandb/sdk/artifacts/_generated/registry_versions.py +34 -0
- wandb/sdk/artifacts/_generated/run_input_artifacts.py +51 -0
- wandb/sdk/artifacts/_generated/run_output_artifacts.py +51 -0
- wandb/sdk/artifacts/_generated/unlink_artifact.py +25 -0
- wandb/sdk/artifacts/_generated/update_artifact.py +26 -0
- wandb/sdk/artifacts/_generated/update_artifact_portfolio.py +35 -0
- wandb/sdk/artifacts/_generated/update_artifact_sequence.py +35 -0
- wandb/sdk/artifacts/_graphql_fragments.py +19 -0
- wandb/sdk/artifacts/_internal_artifact.py +54 -0
- wandb/sdk/artifacts/_validators.py +309 -0
- wandb/sdk/artifacts/artifact.py +2702 -0
- wandb/sdk/artifacts/artifact_download_logger.py +45 -0
- wandb/sdk/artifacts/artifact_file_cache.py +251 -0
- wandb/sdk/artifacts/artifact_instance_cache.py +17 -0
- wandb/sdk/artifacts/artifact_manifest.py +76 -0
- wandb/sdk/artifacts/artifact_manifest_entry.py +258 -0
- wandb/sdk/artifacts/artifact_manifests/__init__.py +0 -0
- wandb/sdk/artifacts/artifact_manifests/artifact_manifest_v1.py +94 -0
- wandb/sdk/artifacts/artifact_saver.py +277 -0
- wandb/sdk/artifacts/artifact_state.py +13 -0
- wandb/sdk/artifacts/artifact_ttl.py +9 -0
- wandb/sdk/artifacts/exceptions.py +71 -0
- wandb/sdk/artifacts/staging.py +27 -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 +214 -0
- wandb/sdk/artifacts/storage_handlers/gcs_handler.py +224 -0
- wandb/sdk/artifacts/storage_handlers/http_handler.py +114 -0
- wandb/sdk/artifacts/storage_handlers/local_file_handler.py +142 -0
- wandb/sdk/artifacts/storage_handlers/multi_handler.py +56 -0
- wandb/sdk/artifacts/storage_handlers/s3_handler.py +339 -0
- wandb/sdk/artifacts/storage_handlers/tracking_handler.py +68 -0
- wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +131 -0
- wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +74 -0
- wandb/sdk/artifacts/storage_layout.py +8 -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 +580 -0
- wandb/sdk/artifacts/storage_policy.py +75 -0
- wandb/sdk/backend/__init__.py +0 -0
- wandb/sdk/backend/backend.py +57 -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 +208 -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 +339 -0
- wandb/sdk/data_types/base_types/wb_value.py +295 -0
- wandb/sdk/data_types/bokeh.py +87 -0
- wandb/sdk/data_types/graph.py +439 -0
- wandb/sdk/data_types/helper_types/__init__.py +0 -0
- wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +327 -0
- wandb/sdk/data_types/helper_types/classes.py +159 -0
- wandb/sdk/data_types/helper_types/image_mask.py +251 -0
- wandb/sdk/data_types/histogram.py +107 -0
- wandb/sdk/data_types/html.py +165 -0
- wandb/sdk/data_types/image.py +974 -0
- wandb/sdk/data_types/molecule.py +250 -0
- wandb/sdk/data_types/object_3d.py +495 -0
- wandb/sdk/data_types/plotly.py +95 -0
- wandb/sdk/data_types/saved_model.py +435 -0
- wandb/sdk/data_types/table.py +1468 -0
- wandb/sdk/data_types/table_decorators.py +108 -0
- wandb/sdk/data_types/trace_tree.py +440 -0
- wandb/sdk/data_types/utils.py +260 -0
- wandb/sdk/data_types/video.py +303 -0
- wandb/sdk/integration_utils/__init__.py +0 -0
- wandb/sdk/integration_utils/auto_logging.py +232 -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 +1056 -0
- wandb/sdk/interface/interface_queue.py +40 -0
- wandb/sdk/interface/interface_shared.py +471 -0
- wandb/sdk/interface/interface_sock.py +49 -0
- wandb/sdk/interface/summary_record.py +67 -0
- wandb/sdk/internal/__init__.py +0 -0
- wandb/sdk/internal/_generated/__init__.py +15 -0
- wandb/sdk/internal/_generated/enums.py +4 -0
- wandb/sdk/internal/_generated/input_types.py +4 -0
- wandb/sdk/internal/_generated/operations.py +15 -0
- wandb/sdk/internal/_generated/server_features_query.py +27 -0
- wandb/sdk/internal/context.py +89 -0
- wandb/sdk/internal/datastore.py +293 -0
- wandb/sdk/internal/file_pusher.py +177 -0
- wandb/sdk/internal/file_stream.py +686 -0
- wandb/sdk/internal/handler.py +854 -0
- wandb/sdk/internal/incremental_table_util.py +53 -0
- wandb/sdk/internal/internal_api.py +4723 -0
- wandb/sdk/internal/job_builder.py +639 -0
- wandb/sdk/internal/profiler.py +79 -0
- wandb/sdk/internal/progress.py +77 -0
- wandb/sdk/internal/run.py +27 -0
- wandb/sdk/internal/sample.py +70 -0
- wandb/sdk/internal/sender.py +1692 -0
- wandb/sdk/internal/sender_config.py +203 -0
- wandb/sdk/internal/settings_static.py +120 -0
- wandb/sdk/internal/tb_watcher.py +519 -0
- wandb/sdk/internal/thread_local_settings.py +18 -0
- wandb/sdk/launch/__init__.py +15 -0
- wandb/sdk/launch/_launch.py +331 -0
- wandb/sdk/launch/_launch_add.py +255 -0
- wandb/sdk/launch/_project_spec.py +565 -0
- wandb/sdk/launch/agent/__init__.py +5 -0
- wandb/sdk/launch/agent/agent.py +931 -0
- wandb/sdk/launch/agent/config.py +296 -0
- wandb/sdk/launch/agent/job_status_tracker.py +55 -0
- wandb/sdk/launch/agent/run_queue_item_file_saver.py +39 -0
- wandb/sdk/launch/builder/__init__.py +0 -0
- wandb/sdk/launch/builder/abstract.py +156 -0
- wandb/sdk/launch/builder/build.py +296 -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 +541 -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 +334 -0
- wandb/sdk/launch/environment/local_environment.py +65 -0
- wandb/sdk/launch/errors.py +13 -0
- wandb/sdk/launch/git_reference.py +109 -0
- wandb/sdk/launch/inputs/files.py +148 -0
- wandb/sdk/launch/inputs/internal.py +314 -0
- wandb/sdk/launch/inputs/manage.py +113 -0
- wandb/sdk/launch/inputs/schema.py +40 -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 +65 -0
- wandb/sdk/launch/runner/__init__.py +0 -0
- wandb/sdk/launch/runner/abstract.py +185 -0
- wandb/sdk/launch/runner/kubernetes_monitor.py +473 -0
- wandb/sdk/launch/runner/kubernetes_runner.py +1285 -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 +424 -0
- wandb/sdk/launch/runner/vertex_runner.py +225 -0
- wandb/sdk/launch/sweeps/__init__.py +37 -0
- wandb/sdk/launch/sweeps/scheduler.py +739 -0
- wandb/sdk/launch/sweeps/scheduler_sweep.py +90 -0
- wandb/sdk/launch/sweeps/utils.py +324 -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/apikey.py +334 -0
- wandb/sdk/lib/asyncio_compat.py +213 -0
- wandb/sdk/lib/asyncio_manager.py +252 -0
- wandb/sdk/lib/capped_dict.py +26 -0
- wandb/sdk/lib/config_util.py +101 -0
- wandb/sdk/lib/console_capture.py +219 -0
- wandb/sdk/lib/credentials.py +141 -0
- wandb/sdk/lib/deprecate.py +27 -0
- wandb/sdk/lib/disabled.py +30 -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 +165 -0
- wandb/sdk/lib/gitlib.py +240 -0
- wandb/sdk/lib/gql_request.py +65 -0
- wandb/sdk/lib/handler_util.py +21 -0
- wandb/sdk/lib/hashutil.py +106 -0
- wandb/sdk/lib/import_hooks.py +275 -0
- wandb/sdk/lib/interrupt.py +37 -0
- wandb/sdk/lib/ipython.py +126 -0
- wandb/sdk/lib/json_util.py +75 -0
- wandb/sdk/lib/lazyloader.py +63 -0
- wandb/sdk/lib/module.py +72 -0
- wandb/sdk/lib/paths.py +106 -0
- wandb/sdk/lib/preinit.py +42 -0
- wandb/sdk/lib/printer.py +571 -0
- wandb/sdk/lib/printer_asyncio.py +48 -0
- wandb/sdk/lib/progress.py +320 -0
- wandb/sdk/lib/proto_util.py +90 -0
- wandb/sdk/lib/redirect.py +876 -0
- wandb/sdk/lib/retry.py +395 -0
- wandb/sdk/lib/run_moment.py +82 -0
- wandb/sdk/lib/runid.py +12 -0
- wandb/sdk/lib/server.py +58 -0
- wandb/sdk/lib/service/ipc_support.py +13 -0
- wandb/sdk/lib/service/service_client.py +106 -0
- wandb/sdk/lib/service/service_connection.py +192 -0
- wandb/sdk/lib/service/service_port_file.py +105 -0
- wandb/sdk/lib/service/service_process.py +111 -0
- wandb/sdk/lib/service/service_token.py +181 -0
- wandb/sdk/lib/sparkline.py +44 -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/wb_logging.py +161 -0
- wandb/sdk/mailbox/__init__.py +23 -0
- wandb/sdk/mailbox/mailbox.py +143 -0
- wandb/sdk/mailbox/mailbox_handle.py +132 -0
- wandb/sdk/mailbox/response_handle.py +99 -0
- wandb/sdk/mailbox/wait_with_progress.py +100 -0
- wandb/sdk/projects/_generated/__init__.py +47 -0
- wandb/sdk/projects/_generated/delete_project.py +22 -0
- wandb/sdk/projects/_generated/enums.py +4 -0
- wandb/sdk/projects/_generated/fetch_registry.py +22 -0
- wandb/sdk/projects/_generated/fragments.py +41 -0
- wandb/sdk/projects/_generated/input_types.py +13 -0
- wandb/sdk/projects/_generated/operations.py +88 -0
- wandb/sdk/projects/_generated/rename_project.py +27 -0
- wandb/sdk/projects/_generated/upsert_registry_project.py +27 -0
- wandb/sdk/verify/__init__.py +0 -0
- wandb/sdk/verify/verify.py +555 -0
- wandb/sdk/wandb_alerts.py +12 -0
- wandb/sdk/wandb_config.py +323 -0
- wandb/sdk/wandb_helper.py +54 -0
- wandb/sdk/wandb_init.py +1581 -0
- wandb/sdk/wandb_login.py +332 -0
- wandb/sdk/wandb_metric.py +112 -0
- wandb/sdk/wandb_require.py +88 -0
- wandb/sdk/wandb_require_helpers.py +44 -0
- wandb/sdk/wandb_run.py +4088 -0
- wandb/sdk/wandb_settings.py +2105 -0
- wandb/sdk/wandb_setup.py +560 -0
- wandb/sdk/wandb_summary.py +150 -0
- wandb/sdk/wandb_sweep.py +120 -0
- wandb/sdk/wandb_sync.py +71 -0
- wandb/sdk/wandb_watch.py +146 -0
- wandb/sklearn.py +35 -0
- wandb/sync/__init__.py +3 -0
- wandb/sync/sync.py +452 -0
- wandb/trigger.py +29 -0
- wandb/util.py +2040 -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/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 +580 -0
- wandb/wandb_controller.py +719 -0
- wandb/wandb_run.py +8 -0
- wandb-0.21.2.dist-info/METADATA +223 -0
- wandb-0.21.2.dist-info/RECORD +904 -0
- wandb-0.21.2.dist-info/WHEEL +4 -0
- wandb-0.21.2.dist-info/entry_points.txt +3 -0
- wandb-0.21.2.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,85 @@
|
|
1
|
+
"""W&B Public API for Automation objects."""
|
2
|
+
|
3
|
+
from __future__ import annotations
|
4
|
+
|
5
|
+
from itertools import chain
|
6
|
+
from typing import TYPE_CHECKING, Any, Iterable, Mapping
|
7
|
+
|
8
|
+
from pydantic import ValidationError
|
9
|
+
from typing_extensions import override
|
10
|
+
from wandb_graphql.language.ast import Document
|
11
|
+
|
12
|
+
from wandb.apis.paginator import Paginator, _Client
|
13
|
+
|
14
|
+
if TYPE_CHECKING:
|
15
|
+
from wandb.automations import Automation
|
16
|
+
from wandb.automations._generated import ProjectConnectionFields
|
17
|
+
|
18
|
+
|
19
|
+
class Automations(Paginator["Automation"]):
|
20
|
+
"""An lazy iterator of `Automation` objects.
|
21
|
+
|
22
|
+
<!-- lazydoc-ignore-init: internal -->
|
23
|
+
"""
|
24
|
+
|
25
|
+
last_response: ProjectConnectionFields | None
|
26
|
+
_query: Document
|
27
|
+
|
28
|
+
def __init__(
|
29
|
+
self,
|
30
|
+
client: _Client,
|
31
|
+
variables: Mapping[str, Any],
|
32
|
+
per_page: int = 50,
|
33
|
+
_query: Document | None = None,
|
34
|
+
):
|
35
|
+
super().__init__(client, variables, per_page=per_page)
|
36
|
+
if _query is None:
|
37
|
+
raise RuntimeError(f"Query required for {type(self).__qualname__}")
|
38
|
+
self._query = _query
|
39
|
+
|
40
|
+
@property
|
41
|
+
def more(self) -> bool:
|
42
|
+
"""Whether there are more items to fetch.
|
43
|
+
|
44
|
+
<!-- lazydoc-ignore: internal -->
|
45
|
+
"""
|
46
|
+
if self.last_response is None:
|
47
|
+
return True
|
48
|
+
return self.last_response.page_info.has_next_page
|
49
|
+
|
50
|
+
@property
|
51
|
+
def cursor(self) -> str | None:
|
52
|
+
"""The start cursor to use for the next page.
|
53
|
+
|
54
|
+
<!-- lazydoc-ignore: internal -->
|
55
|
+
"""
|
56
|
+
if self.last_response is None:
|
57
|
+
return None
|
58
|
+
return self.last_response.page_info.end_cursor
|
59
|
+
|
60
|
+
@override
|
61
|
+
def _update_response(self) -> None:
|
62
|
+
"""Fetch the raw response data for the current page."""
|
63
|
+
from wandb.automations._generated import ProjectConnectionFields
|
64
|
+
|
65
|
+
data: dict[str, Any] = self.client.execute(
|
66
|
+
self._query, variable_values=self.variables
|
67
|
+
)
|
68
|
+
try:
|
69
|
+
page_data = data["searchScope"]["projects"]
|
70
|
+
self.last_response = ProjectConnectionFields.model_validate(page_data)
|
71
|
+
except (LookupError, AttributeError, ValidationError) as e:
|
72
|
+
raise ValueError("Unexpected response data") from e
|
73
|
+
|
74
|
+
def convert_objects(self) -> Iterable[Automation]:
|
75
|
+
"""Parse the page data into a list of objects.
|
76
|
+
|
77
|
+
<!-- lazydoc-ignore: internal -->
|
78
|
+
"""
|
79
|
+
from wandb.automations import Automation
|
80
|
+
|
81
|
+
page = self.last_response
|
82
|
+
return [
|
83
|
+
Automation.model_validate(obj)
|
84
|
+
for obj in chain.from_iterable(edge.node.triggers for edge in page.edges)
|
85
|
+
]
|
@@ -0,0 +1,402 @@
|
|
1
|
+
"""W&B Public API for File objects.
|
2
|
+
|
3
|
+
This module provides classes for interacting with files stored in W&B.
|
4
|
+
|
5
|
+
Example:
|
6
|
+
```python
|
7
|
+
from wandb.apis.public import Api
|
8
|
+
|
9
|
+
# Get files from a specific run
|
10
|
+
run = Api().run("entity/project/run_id")
|
11
|
+
files = run.files()
|
12
|
+
|
13
|
+
# Work with files
|
14
|
+
for file in files:
|
15
|
+
print(f"File: {file.name}")
|
16
|
+
print(f"Size: {file.size} bytes")
|
17
|
+
print(f"Type: {file.mimetype}")
|
18
|
+
|
19
|
+
# Download file
|
20
|
+
if file.size < 1000000: # Less than 1MB
|
21
|
+
file.download(root="./downloads")
|
22
|
+
|
23
|
+
# Get S3 URI for large files
|
24
|
+
if file.size >= 1000000:
|
25
|
+
print(f"S3 URI: {file.path_uri}")
|
26
|
+
```
|
27
|
+
|
28
|
+
Note:
|
29
|
+
This module is part of the W&B Public API and provides methods to access,
|
30
|
+
download, and manage files stored in W&B. Files are typically associated
|
31
|
+
with specific runs and can include model weights, datasets, visualizations,
|
32
|
+
and other artifacts.
|
33
|
+
"""
|
34
|
+
|
35
|
+
from __future__ import annotations
|
36
|
+
|
37
|
+
import io
|
38
|
+
import os
|
39
|
+
|
40
|
+
import requests
|
41
|
+
from wandb_gql import gql
|
42
|
+
from wandb_gql.client import RetryError
|
43
|
+
|
44
|
+
import wandb
|
45
|
+
from wandb import util
|
46
|
+
from wandb.apis.attrs import Attrs
|
47
|
+
from wandb.apis.normalize import normalize_exceptions
|
48
|
+
from wandb.apis.paginator import SizedPaginator
|
49
|
+
from wandb.apis.public import utils
|
50
|
+
from wandb.apis.public.api import Api, RetryingClient
|
51
|
+
from wandb.apis.public.const import RETRY_TIMEDELTA
|
52
|
+
from wandb.apis.public.runs import Run
|
53
|
+
from wandb.sdk.lib import retry
|
54
|
+
|
55
|
+
FILE_FRAGMENT = """fragment RunFilesFragment on Run {
|
56
|
+
files(names: $fileNames, after: $fileCursor, first: $fileLimit, pattern: $pattern) {
|
57
|
+
edges {
|
58
|
+
node {
|
59
|
+
id
|
60
|
+
name
|
61
|
+
url(upload: $upload)
|
62
|
+
directUrl
|
63
|
+
sizeBytes
|
64
|
+
mimetype
|
65
|
+
updatedAt
|
66
|
+
md5
|
67
|
+
}
|
68
|
+
cursor
|
69
|
+
}
|
70
|
+
pageInfo {
|
71
|
+
endCursor
|
72
|
+
hasNextPage
|
73
|
+
}
|
74
|
+
}
|
75
|
+
}"""
|
76
|
+
|
77
|
+
|
78
|
+
class Files(SizedPaginator["File"]):
|
79
|
+
"""A lazy iterator over a collection of `File` objects.
|
80
|
+
|
81
|
+
Access and manage files uploaded to W&B during a run. Handles pagination
|
82
|
+
automatically when iterating through large collections of files.
|
83
|
+
|
84
|
+
Example:
|
85
|
+
```python
|
86
|
+
from wandb.apis.public.files import Files
|
87
|
+
from wandb.apis.public.api import Api
|
88
|
+
|
89
|
+
# Example run object
|
90
|
+
run = Api().run("entity/project/run-id")
|
91
|
+
|
92
|
+
# Create a Files object to iterate over files in the run
|
93
|
+
files = Files(api.client, run)
|
94
|
+
|
95
|
+
# Iterate over files
|
96
|
+
for file in files:
|
97
|
+
print(file.name)
|
98
|
+
print(file.url)
|
99
|
+
print(file.size)
|
100
|
+
|
101
|
+
# Download the file
|
102
|
+
file.download(root="download_directory", replace=True)
|
103
|
+
```
|
104
|
+
"""
|
105
|
+
|
106
|
+
QUERY = gql(
|
107
|
+
"""
|
108
|
+
query RunFiles($project: String!, $entity: String!, $name: String!, $fileCursor: String,
|
109
|
+
$fileLimit: Int = 50, $fileNames: [String] = [], $upload: Boolean = false, $pattern: String) {{
|
110
|
+
project(name: $project, entityName: $entity) {{
|
111
|
+
internalId
|
112
|
+
run(name: $name) {{
|
113
|
+
fileCount
|
114
|
+
...RunFilesFragment
|
115
|
+
}}
|
116
|
+
}}
|
117
|
+
}}
|
118
|
+
{}
|
119
|
+
""".format(FILE_FRAGMENT)
|
120
|
+
)
|
121
|
+
|
122
|
+
def __init__(
|
123
|
+
self,
|
124
|
+
client: RetryingClient,
|
125
|
+
run: Run,
|
126
|
+
names: list[str] | None = None,
|
127
|
+
per_page: int = 50,
|
128
|
+
upload: bool = False,
|
129
|
+
pattern: str | None = None,
|
130
|
+
):
|
131
|
+
"""Initialize a lazy iterator over a collection of `File` objects.
|
132
|
+
|
133
|
+
Files are retrieved in pages from the W&B server as needed.
|
134
|
+
|
135
|
+
Args:
|
136
|
+
client: The run object that contains the files
|
137
|
+
run: The run object that contains the files
|
138
|
+
names (list, optional): A list of file names to filter the files
|
139
|
+
per_page (int, optional): The number of files to fetch per page
|
140
|
+
upload (bool, optional): If `True`, fetch the upload URL for each file
|
141
|
+
pattern (str, optional): Pattern to match when returning files from W&B
|
142
|
+
This pattern uses mySQL's LIKE syntax,
|
143
|
+
so matching all files that end with .json would be "%.json".
|
144
|
+
If both names and pattern are provided, a ValueError will be raised.
|
145
|
+
"""
|
146
|
+
if names and pattern:
|
147
|
+
raise ValueError(
|
148
|
+
"Querying for files by both names and pattern is not supported."
|
149
|
+
" Please provide either a list of names or a pattern to match.",
|
150
|
+
)
|
151
|
+
|
152
|
+
self.run = run
|
153
|
+
variables = {
|
154
|
+
"project": run.project,
|
155
|
+
"entity": run.entity,
|
156
|
+
"name": run.id,
|
157
|
+
"fileNames": names or [],
|
158
|
+
"upload": upload,
|
159
|
+
"pattern": pattern,
|
160
|
+
}
|
161
|
+
super().__init__(client, variables, per_page)
|
162
|
+
|
163
|
+
@property
|
164
|
+
def _length(self):
|
165
|
+
"""
|
166
|
+
Returns total number of files.
|
167
|
+
|
168
|
+
<!-- lazydoc-ignore: internal -->
|
169
|
+
"""
|
170
|
+
if not self.last_response:
|
171
|
+
self._load_page()
|
172
|
+
|
173
|
+
return self.last_response["project"]["run"]["fileCount"]
|
174
|
+
|
175
|
+
@property
|
176
|
+
def more(self):
|
177
|
+
"""Returns whether there are more files to fetch.
|
178
|
+
|
179
|
+
<!-- lazydoc-ignore: internal -->
|
180
|
+
"""
|
181
|
+
if self.last_response:
|
182
|
+
return self.last_response["project"]["run"]["files"]["pageInfo"][
|
183
|
+
"hasNextPage"
|
184
|
+
]
|
185
|
+
else:
|
186
|
+
return True
|
187
|
+
|
188
|
+
@property
|
189
|
+
def cursor(self):
|
190
|
+
"""Returns the cursor position for pagination of file results.
|
191
|
+
|
192
|
+
<!-- lazydoc-ignore: internal -->
|
193
|
+
"""
|
194
|
+
if self.last_response:
|
195
|
+
return self.last_response["project"]["run"]["files"]["edges"][-1]["cursor"]
|
196
|
+
else:
|
197
|
+
return None
|
198
|
+
|
199
|
+
def update_variables(self):
|
200
|
+
"""Updates the GraphQL query variables for pagination.
|
201
|
+
|
202
|
+
<!-- lazydoc-ignore: internal -->
|
203
|
+
"""
|
204
|
+
self.variables.update({"fileLimit": self.per_page, "fileCursor": self.cursor})
|
205
|
+
|
206
|
+
def convert_objects(self):
|
207
|
+
"""Converts GraphQL edges to File objects.
|
208
|
+
|
209
|
+
<!-- lazydoc-ignore: internal -->
|
210
|
+
"""
|
211
|
+
return [
|
212
|
+
File(self.client, r["node"], self.run)
|
213
|
+
for r in self.last_response["project"]["run"]["files"]["edges"]
|
214
|
+
]
|
215
|
+
|
216
|
+
def __repr__(self):
|
217
|
+
return "<Files {} ({})>".format("/".join(self.run.path), len(self))
|
218
|
+
|
219
|
+
|
220
|
+
class File(Attrs):
|
221
|
+
"""File saved to W&B.
|
222
|
+
|
223
|
+
Represents a single file stored in W&B. Includes access to file metadata.
|
224
|
+
Files are associated with a specific run and
|
225
|
+
can include text files, model weights, datasets, visualizations, and other
|
226
|
+
artifacts. You can download the file, delete the file, and access file
|
227
|
+
properties.
|
228
|
+
|
229
|
+
Specify one or more attributes in a dictionary to fine a specific
|
230
|
+
file logged to a specific run. You can search using the following keys:
|
231
|
+
|
232
|
+
- id (str): The ID of the run that contains the file
|
233
|
+
- name (str): Name of the file
|
234
|
+
- url (str): path to file
|
235
|
+
- direct_url (str): path to file in the bucket
|
236
|
+
- sizeBytes (int): size of file in bytes
|
237
|
+
- md5 (str): md5 of file
|
238
|
+
- mimetype (str): mimetype of file
|
239
|
+
- updated_at (str): timestamp of last update
|
240
|
+
- path_uri (str): path to file in the bucket, currently only available for S3 objects and reference files
|
241
|
+
|
242
|
+
Args:
|
243
|
+
client: The run object that contains the file
|
244
|
+
attrs (dict): A dictionary of attributes that define the file
|
245
|
+
run: The run object that contains the file
|
246
|
+
|
247
|
+
<!-- lazydoc-ignore-class: internal -->
|
248
|
+
"""
|
249
|
+
|
250
|
+
def __init__(self, client, attrs, run=None):
|
251
|
+
self.client = client
|
252
|
+
self._attrs = attrs
|
253
|
+
self.run = run
|
254
|
+
self.server_supports_delete_file_with_project_id: bool | None = None
|
255
|
+
super().__init__(dict(attrs))
|
256
|
+
|
257
|
+
@property
|
258
|
+
def size(self):
|
259
|
+
"""Returns the size of the file in bytes."""
|
260
|
+
size_bytes = self._attrs["sizeBytes"]
|
261
|
+
if size_bytes is not None:
|
262
|
+
return int(size_bytes)
|
263
|
+
return 0
|
264
|
+
|
265
|
+
@property
|
266
|
+
def path_uri(self) -> str:
|
267
|
+
"""Returns the URI path to the file in the storage bucket.
|
268
|
+
|
269
|
+
Returns:
|
270
|
+
str: The S3 URI (e.g., 's3://bucket/path/to/file') if the file is stored in S3,
|
271
|
+
the direct URL if it's a reference file, or an empty string if unavailable.
|
272
|
+
"""
|
273
|
+
if not (direct_url := self._attrs.get("directUrl")):
|
274
|
+
wandb.termwarn("Unable to find direct_url of file")
|
275
|
+
return ""
|
276
|
+
|
277
|
+
# For reference files, both the directUrl and the url are just the path to the file in the bucket
|
278
|
+
if direct_url == self._attrs.get("url"):
|
279
|
+
return direct_url
|
280
|
+
|
281
|
+
try:
|
282
|
+
return utils.parse_s3_url_to_s3_uri(direct_url)
|
283
|
+
except ValueError:
|
284
|
+
wandb.termwarn("path_uri is only available for files stored in S3")
|
285
|
+
return ""
|
286
|
+
|
287
|
+
@normalize_exceptions
|
288
|
+
@retry.retriable(
|
289
|
+
retry_timedelta=RETRY_TIMEDELTA,
|
290
|
+
check_retry_fn=util.no_retry_auth,
|
291
|
+
retryable_exceptions=(RetryError, requests.RequestException),
|
292
|
+
)
|
293
|
+
def download(
|
294
|
+
self,
|
295
|
+
root: str = ".",
|
296
|
+
replace: bool = False,
|
297
|
+
exist_ok: bool = False,
|
298
|
+
api: Api | None = None,
|
299
|
+
) -> io.TextIOWrapper:
|
300
|
+
"""Downloads a file previously saved by a run from the wandb server.
|
301
|
+
|
302
|
+
Args:
|
303
|
+
root: Local directory to save the file. Defaults to the
|
304
|
+
current working directory (".").
|
305
|
+
replace: If `True`, download will overwrite a local file
|
306
|
+
if it exists. Defaults to `False`.
|
307
|
+
exist_ok: If `True`, will not raise ValueError if file already
|
308
|
+
exists and will not re-download unless replace=True.
|
309
|
+
Defaults to `False`.
|
310
|
+
api: If specified, the `Api` instance used to download the file.
|
311
|
+
|
312
|
+
Raises:
|
313
|
+
`ValueError` if file already exists, `replace=False` and
|
314
|
+
`exist_ok=False`.
|
315
|
+
"""
|
316
|
+
if api is None:
|
317
|
+
api = wandb.Api()
|
318
|
+
|
319
|
+
path = os.path.join(root, self.name)
|
320
|
+
if os.path.exists(path) and not replace:
|
321
|
+
if exist_ok:
|
322
|
+
return open(path)
|
323
|
+
else:
|
324
|
+
raise ValueError(
|
325
|
+
"File already exists, pass replace=True to overwrite or exist_ok=True to leave it as is and don't error."
|
326
|
+
)
|
327
|
+
|
328
|
+
util.download_file_from_url(path, self.url, api.api_key)
|
329
|
+
return open(path)
|
330
|
+
|
331
|
+
@normalize_exceptions
|
332
|
+
def delete(self):
|
333
|
+
"""Delete the file from the W&B server."""
|
334
|
+
project_id_mutation_fragment = ""
|
335
|
+
project_id_variable_fragment = ""
|
336
|
+
variable_values = {
|
337
|
+
"files": [self.id],
|
338
|
+
}
|
339
|
+
|
340
|
+
# Add projectId to mutation and variables if the server supports it.
|
341
|
+
# Otherwise, do not include projectId in mutation for older server versions which do not support it.
|
342
|
+
if self._server_accepts_project_id_for_delete_file():
|
343
|
+
variable_values["projectId"] = self.run._project_internal_id
|
344
|
+
project_id_variable_fragment = ", $projectId: Int"
|
345
|
+
project_id_mutation_fragment = "projectId: $projectId"
|
346
|
+
|
347
|
+
mutation_string = """
|
348
|
+
mutation deleteFiles($files: [ID!]!{}) {{
|
349
|
+
deleteFiles(input: {{
|
350
|
+
files: $files
|
351
|
+
{}
|
352
|
+
}}) {{
|
353
|
+
success
|
354
|
+
}}
|
355
|
+
}}
|
356
|
+
""".format(project_id_variable_fragment, project_id_mutation_fragment)
|
357
|
+
mutation = gql(mutation_string)
|
358
|
+
|
359
|
+
self.client.execute(
|
360
|
+
mutation,
|
361
|
+
variable_values=variable_values,
|
362
|
+
)
|
363
|
+
|
364
|
+
def __repr__(self):
|
365
|
+
return "<File {} ({}) {}>".format(
|
366
|
+
self.name,
|
367
|
+
self.mimetype,
|
368
|
+
util.to_human_size(self.size, units=util.POW_2_BYTES),
|
369
|
+
)
|
370
|
+
|
371
|
+
@normalize_exceptions
|
372
|
+
def _server_accepts_project_id_for_delete_file(self) -> bool:
|
373
|
+
"""Returns True if the server supports deleting files with a projectId.
|
374
|
+
|
375
|
+
This check is done by utilizing GraphQL introspection in the available fields on the DeleteFiles API.
|
376
|
+
"""
|
377
|
+
query_string = """
|
378
|
+
query ProbeDeleteFilesProjectIdInput {
|
379
|
+
DeleteFilesProjectIdInputType: __type(name:"DeleteFilesInput") {
|
380
|
+
inputFields{
|
381
|
+
name
|
382
|
+
}
|
383
|
+
}
|
384
|
+
}
|
385
|
+
"""
|
386
|
+
|
387
|
+
# Only perform the query once to avoid extra network calls
|
388
|
+
if self.server_supports_delete_file_with_project_id is None:
|
389
|
+
query = gql(query_string)
|
390
|
+
res = self.client.execute(query)
|
391
|
+
|
392
|
+
# If projectId is in the inputFields, the server supports deleting files with a projectId
|
393
|
+
self.server_supports_delete_file_with_project_id = "projectId" in [
|
394
|
+
x["name"]
|
395
|
+
for x in (
|
396
|
+
res.get("DeleteFilesProjectIdInputType", {}).get(
|
397
|
+
"inputFields", [{}]
|
398
|
+
)
|
399
|
+
)
|
400
|
+
]
|
401
|
+
|
402
|
+
return self.server_supports_delete_file_with_project_id
|
@@ -0,0 +1,201 @@
|
|
1
|
+
"""W&B Public API for Run History.
|
2
|
+
|
3
|
+
This module provides classes for efficiently scanning and sampling run
|
4
|
+
history data.
|
5
|
+
|
6
|
+
Note:
|
7
|
+
This module is part of the W&B Public API and provides methods
|
8
|
+
to access run history data. It handles pagination automatically and offers
|
9
|
+
both complete and sampled access to metrics logged during training runs.
|
10
|
+
"""
|
11
|
+
|
12
|
+
import json
|
13
|
+
|
14
|
+
from wandb_gql import gql
|
15
|
+
|
16
|
+
from wandb.apis.normalize import normalize_exceptions
|
17
|
+
from wandb.apis.public import api, runs
|
18
|
+
|
19
|
+
|
20
|
+
class HistoryScan:
|
21
|
+
"""Iterator for scanning complete run history.
|
22
|
+
|
23
|
+
<!-- lazydoc-ignore-class: internal -->
|
24
|
+
"""
|
25
|
+
|
26
|
+
QUERY = gql(
|
27
|
+
"""
|
28
|
+
query HistoryPage($entity: String!, $project: String!, $run: String!, $minStep: Int64!, $maxStep: Int64!, $pageSize: Int!) {
|
29
|
+
project(name: $project, entityName: $entity) {
|
30
|
+
run(name: $run) {
|
31
|
+
history(minStep: $minStep, maxStep: $maxStep, samples: $pageSize)
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
"""
|
36
|
+
)
|
37
|
+
|
38
|
+
def __init__(
|
39
|
+
self,
|
40
|
+
client: api.RetryingClient,
|
41
|
+
run: api.public.runs.Run,
|
42
|
+
min_step: int,
|
43
|
+
max_step: int,
|
44
|
+
page_size: int = 1000,
|
45
|
+
):
|
46
|
+
"""Initialize a HistoryScan instance.
|
47
|
+
|
48
|
+
Args:
|
49
|
+
client: The client instance to use for making API calls to the W&B backend.
|
50
|
+
run: The run object whose history is to be scanned.
|
51
|
+
min_step: The minimum step to start scanning from.
|
52
|
+
max_step: The maximum step to scan up to.
|
53
|
+
page_size: Number of history rows to fetch per page.
|
54
|
+
Default page_size is 1000.
|
55
|
+
"""
|
56
|
+
self.client = client
|
57
|
+
self.run = run
|
58
|
+
self.page_size = page_size
|
59
|
+
self.min_step = min_step
|
60
|
+
self.max_step = max_step
|
61
|
+
self.page_offset = min_step # minStep for next page
|
62
|
+
self.scan_offset = 0 # index within current page of rows
|
63
|
+
self.rows = [] # current page of rows
|
64
|
+
|
65
|
+
def __iter__(self):
|
66
|
+
self.page_offset = self.min_step
|
67
|
+
self.scan_offset = 0
|
68
|
+
self.rows = []
|
69
|
+
return self
|
70
|
+
|
71
|
+
def __next__(self):
|
72
|
+
"""Return the next row of history data with automatic pagination.
|
73
|
+
|
74
|
+
<!-- lazydoc-ignore: internal -->
|
75
|
+
"""
|
76
|
+
while True:
|
77
|
+
if self.scan_offset < len(self.rows):
|
78
|
+
row = self.rows[self.scan_offset]
|
79
|
+
self.scan_offset += 1
|
80
|
+
return row
|
81
|
+
if self.page_offset >= self.max_step:
|
82
|
+
raise StopIteration()
|
83
|
+
self._load_next()
|
84
|
+
|
85
|
+
next = __next__
|
86
|
+
|
87
|
+
@normalize_exceptions
|
88
|
+
def _load_next(self):
|
89
|
+
max_step = self.page_offset + self.page_size
|
90
|
+
if max_step > self.max_step:
|
91
|
+
max_step = self.max_step
|
92
|
+
variables = {
|
93
|
+
"entity": self.run.entity,
|
94
|
+
"project": self.run.project,
|
95
|
+
"run": self.run.id,
|
96
|
+
"minStep": int(self.page_offset),
|
97
|
+
"maxStep": int(max_step),
|
98
|
+
"pageSize": int(self.page_size),
|
99
|
+
}
|
100
|
+
|
101
|
+
res = self.client.execute(self.QUERY, variable_values=variables)
|
102
|
+
res = res["project"]["run"]["history"]
|
103
|
+
self.rows = [json.loads(row) for row in res]
|
104
|
+
self.page_offset += self.page_size
|
105
|
+
self.scan_offset = 0
|
106
|
+
|
107
|
+
|
108
|
+
class SampledHistoryScan:
|
109
|
+
"""Iterator for sampling run history data.
|
110
|
+
|
111
|
+
<!-- lazydoc-ignore-class: internal -->
|
112
|
+
"""
|
113
|
+
|
114
|
+
QUERY = gql(
|
115
|
+
"""
|
116
|
+
query SampledHistoryPage($entity: String!, $project: String!, $run: String!, $spec: JSONString!) {
|
117
|
+
project(name: $project, entityName: $entity) {
|
118
|
+
run(name: $run) {
|
119
|
+
sampledHistory(specs: [$spec])
|
120
|
+
}
|
121
|
+
}
|
122
|
+
}
|
123
|
+
"""
|
124
|
+
)
|
125
|
+
|
126
|
+
def __init__(
|
127
|
+
self,
|
128
|
+
client: api.RetryingClient,
|
129
|
+
run: runs.Run,
|
130
|
+
keys: list,
|
131
|
+
min_step: int,
|
132
|
+
max_step: int,
|
133
|
+
page_size: int = 1000,
|
134
|
+
):
|
135
|
+
"""Initialize a SampledHistoryScan instance.
|
136
|
+
|
137
|
+
Args:
|
138
|
+
client: The client instance to use for making API calls to the W&B backend.
|
139
|
+
run: The run object whose history is to be sampled.
|
140
|
+
keys: List of keys to sample from the history.
|
141
|
+
min_step: The minimum step to start sampling from.
|
142
|
+
max_step: The maximum step to sample up to.
|
143
|
+
page_size: Number of sampled history rows to fetch per page.
|
144
|
+
Default page_size is 1000.
|
145
|
+
"""
|
146
|
+
self.client = client
|
147
|
+
self.run = run
|
148
|
+
self.keys = keys
|
149
|
+
self.page_size = page_size
|
150
|
+
self.min_step = min_step
|
151
|
+
self.max_step = max_step
|
152
|
+
self.page_offset = min_step # minStep for next page
|
153
|
+
self.scan_offset = 0 # index within current page of rows
|
154
|
+
self.rows = [] # current page of rows
|
155
|
+
|
156
|
+
def __iter__(self):
|
157
|
+
self.page_offset = self.min_step
|
158
|
+
self.scan_offset = 0
|
159
|
+
self.rows = []
|
160
|
+
return self
|
161
|
+
|
162
|
+
def __next__(self):
|
163
|
+
"""Return the next row of sampled history data with automatic pagination.
|
164
|
+
|
165
|
+
<!-- lazydoc-ignore: internal -->
|
166
|
+
"""
|
167
|
+
while True:
|
168
|
+
if self.scan_offset < len(self.rows):
|
169
|
+
row = self.rows[self.scan_offset]
|
170
|
+
self.scan_offset += 1
|
171
|
+
return row
|
172
|
+
if self.page_offset >= self.max_step:
|
173
|
+
raise StopIteration()
|
174
|
+
self._load_next()
|
175
|
+
|
176
|
+
next = __next__
|
177
|
+
|
178
|
+
@normalize_exceptions
|
179
|
+
def _load_next(self):
|
180
|
+
max_step = self.page_offset + self.page_size
|
181
|
+
if max_step > self.max_step:
|
182
|
+
max_step = self.max_step
|
183
|
+
variables = {
|
184
|
+
"entity": self.run.entity,
|
185
|
+
"project": self.run.project,
|
186
|
+
"run": self.run.id,
|
187
|
+
"spec": json.dumps(
|
188
|
+
{
|
189
|
+
"keys": self.keys,
|
190
|
+
"minStep": int(self.page_offset),
|
191
|
+
"maxStep": int(max_step),
|
192
|
+
"samples": int(self.page_size),
|
193
|
+
}
|
194
|
+
),
|
195
|
+
}
|
196
|
+
|
197
|
+
res = self.client.execute(self.QUERY, variable_values=variables)
|
198
|
+
res = res["project"]["run"]["sampledHistory"]
|
199
|
+
self.rows = res[0]
|
200
|
+
self.page_offset += self.page_size
|
201
|
+
self.scan_offset = 0
|