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
wandb/__main__.py
ADDED
wandb/_iterutils.py
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import TYPE_CHECKING, Any, Iterable, TypeVar, Union, overload
|
4
|
+
|
5
|
+
if TYPE_CHECKING:
|
6
|
+
T = TypeVar("T")
|
7
|
+
ClassInfo = Union[type[T], tuple[type[T], ...]]
|
8
|
+
|
9
|
+
|
10
|
+
@overload
|
11
|
+
def always_list(obj: Iterable[T], base_type: ClassInfo = ...) -> list[T]: ...
|
12
|
+
@overload
|
13
|
+
def always_list(obj: T, base_type: ClassInfo = ...) -> list[T]: ...
|
14
|
+
def always_list(obj: Any, base_type: Any = (str, bytes)) -> list[T]:
|
15
|
+
"""Return a guaranteed list of objects from a single instance OR iterable of such objects.
|
16
|
+
|
17
|
+
By default, assume the returned list should have string-like elements (i.e. `str`/`bytes`).
|
18
|
+
|
19
|
+
Adapted from `more_itertools.always_iterable`, but simplified for internal use. See:
|
20
|
+
https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.always_iterable
|
21
|
+
"""
|
22
|
+
return [obj] if isinstance(obj, base_type) else list(obj)
|
23
|
+
|
24
|
+
|
25
|
+
def one(
|
26
|
+
iterable: Iterable[T],
|
27
|
+
too_short: type[Exception] | Exception | None = None,
|
28
|
+
too_long: type[Exception] | Exception | None = None,
|
29
|
+
) -> T:
|
30
|
+
"""Return the only item in the iterable.
|
31
|
+
|
32
|
+
Note:
|
33
|
+
This is intended **only** as an internal helper/convenience function,
|
34
|
+
and its implementation is directly adapted from `more_itertools.one`.
|
35
|
+
Users needing similar functionality are strongly encouraged to use
|
36
|
+
that library instead:
|
37
|
+
https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.one
|
38
|
+
|
39
|
+
Args:
|
40
|
+
iterable: The iterable to get the only item from.
|
41
|
+
too_short: Custom exception to raise if the iterable has no items.
|
42
|
+
too_long: Custom exception to raise if the iterable has multiple items.
|
43
|
+
|
44
|
+
Raises:
|
45
|
+
ValueError or `too_short`: If the iterable has no items.
|
46
|
+
ValueError or `too_long`: If the iterable has multiple items.
|
47
|
+
"""
|
48
|
+
# For a general iterable, avoid inadvertently iterating through all values,
|
49
|
+
# which may be costly or impossible (e.g. if infinite). Only check that:
|
50
|
+
|
51
|
+
# ... the first item exists
|
52
|
+
it = iter(iterable)
|
53
|
+
try:
|
54
|
+
obj = next(it)
|
55
|
+
except StopIteration:
|
56
|
+
raise (too_short or ValueError("Expected 1 item in iterable, got 0")) from None
|
57
|
+
|
58
|
+
# ...the second item doesn't
|
59
|
+
try:
|
60
|
+
_ = next(it)
|
61
|
+
except StopIteration:
|
62
|
+
return obj
|
63
|
+
raise (
|
64
|
+
too_long or ValueError("Expected 1 item in iterable, got multiple")
|
65
|
+
) from None
|
@@ -0,0 +1,30 @@
|
|
1
|
+
"""Internal utilities for working with pydantic."""
|
2
|
+
|
3
|
+
from .base import (
|
4
|
+
CompatBaseModel,
|
5
|
+
GQLBase,
|
6
|
+
GQLId,
|
7
|
+
SerializedToJson,
|
8
|
+
Typename,
|
9
|
+
ensure_json,
|
10
|
+
)
|
11
|
+
from .utils import IS_PYDANTIC_V2, from_json, gql_typename, pydantic_isinstance, to_json
|
12
|
+
from .v1_compat import AliasChoices, computed_field, field_validator, model_validator
|
13
|
+
|
14
|
+
__all__ = [
|
15
|
+
"IS_PYDANTIC_V2",
|
16
|
+
"CompatBaseModel",
|
17
|
+
"GQLBase",
|
18
|
+
"Typename",
|
19
|
+
"GQLId",
|
20
|
+
"SerializedToJson",
|
21
|
+
"AliasChoices",
|
22
|
+
"computed_field",
|
23
|
+
"field_validator",
|
24
|
+
"model_validator",
|
25
|
+
"pydantic_isinstance",
|
26
|
+
"to_json",
|
27
|
+
"from_json",
|
28
|
+
"ensure_json",
|
29
|
+
"gql_typename",
|
30
|
+
]
|
wandb/_pydantic/base.py
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
"""Base classes and other customizations for generated pydantic types."""
|
2
|
+
|
3
|
+
from __future__ import annotations
|
4
|
+
|
5
|
+
from typing import TYPE_CHECKING, Any, Callable, Literal, TypeVar
|
6
|
+
|
7
|
+
from pydantic import BaseModel, ConfigDict, Field, Json, StrictStr
|
8
|
+
from typing_extensions import Annotated, TypedDict, Unpack, override
|
9
|
+
|
10
|
+
from .utils import IS_PYDANTIC_V2, to_json
|
11
|
+
from .v1_compat import PydanticCompatMixin
|
12
|
+
|
13
|
+
if TYPE_CHECKING:
|
14
|
+
from pydantic.main import IncEx
|
15
|
+
|
16
|
+
|
17
|
+
class ModelDumpKwargs(TypedDict, total=False):
|
18
|
+
"""Shared keyword arguments for `BaseModel.model_{dump,dump_json}`."""
|
19
|
+
|
20
|
+
include: IncEx | None
|
21
|
+
exclude: IncEx | None
|
22
|
+
context: dict[str, Any] | None
|
23
|
+
by_alias: bool | None
|
24
|
+
exclude_unset: bool
|
25
|
+
exclude_defaults: bool
|
26
|
+
exclude_none: bool
|
27
|
+
round_trip: bool
|
28
|
+
warnings: bool | Literal["none", "warn", "error"]
|
29
|
+
fallback: Callable[[Any], Any] | None
|
30
|
+
serialize_as_any: bool
|
31
|
+
|
32
|
+
|
33
|
+
#: Custom overrides of default kwargs for `BaseModel.model_{dump,dump_json}`.
|
34
|
+
MODEL_DUMP_DEFAULTS = ModelDumpKwargs(
|
35
|
+
by_alias=True, # Always serialize with aliases (e.g. camelCase names)
|
36
|
+
round_trip=True, # Ensure serialized values remain valid inputs for deserialization
|
37
|
+
)
|
38
|
+
|
39
|
+
|
40
|
+
# v1-compatible base class for pydantic types.
|
41
|
+
class CompatBaseModel(PydanticCompatMixin, BaseModel):
|
42
|
+
__doc__ = None # Prevent subclasses from inheriting the BaseModel docstring
|
43
|
+
|
44
|
+
|
45
|
+
# Base class for all GraphQL-generated types.
|
46
|
+
# Omitted from docstring to avoid inclusion in generated docs.
|
47
|
+
class GQLBase(CompatBaseModel):
|
48
|
+
model_config = ConfigDict(
|
49
|
+
populate_by_name=True, # Discouraged in pydantic v2.11+, will be deprecated in v3
|
50
|
+
validate_by_name=True, # Introduced in pydantic v2.11
|
51
|
+
validate_by_alias=True, # Introduced in pydantic v2.11
|
52
|
+
serialize_by_alias=True, # Introduced in pydantic v2.11
|
53
|
+
validate_assignment=True,
|
54
|
+
validate_default=True,
|
55
|
+
use_attribute_docstrings=True,
|
56
|
+
from_attributes=True,
|
57
|
+
revalidate_instances="always",
|
58
|
+
protected_namespaces=(), # Some GraphQL fields may begin with "model_"
|
59
|
+
)
|
60
|
+
|
61
|
+
@override
|
62
|
+
def model_dump(
|
63
|
+
self,
|
64
|
+
*,
|
65
|
+
mode: Literal["json", "python"] | str = "json", # NOTE: changed default
|
66
|
+
**kwargs: Unpack[ModelDumpKwargs],
|
67
|
+
) -> dict[str, Any]:
|
68
|
+
kwargs = {**MODEL_DUMP_DEFAULTS, **kwargs}
|
69
|
+
return super().model_dump(mode=mode, **kwargs)
|
70
|
+
|
71
|
+
@override
|
72
|
+
def model_dump_json(
|
73
|
+
self,
|
74
|
+
*,
|
75
|
+
indent: int | None = None,
|
76
|
+
**kwargs: Unpack[ModelDumpKwargs],
|
77
|
+
) -> str:
|
78
|
+
kwargs = {**MODEL_DUMP_DEFAULTS, **kwargs}
|
79
|
+
return super().model_dump_json(indent=indent, **kwargs)
|
80
|
+
|
81
|
+
|
82
|
+
# ------------------------------------------------------------------------------
|
83
|
+
# Reusable annotations for field types
|
84
|
+
T = TypeVar("T")
|
85
|
+
|
86
|
+
if IS_PYDANTIC_V2 or TYPE_CHECKING:
|
87
|
+
GQLId = Annotated[
|
88
|
+
StrictStr,
|
89
|
+
Field(repr=False, frozen=True),
|
90
|
+
]
|
91
|
+
else:
|
92
|
+
# FIXME: Find a way to fix this for pydantic v1, which doesn't like when
|
93
|
+
# `Field(...)` used in the field assignment AND `Annotated[...]`.
|
94
|
+
# This is a problem for codegen, which can currently outputs e.g.
|
95
|
+
#
|
96
|
+
# class MyModel(GQLBase):
|
97
|
+
# my_id: GQLId = Field(alias="myID")
|
98
|
+
#
|
99
|
+
GQLId = StrictStr # type: ignore[misc]
|
100
|
+
|
101
|
+
Typename = Annotated[
|
102
|
+
T,
|
103
|
+
Field(repr=False, frozen=True, alias="__typename"),
|
104
|
+
]
|
105
|
+
|
106
|
+
|
107
|
+
def ensure_json(v: Any) -> Any:
|
108
|
+
"""In case the incoming value isn't serialized JSON, reserialize it.
|
109
|
+
|
110
|
+
This lets us use `Json[...]` fields with values that are already deserialized.
|
111
|
+
"""
|
112
|
+
# NOTE: Assumes that the deserialized type is not itself a string.
|
113
|
+
# Revisit this if we need to support deserialized types that are str/bytes.
|
114
|
+
return v if isinstance(v, (str, bytes)) else to_json(v)
|
115
|
+
|
116
|
+
|
117
|
+
if IS_PYDANTIC_V2 or TYPE_CHECKING:
|
118
|
+
from pydantic import BeforeValidator, PlainSerializer
|
119
|
+
|
120
|
+
SerializedToJson = Annotated[
|
121
|
+
Json[T],
|
122
|
+
# Allow lenient instantiation/validation: incoming data may already be deserialized.
|
123
|
+
BeforeValidator(ensure_json),
|
124
|
+
PlainSerializer(to_json),
|
125
|
+
]
|
126
|
+
else:
|
127
|
+
# FIXME: Restore, modify, or replace this later after ensuring pydantic v1 compatibility.
|
128
|
+
SerializedToJson = Json[T] # type: ignore[misc]
|
wandb/_pydantic/utils.py
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
"""Internal utilities for working with Pydantic types and data."""
|
2
|
+
|
3
|
+
from __future__ import annotations
|
4
|
+
|
5
|
+
import json
|
6
|
+
import sys
|
7
|
+
from contextlib import suppress
|
8
|
+
from typing import Any, Type
|
9
|
+
|
10
|
+
import pydantic
|
11
|
+
from pydantic import BaseModel, ValidationError
|
12
|
+
from typing_extensions import TypeAlias
|
13
|
+
|
14
|
+
PYTHON_VERSION = sys.version_info
|
15
|
+
|
16
|
+
pydantic_major, *_ = pydantic.VERSION.split(".")
|
17
|
+
IS_PYDANTIC_V2: bool = int(pydantic_major) >= 2
|
18
|
+
|
19
|
+
|
20
|
+
BaseModelType: TypeAlias = Type[BaseModel]
|
21
|
+
|
22
|
+
|
23
|
+
def gql_typename(cls: type[BaseModel]) -> str:
|
24
|
+
"""Get the GraphQL typename for a Pydantic model."""
|
25
|
+
if (field := cls.model_fields.get("typename__")) and (typename := field.default):
|
26
|
+
return typename
|
27
|
+
raise TypeError(f"Cannot extract GraphQL typename from: {cls.__qualname__!r}.")
|
28
|
+
|
29
|
+
|
30
|
+
if IS_PYDANTIC_V2:
|
31
|
+
import pydantic_core # pydantic_core is only installed by pydantic v2
|
32
|
+
|
33
|
+
def from_json(s: str) -> Any:
|
34
|
+
"""Quickly deserialize a JSON string to a Python object."""
|
35
|
+
return pydantic_core.from_json(s)
|
36
|
+
|
37
|
+
def to_json(v: Any) -> str:
|
38
|
+
"""Quickly serialize a (possibly Pydantic) object to a JSON string."""
|
39
|
+
return pydantic_core.to_json(v, by_alias=True, round_trip=True).decode("utf-8")
|
40
|
+
|
41
|
+
def pydantic_isinstance(
|
42
|
+
v: Any, classinfo: BaseModelType | tuple[BaseModelType, ...]
|
43
|
+
) -> bool:
|
44
|
+
"""Return True if the object could be parsed into the given Pydantic type.
|
45
|
+
|
46
|
+
This is like a more lenient version of `isinstance()` for use with Pydantic.
|
47
|
+
In Pydantic v2, should be fast since the underlying implementation is in Rust,
|
48
|
+
and it may be preferable over `try:...except ValidationError:...`.
|
49
|
+
|
50
|
+
See: https://docs.pydantic.dev/latest/api/pydantic_core/#pydantic_core.SchemaValidator.isinstance_python
|
51
|
+
"""
|
52
|
+
if isinstance(classinfo, tuple):
|
53
|
+
return any(
|
54
|
+
cls.__pydantic_validator__.isinstance_python(v) for cls in classinfo
|
55
|
+
)
|
56
|
+
cls = classinfo
|
57
|
+
return cls.__pydantic_validator__.isinstance_python(v)
|
58
|
+
|
59
|
+
else:
|
60
|
+
# Pydantic v1 fallback implementations.
|
61
|
+
# These may be noticeably slower, but their primary goal is to ensure
|
62
|
+
# compatibility with Pydantic v1 so long as we need to support it.
|
63
|
+
|
64
|
+
from pydantic.json import pydantic_encoder # Only valid in pydantic v1
|
65
|
+
|
66
|
+
def from_json(s: str) -> Any:
|
67
|
+
return json.loads(s)
|
68
|
+
|
69
|
+
def to_json(v: Any) -> str:
|
70
|
+
return json.dumps(v, default=pydantic_encoder)
|
71
|
+
|
72
|
+
def pydantic_isinstance(
|
73
|
+
v: Any, classinfo: BaseModelType | tuple[BaseModelType, ...]
|
74
|
+
) -> bool:
|
75
|
+
classes = classinfo if isinstance(classinfo, tuple) else (classinfo,)
|
76
|
+
for cls in classes:
|
77
|
+
with suppress(ValidationError):
|
78
|
+
cls.model_validate(v)
|
79
|
+
return True
|
80
|
+
return False
|
@@ -0,0 +1,284 @@
|
|
1
|
+
"""Provides partial support for compatibility with Pydantic v1."""
|
2
|
+
|
3
|
+
from __future__ import annotations
|
4
|
+
|
5
|
+
import json
|
6
|
+
from functools import lru_cache
|
7
|
+
from inspect import signature
|
8
|
+
from operator import attrgetter
|
9
|
+
from typing import TYPE_CHECKING, Any, Callable, ClassVar, Literal, overload
|
10
|
+
|
11
|
+
import pydantic
|
12
|
+
|
13
|
+
from .utils import IS_PYDANTIC_V2, to_json
|
14
|
+
|
15
|
+
if TYPE_CHECKING:
|
16
|
+
from typing import Protocol
|
17
|
+
|
18
|
+
class V1Model(Protocol):
|
19
|
+
# ------------------------------------------------------------------------------
|
20
|
+
# NOTE: These aren't part of the original v1 BaseModel spec, but were added as
|
21
|
+
# internal helpers and are (re-)declared here to satisfy mypy checks.
|
22
|
+
@classmethod
|
23
|
+
def _dump_json_vals(cls, values: dict, by_alias: bool) -> dict: ...
|
24
|
+
|
25
|
+
# ------------------------------------------------------------------------------
|
26
|
+
# These methods are part of the original v1 BaseModel spec.
|
27
|
+
|
28
|
+
__config__: ClassVar[type]
|
29
|
+
__fields__: ClassVar[dict[str, Any]]
|
30
|
+
__fields_set__: set[str]
|
31
|
+
|
32
|
+
@classmethod
|
33
|
+
def update_forward_refs(cls, *args: Any, **kwargs: Any) -> None: ...
|
34
|
+
@classmethod
|
35
|
+
def construct(cls, *args: Any, **kwargs: Any) -> V1Model: ...
|
36
|
+
@classmethod
|
37
|
+
def parse_obj(cls, *args: Any, **kwargs: Any) -> V1Model: ...
|
38
|
+
@classmethod
|
39
|
+
def parse_raw(cls, *args: Any, **kwargs: Any) -> V1Model: ...
|
40
|
+
|
41
|
+
def dict(self, **kwargs: Any) -> dict[str, Any]: ...
|
42
|
+
def json(self, **kwargs: Any) -> str: ...
|
43
|
+
def copy(self, **kwargs: Any) -> V1Model: ...
|
44
|
+
|
45
|
+
|
46
|
+
# Maps {v2 -> v1} model config keys that were renamed in v2.
|
47
|
+
# See: https://docs.pydantic.dev/latest/migration/#changes-to-config
|
48
|
+
_V1_CONFIG_KEYS = {
|
49
|
+
"populate_by_name": "allow_population_by_field_name",
|
50
|
+
"str_to_lower": "anystr_lower",
|
51
|
+
"str_strip_whitespace": "anystr_strip_whitespace",
|
52
|
+
"str_to_upper": "anystr_upper",
|
53
|
+
"ignored_types": "keep_untouched",
|
54
|
+
"str_max_length": "max_anystr_length",
|
55
|
+
"str_min_length": "min_anystr_length",
|
56
|
+
"from_attributes": "orm_mode",
|
57
|
+
"json_schema_extra": "schema_extra",
|
58
|
+
"validate_default": "validate_all",
|
59
|
+
}
|
60
|
+
|
61
|
+
|
62
|
+
def convert_v2_config(v2_config: dict[str, Any]) -> dict[str, Any]:
|
63
|
+
"""Internal helper: Return a copy of the v2 ConfigDict with renamed v1 keys."""
|
64
|
+
return {_V1_CONFIG_KEYS.get(k, k): v for k, v in v2_config.items()}
|
65
|
+
|
66
|
+
|
67
|
+
@lru_cache(maxsize=None) # Reduce repeat introspection via `signature()`
|
68
|
+
def allowed_arg_names(func: Callable) -> set[str]:
|
69
|
+
"""Internal helper: Return the names of args accepted by the given function."""
|
70
|
+
return set(signature(func).parameters)
|
71
|
+
|
72
|
+
|
73
|
+
# Pydantic BaseModels are defined with a custom metaclass, but its namespace
|
74
|
+
# has changed between pydantic versions.
|
75
|
+
#
|
76
|
+
# In v1, it can be imported as `from pydantic.main import ModelMetaclass`
|
77
|
+
# In v2, it's defined in an internal module so we avoid directly importing it.
|
78
|
+
PydanticModelMetaclass: type = type(pydantic.BaseModel)
|
79
|
+
|
80
|
+
|
81
|
+
class V1MixinMetaclass(PydanticModelMetaclass):
|
82
|
+
def __new__(
|
83
|
+
cls,
|
84
|
+
name: str,
|
85
|
+
bases: tuple[type, ...],
|
86
|
+
namespace: dict[str, Any],
|
87
|
+
**kwargs: Any,
|
88
|
+
):
|
89
|
+
# In the class definition, convert the model config, if any:
|
90
|
+
# # BEFORE
|
91
|
+
# class MyModel(BaseModel): # v2 model with `ConfigDict`
|
92
|
+
# model_config = ConfigDict(populate_by_name=True)
|
93
|
+
#
|
94
|
+
# # AFTER
|
95
|
+
# class MyModel(BaseModel): # v1 model with inner `Config` class
|
96
|
+
# class Config:
|
97
|
+
# allow_population_by_field_name = True
|
98
|
+
if config_dict := namespace.pop("model_config", None):
|
99
|
+
namespace["Config"] = type("Config", (), convert_v2_config(config_dict))
|
100
|
+
return super().__new__(cls, name, bases, namespace, **kwargs)
|
101
|
+
|
102
|
+
@property
|
103
|
+
def model_fields(self) -> dict[str, Any]:
|
104
|
+
return self.__fields__ # type: ignore[deprecated]
|
105
|
+
|
106
|
+
|
107
|
+
# Mixin to ensure compatibility of Pydantic models if Pydantic v1 is detected.
|
108
|
+
# These are "best effort" implementations and cannot guarantee complete
|
109
|
+
# compatibility in v1 environments.
|
110
|
+
#
|
111
|
+
# Whenever possible, users should strongly prefer upgrading to Pydantic v2 to
|
112
|
+
# ensure full compatibility.
|
113
|
+
class V1Mixin(metaclass=V1MixinMetaclass):
|
114
|
+
# Internal compat helpers
|
115
|
+
@classmethod
|
116
|
+
def _dump_json_vals(cls, values: dict[str, Any], by_alias: bool) -> dict[str, Any]:
|
117
|
+
"""Reserialize values from `Json`-typed fields after dumping the model to dict."""
|
118
|
+
# Get the expected keys (after `.model_dump()`) for `Json`-typed fields.
|
119
|
+
# Note: In v1, `Json` fields have `ModelField.parse_json == True`
|
120
|
+
json_fields = (f for f in cls.__fields__.values() if f.parse_json) # type: ignore[deprecated]
|
121
|
+
get_key = attrgetter("alias" if by_alias else "name")
|
122
|
+
json_field_keys = set(map(get_key, json_fields))
|
123
|
+
|
124
|
+
return {
|
125
|
+
# Only serialize `Json` fields with non-null values.
|
126
|
+
k: to_json(v) if ((v is not None) and (k in json_field_keys)) else v
|
127
|
+
for k, v in values.items()
|
128
|
+
}
|
129
|
+
|
130
|
+
# ------------------------------------------------------------------------------
|
131
|
+
@classmethod
|
132
|
+
def __try_update_forward_refs__(cls: type[V1Model], **localns: Any) -> None:
|
133
|
+
if hasattr(sup := super(), "__try_update_forward_refs__"):
|
134
|
+
sup.__try_update_forward_refs__(**localns)
|
135
|
+
|
136
|
+
@classmethod
|
137
|
+
def model_rebuild(cls, *args: Any, **kwargs: Any) -> None:
|
138
|
+
return cls.update_forward_refs(*args, **kwargs)
|
139
|
+
|
140
|
+
@classmethod
|
141
|
+
def model_construct(cls, *args: Any, **kwargs: Any) -> V1Model:
|
142
|
+
return cls.construct(*args, **kwargs)
|
143
|
+
|
144
|
+
@classmethod
|
145
|
+
def model_validate(cls, *args: Any, **kwargs: Any) -> V1Model:
|
146
|
+
return cls.parse_obj(*args, **kwargs)
|
147
|
+
|
148
|
+
@classmethod
|
149
|
+
def model_validate_json(cls, *args: Any, **kwargs: Any) -> V1Model:
|
150
|
+
return cls.parse_raw(*args, **kwargs)
|
151
|
+
|
152
|
+
def model_dump(self: V1Model, **kwargs: Any) -> dict[str, Any]:
|
153
|
+
# Pass only kwargs that are allowed in the V1 method.
|
154
|
+
allowed_keys = allowed_arg_names(self.dict) & kwargs.keys()
|
155
|
+
dict_ = self.dict(**{k: kwargs[k] for k in allowed_keys})
|
156
|
+
|
157
|
+
# Ugly hack: Try to serialize `Json` fields correctly when `round_trip=True` in pydantic v1
|
158
|
+
if kwargs.get("round_trip", False):
|
159
|
+
by_alias: bool = kwargs.get("by_alias", False)
|
160
|
+
return self._dump_json_vals(dict_, by_alias=by_alias)
|
161
|
+
|
162
|
+
return dict_
|
163
|
+
|
164
|
+
def model_dump_json(self: V1Model, **kwargs: Any) -> str:
|
165
|
+
# Pass only kwargs that are allowed in the V1 method.
|
166
|
+
allowed_keys = allowed_arg_names(self.json) & kwargs.keys()
|
167
|
+
json_ = self.json(**{k: kwargs[k] for k in allowed_keys})
|
168
|
+
|
169
|
+
# Ugly hack: Try to serialize `Json` fields correctly when `round_trip=True` in pydantic v1
|
170
|
+
if kwargs.get("round_trip", False):
|
171
|
+
by_alias: bool = kwargs.get("by_alias", False)
|
172
|
+
dict_ = json.loads(json_)
|
173
|
+
return json.dumps(self._dump_json_vals(dict_, by_alias=by_alias))
|
174
|
+
|
175
|
+
return json_
|
176
|
+
|
177
|
+
def model_copy(self: V1Model, **kwargs: Any) -> V1Model:
|
178
|
+
# Pass only kwargs that are allowed in the V1 method.
|
179
|
+
allowed_keys = allowed_arg_names(self.copy) & kwargs.keys()
|
180
|
+
return self.copy(**{k: kwargs[k] for k in allowed_keys})
|
181
|
+
|
182
|
+
@property
|
183
|
+
def model_fields_set(self: V1Model) -> set[str]:
|
184
|
+
return self.__fields_set__
|
185
|
+
|
186
|
+
|
187
|
+
# Placeholder. Pydantic v2 is already compatible with itself, so no need for extra mixins.
|
188
|
+
class V2Mixin:
|
189
|
+
pass
|
190
|
+
|
191
|
+
|
192
|
+
# Pick the mixin type based on the detected Pydantic version.
|
193
|
+
PydanticCompatMixin: type = V2Mixin if IS_PYDANTIC_V2 else V1Mixin
|
194
|
+
|
195
|
+
|
196
|
+
# ----------------------------------------------------------------------------
|
197
|
+
# Decorators and other pydantic helpers
|
198
|
+
# ----------------------------------------------------------------------------
|
199
|
+
if IS_PYDANTIC_V2:
|
200
|
+
field_validator = pydantic.field_validator
|
201
|
+
model_validator = pydantic.model_validator
|
202
|
+
AliasChoices = pydantic.AliasChoices
|
203
|
+
computed_field = pydantic.computed_field
|
204
|
+
|
205
|
+
else:
|
206
|
+
# Redefines `@field_validator` with a v2-like signature
|
207
|
+
# to call `@validator` from v1 instead.
|
208
|
+
def field_validator(
|
209
|
+
field: str,
|
210
|
+
/,
|
211
|
+
*fields: str,
|
212
|
+
mode: Literal["before", "after", "wrap", "plain"] = "after",
|
213
|
+
check_fields: bool | None = None,
|
214
|
+
**_: Any,
|
215
|
+
) -> Callable:
|
216
|
+
return pydantic.validator( # type: ignore[deprecated]
|
217
|
+
field,
|
218
|
+
*fields,
|
219
|
+
pre=(mode == "before"),
|
220
|
+
always=True,
|
221
|
+
check_fields=bool(check_fields),
|
222
|
+
allow_reuse=True,
|
223
|
+
)
|
224
|
+
|
225
|
+
# Redefines `@model_validator` with a v2-like signature
|
226
|
+
# to call `@root_validator` from v1 instead.
|
227
|
+
def model_validator(
|
228
|
+
*,
|
229
|
+
mode: Literal["before", "after", "wrap", "plain"],
|
230
|
+
**_: Any,
|
231
|
+
) -> Callable:
|
232
|
+
if mode == "after":
|
233
|
+
# Patch the behavior for `@model_validator(mode="after")` in v1. This is
|
234
|
+
# necessarily complicated because:
|
235
|
+
# - `@model_validator(mode="after")` decorates an instance method in pydantic v2
|
236
|
+
# - `@root_validator(pre=False)` always decorates a classmethod in pydantic v1
|
237
|
+
def _decorator(v2_method: Callable) -> Any:
|
238
|
+
def v1_method(
|
239
|
+
cls: type[V1Model], values: dict[str, Any]
|
240
|
+
) -> dict[str, Any]:
|
241
|
+
# Note: Since this is an "after" validator, the values should already be
|
242
|
+
# validated, so `.construct()` in v1 (`.model_construct()` in v2)
|
243
|
+
# should create a valid object to pass to the **original** decorated instance method.
|
244
|
+
validated = v2_method(cls.construct(**values))
|
245
|
+
|
246
|
+
# Pydantic v1 expects the validator to return a dict of {field_name -> value}
|
247
|
+
return {
|
248
|
+
name: getattr(validated, name) for name in validated.__fields__
|
249
|
+
}
|
250
|
+
|
251
|
+
return pydantic.root_validator(pre=False, allow_reuse=True)( # type: ignore[call-overload]
|
252
|
+
classmethod(v1_method)
|
253
|
+
)
|
254
|
+
|
255
|
+
return _decorator
|
256
|
+
else:
|
257
|
+
return pydantic.root_validator(pre=(mode == "before"), allow_reuse=True) # type: ignore[call-overload]
|
258
|
+
|
259
|
+
@overload # type: ignore[no-redef]
|
260
|
+
def computed_field(func: Callable | property, /) -> property: ...
|
261
|
+
@overload
|
262
|
+
def computed_field(
|
263
|
+
func: None, /, **_: Any
|
264
|
+
) -> Callable[[Callable | property], property]: ...
|
265
|
+
|
266
|
+
def computed_field(
|
267
|
+
func: Callable | property | None = None, /, **_: Any
|
268
|
+
) -> property | Callable[[Callable | property], property]:
|
269
|
+
"""Compatibility wrapper for Pydantic v2's `computed_field` in v1."""
|
270
|
+
|
271
|
+
def always_property(f: Callable | property) -> property:
|
272
|
+
# Convert the method to a property only if needed
|
273
|
+
return f if isinstance(f, property) else property(f)
|
274
|
+
|
275
|
+
# Handle both decorator styles
|
276
|
+
return always_property if (func is None) else always_property(func)
|
277
|
+
|
278
|
+
class AliasChoices: # type: ignore [no-redef]
|
279
|
+
"""Placeholder class for Pydantic v2's AliasChoices for partial v1 compatibility."""
|
280
|
+
|
281
|
+
aliases: list[str]
|
282
|
+
|
283
|
+
def __init__(self, *aliases: str):
|
284
|
+
self.aliases = list(aliases)
|
wandb/agents/__init__.py
ADDED
File without changes
|