wandb 0.19.1__py3-none-musllinux_1_2_aarch64.whl
Sign up to get free protection for your applications and to get access to all the features.
- package_readme.md +97 -0
- wandb/__init__.py +246 -0
- wandb/__init__.pyi +1197 -0
- wandb/__main__.py +3 -0
- wandb/_globals.py +19 -0
- wandb/agents/__init__.py +0 -0
- wandb/agents/pyagent.py +363 -0
- wandb/analytics/__init__.py +3 -0
- wandb/analytics/sentry.py +263 -0
- wandb/apis/__init__.py +48 -0
- wandb/apis/attrs.py +51 -0
- wandb/apis/importers/__init__.py +1 -0
- wandb/apis/importers/internals/internal.py +385 -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 +1603 -0
- wandb/apis/internal.py +232 -0
- wandb/apis/normalize.py +73 -0
- wandb/apis/paginator.py +81 -0
- wandb/apis/public/__init__.py +34 -0
- wandb/apis/public/api.py +1387 -0
- wandb/apis/public/artifacts.py +1095 -0
- wandb/apis/public/const.py +4 -0
- wandb/apis/public/files.py +263 -0
- wandb/apis/public/history.py +149 -0
- wandb/apis/public/jobs.py +653 -0
- wandb/apis/public/projects.py +154 -0
- wandb/apis/public/query_generator.py +166 -0
- wandb/apis/public/reports.py +458 -0
- wandb/apis/public/runs.py +1012 -0
- wandb/apis/public/sweeps.py +240 -0
- wandb/apis/public/teams.py +198 -0
- wandb/apis/public/users.py +136 -0
- wandb/apis/public/utils.py +68 -0
- wandb/apis/reports/__init__.py +1 -0
- wandb/apis/reports/v1/__init__.py +8 -0
- wandb/apis/reports/v2/__init__.py +8 -0
- wandb/apis/workspaces/__init__.py +8 -0
- wandb/beta/workflows.py +288 -0
- wandb/bin/gpu_stats +0 -0
- wandb/bin/wandb-core +0 -0
- wandb/cli/__init__.py +0 -0
- wandb/cli/beta.py +178 -0
- wandb/cli/cli.py +2812 -0
- wandb/data_types.py +66 -0
- wandb/docker/__init__.py +343 -0
- wandb/docker/auth.py +435 -0
- wandb/docker/wandb-entrypoint.sh +33 -0
- wandb/docker/www_authenticate.py +94 -0
- wandb/env.py +513 -0
- wandb/errors/__init__.py +17 -0
- wandb/errors/errors.py +37 -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 +403 -0
- wandb/filesync/stats.py +100 -0
- wandb/filesync/step_checksum.py +142 -0
- wandb/filesync/step_prepare.py +179 -0
- wandb/filesync/step_upload.py +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 +178 -0
- wandb/integration/cohere/__init__.py +3 -0
- wandb/integration/cohere/cohere.py +21 -0
- wandb/integration/cohere/resolver.py +347 -0
- wandb/integration/diffusers/__init__.py +3 -0
- wandb/integration/diffusers/autologger.py +76 -0
- wandb/integration/diffusers/pipeline_resolver.py +50 -0
- wandb/integration/diffusers/resolvers/__init__.py +9 -0
- wandb/integration/diffusers/resolvers/multimodal.py +882 -0
- wandb/integration/diffusers/resolvers/utils.py +102 -0
- wandb/integration/fastai/__init__.py +245 -0
- wandb/integration/gym/__init__.py +99 -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 +1089 -0
- wandb/integration/kfp/__init__.py +6 -0
- wandb/integration/kfp/helpers.py +28 -0
- wandb/integration/kfp/kfp_patch.py +334 -0
- wandb/integration/kfp/wandb_logging.py +182 -0
- wandb/integration/langchain/__init__.py +3 -0
- wandb/integration/langchain/wandb_tracer.py +48 -0
- wandb/integration/lightgbm/__init__.py +239 -0
- wandb/integration/lightning/__init__.py +0 -0
- wandb/integration/lightning/fabric/__init__.py +3 -0
- wandb/integration/lightning/fabric/logger.py +764 -0
- wandb/integration/metaflow/__init__.py +3 -0
- wandb/integration/metaflow/metaflow.py +383 -0
- wandb/integration/openai/__init__.py +3 -0
- wandb/integration/openai/fine_tuning.py +480 -0
- wandb/integration/openai/openai.py +22 -0
- wandb/integration/openai/resolver.py +240 -0
- wandb/integration/prodigy/__init__.py +3 -0
- wandb/integration/prodigy/prodigy.py +299 -0
- wandb/integration/sacred/__init__.py +117 -0
- wandb/integration/sagemaker/__init__.py +12 -0
- wandb/integration/sagemaker/auth.py +28 -0
- wandb/integration/sagemaker/config.py +49 -0
- wandb/integration/sagemaker/files.py +3 -0
- wandb/integration/sagemaker/resources.py +34 -0
- wandb/integration/sb3/__init__.py +3 -0
- wandb/integration/sb3/sb3.py +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 +183 -0
- wandb/integration/tensorboard/__init__.py +10 -0
- wandb/integration/tensorboard/log.py +354 -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 +524 -0
- wandb/integration/ultralytics/classification_utils.py +83 -0
- wandb/integration/ultralytics/mask_utils.py +202 -0
- wandb/integration/ultralytics/pose_utils.py +103 -0
- wandb/integration/xgboost/__init__.py +11 -0
- wandb/integration/xgboost/xgboost.py +189 -0
- wandb/integration/yolov8/__init__.py +0 -0
- wandb/integration/yolov8/yolov8.py +284 -0
- wandb/jupyter.py +513 -0
- wandb/mpmain/__init__.py +0 -0
- wandb/mpmain/__main__.py +1 -0
- wandb/old/__init__.py +0 -0
- wandb/old/core.py +53 -0
- wandb/old/settings.py +173 -0
- wandb/old/summary.py +440 -0
- wandb/plot/__init__.py +28 -0
- wandb/plot/bar.py +70 -0
- wandb/plot/confusion_matrix.py +181 -0
- wandb/plot/custom_chart.py +124 -0
- wandb/plot/histogram.py +65 -0
- wandb/plot/line.py +74 -0
- wandb/plot/line_series.py +176 -0
- wandb/plot/pr_curve.py +185 -0
- wandb/plot/roc_curve.py +163 -0
- wandb/plot/scatter.py +66 -0
- wandb/plot/utils.py +183 -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 +1658 -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 +370 -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 +371 -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/wandb_base_pb2.py +10 -0
- wandb/proto/wandb_deprecated.py +45 -0
- wandb/proto/wandb_generate_deprecated.py +30 -0
- wandb/proto/wandb_generate_proto.py +49 -0
- wandb/proto/wandb_internal_pb2.py +16 -0
- wandb/proto/wandb_server_pb2.py +10 -0
- wandb/proto/wandb_settings_pb2.py +10 -0
- wandb/proto/wandb_telemetry_pb2.py +10 -0
- wandb/py.typed +0 -0
- wandb/sdk/__init__.py +37 -0
- wandb/sdk/artifacts/__init__.py +0 -0
- wandb/sdk/artifacts/_validators.py +121 -0
- wandb/sdk/artifacts/artifact.py +2364 -0
- wandb/sdk/artifacts/artifact_download_logger.py +43 -0
- wandb/sdk/artifacts/artifact_file_cache.py +249 -0
- wandb/sdk/artifacts/artifact_instance_cache.py +17 -0
- wandb/sdk/artifacts/artifact_manifest.py +75 -0
- wandb/sdk/artifacts/artifact_manifest_entry.py +249 -0
- wandb/sdk/artifacts/artifact_manifests/__init__.py +0 -0
- wandb/sdk/artifacts/artifact_manifests/artifact_manifest_v1.py +92 -0
- wandb/sdk/artifacts/artifact_saver.py +265 -0
- wandb/sdk/artifacts/artifact_state.py +11 -0
- wandb/sdk/artifacts/artifact_ttl.py +7 -0
- wandb/sdk/artifacts/exceptions.py +57 -0
- wandb/sdk/artifacts/staging.py +25 -0
- wandb/sdk/artifacts/storage_handler.py +62 -0
- wandb/sdk/artifacts/storage_handlers/__init__.py +0 -0
- wandb/sdk/artifacts/storage_handlers/azure_handler.py +213 -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 +139 -0
- wandb/sdk/artifacts/storage_handlers/multi_handler.py +56 -0
- wandb/sdk/artifacts/storage_handlers/s3_handler.py +298 -0
- wandb/sdk/artifacts/storage_handlers/tracking_handler.py +72 -0
- wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +135 -0
- wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +74 -0
- wandb/sdk/artifacts/storage_layout.py +6 -0
- wandb/sdk/artifacts/storage_policies/__init__.py +4 -0
- wandb/sdk/artifacts/storage_policies/register.py +1 -0
- wandb/sdk/artifacts/storage_policies/wandb_storage_policy.py +378 -0
- wandb/sdk/artifacts/storage_policy.py +72 -0
- wandb/sdk/backend/__init__.py +0 -0
- wandb/sdk/backend/backend.py +221 -0
- wandb/sdk/data_types/__init__.py +0 -0
- wandb/sdk/data_types/_dtypes.py +918 -0
- wandb/sdk/data_types/_private.py +10 -0
- wandb/sdk/data_types/audio.py +165 -0
- wandb/sdk/data_types/base_types/__init__.py +0 -0
- wandb/sdk/data_types/base_types/json_metadata.py +55 -0
- wandb/sdk/data_types/base_types/media.py +376 -0
- wandb/sdk/data_types/base_types/wb_value.py +282 -0
- wandb/sdk/data_types/bokeh.py +70 -0
- wandb/sdk/data_types/graph.py +405 -0
- wandb/sdk/data_types/helper_types/__init__.py +0 -0
- wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +305 -0
- wandb/sdk/data_types/helper_types/classes.py +159 -0
- wandb/sdk/data_types/helper_types/image_mask.py +241 -0
- wandb/sdk/data_types/histogram.py +94 -0
- wandb/sdk/data_types/html.py +115 -0
- wandb/sdk/data_types/image.py +847 -0
- wandb/sdk/data_types/molecule.py +241 -0
- wandb/sdk/data_types/object_3d.py +470 -0
- wandb/sdk/data_types/plotly.py +82 -0
- wandb/sdk/data_types/saved_model.py +445 -0
- wandb/sdk/data_types/table.py +1204 -0
- wandb/sdk/data_types/trace_tree.py +438 -0
- wandb/sdk/data_types/utils.py +228 -0
- wandb/sdk/data_types/video.py +268 -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 +1010 -0
- wandb/sdk/interface/interface_queue.py +53 -0
- wandb/sdk/interface/interface_relay.py +53 -0
- wandb/sdk/interface/interface_shared.py +546 -0
- wandb/sdk/interface/interface_sock.py +61 -0
- wandb/sdk/interface/message_future.py +27 -0
- wandb/sdk/interface/message_future_poll.py +50 -0
- wandb/sdk/interface/router.py +115 -0
- wandb/sdk/interface/router_queue.py +41 -0
- wandb/sdk/interface/router_relay.py +37 -0
- wandb/sdk/interface/router_sock.py +36 -0
- wandb/sdk/interface/summary_record.py +67 -0
- wandb/sdk/internal/__init__.py +0 -0
- wandb/sdk/internal/context.py +89 -0
- wandb/sdk/internal/datastore.py +297 -0
- wandb/sdk/internal/file_pusher.py +181 -0
- wandb/sdk/internal/file_stream.py +695 -0
- wandb/sdk/internal/flow_control.py +263 -0
- wandb/sdk/internal/handler.py +905 -0
- wandb/sdk/internal/internal.py +403 -0
- wandb/sdk/internal/internal_api.py +4587 -0
- wandb/sdk/internal/internal_util.py +97 -0
- wandb/sdk/internal/job_builder.py +638 -0
- wandb/sdk/internal/profiler.py +78 -0
- wandb/sdk/internal/progress.py +79 -0
- wandb/sdk/internal/run.py +25 -0
- wandb/sdk/internal/sample.py +70 -0
- wandb/sdk/internal/sender.py +1696 -0
- wandb/sdk/internal/sender_config.py +197 -0
- wandb/sdk/internal/settings_static.py +97 -0
- wandb/sdk/internal/system/__init__.py +0 -0
- wandb/sdk/internal/system/assets/__init__.py +25 -0
- wandb/sdk/internal/system/assets/aggregators.py +37 -0
- wandb/sdk/internal/system/assets/asset_registry.py +20 -0
- wandb/sdk/internal/system/assets/cpu.py +163 -0
- wandb/sdk/internal/system/assets/disk.py +210 -0
- wandb/sdk/internal/system/assets/gpu.py +416 -0
- wandb/sdk/internal/system/assets/gpu_amd.py +233 -0
- wandb/sdk/internal/system/assets/interfaces.py +205 -0
- wandb/sdk/internal/system/assets/ipu.py +177 -0
- wandb/sdk/internal/system/assets/memory.py +166 -0
- wandb/sdk/internal/system/assets/network.py +125 -0
- wandb/sdk/internal/system/assets/open_metrics.py +293 -0
- wandb/sdk/internal/system/assets/tpu.py +154 -0
- wandb/sdk/internal/system/assets/trainium.py +393 -0
- wandb/sdk/internal/system/env_probe_helpers.py +13 -0
- wandb/sdk/internal/system/system_info.py +250 -0
- wandb/sdk/internal/system/system_monitor.py +222 -0
- wandb/sdk/internal/tb_watcher.py +519 -0
- wandb/sdk/internal/thread_local_settings.py +18 -0
- wandb/sdk/internal/writer.py +204 -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 +566 -0
- wandb/sdk/launch/agent/__init__.py +5 -0
- wandb/sdk/launch/agent/agent.py +924 -0
- wandb/sdk/launch/agent/config.py +296 -0
- wandb/sdk/launch/agent/job_status_tracker.py +53 -0
- wandb/sdk/launch/agent/run_queue_item_file_saver.py +39 -0
- wandb/sdk/launch/builder/__init__.py +0 -0
- wandb/sdk/launch/builder/abstract.py +156 -0
- wandb/sdk/launch/builder/build.py +297 -0
- wandb/sdk/launch/builder/context_manager.py +235 -0
- wandb/sdk/launch/builder/docker_builder.py +177 -0
- wandb/sdk/launch/builder/kaniko_builder.py +594 -0
- wandb/sdk/launch/builder/noop.py +58 -0
- wandb/sdk/launch/builder/templates/_wandb_bootstrap.py +188 -0
- wandb/sdk/launch/builder/templates/dockerfile.py +92 -0
- wandb/sdk/launch/create_job.py +528 -0
- wandb/sdk/launch/environment/abstract.py +29 -0
- wandb/sdk/launch/environment/aws_environment.py +322 -0
- wandb/sdk/launch/environment/azure_environment.py +105 -0
- wandb/sdk/launch/environment/gcp_environment.py +335 -0
- wandb/sdk/launch/environment/local_environment.py +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 +315 -0
- wandb/sdk/launch/inputs/manage.py +113 -0
- wandb/sdk/launch/inputs/schema.py +39 -0
- wandb/sdk/launch/loader.py +249 -0
- wandb/sdk/launch/registry/abstract.py +48 -0
- wandb/sdk/launch/registry/anon.py +29 -0
- wandb/sdk/launch/registry/azure_container_registry.py +124 -0
- wandb/sdk/launch/registry/elastic_container_registry.py +192 -0
- wandb/sdk/launch/registry/google_artifact_registry.py +219 -0
- wandb/sdk/launch/registry/local_registry.py +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 +472 -0
- wandb/sdk/launch/runner/kubernetes_runner.py +963 -0
- wandb/sdk/launch/runner/local_container.py +301 -0
- wandb/sdk/launch/runner/local_process.py +78 -0
- wandb/sdk/launch/runner/sagemaker_runner.py +426 -0
- wandb/sdk/launch/runner/vertex_runner.py +230 -0
- wandb/sdk/launch/sweeps/__init__.py +37 -0
- wandb/sdk/launch/sweeps/scheduler.py +740 -0
- wandb/sdk/launch/sweeps/scheduler_sweep.py +90 -0
- wandb/sdk/launch/sweeps/utils.py +316 -0
- wandb/sdk/launch/utils.py +747 -0
- wandb/sdk/launch/wandb_reference.py +138 -0
- wandb/sdk/lib/__init__.py +5 -0
- wandb/sdk/lib/apikey.py +269 -0
- wandb/sdk/lib/capped_dict.py +26 -0
- wandb/sdk/lib/config_util.py +101 -0
- wandb/sdk/lib/credentials.py +141 -0
- wandb/sdk/lib/deprecate.py +42 -0
- wandb/sdk/lib/disabled.py +29 -0
- wandb/sdk/lib/exit_hooks.py +54 -0
- wandb/sdk/lib/file_stream_utils.py +118 -0
- wandb/sdk/lib/filenames.py +64 -0
- wandb/sdk/lib/filesystem.py +372 -0
- wandb/sdk/lib/fsm.py +180 -0
- wandb/sdk/lib/gitlib.py +239 -0
- wandb/sdk/lib/gql_request.py +65 -0
- wandb/sdk/lib/handler_util.py +21 -0
- wandb/sdk/lib/hashutil.py +84 -0
- wandb/sdk/lib/import_hooks.py +275 -0
- wandb/sdk/lib/ipython.py +126 -0
- wandb/sdk/lib/json_util.py +80 -0
- wandb/sdk/lib/lazyloader.py +63 -0
- wandb/sdk/lib/mailbox.py +456 -0
- wandb/sdk/lib/module.py +78 -0
- wandb/sdk/lib/paths.py +106 -0
- wandb/sdk/lib/preinit.py +42 -0
- wandb/sdk/lib/printer.py +548 -0
- wandb/sdk/lib/progress.py +279 -0
- wandb/sdk/lib/proto_util.py +90 -0
- wandb/sdk/lib/redirect.py +845 -0
- wandb/sdk/lib/retry.py +289 -0
- wandb/sdk/lib/run_moment.py +72 -0
- wandb/sdk/lib/runid.py +12 -0
- wandb/sdk/lib/server.py +38 -0
- wandb/sdk/lib/service_connection.py +216 -0
- wandb/sdk/lib/service_token.py +94 -0
- wandb/sdk/lib/sock_client.py +290 -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/service/__init__.py +0 -0
- wandb/sdk/service/_startup_debug.py +22 -0
- wandb/sdk/service/port_file.py +53 -0
- wandb/sdk/service/server.py +107 -0
- wandb/sdk/service/server_sock.py +274 -0
- wandb/sdk/service/service.py +242 -0
- wandb/sdk/service/streams.py +425 -0
- wandb/sdk/verify/__init__.py +0 -0
- wandb/sdk/verify/verify.py +501 -0
- wandb/sdk/wandb_alerts.py +12 -0
- wandb/sdk/wandb_config.py +322 -0
- wandb/sdk/wandb_helper.py +54 -0
- wandb/sdk/wandb_init.py +1313 -0
- wandb/sdk/wandb_login.py +339 -0
- wandb/sdk/wandb_metric.py +110 -0
- wandb/sdk/wandb_require.py +94 -0
- wandb/sdk/wandb_require_helpers.py +44 -0
- wandb/sdk/wandb_run.py +4066 -0
- wandb/sdk/wandb_settings.py +1309 -0
- wandb/sdk/wandb_setup.py +402 -0
- wandb/sdk/wandb_summary.py +150 -0
- wandb/sdk/wandb_sweep.py +119 -0
- wandb/sdk/wandb_sync.py +82 -0
- wandb/sdk/wandb_watch.py +150 -0
- wandb/sklearn.py +35 -0
- wandb/sync/__init__.py +3 -0
- wandb/sync/sync.py +442 -0
- wandb/trigger.py +29 -0
- wandb/util.py +1955 -0
- wandb/vendor/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/setup.py +40 -0
- wandb/vendor/gql-0.2.0/tests/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/tests/starwars/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/tests/starwars/fixtures.py +96 -0
- wandb/vendor/gql-0.2.0/tests/starwars/schema.py +146 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_dsl.py +293 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_query.py +355 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_validation.py +171 -0
- wandb/vendor/gql-0.2.0/tests/test_client.py +31 -0
- wandb/vendor/gql-0.2.0/tests/test_transport.py +89 -0
- wandb/vendor/gql-0.2.0/wandb_gql/__init__.py +4 -0
- wandb/vendor/gql-0.2.0/wandb_gql/client.py +75 -0
- wandb/vendor/gql-0.2.0/wandb_gql/dsl.py +152 -0
- wandb/vendor/gql-0.2.0/wandb_gql/gql.py +10 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/http.py +6 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/local_schema.py +15 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/requests.py +46 -0
- wandb/vendor/gql-0.2.0/wandb_gql/utils.py +21 -0
- wandb/vendor/graphql-core-1.1/setup.py +86 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/__init__.py +287 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/__init__.py +6 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/base.py +42 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/format_error.py +11 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/located_error.py +29 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/syntax_error.py +36 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/__init__.py +26 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/base.py +311 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executor.py +398 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/asyncio.py +53 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/gevent.py +22 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/process.py +32 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/sync.py +7 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/thread.py +35 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/utils.py +6 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/executor.py +66 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/fragment.py +252 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/resolver.py +151 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/utils.py +7 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/middleware.py +57 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/values.py +145 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/graphql.py +60 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/ast.py +1349 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/base.py +19 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/lexer.py +435 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/location.py +30 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/parser.py +779 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/printer.py +193 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/source.py +18 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/visitor.py +222 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/visitor_meta.py +82 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/cached_property.py +17 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/contain_subset.py +28 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/default_ordered_dict.py +40 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/ordereddict.py +8 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/pair_set.py +43 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/version.py +78 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/__init__.py +67 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/definition.py +619 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/directives.py +132 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/introspection.py +440 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/scalars.py +131 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/schema.py +100 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/typemap.py +145 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/assert_valid_name.py +9 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_from_value.py +65 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_to_code.py +49 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_to_dict.py +24 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/base.py +75 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/build_ast_schema.py +291 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/build_client_schema.py +250 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/concat_ast.py +9 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/extend_schema.py +357 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/get_field_def.py +27 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/get_operation_ast.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/introspection_query.py +90 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/is_valid_literal_value.py +67 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/is_valid_value.py +66 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/quoted_or_list.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/schema_printer.py +168 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/suggestion_list.py +56 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_comparators.py +69 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_from_ast.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_info.py +149 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/value_from_ast.py +69 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/__init__.py +4 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/__init__.py +79 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/arguments_of_correct_type.py +24 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/base.py +8 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/default_values_of_correct_type.py +44 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/fields_on_correct_type.py +113 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/fragments_on_composite_types.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_argument_names.py +70 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_directives.py +97 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_fragment_names.py +19 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_type_names.py +43 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/lone_anonymous_operation.py +23 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_fragment_cycles.py +59 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_undefined_variables.py +36 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_unused_fragments.py +38 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_unused_variables.py +37 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/overlapping_fields_can_be_merged.py +529 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/possible_fragment_spreads.py +44 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/provided_non_null_arguments.py +46 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/scalar_leafs.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_argument_names.py +32 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_fragment_names.py +28 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_input_field_names.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_operation_names.py +31 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_variable_names.py +27 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/variables_are_input_types.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/variables_in_allowed_position.py +53 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/validation.py +158 -0
- wandb/vendor/promise-2.3.0/conftest.py +30 -0
- wandb/vendor/promise-2.3.0/setup.py +64 -0
- wandb/vendor/promise-2.3.0/tests/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/tests/conftest.py +8 -0
- wandb/vendor/promise-2.3.0/tests/test_awaitable.py +32 -0
- wandb/vendor/promise-2.3.0/tests/test_awaitable_35.py +47 -0
- wandb/vendor/promise-2.3.0/tests/test_benchmark.py +116 -0
- wandb/vendor/promise-2.3.0/tests/test_complex_threads.py +23 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader.py +452 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader_awaitable_35.py +99 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader_extra.py +65 -0
- wandb/vendor/promise-2.3.0/tests/test_extra.py +670 -0
- wandb/vendor/promise-2.3.0/tests/test_issues.py +132 -0
- wandb/vendor/promise-2.3.0/tests/test_promise_list.py +70 -0
- wandb/vendor/promise-2.3.0/tests/test_spec.py +584 -0
- wandb/vendor/promise-2.3.0/tests/test_thread_safety.py +115 -0
- wandb/vendor/promise-2.3.0/tests/utils.py +3 -0
- wandb/vendor/promise-2.3.0/wandb_promise/__init__.py +38 -0
- wandb/vendor/promise-2.3.0/wandb_promise/async_.py +135 -0
- wandb/vendor/promise-2.3.0/wandb_promise/compat.py +32 -0
- wandb/vendor/promise-2.3.0/wandb_promise/dataloader.py +326 -0
- wandb/vendor/promise-2.3.0/wandb_promise/iterate_promise.py +12 -0
- wandb/vendor/promise-2.3.0/wandb_promise/promise.py +848 -0
- wandb/vendor/promise-2.3.0/wandb_promise/promise_list.py +151 -0
- wandb/vendor/promise-2.3.0/wandb_promise/pyutils/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/wandb_promise/pyutils/version.py +83 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/asyncio.py +22 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/gevent.py +21 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/immediate.py +27 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/thread.py +18 -0
- wandb/vendor/promise-2.3.0/wandb_promise/utils.py +56 -0
- wandb/vendor/pygments/__init__.py +90 -0
- wandb/vendor/pygments/cmdline.py +568 -0
- wandb/vendor/pygments/console.py +74 -0
- wandb/vendor/pygments/filter.py +74 -0
- wandb/vendor/pygments/filters/__init__.py +350 -0
- wandb/vendor/pygments/formatter.py +95 -0
- wandb/vendor/pygments/formatters/__init__.py +153 -0
- wandb/vendor/pygments/formatters/_mapping.py +85 -0
- wandb/vendor/pygments/formatters/bbcode.py +109 -0
- wandb/vendor/pygments/formatters/html.py +851 -0
- wandb/vendor/pygments/formatters/img.py +600 -0
- wandb/vendor/pygments/formatters/irc.py +182 -0
- wandb/vendor/pygments/formatters/latex.py +482 -0
- wandb/vendor/pygments/formatters/other.py +160 -0
- wandb/vendor/pygments/formatters/rtf.py +147 -0
- wandb/vendor/pygments/formatters/svg.py +153 -0
- wandb/vendor/pygments/formatters/terminal.py +136 -0
- wandb/vendor/pygments/formatters/terminal256.py +309 -0
- wandb/vendor/pygments/lexer.py +871 -0
- wandb/vendor/pygments/lexers/__init__.py +329 -0
- wandb/vendor/pygments/lexers/_asy_builtins.py +1645 -0
- wandb/vendor/pygments/lexers/_cl_builtins.py +232 -0
- wandb/vendor/pygments/lexers/_cocoa_builtins.py +72 -0
- wandb/vendor/pygments/lexers/_csound_builtins.py +1346 -0
- wandb/vendor/pygments/lexers/_lasso_builtins.py +5327 -0
- wandb/vendor/pygments/lexers/_lua_builtins.py +295 -0
- wandb/vendor/pygments/lexers/_mapping.py +500 -0
- wandb/vendor/pygments/lexers/_mql_builtins.py +1172 -0
- wandb/vendor/pygments/lexers/_openedge_builtins.py +2547 -0
- wandb/vendor/pygments/lexers/_php_builtins.py +4756 -0
- wandb/vendor/pygments/lexers/_postgres_builtins.py +621 -0
- wandb/vendor/pygments/lexers/_scilab_builtins.py +3094 -0
- wandb/vendor/pygments/lexers/_sourcemod_builtins.py +1163 -0
- wandb/vendor/pygments/lexers/_stan_builtins.py +532 -0
- wandb/vendor/pygments/lexers/_stata_builtins.py +419 -0
- wandb/vendor/pygments/lexers/_tsql_builtins.py +1004 -0
- wandb/vendor/pygments/lexers/_vim_builtins.py +1939 -0
- wandb/vendor/pygments/lexers/actionscript.py +240 -0
- wandb/vendor/pygments/lexers/agile.py +24 -0
- wandb/vendor/pygments/lexers/algebra.py +221 -0
- wandb/vendor/pygments/lexers/ambient.py +76 -0
- wandb/vendor/pygments/lexers/ampl.py +87 -0
- wandb/vendor/pygments/lexers/apl.py +101 -0
- wandb/vendor/pygments/lexers/archetype.py +318 -0
- wandb/vendor/pygments/lexers/asm.py +641 -0
- wandb/vendor/pygments/lexers/automation.py +374 -0
- wandb/vendor/pygments/lexers/basic.py +500 -0
- wandb/vendor/pygments/lexers/bibtex.py +160 -0
- wandb/vendor/pygments/lexers/business.py +612 -0
- wandb/vendor/pygments/lexers/c_cpp.py +252 -0
- wandb/vendor/pygments/lexers/c_like.py +541 -0
- wandb/vendor/pygments/lexers/capnproto.py +78 -0
- wandb/vendor/pygments/lexers/chapel.py +102 -0
- wandb/vendor/pygments/lexers/clean.py +288 -0
- wandb/vendor/pygments/lexers/compiled.py +34 -0
- wandb/vendor/pygments/lexers/configs.py +833 -0
- wandb/vendor/pygments/lexers/console.py +114 -0
- wandb/vendor/pygments/lexers/crystal.py +393 -0
- wandb/vendor/pygments/lexers/csound.py +366 -0
- wandb/vendor/pygments/lexers/css.py +689 -0
- wandb/vendor/pygments/lexers/d.py +251 -0
- wandb/vendor/pygments/lexers/dalvik.py +125 -0
- wandb/vendor/pygments/lexers/data.py +555 -0
- wandb/vendor/pygments/lexers/diff.py +165 -0
- wandb/vendor/pygments/lexers/dotnet.py +691 -0
- wandb/vendor/pygments/lexers/dsls.py +878 -0
- wandb/vendor/pygments/lexers/dylan.py +289 -0
- wandb/vendor/pygments/lexers/ecl.py +125 -0
- wandb/vendor/pygments/lexers/eiffel.py +65 -0
- wandb/vendor/pygments/lexers/elm.py +121 -0
- wandb/vendor/pygments/lexers/erlang.py +533 -0
- wandb/vendor/pygments/lexers/esoteric.py +277 -0
- wandb/vendor/pygments/lexers/ezhil.py +69 -0
- wandb/vendor/pygments/lexers/factor.py +344 -0
- wandb/vendor/pygments/lexers/fantom.py +250 -0
- wandb/vendor/pygments/lexers/felix.py +273 -0
- wandb/vendor/pygments/lexers/forth.py +177 -0
- wandb/vendor/pygments/lexers/fortran.py +205 -0
- wandb/vendor/pygments/lexers/foxpro.py +428 -0
- wandb/vendor/pygments/lexers/functional.py +21 -0
- wandb/vendor/pygments/lexers/go.py +101 -0
- wandb/vendor/pygments/lexers/grammar_notation.py +213 -0
- wandb/vendor/pygments/lexers/graph.py +80 -0
- wandb/vendor/pygments/lexers/graphics.py +553 -0
- wandb/vendor/pygments/lexers/haskell.py +843 -0
- wandb/vendor/pygments/lexers/haxe.py +936 -0
- wandb/vendor/pygments/lexers/hdl.py +382 -0
- wandb/vendor/pygments/lexers/hexdump.py +103 -0
- wandb/vendor/pygments/lexers/html.py +602 -0
- wandb/vendor/pygments/lexers/idl.py +270 -0
- wandb/vendor/pygments/lexers/igor.py +288 -0
- wandb/vendor/pygments/lexers/inferno.py +96 -0
- wandb/vendor/pygments/lexers/installers.py +322 -0
- wandb/vendor/pygments/lexers/int_fiction.py +1343 -0
- wandb/vendor/pygments/lexers/iolang.py +63 -0
- wandb/vendor/pygments/lexers/j.py +146 -0
- wandb/vendor/pygments/lexers/javascript.py +1525 -0
- wandb/vendor/pygments/lexers/julia.py +333 -0
- wandb/vendor/pygments/lexers/jvm.py +1573 -0
- wandb/vendor/pygments/lexers/lisp.py +2621 -0
- wandb/vendor/pygments/lexers/make.py +202 -0
- wandb/vendor/pygments/lexers/markup.py +595 -0
- wandb/vendor/pygments/lexers/math.py +21 -0
- wandb/vendor/pygments/lexers/matlab.py +663 -0
- wandb/vendor/pygments/lexers/ml.py +769 -0
- wandb/vendor/pygments/lexers/modeling.py +358 -0
- wandb/vendor/pygments/lexers/modula2.py +1561 -0
- wandb/vendor/pygments/lexers/monte.py +204 -0
- wandb/vendor/pygments/lexers/ncl.py +894 -0
- wandb/vendor/pygments/lexers/nimrod.py +159 -0
- wandb/vendor/pygments/lexers/nit.py +64 -0
- wandb/vendor/pygments/lexers/nix.py +136 -0
- wandb/vendor/pygments/lexers/oberon.py +105 -0
- wandb/vendor/pygments/lexers/objective.py +504 -0
- wandb/vendor/pygments/lexers/ooc.py +85 -0
- wandb/vendor/pygments/lexers/other.py +41 -0
- wandb/vendor/pygments/lexers/parasail.py +79 -0
- wandb/vendor/pygments/lexers/parsers.py +835 -0
- wandb/vendor/pygments/lexers/pascal.py +644 -0
- wandb/vendor/pygments/lexers/pawn.py +199 -0
- wandb/vendor/pygments/lexers/perl.py +620 -0
- wandb/vendor/pygments/lexers/php.py +267 -0
- wandb/vendor/pygments/lexers/praat.py +294 -0
- wandb/vendor/pygments/lexers/prolog.py +306 -0
- wandb/vendor/pygments/lexers/python.py +939 -0
- wandb/vendor/pygments/lexers/qvt.py +152 -0
- wandb/vendor/pygments/lexers/r.py +453 -0
- wandb/vendor/pygments/lexers/rdf.py +270 -0
- wandb/vendor/pygments/lexers/rebol.py +431 -0
- wandb/vendor/pygments/lexers/resource.py +85 -0
- wandb/vendor/pygments/lexers/rnc.py +67 -0
- wandb/vendor/pygments/lexers/roboconf.py +82 -0
- wandb/vendor/pygments/lexers/robotframework.py +560 -0
- wandb/vendor/pygments/lexers/ruby.py +519 -0
- wandb/vendor/pygments/lexers/rust.py +220 -0
- wandb/vendor/pygments/lexers/sas.py +228 -0
- wandb/vendor/pygments/lexers/scripting.py +1222 -0
- wandb/vendor/pygments/lexers/shell.py +794 -0
- wandb/vendor/pygments/lexers/smalltalk.py +195 -0
- wandb/vendor/pygments/lexers/smv.py +79 -0
- wandb/vendor/pygments/lexers/snobol.py +83 -0
- wandb/vendor/pygments/lexers/special.py +103 -0
- wandb/vendor/pygments/lexers/sql.py +681 -0
- wandb/vendor/pygments/lexers/stata.py +108 -0
- wandb/vendor/pygments/lexers/supercollider.py +90 -0
- wandb/vendor/pygments/lexers/tcl.py +145 -0
- wandb/vendor/pygments/lexers/templates.py +2283 -0
- wandb/vendor/pygments/lexers/testing.py +207 -0
- wandb/vendor/pygments/lexers/text.py +25 -0
- wandb/vendor/pygments/lexers/textedit.py +169 -0
- wandb/vendor/pygments/lexers/textfmts.py +297 -0
- wandb/vendor/pygments/lexers/theorem.py +458 -0
- wandb/vendor/pygments/lexers/trafficscript.py +54 -0
- wandb/vendor/pygments/lexers/typoscript.py +226 -0
- wandb/vendor/pygments/lexers/urbi.py +133 -0
- wandb/vendor/pygments/lexers/varnish.py +190 -0
- wandb/vendor/pygments/lexers/verification.py +111 -0
- wandb/vendor/pygments/lexers/web.py +24 -0
- wandb/vendor/pygments/lexers/webmisc.py +988 -0
- wandb/vendor/pygments/lexers/whiley.py +116 -0
- wandb/vendor/pygments/lexers/x10.py +69 -0
- wandb/vendor/pygments/modeline.py +44 -0
- wandb/vendor/pygments/plugin.py +68 -0
- wandb/vendor/pygments/regexopt.py +92 -0
- wandb/vendor/pygments/scanner.py +105 -0
- wandb/vendor/pygments/sphinxext.py +158 -0
- wandb/vendor/pygments/style.py +155 -0
- wandb/vendor/pygments/styles/__init__.py +80 -0
- wandb/vendor/pygments/styles/abap.py +29 -0
- wandb/vendor/pygments/styles/algol.py +63 -0
- wandb/vendor/pygments/styles/algol_nu.py +63 -0
- wandb/vendor/pygments/styles/arduino.py +98 -0
- wandb/vendor/pygments/styles/autumn.py +65 -0
- wandb/vendor/pygments/styles/borland.py +51 -0
- wandb/vendor/pygments/styles/bw.py +49 -0
- wandb/vendor/pygments/styles/colorful.py +81 -0
- wandb/vendor/pygments/styles/default.py +73 -0
- wandb/vendor/pygments/styles/emacs.py +72 -0
- wandb/vendor/pygments/styles/friendly.py +72 -0
- wandb/vendor/pygments/styles/fruity.py +42 -0
- wandb/vendor/pygments/styles/igor.py +29 -0
- wandb/vendor/pygments/styles/lovelace.py +97 -0
- wandb/vendor/pygments/styles/manni.py +75 -0
- wandb/vendor/pygments/styles/monokai.py +106 -0
- wandb/vendor/pygments/styles/murphy.py +80 -0
- wandb/vendor/pygments/styles/native.py +65 -0
- wandb/vendor/pygments/styles/paraiso_dark.py +125 -0
- wandb/vendor/pygments/styles/paraiso_light.py +125 -0
- wandb/vendor/pygments/styles/pastie.py +75 -0
- wandb/vendor/pygments/styles/perldoc.py +69 -0
- wandb/vendor/pygments/styles/rainbow_dash.py +89 -0
- wandb/vendor/pygments/styles/rrt.py +33 -0
- wandb/vendor/pygments/styles/sas.py +44 -0
- wandb/vendor/pygments/styles/stata.py +40 -0
- wandb/vendor/pygments/styles/tango.py +141 -0
- wandb/vendor/pygments/styles/trac.py +63 -0
- wandb/vendor/pygments/styles/vim.py +63 -0
- wandb/vendor/pygments/styles/vs.py +38 -0
- wandb/vendor/pygments/styles/xcode.py +51 -0
- wandb/vendor/pygments/token.py +213 -0
- wandb/vendor/pygments/unistring.py +217 -0
- wandb/vendor/pygments/util.py +388 -0
- wandb/vendor/pynvml/__init__.py +0 -0
- wandb/vendor/pynvml/pynvml.py +4779 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/__init__.py +17 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/events.py +615 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/__init__.py +98 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/api.py +369 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/fsevents.py +172 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/fsevents2.py +239 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify.py +218 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify_buffer.py +81 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify_c.py +575 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/kqueue.py +730 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/polling.py +145 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/read_directory_changes.py +133 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/winapi.py +348 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/patterns.py +265 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/tricks/__init__.py +174 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/__init__.py +151 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/bricks.py +249 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/compat.py +29 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/decorators.py +198 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/delayed_queue.py +88 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/dirsnapshot.py +293 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/echo.py +157 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/event_backport.py +41 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/importlib2.py +40 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/platform.py +57 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/unicode_paths.py +64 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/win32stat.py +123 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/version.py +28 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/watchmedo.py +577 -0
- wandb/wandb_agent.py +588 -0
- wandb/wandb_controller.py +719 -0
- wandb/wandb_run.py +9 -0
- wandb-0.19.1.dist-info/METADATA +223 -0
- wandb-0.19.1.dist-info/RECORD +822 -0
- wandb-0.19.1.dist-info/WHEEL +5 -0
- wandb-0.19.1.dist-info/entry_points.txt +3 -0
- wandb-0.19.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
import json
|
2
|
+
|
3
|
+
|
4
|
+
def add_wandb_visualization(run, mlpipeline_ui_metadata_path):
|
5
|
+
"""NOTE: To use this, you must modify your component to have an output called `mlpipeline_ui_metadata_path` AND call `wandb.init` yourself inside that component.
|
6
|
+
|
7
|
+
Example usage:
|
8
|
+
|
9
|
+
def my_component(..., mlpipeline_ui_metadata_path: OutputPath()):
|
10
|
+
import wandb
|
11
|
+
from wandb.integration.kfp.helpers import add_wandb_visualization
|
12
|
+
|
13
|
+
with wandb.init() as run:
|
14
|
+
add_wandb_visualization(run, mlpipeline_ui_metadata_path)
|
15
|
+
|
16
|
+
... # the rest of your code here
|
17
|
+
"""
|
18
|
+
|
19
|
+
def get_iframe_html(run):
|
20
|
+
return f'<iframe src="{run.url}?kfp=true" style="border:none;width:100%;height:100%;min-width:900px;min-height:600px;"></iframe>'
|
21
|
+
|
22
|
+
iframe_html = get_iframe_html(run)
|
23
|
+
metadata = {
|
24
|
+
"outputs": [{"type": "markdown", "storage": "inline", "source": iframe_html}]
|
25
|
+
}
|
26
|
+
|
27
|
+
with open(mlpipeline_ui_metadata_path, "w") as metadata_file:
|
28
|
+
json.dump(metadata, metadata_file)
|
@@ -0,0 +1,334 @@
|
|
1
|
+
import inspect
|
2
|
+
import itertools
|
3
|
+
import textwrap
|
4
|
+
from typing import Callable, List, Mapping, Optional
|
5
|
+
|
6
|
+
import wandb
|
7
|
+
|
8
|
+
try:
|
9
|
+
from kfp import __version__ as kfp_version
|
10
|
+
from kfp.components import structures
|
11
|
+
from kfp.components._components import _create_task_factory_from_component_spec
|
12
|
+
from kfp.components._python_op import _func_to_component_spec
|
13
|
+
|
14
|
+
from wandb.util import parse_version
|
15
|
+
|
16
|
+
MIN_KFP_VERSION = "1.6.1"
|
17
|
+
|
18
|
+
if parse_version(kfp_version) < parse_version(MIN_KFP_VERSION):
|
19
|
+
wandb.termwarn(
|
20
|
+
f"Your version of kfp {kfp_version} may not work. This integration requires kfp>={MIN_KFP_VERSION}"
|
21
|
+
)
|
22
|
+
|
23
|
+
except ImportError:
|
24
|
+
wandb.termerror("kfp not found! Please `pip install kfp`")
|
25
|
+
|
26
|
+
from .wandb_logging import wandb_log
|
27
|
+
|
28
|
+
decorator_code = inspect.getsource(wandb_log)
|
29
|
+
wandb_logging_extras = f"""
|
30
|
+
import typing
|
31
|
+
from typing import NamedTuple
|
32
|
+
|
33
|
+
import collections
|
34
|
+
from collections import namedtuple
|
35
|
+
|
36
|
+
import kfp
|
37
|
+
from kfp import components
|
38
|
+
from kfp.components import InputPath, OutputPath
|
39
|
+
|
40
|
+
import wandb
|
41
|
+
|
42
|
+
{decorator_code}
|
43
|
+
"""
|
44
|
+
|
45
|
+
|
46
|
+
def full_path_exists(full_func):
|
47
|
+
def get_parent_child_pairs(full_func):
|
48
|
+
components = full_func.split(".")
|
49
|
+
parents, children = [], []
|
50
|
+
for i, _ in enumerate(components[:-1], 1):
|
51
|
+
parent = ".".join(components[:i])
|
52
|
+
child = components[i]
|
53
|
+
parents.append(parent)
|
54
|
+
children.append(child)
|
55
|
+
return zip(parents, children)
|
56
|
+
|
57
|
+
for parent, child in get_parent_child_pairs(full_func):
|
58
|
+
module = wandb.util.get_module(parent)
|
59
|
+
if not module or not hasattr(module, child) or getattr(module, child) is None:
|
60
|
+
return False
|
61
|
+
return True
|
62
|
+
|
63
|
+
|
64
|
+
def patch(module_name, func):
|
65
|
+
module = wandb.util.get_module(module_name)
|
66
|
+
success = False
|
67
|
+
|
68
|
+
full_func = f"{module_name}.{func.__name__}"
|
69
|
+
if not full_path_exists(full_func):
|
70
|
+
wandb.termerror(
|
71
|
+
f"Failed to patch {module_name}.{func.__name__}! Please check if this package/module is installed!"
|
72
|
+
)
|
73
|
+
else:
|
74
|
+
wandb.patched.setdefault(module.__name__, [])
|
75
|
+
# if already patched, do not patch again
|
76
|
+
if [module, func.__name__] not in wandb.patched[module.__name__]:
|
77
|
+
setattr(module, f"orig_{func.__name__}", getattr(module, func.__name__))
|
78
|
+
setattr(module, func.__name__, func)
|
79
|
+
wandb.patched[module.__name__].append([module, func.__name__])
|
80
|
+
success = True
|
81
|
+
|
82
|
+
return success
|
83
|
+
|
84
|
+
|
85
|
+
def unpatch(module_name):
|
86
|
+
if module_name in wandb.patched:
|
87
|
+
for module, func in wandb.patched[module_name]:
|
88
|
+
setattr(module, func, getattr(module, f"orig_{func}"))
|
89
|
+
wandb.patched[module_name] = []
|
90
|
+
|
91
|
+
|
92
|
+
def unpatch_kfp():
|
93
|
+
unpatch("kfp.components")
|
94
|
+
unpatch("kfp.components._python_op")
|
95
|
+
unpatch("wandb.integration.kfp")
|
96
|
+
|
97
|
+
|
98
|
+
def patch_kfp():
|
99
|
+
to_patch = [
|
100
|
+
(
|
101
|
+
"kfp.components",
|
102
|
+
create_component_from_func,
|
103
|
+
),
|
104
|
+
(
|
105
|
+
"kfp.components._python_op",
|
106
|
+
create_component_from_func,
|
107
|
+
),
|
108
|
+
(
|
109
|
+
"kfp.components._python_op",
|
110
|
+
_get_function_source_definition,
|
111
|
+
),
|
112
|
+
("kfp.components._python_op", strip_type_hints),
|
113
|
+
]
|
114
|
+
|
115
|
+
successes = []
|
116
|
+
for module_name, func in to_patch:
|
117
|
+
success = patch(module_name, func)
|
118
|
+
successes.append(success)
|
119
|
+
if not all(successes):
|
120
|
+
wandb.termerror(
|
121
|
+
"Failed to patch one or more kfp functions. Patching @wandb_log decorator to no-op."
|
122
|
+
)
|
123
|
+
patch("wandb.integration.kfp", wandb_log)
|
124
|
+
|
125
|
+
|
126
|
+
def wandb_log(
|
127
|
+
func=None,
|
128
|
+
# /, # py38 only
|
129
|
+
log_component_file=True,
|
130
|
+
):
|
131
|
+
"""Wrap a standard python function and log to W&B.
|
132
|
+
|
133
|
+
NOTE: Because patching failed, this decorator is a no-op.
|
134
|
+
"""
|
135
|
+
from functools import wraps
|
136
|
+
|
137
|
+
def decorator(func):
|
138
|
+
@wraps(func)
|
139
|
+
def wrapper(*args, **kwargs):
|
140
|
+
return func(*args, **kwargs)
|
141
|
+
|
142
|
+
return wrapper
|
143
|
+
|
144
|
+
if func is None:
|
145
|
+
return decorator
|
146
|
+
else:
|
147
|
+
return decorator(func)
|
148
|
+
|
149
|
+
|
150
|
+
def _get_function_source_definition(func: Callable) -> str:
|
151
|
+
"""Get the source code of a function.
|
152
|
+
|
153
|
+
This function is modified from KFP. The original source is below:
|
154
|
+
https://github.com/kubeflow/pipelines/blob/b6406b02f45cdb195c7b99e2f6d22bf85b12268b/sdk/python/kfp/components/_python_op.py#L300-L319.
|
155
|
+
"""
|
156
|
+
func_code = inspect.getsource(func)
|
157
|
+
|
158
|
+
# Function might be defined in some indented scope (e.g. in another
|
159
|
+
# function). We need to handle this and properly dedent the function source
|
160
|
+
# code
|
161
|
+
func_code = textwrap.dedent(func_code)
|
162
|
+
func_code_lines = func_code.split("\n")
|
163
|
+
|
164
|
+
# For wandb, allow decorators (so we can use the @wandb_log decorator)
|
165
|
+
func_code_lines = itertools.dropwhile(
|
166
|
+
lambda x: not (x.startswith(("def", "@wandb_log"))),
|
167
|
+
func_code_lines,
|
168
|
+
)
|
169
|
+
|
170
|
+
if not func_code_lines:
|
171
|
+
raise ValueError(
|
172
|
+
f'Failed to dedent and clean up the source of function "{func.__name__}". '
|
173
|
+
"It is probably not properly indented."
|
174
|
+
)
|
175
|
+
|
176
|
+
return "\n".join(func_code_lines)
|
177
|
+
|
178
|
+
|
179
|
+
def create_component_from_func(
|
180
|
+
func: Callable,
|
181
|
+
output_component_file: Optional[str] = None,
|
182
|
+
base_image: Optional[str] = None,
|
183
|
+
packages_to_install: Optional[List[str]] = None,
|
184
|
+
annotations: Optional[Mapping[str, str]] = None,
|
185
|
+
):
|
186
|
+
'''Convert a Python function to a component and returns a task factory.
|
187
|
+
|
188
|
+
The returned task factory accepts arguments and returns a task object.
|
189
|
+
|
190
|
+
This function is modified from KFP. The original source is below:
|
191
|
+
https://github.com/kubeflow/pipelines/blob/b6406b02f45cdb195c7b99e2f6d22bf85b12268b/sdk/python/kfp/components/_python_op.py#L998-L1110.
|
192
|
+
|
193
|
+
Args:
|
194
|
+
func: The python function to convert
|
195
|
+
base_image: Optional. Specify a custom Docker container image to use in the component. For lightweight components, the image needs to have python 3.5+. Default is the python image corresponding to the current python environment.
|
196
|
+
output_component_file: Optional. Write a component definition to a local file. The produced component file can be loaded back by calling :code:`load_component_from_file` or :code:`load_component_from_uri`.
|
197
|
+
packages_to_install: Optional. List of [versioned] python packages to pip install before executing the user function.
|
198
|
+
annotations: Optional. Allows adding arbitrary key-value data to the component specification.
|
199
|
+
|
200
|
+
Returns:
|
201
|
+
A factory function with a strongly-typed signature taken from the python function.
|
202
|
+
Once called with the required arguments, the factory constructs a task instance that can run the original function in a container.
|
203
|
+
|
204
|
+
Examples:
|
205
|
+
The function name and docstring are used as component name and description. Argument and return annotations are used as component input/output types::
|
206
|
+
|
207
|
+
def add(a: float, b: float) -> float:
|
208
|
+
"""Return sum of two arguments"""
|
209
|
+
return a + b
|
210
|
+
|
211
|
+
|
212
|
+
# add_op is a task factory function that creates a task object when given arguments
|
213
|
+
add_op = create_component_from_func(
|
214
|
+
func=add,
|
215
|
+
base_image="python:3.7", # Optional
|
216
|
+
output_component_file="add.component.yaml", # Optional
|
217
|
+
packages_to_install=["pandas==0.24"], # Optional
|
218
|
+
)
|
219
|
+
|
220
|
+
# The component spec can be accessed through the .component_spec attribute:
|
221
|
+
add_op.component_spec.save("add.component.yaml")
|
222
|
+
|
223
|
+
# The component function can be called with arguments to create a task:
|
224
|
+
add_task = add_op(1, 3)
|
225
|
+
|
226
|
+
# The resulting task has output references, corresponding to the component outputs.
|
227
|
+
# When the function only has a single anonymous return value, the output name is "Output":
|
228
|
+
sum_output_ref = add_task.outputs["Output"]
|
229
|
+
|
230
|
+
# These task output references can be passed to other component functions, constructing a computation graph:
|
231
|
+
task2 = add_op(sum_output_ref, 5)
|
232
|
+
|
233
|
+
|
234
|
+
:code:`create_component_from_func` function can also be used as decorator::
|
235
|
+
|
236
|
+
@create_component_from_func
|
237
|
+
def add_op(a: float, b: float) -> float:
|
238
|
+
"""Return sum of two arguments"""
|
239
|
+
return a + b
|
240
|
+
|
241
|
+
To declare a function with multiple return values, use the :code:`NamedTuple` return annotation syntax::
|
242
|
+
|
243
|
+
from typing import NamedTuple
|
244
|
+
|
245
|
+
|
246
|
+
def add_multiply_two_numbers(a: float, b: float) -> NamedTuple(
|
247
|
+
"Outputs", [("sum", float), ("product", float)]
|
248
|
+
):
|
249
|
+
"""Return sum and product of two arguments"""
|
250
|
+
return (a + b, a * b)
|
251
|
+
|
252
|
+
|
253
|
+
add_multiply_op = create_component_from_func(add_multiply_two_numbers)
|
254
|
+
|
255
|
+
# The component function can be called with arguments to create a task:
|
256
|
+
add_multiply_task = add_multiply_op(1, 3)
|
257
|
+
|
258
|
+
# The resulting task has output references, corresponding to the component outputs:
|
259
|
+
sum_output_ref = add_multiply_task.outputs["sum"]
|
260
|
+
|
261
|
+
# These task output references can be passed to other component functions, constructing a computation graph:
|
262
|
+
task2 = add_multiply_op(sum_output_ref, 5)
|
263
|
+
|
264
|
+
Bigger data should be read from files and written to files.
|
265
|
+
Use the :py:class:`kfp.components.InputPath` parameter annotation to tell the system that the function wants to consume the corresponding input data as a file. The system will download the data, write it to a local file and then pass the **path** of that file to the function.
|
266
|
+
Use the :py:class:`kfp.components.OutputPath` parameter annotation to tell the system that the function wants to produce the corresponding output data as a file. The system will prepare and pass the **path** of a file where the function should write the output data. After the function exits, the system will upload the data to the storage system so that it can be passed to downstream components.
|
267
|
+
|
268
|
+
You can specify the type of the consumed/produced data by specifying the type argument to :py:class:`kfp.components.InputPath` and :py:class:`kfp.components.OutputPath`. The type can be a python type or an arbitrary type name string. :code:`OutputPath('CatBoostModel')` means that the function states that the data it has written to a file has type :code:`CatBoostModel`. :code:`InputPath('CatBoostModel')` means that the function states that it expect the data it reads from a file to have type 'CatBoostModel'. When the pipeline author connects inputs to outputs the system checks whether the types match.
|
269
|
+
Every kind of data can be consumed as a file input. Conversely, bigger data should not be consumed by value as all value inputs pass through the command line.
|
270
|
+
|
271
|
+
Example of a component function declaring file input and output::
|
272
|
+
|
273
|
+
def catboost_train_classifier(
|
274
|
+
training_data_path: InputPath("CSV"), # Path to input data file of type "CSV"
|
275
|
+
trained_model_path: OutputPath(
|
276
|
+
"CatBoostModel"
|
277
|
+
), # Path to output data file of type "CatBoostModel"
|
278
|
+
number_of_trees: int = 100, # Small output of type "Integer"
|
279
|
+
) -> NamedTuple(
|
280
|
+
"Outputs",
|
281
|
+
[
|
282
|
+
("Accuracy", float), # Small output of type "Float"
|
283
|
+
("Precision", float), # Small output of type "Float"
|
284
|
+
("JobUri", "URI"), # Small output of type "URI"
|
285
|
+
],
|
286
|
+
):
|
287
|
+
"""Train CatBoost classification model"""
|
288
|
+
...
|
289
|
+
|
290
|
+
return (accuracy, precision, recall)
|
291
|
+
'''
|
292
|
+
core_packages = ["wandb", "kfp"]
|
293
|
+
|
294
|
+
if not packages_to_install:
|
295
|
+
packages_to_install = core_packages
|
296
|
+
else:
|
297
|
+
packages_to_install += core_packages
|
298
|
+
|
299
|
+
component_spec = _func_to_component_spec(
|
300
|
+
func=func,
|
301
|
+
extra_code=wandb_logging_extras,
|
302
|
+
base_image=base_image,
|
303
|
+
packages_to_install=packages_to_install,
|
304
|
+
)
|
305
|
+
if annotations:
|
306
|
+
component_spec.metadata = structures.MetadataSpec(
|
307
|
+
annotations=annotations,
|
308
|
+
)
|
309
|
+
|
310
|
+
if output_component_file:
|
311
|
+
component_spec.save(output_component_file)
|
312
|
+
|
313
|
+
return _create_task_factory_from_component_spec(component_spec)
|
314
|
+
|
315
|
+
|
316
|
+
def strip_type_hints(source_code: str) -> str:
|
317
|
+
"""Strip type hints from source code.
|
318
|
+
|
319
|
+
This function is modified from KFP. The original source is below:
|
320
|
+
https://github.com/kubeflow/pipelines/blob/b6406b02f45cdb195c7b99e2f6d22bf85b12268b/sdk/python/kfp/components/_python_op.py#L237-L248.
|
321
|
+
"""
|
322
|
+
# For wandb, do not strip type hints
|
323
|
+
|
324
|
+
# try:
|
325
|
+
# return _strip_type_hints_using_lib2to3(source_code)
|
326
|
+
# except Exception as ex:
|
327
|
+
# print('Error when stripping type annotations: ' + str(ex))
|
328
|
+
|
329
|
+
# try:
|
330
|
+
# return _strip_type_hints_using_strip_hints(source_code)
|
331
|
+
# except Exception as ex:
|
332
|
+
# print('Error when stripping type annotations: ' + str(ex))
|
333
|
+
|
334
|
+
return source_code
|
@@ -0,0 +1,182 @@
|
|
1
|
+
def wandb_log( # noqa: C901
|
2
|
+
func=None,
|
3
|
+
# /, # py38 only
|
4
|
+
log_component_file=True,
|
5
|
+
):
|
6
|
+
"""Wrap a standard python function and log to W&B."""
|
7
|
+
import json
|
8
|
+
import os
|
9
|
+
from functools import wraps
|
10
|
+
from inspect import Parameter, signature
|
11
|
+
|
12
|
+
from kfp import components
|
13
|
+
from kfp.components import (
|
14
|
+
InputArtifact,
|
15
|
+
InputBinaryFile,
|
16
|
+
InputPath,
|
17
|
+
InputTextFile,
|
18
|
+
OutputArtifact,
|
19
|
+
OutputBinaryFile,
|
20
|
+
OutputPath,
|
21
|
+
OutputTextFile,
|
22
|
+
)
|
23
|
+
|
24
|
+
import wandb
|
25
|
+
from wandb.sdk.lib import telemetry as wb_telemetry
|
26
|
+
|
27
|
+
output_types = (OutputArtifact, OutputBinaryFile, OutputPath, OutputTextFile)
|
28
|
+
input_types = (InputArtifact, InputBinaryFile, InputPath, InputTextFile)
|
29
|
+
|
30
|
+
def isinstance_namedtuple(x):
|
31
|
+
t = type(x)
|
32
|
+
b = t.__bases__
|
33
|
+
if len(b) != 1 or b[0] is not tuple:
|
34
|
+
return False
|
35
|
+
f = getattr(t, "_fields", None)
|
36
|
+
if not isinstance(f, tuple):
|
37
|
+
return False
|
38
|
+
return all(isinstance(n, str) for n in f)
|
39
|
+
|
40
|
+
def get_iframe_html(run):
|
41
|
+
return f'<iframe src="{run.url}?kfp=true" style="border:none;width:100%;height:100%;min-width:900px;min-height:600px;"></iframe>'
|
42
|
+
|
43
|
+
def get_link_back_to_kubeflow():
|
44
|
+
wandb_kubeflow_url = os.getenv("WANDB_KUBEFLOW_URL")
|
45
|
+
return f"{wandb_kubeflow_url}/#/runs/details/{{workflow.uid}}"
|
46
|
+
|
47
|
+
def log_input_scalar(name, data, run=None):
|
48
|
+
run.config[name] = data
|
49
|
+
wandb.termlog(f"Setting config: {name} to {data}")
|
50
|
+
|
51
|
+
def log_input_artifact(name, data, type, run=None):
|
52
|
+
artifact = wandb.Artifact(name, type=type)
|
53
|
+
artifact.add_file(data)
|
54
|
+
run.use_artifact(artifact)
|
55
|
+
wandb.termlog(f"Using artifact: {name}")
|
56
|
+
|
57
|
+
def log_output_scalar(name, data, run=None):
|
58
|
+
if isinstance_namedtuple(data):
|
59
|
+
for k, v in zip(data._fields, data):
|
60
|
+
run.log({f"{func.__name__}.{k}": v})
|
61
|
+
else:
|
62
|
+
run.log({name: data})
|
63
|
+
|
64
|
+
def log_output_artifact(name, data, type, run=None):
|
65
|
+
artifact = wandb.Artifact(name, type=type)
|
66
|
+
artifact.add_file(data)
|
67
|
+
run.log_artifact(artifact)
|
68
|
+
wandb.termlog(f"Logging artifact: {name}")
|
69
|
+
|
70
|
+
def _log_component_file(func, run=None):
|
71
|
+
name = func.__name__
|
72
|
+
output_component_file = f"{name}.yml"
|
73
|
+
components._python_op.func_to_component_file(func, output_component_file)
|
74
|
+
artifact = wandb.Artifact(name, type="kubeflow_component_file")
|
75
|
+
artifact.add_file(output_component_file)
|
76
|
+
run.log_artifact(artifact)
|
77
|
+
wandb.termlog(f"Logging component file: {output_component_file}")
|
78
|
+
|
79
|
+
# Add `mlpipeline_ui_metadata_path` to signature to show W&B run in "ML Visualizations tab"
|
80
|
+
sig = signature(func)
|
81
|
+
no_default = []
|
82
|
+
has_default = []
|
83
|
+
|
84
|
+
for param in sig.parameters.values():
|
85
|
+
if param.default is param.empty:
|
86
|
+
no_default.append(param)
|
87
|
+
else:
|
88
|
+
has_default.append(param)
|
89
|
+
|
90
|
+
new_params = tuple(
|
91
|
+
(
|
92
|
+
*no_default,
|
93
|
+
Parameter(
|
94
|
+
"mlpipeline_ui_metadata_path",
|
95
|
+
annotation=OutputPath(),
|
96
|
+
kind=Parameter.POSITIONAL_OR_KEYWORD,
|
97
|
+
),
|
98
|
+
*has_default,
|
99
|
+
)
|
100
|
+
)
|
101
|
+
new_sig = sig.replace(parameters=new_params)
|
102
|
+
new_anns = {param.name: param.annotation for param in new_params}
|
103
|
+
if "return" in func.__annotations__:
|
104
|
+
new_anns["return"] = func.__annotations__["return"]
|
105
|
+
|
106
|
+
def decorator(func):
|
107
|
+
input_scalars = {}
|
108
|
+
input_artifacts = {}
|
109
|
+
output_scalars = {}
|
110
|
+
output_artifacts = {}
|
111
|
+
|
112
|
+
for name, ann in func.__annotations__.items():
|
113
|
+
if name == "return":
|
114
|
+
output_scalars[name] = ann
|
115
|
+
elif isinstance(ann, output_types):
|
116
|
+
output_artifacts[name] = ann
|
117
|
+
elif isinstance(ann, input_types):
|
118
|
+
input_artifacts[name] = ann
|
119
|
+
else:
|
120
|
+
input_scalars[name] = ann
|
121
|
+
|
122
|
+
@wraps(func)
|
123
|
+
def wrapper(*args, **kwargs):
|
124
|
+
bound = new_sig.bind(*args, **kwargs)
|
125
|
+
bound.apply_defaults()
|
126
|
+
|
127
|
+
mlpipeline_ui_metadata_path = bound.arguments["mlpipeline_ui_metadata_path"]
|
128
|
+
del bound.arguments["mlpipeline_ui_metadata_path"]
|
129
|
+
|
130
|
+
with wandb.init(
|
131
|
+
job_type=func.__name__,
|
132
|
+
group="{{workflow.annotations.pipelines.kubeflow.org/run_name}}",
|
133
|
+
) as run:
|
134
|
+
# Link back to the kfp UI
|
135
|
+
kubeflow_url = get_link_back_to_kubeflow()
|
136
|
+
run.notes = kubeflow_url
|
137
|
+
run.config["LINK_TO_KUBEFLOW_RUN"] = kubeflow_url
|
138
|
+
|
139
|
+
iframe_html = get_iframe_html(run)
|
140
|
+
metadata = {
|
141
|
+
"outputs": [
|
142
|
+
{
|
143
|
+
"type": "markdown",
|
144
|
+
"storage": "inline",
|
145
|
+
"source": iframe_html,
|
146
|
+
}
|
147
|
+
]
|
148
|
+
}
|
149
|
+
|
150
|
+
with open(mlpipeline_ui_metadata_path, "w") as metadata_file:
|
151
|
+
json.dump(metadata, metadata_file)
|
152
|
+
|
153
|
+
if log_component_file:
|
154
|
+
_log_component_file(func, run=run)
|
155
|
+
|
156
|
+
for name, _ in input_scalars.items():
|
157
|
+
log_input_scalar(name, kwargs[name], run)
|
158
|
+
|
159
|
+
for name, ann in input_artifacts.items():
|
160
|
+
log_input_artifact(name, kwargs[name], ann.type, run)
|
161
|
+
|
162
|
+
with wb_telemetry.context(run=run) as tel:
|
163
|
+
tel.feature.kfp_wandb_log = True
|
164
|
+
|
165
|
+
result = func(*bound.args, **bound.kwargs)
|
166
|
+
|
167
|
+
for name, _ in output_scalars.items():
|
168
|
+
log_output_scalar(name, result, run)
|
169
|
+
|
170
|
+
for name, ann in output_artifacts.items():
|
171
|
+
log_output_artifact(name, kwargs[name], ann.type, run)
|
172
|
+
|
173
|
+
return result
|
174
|
+
|
175
|
+
wrapper.__signature__ = new_sig
|
176
|
+
wrapper.__annotations__ = new_anns
|
177
|
+
return wrapper
|
178
|
+
|
179
|
+
if func is None:
|
180
|
+
return decorator
|
181
|
+
else:
|
182
|
+
return decorator(func)
|
@@ -0,0 +1,48 @@
|
|
1
|
+
"""This module contains an integration with the LangChain library.
|
2
|
+
|
3
|
+
Specifically, it exposes a `WandbTracer` class that can be used to stream
|
4
|
+
LangChain activity to W&B. The intended usage pattern is to call
|
5
|
+
`tracer = WandbTracer()` at the top of the script/notebook, and call
|
6
|
+
`tracer.finish()` at the end of the script/notebook.
|
7
|
+
This will stream all LangChain activity to W&B.
|
8
|
+
|
9
|
+
Technical Note:
|
10
|
+
LangChain is in very rapid development - meaning their APIs and schemas are actively changing.
|
11
|
+
As a matter of precaution, any call to LangChain apis, or use of their returned data is wrapped
|
12
|
+
in a try/except block. This is to ensure that if a breaking change is introduced, the W&B
|
13
|
+
integration will not break user code. The one exception to the rule is at import time. If
|
14
|
+
LangChain is not installed, or the symbols are not in the same place, the appropriate error
|
15
|
+
will be raised when importing this module.
|
16
|
+
"""
|
17
|
+
|
18
|
+
from packaging import version
|
19
|
+
|
20
|
+
import wandb.util
|
21
|
+
from wandb.sdk.lib import deprecate
|
22
|
+
|
23
|
+
langchain = wandb.util.get_module(
|
24
|
+
name="langchain",
|
25
|
+
required="To use the LangChain WandbTracer you need to have the `langchain` python "
|
26
|
+
"package installed. Please install it with `pip install langchain`.",
|
27
|
+
)
|
28
|
+
|
29
|
+
if version.parse(langchain.__version__) < version.parse("0.0.188"):
|
30
|
+
raise ValueError(
|
31
|
+
"The Weights & Biases Langchain integration does not support versions 0.0.187 and lower. "
|
32
|
+
"To ensure proper functionality, please use version 0.0.188 or higher."
|
33
|
+
)
|
34
|
+
|
35
|
+
# isort: off
|
36
|
+
from langchain.callbacks.tracers import WandbTracer # noqa: E402, I001
|
37
|
+
|
38
|
+
|
39
|
+
class WandbTracer(WandbTracer):
|
40
|
+
def __init__(self, *args, **kwargs):
|
41
|
+
super().__init__(*args, **kwargs)
|
42
|
+
deprecate.deprecate(
|
43
|
+
field_name=deprecate.Deprecated.langchain_tracer,
|
44
|
+
warning_message="This feature is deprecated and has been moved to `langchain`. Enable tracing by setting "
|
45
|
+
"LANGCHAIN_WANDB_TRACING=true in your environment. See the documentation at "
|
46
|
+
"https://python.langchain.com/docs/ecosystem/integrations/agent_with_wandb_tracing for guidance. "
|
47
|
+
"Replace your current import with `from langchain.callbacks.tracers import WandbTracer`.",
|
48
|
+
)
|