workbench 0.8.332__tar.gz → 0.8.334__tar.gz
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.
- {workbench-0.8.332 → workbench-0.8.334}/PKG-INFO +1 -1
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/Dockerfile +1 -1
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/app.py +1 -1
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/model_confidence.md +17 -17
- workbench-0.8.334/docs/images/ensemble_disagreement.svg +118 -0
- workbench-0.8.334/examples/models/chemprop_bounded_loss_test.py +175 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/ml_pipelines/Dockerfile +1 -1
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/smart_aggregator.py +4 -6
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/cached_artifact_mixin.py +18 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/cached_model.py +1 -1
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/endpoint_core.py +17 -6
- {workbench-0.8.332/src/workbench/model_scripts/pytorch_model → workbench-0.8.334/src/workbench/model_script_utils}/uq_harness.py +158 -23
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/chemprop/chemprop.template +15 -4
- {workbench-0.8.332/src/workbench/model_script_utils → workbench-0.8.334/src/workbench/model_scripts/chemprop}/uq_harness.py +158 -23
- {workbench-0.8.332/src/workbench/model_scripts/xgb_model → workbench-0.8.334/src/workbench/model_scripts/pytorch_model}/uq_harness.py +158 -23
- {workbench-0.8.332/src/workbench/model_scripts/chemprop → workbench-0.8.334/src/workbench/model_scripts/xgb_model}/uq_harness.py +158 -23
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/dark/plotly.json +48 -10
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/light/plotly.json +48 -10
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/midnight_blue/plotly.json +48 -10
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/ag_table.py +9 -8
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/confusion_triangle.py +26 -23
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/multi_task_alignment_map.py +38 -23
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/scatter_plot.py +64 -30
- workbench-0.8.334/src/workbench/web_interface/utils/__init__.py +0 -0
- {workbench-0.8.332/src/workbench → workbench-0.8.334/src/workbench/web_interface}/utils/clientside_callbacks.py +27 -23
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench.egg-info/PKG-INFO +1 -1
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench.egg-info/SOURCES.txt +3 -1
- {workbench-0.8.332 → workbench-0.8.334}/tests/confidence/test_uq_harness.py +92 -8
- workbench-0.8.332/docs/images/ensemble_disagreement.svg +0 -78
- {workbench-0.8.332 → workbench-0.8.334}/.flake8 +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/.gitattributes +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/.github/dependabot.yml +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/.github/workflows/deploy-docs.yml +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/.github/workflows/publish.yml +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/.github/workflows/python-lint.yml +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/.gitignore +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/CONTRIBUTING.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/Dockerfile +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/LICENSE +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/Makefile +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/SECURITY.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/.gitignore +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/app.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/assets/favicon.ico +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/dashboard +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/deploy.sh +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/open_source_config.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/data_sources/callbacks.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/data_sources/layout.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/data_sources/page.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/endpoints/callbacks.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/endpoints/layout.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/endpoints/page.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/feature_sets/callbacks.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/feature_sets/layout.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/feature_sets/page.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/license/page.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/main/callbacks.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/main/layout.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/main/page.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/models/callbacks.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/models/layout.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/models/page.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/status/page.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/static/dark.css +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/static/light.css +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/Dockerfile +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/app.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/assets/favicon.ico +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/callbacks.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/explorer +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/layout.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/nginx.conf +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/open_source_config.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/storage/callbacks.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/storage/callbacks_new.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/storage/layout_new.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/supervisord.conf +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/aws_account_setup.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/aws_identity_check.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/build_ml_pipeline.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/.gitignore +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/app.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/cdk.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/compound_explorer/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/compound_explorer/compound_explorer_stack.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/event_bridge/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/app.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/cdk.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/workbench_compute/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/workbench_compute/lambdas/batch_failure/handler.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/workbench_compute/lambdas/batch_trigger/handler.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/workbench_compute/workbench_compute_stack.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/.gitignore +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/app.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/cdk.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/requirements-dev.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/source.bat +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/workbench_core/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/workbench_core/workbench_core_stack.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/.gitignore +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/cdk.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/requirements-dev.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/source.bat +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/workbench_dashboard_full/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/workbench_dashboard_full/workbench_dashboard_stack.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/.gitignore +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/app.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/cdk.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/workbench_dashboard_lite/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/workbench_dashboard_lite/workbench_dashboard_stack.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/abalone.csv +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/karate_graph.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/public_data/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/public_data/alignment_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/public_data/build_logp_logd_overlap.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/public_data/build_synthetic_multi_task.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/public_data/descriptions.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/public_data/overlap_summary.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/public_data/pull_common.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/public_data/pull_logd_data.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/public_data/pull_logp_data.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/public_data/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/public_data/upload_data.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/test_data.csv +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/test_data.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/data/wine_dataset.csv +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/deploy_docker.sh +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/admin/aws_service_limits.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/admin/base_docker_push.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/admin/dashboard_docker_push.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/admin/dashboard_s3_plugins.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/admin/explorer_docker_push.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/admin/images/dashboard_secret_click.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/admin/images/serverless_quotas.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/admin/images/status_showing_S3_path.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/admin/pypi_release.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/admin/workbench_docker_for_lambdas.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/async_endpoint.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/data_source.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/df_store.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/endpoint.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/feature_set.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/inference_cache.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/meta.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/model.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/monitor.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/overview.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/parameter_store.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/views.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/aws_access_management.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/aws_client_vpn.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/aws_setup.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/aws_tips_and_tricks.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/core_stack.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/dashboard_stack.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/domain_cert_setup.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/full_pipeline.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/iam_assume_role.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/sso_assume_role.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/3d_descriptors.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/aws_endpoint_architecture.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/chemprop_multi_task.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/chemprop_shap.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/confusion_explorer.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/feature_endpoints.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/molecular_standardization.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/compound_etl.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/compound_explorer.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/eda.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/feature_importances.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/fun_with_endpoints.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/htg.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/model_monitoring.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/residual_analysis.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/cached/cached_data_source.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/cached/cached_endpoint.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/cached/cached_feature_set.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/cached/cached_meta.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/cached/cached_model.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/cached/overview.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/chem_utils/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/cloudwatch/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/comparisons/workbench_vs_databricks.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/compound_explorer/tox21.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/compound_explorer/toxicity_modeling.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/confidence/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/artifact.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/async_endpoint_core.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/athena_source.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/data_source_abstract.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/endpoint_core.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/feature_set_core.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/model_core.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/monitor_core.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/overview.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/overview.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/data_loaders_heavy.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/data_loaders_light.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/data_to_features.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/features_to_model.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/model_to_endpoint.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/overview.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/pandas_transforms.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/transform.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/views/computation_view.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/views/display_view.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/views/inference_view.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/views/overview.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/views/training_view.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/data_algorithms/dataframes/overview.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/data_algorithms/graphs/overview.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/data_algorithms/overview.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/data_algorithms/spark/overview.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/data_algorithms/sql/overview.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/enterprise/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/enterprise/private_saas.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/enterprise/project_branding.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/enterprise/themes.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/getting_started/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/glue/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/3d_descriptor_pipeline.svg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/big_spider.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/chemprop_logd.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/chemprop_mt_expansion.svg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/chemprop_mt_transfer.svg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/chemprop_overview.svg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/chemprop_shap_logd.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/chemprop_shap_pipeline.svg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/confidence_percentile.svg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/conformal_calibration.svg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/confusion_explorer/drilldown_on_errors.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/confusion_explorer/high_confidence.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/confusion_explorer/overview.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/default_stack_flow.svg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/endpoint_architecture.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/graph_representation.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/powered_aws_dark_blue.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/powered_aws_transparent.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/powered_aws_white.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/powered_aws_with_tm_grey.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/scp.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/scp_labs.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/small_spider.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/uq_conf_residual.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/uq_pred_scatter.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/workbench_async_stack_flow.svg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/workbench_concepts.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/images/workbench_stack_flow.svg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/javascripts/mathjax.js +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/lambda_layer/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/misc/faq.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/misc/general_info.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/misc/scp_consulting.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/misc/workbench_classes_concepts.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/model_utils/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/models/chemprop_models.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/models/fingerprint_models.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/models/images/chemprop_decision_tree.svg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/models/images/confidence.jpg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/models/images/hybrid_architecture.svg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/models/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/models/meta_endpoints.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/models/pytorch_models.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/models/sklearn_models.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/models/xgboost_models.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/plugins/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/presentations/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_106.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_158.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_50.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_55.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_58.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_60.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_71.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_74.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_78.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_7_8.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_11.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_20.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_22.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_23.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_27.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_29.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_33.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_35.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_36.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_39.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_42.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_46.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_6.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_8.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/repl/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/road_maps/0_9_0.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/road_maps/0_9_5.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/stylesheets/extra.css +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/themes/details.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/docs/themes/index.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/ag-grid/hello_world.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/chem_utils/tautomerize_smiles.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/datasource/datasource_from_df.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/datasource/datasource_from_s3.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/datasource/datasource_query.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/datasource/datasource_stats.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/datasource/datasource_to_featureset.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/endpoint/endpoint_details.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/endpoint/endpoint_inference.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/endpoint/endpoint_metrics.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/featureset/featureset_eda.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/featureset/featureset_query.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/full_ml_pipeline.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/glue_jobs/glue_example_1.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/glue_jobs/glue_example_2.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/glue_jobs/glue_example_3.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/glue_jobs/glue_launcher_examples/example_1.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/glue_jobs/glue_launcher_examples/example_2.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/meta/meta_list_endpoints.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/meta/meta_list_models.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/meta/meta_model_metrics.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/ml_pipelines/list_models.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/ml_pipelines/wine_classifier.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/model_utils/model_metrics.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/model_utils/model_to_endpoint.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/model_utils/onboard_model.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/chemprop.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/chemprop_foundation.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/chemprop_logp_logd_synthetic.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/chemprop_logp_logd_tiered.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/custom_model.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/dbscan.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/knn.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/meta_endpoint.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/pytorch.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/random_forest.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/smiles_to_fingerprints.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/smiles_to_md_v1.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/split_comparison_chemprop.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/split_comparison_pytorch.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/split_comparison_xgb.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/uq/bayesian_ridge.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/uq/ensemble_xgb.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/uq/gaussian_process.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/uq/meta_uq.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/uq/ngboost.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/uq/quant_xgb.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/models/xgb_model.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/monitor/monitor_setup.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/monitor/monitor_usage.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/branding/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/branding/scp.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/components/custom_plugin.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/components/endpoint_plugin.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/components/endpoint_turbo.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/components/model_markdown.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/components/model_plugin.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/packages/my_plugin_utils/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/packages/my_plugin_utils/assets/foo.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/packages/my_plugin_utils/cool_stuff.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/pages/plugin_page_1.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/pages/plugin_page_2.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/pages/plugin_page_3.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/templates/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/views/model_plugin_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/views/my_view_plugin.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/experiments/chem_info/bulk_sims.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/experiments/chem_info/knn_sims.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/experiments/cleanlab_bug_report.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/experiments/confidence_roc_curve.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/experiments/coverage_probability.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/experiments/db_scan_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/experiments/log_testing.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/experiments/networkx_id.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/experiments/prediction_intervals.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/experiments/residual_analysis.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/experiments/rocauc_testing.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/experiments/scatter_zoom_issue.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/_common.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/molecular_utils/mol_descriptors.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/molecular_utils/mol_descriptors_3d.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/molecular_utils/mol_standardize.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/smiles_to_2d_keep_salts_model_script.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/smiles_to_2d_model_script.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/smiles_to_3d_fast_model_script.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/smiles_to_3d_full_model_script.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/smiles_to_2d_3d_v1.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/smiles_to_2d_keep_salts_v1.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/smiles_to_2d_v1.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/smiles_to_3d_fast_v1.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/smiles_to_3d_full_v1.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/glue_jobs/create_glue_workflow_with_trigger.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/glue_jobs/example_glue_job.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/glue_jobs/glue_mixed_case.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/mkdocs.yml +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/ml_pipelines/hyper_uq.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/notebooks/Inference_On_Legacy_Models.ipynb +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/notebooks/ML_Pipeline_with_Workbench.ipynb +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/notebooks/ML_Pipeline_with_Workbench_2.ipynb +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/notebooks/Outliers_in_Workbench.ipynb +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/notebooks/Regression_Confidence_Experiments.ipynb +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/notebooks/Residual_Analysis.ipynb +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/notebooks/images/athena_query_aqsol.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/notebooks/images/aws_dashboard_aqsol.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/notebooks/images/dashboard_aqsol_features.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/notebooks/images/model_screenshot.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/notebooks/images/scp_labs.png +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet/.gitignore +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet/all_models.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet/hello_world.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet/images/confidence.jpg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet/images/open_admet_model.jpg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet/load_data.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet/model_metrics.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet/run_inference.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet/utils/compute_model_metrics.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet_pxr/all_models.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet_pxr/create_feature_sets.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet_pxr/load_data.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/open_admet_pxr/pytorch_experiments.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/presentations/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/pyproject.toml +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/base/inference/Dockerfile +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/base/inference/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/base/training/Dockerfile +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/base/training/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/build_deploy.sh +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/ml_pipelines/ml_pipeline_runner.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/ml_pipelines/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/pytorch_chem/inference/Dockerfile +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/pytorch_chem/inference/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/pytorch_chem/training/Dockerfile +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/pytorch_chem/training/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/shared/main.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/shared/serve +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/tests/data/abalone_sm.csv +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/tests/example_model_script.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/tests/run_tests.sh +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/tests/test_inference.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/tests/test_training.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/active_logs.sh +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admet/partition_aqsol_alignment.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/async_typical_usage.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/athena_ddl_mixed_case.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/capture_check.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/check_all_glue_tables.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/compact_inference_cache.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/delete_invalid_views.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/delete_redis_keys.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/find_orphan_models.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/inference_cache_concurrency_check.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/list_datacatalog.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/migration/copy_glue_database.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/migration/delete_sageworks_glue_database.sh +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/migration/ds_migrate.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/migration/endpoint_migrate.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/migration/fs_migrate.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/migration/model_migrate.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/populate_3d_perf_reference_compounds.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/populate_3d_reference_compounds.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/populate_complexity_skip_reference_compounds.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/populate_corner_cases_reference_compounds.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/populate_flexibility_reference_compounds.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/populate_standardization_reference_compounds.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/profile_3d_fast.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/pull_image_digest.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/redis_reaper.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/reference_compounds_common.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/smiles_nan_investigation.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/spam_list_tags.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/storage/convert_training_views.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/storage/migrate_data_source_via_df.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/storage/migrate_ds_meta.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/test_3d_descriptors.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/test_3d_endpoint.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/test_batch_job_failure.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/test_no_workbench_config.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/verify_async_autoscaling.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/ag_table_row_selection.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/compare_dataframes.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/compare_model_packages.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/delete_data_capture.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/endpoint_timing.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/get_tags.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/instantiation_timings.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/llm_deploys/deepseek_deploy.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/model_cache_refresh.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/model_endpoint_sanity_check.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/monitor_event_bridge.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/onboard_endpoints.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/onboard_models.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/pubchem/pubchem_example.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/pubchem/pubchem_query.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/pubchem/pubchem_query_with_cid.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/sagemaker_feature_group_issue.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/sagemaker_pipeline_model_endpoint.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/seaborn_to_plotly.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/storage/dns_data_to_features.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/storage/generate_jsonl_data.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/test_feature_resolution.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/test_feature_set_creation.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/tox21/test_tox_heuristic.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/scripts/tox21/tox21_to_df_store.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/setup.cfg +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/data_source_eda.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/feature_space_proximity.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/fingerprint_proximity.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/multi_task_alignment.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/projection_2d.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/proximity.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/storage/aggregation.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/storage/feature_resolution.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/storage/feature_spider.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/storage/residuals_calculator.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/storage/row_tagger.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/storage/target_gradients.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/graph/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/graph/heavy/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/graph/light/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/graph/light/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/graph/light/laplacian_smoothness.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/graph/light/proximity_graph.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/models/cleanlab_model.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/models/noise_model.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/spark/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/column_stats.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/correlations.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/descriptive_stats.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/outliers.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/sample_rows.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/value_counts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/compound.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/data_source.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/df_store.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/endpoint.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/feature_set.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/graph_store.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/inference_cache.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/meta.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/meta_endpoint.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/model.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/monitor.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/parameter_store.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/public_data.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/cached_data_source.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/cached_endpoint.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/cached_feature_set.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/cached_meta.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/artifact.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/async_endpoint_core.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/athena_source.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/data_capture_core.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/data_source_abstract.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/data_source_factory.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/df_store_core.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/feature_set_core.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/model_core.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/monitor_core.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/aws_account_clamp.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/aws_graph_store.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/aws_meta.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/aws_secrets_manager.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/aws_session.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/cache_dataframe.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/azure/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/cloud_meta.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/gcp/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/pipelines/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/pipelines/pipeline_meta.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/heavy/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/heavy/s3_heavy_to_data_source.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/light/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/light/csv_to_data_source.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/light/json_to_data_source.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/light/s3_to_data_source_light.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/heavy/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/heavy/emr/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/heavy/glue/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/light/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/light/clean_data.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/light/data_to_data_light.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/heavy/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/heavy/chunk/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/heavy/chunk/data_to_features_chunk.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/heavy/emr/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/heavy/glue/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/heavy/storage/data_to_features_heavy_old.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/light/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/light/data_to_features_light.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/light/molecular_descriptors.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/features_to_features/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/features_to_features/heavy/emr/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/features_to_features/heavy/glue/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/features_to_model/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/features_to_model/features_to_model.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/model_to_endpoint/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/model_to_endpoint/model_to_endpoint.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/pandas_transforms/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/pandas_transforms/data_to_pandas.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/pandas_transforms/features_to_pandas.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/pandas_transforms/pandas_to_data.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/pandas_transforms/pandas_to_features.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/pandas_transforms/pandas_to_features_chunked.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/transform.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/column_subset_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/computation_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/create_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/display_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/inference_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/pandas_to_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/storage/mdq_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/training_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/view_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_script_utils/chemprop_shap_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_script_utils/ensemble_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_script_utils/model_script_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_script_utils/pytorch_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_script_utils/training_harness.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/chemprop/chemprop_shap_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/chemprop/model_script_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/chemprop/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/fingerprints.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/mol_descriptors.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/mol_standardize.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/molecular_descriptors.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/morgan_fingerprints.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/network_security/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/proximity/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/proximity/feature_space_proximity.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/proximity/feature_space_proximity.template +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/proximity/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/Readme.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/bayesian_ridge.template +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/ensemble_xgb.template +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/feature_space_proximity.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/gaussian_process.template +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/ngboost.template +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_script_example/custom_model_script.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_script_example/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/meta_endpoint/aggregation_nodes.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/meta_endpoint/ensemble_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/meta_endpoint/meta_endpoint.template +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/meta_endpoint/meta_endpoint_dag.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/pytorch_model/model_script_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/pytorch_model/pytorch.template +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/pytorch_model/pytorch_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/pytorch_model/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/scikit_learn/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/scikit_learn/scikit_learn.template +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/script_generation.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/xgb_model/model_script_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/xgb_model/requirements.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/xgb_model/xgb_model.template +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/repl/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/repl/workbench_shell.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/resources/open_source_api.key +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/resources/signature_verify_pub.pem +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/check_double_bond_stereo.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/df_store.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/endpoint_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/ensemble_sim.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/glue_launcher.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/lambda_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/ml_pipeline_batch.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/ml_pipeline_launcher.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/ml_pipeline_sqs.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/monitor_cloud_watch.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/redis_expire.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/redis_report.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/show_config.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/training_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/dark/base_css.url +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/dark/custom.css +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/light/base_css.url +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/light/branding.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/light/custom.css +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/midnight_blue/base_css.url +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/midnight_blue/branding.json +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/midnight_blue/custom.css +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/aggregation_nodes.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/ai_compound_generator.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/ai_summary.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/ai_synth.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/athena_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/aws_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/bulk_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/cache.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/__init__.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/fingerprints.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/misc.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/mol_descriptors.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/mol_descriptors_3d.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/mol_standardize.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/mol_tagging.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/projections.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/salts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/sdf.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/toxicity.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/vis.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chemprop_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/cloudwatch_handler.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/cloudwatch_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/color_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/config_manager.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/dashboard_metrics.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/datetime_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/deprecated_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/df_to_endpoint.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/distribution_stats.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/ecs_info.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/endpoint_autoscaling.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/endpoint_metrics.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/endpoint_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/ensemble_simulator.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/extract_model_artifact.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/glue_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/graph_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/inference_cache_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/ipython_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/json_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/lambda_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/license_manager.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/log_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/markdown_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/meta_endpoint_dag.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/metrics_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/model_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/monitor_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/multi_task.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/pandas_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/performance_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/plot_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/plugin_manager.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/prox_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/pytorch_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/redis_cache.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/repl_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/s3_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/shap_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/shapley_values.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/symbols.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/synthetic_data_generator.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/theme_manager.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/trace_calls.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/type_abbrev.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/workbench_cache.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/workbench_event_bridge.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/workbench_logging.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/workbench_sqs.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/xgboost_local_crossfold.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/xgboost_model_utils.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/component_interface.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/correlation_matrix.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/data_details_markdown.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/endpoint_metric_plots.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/experiments/dashboard_metric_plots.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/experiments/outlier_plot.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugin_interface.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugin_unit_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/confusion_explorer.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/confusion_matrix.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/dashboard_status.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/data_details.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/endpoint_details.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/generated_compounds.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/graph_plot.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/license_details.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/model_details.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/model_plot.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/molecule_panel.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/molecule_viewer.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/proximity_mini_graph.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/shap_summary_plot.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/regression_plot.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/settings_menu.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/violin_plots.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/page_views/data_sources_page_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/page_views/endpoints_page_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/page_views/feature_sets_page_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/page_views/main_page.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/page_views/models_page_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/page_views/page_view.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench.egg-info/dependency_links.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench.egg-info/entry_points.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench.egg-info/requires.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/src/workbench.egg-info/top_level.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_aqsol_artifacts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_aqsol_artifacts_all.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_aqsol_rt_artifacts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_basic_test_artifacts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_copy_artifacts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_empty_model_group.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_endpoints_for_timing.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_graph_artifacts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_knn_artifacts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_meta_endpoints.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_proximity_models.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_quant_regression_artifacts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_realtime_endpoint.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_sagemaker_pipeline_model.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_training_adjusted_artifacts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_wine_artifacts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/delete_stress_test_artifacts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/delete_test_artifacts.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/hyper_testing.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/regression_ensemble.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/stress_test_aws.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/README.md +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/data_source_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/empty_model_group.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/featureset_ingest_boundaries.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/featureset_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/graph_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/model_metrics_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/model_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/aws_account/aws_account_clamp_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/cached/cached_artifact_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/cached/cached_meta_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/chem_info/test_standardization_reference.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/chem_info/test_tautomerization.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/corner_cases/end_to_end.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/df_store/df_store_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/endpoints/endpoint_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/endpoints/inference_cache_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/endpoints/meta_endpoint_dag_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/feature_endpoints/test_3d_complexity_skips.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/feature_endpoints/test_3d_consistency.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/feature_endpoints/test_3d_corner_cases.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/feature_endpoints/test_3d_flexibility_comparison.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/feature_endpoints/test_smiles_to_3d_fast_v1.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/feature_endpoints/test_smiles_to_3d_full_v1.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/lambda/decompress_layers.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/pandas_tests/test_drift.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/pandas_tests/test_multi_task.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/pandas_tests/test_temporal_split.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/parameter_store/param_store_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/pipelines/test_pipeline_launcher.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/pipelines/test_pipeline_meta.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/plugin_tests/crashing_plugin.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/pytorch/pytorch_hello.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/requirements-dev.txt +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/specific/capital_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/specific/column_changes.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/specific/config_manager.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/specific/deletion_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/specific/public_data_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/specific/shap_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/specific/spawn_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/specific/tag_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/transforms/data_to_data_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/transforms/data_to_features_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/transforms/features_to_model_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/transforms/model_to_endpoint_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/transforms/pandas_to_data_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/transforms/pandas_to_features_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/views/view_tests.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/views/view_tests_complex.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/web_components/confusion_matrix_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/web_components/correlation_matrix_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/web_components/graph_plot_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/web_components/plugin_interface_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tests/web_components/scatter_plot_test.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/tox.ini +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/ui_testing/assets/custom.css +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/ui_testing/table_comparison.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/ui_testing/theme_switching.py +0 -0
- {workbench-0.8.332 → workbench-0.8.334}/ui_testing/theme_switching_2.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: workbench
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.334
|
|
4
4
|
Summary: Workbench: A Dashboard and Python API for creating and deploying AWS SageMaker Model Pipelines
|
|
5
5
|
Author-email: SuperCowPowers LLC <support@supercowpowers.com>
|
|
6
6
|
License: MIT License
|
|
@@ -31,7 +31,7 @@ open('/tmp/deps.txt', 'w').write('\n'.join(deps))" && \
|
|
|
31
31
|
rm /tmp/pyproject.toml /tmp/deps.txt
|
|
32
32
|
|
|
33
33
|
# Layer 3: Workbench only (changes often, ~20MB)
|
|
34
|
-
ARG WORKBENCH_VERSION=0.8.
|
|
34
|
+
ARG WORKBENCH_VERSION=0.8.333
|
|
35
35
|
RUN pip install --no-cache-dir --no-deps "workbench[ui]==${WORKBENCH_VERSION}"
|
|
36
36
|
|
|
37
37
|
# Copy app code and configuration (after pip installs to avoid cache invalidation)
|
|
@@ -12,7 +12,7 @@ print(f"Account: {aws_account}")
|
|
|
12
12
|
print(f"Region: {aws_region}")
|
|
13
13
|
|
|
14
14
|
# When you want a different docker image change this line
|
|
15
|
-
dashboard_image = "public.ecr.aws/m6i5k1r2/workbench_dashboard:
|
|
15
|
+
dashboard_image = "public.ecr.aws/m6i5k1r2/workbench_dashboard:v0_8_333_amd64"
|
|
16
16
|
|
|
17
17
|
# Workbench Configuration
|
|
18
18
|
try:
|
|
@@ -16,7 +16,7 @@ Every Workbench model — whether XGBoost, PyTorch, or ChemProp — is actually
|
|
|
16
16
|
The idea behind using ensemble disagreement as an uncertainty signal is well-established in the ML literature (see [Lakshminarayanan et al., 2017](https://arxiv.org/abs/1612.01474)): **when the models disagree, the prediction is less reliable.** If all 5 models predict log CLint = 2.4 ± 0.02, we have reason to be confident. If they predict 2.4 ± 0.71, something about that compound is tricky and we should be cautious.
|
|
17
17
|
|
|
18
18
|
<figure style="margin: 20px auto; text-align: center;">
|
|
19
|
-
<img src="../../images/ensemble_disagreement.svg" alt="Ensemble disagreement drives confidence" style="
|
|
19
|
+
<img src="../../images/ensemble_disagreement.svg" alt="Ensemble disagreement drives confidence" style="width: 100%; height: auto; min-height: 400px;">
|
|
20
20
|
</figure>
|
|
21
21
|
|
|
22
22
|
This ensemble standard deviation (`prediction_std`) is the raw uncertainty signal. It comes directly from the model itself — not from an external surrogate or statistical assumption. In our testing, it correlates strongly with actual prediction error (Spearman r > 0.85 for ChemProp on MLM CLint from the [OpenADMET Blind Challenge](https://openadmet.org/)), though your mileage will vary depending on the dataset and model type.
|
|
@@ -52,35 +52,33 @@ In practice, this gives us intervals that inherit the ensemble's discrimination
|
|
|
52
52
|
|
|
53
53
|
## Confidence Scores
|
|
54
54
|
|
|
55
|
-
With calibrated intervals in hand, we compute a **confidence score** between 0 and 1 for every prediction.
|
|
55
|
+
With calibrated intervals in hand, we compute a **confidence score** between 0 and 1 for every prediction. The naïve approach is to use ensemble std directly: rank a prediction's std against the cal-set distribution. That works most of the time but has a known failure mode — when the ensemble unanimously agrees on a prediction that's nonetheless wrong, std-based confidence has no way to surface the problem.
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
<img src="../../images/confidence_percentile.svg" alt="Confidence bands showing prediction uncertainty" style="max-width: 800px; width: 100%; min-height: 300px;">
|
|
59
|
-
</figure>
|
|
57
|
+
This happens most often near **censoring boundaries** or in dense regions of target space. Solubility is a textbook example: kinetic-sol assays cap at ~-3.5 LogS, producing a large training cluster at -3.5 to -3.7. When the model encounters a chemically similar compound whose true LogS is much lower (say -5.5), all 5 ensemble members tend to converge on the attractor and predict -3.6 anyway — including the one that didn't see the compound during training. The ensemble agreement is genuine but uninformative; the prediction is confidently wrong.
|
|
60
58
|
|
|
61
|
-
|
|
59
|
+
To address this, we use a **residual-aware confidence** metric. Instead of ranking std directly, we fit a locally adaptive calibrator that maps `(prediction, prediction_std) → expected |residual|`, then rank the *expected residual* against the cal-set distribution:
|
|
62
60
|
|
|
63
61
|
```
|
|
64
|
-
|
|
62
|
+
expected_residual = calibrator(prediction, prediction_std)
|
|
63
|
+
confidence = 1 - percentile_rank(expected_residual)
|
|
65
64
|
```
|
|
66
65
|
|
|
67
|
-
|
|
66
|
+
The calibrator is fit on the cross-fold validation data, where every compound's residual comes from a model that didn't see it during training. We bin predictions into quantile bins along the prediction axis and fit an `IsotonicRegression(std → |residual|)` within each bin. At inference this becomes a fast `np.interp` lookup — no sklearn dependency in production.
|
|
68
67
|
|
|
69
|
-
|
|
68
|
+
This is the standard **locally adaptive conformal prediction** approach from [Lei et al. (2018)](https://www.tandfonline.com/doi/abs/10.1080/01621459.2017.1307116) applied to the scalar confidence score: instead of treating ensemble disagreement as a constant indicator of uncertainty, we let the data tell us how std actually relates to error in different regions of prediction space.
|
|
70
69
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
- **Grounded in the calibration data**: Derived from the same distribution used for interval calibration
|
|
70
|
+
<figure style="margin: 20px auto; text-align: center;">
|
|
71
|
+
<img src="../../images/confidence_percentile.svg" alt="Residual-aware confidence: same std means different expected error depending on prediction band" style="max-width: 800px; width: 100%; min-height: 300px;">
|
|
72
|
+
</figure>
|
|
75
73
|
|
|
76
|
-
|
|
74
|
+
**Interpretation:** confidence of 0.7 means "this prediction's expected error is lower than 70% of cal-set predictions." Unlike the naïve std-percentile approach, this is now a *probabilistically meaningful* statement: among compounds with similar `(prediction, std)` signatures, roughly 70% will have lower error than this one. Two compounds with identical std but predictions in different regions of target space can now get different confidence scores — which is the right behavior, because std means different things in different regions.
|
|
77
75
|
|
|
78
76
|
<figure style="margin: 20px auto; text-align: center;">
|
|
79
77
|
<img src="../../images/uq_conf_residual.png" alt="Confidence vs residual plot" style="max-width: 800px; width: 100%;">
|
|
80
78
|
<figcaption><em>Confidence vs. prediction residual — high-confidence predictions (right) cluster near zero error, while low-confidence predictions (left) show the largest residuals.</em></figcaption>
|
|
81
79
|
</figure>
|
|
82
80
|
|
|
83
|
-
|
|
81
|
+
A residual-aware metric isn't magic. When good and bad predictions share the same `(prediction, std)` signature — same prediction, same ensemble agreement — no post-hoc calibrator can distinguish them. In our solubility example, ~96% of compounds with `prediction ≈ -3.6` and tight std are correctly predicted; the remaining 4% have true values far from -3.6. The calibrator will assign them all roughly the same moderate-high confidence, because that's what the population-level evidence supports. Distinguishing the unlucky 4% requires either fixing the upstream model bias (e.g., censored-aware training with `bounded_loss=True`) or adding chemistry-aware applicability-domain features — both of which are orthogonal to the UQ pipeline itself.
|
|
84
82
|
|
|
85
83
|
## Classification Confidence
|
|
86
84
|
|
|
@@ -170,7 +168,8 @@ We want to be upfront about the limitations. Confidence reflects how much the en
|
|
|
170
168
|
- **Novel chemistry may get falsely high confidence** if it happens to fall in a region where the models extrapolate consistently.
|
|
171
169
|
- **Confidence is relative to the training set.** A confidence of 0.9 on a kinase solubility model doesn't transfer to a PROTAC dataset.
|
|
172
170
|
- **Conformal coverage assumes exchangeability.** The guarantee holds when test data comes from the same distribution as calibration data. For out-of-distribution compounds, coverage may degrade.
|
|
173
|
-
- **Training-exposure bias in calibration.** Calibration `prediction_std` is computed by running all 5 ensemble members on the full training set, so every row was seen by 4 of the 5 models during training. Truly novel molecules (seen by 0 of 5) will tend to produce larger stds than the calibration distribution captures, which can make confidence skew optimistic-then-low on out-of-distribution chemistry. Workbench now defaults to **scaffold-based cross-validation splits** (Bemis-Murcko) for any dataset with a SMILES column
|
|
171
|
+
- **Training-exposure bias in calibration.** Calibration `prediction_std` is computed by running all 5 ensemble members on the full training set, so every row was seen by 4 of the 5 models during training. Truly novel molecules (seen by 0 of 5) will tend to produce larger stds than the calibration distribution captures, which can make confidence skew optimistic-then-low on out-of-distribution chemistry. The residual-aware calibrator helps here by anchoring confidence to historical *errors* rather than raw std — but it doesn't eliminate the bias. Workbench now defaults to **scaffold-based cross-validation splits** (Bemis-Murcko) for any dataset with a SMILES column, which makes confidence calibration reflect scaffold-hopping performance rather than same-scaffold interpolation. For stricter "novel chemistry" evaluation, set `split_strategy="butina"` (Morgan-fingerprint clustering).
|
|
172
|
+
- **Indistinguishable populations within a calibration bin.** When a chunk of compounds shares the same `(prediction, std)` signature but a subset are wrong (e.g. censored-data attractors in solubility), the residual-aware metric assigns them all roughly the same confidence — population-correct, but unable to flag individual unlucky misses. Addressing this requires either upstream model fixes (censored-aware training) or chemistry-aware applicability-domain features, neither of which is part of the confidence pipeline itself.
|
|
174
173
|
|
|
175
174
|
For truly out-of-distribution detection, we'd recommend pairing confidence with applicability domain analysis (e.g., feature-space proximity to training data). This is something we're actively exploring for future Workbench releases.
|
|
176
175
|
|
|
@@ -182,7 +181,7 @@ Here's how Workbench approaches model confidence today:
|
|
|
182
181
|
|
|
183
182
|
1. **Ensemble disagreement** — Building on [Lakshminarayanan et al.](https://arxiv.org/abs/1612.01474), the 5-fold CV ensemble provides `prediction_std` as the raw uncertainty signal
|
|
184
183
|
2. **Conformal calibration** — Following [Angelopoulos & Bates](https://arxiv.org/abs/2107.07511), we scale std into prediction intervals with target coverage (80% CI → ~80% coverage)
|
|
185
|
-
3. **
|
|
184
|
+
3. **Residual-aware confidence** — Following [Lei et al. (2018)](https://www.tandfonline.com/doi/abs/10.1080/01621459.2017.1307116), a locally adaptive calibrator maps `(prediction, std) → expected |residual|`, then ranks the expected residual against the cal-set distribution. This surfaces the failure mode where ensemble disagreement is artificially low in dense regions of target space (e.g. near censoring boundaries)
|
|
186
185
|
|
|
187
186
|
**Classification models:**
|
|
188
187
|
|
|
@@ -197,6 +196,7 @@ Both approaches share the same philosophy: leverage the ensemble's own disagreem
|
|
|
197
196
|
- [Lakshminarayanan et al., "Simple and Scalable Predictive Uncertainty Estimation using Deep Ensembles" (2017)](https://arxiv.org/abs/1612.01474) — Foundational work on using ensemble disagreement for uncertainty
|
|
198
197
|
- [Vovk et al., "Algorithmic Learning in a Random World"](https://link.springer.com/book/10.1007/978-3-031-06649-8) — Foundational text on conformal prediction
|
|
199
198
|
- [Angelopoulos & Bates, "Conformal Prediction: A Gentle Introduction" (2021)](https://arxiv.org/abs/2107.07511) — Accessible introduction to conformal methods
|
|
199
|
+
- [Lei et al., "Distribution-Free Predictive Inference for Regression" (2018)](https://www.tandfonline.com/doi/abs/10.1080/01621459.2017.1307116) — Locally adaptive conformal prediction; basis for the residual-aware confidence calibrator
|
|
200
200
|
- [Gneiting et al., "Probabilistic Forecasts, Calibration and Sharpness" (2007)](https://doi.org/10.1111/j.1467-9868.2007.00587.x) — Calibration vs. discrimination framework
|
|
201
201
|
- [Ovadia et al., "Can You Trust Your Model's Uncertainty?" (2019)](https://arxiv.org/abs/1906.02530) — Analysis of ensemble UQ under dataset shift
|
|
202
202
|
- [Gillis et al., "Variance-Gated Ensembles: An Epistemic-Aware Framework" (2025)](https://arxiv.org/abs/2602.08142) — VGMU approach for combining margin and ensemble variance in classification
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 520" width="100%" height="auto">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="highConf" x1="0" y1="0" x2="0" y2="1">
|
|
4
|
+
<stop offset="0%" stop-color="#00d4aa"/>
|
|
5
|
+
<stop offset="100%" stop-color="#00a080"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="midConf" x1="0" y1="0" x2="0" y2="1">
|
|
8
|
+
<stop offset="0%" stop-color="#ff9f43"/>
|
|
9
|
+
<stop offset="100%" stop-color="#cc7a30"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<linearGradient id="lowConf" x1="0" y1="0" x2="0" y2="1">
|
|
12
|
+
<stop offset="0%" stop-color="#ff6b6b"/>
|
|
13
|
+
<stop offset="100%" stop-color="#c44040"/>
|
|
14
|
+
</linearGradient>
|
|
15
|
+
<linearGradient id="modelBox" x1="0" y1="0" x2="0" y2="1">
|
|
16
|
+
<stop offset="0%" stop-color="#3a86ff"/>
|
|
17
|
+
<stop offset="100%" stop-color="#2a66cc"/>
|
|
18
|
+
</linearGradient>
|
|
19
|
+
<linearGradient id="calibBox" x1="0" y1="0" x2="0" y2="1">
|
|
20
|
+
<stop offset="0%" stop-color="#9b59b6"/>
|
|
21
|
+
<stop offset="100%" stop-color="#7d3f96"/>
|
|
22
|
+
</linearGradient>
|
|
23
|
+
</defs>
|
|
24
|
+
|
|
25
|
+
<!-- Title -->
|
|
26
|
+
<text x="450" y="38" text-anchor="middle" fill="#ccc" font-family="Helvetica, Arial" font-size="24" font-weight="bold">Ensemble Std + Region → Confidence</text>
|
|
27
|
+
<text x="450" y="64" text-anchor="middle" fill="#999" font-family="Helvetica, Arial" font-size="16">via the residual-aware calibrator</text>
|
|
28
|
+
|
|
29
|
+
<!-- ============ PANEL 1: Models agree, sparse region ============ -->
|
|
30
|
+
<text x="155" y="100" text-anchor="middle" fill="#00d4aa" font-family="Helvetica, Arial" font-size="18" font-weight="bold">Models Agree</text>
|
|
31
|
+
<text x="155" y="120" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="14">in a typical region</text>
|
|
32
|
+
|
|
33
|
+
<rect x="35" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
34
|
+
<text x="75" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.41</text>
|
|
35
|
+
<rect x="120" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
36
|
+
<text x="160" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.38</text>
|
|
37
|
+
<rect x="205" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
38
|
+
<text x="245" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.43</text>
|
|
39
|
+
<rect x="80" y="175" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
40
|
+
<text x="120" y="196" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.39</text>
|
|
41
|
+
<rect x="165" y="175" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
42
|
+
<text x="205" y="196" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.40</text>
|
|
43
|
+
|
|
44
|
+
<line x1="155" y1="215" x2="155" y2="240" stroke="#999" stroke-width="2"/>
|
|
45
|
+
<polygon points="155,248 149,236 161,236" fill="#999"/>
|
|
46
|
+
<text x="155" y="270" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="16">pred=2.40, std=0.02</text>
|
|
47
|
+
|
|
48
|
+
<rect x="40" y="285" width="230" height="60" rx="10" fill="url(#calibBox)" opacity="0.25" stroke="#9b59b6" stroke-width="1.5"/>
|
|
49
|
+
<text x="155" y="307" text-anchor="middle" fill="#c89bd9" font-family="Helvetica, Arial" font-size="15" font-weight="bold">Residual Calibrator</text>
|
|
50
|
+
<text x="155" y="328" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="13">historical |resid| ≈ 0.05</text>
|
|
51
|
+
|
|
52
|
+
<line x1="155" y1="355" x2="155" y2="385" stroke="#00d4aa" stroke-width="3"/>
|
|
53
|
+
<polygon points="155,392 148,378 162,378" fill="#00d4aa"/>
|
|
54
|
+
|
|
55
|
+
<rect x="40" y="400" width="230" height="80" rx="10" fill="url(#highConf)" opacity="0.2" stroke="#00d4aa" stroke-width="2"/>
|
|
56
|
+
<text x="155" y="430" text-anchor="middle" fill="#ccc" font-family="Helvetica, Arial" font-size="15">confidence = 0.92</text>
|
|
57
|
+
<text x="155" y="462" text-anchor="middle" fill="#00d4aa" font-family="Helvetica, Arial" font-size="22" font-weight="bold">HIGH</text>
|
|
58
|
+
|
|
59
|
+
<!-- ============ PANEL 2: Models agree, dense region (NEW CASE) ============ -->
|
|
60
|
+
<text x="450" y="100" text-anchor="middle" fill="#ff9f43" font-family="Helvetica, Arial" font-size="18" font-weight="bold">Models Agree</text>
|
|
61
|
+
<text x="450" y="120" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="14">in a dense/censored region</text>
|
|
62
|
+
|
|
63
|
+
<rect x="330" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
64
|
+
<text x="370" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">-3.56</text>
|
|
65
|
+
<rect x="415" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
66
|
+
<text x="455" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">-3.55</text>
|
|
67
|
+
<rect x="500" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
68
|
+
<text x="540" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">-3.58</text>
|
|
69
|
+
<rect x="375" y="175" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
70
|
+
<text x="415" y="196" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">-3.57</text>
|
|
71
|
+
<rect x="460" y="175" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
72
|
+
<text x="500" y="196" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">-3.56</text>
|
|
73
|
+
|
|
74
|
+
<line x1="450" y1="215" x2="450" y2="240" stroke="#999" stroke-width="2"/>
|
|
75
|
+
<polygon points="450,248 444,236 456,236" fill="#999"/>
|
|
76
|
+
<text x="450" y="270" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="16">pred=-3.56, std=0.02</text>
|
|
77
|
+
|
|
78
|
+
<rect x="335" y="285" width="230" height="60" rx="10" fill="url(#calibBox)" opacity="0.25" stroke="#9b59b6" stroke-width="1.5"/>
|
|
79
|
+
<text x="450" y="307" text-anchor="middle" fill="#c89bd9" font-family="Helvetica, Arial" font-size="15" font-weight="bold">Residual Calibrator</text>
|
|
80
|
+
<text x="450" y="328" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="13">historical |resid| ≈ 0.50</text>
|
|
81
|
+
|
|
82
|
+
<line x1="450" y1="355" x2="450" y2="385" stroke="#ff9f43" stroke-width="3"/>
|
|
83
|
+
<polygon points="450,392 443,378 457,378" fill="#ff9f43"/>
|
|
84
|
+
|
|
85
|
+
<rect x="335" y="400" width="230" height="80" rx="10" fill="url(#midConf)" opacity="0.2" stroke="#ff9f43" stroke-width="2"/>
|
|
86
|
+
<text x="450" y="430" text-anchor="middle" fill="#ccc" font-family="Helvetica, Arial" font-size="15">confidence = 0.55</text>
|
|
87
|
+
<text x="450" y="462" text-anchor="middle" fill="#ff9f43" font-family="Helvetica, Arial" font-size="22" font-weight="bold">MODERATE</text>
|
|
88
|
+
|
|
89
|
+
<!-- ============ PANEL 3: Models disagree ============ -->
|
|
90
|
+
<text x="745" y="100" text-anchor="middle" fill="#ff6b6b" font-family="Helvetica, Arial" font-size="18" font-weight="bold">Models Disagree</text>
|
|
91
|
+
<text x="745" y="120" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="14">wide ensemble spread</text>
|
|
92
|
+
|
|
93
|
+
<rect x="625" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
94
|
+
<text x="665" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">1.82</text>
|
|
95
|
+
<rect x="710" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
96
|
+
<text x="750" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.95</text>
|
|
97
|
+
<rect x="795" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
98
|
+
<text x="835" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.31</text>
|
|
99
|
+
<rect x="670" y="175" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
100
|
+
<text x="710" y="196" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">3.47</text>
|
|
101
|
+
<rect x="755" y="175" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
|
|
102
|
+
<text x="795" y="196" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">1.58</text>
|
|
103
|
+
|
|
104
|
+
<line x1="745" y1="215" x2="745" y2="240" stroke="#999" stroke-width="2"/>
|
|
105
|
+
<polygon points="745,248 739,236 751,236" fill="#999"/>
|
|
106
|
+
<text x="745" y="270" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="16">pred=2.43, std=0.71</text>
|
|
107
|
+
|
|
108
|
+
<rect x="630" y="285" width="230" height="60" rx="10" fill="url(#calibBox)" opacity="0.25" stroke="#9b59b6" stroke-width="1.5"/>
|
|
109
|
+
<text x="745" y="307" text-anchor="middle" fill="#c89bd9" font-family="Helvetica, Arial" font-size="15" font-weight="bold">Residual Calibrator</text>
|
|
110
|
+
<text x="745" y="328" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="13">historical |resid| ≈ 0.85</text>
|
|
111
|
+
|
|
112
|
+
<line x1="745" y1="355" x2="745" y2="385" stroke="#ff6b6b" stroke-width="3"/>
|
|
113
|
+
<polygon points="745,392 738,378 752,378" fill="#ff6b6b"/>
|
|
114
|
+
|
|
115
|
+
<rect x="630" y="400" width="230" height="80" rx="10" fill="url(#lowConf)" opacity="0.2" stroke="#ff6b6b" stroke-width="2"/>
|
|
116
|
+
<text x="745" y="430" text-anchor="middle" fill="#ccc" font-family="Helvetica, Arial" font-size="15">confidence = 0.15</text>
|
|
117
|
+
<text x="745" y="462" text-anchor="middle" fill="#ff6b6b" font-family="Helvetica, Arial" font-size="22" font-weight="bold">LOW</text>
|
|
118
|
+
</svg>
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"""Bounded-Loss Sanity Check (ChemProp)
|
|
2
|
+
|
|
3
|
+
This script verifies that ChemProp's bounded-loss path (BoundedMAE / BoundedMSE)
|
|
4
|
+
fires correctly when a FeatureSet provides per-target `_gt` / `_lt` censor
|
|
5
|
+
columns and the model is trained with hyperparameters={"bounded_loss": True}.
|
|
6
|
+
|
|
7
|
+
It builds a small synthetic FeatureSet from public LogP data with artificial
|
|
8
|
+
right-censoring, then trains two ChemProp variants against the same FeatureSet:
|
|
9
|
+
|
|
10
|
+
1. logp-bounded-off -- hyperparameters omitted (bounded_loss defaults to False)
|
|
11
|
+
2. logp-bounded-on -- hyperparameters={"bounded_loss": True}
|
|
12
|
+
|
|
13
|
+
Predictions on the *artificially censored* rows should look very different:
|
|
14
|
+
|
|
15
|
+
bounded_loss=False: predictions cluster near the censor value T because the
|
|
16
|
+
labels are exactly T and MAE punishes deviations in
|
|
17
|
+
either direction.
|
|
18
|
+
bounded_loss=True: predictions are free to go above T without penalty, and
|
|
19
|
+
since the uncensored half of the high-LogP chemistry
|
|
20
|
+
remains at its true (>T) value, the model can learn
|
|
21
|
+
that high-LogP chemistry actually exists.
|
|
22
|
+
|
|
23
|
+
Test design notes
|
|
24
|
+
-----------------
|
|
25
|
+
- Use a real LogP dataset so the model has actual chemistry signal to learn.
|
|
26
|
+
- Pick T at a percentile that leaves a meaningful population above the cap.
|
|
27
|
+
- Censor ONLY half of the rows above T -- the other half stays at its true
|
|
28
|
+
value so the bounded model has uncensored examples to learn from. Without
|
|
29
|
+
any uncensored examples above T, even bounded_loss=True can't pull
|
|
30
|
+
predictions above T (no information to push them there).
|
|
31
|
+
|
|
32
|
+
Verifying the bounded-loss effect after training
|
|
33
|
+
------------------------------------------------
|
|
34
|
+
Note: workbench stores boolean FS columns as nullable Int64, so cast logp_gt to
|
|
35
|
+
bool before boolean indexing (or compare with == 1):
|
|
36
|
+
|
|
37
|
+
fs = FeatureSet("bounded_loss_test_fs").pull_dataframe()
|
|
38
|
+
fs["logp_gt"] = fs["logp_gt"].fillna(0).astype(bool)
|
|
39
|
+
off = Model("logp-bounded-off").get_inference_predictions("full_cross_fold")
|
|
40
|
+
on = Model("logp-bounded-on" ).get_inference_predictions("full_cross_fold")
|
|
41
|
+
off_m = off.merge(fs[["id", "logp_gt", "logp_true"]], on="id")
|
|
42
|
+
on_m = on .merge(fs[["id", "logp_gt", "logp_true"]], on="id")
|
|
43
|
+
for name, m in [("off", off_m), ("on", on_m)]:
|
|
44
|
+
c = m[m["logp_gt"]]
|
|
45
|
+
err = (c["prediction"] - c["logp_true"]).abs()
|
|
46
|
+
print(f"{name}: MAE on censored vs true = {err.mean():.3f}")
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
import numpy as np
|
|
50
|
+
|
|
51
|
+
from workbench.api import Endpoint, FeatureSet, Model, ModelFramework, ModelType, PublicData
|
|
52
|
+
from workbench.core.transforms.pandas_transforms.pandas_to_features import PandasToFeatures
|
|
53
|
+
|
|
54
|
+
# Recreate Flag in case you want to recreate the artifacts
|
|
55
|
+
recreate = False
|
|
56
|
+
|
|
57
|
+
# Synthetic dataset tunables -- these define how visible the bounded-loss effect is
|
|
58
|
+
FS_NAME = "bounded_loss_test_fs"
|
|
59
|
+
PUBLIC_KEY = "comp_chem/logp/logp_all"
|
|
60
|
+
N_ROWS = 3000 # subsample size (keeps training fast)
|
|
61
|
+
CENSOR_THRESHOLD = 3.0 # T: cap above which rows can be censored (top ~25% of LogP)
|
|
62
|
+
CENSOR_FRACTION = 0.5 # fraction of >T rows to actually censor
|
|
63
|
+
RANDOM_SEED = 42
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# =============================================================================
|
|
67
|
+
# Build Synthetic FeatureSet (LogP with artificial right-censoring)
|
|
68
|
+
# =============================================================================
|
|
69
|
+
# Pulls real LogP data from public storage, censors half of the rows above T
|
|
70
|
+
# (recorded logp clipped to T, logp_gt flag set), and keeps the other half at
|
|
71
|
+
# their true values. logp_true is preserved for post-training analysis.
|
|
72
|
+
|
|
73
|
+
if recreate or not FeatureSet(FS_NAME).exists():
|
|
74
|
+
df = PublicData().get(PUBLIC_KEY)
|
|
75
|
+
if df is None:
|
|
76
|
+
raise RuntimeError(f"Could not load {PUBLIC_KEY} from public data")
|
|
77
|
+
|
|
78
|
+
df = df[["smiles", "logp"]].dropna().reset_index(drop=True)
|
|
79
|
+
df = df.sample(n=min(N_ROWS, len(df)), random_state=RANDOM_SEED).reset_index(drop=True)
|
|
80
|
+
df["id"] = df.index.astype(int)
|
|
81
|
+
|
|
82
|
+
# Preserve the true value so we can analyze post-training
|
|
83
|
+
df["logp_true"] = df["logp"]
|
|
84
|
+
|
|
85
|
+
# Censor half of the rows with logp > T: set recorded logp = T and mark _gt
|
|
86
|
+
rng = np.random.default_rng(RANDOM_SEED)
|
|
87
|
+
above = df.index[df["logp_true"] > CENSOR_THRESHOLD]
|
|
88
|
+
n_to_censor = int(len(above) * CENSOR_FRACTION)
|
|
89
|
+
censored_idx = rng.choice(above, size=n_to_censor, replace=False)
|
|
90
|
+
|
|
91
|
+
df["logp_gt"] = False
|
|
92
|
+
df.loc[censored_idx, "logp_gt"] = True
|
|
93
|
+
df.loc[censored_idx, "logp"] = CENSOR_THRESHOLD # clip the label to the cap
|
|
94
|
+
|
|
95
|
+
df = df[["id", "smiles", "logp", "logp_gt", "logp_true"]]
|
|
96
|
+
n_above = int((df["logp_true"] > CENSOR_THRESHOLD).sum())
|
|
97
|
+
n_censored = int(df["logp_gt"].sum())
|
|
98
|
+
print(
|
|
99
|
+
f"FeatureSet '{FS_NAME}': {len(df)} rows | "
|
|
100
|
+
f"true logp > {CENSOR_THRESHOLD}: {n_above} | censored (logp_gt=True): {n_censored} | "
|
|
101
|
+
f"uncensored above cap: {n_above - n_censored}"
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
to_features = PandasToFeatures(FS_NAME)
|
|
105
|
+
to_features.set_input(df, id_column="id")
|
|
106
|
+
to_features.set_output_tags(["chemprop", "bounded-loss", "synthetic", "logp"])
|
|
107
|
+
to_features.transform()
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# =============================================================================
|
|
111
|
+
# Control Model (bounded_loss=False -- default MAE)
|
|
112
|
+
# =============================================================================
|
|
113
|
+
# Trained without the bounded_loss hyperparameter so the censor labels are
|
|
114
|
+
# treated as exact targets. Predictions on censored rows should cluster near
|
|
115
|
+
# the cap value (T=3.0) because MAE punishes deviations in either direction.
|
|
116
|
+
|
|
117
|
+
if recreate or not Model("logp-bounded-off").exists():
|
|
118
|
+
feature_set = FeatureSet(FS_NAME)
|
|
119
|
+
m = feature_set.to_model(
|
|
120
|
+
name="logp-bounded-off",
|
|
121
|
+
model_type=ModelType.UQ_REGRESSOR,
|
|
122
|
+
model_framework=ModelFramework.CHEMPROP,
|
|
123
|
+
target_column="logp",
|
|
124
|
+
feature_list=["smiles"],
|
|
125
|
+
description=(
|
|
126
|
+
"Bounded-loss sanity check (control): standard MAE on artificially censored "
|
|
127
|
+
f"LogP. Censored rows have logp = {CENSOR_THRESHOLD} and logp_gt = True; "
|
|
128
|
+
"trained without bounded_loss hyperparameter so censor labels are treated as exact."
|
|
129
|
+
),
|
|
130
|
+
tags=["chemprop", "bounded-loss", "synthetic", "logp", "off"],
|
|
131
|
+
)
|
|
132
|
+
m.set_owner("BW")
|
|
133
|
+
|
|
134
|
+
# Create an Endpoint
|
|
135
|
+
if recreate or not Endpoint("logp-bounded-off").exists():
|
|
136
|
+
m = Model("logp-bounded-off")
|
|
137
|
+
end = m.to_endpoint(tags=["chemprop", "bounded-loss", "synthetic", "logp", "off"])
|
|
138
|
+
end.set_owner("BW")
|
|
139
|
+
end.auto_inference()
|
|
140
|
+
end.cross_fold_inference()
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
# =============================================================================
|
|
144
|
+
# Treatment Model (bounded_loss=True -- BoundedMAE)
|
|
145
|
+
# =============================================================================
|
|
146
|
+
# Trained with hyperparameters={"bounded_loss": True} so the logp_gt column is
|
|
147
|
+
# read by the template and censor labels become lower bounds. Predictions on
|
|
148
|
+
# censored rows should spread above the cap, using the chemistry signal from
|
|
149
|
+
# the uncensored half of the high-LogP rows.
|
|
150
|
+
|
|
151
|
+
if recreate or not Model("logp-bounded-on").exists():
|
|
152
|
+
feature_set = FeatureSet(FS_NAME)
|
|
153
|
+
m = feature_set.to_model(
|
|
154
|
+
name="logp-bounded-on",
|
|
155
|
+
model_type=ModelType.UQ_REGRESSOR,
|
|
156
|
+
model_framework=ModelFramework.CHEMPROP,
|
|
157
|
+
target_column="logp",
|
|
158
|
+
feature_list=["smiles"],
|
|
159
|
+
description=(
|
|
160
|
+
"Bounded-loss sanity check (treatment): BoundedMAE on artificially censored "
|
|
161
|
+
f"LogP. Censored rows have logp = {CENSOR_THRESHOLD} and logp_gt = True; "
|
|
162
|
+
"trained with bounded_loss=True so censor labels are treated as lower bounds."
|
|
163
|
+
),
|
|
164
|
+
tags=["chemprop", "bounded-loss", "synthetic", "logp", "on"],
|
|
165
|
+
hyperparameters={"bounded_loss": True},
|
|
166
|
+
)
|
|
167
|
+
m.set_owner("BW")
|
|
168
|
+
|
|
169
|
+
# Create an Endpoint
|
|
170
|
+
if recreate or not Endpoint("logp-bounded-on").exists():
|
|
171
|
+
m = Model("logp-bounded-on")
|
|
172
|
+
end = m.to_endpoint(tags=["chemprop", "bounded-loss", "synthetic", "logp", "on"])
|
|
173
|
+
end.set_owner("BW")
|
|
174
|
+
end.auto_inference()
|
|
175
|
+
end.cross_fold_inference()
|
|
@@ -39,7 +39,7 @@ COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/pytho
|
|
|
39
39
|
COPY --from=builder /usr/local/bin /usr/local/bin
|
|
40
40
|
|
|
41
41
|
# Layer 2: Workbench + Bridges (changes often, small layer)
|
|
42
|
-
ARG WORKBENCH_VERSION=0.8.
|
|
42
|
+
ARG WORKBENCH_VERSION=0.8.332
|
|
43
43
|
RUN pip install --no-cache-dir --no-deps "workbench==${WORKBENCH_VERSION}" && \
|
|
44
44
|
pip install --no-cache-dir --no-deps workbench-bridges
|
|
45
45
|
|
{workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/smart_aggregator.py
RENAMED
|
@@ -10,7 +10,7 @@ import logging
|
|
|
10
10
|
log = logging.getLogger("workbench")
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
def smart_aggregator(df: pd.DataFrame, target_rows: int =
|
|
13
|
+
def smart_aggregator(df: pd.DataFrame, target_rows: int = 50000, outlier_column: str = "residual") -> pd.DataFrame:
|
|
14
14
|
"""
|
|
15
15
|
Reduce DataFrame rows by aggregating similar rows based on numeric column similarity.
|
|
16
16
|
|
|
@@ -36,11 +36,9 @@ def smart_aggregator(df: pd.DataFrame, target_rows: int = 5000, outlier_column:
|
|
|
36
36
|
# Preserve original column order
|
|
37
37
|
original_columns = df.columns.tolist()
|
|
38
38
|
|
|
39
|
-
# If already at or below target, just
|
|
39
|
+
# If already at or below target, just return the dataframe
|
|
40
40
|
if n_rows <= target_rows:
|
|
41
|
-
|
|
42
|
-
result["aggregation_count"] = 1
|
|
43
|
-
return result
|
|
41
|
+
return df
|
|
44
42
|
|
|
45
43
|
log.info(f"smart_aggregator: Reducing {n_rows} rows to ~{target_rows} rows")
|
|
46
44
|
|
|
@@ -103,7 +101,7 @@ if __name__ == "__main__":
|
|
|
103
101
|
|
|
104
102
|
# Create test data with clusters
|
|
105
103
|
np.random.seed(42)
|
|
106
|
-
n_samples =
|
|
104
|
+
n_samples = 100000
|
|
107
105
|
|
|
108
106
|
# Create 3 distinct clusters
|
|
109
107
|
cluster_1 = np.random.randn(n_samples // 3, 3) + np.array([0, 0, 0])
|
|
@@ -49,6 +49,24 @@ class CachedArtifactMixin:
|
|
|
49
49
|
|
|
50
50
|
return wrapper
|
|
51
51
|
|
|
52
|
+
def refresh(self) -> int:
|
|
53
|
+
"""Invalidate all cached method results for this artifact.
|
|
54
|
+
|
|
55
|
+
Forces subsequent method calls to bypass the cache and re-fetch fresh
|
|
56
|
+
data. Useful when post-processing logic has changed but the underlying
|
|
57
|
+
artifact's Modified timestamp has not.
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
int: Number of cache entries deleted.
|
|
61
|
+
"""
|
|
62
|
+
class_name = self.__class__.__name__.lower()
|
|
63
|
+
prefix = f"{class_name}_{self.name}_"
|
|
64
|
+
keys = self.artifact_cache.list_subkeys(prefix)
|
|
65
|
+
for key in keys:
|
|
66
|
+
self.artifact_cache.delete(key)
|
|
67
|
+
self.log.info(f"Refresh: Cleared {len(keys)} cached entries for {self.name}")
|
|
68
|
+
return len(keys)
|
|
69
|
+
|
|
52
70
|
|
|
53
71
|
# Example usage of CachedModel
|
|
54
72
|
if __name__ == "__main__":
|
|
@@ -86,7 +86,7 @@ class CachedModel(CachedArtifactMixin, ModelCore):
|
|
|
86
86
|
|
|
87
87
|
@CachedArtifactMixin.cache_result
|
|
88
88
|
def get_inference_predictions(
|
|
89
|
-
self, capture_name: str = "full_cross_fold", target_rows: int =
|
|
89
|
+
self, capture_name: str = "full_cross_fold", target_rows: int = 50000
|
|
90
90
|
) -> Union[pd.DataFrame, None]:
|
|
91
91
|
"""Retrieve the captured prediction results for this model
|
|
92
92
|
|
|
@@ -609,12 +609,17 @@ class EndpointCore(Artifact):
|
|
|
609
609
|
target_list = targets if isinstance(targets, list) else [targets]
|
|
610
610
|
primary_target = target_list[0]
|
|
611
611
|
|
|
612
|
-
#
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
612
|
+
# Templates don't save smiles or user-specified meta columns to
|
|
613
|
+
# validation_predictions.csv — merge them in from the FeatureSet so
|
|
614
|
+
# cross_fold captures match the live-inference column set.
|
|
615
|
+
meta_cols = self.workbench_meta().get("inference_meta", []) or []
|
|
616
|
+
merge_candidates = ["smiles"] + [c for c in meta_cols if c != "smiles"]
|
|
617
|
+
to_merge = [c for c in merge_candidates if c not in out_of_fold_df.columns and c in fs.columns]
|
|
618
|
+
if to_merge:
|
|
619
|
+
quoted = ", ".join(f'"{c}"' for c in to_merge)
|
|
620
|
+
fs_df = fs.query(f'SELECT {fs.id_column}, {quoted} FROM "{fs.athena_table}"')
|
|
621
|
+
self.log.info(f"Merging columns from FeatureSet into out-of-fold predictions: {to_merge}")
|
|
622
|
+
out_of_fold_df = out_of_fold_df.merge(fs_df, on=fs.id_column, how="left")
|
|
618
623
|
|
|
619
624
|
# Collect UQ columns (q_*, confidence) for additional tracking (used for hashing)
|
|
620
625
|
additional_columns = [col for col in out_of_fold_df.columns if col.startswith("q_") or col == "confidence"]
|
|
@@ -1100,6 +1105,12 @@ class EndpointCore(Artifact):
|
|
|
1100
1105
|
if "smiles" in cols:
|
|
1101
1106
|
output_columns.append("smiles")
|
|
1102
1107
|
|
|
1108
|
+
# Add user-specified passthrough columns (workbench_meta["inference_meta"])
|
|
1109
|
+
meta_cols = self.workbench_meta().get("inference_meta", []) or []
|
|
1110
|
+
for c in meta_cols:
|
|
1111
|
+
if c in cols and c not in output_columns:
|
|
1112
|
+
output_columns.append(c)
|
|
1113
|
+
|
|
1103
1114
|
# Write the predictions to S3
|
|
1104
1115
|
output_file = f"{inference_capture_path}/inference_predictions.csv"
|
|
1105
1116
|
self.log.info(f"Writing predictions to {output_file}")
|