workbench 0.8.331__tar.gz → 0.8.332__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.331 → workbench-0.8.332}/PKG-INFO +1 -1
- {workbench-0.8.331 → workbench-0.8.332}/data/public_data/build_logp_logd_overlap.py +29 -19
- workbench-0.8.332/data/public_data/overlap_summary.py +128 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/3d_descriptors.md +47 -8
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/molecular_utils/mol_descriptors_3d.py +30 -15
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/smiles_to_3d_full_v1.py +4 -14
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/base/inference/requirements.txt +1 -1
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/base/training/requirements.txt +1 -1
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/ml_pipelines/Dockerfile +1 -1
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admet/partition_aqsol_alignment.py +4 -4
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/inference_cache_concurrency_check.py +2 -2
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/__init__.py +2 -2
- workbench-0.8.332/src/workbench/algorithms/dataframe/multi_task_alignment.py +443 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/endpoint.py +17 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/inference_cache.py +8 -73
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/meta_endpoint.py +35 -39
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/model.py +5 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/async_endpoint_core.py +22 -17
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/model_to_endpoint/model_to_endpoint.py +8 -17
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/chemprop/chemprop.template +98 -8
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/meta_endpoint/meta_endpoint_dag.py +0 -46
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/mol_descriptors_3d.py +30 -15
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/endpoint_autoscaling.py +5 -1
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/inference_cache_utils.py +15 -16
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/meta_endpoint_dag.py +0 -46
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/multi_task.py +3 -360
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/synthetic_data_generator.py +3 -2
- workbench-0.8.332/src/workbench/web_interface/components/plugins/multi_task_alignment_map.py +519 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench.egg-info/PKG-INFO +1 -1
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench.egg-info/SOURCES.txt +2 -3
- workbench-0.8.331/data/public_data/overlap_summary.py +0 -152
- workbench-0.8.331/src/workbench/algorithms/dataframe/dataset_comparison.py +0 -401
- workbench-0.8.331/src/workbench/web_interface/components/plugins/concordance_explorer.py +0 -194
- workbench-0.8.331/src/workbench/web_interface/components/plugins/concordance_map.py +0 -392
- {workbench-0.8.331 → workbench-0.8.332}/.flake8 +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/.gitattributes +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/.github/dependabot.yml +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/.github/workflows/deploy-docs.yml +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/.github/workflows/publish.yml +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/.github/workflows/python-lint.yml +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/.gitignore +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/CONTRIBUTING.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/Dockerfile +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/LICENSE +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/Makefile +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/SECURITY.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/.gitignore +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/Dockerfile +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/app.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/assets/favicon.ico +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/dashboard +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/deploy.sh +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/open_source_config.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/data_sources/callbacks.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/data_sources/layout.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/data_sources/page.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/endpoints/callbacks.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/endpoints/layout.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/endpoints/page.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/feature_sets/callbacks.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/feature_sets/layout.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/feature_sets/page.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/license/page.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/main/callbacks.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/main/layout.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/main/page.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/models/callbacks.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/models/layout.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/models/page.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/status/page.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/static/dark.css +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/static/light.css +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/Dockerfile +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/app.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/assets/favicon.ico +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/callbacks.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/explorer +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/layout.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/nginx.conf +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/open_source_config.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/storage/callbacks.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/storage/callbacks_new.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/storage/layout_new.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/supervisord.conf +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/aws_account_setup.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/aws_identity_check.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/build_ml_pipeline.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/.gitignore +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/app.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/cdk.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/compound_explorer/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/compound_explorer/compound_explorer_stack.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/event_bridge/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/app.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/cdk.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/workbench_compute/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/workbench_compute/lambdas/batch_failure/handler.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/workbench_compute/lambdas/batch_trigger/handler.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/workbench_compute/workbench_compute_stack.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/.gitignore +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/app.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/cdk.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/requirements-dev.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/source.bat +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/workbench_core/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/workbench_core/workbench_core_stack.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/.gitignore +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/app.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/cdk.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/requirements-dev.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/source.bat +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/workbench_dashboard_full/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/workbench_dashboard_full/workbench_dashboard_stack.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/.gitignore +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/app.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/cdk.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/workbench_dashboard_lite/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/workbench_dashboard_lite/workbench_dashboard_stack.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/abalone.csv +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/karate_graph.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/public_data/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/public_data/alignment_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/public_data/build_synthetic_multi_task.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/public_data/descriptions.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/public_data/pull_common.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/public_data/pull_logd_data.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/public_data/pull_logp_data.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/public_data/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/public_data/upload_data.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/test_data.csv +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/test_data.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/data/wine_dataset.csv +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/deploy_docker.sh +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/admin/aws_service_limits.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/admin/base_docker_push.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/admin/dashboard_docker_push.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/admin/dashboard_s3_plugins.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/admin/explorer_docker_push.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/admin/images/dashboard_secret_click.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/admin/images/serverless_quotas.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/admin/images/status_showing_S3_path.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/admin/pypi_release.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/admin/workbench_docker_for_lambdas.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/async_endpoint.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/data_source.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/df_store.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/endpoint.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/feature_set.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/inference_cache.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/meta.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/model.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/monitor.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/overview.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/parameter_store.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/views.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/aws_access_management.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/aws_client_vpn.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/aws_setup.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/aws_tips_and_tricks.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/core_stack.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/dashboard_stack.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/domain_cert_setup.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/full_pipeline.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/iam_assume_role.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/sso_assume_role.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/aws_endpoint_architecture.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/chemprop_multi_task.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/chemprop_shap.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/confusion_explorer.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/feature_endpoints.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/model_confidence.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/molecular_standardization.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/compound_etl.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/compound_explorer.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/eda.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/feature_importances.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/fun_with_endpoints.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/htg.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/model_monitoring.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/residual_analysis.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/cached/cached_data_source.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/cached/cached_endpoint.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/cached/cached_feature_set.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/cached/cached_meta.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/cached/cached_model.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/cached/overview.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/chem_utils/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/cloudwatch/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/comparisons/workbench_vs_databricks.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/compound_explorer/tox21.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/compound_explorer/toxicity_modeling.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/confidence/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/artifact.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/async_endpoint_core.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/athena_source.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/data_source_abstract.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/endpoint_core.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/feature_set_core.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/model_core.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/monitor_core.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/overview.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/overview.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/data_loaders_heavy.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/data_loaders_light.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/data_to_features.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/features_to_model.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/model_to_endpoint.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/overview.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/pandas_transforms.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/transform.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/views/computation_view.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/views/display_view.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/views/inference_view.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/views/overview.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/views/training_view.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/data_algorithms/dataframes/overview.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/data_algorithms/graphs/overview.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/data_algorithms/overview.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/data_algorithms/spark/overview.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/data_algorithms/sql/overview.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/enterprise/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/enterprise/private_saas.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/enterprise/project_branding.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/enterprise/themes.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/getting_started/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/glue/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/3d_descriptor_pipeline.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/big_spider.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/chemprop_logd.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/chemprop_mt_expansion.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/chemprop_mt_transfer.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/chemprop_overview.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/chemprop_shap_logd.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/chemprop_shap_pipeline.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/confidence_percentile.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/conformal_calibration.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/confusion_explorer/drilldown_on_errors.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/confusion_explorer/high_confidence.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/confusion_explorer/overview.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/default_stack_flow.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/endpoint_architecture.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/ensemble_disagreement.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/graph_representation.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/powered_aws_dark_blue.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/powered_aws_transparent.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/powered_aws_white.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/powered_aws_with_tm_grey.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/scp.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/scp_labs.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/small_spider.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/uq_conf_residual.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/uq_pred_scatter.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/workbench_async_stack_flow.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/workbench_concepts.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/images/workbench_stack_flow.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/javascripts/mathjax.js +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/lambda_layer/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/misc/faq.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/misc/general_info.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/misc/scp_consulting.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/misc/workbench_classes_concepts.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/model_utils/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/models/chemprop_models.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/models/fingerprint_models.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/models/images/chemprop_decision_tree.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/models/images/confidence.jpg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/models/images/hybrid_architecture.svg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/models/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/models/meta_endpoints.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/models/pytorch_models.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/models/sklearn_models.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/models/xgboost_models.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/plugins/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/presentations/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_106.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_158.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_50.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_55.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_58.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_60.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_71.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_74.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_78.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_7_8.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_11.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_20.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_22.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_23.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_27.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_29.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_33.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_35.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_36.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_39.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_42.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_46.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_6.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_8.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/repl/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/road_maps/0_9_0.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/road_maps/0_9_5.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/stylesheets/extra.css +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/themes/details.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/docs/themes/index.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/ag-grid/hello_world.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/chem_utils/tautomerize_smiles.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/datasource/datasource_from_df.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/datasource/datasource_from_s3.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/datasource/datasource_query.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/datasource/datasource_stats.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/datasource/datasource_to_featureset.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/endpoint/endpoint_details.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/endpoint/endpoint_inference.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/endpoint/endpoint_metrics.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/featureset/featureset_eda.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/featureset/featureset_query.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/full_ml_pipeline.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/glue_jobs/glue_example_1.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/glue_jobs/glue_example_2.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/glue_jobs/glue_example_3.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/glue_jobs/glue_launcher_examples/example_1.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/glue_jobs/glue_launcher_examples/example_2.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/meta/meta_list_endpoints.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/meta/meta_list_models.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/meta/meta_model_metrics.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/ml_pipelines/list_models.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/ml_pipelines/wine_classifier.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/model_utils/model_metrics.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/model_utils/model_to_endpoint.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/model_utils/onboard_model.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/chemprop.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/chemprop_foundation.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/chemprop_logp_logd_synthetic.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/chemprop_logp_logd_tiered.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/custom_model.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/dbscan.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/knn.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/meta_endpoint.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/pytorch.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/random_forest.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/smiles_to_fingerprints.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/smiles_to_md_v1.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/split_comparison_chemprop.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/split_comparison_pytorch.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/split_comparison_xgb.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/uq/bayesian_ridge.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/uq/ensemble_xgb.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/uq/gaussian_process.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/uq/meta_uq.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/uq/ngboost.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/uq/quant_xgb.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/models/xgb_model.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/monitor/monitor_setup.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/monitor/monitor_usage.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/branding/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/branding/scp.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/components/custom_plugin.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/components/endpoint_plugin.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/components/endpoint_turbo.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/components/model_markdown.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/components/model_plugin.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/packages/my_plugin_utils/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/packages/my_plugin_utils/assets/foo.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/packages/my_plugin_utils/cool_stuff.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/pages/plugin_page_1.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/pages/plugin_page_2.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/pages/plugin_page_3.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/templates/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/views/model_plugin_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/views/my_view_plugin.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/experiments/chem_info/bulk_sims.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/experiments/chem_info/knn_sims.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/experiments/cleanlab_bug_report.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/experiments/confidence_roc_curve.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/experiments/coverage_probability.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/experiments/db_scan_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/experiments/log_testing.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/experiments/networkx_id.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/experiments/prediction_intervals.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/experiments/residual_analysis.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/experiments/rocauc_testing.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/experiments/scatter_zoom_issue.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/_common.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/molecular_utils/mol_descriptors.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/molecular_utils/mol_standardize.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/smiles_to_2d_keep_salts_model_script.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/smiles_to_2d_model_script.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/smiles_to_3d_fast_model_script.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/smiles_to_3d_full_model_script.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/smiles_to_2d_3d_v1.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/smiles_to_2d_keep_salts_v1.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/smiles_to_2d_v1.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/smiles_to_3d_fast_v1.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/glue_jobs/create_glue_workflow_with_trigger.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/glue_jobs/example_glue_job.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/glue_jobs/glue_mixed_case.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/mkdocs.yml +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/ml_pipelines/hyper_uq.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/notebooks/Inference_On_Legacy_Models.ipynb +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/notebooks/ML_Pipeline_with_Workbench.ipynb +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/notebooks/ML_Pipeline_with_Workbench_2.ipynb +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/notebooks/Outliers_in_Workbench.ipynb +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/notebooks/Regression_Confidence_Experiments.ipynb +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/notebooks/Residual_Analysis.ipynb +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/notebooks/images/athena_query_aqsol.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/notebooks/images/aws_dashboard_aqsol.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/notebooks/images/dashboard_aqsol_features.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/notebooks/images/model_screenshot.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/notebooks/images/scp_labs.png +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet/.gitignore +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet/all_models.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet/hello_world.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet/images/confidence.jpg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet/images/open_admet_model.jpg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet/load_data.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet/model_metrics.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet/run_inference.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet/utils/compute_model_metrics.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet_pxr/all_models.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet_pxr/create_feature_sets.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet_pxr/load_data.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/open_admet_pxr/pytorch_experiments.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/presentations/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/pyproject.toml +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/base/inference/Dockerfile +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/base/training/Dockerfile +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/build_deploy.sh +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/ml_pipelines/ml_pipeline_runner.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/ml_pipelines/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/pytorch_chem/inference/Dockerfile +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/pytorch_chem/inference/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/pytorch_chem/training/Dockerfile +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/pytorch_chem/training/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/shared/main.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/shared/serve +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/tests/data/abalone_sm.csv +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/tests/example_model_script.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/tests/run_tests.sh +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/tests/test_inference.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/tests/test_training.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/active_logs.sh +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/async_typical_usage.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/athena_ddl_mixed_case.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/capture_check.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/check_all_glue_tables.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/compact_inference_cache.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/delete_invalid_views.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/delete_redis_keys.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/find_orphan_models.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/list_datacatalog.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/migration/copy_glue_database.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/migration/delete_sageworks_glue_database.sh +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/migration/ds_migrate.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/migration/endpoint_migrate.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/migration/fs_migrate.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/migration/model_migrate.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/populate_3d_perf_reference_compounds.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/populate_3d_reference_compounds.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/populate_complexity_skip_reference_compounds.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/populate_corner_cases_reference_compounds.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/populate_flexibility_reference_compounds.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/populate_standardization_reference_compounds.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/profile_3d_fast.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/pull_image_digest.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/redis_reaper.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/reference_compounds_common.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/smiles_nan_investigation.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/spam_list_tags.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/storage/convert_training_views.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/storage/migrate_data_source_via_df.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/storage/migrate_ds_meta.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/test_3d_descriptors.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/test_3d_endpoint.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/test_batch_job_failure.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/test_no_workbench_config.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/verify_async_autoscaling.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/ag_table_row_selection.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/compare_dataframes.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/compare_model_packages.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/delete_data_capture.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/endpoint_timing.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/get_tags.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/instantiation_timings.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/llm_deploys/deepseek_deploy.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/model_cache_refresh.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/model_endpoint_sanity_check.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/monitor_event_bridge.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/onboard_endpoints.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/onboard_models.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/pubchem/pubchem_example.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/pubchem/pubchem_query.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/pubchem/pubchem_query_with_cid.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/sagemaker_feature_group_issue.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/sagemaker_pipeline_model_endpoint.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/seaborn_to_plotly.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/storage/dns_data_to_features.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/storage/generate_jsonl_data.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/test_feature_resolution.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/test_feature_set_creation.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/tox21/test_tox_heuristic.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/scripts/tox21/tox21_to_df_store.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/setup.cfg +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/data_source_eda.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/feature_space_proximity.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/fingerprint_proximity.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/projection_2d.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/proximity.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/smart_aggregator.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/storage/aggregation.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/storage/feature_resolution.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/storage/feature_spider.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/storage/residuals_calculator.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/storage/row_tagger.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/storage/target_gradients.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/graph/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/graph/heavy/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/graph/light/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/graph/light/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/graph/light/laplacian_smoothness.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/graph/light/proximity_graph.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/models/cleanlab_model.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/models/noise_model.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/spark/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/column_stats.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/correlations.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/descriptive_stats.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/outliers.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/sample_rows.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/value_counts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/compound.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/data_source.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/df_store.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/feature_set.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/graph_store.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/meta.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/monitor.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/parameter_store.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/public_data.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/cached_artifact_mixin.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/cached_data_source.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/cached_endpoint.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/cached_feature_set.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/cached_meta.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/cached_model.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/artifact.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/athena_source.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/data_capture_core.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/data_source_abstract.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/data_source_factory.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/df_store_core.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/endpoint_core.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/feature_set_core.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/model_core.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/monitor_core.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/aws_account_clamp.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/aws_graph_store.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/aws_meta.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/aws_secrets_manager.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/aws_session.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/cache_dataframe.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/azure/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/cloud_meta.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/gcp/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/pipelines/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/pipelines/pipeline_meta.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/heavy/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/heavy/s3_heavy_to_data_source.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/light/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/light/csv_to_data_source.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/light/json_to_data_source.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/light/s3_to_data_source_light.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/heavy/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/heavy/emr/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/heavy/glue/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/light/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/light/clean_data.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/light/data_to_data_light.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/heavy/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/heavy/chunk/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/heavy/chunk/data_to_features_chunk.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/heavy/emr/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/heavy/glue/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/heavy/storage/data_to_features_heavy_old.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/light/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/light/data_to_features_light.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/light/molecular_descriptors.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/features_to_features/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/features_to_features/heavy/emr/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/features_to_features/heavy/glue/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/features_to_model/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/features_to_model/features_to_model.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/model_to_endpoint/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/pandas_transforms/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/pandas_transforms/data_to_pandas.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/pandas_transforms/features_to_pandas.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/pandas_transforms/pandas_to_data.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/pandas_transforms/pandas_to_features.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/pandas_transforms/pandas_to_features_chunked.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/transform.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/column_subset_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/computation_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/create_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/display_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/inference_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/pandas_to_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/storage/mdq_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/training_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/view_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_script_utils/chemprop_shap_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_script_utils/ensemble_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_script_utils/model_script_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_script_utils/pytorch_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_script_utils/training_harness.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_script_utils/uq_harness.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/chemprop/chemprop_shap_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/chemprop/model_script_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/chemprop/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/chemprop/uq_harness.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/fingerprints.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/mol_descriptors.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/mol_standardize.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/molecular_descriptors.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/morgan_fingerprints.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/network_security/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/proximity/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/proximity/feature_space_proximity.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/proximity/feature_space_proximity.template +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/proximity/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/Readme.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/bayesian_ridge.template +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/ensemble_xgb.template +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/feature_space_proximity.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/gaussian_process.template +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/ngboost.template +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_script_example/custom_model_script.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_script_example/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/meta_endpoint/aggregation_nodes.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/meta_endpoint/ensemble_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/meta_endpoint/meta_endpoint.template +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/pytorch_model/model_script_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/pytorch_model/pytorch.template +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/pytorch_model/pytorch_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/pytorch_model/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/pytorch_model/uq_harness.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/scikit_learn/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/scikit_learn/scikit_learn.template +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/script_generation.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/xgb_model/model_script_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/xgb_model/requirements.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/xgb_model/uq_harness.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/xgb_model/xgb_model.template +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/repl/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/repl/workbench_shell.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/resources/open_source_api.key +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/resources/signature_verify_pub.pem +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/check_double_bond_stereo.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/df_store.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/endpoint_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/ensemble_sim.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/glue_launcher.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/lambda_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/ml_pipeline_batch.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/ml_pipeline_launcher.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/ml_pipeline_sqs.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/monitor_cloud_watch.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/redis_expire.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/redis_report.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/show_config.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/training_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/dark/base_css.url +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/dark/custom.css +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/dark/plotly.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/light/base_css.url +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/light/branding.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/light/custom.css +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/light/plotly.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/midnight_blue/base_css.url +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/midnight_blue/branding.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/midnight_blue/custom.css +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/midnight_blue/plotly.json +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/aggregation_nodes.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/ai_compound_generator.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/ai_summary.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/ai_synth.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/athena_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/aws_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/bulk_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/cache.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/__init__.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/fingerprints.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/misc.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/mol_descriptors.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/mol_standardize.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/mol_tagging.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/projections.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/salts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/sdf.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/toxicity.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/vis.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chemprop_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/clientside_callbacks.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/cloudwatch_handler.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/cloudwatch_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/color_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/config_manager.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/dashboard_metrics.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/datetime_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/deprecated_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/df_to_endpoint.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/distribution_stats.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/ecs_info.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/endpoint_metrics.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/endpoint_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/ensemble_simulator.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/extract_model_artifact.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/glue_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/graph_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/ipython_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/json_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/lambda_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/license_manager.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/log_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/markdown_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/metrics_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/model_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/monitor_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/pandas_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/performance_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/plot_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/plugin_manager.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/prox_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/pytorch_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/redis_cache.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/repl_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/s3_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/shap_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/shapley_values.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/symbols.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/theme_manager.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/trace_calls.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/type_abbrev.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/workbench_cache.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/workbench_event_bridge.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/workbench_logging.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/workbench_sqs.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/xgboost_local_crossfold.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/xgboost_model_utils.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/component_interface.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/correlation_matrix.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/data_details_markdown.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/endpoint_metric_plots.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/experiments/dashboard_metric_plots.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/experiments/outlier_plot.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugin_interface.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugin_unit_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/ag_table.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/confusion_explorer.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/confusion_matrix.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/confusion_triangle.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/dashboard_status.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/data_details.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/endpoint_details.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/generated_compounds.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/graph_plot.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/license_details.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/model_details.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/model_plot.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/molecule_panel.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/molecule_viewer.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/proximity_mini_graph.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/scatter_plot.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/shap_summary_plot.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/regression_plot.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/settings_menu.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/violin_plots.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/page_views/data_sources_page_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/page_views/endpoints_page_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/page_views/feature_sets_page_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/page_views/main_page.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/page_views/models_page_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/page_views/page_view.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench.egg-info/dependency_links.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench.egg-info/entry_points.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench.egg-info/requires.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/src/workbench.egg-info/top_level.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_aqsol_artifacts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_aqsol_artifacts_all.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_aqsol_rt_artifacts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_basic_test_artifacts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_copy_artifacts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_empty_model_group.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_endpoints_for_timing.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_graph_artifacts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_knn_artifacts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_meta_endpoints.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_proximity_models.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_quant_regression_artifacts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_realtime_endpoint.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_sagemaker_pipeline_model.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_training_adjusted_artifacts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_wine_artifacts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/delete_stress_test_artifacts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/delete_test_artifacts.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/hyper_testing.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/regression_ensemble.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/stress_test_aws.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/README.md +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/data_source_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/empty_model_group.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/featureset_ingest_boundaries.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/featureset_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/graph_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/model_metrics_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/model_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/aws_account/aws_account_clamp_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/cached/cached_artifact_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/cached/cached_meta_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/chem_info/test_standardization_reference.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/chem_info/test_tautomerization.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/confidence/test_uq_harness.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/corner_cases/end_to_end.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/df_store/df_store_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/endpoints/endpoint_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/endpoints/inference_cache_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/endpoints/meta_endpoint_dag_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/feature_endpoints/test_3d_complexity_skips.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/feature_endpoints/test_3d_consistency.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/feature_endpoints/test_3d_corner_cases.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/feature_endpoints/test_3d_flexibility_comparison.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/feature_endpoints/test_smiles_to_3d_fast_v1.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/feature_endpoints/test_smiles_to_3d_full_v1.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/lambda/decompress_layers.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/pandas_tests/test_drift.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/pandas_tests/test_multi_task.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/pandas_tests/test_temporal_split.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/parameter_store/param_store_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/pipelines/test_pipeline_launcher.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/pipelines/test_pipeline_meta.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/plugin_tests/crashing_plugin.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/pytorch/pytorch_hello.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/requirements-dev.txt +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/specific/capital_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/specific/column_changes.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/specific/config_manager.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/specific/deletion_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/specific/public_data_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/specific/shap_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/specific/spawn_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/specific/tag_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/transforms/data_to_data_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/transforms/data_to_features_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/transforms/features_to_model_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/transforms/model_to_endpoint_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/transforms/pandas_to_data_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/transforms/pandas_to_features_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/views/view_tests.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/views/view_tests_complex.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/web_components/confusion_matrix_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/web_components/correlation_matrix_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/web_components/graph_plot_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/web_components/plugin_interface_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tests/web_components/scatter_plot_test.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/tox.ini +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/ui_testing/assets/custom.css +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/ui_testing/table_comparison.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/ui_testing/theme_switching.py +0 -0
- {workbench-0.8.331 → workbench-0.8.332}/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.332
|
|
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
|
|
@@ -25,9 +25,9 @@ Per-tier construction
|
|
|
25
25
|
* Band selections capped at --max-aux (default 1,558) via deterministic
|
|
26
26
|
random sample (--seed) when more candidates exist than the cap.
|
|
27
27
|
|
|
28
|
-
Approach:
|
|
29
|
-
|
|
30
|
-
merge with the LogD primary, write CSV.
|
|
28
|
+
Approach: build a MultiTaskAlignment with logd as primary and logp as aux. Each
|
|
29
|
+
LogP-only row in the unified results gets a `tanimoto_to_primary` score. Filter
|
|
30
|
+
by band, cap, merge with the LogD primary, write CSV.
|
|
31
31
|
|
|
32
32
|
Output: output/experiments/logp_logd_overlap_<suffix>.csv
|
|
33
33
|
"""
|
|
@@ -38,7 +38,7 @@ from pathlib import Path
|
|
|
38
38
|
|
|
39
39
|
import pandas as pd
|
|
40
40
|
|
|
41
|
-
from workbench.algorithms.dataframe import
|
|
41
|
+
from workbench.algorithms.dataframe import MultiTaskAlignment
|
|
42
42
|
|
|
43
43
|
log = logging.getLogger("workbench")
|
|
44
44
|
|
|
@@ -58,7 +58,7 @@ TIERS = [
|
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
def build_one(
|
|
61
|
-
|
|
61
|
+
mta: MultiTaskAlignment,
|
|
62
62
|
logp: pd.DataFrame,
|
|
63
63
|
logd: pd.DataFrame,
|
|
64
64
|
suffix: str,
|
|
@@ -67,15 +67,18 @@ def build_one(
|
|
|
67
67
|
max_aux: int,
|
|
68
68
|
seed: int,
|
|
69
69
|
) -> Path:
|
|
70
|
-
"""Build a single tier CSV. Reuses the already-built
|
|
71
|
-
results =
|
|
72
|
-
|
|
70
|
+
"""Build a single tier CSV. Reuses the already-built MultiTaskAlignment model."""
|
|
71
|
+
results = mta.results()
|
|
72
|
+
# LogP-only rows in the unified results — `tanimoto_to_primary` is best Tanimoto to any LogD compound.
|
|
73
|
+
logp_scored = results[results["logp"].notna()].copy()
|
|
73
74
|
|
|
74
75
|
# Inclusive band [min, max]. The high tier ([0.7, 1.0]) naturally captures
|
|
75
76
|
# exact-SMILES compounds (Tanimoto == 1.0); their merged rows show both
|
|
76
77
|
# logp and logd populated. Lower tiers (< 1.0) by definition have no
|
|
77
78
|
# smiles in common with LogD.
|
|
78
|
-
band_mask = (logp_scored["
|
|
79
|
+
band_mask = (logp_scored["tanimoto_to_primary"] >= tanimoto_min) & (
|
|
80
|
+
logp_scored["tanimoto_to_primary"] <= tanimoto_max
|
|
81
|
+
)
|
|
79
82
|
band = logp_scored.loc[band_mask].copy()
|
|
80
83
|
|
|
81
84
|
n_band_total = len(band)
|
|
@@ -84,7 +87,7 @@ def build_one(
|
|
|
84
87
|
log.info(
|
|
85
88
|
f"[{suffix}] Band [{tanimoto_min:.2f}, {tanimoto_max:.2f}] "
|
|
86
89
|
f"candidates={n_band_total:,} selected={len(band):,} "
|
|
87
|
-
f"sim_range={band['
|
|
90
|
+
f"sim_range={band['tanimoto_to_primary'].min():.3f}-{band['tanimoto_to_primary'].max():.3f}"
|
|
88
91
|
)
|
|
89
92
|
|
|
90
93
|
# Take selected LogP rows and outer-merge with LogD primary.
|
|
@@ -122,14 +125,21 @@ def main(max_aux: int, seed: int, only: list[str] | None) -> None:
|
|
|
122
125
|
logp_ids = logp.assign(id=logp["id"].astype(str).radd("logp_"))
|
|
123
126
|
logd_ids = logd.assign(id=logd["id"].astype(str).radd("logd_"))
|
|
124
127
|
|
|
125
|
-
#
|
|
126
|
-
#
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
128
|
+
# Wide multi-task DataFrame: LogD-only rows + LogP-only rows. The shared FP/UMAP model
|
|
129
|
+
# is built once, and every LogP row gets a tanimoto_to_primary score against LogD.
|
|
130
|
+
mt_df = pd.concat(
|
|
131
|
+
[
|
|
132
|
+
logd_ids[["id", "smiles"]].assign(logd=logd_ids["logd"]),
|
|
133
|
+
logp_ids[["id", "smiles"]].assign(logp=logp_ids["logp"]),
|
|
134
|
+
],
|
|
135
|
+
ignore_index=True,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
log.info("Building MultiTaskAlignment (primary=logd, aux=logp) ...")
|
|
139
|
+
mta = MultiTaskAlignment(
|
|
140
|
+
mt_df,
|
|
141
|
+
primary="logd",
|
|
142
|
+
auxiliaries=["logp"],
|
|
133
143
|
id_column="id",
|
|
134
144
|
)
|
|
135
145
|
|
|
@@ -138,7 +148,7 @@ def main(max_aux: int, seed: int, only: list[str] | None) -> None:
|
|
|
138
148
|
raise ValueError(f"--only filtered out all tiers; valid suffixes: {[t[0] for t in TIERS]}")
|
|
139
149
|
|
|
140
150
|
for suffix, lo, hi in selected_tiers:
|
|
141
|
-
build_one(
|
|
151
|
+
build_one(mta, logp, logd, suffix, lo, hi, max_aux, seed)
|
|
142
152
|
|
|
143
153
|
|
|
144
154
|
if __name__ == "__main__":
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"""Report LogP/LogD chemical-space overlap to inform multi-task modeling decisions.
|
|
2
|
+
|
|
3
|
+
Goal: decide whether a chemprop multi-task LogP+LogD model is likely to outperform
|
|
4
|
+
a LogD-only model. That depends on two things:
|
|
5
|
+
|
|
6
|
+
(1) Coverage — do LogD compounds have nearby LogP neighbors in chemical space?
|
|
7
|
+
If LogP doesn't cover the LogD distribution, the auxiliary task adds
|
|
8
|
+
little signal where it matters.
|
|
9
|
+
(2) Concordance — for similar compounds, do LogP and LogD agree (correlated)?
|
|
10
|
+
Strong agreement suggests easy auxiliary signal; mild disagreement
|
|
11
|
+
is exactly what multi-task learning can exploit.
|
|
12
|
+
|
|
13
|
+
Thin CLI wrapper around `workbench.algorithms.dataframe.MultiTaskAlignment`:
|
|
14
|
+
|
|
15
|
+
MultiTaskAlignment(df, primary="logd", auxiliaries=["logp"], id_column="id")
|
|
16
|
+
|
|
17
|
+
We then print the per-aux summary and the multi-task verdict. Per-compound details
|
|
18
|
+
are written to `output/overlap_summary.csv` for downstream slicing/plotting.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
import logging
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
|
|
24
|
+
import pandas as pd
|
|
25
|
+
|
|
26
|
+
from workbench.algorithms.dataframe import MultiTaskAlignment
|
|
27
|
+
|
|
28
|
+
log = logging.getLogger("workbench")
|
|
29
|
+
|
|
30
|
+
DATA_DIR = Path(__file__).parent
|
|
31
|
+
OUTPUT_DIR = DATA_DIR / "output"
|
|
32
|
+
LOGP_PATH = OUTPUT_DIR / "logp" / "logp_all.csv"
|
|
33
|
+
LOGD_PATH = OUTPUT_DIR / "logd" / "logd_all.csv"
|
|
34
|
+
SUMMARY_CSV = OUTPUT_DIR / "overlap_summary.csv"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _print_summary(summary_row: pd.Series, n_logp: int, n_logd: int) -> None:
|
|
38
|
+
print("\n" + "=" * 72)
|
|
39
|
+
print("MultiTaskAlignment Summary (primary=LogD, auxiliary=LogP)")
|
|
40
|
+
print("=" * 72)
|
|
41
|
+
print(f" Primary (LogD): {n_logd:>7,} compounds")
|
|
42
|
+
print(f" Auxiliary (LogP): {n_logp:>7,} compounds")
|
|
43
|
+
print(f" Shared compounds: {int(summary_row['n_shared']):>7,}")
|
|
44
|
+
print(f" LogP-only: {int(summary_row['n_aux_only']):>7,}")
|
|
45
|
+
|
|
46
|
+
print("\nLabel correlation on shared compounds")
|
|
47
|
+
r = summary_row["pearson_r"]
|
|
48
|
+
if pd.notna(r):
|
|
49
|
+
print(f" Pearson r = {r:.3f} ({summary_row['r_confidence']} confidence)")
|
|
50
|
+
else:
|
|
51
|
+
print(f" Pearson r = N/A ({summary_row['r_confidence']})")
|
|
52
|
+
|
|
53
|
+
print("\nChemical-space coverage (LogP -> nearest LogD)")
|
|
54
|
+
print(f" mean Tanimoto: {summary_row['tanimoto_coverage_mean']:.3f}")
|
|
55
|
+
print(f" fraction sim >= 0.50: {100 * summary_row['frac_coverage_ge_05']:5.1f}%")
|
|
56
|
+
print(f" fraction sim >= 0.30: {100 * summary_row['frac_coverage_ge_03']:5.1f}%")
|
|
57
|
+
|
|
58
|
+
print("\nZ-scored residual on aux-having rows")
|
|
59
|
+
print(f" |residual| mean: {summary_row['residual_abs_mean']:.3f}")
|
|
60
|
+
print(f" |residual| p95: {summary_row['residual_abs_p95']:.3f}")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _print_verdict(summary_row: pd.Series) -> None:
|
|
64
|
+
print("\n" + "=" * 72)
|
|
65
|
+
print("Multi-Task Recommendation")
|
|
66
|
+
print("=" * 72)
|
|
67
|
+
print(f" Overlap verdict: {summary_row['overlap']}")
|
|
68
|
+
print(f" Extension verdict: {summary_row['extension']}")
|
|
69
|
+
print(f" Recommendation: {summary_row['recommendation']}")
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def main() -> None:
|
|
73
|
+
logging.basicConfig(level=logging.INFO, format="%(levelname)s %(message)s")
|
|
74
|
+
|
|
75
|
+
if not LOGP_PATH.exists():
|
|
76
|
+
raise FileNotFoundError(f"{LOGP_PATH} not found — run pull_logp_data.py first.")
|
|
77
|
+
if not LOGD_PATH.exists():
|
|
78
|
+
raise FileNotFoundError(f"{LOGD_PATH} not found — run pull_logd_data.py first.")
|
|
79
|
+
|
|
80
|
+
logp = pd.read_csv(LOGP_PATH)
|
|
81
|
+
logd = pd.read_csv(LOGD_PATH)
|
|
82
|
+
|
|
83
|
+
# ID disambiguation so the combined model can identify rows uniquely
|
|
84
|
+
logp = logp.assign(id=logp["id"].astype(str).radd("logp_"))
|
|
85
|
+
logd = logd.assign(id=logd["id"].astype(str).radd("logd_"))
|
|
86
|
+
|
|
87
|
+
# Build a wide multi-task DataFrame: one row per source compound with NaN where missing
|
|
88
|
+
mt_df = pd.concat(
|
|
89
|
+
[
|
|
90
|
+
logd[["id", "smiles"]].assign(logd=logd["logd"]),
|
|
91
|
+
logp[["id", "smiles"]].assign(logp=logp["logp"]),
|
|
92
|
+
],
|
|
93
|
+
ignore_index=True,
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
mta = MultiTaskAlignment(
|
|
97
|
+
mt_df,
|
|
98
|
+
primary="logd",
|
|
99
|
+
auxiliaries=["logp"],
|
|
100
|
+
id_column="id",
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
summary = mta.summary()
|
|
104
|
+
summary_row = summary.iloc[0]
|
|
105
|
+
_print_summary(summary_row, n_logp=len(logp), n_logd=len(logd))
|
|
106
|
+
_print_verdict(summary_row)
|
|
107
|
+
|
|
108
|
+
results = mta.results()
|
|
109
|
+
keep = [
|
|
110
|
+
c
|
|
111
|
+
for c in [
|
|
112
|
+
"id",
|
|
113
|
+
"smiles",
|
|
114
|
+
"logd",
|
|
115
|
+
"logp",
|
|
116
|
+
"x",
|
|
117
|
+
"y",
|
|
118
|
+
"tanimoto_to_primary",
|
|
119
|
+
"residual_logp",
|
|
120
|
+
]
|
|
121
|
+
if c in results.columns
|
|
122
|
+
]
|
|
123
|
+
results[keep].to_csv(SUMMARY_CSV, index=False)
|
|
124
|
+
print(f"\nPer-compound results saved -> {SUMMARY_CSV}")
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
if __name__ == "__main__":
|
|
128
|
+
main()
|
|
@@ -1,21 +1,33 @@
|
|
|
1
1
|
# 3D Molecular Descriptors: Shape, Surface, and Pharmacophore Features
|
|
2
|
-
!!! tip inline end "
|
|
3
|
-
|
|
2
|
+
!!! tip inline end "When to reach for 3D"
|
|
3
|
+
On most TDC ADMET endpoints, careful 2D fingerprints + learned graph representations are highly competitive on their own. Use the 3D endpoint when you need shape-aware features for geometry-sensitive endpoints (passive permeability, P-gp / BCRP interactions, conformer-dependent solubility), typically alongside the 2D feature set, not as a replacement for it.
|
|
4
4
|
|
|
5
|
-
2D molecular descriptors capture a lot about a molecule's chemistry from its connectivity graph alone -- molecular weight, hydrogen bond donors, topological polar surface area, and hundreds of other properties.
|
|
5
|
+
2D molecular descriptors capture a lot about a molecule's chemistry from its connectivity graph alone -- molecular weight, hydrogen bond donors, topological polar surface area, and hundreds of other properties. Some ADMET properties have geometric components that 2D descriptors capture only indirectly through their correlations with the molecular graph: how a molecule fits into a transporter binding site, whether it can fold to mask polar groups for membrane permeation, or how its charge distribution maps onto its surface. The 3D endpoint exposes these directly as engineered features -- whether they help on a given task is an empirical question, not a foregone conclusion.
|
|
6
6
|
|
|
7
7
|
Workbench's 3D descriptor endpoints compute **74 conformer-based features** from SMILES strings, covering molecular shape, charged partial surface area, pharmacophore spatial distribution, and conformational flexibility. Like all Workbench endpoints, the contract is simple: **send a DataFrame, get a DataFrame back** -- the input DataFrame comes back with 74 descriptor columns appended. Two pipeline modes are available -- a **fast** endpoint for realtime inference and a **Boltzmann** endpoint for high-quality batch processing. Both produce the same 74 features so downstream models can consume either interchangeably.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## When 3D Descriptors Help (and When They Don't)
|
|
10
10
|
|
|
11
|
-
2D descriptors treat molecules as graphs -- atoms are nodes, bonds are edges.
|
|
11
|
+
2D descriptors treat molecules as graphs -- atoms are nodes, bonds are edges. There are ADMET-relevant properties whose geometric components 2D captures only indirectly:
|
|
12
12
|
|
|
13
13
|
- **Membrane permeability** depends on molecular shape and the spatial separation of polar and nonpolar regions (amphiphilic moment)
|
|
14
14
|
- **Transporter interactions** (P-gp, BCRP) correlate with molecular elongation, nitrogen spatial distribution, and overall size
|
|
15
15
|
- **Protein-ligand binding** depends on 3D shape complementarity, not just functional group counts
|
|
16
|
-
- **Intramolecular hydrogen bonds** enable "chameleonic" behavior where molecules mask polar groups in nonpolar environments -- a
|
|
16
|
+
- **Intramolecular hydrogen bonds** enable "chameleonic" behavior where molecules mask polar groups in nonpolar environments -- a 3D phenomenon
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
3D descriptors expose these directly as engineered features. Whether they actually move the needle on a given downstream model is a separate, empirical question -- and the answer is more nuanced than the bullets above suggest.
|
|
19
|
+
|
|
20
|
+
### When 2D Alone Is Enough
|
|
21
|
+
|
|
22
|
+
There is a real and well-supported skeptical position in the cheminformatics community: for most ADMET endpoints, well-engineered 2D fingerprints + learned graph representations are competitive with -- or better than -- 2D + 3D combined.
|
|
23
|
+
|
|
24
|
+
The evidence:
|
|
25
|
+
|
|
26
|
+
- On the [TDC ADMET leaderboards](https://tdcommons.ai/benchmark/overview/) through 2024-2026, top reproducible models (MapLight, MapLight+GNN, CaliciBoost, NovoExpert-2) use **ECFP/Avalon/ErG + 200 RDKit 2D physchem + GIN embeddings**, with **no explicit 3D features**. The Konopka et al. 2026 critical assessment of TDC leaderboard reproducibility makes this concrete.
|
|
27
|
+
- **PharmaBench** (Niu et al., *Sci. Data* 2024) finds no statistically significant 2D-vs-3D difference on most ADMET endpoints across thousands of compounds.
|
|
28
|
+
- **Bahia et al.** (*Mol. Inform.* 2023) report a 2D + 3D advantage over 2D alone -- but the delta is low single-digit AUC / R², not transformative.
|
|
29
|
+
|
|
30
|
+
So treat the 3D feature stream honestly: a *complementary* set that may give modest, endpoint-dependent gains (most plausibly on passive permeability, P-gp / BCRP recognition, conformer-dependent solubility) on top of a strong 2D + learned-representation baseline. It is not a foregone conclusion that 3D features improve any specific ADMET model -- run an ablation. See the [Limitations & Future Work](#limitations-future-work) section for forward-looking upgrades and a fuller honest accounting.
|
|
19
31
|
|
|
20
32
|
## Two Pipeline Modes: Fast and Full
|
|
21
33
|
|
|
@@ -55,7 +67,7 @@ The full endpoint uses a datamol-style adaptive tiering, with the upper tiers bu
|
|
|
55
67
|
| 8-12 | 300 | Moderate flexibility, needs broader sampling |
|
|
56
68
|
| ≥ 13 | 500 | High flexibility, large conformational space |
|
|
57
69
|
|
|
58
|
-
This ensures adequate sampling of the conformational landscape without wasting compute on rigid molecules. On 300-conformer runs at 13+ rotatable bonds we measured ~20% NPR1 variance across random seeds; bumping to 500 conformers
|
|
70
|
+
This ensures adequate sampling of the conformational landscape without wasting compute on rigid molecules. On 300-conformer runs at 13+ rotatable bonds we measured ~20% NPR1 variance across random seeds; bumping to 500 conformers reduces *within-seed* variance by roughly √(500/300) ≈ 1.29× via the documented "more samples" path. It does not eliminate *cross-seed* variance — different random seeds will still produce slightly different Boltzmann averages on highly flexible molecules — but for most ADMET endpoints this residual is below downstream model noise.
|
|
59
71
|
|
|
60
72
|
## The Computation Pipeline
|
|
61
73
|
|
|
@@ -253,6 +265,22 @@ cached_endpoint = InferenceCache(end_fast, cache_key_column="smiles")
|
|
|
253
265
|
df_cached = cached_endpoint.inference(big_df) # Only computes uncached rows
|
|
254
266
|
```
|
|
255
267
|
|
|
268
|
+
## Limitations & Future Work
|
|
269
|
+
|
|
270
|
+
The pipeline is conservative by design — production ADMET targets stable, deterministic features over the latest research methods. A few areas worth flagging for downstream users and future iterations:
|
|
271
|
+
|
|
272
|
+
**3D vs 2D in ADMET reality.** As noted in the introduction, top reproducible TDC ADMET models lean on 2D fingerprints + learned graph representations. The published evidence (PharmaBench *Sci. Data* 2024; Bahia *Mol. Inform.* 2023) is that 3D descriptors give marginal-but-real gains on geometry-sensitive endpoints and roughly neutral effects on most others. The 3D feature stream complements rather than replaces a strong 2D + learned-representation baseline.
|
|
273
|
+
|
|
274
|
+
**Cross-seed variance on highly flexible molecules.** The 500-conformer top tier reduces within-seed stochastic variance, but different random seeds will still produce slightly different Boltzmann averages on 13+ rotatable-bond molecules. For most ADMET endpoints this residual is below downstream model noise; for tasks that genuinely depend on a single conformer geometry it is not.
|
|
275
|
+
|
|
276
|
+
**Forward-looking upgrades** (evidence-backed; not yet implemented):
|
|
277
|
+
|
|
278
|
+
1. **Single-point xTB / tblite re-ranking** of MMFF-optimized conformers before Boltzmann weighting. Kong et al. (*ChemPhysChem* 2025) show GFN2-xTB is currently the most suitable energy filter for drug-like conformer ranking. Pip-installable via `tblite-python`, deterministic.
|
|
279
|
+
2. **CONFORGE as alternative embedder** for macrocycles and very-flexible scaffolds. Seidel et al. (*JCIM* 2023, CDPKit) — open source, slightly outperforms RDKit on small molecules and matches it on macrocycles where ETKDGv3 sampling plateaus.
|
|
280
|
+
3. **Replace Gasteiger partial charges in CPSA** with AM1-BCC or an ML charge model (DASH; Mahmoud et al. 2023). Gasteiger is documented as the least accurate common partial-charge method, and CPSA accounts for 43 of our 52 Mordred 3D features — the highest-leverage upgrade for the existing feature set.
|
|
281
|
+
|
|
282
|
+
Deliberately *not* on this list: ML conformer generators (ETFlow, GeoMol, Lyrebird) — research-stage with no proven ADMET benefit; MACE-OFF / ANI-2x routine optimization — too heavy for production throughput; tautomer/protomer ensemble enumeration — mature in research, niche in production. We may revisit any of these as the surrounding tooling matures.
|
|
283
|
+
|
|
256
284
|
## References
|
|
257
285
|
|
|
258
286
|
**Conformer Ensemble Methods**
|
|
@@ -271,16 +299,27 @@ df_cached = cached_endpoint.inference(big_df) # Only computes uncached rows
|
|
|
271
299
|
- Landrum, G. *"Understanding conformer generation failures."* RDKit Blog (2023). [Blog post](https://greglandrum.github.io/rdkit-blog/posts/2023-05-17-understanding-confgen-errors.html)
|
|
272
300
|
- Landrum, G. *"Scaling conformer generation."* RDKit Blog (2025). [Blog post](https://greglandrum.github.io/rdkit-blog/posts/2025-08-30-confgen-scaling.html)
|
|
273
301
|
- Datamol conformer generation with adaptive tiering. [Documentation](https://docs.datamol.io/stable/tutorials/Conformers.html)
|
|
302
|
+
- Seidel, T., Permann, C., Wieder, O., Kohlbacher, S. & Langer, T. *"High-Quality Conformer Generation with CONFORGE: Algorithm and Performance Assessment."* J. Chem. Inf. Model. 63, 5549-5570 (2023). [DOI: 10.1021/acs.jcim.3c00563](https://doi.org/10.1021/acs.jcim.3c00563)
|
|
274
303
|
|
|
275
304
|
**Force Fields**
|
|
276
305
|
|
|
277
306
|
- Tosco, P., Stiefl, N. & Landrum, G. *"Bringing the MMFF force field to the RDKit: implementation and validation."* J. Cheminform. 6, 37 (2014). [DOI: 10.1186/s13321-014-0037-3](https://doi.org/10.1186/s13321-014-0037-3)
|
|
307
|
+
- Kong, Z., et al. *"Discriminating High from Low Energy Conformers of Druglike Molecules."* ChemPhysChem (2025). [DOI: 10.1002/cphc.202400992](https://doi.org/10.1002/cphc.202400992)
|
|
278
308
|
|
|
279
309
|
**Descriptors**
|
|
280
310
|
|
|
281
311
|
- RDKit 3D Descriptors: [Documentation](https://www.rdkit.org/docs/source/rdkit.Chem.Descriptors3D.html)
|
|
282
312
|
- Mordred Community: [GitHub](https://github.com/JacksonBurns/mordred-community)
|
|
283
313
|
- Stanton, D.T. & Jurs, P.C. *"Development and Use of Charged Partial Surface Area Structural Descriptors in Computer-Assisted Quantitative Structure-Property Relationship Studies."* Anal. Chem. 62, 2323-2329 (1990). [DOI: 10.1021/ac00220a013](https://doi.org/10.1021/ac00220a013)
|
|
314
|
+
- Bleiziffer, P., Schaller, K. & Riniker, S. *"Machine Learning of Partial Charges Derived from High-Quality Quantum-Mechanical Calculations."* J. Chem. Inf. Model. 58, 579-589 (2018). [DOI: 10.1021/acs.jcim.7b00663](https://doi.org/10.1021/acs.jcim.7b00663)
|
|
315
|
+
- Mahmoud, A.H., Masters, M.R., Lill, M.A., et al. *"DASH: Dynamic Attention-Based Substructure Hierarchy for Partial Charge Assignment."* J. Chem. Inf. Model. (2023). [DOI: 10.1021/acs.jcim.3c00800](https://doi.org/10.1021/acs.jcim.3c00800)
|
|
316
|
+
|
|
317
|
+
**ADMET Benchmarks and 2D vs 3D Evidence**
|
|
318
|
+
|
|
319
|
+
- Huang, K., et al. *"Therapeutics Data Commons: Machine Learning Datasets and Tasks for Drug Discovery and Development."* [TDC ADMET Leaderboards](https://tdcommons.ai/benchmark/overview/)
|
|
320
|
+
- Konopka, M., et al. *"Critical Assessment of ML Models for ADMET Prediction in TDC Leaderboards."* bioRxiv (2026). [DOI: 10.64898/2026.02.26.708193](https://www.biorxiv.org/content/10.64898/2026.02.26.708193v1)
|
|
321
|
+
- Niu, Z., et al. *"PharmaBench: Enhancing ADMET Benchmarks with Large Language Models."* Sci. Data 11, 985 (2024). [DOI: 10.1038/s41597-024-03793-0](https://doi.org/10.1038/s41597-024-03793-0)
|
|
322
|
+
- Bahia, M.S., et al. *"Comparison Between 2D and 3D Descriptors in QSAR Modeling Based on Bio-Activities."* Mol. Inform. 42, 2200186 (2023). [DOI: 10.1002/minf.202200186](https://doi.org/10.1002/minf.202200186)
|
|
284
323
|
|
|
285
324
|
**ADMET and Chameleonic Molecules**
|
|
286
325
|
|
|
@@ -139,16 +139,25 @@ BOLTZMANN_TEMPERATURE_K = 298.0
|
|
|
139
139
|
# The upper tiers are bumped above the datamol-style 200/300 to reduce the
|
|
140
140
|
# stochastic seed variance we measured on very flexible molecules (~20%
|
|
141
141
|
# NPR1 spread across seeds at 300 conformers for 13+ rot-bond chains).
|
|
142
|
-
#
|
|
143
|
-
#
|
|
142
|
+
# More samples from a single seed reduces *within-seed* variance by sqrt(N).
|
|
143
|
+
# It does not eliminate cross-seed variance — different random seeds will
|
|
144
|
+
# still produce slightly different Boltzmann averages on highly flexible
|
|
145
|
+
# molecules. For most ADMET endpoints this residual is below downstream
|
|
146
|
+
# model noise and not worth chasing further.
|
|
144
147
|
#
|
|
145
|
-
#
|
|
146
|
-
#
|
|
147
|
-
#
|
|
148
|
-
# the
|
|
149
|
-
#
|
|
150
|
-
#
|
|
151
|
-
#
|
|
148
|
+
# Forward-looking notes (evidence-backed, not yet implemented):
|
|
149
|
+
# - Single-point xTB / tblite re-ranking of MMFF-optimized conformers
|
|
150
|
+
# before Boltzmann weighting. Kong et al., ChemPhysChem 2025 show
|
|
151
|
+
# GFN2-xTB is the most suitable energy filter for drug-like conformer
|
|
152
|
+
# ranking. Pip-installable via tblite-python, deterministic.
|
|
153
|
+
# - CONFORGE (Seidel et al., JCIM 2023, CDPKit) as an alternative
|
|
154
|
+
# embedder for macrocycles and very-flexible scaffolds where ETKDGv3
|
|
155
|
+
# sampling plateaus. Open source, pip-installable.
|
|
156
|
+
# - Replace Gasteiger partial charges in CPSA with AM1-BCC or an ML
|
|
157
|
+
# charge model (DASH, Mahmoud et al. 2023). Gasteiger is documented
|
|
158
|
+
# as the least accurate common partial-charge method, and CPSA
|
|
159
|
+
# accounts for 43 of our 52 Mordred 3D features — highest-leverage
|
|
160
|
+
# upgrade for the existing feature set.
|
|
152
161
|
ADAPTIVE_CONFORMER_TIERS = [(8, 50), (13, 300)]
|
|
153
162
|
ADAPTIVE_CONFORMER_DEFAULT = 500
|
|
154
163
|
|
|
@@ -1328,16 +1337,17 @@ def compute_descriptors_3d(
|
|
|
1328
1337
|
if smiles_column is None:
|
|
1329
1338
|
raise ValueError("Input DataFrame must have a 'smiles' column")
|
|
1330
1339
|
|
|
1331
|
-
result = df.copy()
|
|
1332
1340
|
n_molecules = len(df)
|
|
1333
1341
|
|
|
1334
1342
|
n_confs_desc = "adaptive (50/200/300)" if is_full else f"{n_conformers}"
|
|
1335
1343
|
logger.info(f"Computing 3D descriptors for {n_molecules} molecules (mode={mode})...")
|
|
1336
1344
|
logger.info(f"Parameters: n_conformers={n_confs_desc}, optimize={optimize}, " f"force_tol={BOLTZMANN_FORCE_TOL}")
|
|
1337
1345
|
|
|
1338
|
-
#
|
|
1339
|
-
#
|
|
1340
|
-
#
|
|
1346
|
+
# Build all output columns up front in one DataFrame and concat once.
|
|
1347
|
+
# Inserting 80+ columns one at a time on the input DataFrame triggers
|
|
1348
|
+
# pandas' fragmentation warning. Numeric columns get float64/NaN; string
|
|
1349
|
+
# and bool diagnostics get object dtype so per-row assignment of
|
|
1350
|
+
# non-float values doesn't raise FutureWarnings.
|
|
1341
1351
|
feature_names = get_3d_feature_names()
|
|
1342
1352
|
diag_names = get_3d_diagnostic_names()
|
|
1343
1353
|
object_dtype_diagnostics = {
|
|
@@ -1346,10 +1356,15 @@ def compute_descriptors_3d(
|
|
|
1346
1356
|
"desc3d_force_field",
|
|
1347
1357
|
"desc3d_stereo_preserved",
|
|
1348
1358
|
}
|
|
1359
|
+
new_columns: Dict[str, pd.Series] = {}
|
|
1349
1360
|
for col in feature_names:
|
|
1350
|
-
|
|
1361
|
+
new_columns[col] = pd.Series(np.full(n_molecules, np.nan, dtype=np.float64), index=df.index)
|
|
1351
1362
|
for col in diag_names:
|
|
1352
|
-
|
|
1363
|
+
if col in object_dtype_diagnostics:
|
|
1364
|
+
new_columns[col] = pd.Series([pd.NA] * n_molecules, dtype=object, index=df.index)
|
|
1365
|
+
else:
|
|
1366
|
+
new_columns[col] = pd.Series(np.full(n_molecules, np.nan, dtype=np.float64), index=df.index)
|
|
1367
|
+
result = pd.concat([df.copy(), pd.DataFrame(new_columns, index=df.index)], axis=1)
|
|
1353
1368
|
result["desc3d_status"] = "skipped"
|
|
1354
1369
|
result["desc3d_mode"] = mode
|
|
1355
1370
|
|
|
@@ -24,7 +24,8 @@ ENDPOINT_NAME = "smiles-to-3d-full-v1"
|
|
|
24
24
|
INSTANCE = None # None → auto-select (ml.c7i.xlarge for async). Set
|
|
25
25
|
# "ml.c7i.2xlarge" etc. for more CPU/mem per worker.
|
|
26
26
|
MAX_INSTANCES = 8 # Autoscaler ceiling. Bump for bigger batch jobs.
|
|
27
|
-
|
|
27
|
+
BATCH_SIZE = 5 # Rows per invocation. 5 fits ml.c7i.xlarge; bump to 10
|
|
28
|
+
# when running on ml.c7i.2xlarge (twice the CPU/mem).
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
if __name__ == "__main__":
|
|
@@ -42,24 +43,13 @@ if __name__ == "__main__":
|
|
|
42
43
|
)
|
|
43
44
|
model.set_owner("BW")
|
|
44
45
|
|
|
45
|
-
# Advanced: workbench_meta knobs set BEFORE to_endpoint() shape deployment.
|
|
46
|
-
# model.upsert_workbench_meta({"async_max_concurrent_per_instance": 4})
|
|
47
|
-
# - default 1 (good for CPU-saturating work). Bump for IO-bound inference.
|
|
48
|
-
|
|
49
46
|
# ── Deploy as an async (batch) endpoint.
|
|
50
|
-
# Autoscaler runs in "batch" mode: 0 → MAX_INSTANCES in one step on first
|
|
51
|
-
# traffic, drain to 0 after IDLE_MINUTES of empty queue.
|
|
52
47
|
end = model.to_endpoint(
|
|
53
48
|
tags=tags,
|
|
54
49
|
async_endpoint=True,
|
|
55
50
|
instance=INSTANCE,
|
|
56
51
|
max_instances=MAX_INSTANCES,
|
|
57
|
-
scale_in_idle_minutes=IDLE_MINUTES,
|
|
58
52
|
)
|
|
59
53
|
|
|
60
|
-
#
|
|
61
|
-
|
|
62
|
-
# - default 50. Higher = better overhead amortization, but a single chunk
|
|
63
|
-
# must finish inside SageMaker's 1hr async invocation limit.
|
|
64
|
-
# end.upsert_workbench_meta({"inference_max_in_flight": 32})
|
|
65
|
-
# - default 16. Higher = more backlog pressure on autoscaling, more S3 load.
|
|
54
|
+
# Per-invocation batch size (overrides the workbench default of 10).
|
|
55
|
+
end.upsert_workbench_meta({"inference_batch_size": BATCH_SIZE})
|
|
@@ -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.331
|
|
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
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"""Partition AQSol data into overlap-based subsets for
|
|
1
|
+
"""Partition AQSol data into overlap-based subsets for MultiTaskAlignment testing.
|
|
2
2
|
|
|
3
3
|
Uses a combined FingerprintProximity model (count fingerprints + Ruzicka distance)
|
|
4
|
-
to compute cross-dataset Tanimoto similarities — the same metric that
|
|
4
|
+
to compute cross-dataset Tanimoto similarities — the same metric that MultiTaskAlignment
|
|
5
5
|
uses at runtime. Creates four subsets based on chemical space overlap:
|
|
6
6
|
|
|
7
7
|
- base: 40% of compounds (the "reference" dataset)
|
|
@@ -67,7 +67,7 @@ def main():
|
|
|
67
67
|
|
|
68
68
|
log.info(f"Base set: {len(df_base)} compounds, Pool: {len(df_pool)} compounds")
|
|
69
69
|
|
|
70
|
-
# Combine base + pool with a dataset column (
|
|
70
|
+
# Combine base + pool with a dataset column (parallel to the union built by MultiTaskAlignment)
|
|
71
71
|
df_base_tagged = df_base.copy()
|
|
72
72
|
df_pool_tagged = df_pool.copy()
|
|
73
73
|
df_base_tagged["dataset"] = "base"
|
|
@@ -75,7 +75,7 @@ def main():
|
|
|
75
75
|
df_combined = pd.concat([df_base_tagged, df_pool_tagged], ignore_index=True)
|
|
76
76
|
|
|
77
77
|
# Build ONE FingerprintProximity on combined data (count fingerprints + Ruzicka)
|
|
78
|
-
# This ensures similarity values match what
|
|
78
|
+
# This ensures similarity values match what MultiTaskAlignment computes at runtime
|
|
79
79
|
log.info("Building FingerprintProximity on combined data (count fingerprints)...")
|
|
80
80
|
prox = FingerprintProximity(df_combined, id_column="id", include_all_columns=True)
|
|
81
81
|
|
|
@@ -135,7 +135,7 @@ def _fresh_cache(endpoint_name: str, cache_path: str, dtype_mode: str) -> Infere
|
|
|
135
135
|
c._invalidation_checked = False
|
|
136
136
|
c._auto_invalidate_cache = False
|
|
137
137
|
c._canonical_dtypes = None
|
|
138
|
-
c.
|
|
138
|
+
c.snapshot = 25
|
|
139
139
|
c.log = logging.getLogger("workbench")
|
|
140
140
|
return c
|
|
141
141
|
|
|
@@ -237,7 +237,7 @@ def test_all_null_column_handling():
|
|
|
237
237
|
c._auto_invalidate_cache = False
|
|
238
238
|
c._canonical_dtypes = None
|
|
239
239
|
c._coerce_warned = set()
|
|
240
|
-
c.
|
|
240
|
+
c.snapshot = 25
|
|
241
241
|
c.log = logging.getLogger("workbench")
|
|
242
242
|
|
|
243
243
|
# Chunk 1: salt all-NaN -> should be dropped from write, not pin dtype
|
|
@@ -10,7 +10,7 @@ from .feature_space_proximity import FeatureSpaceProximity
|
|
|
10
10
|
from .fingerprint_proximity import FingerprintProximity
|
|
11
11
|
from .projection_2d import Projection2D
|
|
12
12
|
from .smart_aggregator import smart_aggregator
|
|
13
|
-
from .
|
|
13
|
+
from .multi_task_alignment import MultiTaskAlignment
|
|
14
14
|
|
|
15
15
|
__all__ = [
|
|
16
16
|
"Proximity",
|
|
@@ -18,5 +18,5 @@ __all__ = [
|
|
|
18
18
|
"FingerprintProximity",
|
|
19
19
|
"Projection2D",
|
|
20
20
|
"smart_aggregator",
|
|
21
|
-
"
|
|
21
|
+
"MultiTaskAlignment",
|
|
22
22
|
]
|