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.
Files changed (909) hide show
  1. {workbench-0.8.331 → workbench-0.8.332}/PKG-INFO +1 -1
  2. {workbench-0.8.331 → workbench-0.8.332}/data/public_data/build_logp_logd_overlap.py +29 -19
  3. workbench-0.8.332/data/public_data/overlap_summary.py +128 -0
  4. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/3d_descriptors.md +47 -8
  5. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/molecular_utils/mol_descriptors_3d.py +30 -15
  6. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/smiles_to_3d_full_v1.py +4 -14
  7. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/base/inference/requirements.txt +1 -1
  8. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/base/training/requirements.txt +1 -1
  9. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/ml_pipelines/Dockerfile +1 -1
  10. {workbench-0.8.331 → workbench-0.8.332}/scripts/admet/partition_aqsol_alignment.py +4 -4
  11. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/inference_cache_concurrency_check.py +2 -2
  12. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/__init__.py +2 -2
  13. workbench-0.8.332/src/workbench/algorithms/dataframe/multi_task_alignment.py +443 -0
  14. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/endpoint.py +17 -0
  15. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/inference_cache.py +8 -73
  16. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/meta_endpoint.py +35 -39
  17. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/model.py +5 -0
  18. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/async_endpoint_core.py +22 -17
  19. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/model_to_endpoint/model_to_endpoint.py +8 -17
  20. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/chemprop/chemprop.template +98 -8
  21. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/meta_endpoint/meta_endpoint_dag.py +0 -46
  22. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/mol_descriptors_3d.py +30 -15
  23. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/endpoint_autoscaling.py +5 -1
  24. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/inference_cache_utils.py +15 -16
  25. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/meta_endpoint_dag.py +0 -46
  26. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/multi_task.py +3 -360
  27. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/synthetic_data_generator.py +3 -2
  28. workbench-0.8.332/src/workbench/web_interface/components/plugins/multi_task_alignment_map.py +519 -0
  29. {workbench-0.8.331 → workbench-0.8.332}/src/workbench.egg-info/PKG-INFO +1 -1
  30. {workbench-0.8.331 → workbench-0.8.332}/src/workbench.egg-info/SOURCES.txt +2 -3
  31. workbench-0.8.331/data/public_data/overlap_summary.py +0 -152
  32. workbench-0.8.331/src/workbench/algorithms/dataframe/dataset_comparison.py +0 -401
  33. workbench-0.8.331/src/workbench/web_interface/components/plugins/concordance_explorer.py +0 -194
  34. workbench-0.8.331/src/workbench/web_interface/components/plugins/concordance_map.py +0 -392
  35. {workbench-0.8.331 → workbench-0.8.332}/.flake8 +0 -0
  36. {workbench-0.8.331 → workbench-0.8.332}/.gitattributes +0 -0
  37. {workbench-0.8.331 → workbench-0.8.332}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  38. {workbench-0.8.331 → workbench-0.8.332}/.github/dependabot.yml +0 -0
  39. {workbench-0.8.331 → workbench-0.8.332}/.github/workflows/deploy-docs.yml +0 -0
  40. {workbench-0.8.331 → workbench-0.8.332}/.github/workflows/publish.yml +0 -0
  41. {workbench-0.8.331 → workbench-0.8.332}/.github/workflows/python-lint.yml +0 -0
  42. {workbench-0.8.331 → workbench-0.8.332}/.gitignore +0 -0
  43. {workbench-0.8.331 → workbench-0.8.332}/CONTRIBUTING.md +0 -0
  44. {workbench-0.8.331 → workbench-0.8.332}/Dockerfile +0 -0
  45. {workbench-0.8.331 → workbench-0.8.332}/LICENSE +0 -0
  46. {workbench-0.8.331 → workbench-0.8.332}/Makefile +0 -0
  47. {workbench-0.8.331 → workbench-0.8.332}/README.md +0 -0
  48. {workbench-0.8.331 → workbench-0.8.332}/SECURITY.md +0 -0
  49. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/.gitignore +0 -0
  50. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/Dockerfile +0 -0
  51. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/README.md +0 -0
  52. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/app.py +0 -0
  53. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/assets/favicon.ico +0 -0
  54. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/dashboard +0 -0
  55. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/deploy.sh +0 -0
  56. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/open_source_config.json +0 -0
  57. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/data_sources/callbacks.py +0 -0
  58. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/data_sources/layout.py +0 -0
  59. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/data_sources/page.py +0 -0
  60. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/endpoints/callbacks.py +0 -0
  61. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/endpoints/layout.py +0 -0
  62. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/endpoints/page.py +0 -0
  63. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/feature_sets/callbacks.py +0 -0
  64. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/feature_sets/layout.py +0 -0
  65. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/feature_sets/page.py +0 -0
  66. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/license/page.py +0 -0
  67. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/main/callbacks.py +0 -0
  68. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/main/layout.py +0 -0
  69. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/main/page.py +0 -0
  70. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/models/callbacks.py +0 -0
  71. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/models/layout.py +0 -0
  72. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/models/page.py +0 -0
  73. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/pages/status/page.py +0 -0
  74. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/static/dark.css +0 -0
  75. {workbench-0.8.331 → workbench-0.8.332}/applications/aws_dashboard/static/light.css +0 -0
  76. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/Dockerfile +0 -0
  77. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/README.md +0 -0
  78. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/app.py +0 -0
  79. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/assets/favicon.ico +0 -0
  80. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/callbacks.py +0 -0
  81. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/explorer +0 -0
  82. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/layout.py +0 -0
  83. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/nginx.conf +0 -0
  84. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/open_source_config.json +0 -0
  85. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/requirements.txt +0 -0
  86. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/storage/callbacks.py +0 -0
  87. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/storage/callbacks_new.py +0 -0
  88. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/storage/layout_new.py +0 -0
  89. {workbench-0.8.331 → workbench-0.8.332}/applications/compound_explorer/supervisord.conf +0 -0
  90. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/aws_account_setup.py +0 -0
  91. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/aws_identity_check.py +0 -0
  92. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/build_ml_pipeline.py +0 -0
  93. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/.gitignore +0 -0
  94. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/README.md +0 -0
  95. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/app.py +0 -0
  96. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/cdk.json +0 -0
  97. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/compound_explorer/__init__.py +0 -0
  98. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/compound_explorer/compound_explorer_stack.py +0 -0
  99. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/compound_explorer/requirements.txt +0 -0
  100. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/event_bridge/Readme.md +0 -0
  101. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/README.md +0 -0
  102. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/app.py +0 -0
  103. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/cdk.json +0 -0
  104. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/requirements.txt +0 -0
  105. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/workbench_compute/__init__.py +0 -0
  106. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/workbench_compute/lambdas/batch_failure/handler.py +0 -0
  107. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/workbench_compute/lambdas/batch_trigger/handler.py +0 -0
  108. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_compute/workbench_compute/workbench_compute_stack.py +0 -0
  109. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/.gitignore +0 -0
  110. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/README.md +0 -0
  111. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/app.py +0 -0
  112. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/cdk.json +0 -0
  113. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/requirements-dev.txt +0 -0
  114. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/requirements.txt +0 -0
  115. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/source.bat +0 -0
  116. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/workbench_core/__init__.py +0 -0
  117. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_core/workbench_core/workbench_core_stack.py +0 -0
  118. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/.gitignore +0 -0
  119. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/README.md +0 -0
  120. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/app.py +0 -0
  121. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/cdk.json +0 -0
  122. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/requirements-dev.txt +0 -0
  123. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/requirements.txt +0 -0
  124. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/source.bat +0 -0
  125. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/workbench_dashboard_full/__init__.py +0 -0
  126. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_full/workbench_dashboard_full/workbench_dashboard_stack.py +0 -0
  127. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/.gitignore +0 -0
  128. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/README.md +0 -0
  129. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/app.py +0 -0
  130. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/cdk.json +0 -0
  131. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/requirements.txt +0 -0
  132. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/workbench_dashboard_lite/__init__.py +0 -0
  133. {workbench-0.8.331 → workbench-0.8.332}/aws_setup/workbench_dashboard_lite/workbench_dashboard_lite/workbench_dashboard_stack.py +0 -0
  134. {workbench-0.8.331 → workbench-0.8.332}/data/abalone.csv +0 -0
  135. {workbench-0.8.331 → workbench-0.8.332}/data/karate_graph.json +0 -0
  136. {workbench-0.8.331 → workbench-0.8.332}/data/public_data/README.md +0 -0
  137. {workbench-0.8.331 → workbench-0.8.332}/data/public_data/alignment_utils.py +0 -0
  138. {workbench-0.8.331 → workbench-0.8.332}/data/public_data/build_synthetic_multi_task.py +0 -0
  139. {workbench-0.8.331 → workbench-0.8.332}/data/public_data/descriptions.json +0 -0
  140. {workbench-0.8.331 → workbench-0.8.332}/data/public_data/pull_common.py +0 -0
  141. {workbench-0.8.331 → workbench-0.8.332}/data/public_data/pull_logd_data.py +0 -0
  142. {workbench-0.8.331 → workbench-0.8.332}/data/public_data/pull_logp_data.py +0 -0
  143. {workbench-0.8.331 → workbench-0.8.332}/data/public_data/requirements.txt +0 -0
  144. {workbench-0.8.331 → workbench-0.8.332}/data/public_data/upload_data.py +0 -0
  145. {workbench-0.8.331 → workbench-0.8.332}/data/test_data.csv +0 -0
  146. {workbench-0.8.331 → workbench-0.8.332}/data/test_data.json +0 -0
  147. {workbench-0.8.331 → workbench-0.8.332}/data/wine_dataset.csv +0 -0
  148. {workbench-0.8.331 → workbench-0.8.332}/deploy_docker.sh +0 -0
  149. {workbench-0.8.331 → workbench-0.8.332}/docs/admin/aws_service_limits.md +0 -0
  150. {workbench-0.8.331 → workbench-0.8.332}/docs/admin/base_docker_push.md +0 -0
  151. {workbench-0.8.331 → workbench-0.8.332}/docs/admin/dashboard_docker_push.md +0 -0
  152. {workbench-0.8.331 → workbench-0.8.332}/docs/admin/dashboard_s3_plugins.md +0 -0
  153. {workbench-0.8.331 → workbench-0.8.332}/docs/admin/explorer_docker_push.md +0 -0
  154. {workbench-0.8.331 → workbench-0.8.332}/docs/admin/images/dashboard_secret_click.png +0 -0
  155. {workbench-0.8.331 → workbench-0.8.332}/docs/admin/images/serverless_quotas.png +0 -0
  156. {workbench-0.8.331 → workbench-0.8.332}/docs/admin/images/status_showing_S3_path.png +0 -0
  157. {workbench-0.8.331 → workbench-0.8.332}/docs/admin/pypi_release.md +0 -0
  158. {workbench-0.8.331 → workbench-0.8.332}/docs/admin/workbench_docker_for_lambdas.md +0 -0
  159. {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/async_endpoint.md +0 -0
  160. {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/data_source.md +0 -0
  161. {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/df_store.md +0 -0
  162. {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/endpoint.md +0 -0
  163. {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/feature_set.md +0 -0
  164. {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/inference_cache.md +0 -0
  165. {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/meta.md +0 -0
  166. {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/model.md +0 -0
  167. {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/monitor.md +0 -0
  168. {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/overview.md +0 -0
  169. {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/parameter_store.md +0 -0
  170. {workbench-0.8.331 → workbench-0.8.332}/docs/api_classes/views.md +0 -0
  171. {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/aws_access_management.md +0 -0
  172. {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/aws_client_vpn.md +0 -0
  173. {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/aws_setup.md +0 -0
  174. {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/aws_tips_and_tricks.md +0 -0
  175. {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/core_stack.md +0 -0
  176. {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/dashboard_stack.md +0 -0
  177. {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/domain_cert_setup.md +0 -0
  178. {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/full_pipeline.md +0 -0
  179. {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/iam_assume_role.md +0 -0
  180. {workbench-0.8.331 → workbench-0.8.332}/docs/aws_setup/sso_assume_role.md +0 -0
  181. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/aws_endpoint_architecture.md +0 -0
  182. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/chemprop_multi_task.md +0 -0
  183. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/chemprop_shap.md +0 -0
  184. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/confusion_explorer.md +0 -0
  185. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/feature_endpoints.md +0 -0
  186. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/index.md +0 -0
  187. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/model_confidence.md +0 -0
  188. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/molecular_standardization.md +0 -0
  189. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/compound_etl.md +0 -0
  190. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/compound_explorer.md +0 -0
  191. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/eda.md +0 -0
  192. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/feature_importances.md +0 -0
  193. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/fun_with_endpoints.md +0 -0
  194. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/htg.md +0 -0
  195. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/model_monitoring.md +0 -0
  196. {workbench-0.8.331 → workbench-0.8.332}/docs/blogs/storage/residual_analysis.md +0 -0
  197. {workbench-0.8.331 → workbench-0.8.332}/docs/cached/cached_data_source.md +0 -0
  198. {workbench-0.8.331 → workbench-0.8.332}/docs/cached/cached_endpoint.md +0 -0
  199. {workbench-0.8.331 → workbench-0.8.332}/docs/cached/cached_feature_set.md +0 -0
  200. {workbench-0.8.331 → workbench-0.8.332}/docs/cached/cached_meta.md +0 -0
  201. {workbench-0.8.331 → workbench-0.8.332}/docs/cached/cached_model.md +0 -0
  202. {workbench-0.8.331 → workbench-0.8.332}/docs/cached/overview.md +0 -0
  203. {workbench-0.8.331 → workbench-0.8.332}/docs/chem_utils/index.md +0 -0
  204. {workbench-0.8.331 → workbench-0.8.332}/docs/cloudwatch/index.md +0 -0
  205. {workbench-0.8.331 → workbench-0.8.332}/docs/comparisons/workbench_vs_databricks.md +0 -0
  206. {workbench-0.8.331 → workbench-0.8.332}/docs/compound_explorer/tox21.md +0 -0
  207. {workbench-0.8.331 → workbench-0.8.332}/docs/compound_explorer/toxicity_modeling.md +0 -0
  208. {workbench-0.8.331 → workbench-0.8.332}/docs/confidence/index.md +0 -0
  209. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/artifact.md +0 -0
  210. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/async_endpoint_core.md +0 -0
  211. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/athena_source.md +0 -0
  212. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/data_source_abstract.md +0 -0
  213. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/endpoint_core.md +0 -0
  214. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/feature_set_core.md +0 -0
  215. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/model_core.md +0 -0
  216. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/monitor_core.md +0 -0
  217. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/artifacts/overview.md +0 -0
  218. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/overview.md +0 -0
  219. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/data_loaders_heavy.md +0 -0
  220. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/data_loaders_light.md +0 -0
  221. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/data_to_features.md +0 -0
  222. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/features_to_model.md +0 -0
  223. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/model_to_endpoint.md +0 -0
  224. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/overview.md +0 -0
  225. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/pandas_transforms.md +0 -0
  226. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/transforms/transform.md +0 -0
  227. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/views/computation_view.md +0 -0
  228. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/views/display_view.md +0 -0
  229. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/views/inference_view.md +0 -0
  230. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/views/overview.md +0 -0
  231. {workbench-0.8.331 → workbench-0.8.332}/docs/core_classes/views/training_view.md +0 -0
  232. {workbench-0.8.331 → workbench-0.8.332}/docs/data_algorithms/dataframes/overview.md +0 -0
  233. {workbench-0.8.331 → workbench-0.8.332}/docs/data_algorithms/graphs/overview.md +0 -0
  234. {workbench-0.8.331 → workbench-0.8.332}/docs/data_algorithms/overview.md +0 -0
  235. {workbench-0.8.331 → workbench-0.8.332}/docs/data_algorithms/spark/overview.md +0 -0
  236. {workbench-0.8.331 → workbench-0.8.332}/docs/data_algorithms/sql/overview.md +0 -0
  237. {workbench-0.8.331 → workbench-0.8.332}/docs/enterprise/index.md +0 -0
  238. {workbench-0.8.331 → workbench-0.8.332}/docs/enterprise/private_saas.md +0 -0
  239. {workbench-0.8.331 → workbench-0.8.332}/docs/enterprise/project_branding.md +0 -0
  240. {workbench-0.8.331 → workbench-0.8.332}/docs/enterprise/themes.md +0 -0
  241. {workbench-0.8.331 → workbench-0.8.332}/docs/getting_started/index.md +0 -0
  242. {workbench-0.8.331 → workbench-0.8.332}/docs/glue/index.md +0 -0
  243. {workbench-0.8.331 → workbench-0.8.332}/docs/images/3d_descriptor_pipeline.svg +0 -0
  244. {workbench-0.8.331 → workbench-0.8.332}/docs/images/big_spider.png +0 -0
  245. {workbench-0.8.331 → workbench-0.8.332}/docs/images/chemprop_logd.png +0 -0
  246. {workbench-0.8.331 → workbench-0.8.332}/docs/images/chemprop_mt_expansion.svg +0 -0
  247. {workbench-0.8.331 → workbench-0.8.332}/docs/images/chemprop_mt_transfer.svg +0 -0
  248. {workbench-0.8.331 → workbench-0.8.332}/docs/images/chemprop_overview.svg +0 -0
  249. {workbench-0.8.331 → workbench-0.8.332}/docs/images/chemprop_shap_logd.png +0 -0
  250. {workbench-0.8.331 → workbench-0.8.332}/docs/images/chemprop_shap_pipeline.svg +0 -0
  251. {workbench-0.8.331 → workbench-0.8.332}/docs/images/confidence_percentile.svg +0 -0
  252. {workbench-0.8.331 → workbench-0.8.332}/docs/images/conformal_calibration.svg +0 -0
  253. {workbench-0.8.331 → workbench-0.8.332}/docs/images/confusion_explorer/drilldown_on_errors.png +0 -0
  254. {workbench-0.8.331 → workbench-0.8.332}/docs/images/confusion_explorer/high_confidence.png +0 -0
  255. {workbench-0.8.331 → workbench-0.8.332}/docs/images/confusion_explorer/overview.png +0 -0
  256. {workbench-0.8.331 → workbench-0.8.332}/docs/images/default_stack_flow.svg +0 -0
  257. {workbench-0.8.331 → workbench-0.8.332}/docs/images/endpoint_architecture.png +0 -0
  258. {workbench-0.8.331 → workbench-0.8.332}/docs/images/ensemble_disagreement.svg +0 -0
  259. {workbench-0.8.331 → workbench-0.8.332}/docs/images/graph_representation.png +0 -0
  260. {workbench-0.8.331 → workbench-0.8.332}/docs/images/powered_aws_dark_blue.png +0 -0
  261. {workbench-0.8.331 → workbench-0.8.332}/docs/images/powered_aws_transparent.png +0 -0
  262. {workbench-0.8.331 → workbench-0.8.332}/docs/images/powered_aws_white.png +0 -0
  263. {workbench-0.8.331 → workbench-0.8.332}/docs/images/powered_aws_with_tm_grey.png +0 -0
  264. {workbench-0.8.331 → workbench-0.8.332}/docs/images/scp.png +0 -0
  265. {workbench-0.8.331 → workbench-0.8.332}/docs/images/scp_labs.png +0 -0
  266. {workbench-0.8.331 → workbench-0.8.332}/docs/images/small_spider.png +0 -0
  267. {workbench-0.8.331 → workbench-0.8.332}/docs/images/uq_conf_residual.png +0 -0
  268. {workbench-0.8.331 → workbench-0.8.332}/docs/images/uq_pred_scatter.png +0 -0
  269. {workbench-0.8.331 → workbench-0.8.332}/docs/images/workbench_async_stack_flow.svg +0 -0
  270. {workbench-0.8.331 → workbench-0.8.332}/docs/images/workbench_concepts.png +0 -0
  271. {workbench-0.8.331 → workbench-0.8.332}/docs/images/workbench_stack_flow.svg +0 -0
  272. {workbench-0.8.331 → workbench-0.8.332}/docs/index.md +0 -0
  273. {workbench-0.8.331 → workbench-0.8.332}/docs/javascripts/mathjax.js +0 -0
  274. {workbench-0.8.331 → workbench-0.8.332}/docs/lambda_layer/index.md +0 -0
  275. {workbench-0.8.331 → workbench-0.8.332}/docs/misc/faq.md +0 -0
  276. {workbench-0.8.331 → workbench-0.8.332}/docs/misc/general_info.md +0 -0
  277. {workbench-0.8.331 → workbench-0.8.332}/docs/misc/scp_consulting.md +0 -0
  278. {workbench-0.8.331 → workbench-0.8.332}/docs/misc/workbench_classes_concepts.md +0 -0
  279. {workbench-0.8.331 → workbench-0.8.332}/docs/model_utils/index.md +0 -0
  280. {workbench-0.8.331 → workbench-0.8.332}/docs/models/chemprop_models.md +0 -0
  281. {workbench-0.8.331 → workbench-0.8.332}/docs/models/fingerprint_models.md +0 -0
  282. {workbench-0.8.331 → workbench-0.8.332}/docs/models/images/chemprop_decision_tree.svg +0 -0
  283. {workbench-0.8.331 → workbench-0.8.332}/docs/models/images/confidence.jpg +0 -0
  284. {workbench-0.8.331 → workbench-0.8.332}/docs/models/images/hybrid_architecture.svg +0 -0
  285. {workbench-0.8.331 → workbench-0.8.332}/docs/models/index.md +0 -0
  286. {workbench-0.8.331 → workbench-0.8.332}/docs/models/meta_endpoints.md +0 -0
  287. {workbench-0.8.331 → workbench-0.8.332}/docs/models/pytorch_models.md +0 -0
  288. {workbench-0.8.331 → workbench-0.8.332}/docs/models/sklearn_models.md +0 -0
  289. {workbench-0.8.331 → workbench-0.8.332}/docs/models/xgboost_models.md +0 -0
  290. {workbench-0.8.331 → workbench-0.8.332}/docs/plugins/index.md +0 -0
  291. {workbench-0.8.331 → workbench-0.8.332}/docs/presentations/index.md +0 -0
  292. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_106.md +0 -0
  293. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_158.md +0 -0
  294. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_50.md +0 -0
  295. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_55.md +0 -0
  296. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_58.md +0 -0
  297. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_60.md +0 -0
  298. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_71.md +0 -0
  299. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_74.md +0 -0
  300. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/0_8_78.md +0 -0
  301. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_7_8.md +0 -0
  302. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_11.md +0 -0
  303. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_20.md +0 -0
  304. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_22.md +0 -0
  305. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_23.md +0 -0
  306. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_27.md +0 -0
  307. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_29.md +0 -0
  308. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_33.md +0 -0
  309. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_35.md +0 -0
  310. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_36.md +0 -0
  311. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_39.md +0 -0
  312. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_42.md +0 -0
  313. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_46.md +0 -0
  314. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_6.md +0 -0
  315. {workbench-0.8.331 → workbench-0.8.332}/docs/release_notes/archived/0_8_8.md +0 -0
  316. {workbench-0.8.331 → workbench-0.8.332}/docs/repl/index.md +0 -0
  317. {workbench-0.8.331 → workbench-0.8.332}/docs/road_maps/0_9_0.md +0 -0
  318. {workbench-0.8.331 → workbench-0.8.332}/docs/road_maps/0_9_5.md +0 -0
  319. {workbench-0.8.331 → workbench-0.8.332}/docs/stylesheets/extra.css +0 -0
  320. {workbench-0.8.331 → workbench-0.8.332}/docs/themes/details.md +0 -0
  321. {workbench-0.8.331 → workbench-0.8.332}/docs/themes/index.md +0 -0
  322. {workbench-0.8.331 → workbench-0.8.332}/examples/ag-grid/hello_world.py +0 -0
  323. {workbench-0.8.331 → workbench-0.8.332}/examples/chem_utils/tautomerize_smiles.py +0 -0
  324. {workbench-0.8.331 → workbench-0.8.332}/examples/datasource/datasource_from_df.py +0 -0
  325. {workbench-0.8.331 → workbench-0.8.332}/examples/datasource/datasource_from_s3.py +0 -0
  326. {workbench-0.8.331 → workbench-0.8.332}/examples/datasource/datasource_query.py +0 -0
  327. {workbench-0.8.331 → workbench-0.8.332}/examples/datasource/datasource_stats.py +0 -0
  328. {workbench-0.8.331 → workbench-0.8.332}/examples/datasource/datasource_to_featureset.py +0 -0
  329. {workbench-0.8.331 → workbench-0.8.332}/examples/endpoint/endpoint_details.py +0 -0
  330. {workbench-0.8.331 → workbench-0.8.332}/examples/endpoint/endpoint_inference.py +0 -0
  331. {workbench-0.8.331 → workbench-0.8.332}/examples/endpoint/endpoint_metrics.py +0 -0
  332. {workbench-0.8.331 → workbench-0.8.332}/examples/featureset/featureset_eda.py +0 -0
  333. {workbench-0.8.331 → workbench-0.8.332}/examples/featureset/featureset_query.py +0 -0
  334. {workbench-0.8.331 → workbench-0.8.332}/examples/full_ml_pipeline.py +0 -0
  335. {workbench-0.8.331 → workbench-0.8.332}/examples/glue_jobs/glue_example_1.py +0 -0
  336. {workbench-0.8.331 → workbench-0.8.332}/examples/glue_jobs/glue_example_2.py +0 -0
  337. {workbench-0.8.331 → workbench-0.8.332}/examples/glue_jobs/glue_example_3.py +0 -0
  338. {workbench-0.8.331 → workbench-0.8.332}/examples/glue_jobs/glue_launcher_examples/example_1.py +0 -0
  339. {workbench-0.8.331 → workbench-0.8.332}/examples/glue_jobs/glue_launcher_examples/example_2.py +0 -0
  340. {workbench-0.8.331 → workbench-0.8.332}/examples/meta/meta_list_endpoints.py +0 -0
  341. {workbench-0.8.331 → workbench-0.8.332}/examples/meta/meta_list_models.py +0 -0
  342. {workbench-0.8.331 → workbench-0.8.332}/examples/meta/meta_model_metrics.py +0 -0
  343. {workbench-0.8.331 → workbench-0.8.332}/examples/ml_pipelines/list_models.py +0 -0
  344. {workbench-0.8.331 → workbench-0.8.332}/examples/ml_pipelines/wine_classifier.py +0 -0
  345. {workbench-0.8.331 → workbench-0.8.332}/examples/model_utils/model_metrics.py +0 -0
  346. {workbench-0.8.331 → workbench-0.8.332}/examples/model_utils/model_to_endpoint.py +0 -0
  347. {workbench-0.8.331 → workbench-0.8.332}/examples/model_utils/onboard_model.py +0 -0
  348. {workbench-0.8.331 → workbench-0.8.332}/examples/models/chemprop.py +0 -0
  349. {workbench-0.8.331 → workbench-0.8.332}/examples/models/chemprop_foundation.py +0 -0
  350. {workbench-0.8.331 → workbench-0.8.332}/examples/models/chemprop_logp_logd_synthetic.py +0 -0
  351. {workbench-0.8.331 → workbench-0.8.332}/examples/models/chemprop_logp_logd_tiered.py +0 -0
  352. {workbench-0.8.331 → workbench-0.8.332}/examples/models/custom_model.py +0 -0
  353. {workbench-0.8.331 → workbench-0.8.332}/examples/models/dbscan.py +0 -0
  354. {workbench-0.8.331 → workbench-0.8.332}/examples/models/knn.py +0 -0
  355. {workbench-0.8.331 → workbench-0.8.332}/examples/models/meta_endpoint.py +0 -0
  356. {workbench-0.8.331 → workbench-0.8.332}/examples/models/pytorch.py +0 -0
  357. {workbench-0.8.331 → workbench-0.8.332}/examples/models/random_forest.py +0 -0
  358. {workbench-0.8.331 → workbench-0.8.332}/examples/models/smiles_to_fingerprints.py +0 -0
  359. {workbench-0.8.331 → workbench-0.8.332}/examples/models/smiles_to_md_v1.py +0 -0
  360. {workbench-0.8.331 → workbench-0.8.332}/examples/models/split_comparison_chemprop.py +0 -0
  361. {workbench-0.8.331 → workbench-0.8.332}/examples/models/split_comparison_pytorch.py +0 -0
  362. {workbench-0.8.331 → workbench-0.8.332}/examples/models/split_comparison_xgb.py +0 -0
  363. {workbench-0.8.331 → workbench-0.8.332}/examples/models/uq/bayesian_ridge.py +0 -0
  364. {workbench-0.8.331 → workbench-0.8.332}/examples/models/uq/ensemble_xgb.py +0 -0
  365. {workbench-0.8.331 → workbench-0.8.332}/examples/models/uq/gaussian_process.py +0 -0
  366. {workbench-0.8.331 → workbench-0.8.332}/examples/models/uq/meta_uq.py +0 -0
  367. {workbench-0.8.331 → workbench-0.8.332}/examples/models/uq/ngboost.py +0 -0
  368. {workbench-0.8.331 → workbench-0.8.332}/examples/models/uq/quant_xgb.py +0 -0
  369. {workbench-0.8.331 → workbench-0.8.332}/examples/models/xgb_model.py +0 -0
  370. {workbench-0.8.331 → workbench-0.8.332}/examples/monitor/monitor_setup.py +0 -0
  371. {workbench-0.8.331 → workbench-0.8.332}/examples/monitor/monitor_usage.py +0 -0
  372. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/branding/Readme.md +0 -0
  373. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/branding/scp.json +0 -0
  374. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/components/custom_plugin.py +0 -0
  375. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/components/endpoint_plugin.py +0 -0
  376. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/components/endpoint_turbo.py +0 -0
  377. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/components/model_markdown.py +0 -0
  378. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/components/model_plugin.py +0 -0
  379. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/packages/my_plugin_utils/__init__.py +0 -0
  380. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/packages/my_plugin_utils/assets/foo.json +0 -0
  381. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/packages/my_plugin_utils/cool_stuff.py +0 -0
  382. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/pages/plugin_page_1.py +0 -0
  383. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/pages/plugin_page_2.py +0 -0
  384. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/pages/plugin_page_3.py +0 -0
  385. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/templates/Readme.md +0 -0
  386. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/views/model_plugin_view.py +0 -0
  387. {workbench-0.8.331 → workbench-0.8.332}/examples/plugins/views/my_view_plugin.py +0 -0
  388. {workbench-0.8.331 → workbench-0.8.332}/experiments/chem_info/bulk_sims.py +0 -0
  389. {workbench-0.8.331 → workbench-0.8.332}/experiments/chem_info/knn_sims.py +0 -0
  390. {workbench-0.8.331 → workbench-0.8.332}/experiments/cleanlab_bug_report.py +0 -0
  391. {workbench-0.8.331 → workbench-0.8.332}/experiments/confidence_roc_curve.py +0 -0
  392. {workbench-0.8.331 → workbench-0.8.332}/experiments/coverage_probability.py +0 -0
  393. {workbench-0.8.331 → workbench-0.8.332}/experiments/db_scan_test.py +0 -0
  394. {workbench-0.8.331 → workbench-0.8.332}/experiments/log_testing.py +0 -0
  395. {workbench-0.8.331 → workbench-0.8.332}/experiments/networkx_id.py +0 -0
  396. {workbench-0.8.331 → workbench-0.8.332}/experiments/prediction_intervals.py +0 -0
  397. {workbench-0.8.331 → workbench-0.8.332}/experiments/residual_analysis.py +0 -0
  398. {workbench-0.8.331 → workbench-0.8.332}/experiments/rocauc_testing.py +0 -0
  399. {workbench-0.8.331 → workbench-0.8.332}/experiments/scatter_zoom_issue.py +0 -0
  400. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/README.md +0 -0
  401. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/_common.py +0 -0
  402. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/molecular_utils/mol_descriptors.py +0 -0
  403. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/molecular_utils/mol_standardize.py +0 -0
  404. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/requirements.txt +0 -0
  405. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/smiles_to_2d_keep_salts_model_script.py +0 -0
  406. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/smiles_to_2d_model_script.py +0 -0
  407. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/smiles_to_3d_fast_model_script.py +0 -0
  408. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/model_scripts/smiles_to_3d_full_model_script.py +0 -0
  409. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/smiles_to_2d_3d_v1.py +0 -0
  410. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/smiles_to_2d_keep_salts_v1.py +0 -0
  411. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/smiles_to_2d_v1.py +0 -0
  412. {workbench-0.8.331 → workbench-0.8.332}/feature_endpoints/smiles_to_3d_fast_v1.py +0 -0
  413. {workbench-0.8.331 → workbench-0.8.332}/glue_jobs/create_glue_workflow_with_trigger.py +0 -0
  414. {workbench-0.8.331 → workbench-0.8.332}/glue_jobs/example_glue_job.py +0 -0
  415. {workbench-0.8.331 → workbench-0.8.332}/glue_jobs/glue_mixed_case.py +0 -0
  416. {workbench-0.8.331 → workbench-0.8.332}/mkdocs.yml +0 -0
  417. {workbench-0.8.331 → workbench-0.8.332}/ml_pipelines/hyper_uq.py +0 -0
  418. {workbench-0.8.331 → workbench-0.8.332}/notebooks/Inference_On_Legacy_Models.ipynb +0 -0
  419. {workbench-0.8.331 → workbench-0.8.332}/notebooks/ML_Pipeline_with_Workbench.ipynb +0 -0
  420. {workbench-0.8.331 → workbench-0.8.332}/notebooks/ML_Pipeline_with_Workbench_2.ipynb +0 -0
  421. {workbench-0.8.331 → workbench-0.8.332}/notebooks/Outliers_in_Workbench.ipynb +0 -0
  422. {workbench-0.8.331 → workbench-0.8.332}/notebooks/Regression_Confidence_Experiments.ipynb +0 -0
  423. {workbench-0.8.331 → workbench-0.8.332}/notebooks/Residual_Analysis.ipynb +0 -0
  424. {workbench-0.8.331 → workbench-0.8.332}/notebooks/images/athena_query_aqsol.png +0 -0
  425. {workbench-0.8.331 → workbench-0.8.332}/notebooks/images/aws_dashboard_aqsol.png +0 -0
  426. {workbench-0.8.331 → workbench-0.8.332}/notebooks/images/dashboard_aqsol_features.png +0 -0
  427. {workbench-0.8.331 → workbench-0.8.332}/notebooks/images/model_screenshot.png +0 -0
  428. {workbench-0.8.331 → workbench-0.8.332}/notebooks/images/scp_labs.png +0 -0
  429. {workbench-0.8.331 → workbench-0.8.332}/open_admet/.gitignore +0 -0
  430. {workbench-0.8.331 → workbench-0.8.332}/open_admet/README.md +0 -0
  431. {workbench-0.8.331 → workbench-0.8.332}/open_admet/all_models.py +0 -0
  432. {workbench-0.8.331 → workbench-0.8.332}/open_admet/hello_world.py +0 -0
  433. {workbench-0.8.331 → workbench-0.8.332}/open_admet/images/confidence.jpg +0 -0
  434. {workbench-0.8.331 → workbench-0.8.332}/open_admet/images/open_admet_model.jpg +0 -0
  435. {workbench-0.8.331 → workbench-0.8.332}/open_admet/load_data.py +0 -0
  436. {workbench-0.8.331 → workbench-0.8.332}/open_admet/model_metrics.md +0 -0
  437. {workbench-0.8.331 → workbench-0.8.332}/open_admet/run_inference.py +0 -0
  438. {workbench-0.8.331 → workbench-0.8.332}/open_admet/utils/compute_model_metrics.py +0 -0
  439. {workbench-0.8.331 → workbench-0.8.332}/open_admet_pxr/all_models.py +0 -0
  440. {workbench-0.8.331 → workbench-0.8.332}/open_admet_pxr/create_feature_sets.py +0 -0
  441. {workbench-0.8.331 → workbench-0.8.332}/open_admet_pxr/load_data.py +0 -0
  442. {workbench-0.8.331 → workbench-0.8.332}/open_admet_pxr/pytorch_experiments.py +0 -0
  443. {workbench-0.8.331 → workbench-0.8.332}/presentations/README.md +0 -0
  444. {workbench-0.8.331 → workbench-0.8.332}/pyproject.toml +0 -0
  445. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/Readme.md +0 -0
  446. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/base/inference/Dockerfile +0 -0
  447. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/base/training/Dockerfile +0 -0
  448. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/build_deploy.sh +0 -0
  449. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/ml_pipelines/ml_pipeline_runner.py +0 -0
  450. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/ml_pipelines/requirements.txt +0 -0
  451. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/pytorch_chem/inference/Dockerfile +0 -0
  452. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/pytorch_chem/inference/requirements.txt +0 -0
  453. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/pytorch_chem/training/Dockerfile +0 -0
  454. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/pytorch_chem/training/requirements.txt +0 -0
  455. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/shared/main.py +0 -0
  456. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/shared/serve +0 -0
  457. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/tests/data/abalone_sm.csv +0 -0
  458. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/tests/example_model_script.py +0 -0
  459. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/tests/run_tests.sh +0 -0
  460. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/tests/test_inference.py +0 -0
  461. {workbench-0.8.331 → workbench-0.8.332}/sagemaker_images/tests/test_training.py +0 -0
  462. {workbench-0.8.331 → workbench-0.8.332}/scripts/active_logs.sh +0 -0
  463. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/async_typical_usage.py +0 -0
  464. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/athena_ddl_mixed_case.py +0 -0
  465. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/capture_check.py +0 -0
  466. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/check_all_glue_tables.py +0 -0
  467. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/compact_inference_cache.py +0 -0
  468. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/delete_invalid_views.py +0 -0
  469. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/delete_redis_keys.py +0 -0
  470. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/find_orphan_models.py +0 -0
  471. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/list_datacatalog.py +0 -0
  472. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/migration/copy_glue_database.py +0 -0
  473. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/migration/delete_sageworks_glue_database.sh +0 -0
  474. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/migration/ds_migrate.py +0 -0
  475. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/migration/endpoint_migrate.py +0 -0
  476. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/migration/fs_migrate.py +0 -0
  477. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/migration/model_migrate.py +0 -0
  478. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/populate_3d_perf_reference_compounds.py +0 -0
  479. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/populate_3d_reference_compounds.py +0 -0
  480. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/populate_complexity_skip_reference_compounds.py +0 -0
  481. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/populate_corner_cases_reference_compounds.py +0 -0
  482. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/populate_flexibility_reference_compounds.py +0 -0
  483. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/populate_standardization_reference_compounds.py +0 -0
  484. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/profile_3d_fast.py +0 -0
  485. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/pull_image_digest.py +0 -0
  486. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/redis_reaper.py +0 -0
  487. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/reference_compounds_common.py +0 -0
  488. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/smiles_nan_investigation.py +0 -0
  489. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/spam_list_tags.py +0 -0
  490. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/storage/convert_training_views.py +0 -0
  491. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/storage/migrate_data_source_via_df.py +0 -0
  492. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/storage/migrate_ds_meta.py +0 -0
  493. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/test_3d_descriptors.py +0 -0
  494. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/test_3d_endpoint.py +0 -0
  495. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/test_batch_job_failure.py +0 -0
  496. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/test_no_workbench_config.py +0 -0
  497. {workbench-0.8.331 → workbench-0.8.332}/scripts/admin/verify_async_autoscaling.py +0 -0
  498. {workbench-0.8.331 → workbench-0.8.332}/scripts/ag_table_row_selection.py +0 -0
  499. {workbench-0.8.331 → workbench-0.8.332}/scripts/compare_dataframes.py +0 -0
  500. {workbench-0.8.331 → workbench-0.8.332}/scripts/compare_model_packages.py +0 -0
  501. {workbench-0.8.331 → workbench-0.8.332}/scripts/delete_data_capture.py +0 -0
  502. {workbench-0.8.331 → workbench-0.8.332}/scripts/endpoint_timing.py +0 -0
  503. {workbench-0.8.331 → workbench-0.8.332}/scripts/get_tags.py +0 -0
  504. {workbench-0.8.331 → workbench-0.8.332}/scripts/instantiation_timings.py +0 -0
  505. {workbench-0.8.331 → workbench-0.8.332}/scripts/llm_deploys/deepseek_deploy.py +0 -0
  506. {workbench-0.8.331 → workbench-0.8.332}/scripts/model_cache_refresh.py +0 -0
  507. {workbench-0.8.331 → workbench-0.8.332}/scripts/model_endpoint_sanity_check.py +0 -0
  508. {workbench-0.8.331 → workbench-0.8.332}/scripts/monitor_event_bridge.py +0 -0
  509. {workbench-0.8.331 → workbench-0.8.332}/scripts/onboard_endpoints.py +0 -0
  510. {workbench-0.8.331 → workbench-0.8.332}/scripts/onboard_models.py +0 -0
  511. {workbench-0.8.331 → workbench-0.8.332}/scripts/pubchem/pubchem_example.py +0 -0
  512. {workbench-0.8.331 → workbench-0.8.332}/scripts/pubchem/pubchem_query.py +0 -0
  513. {workbench-0.8.331 → workbench-0.8.332}/scripts/pubchem/pubchem_query_with_cid.py +0 -0
  514. {workbench-0.8.331 → workbench-0.8.332}/scripts/sagemaker_feature_group_issue.py +0 -0
  515. {workbench-0.8.331 → workbench-0.8.332}/scripts/sagemaker_pipeline_model_endpoint.py +0 -0
  516. {workbench-0.8.331 → workbench-0.8.332}/scripts/seaborn_to_plotly.py +0 -0
  517. {workbench-0.8.331 → workbench-0.8.332}/scripts/storage/dns_data_to_features.py +0 -0
  518. {workbench-0.8.331 → workbench-0.8.332}/scripts/storage/generate_jsonl_data.py +0 -0
  519. {workbench-0.8.331 → workbench-0.8.332}/scripts/test_feature_resolution.py +0 -0
  520. {workbench-0.8.331 → workbench-0.8.332}/scripts/test_feature_set_creation.py +0 -0
  521. {workbench-0.8.331 → workbench-0.8.332}/scripts/tox21/test_tox_heuristic.py +0 -0
  522. {workbench-0.8.331 → workbench-0.8.332}/scripts/tox21/tox21_to_df_store.py +0 -0
  523. {workbench-0.8.331 → workbench-0.8.332}/setup.cfg +0 -0
  524. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/__init__.py +0 -0
  525. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/__init__.py +0 -0
  526. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/Readme.md +0 -0
  527. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/data_source_eda.py +0 -0
  528. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/feature_space_proximity.py +0 -0
  529. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/fingerprint_proximity.py +0 -0
  530. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/projection_2d.py +0 -0
  531. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/proximity.py +0 -0
  532. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/smart_aggregator.py +0 -0
  533. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/storage/aggregation.py +0 -0
  534. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/storage/feature_resolution.py +0 -0
  535. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/storage/feature_spider.py +0 -0
  536. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/storage/residuals_calculator.py +0 -0
  537. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/storage/row_tagger.py +0 -0
  538. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/dataframe/storage/target_gradients.py +0 -0
  539. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/graph/__init__.py +0 -0
  540. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/graph/heavy/Readme.md +0 -0
  541. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/graph/light/Readme.md +0 -0
  542. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/graph/light/__init__.py +0 -0
  543. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/graph/light/laplacian_smoothness.py +0 -0
  544. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/graph/light/proximity_graph.py +0 -0
  545. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/models/cleanlab_model.py +0 -0
  546. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/models/noise_model.py +0 -0
  547. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/spark/Readme.md +0 -0
  548. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/Readme.md +0 -0
  549. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/__init__.py +0 -0
  550. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/column_stats.py +0 -0
  551. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/correlations.py +0 -0
  552. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/descriptive_stats.py +0 -0
  553. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/outliers.py +0 -0
  554. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/sample_rows.py +0 -0
  555. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/algorithms/sql/value_counts.py +0 -0
  556. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/__init__.py +0 -0
  557. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/compound.py +0 -0
  558. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/data_source.py +0 -0
  559. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/df_store.py +0 -0
  560. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/feature_set.py +0 -0
  561. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/graph_store.py +0 -0
  562. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/meta.py +0 -0
  563. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/monitor.py +0 -0
  564. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/parameter_store.py +0 -0
  565. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/api/public_data.py +0 -0
  566. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/__init__.py +0 -0
  567. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/cached_artifact_mixin.py +0 -0
  568. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/cached_data_source.py +0 -0
  569. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/cached_endpoint.py +0 -0
  570. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/cached_feature_set.py +0 -0
  571. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/cached_meta.py +0 -0
  572. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/cached/cached_model.py +0 -0
  573. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/__init__.py +0 -0
  574. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/__init__.py +0 -0
  575. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/artifact.py +0 -0
  576. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/athena_source.py +0 -0
  577. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/data_capture_core.py +0 -0
  578. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/data_source_abstract.py +0 -0
  579. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/data_source_factory.py +0 -0
  580. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/df_store_core.py +0 -0
  581. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/endpoint_core.py +0 -0
  582. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/feature_set_core.py +0 -0
  583. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/model_core.py +0 -0
  584. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/artifacts/monitor_core.py +0 -0
  585. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/README.md +0 -0
  586. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/aws_account_clamp.py +0 -0
  587. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/aws_graph_store.py +0 -0
  588. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/aws_meta.py +0 -0
  589. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/aws_secrets_manager.py +0 -0
  590. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/aws_session.py +0 -0
  591. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/aws/cache_dataframe.py +0 -0
  592. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/azure/README.md +0 -0
  593. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/cloud_meta.py +0 -0
  594. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/cloud_platform/gcp/README.md +0 -0
  595. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/pipelines/__init__.py +0 -0
  596. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/pipelines/pipeline_meta.py +0 -0
  597. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/Readme.md +0 -0
  598. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/__init__.py +0 -0
  599. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/__init__.py +0 -0
  600. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/heavy/__init__.py +0 -0
  601. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/heavy/s3_heavy_to_data_source.py +0 -0
  602. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/light/__init__.py +0 -0
  603. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/light/csv_to_data_source.py +0 -0
  604. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/light/json_to_data_source.py +0 -0
  605. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_loaders/light/s3_to_data_source_light.py +0 -0
  606. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/__init__.py +0 -0
  607. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/heavy/__init__.py +0 -0
  608. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/heavy/emr/Readme.md +0 -0
  609. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/heavy/glue/Readme.md +0 -0
  610. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/light/__init__.py +0 -0
  611. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/light/clean_data.py +0 -0
  612. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_data/light/data_to_data_light.py +0 -0
  613. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/__init__.py +0 -0
  614. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/heavy/__init__.py +0 -0
  615. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/heavy/chunk/__init__.py +0 -0
  616. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/heavy/chunk/data_to_features_chunk.py +0 -0
  617. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/heavy/emr/Readme.md +0 -0
  618. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/heavy/glue/Readme.md +0 -0
  619. {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
  620. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/light/__init__.py +0 -0
  621. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/light/data_to_features_light.py +0 -0
  622. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/data_to_features/light/molecular_descriptors.py +0 -0
  623. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/features_to_features/__init__.py +0 -0
  624. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/features_to_features/heavy/emr/Readme.md +0 -0
  625. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/features_to_features/heavy/glue/Readme.md +0 -0
  626. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/features_to_model/__init__.py +0 -0
  627. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/features_to_model/features_to_model.py +0 -0
  628. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/model_to_endpoint/__init__.py +0 -0
  629. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/pandas_transforms/__init__.py +0 -0
  630. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/pandas_transforms/data_to_pandas.py +0 -0
  631. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/pandas_transforms/features_to_pandas.py +0 -0
  632. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/pandas_transforms/pandas_to_data.py +0 -0
  633. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/pandas_transforms/pandas_to_features.py +0 -0
  634. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/pandas_transforms/pandas_to_features_chunked.py +0 -0
  635. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/transforms/transform.py +0 -0
  636. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/__init__.py +0 -0
  637. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/column_subset_view.py +0 -0
  638. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/computation_view.py +0 -0
  639. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/create_view.py +0 -0
  640. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/display_view.py +0 -0
  641. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/inference_view.py +0 -0
  642. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/pandas_to_view.py +0 -0
  643. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/storage/mdq_view.py +0 -0
  644. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/training_view.py +0 -0
  645. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/view.py +0 -0
  646. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/core/views/view_utils.py +0 -0
  647. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_script_utils/chemprop_shap_utils.py +0 -0
  648. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_script_utils/ensemble_utils.py +0 -0
  649. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_script_utils/model_script_utils.py +0 -0
  650. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_script_utils/pytorch_utils.py +0 -0
  651. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_script_utils/training_harness.py +0 -0
  652. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_script_utils/uq_harness.py +0 -0
  653. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/chemprop/chemprop_shap_utils.py +0 -0
  654. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/chemprop/model_script_utils.py +0 -0
  655. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/chemprop/requirements.txt +0 -0
  656. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/chemprop/uq_harness.py +0 -0
  657. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/Readme.md +0 -0
  658. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/fingerprints.py +0 -0
  659. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/mol_descriptors.py +0 -0
  660. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/mol_standardize.py +0 -0
  661. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/molecular_descriptors.py +0 -0
  662. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/morgan_fingerprints.py +0 -0
  663. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/chem_info/requirements.txt +0 -0
  664. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/network_security/Readme.md +0 -0
  665. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/proximity/Readme.md +0 -0
  666. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/proximity/feature_space_proximity.py +0 -0
  667. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/proximity/feature_space_proximity.template +0 -0
  668. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/proximity/requirements.txt +0 -0
  669. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/Readme.md +0 -0
  670. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/bayesian_ridge.template +0 -0
  671. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/ensemble_xgb.template +0 -0
  672. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/feature_space_proximity.py +0 -0
  673. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/gaussian_process.template +0 -0
  674. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/ngboost.template +0 -0
  675. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_models/uq_models/requirements.txt +0 -0
  676. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_script_example/custom_model_script.py +0 -0
  677. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/custom_script_example/requirements.txt +0 -0
  678. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/meta_endpoint/aggregation_nodes.py +0 -0
  679. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/meta_endpoint/ensemble_utils.py +0 -0
  680. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/meta_endpoint/meta_endpoint.template +0 -0
  681. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/pytorch_model/model_script_utils.py +0 -0
  682. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/pytorch_model/pytorch.template +0 -0
  683. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/pytorch_model/pytorch_utils.py +0 -0
  684. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/pytorch_model/requirements.txt +0 -0
  685. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/pytorch_model/uq_harness.py +0 -0
  686. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/scikit_learn/requirements.txt +0 -0
  687. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/scikit_learn/scikit_learn.template +0 -0
  688. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/script_generation.py +0 -0
  689. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/xgb_model/model_script_utils.py +0 -0
  690. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/xgb_model/requirements.txt +0 -0
  691. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/xgb_model/uq_harness.py +0 -0
  692. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/model_scripts/xgb_model/xgb_model.template +0 -0
  693. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/repl/__init__.py +0 -0
  694. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/repl/workbench_shell.py +0 -0
  695. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/resources/open_source_api.key +0 -0
  696. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/resources/signature_verify_pub.pem +0 -0
  697. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/check_double_bond_stereo.py +0 -0
  698. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/df_store.py +0 -0
  699. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/endpoint_test.py +0 -0
  700. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/ensemble_sim.py +0 -0
  701. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/glue_launcher.py +0 -0
  702. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/lambda_test.py +0 -0
  703. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/ml_pipeline_batch.py +0 -0
  704. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/ml_pipeline_launcher.py +0 -0
  705. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/ml_pipeline_sqs.py +0 -0
  706. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/monitor_cloud_watch.py +0 -0
  707. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/redis_expire.py +0 -0
  708. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/redis_report.py +0 -0
  709. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/show_config.py +0 -0
  710. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/scripts/training_test.py +0 -0
  711. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/dark/base_css.url +0 -0
  712. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/dark/custom.css +0 -0
  713. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/dark/plotly.json +0 -0
  714. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/light/base_css.url +0 -0
  715. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/light/branding.json +0 -0
  716. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/light/custom.css +0 -0
  717. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/light/plotly.json +0 -0
  718. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/midnight_blue/base_css.url +0 -0
  719. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/midnight_blue/branding.json +0 -0
  720. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/midnight_blue/custom.css +0 -0
  721. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/themes/midnight_blue/plotly.json +0 -0
  722. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/__init__.py +0 -0
  723. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/aggregation_nodes.py +0 -0
  724. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/ai_compound_generator.py +0 -0
  725. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/ai_summary.py +0 -0
  726. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/ai_synth.py +0 -0
  727. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/athena_utils.py +0 -0
  728. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/aws_utils.py +0 -0
  729. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/bulk_utils.py +0 -0
  730. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/cache.py +0 -0
  731. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/__init__.py +0 -0
  732. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/fingerprints.py +0 -0
  733. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/misc.py +0 -0
  734. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/mol_descriptors.py +0 -0
  735. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/mol_standardize.py +0 -0
  736. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/mol_tagging.py +0 -0
  737. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/projections.py +0 -0
  738. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/salts.py +0 -0
  739. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/sdf.py +0 -0
  740. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/toxicity.py +0 -0
  741. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chem_utils/vis.py +0 -0
  742. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/chemprop_utils.py +0 -0
  743. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/clientside_callbacks.py +0 -0
  744. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/cloudwatch_handler.py +0 -0
  745. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/cloudwatch_utils.py +0 -0
  746. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/color_utils.py +0 -0
  747. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/config_manager.py +0 -0
  748. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/dashboard_metrics.py +0 -0
  749. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/datetime_utils.py +0 -0
  750. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/deprecated_utils.py +0 -0
  751. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/df_to_endpoint.py +0 -0
  752. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/distribution_stats.py +0 -0
  753. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/ecs_info.py +0 -0
  754. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/endpoint_metrics.py +0 -0
  755. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/endpoint_utils.py +0 -0
  756. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/ensemble_simulator.py +0 -0
  757. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/extract_model_artifact.py +0 -0
  758. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/glue_utils.py +0 -0
  759. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/graph_utils.py +0 -0
  760. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/ipython_utils.py +0 -0
  761. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/json_utils.py +0 -0
  762. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/lambda_utils.py +0 -0
  763. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/license_manager.py +0 -0
  764. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/log_utils.py +0 -0
  765. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/markdown_utils.py +0 -0
  766. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/metrics_utils.py +0 -0
  767. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/model_utils.py +0 -0
  768. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/monitor_utils.py +0 -0
  769. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/pandas_utils.py +0 -0
  770. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/performance_utils.py +0 -0
  771. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/plot_utils.py +0 -0
  772. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/plugin_manager.py +0 -0
  773. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/prox_utils.py +0 -0
  774. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/pytorch_utils.py +0 -0
  775. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/redis_cache.py +0 -0
  776. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/repl_utils.py +0 -0
  777. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/s3_utils.py +0 -0
  778. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/shap_utils.py +0 -0
  779. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/shapley_values.py +0 -0
  780. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/symbols.py +0 -0
  781. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/theme_manager.py +0 -0
  782. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/trace_calls.py +0 -0
  783. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/type_abbrev.py +0 -0
  784. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/workbench_cache.py +0 -0
  785. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/workbench_event_bridge.py +0 -0
  786. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/workbench_logging.py +0 -0
  787. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/workbench_sqs.py +0 -0
  788. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/xgboost_local_crossfold.py +0 -0
  789. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/utils/xgboost_model_utils.py +0 -0
  790. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/component_interface.py +0 -0
  791. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/correlation_matrix.py +0 -0
  792. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/data_details_markdown.py +0 -0
  793. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/endpoint_metric_plots.py +0 -0
  794. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/experiments/dashboard_metric_plots.py +0 -0
  795. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/experiments/outlier_plot.py +0 -0
  796. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugin_interface.py +0 -0
  797. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugin_unit_test.py +0 -0
  798. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/ag_table.py +0 -0
  799. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/confusion_explorer.py +0 -0
  800. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/confusion_matrix.py +0 -0
  801. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/confusion_triangle.py +0 -0
  802. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/dashboard_status.py +0 -0
  803. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/data_details.py +0 -0
  804. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/endpoint_details.py +0 -0
  805. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/generated_compounds.py +0 -0
  806. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/graph_plot.py +0 -0
  807. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/license_details.py +0 -0
  808. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/model_details.py +0 -0
  809. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/model_plot.py +0 -0
  810. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/molecule_panel.py +0 -0
  811. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/molecule_viewer.py +0 -0
  812. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/proximity_mini_graph.py +0 -0
  813. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/scatter_plot.py +0 -0
  814. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/plugins/shap_summary_plot.py +0 -0
  815. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/regression_plot.py +0 -0
  816. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/settings_menu.py +0 -0
  817. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/components/violin_plots.py +0 -0
  818. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/page_views/data_sources_page_view.py +0 -0
  819. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/page_views/endpoints_page_view.py +0 -0
  820. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/page_views/feature_sets_page_view.py +0 -0
  821. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/page_views/main_page.py +0 -0
  822. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/page_views/models_page_view.py +0 -0
  823. {workbench-0.8.331 → workbench-0.8.332}/src/workbench/web_interface/page_views/page_view.py +0 -0
  824. {workbench-0.8.331 → workbench-0.8.332}/src/workbench.egg-info/dependency_links.txt +0 -0
  825. {workbench-0.8.331 → workbench-0.8.332}/src/workbench.egg-info/entry_points.txt +0 -0
  826. {workbench-0.8.331 → workbench-0.8.332}/src/workbench.egg-info/requires.txt +0 -0
  827. {workbench-0.8.331 → workbench-0.8.332}/src/workbench.egg-info/top_level.txt +0 -0
  828. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_aqsol_artifacts.py +0 -0
  829. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_aqsol_artifacts_all.py +0 -0
  830. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_aqsol_rt_artifacts.py +0 -0
  831. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_basic_test_artifacts.py +0 -0
  832. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_copy_artifacts.py +0 -0
  833. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_empty_model_group.py +0 -0
  834. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_endpoints_for_timing.py +0 -0
  835. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_graph_artifacts.py +0 -0
  836. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_knn_artifacts.py +0 -0
  837. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_meta_endpoints.py +0 -0
  838. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_proximity_models.py +0 -0
  839. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_quant_regression_artifacts.py +0 -0
  840. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_realtime_endpoint.py +0 -0
  841. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_sagemaker_pipeline_model.py +0 -0
  842. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_training_adjusted_artifacts.py +0 -0
  843. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/create_wine_artifacts.py +0 -0
  844. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/delete_stress_test_artifacts.py +0 -0
  845. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/delete_test_artifacts.py +0 -0
  846. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/hyper_testing.py +0 -0
  847. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/regression_ensemble.py +0 -0
  848. {workbench-0.8.331 → workbench-0.8.332}/test_artifacts/stress_test_aws.py +0 -0
  849. {workbench-0.8.331 → workbench-0.8.332}/tests/README.md +0 -0
  850. {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/data_source_tests.py +0 -0
  851. {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/empty_model_group.py +0 -0
  852. {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/featureset_ingest_boundaries.py +0 -0
  853. {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/featureset_tests.py +0 -0
  854. {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/graph_tests.py +0 -0
  855. {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/model_metrics_tests.py +0 -0
  856. {workbench-0.8.331 → workbench-0.8.332}/tests/artifacts/model_tests.py +0 -0
  857. {workbench-0.8.331 → workbench-0.8.332}/tests/aws_account/aws_account_clamp_tests.py +0 -0
  858. {workbench-0.8.331 → workbench-0.8.332}/tests/cached/cached_artifact_tests.py +0 -0
  859. {workbench-0.8.331 → workbench-0.8.332}/tests/cached/cached_meta_tests.py +0 -0
  860. {workbench-0.8.331 → workbench-0.8.332}/tests/chem_info/test_standardization_reference.py +0 -0
  861. {workbench-0.8.331 → workbench-0.8.332}/tests/chem_info/test_tautomerization.py +0 -0
  862. {workbench-0.8.331 → workbench-0.8.332}/tests/confidence/test_uq_harness.py +0 -0
  863. {workbench-0.8.331 → workbench-0.8.332}/tests/corner_cases/end_to_end.py +0 -0
  864. {workbench-0.8.331 → workbench-0.8.332}/tests/df_store/df_store_tests.py +0 -0
  865. {workbench-0.8.331 → workbench-0.8.332}/tests/endpoints/endpoint_tests.py +0 -0
  866. {workbench-0.8.331 → workbench-0.8.332}/tests/endpoints/inference_cache_tests.py +0 -0
  867. {workbench-0.8.331 → workbench-0.8.332}/tests/endpoints/meta_endpoint_dag_tests.py +0 -0
  868. {workbench-0.8.331 → workbench-0.8.332}/tests/feature_endpoints/test_3d_complexity_skips.py +0 -0
  869. {workbench-0.8.331 → workbench-0.8.332}/tests/feature_endpoints/test_3d_consistency.py +0 -0
  870. {workbench-0.8.331 → workbench-0.8.332}/tests/feature_endpoints/test_3d_corner_cases.py +0 -0
  871. {workbench-0.8.331 → workbench-0.8.332}/tests/feature_endpoints/test_3d_flexibility_comparison.py +0 -0
  872. {workbench-0.8.331 → workbench-0.8.332}/tests/feature_endpoints/test_smiles_to_3d_fast_v1.py +0 -0
  873. {workbench-0.8.331 → workbench-0.8.332}/tests/feature_endpoints/test_smiles_to_3d_full_v1.py +0 -0
  874. {workbench-0.8.331 → workbench-0.8.332}/tests/lambda/decompress_layers.py +0 -0
  875. {workbench-0.8.331 → workbench-0.8.332}/tests/pandas_tests/test_drift.py +0 -0
  876. {workbench-0.8.331 → workbench-0.8.332}/tests/pandas_tests/test_multi_task.py +0 -0
  877. {workbench-0.8.331 → workbench-0.8.332}/tests/pandas_tests/test_temporal_split.py +0 -0
  878. {workbench-0.8.331 → workbench-0.8.332}/tests/parameter_store/param_store_tests.py +0 -0
  879. {workbench-0.8.331 → workbench-0.8.332}/tests/pipelines/test_pipeline_launcher.py +0 -0
  880. {workbench-0.8.331 → workbench-0.8.332}/tests/pipelines/test_pipeline_meta.py +0 -0
  881. {workbench-0.8.331 → workbench-0.8.332}/tests/plugin_tests/crashing_plugin.py +0 -0
  882. {workbench-0.8.331 → workbench-0.8.332}/tests/pytorch/pytorch_hello.py +0 -0
  883. {workbench-0.8.331 → workbench-0.8.332}/tests/requirements-dev.txt +0 -0
  884. {workbench-0.8.331 → workbench-0.8.332}/tests/specific/capital_tests.py +0 -0
  885. {workbench-0.8.331 → workbench-0.8.332}/tests/specific/column_changes.py +0 -0
  886. {workbench-0.8.331 → workbench-0.8.332}/tests/specific/config_manager.py +0 -0
  887. {workbench-0.8.331 → workbench-0.8.332}/tests/specific/deletion_tests.py +0 -0
  888. {workbench-0.8.331 → workbench-0.8.332}/tests/specific/public_data_test.py +0 -0
  889. {workbench-0.8.331 → workbench-0.8.332}/tests/specific/shap_tests.py +0 -0
  890. {workbench-0.8.331 → workbench-0.8.332}/tests/specific/spawn_test.py +0 -0
  891. {workbench-0.8.331 → workbench-0.8.332}/tests/specific/tag_tests.py +0 -0
  892. {workbench-0.8.331 → workbench-0.8.332}/tests/transforms/data_to_data_tests.py +0 -0
  893. {workbench-0.8.331 → workbench-0.8.332}/tests/transforms/data_to_features_tests.py +0 -0
  894. {workbench-0.8.331 → workbench-0.8.332}/tests/transforms/features_to_model_tests.py +0 -0
  895. {workbench-0.8.331 → workbench-0.8.332}/tests/transforms/model_to_endpoint_tests.py +0 -0
  896. {workbench-0.8.331 → workbench-0.8.332}/tests/transforms/pandas_to_data_tests.py +0 -0
  897. {workbench-0.8.331 → workbench-0.8.332}/tests/transforms/pandas_to_features_test.py +0 -0
  898. {workbench-0.8.331 → workbench-0.8.332}/tests/views/view_tests.py +0 -0
  899. {workbench-0.8.331 → workbench-0.8.332}/tests/views/view_tests_complex.py +0 -0
  900. {workbench-0.8.331 → workbench-0.8.332}/tests/web_components/confusion_matrix_test.py +0 -0
  901. {workbench-0.8.331 → workbench-0.8.332}/tests/web_components/correlation_matrix_test.py +0 -0
  902. {workbench-0.8.331 → workbench-0.8.332}/tests/web_components/graph_plot_test.py +0 -0
  903. {workbench-0.8.331 → workbench-0.8.332}/tests/web_components/plugin_interface_test.py +0 -0
  904. {workbench-0.8.331 → workbench-0.8.332}/tests/web_components/scatter_plot_test.py +0 -0
  905. {workbench-0.8.331 → workbench-0.8.332}/tox.ini +0 -0
  906. {workbench-0.8.331 → workbench-0.8.332}/ui_testing/assets/custom.css +0 -0
  907. {workbench-0.8.331 → workbench-0.8.332}/ui_testing/table_comparison.py +0 -0
  908. {workbench-0.8.331 → workbench-0.8.332}/ui_testing/theme_switching.py +0 -0
  909. {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.331
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: run DatasetComparison with logd as reference and logp as query, so
29
- each LogP compound gets a per-row Tanimoto-to-LogD score. Filter by band, cap,
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 DatasetComparison
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
- dc: DatasetComparison,
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 DatasetComparison model."""
71
- results = dc.results()
72
- logp_scored = results[results["dataset"] == "query"].copy()
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["tanimoto_sim"] >= tanimoto_min) & (logp_scored["tanimoto_sim"] <= tanimoto_max)
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['tanimoto_sim'].min():.3f}-{band['tanimoto_sim'].max():.3f}"
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
- # Build the comparison once (logd=ref, logp=query) gives each LogP a Tanimoto-to-LogD score.
126
- # All three tiers are derived from the same scored set, so we only build the FP/UMAP model once.
127
- log.info("Building DatasetComparison (logd=reference, logp=query) ...")
128
- dc = DatasetComparison(
129
- df_reference=logd_ids[["id", "smiles", "logd"]],
130
- df_query=logp_ids[["id", "smiles", "logp"]],
131
- reference_target="logd",
132
- query_target="logp",
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(dc, logp, logd, suffix, lo, hi, max_aux, seed)
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 "Combine 2D + 3D"
3
- Run both the [2D descriptor endpoint](molecular_standardization.md) and the 3D endpoint, then concatenate the results for a ~388-feature set covering topological, electronic, and geometric properties.
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. But some of the most important ADMET properties depend on the molecule's *shape* in three dimensions: how it 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.
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
- ## Why 3D Descriptors?
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. This misses geometry-dependent properties that matter for ADMET:
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 purely 3D phenomenon
16
+ - **Intramolecular hydrogen bonds** enable "chameleonic" behavior where molecules mask polar groups in nonpolar environments -- a 3D phenomenon
17
17
 
18
- These properties can't be captured from the molecular graph. You need 3D coordinates.
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 uses the documented "more samples" path to reduce that stochastic spread by roughly √(500/300) 1.29×.
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
- # This is the documented path for reducing single-seed Boltzmann variance
143
- # more independent samples from the same seed.
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
- # Future Note: multi-seed conformer pooling (run k seeds × N/k conformers,
146
- # merge before Boltzmann averaging) would cut seed variance by ~sqrt(k)
147
- # at the same total conformer count, but it's not documented practice in
148
- # the small-molecule conformer-generation literature we checked. Worth
149
- # revisiting if bigger conformer tiers still leave too much variance, or
150
- # if we switch embedding algorithms (CONFORGE / Lyrebird) where the
151
- # sampling trade-offs may differ.
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
- # Initialize feature + diagnostic columns. Numeric diagnostics get np.nan;
1339
- # string and bool diagnostics get object dtype so per-row assignment of
1340
- # non-float values doesn't raise pandas FutureWarnings.
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
- result[col] = np.nan
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
- result[col] = pd.Series([pd.NA] * len(result), dtype=object) if col in object_dtype_diagnostics else np.nan
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
- IDLE_MINUTES = 5 # Minutes of empty queue before draining to zero.
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
- # Advanced: workbench_meta knobs set AFTER to_endpoint() tune runtime inference.
61
- # end.upsert_workbench_meta({"inference_batch_size": 100})
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})
@@ -13,7 +13,7 @@ rdkit==2026.3.1
13
13
  mordredcommunity==2.0.7
14
14
 
15
15
  # MetaEndpoint support (async_inference added in 0.2.7)
16
- workbench-bridges==0.2.7
16
+ workbench-bridges==0.2.9
17
17
 
18
18
  # Inference server
19
19
  fastapi==0.135.2
@@ -13,4 +13,4 @@ rdkit==2026.3.1
13
13
  mordredcommunity==2.0.7
14
14
 
15
15
  # MetaEndpoint support (async_inference added in 0.2.7)
16
- workbench-bridges==0.2.7
16
+ workbench-bridges==0.2.9
@@ -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.330
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 DatasetComparison testing.
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 DatasetComparison
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 (same approach as DatasetComparison)
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 DatasetComparison computes at runtime
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.chunk_size = 25
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.chunk_size = 25
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 .dataset_comparison import DatasetComparison
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
- "DatasetComparison",
21
+ "MultiTaskAlignment",
22
22
  ]