workbench 0.8.332__tar.gz → 0.8.334__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (908) hide show
  1. {workbench-0.8.332 → workbench-0.8.334}/PKG-INFO +1 -1
  2. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/Dockerfile +1 -1
  3. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/app.py +1 -1
  4. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/model_confidence.md +17 -17
  5. workbench-0.8.334/docs/images/ensemble_disagreement.svg +118 -0
  6. workbench-0.8.334/examples/models/chemprop_bounded_loss_test.py +175 -0
  7. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/ml_pipelines/Dockerfile +1 -1
  8. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/smart_aggregator.py +4 -6
  9. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/cached_artifact_mixin.py +18 -0
  10. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/cached_model.py +1 -1
  11. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/endpoint_core.py +17 -6
  12. {workbench-0.8.332/src/workbench/model_scripts/pytorch_model → workbench-0.8.334/src/workbench/model_script_utils}/uq_harness.py +158 -23
  13. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/chemprop/chemprop.template +15 -4
  14. {workbench-0.8.332/src/workbench/model_script_utils → workbench-0.8.334/src/workbench/model_scripts/chemprop}/uq_harness.py +158 -23
  15. {workbench-0.8.332/src/workbench/model_scripts/xgb_model → workbench-0.8.334/src/workbench/model_scripts/pytorch_model}/uq_harness.py +158 -23
  16. {workbench-0.8.332/src/workbench/model_scripts/chemprop → workbench-0.8.334/src/workbench/model_scripts/xgb_model}/uq_harness.py +158 -23
  17. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/dark/plotly.json +48 -10
  18. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/light/plotly.json +48 -10
  19. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/midnight_blue/plotly.json +48 -10
  20. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/ag_table.py +9 -8
  21. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/confusion_triangle.py +26 -23
  22. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/multi_task_alignment_map.py +38 -23
  23. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/scatter_plot.py +64 -30
  24. workbench-0.8.334/src/workbench/web_interface/utils/__init__.py +0 -0
  25. {workbench-0.8.332/src/workbench → workbench-0.8.334/src/workbench/web_interface}/utils/clientside_callbacks.py +27 -23
  26. {workbench-0.8.332 → workbench-0.8.334}/src/workbench.egg-info/PKG-INFO +1 -1
  27. {workbench-0.8.332 → workbench-0.8.334}/src/workbench.egg-info/SOURCES.txt +3 -1
  28. {workbench-0.8.332 → workbench-0.8.334}/tests/confidence/test_uq_harness.py +92 -8
  29. workbench-0.8.332/docs/images/ensemble_disagreement.svg +0 -78
  30. {workbench-0.8.332 → workbench-0.8.334}/.flake8 +0 -0
  31. {workbench-0.8.332 → workbench-0.8.334}/.gitattributes +0 -0
  32. {workbench-0.8.332 → workbench-0.8.334}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  33. {workbench-0.8.332 → workbench-0.8.334}/.github/dependabot.yml +0 -0
  34. {workbench-0.8.332 → workbench-0.8.334}/.github/workflows/deploy-docs.yml +0 -0
  35. {workbench-0.8.332 → workbench-0.8.334}/.github/workflows/publish.yml +0 -0
  36. {workbench-0.8.332 → workbench-0.8.334}/.github/workflows/python-lint.yml +0 -0
  37. {workbench-0.8.332 → workbench-0.8.334}/.gitignore +0 -0
  38. {workbench-0.8.332 → workbench-0.8.334}/CONTRIBUTING.md +0 -0
  39. {workbench-0.8.332 → workbench-0.8.334}/Dockerfile +0 -0
  40. {workbench-0.8.332 → workbench-0.8.334}/LICENSE +0 -0
  41. {workbench-0.8.332 → workbench-0.8.334}/Makefile +0 -0
  42. {workbench-0.8.332 → workbench-0.8.334}/README.md +0 -0
  43. {workbench-0.8.332 → workbench-0.8.334}/SECURITY.md +0 -0
  44. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/.gitignore +0 -0
  45. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/README.md +0 -0
  46. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/app.py +0 -0
  47. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/assets/favicon.ico +0 -0
  48. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/dashboard +0 -0
  49. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/deploy.sh +0 -0
  50. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/open_source_config.json +0 -0
  51. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/data_sources/callbacks.py +0 -0
  52. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/data_sources/layout.py +0 -0
  53. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/data_sources/page.py +0 -0
  54. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/endpoints/callbacks.py +0 -0
  55. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/endpoints/layout.py +0 -0
  56. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/endpoints/page.py +0 -0
  57. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/feature_sets/callbacks.py +0 -0
  58. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/feature_sets/layout.py +0 -0
  59. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/feature_sets/page.py +0 -0
  60. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/license/page.py +0 -0
  61. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/main/callbacks.py +0 -0
  62. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/main/layout.py +0 -0
  63. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/main/page.py +0 -0
  64. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/models/callbacks.py +0 -0
  65. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/models/layout.py +0 -0
  66. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/models/page.py +0 -0
  67. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/pages/status/page.py +0 -0
  68. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/static/dark.css +0 -0
  69. {workbench-0.8.332 → workbench-0.8.334}/applications/aws_dashboard/static/light.css +0 -0
  70. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/Dockerfile +0 -0
  71. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/README.md +0 -0
  72. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/app.py +0 -0
  73. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/assets/favicon.ico +0 -0
  74. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/callbacks.py +0 -0
  75. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/explorer +0 -0
  76. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/layout.py +0 -0
  77. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/nginx.conf +0 -0
  78. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/open_source_config.json +0 -0
  79. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/requirements.txt +0 -0
  80. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/storage/callbacks.py +0 -0
  81. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/storage/callbacks_new.py +0 -0
  82. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/storage/layout_new.py +0 -0
  83. {workbench-0.8.332 → workbench-0.8.334}/applications/compound_explorer/supervisord.conf +0 -0
  84. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/aws_account_setup.py +0 -0
  85. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/aws_identity_check.py +0 -0
  86. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/build_ml_pipeline.py +0 -0
  87. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/.gitignore +0 -0
  88. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/README.md +0 -0
  89. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/app.py +0 -0
  90. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/cdk.json +0 -0
  91. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/compound_explorer/__init__.py +0 -0
  92. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/compound_explorer/compound_explorer_stack.py +0 -0
  93. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/compound_explorer/requirements.txt +0 -0
  94. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/event_bridge/Readme.md +0 -0
  95. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/README.md +0 -0
  96. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/app.py +0 -0
  97. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/cdk.json +0 -0
  98. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/requirements.txt +0 -0
  99. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/workbench_compute/__init__.py +0 -0
  100. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/workbench_compute/lambdas/batch_failure/handler.py +0 -0
  101. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/workbench_compute/lambdas/batch_trigger/handler.py +0 -0
  102. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_compute/workbench_compute/workbench_compute_stack.py +0 -0
  103. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/.gitignore +0 -0
  104. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/README.md +0 -0
  105. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/app.py +0 -0
  106. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/cdk.json +0 -0
  107. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/requirements-dev.txt +0 -0
  108. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/requirements.txt +0 -0
  109. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/source.bat +0 -0
  110. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/workbench_core/__init__.py +0 -0
  111. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_core/workbench_core/workbench_core_stack.py +0 -0
  112. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/.gitignore +0 -0
  113. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/README.md +0 -0
  114. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/cdk.json +0 -0
  115. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/requirements-dev.txt +0 -0
  116. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/requirements.txt +0 -0
  117. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/source.bat +0 -0
  118. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/workbench_dashboard_full/__init__.py +0 -0
  119. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_full/workbench_dashboard_full/workbench_dashboard_stack.py +0 -0
  120. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/.gitignore +0 -0
  121. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/README.md +0 -0
  122. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/app.py +0 -0
  123. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/cdk.json +0 -0
  124. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/requirements.txt +0 -0
  125. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/workbench_dashboard_lite/__init__.py +0 -0
  126. {workbench-0.8.332 → workbench-0.8.334}/aws_setup/workbench_dashboard_lite/workbench_dashboard_lite/workbench_dashboard_stack.py +0 -0
  127. {workbench-0.8.332 → workbench-0.8.334}/data/abalone.csv +0 -0
  128. {workbench-0.8.332 → workbench-0.8.334}/data/karate_graph.json +0 -0
  129. {workbench-0.8.332 → workbench-0.8.334}/data/public_data/README.md +0 -0
  130. {workbench-0.8.332 → workbench-0.8.334}/data/public_data/alignment_utils.py +0 -0
  131. {workbench-0.8.332 → workbench-0.8.334}/data/public_data/build_logp_logd_overlap.py +0 -0
  132. {workbench-0.8.332 → workbench-0.8.334}/data/public_data/build_synthetic_multi_task.py +0 -0
  133. {workbench-0.8.332 → workbench-0.8.334}/data/public_data/descriptions.json +0 -0
  134. {workbench-0.8.332 → workbench-0.8.334}/data/public_data/overlap_summary.py +0 -0
  135. {workbench-0.8.332 → workbench-0.8.334}/data/public_data/pull_common.py +0 -0
  136. {workbench-0.8.332 → workbench-0.8.334}/data/public_data/pull_logd_data.py +0 -0
  137. {workbench-0.8.332 → workbench-0.8.334}/data/public_data/pull_logp_data.py +0 -0
  138. {workbench-0.8.332 → workbench-0.8.334}/data/public_data/requirements.txt +0 -0
  139. {workbench-0.8.332 → workbench-0.8.334}/data/public_data/upload_data.py +0 -0
  140. {workbench-0.8.332 → workbench-0.8.334}/data/test_data.csv +0 -0
  141. {workbench-0.8.332 → workbench-0.8.334}/data/test_data.json +0 -0
  142. {workbench-0.8.332 → workbench-0.8.334}/data/wine_dataset.csv +0 -0
  143. {workbench-0.8.332 → workbench-0.8.334}/deploy_docker.sh +0 -0
  144. {workbench-0.8.332 → workbench-0.8.334}/docs/admin/aws_service_limits.md +0 -0
  145. {workbench-0.8.332 → workbench-0.8.334}/docs/admin/base_docker_push.md +0 -0
  146. {workbench-0.8.332 → workbench-0.8.334}/docs/admin/dashboard_docker_push.md +0 -0
  147. {workbench-0.8.332 → workbench-0.8.334}/docs/admin/dashboard_s3_plugins.md +0 -0
  148. {workbench-0.8.332 → workbench-0.8.334}/docs/admin/explorer_docker_push.md +0 -0
  149. {workbench-0.8.332 → workbench-0.8.334}/docs/admin/images/dashboard_secret_click.png +0 -0
  150. {workbench-0.8.332 → workbench-0.8.334}/docs/admin/images/serverless_quotas.png +0 -0
  151. {workbench-0.8.332 → workbench-0.8.334}/docs/admin/images/status_showing_S3_path.png +0 -0
  152. {workbench-0.8.332 → workbench-0.8.334}/docs/admin/pypi_release.md +0 -0
  153. {workbench-0.8.332 → workbench-0.8.334}/docs/admin/workbench_docker_for_lambdas.md +0 -0
  154. {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/async_endpoint.md +0 -0
  155. {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/data_source.md +0 -0
  156. {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/df_store.md +0 -0
  157. {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/endpoint.md +0 -0
  158. {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/feature_set.md +0 -0
  159. {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/inference_cache.md +0 -0
  160. {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/meta.md +0 -0
  161. {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/model.md +0 -0
  162. {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/monitor.md +0 -0
  163. {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/overview.md +0 -0
  164. {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/parameter_store.md +0 -0
  165. {workbench-0.8.332 → workbench-0.8.334}/docs/api_classes/views.md +0 -0
  166. {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/aws_access_management.md +0 -0
  167. {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/aws_client_vpn.md +0 -0
  168. {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/aws_setup.md +0 -0
  169. {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/aws_tips_and_tricks.md +0 -0
  170. {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/core_stack.md +0 -0
  171. {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/dashboard_stack.md +0 -0
  172. {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/domain_cert_setup.md +0 -0
  173. {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/full_pipeline.md +0 -0
  174. {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/iam_assume_role.md +0 -0
  175. {workbench-0.8.332 → workbench-0.8.334}/docs/aws_setup/sso_assume_role.md +0 -0
  176. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/3d_descriptors.md +0 -0
  177. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/aws_endpoint_architecture.md +0 -0
  178. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/chemprop_multi_task.md +0 -0
  179. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/chemprop_shap.md +0 -0
  180. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/confusion_explorer.md +0 -0
  181. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/feature_endpoints.md +0 -0
  182. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/index.md +0 -0
  183. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/molecular_standardization.md +0 -0
  184. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/compound_etl.md +0 -0
  185. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/compound_explorer.md +0 -0
  186. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/eda.md +0 -0
  187. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/feature_importances.md +0 -0
  188. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/fun_with_endpoints.md +0 -0
  189. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/htg.md +0 -0
  190. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/model_monitoring.md +0 -0
  191. {workbench-0.8.332 → workbench-0.8.334}/docs/blogs/storage/residual_analysis.md +0 -0
  192. {workbench-0.8.332 → workbench-0.8.334}/docs/cached/cached_data_source.md +0 -0
  193. {workbench-0.8.332 → workbench-0.8.334}/docs/cached/cached_endpoint.md +0 -0
  194. {workbench-0.8.332 → workbench-0.8.334}/docs/cached/cached_feature_set.md +0 -0
  195. {workbench-0.8.332 → workbench-0.8.334}/docs/cached/cached_meta.md +0 -0
  196. {workbench-0.8.332 → workbench-0.8.334}/docs/cached/cached_model.md +0 -0
  197. {workbench-0.8.332 → workbench-0.8.334}/docs/cached/overview.md +0 -0
  198. {workbench-0.8.332 → workbench-0.8.334}/docs/chem_utils/index.md +0 -0
  199. {workbench-0.8.332 → workbench-0.8.334}/docs/cloudwatch/index.md +0 -0
  200. {workbench-0.8.332 → workbench-0.8.334}/docs/comparisons/workbench_vs_databricks.md +0 -0
  201. {workbench-0.8.332 → workbench-0.8.334}/docs/compound_explorer/tox21.md +0 -0
  202. {workbench-0.8.332 → workbench-0.8.334}/docs/compound_explorer/toxicity_modeling.md +0 -0
  203. {workbench-0.8.332 → workbench-0.8.334}/docs/confidence/index.md +0 -0
  204. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/artifact.md +0 -0
  205. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/async_endpoint_core.md +0 -0
  206. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/athena_source.md +0 -0
  207. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/data_source_abstract.md +0 -0
  208. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/endpoint_core.md +0 -0
  209. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/feature_set_core.md +0 -0
  210. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/model_core.md +0 -0
  211. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/monitor_core.md +0 -0
  212. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/artifacts/overview.md +0 -0
  213. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/overview.md +0 -0
  214. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/data_loaders_heavy.md +0 -0
  215. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/data_loaders_light.md +0 -0
  216. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/data_to_features.md +0 -0
  217. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/features_to_model.md +0 -0
  218. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/model_to_endpoint.md +0 -0
  219. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/overview.md +0 -0
  220. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/pandas_transforms.md +0 -0
  221. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/transforms/transform.md +0 -0
  222. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/views/computation_view.md +0 -0
  223. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/views/display_view.md +0 -0
  224. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/views/inference_view.md +0 -0
  225. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/views/overview.md +0 -0
  226. {workbench-0.8.332 → workbench-0.8.334}/docs/core_classes/views/training_view.md +0 -0
  227. {workbench-0.8.332 → workbench-0.8.334}/docs/data_algorithms/dataframes/overview.md +0 -0
  228. {workbench-0.8.332 → workbench-0.8.334}/docs/data_algorithms/graphs/overview.md +0 -0
  229. {workbench-0.8.332 → workbench-0.8.334}/docs/data_algorithms/overview.md +0 -0
  230. {workbench-0.8.332 → workbench-0.8.334}/docs/data_algorithms/spark/overview.md +0 -0
  231. {workbench-0.8.332 → workbench-0.8.334}/docs/data_algorithms/sql/overview.md +0 -0
  232. {workbench-0.8.332 → workbench-0.8.334}/docs/enterprise/index.md +0 -0
  233. {workbench-0.8.332 → workbench-0.8.334}/docs/enterprise/private_saas.md +0 -0
  234. {workbench-0.8.332 → workbench-0.8.334}/docs/enterprise/project_branding.md +0 -0
  235. {workbench-0.8.332 → workbench-0.8.334}/docs/enterprise/themes.md +0 -0
  236. {workbench-0.8.332 → workbench-0.8.334}/docs/getting_started/index.md +0 -0
  237. {workbench-0.8.332 → workbench-0.8.334}/docs/glue/index.md +0 -0
  238. {workbench-0.8.332 → workbench-0.8.334}/docs/images/3d_descriptor_pipeline.svg +0 -0
  239. {workbench-0.8.332 → workbench-0.8.334}/docs/images/big_spider.png +0 -0
  240. {workbench-0.8.332 → workbench-0.8.334}/docs/images/chemprop_logd.png +0 -0
  241. {workbench-0.8.332 → workbench-0.8.334}/docs/images/chemprop_mt_expansion.svg +0 -0
  242. {workbench-0.8.332 → workbench-0.8.334}/docs/images/chemprop_mt_transfer.svg +0 -0
  243. {workbench-0.8.332 → workbench-0.8.334}/docs/images/chemprop_overview.svg +0 -0
  244. {workbench-0.8.332 → workbench-0.8.334}/docs/images/chemprop_shap_logd.png +0 -0
  245. {workbench-0.8.332 → workbench-0.8.334}/docs/images/chemprop_shap_pipeline.svg +0 -0
  246. {workbench-0.8.332 → workbench-0.8.334}/docs/images/confidence_percentile.svg +0 -0
  247. {workbench-0.8.332 → workbench-0.8.334}/docs/images/conformal_calibration.svg +0 -0
  248. {workbench-0.8.332 → workbench-0.8.334}/docs/images/confusion_explorer/drilldown_on_errors.png +0 -0
  249. {workbench-0.8.332 → workbench-0.8.334}/docs/images/confusion_explorer/high_confidence.png +0 -0
  250. {workbench-0.8.332 → workbench-0.8.334}/docs/images/confusion_explorer/overview.png +0 -0
  251. {workbench-0.8.332 → workbench-0.8.334}/docs/images/default_stack_flow.svg +0 -0
  252. {workbench-0.8.332 → workbench-0.8.334}/docs/images/endpoint_architecture.png +0 -0
  253. {workbench-0.8.332 → workbench-0.8.334}/docs/images/graph_representation.png +0 -0
  254. {workbench-0.8.332 → workbench-0.8.334}/docs/images/powered_aws_dark_blue.png +0 -0
  255. {workbench-0.8.332 → workbench-0.8.334}/docs/images/powered_aws_transparent.png +0 -0
  256. {workbench-0.8.332 → workbench-0.8.334}/docs/images/powered_aws_white.png +0 -0
  257. {workbench-0.8.332 → workbench-0.8.334}/docs/images/powered_aws_with_tm_grey.png +0 -0
  258. {workbench-0.8.332 → workbench-0.8.334}/docs/images/scp.png +0 -0
  259. {workbench-0.8.332 → workbench-0.8.334}/docs/images/scp_labs.png +0 -0
  260. {workbench-0.8.332 → workbench-0.8.334}/docs/images/small_spider.png +0 -0
  261. {workbench-0.8.332 → workbench-0.8.334}/docs/images/uq_conf_residual.png +0 -0
  262. {workbench-0.8.332 → workbench-0.8.334}/docs/images/uq_pred_scatter.png +0 -0
  263. {workbench-0.8.332 → workbench-0.8.334}/docs/images/workbench_async_stack_flow.svg +0 -0
  264. {workbench-0.8.332 → workbench-0.8.334}/docs/images/workbench_concepts.png +0 -0
  265. {workbench-0.8.332 → workbench-0.8.334}/docs/images/workbench_stack_flow.svg +0 -0
  266. {workbench-0.8.332 → workbench-0.8.334}/docs/index.md +0 -0
  267. {workbench-0.8.332 → workbench-0.8.334}/docs/javascripts/mathjax.js +0 -0
  268. {workbench-0.8.332 → workbench-0.8.334}/docs/lambda_layer/index.md +0 -0
  269. {workbench-0.8.332 → workbench-0.8.334}/docs/misc/faq.md +0 -0
  270. {workbench-0.8.332 → workbench-0.8.334}/docs/misc/general_info.md +0 -0
  271. {workbench-0.8.332 → workbench-0.8.334}/docs/misc/scp_consulting.md +0 -0
  272. {workbench-0.8.332 → workbench-0.8.334}/docs/misc/workbench_classes_concepts.md +0 -0
  273. {workbench-0.8.332 → workbench-0.8.334}/docs/model_utils/index.md +0 -0
  274. {workbench-0.8.332 → workbench-0.8.334}/docs/models/chemprop_models.md +0 -0
  275. {workbench-0.8.332 → workbench-0.8.334}/docs/models/fingerprint_models.md +0 -0
  276. {workbench-0.8.332 → workbench-0.8.334}/docs/models/images/chemprop_decision_tree.svg +0 -0
  277. {workbench-0.8.332 → workbench-0.8.334}/docs/models/images/confidence.jpg +0 -0
  278. {workbench-0.8.332 → workbench-0.8.334}/docs/models/images/hybrid_architecture.svg +0 -0
  279. {workbench-0.8.332 → workbench-0.8.334}/docs/models/index.md +0 -0
  280. {workbench-0.8.332 → workbench-0.8.334}/docs/models/meta_endpoints.md +0 -0
  281. {workbench-0.8.332 → workbench-0.8.334}/docs/models/pytorch_models.md +0 -0
  282. {workbench-0.8.332 → workbench-0.8.334}/docs/models/sklearn_models.md +0 -0
  283. {workbench-0.8.332 → workbench-0.8.334}/docs/models/xgboost_models.md +0 -0
  284. {workbench-0.8.332 → workbench-0.8.334}/docs/plugins/index.md +0 -0
  285. {workbench-0.8.332 → workbench-0.8.334}/docs/presentations/index.md +0 -0
  286. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_106.md +0 -0
  287. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_158.md +0 -0
  288. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_50.md +0 -0
  289. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_55.md +0 -0
  290. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_58.md +0 -0
  291. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_60.md +0 -0
  292. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_71.md +0 -0
  293. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_74.md +0 -0
  294. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/0_8_78.md +0 -0
  295. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_7_8.md +0 -0
  296. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_11.md +0 -0
  297. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_20.md +0 -0
  298. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_22.md +0 -0
  299. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_23.md +0 -0
  300. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_27.md +0 -0
  301. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_29.md +0 -0
  302. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_33.md +0 -0
  303. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_35.md +0 -0
  304. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_36.md +0 -0
  305. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_39.md +0 -0
  306. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_42.md +0 -0
  307. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_46.md +0 -0
  308. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_6.md +0 -0
  309. {workbench-0.8.332 → workbench-0.8.334}/docs/release_notes/archived/0_8_8.md +0 -0
  310. {workbench-0.8.332 → workbench-0.8.334}/docs/repl/index.md +0 -0
  311. {workbench-0.8.332 → workbench-0.8.334}/docs/road_maps/0_9_0.md +0 -0
  312. {workbench-0.8.332 → workbench-0.8.334}/docs/road_maps/0_9_5.md +0 -0
  313. {workbench-0.8.332 → workbench-0.8.334}/docs/stylesheets/extra.css +0 -0
  314. {workbench-0.8.332 → workbench-0.8.334}/docs/themes/details.md +0 -0
  315. {workbench-0.8.332 → workbench-0.8.334}/docs/themes/index.md +0 -0
  316. {workbench-0.8.332 → workbench-0.8.334}/examples/ag-grid/hello_world.py +0 -0
  317. {workbench-0.8.332 → workbench-0.8.334}/examples/chem_utils/tautomerize_smiles.py +0 -0
  318. {workbench-0.8.332 → workbench-0.8.334}/examples/datasource/datasource_from_df.py +0 -0
  319. {workbench-0.8.332 → workbench-0.8.334}/examples/datasource/datasource_from_s3.py +0 -0
  320. {workbench-0.8.332 → workbench-0.8.334}/examples/datasource/datasource_query.py +0 -0
  321. {workbench-0.8.332 → workbench-0.8.334}/examples/datasource/datasource_stats.py +0 -0
  322. {workbench-0.8.332 → workbench-0.8.334}/examples/datasource/datasource_to_featureset.py +0 -0
  323. {workbench-0.8.332 → workbench-0.8.334}/examples/endpoint/endpoint_details.py +0 -0
  324. {workbench-0.8.332 → workbench-0.8.334}/examples/endpoint/endpoint_inference.py +0 -0
  325. {workbench-0.8.332 → workbench-0.8.334}/examples/endpoint/endpoint_metrics.py +0 -0
  326. {workbench-0.8.332 → workbench-0.8.334}/examples/featureset/featureset_eda.py +0 -0
  327. {workbench-0.8.332 → workbench-0.8.334}/examples/featureset/featureset_query.py +0 -0
  328. {workbench-0.8.332 → workbench-0.8.334}/examples/full_ml_pipeline.py +0 -0
  329. {workbench-0.8.332 → workbench-0.8.334}/examples/glue_jobs/glue_example_1.py +0 -0
  330. {workbench-0.8.332 → workbench-0.8.334}/examples/glue_jobs/glue_example_2.py +0 -0
  331. {workbench-0.8.332 → workbench-0.8.334}/examples/glue_jobs/glue_example_3.py +0 -0
  332. {workbench-0.8.332 → workbench-0.8.334}/examples/glue_jobs/glue_launcher_examples/example_1.py +0 -0
  333. {workbench-0.8.332 → workbench-0.8.334}/examples/glue_jobs/glue_launcher_examples/example_2.py +0 -0
  334. {workbench-0.8.332 → workbench-0.8.334}/examples/meta/meta_list_endpoints.py +0 -0
  335. {workbench-0.8.332 → workbench-0.8.334}/examples/meta/meta_list_models.py +0 -0
  336. {workbench-0.8.332 → workbench-0.8.334}/examples/meta/meta_model_metrics.py +0 -0
  337. {workbench-0.8.332 → workbench-0.8.334}/examples/ml_pipelines/list_models.py +0 -0
  338. {workbench-0.8.332 → workbench-0.8.334}/examples/ml_pipelines/wine_classifier.py +0 -0
  339. {workbench-0.8.332 → workbench-0.8.334}/examples/model_utils/model_metrics.py +0 -0
  340. {workbench-0.8.332 → workbench-0.8.334}/examples/model_utils/model_to_endpoint.py +0 -0
  341. {workbench-0.8.332 → workbench-0.8.334}/examples/model_utils/onboard_model.py +0 -0
  342. {workbench-0.8.332 → workbench-0.8.334}/examples/models/chemprop.py +0 -0
  343. {workbench-0.8.332 → workbench-0.8.334}/examples/models/chemprop_foundation.py +0 -0
  344. {workbench-0.8.332 → workbench-0.8.334}/examples/models/chemprop_logp_logd_synthetic.py +0 -0
  345. {workbench-0.8.332 → workbench-0.8.334}/examples/models/chemprop_logp_logd_tiered.py +0 -0
  346. {workbench-0.8.332 → workbench-0.8.334}/examples/models/custom_model.py +0 -0
  347. {workbench-0.8.332 → workbench-0.8.334}/examples/models/dbscan.py +0 -0
  348. {workbench-0.8.332 → workbench-0.8.334}/examples/models/knn.py +0 -0
  349. {workbench-0.8.332 → workbench-0.8.334}/examples/models/meta_endpoint.py +0 -0
  350. {workbench-0.8.332 → workbench-0.8.334}/examples/models/pytorch.py +0 -0
  351. {workbench-0.8.332 → workbench-0.8.334}/examples/models/random_forest.py +0 -0
  352. {workbench-0.8.332 → workbench-0.8.334}/examples/models/smiles_to_fingerprints.py +0 -0
  353. {workbench-0.8.332 → workbench-0.8.334}/examples/models/smiles_to_md_v1.py +0 -0
  354. {workbench-0.8.332 → workbench-0.8.334}/examples/models/split_comparison_chemprop.py +0 -0
  355. {workbench-0.8.332 → workbench-0.8.334}/examples/models/split_comparison_pytorch.py +0 -0
  356. {workbench-0.8.332 → workbench-0.8.334}/examples/models/split_comparison_xgb.py +0 -0
  357. {workbench-0.8.332 → workbench-0.8.334}/examples/models/uq/bayesian_ridge.py +0 -0
  358. {workbench-0.8.332 → workbench-0.8.334}/examples/models/uq/ensemble_xgb.py +0 -0
  359. {workbench-0.8.332 → workbench-0.8.334}/examples/models/uq/gaussian_process.py +0 -0
  360. {workbench-0.8.332 → workbench-0.8.334}/examples/models/uq/meta_uq.py +0 -0
  361. {workbench-0.8.332 → workbench-0.8.334}/examples/models/uq/ngboost.py +0 -0
  362. {workbench-0.8.332 → workbench-0.8.334}/examples/models/uq/quant_xgb.py +0 -0
  363. {workbench-0.8.332 → workbench-0.8.334}/examples/models/xgb_model.py +0 -0
  364. {workbench-0.8.332 → workbench-0.8.334}/examples/monitor/monitor_setup.py +0 -0
  365. {workbench-0.8.332 → workbench-0.8.334}/examples/monitor/monitor_usage.py +0 -0
  366. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/branding/Readme.md +0 -0
  367. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/branding/scp.json +0 -0
  368. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/components/custom_plugin.py +0 -0
  369. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/components/endpoint_plugin.py +0 -0
  370. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/components/endpoint_turbo.py +0 -0
  371. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/components/model_markdown.py +0 -0
  372. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/components/model_plugin.py +0 -0
  373. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/packages/my_plugin_utils/__init__.py +0 -0
  374. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/packages/my_plugin_utils/assets/foo.json +0 -0
  375. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/packages/my_plugin_utils/cool_stuff.py +0 -0
  376. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/pages/plugin_page_1.py +0 -0
  377. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/pages/plugin_page_2.py +0 -0
  378. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/pages/plugin_page_3.py +0 -0
  379. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/templates/Readme.md +0 -0
  380. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/views/model_plugin_view.py +0 -0
  381. {workbench-0.8.332 → workbench-0.8.334}/examples/plugins/views/my_view_plugin.py +0 -0
  382. {workbench-0.8.332 → workbench-0.8.334}/experiments/chem_info/bulk_sims.py +0 -0
  383. {workbench-0.8.332 → workbench-0.8.334}/experiments/chem_info/knn_sims.py +0 -0
  384. {workbench-0.8.332 → workbench-0.8.334}/experiments/cleanlab_bug_report.py +0 -0
  385. {workbench-0.8.332 → workbench-0.8.334}/experiments/confidence_roc_curve.py +0 -0
  386. {workbench-0.8.332 → workbench-0.8.334}/experiments/coverage_probability.py +0 -0
  387. {workbench-0.8.332 → workbench-0.8.334}/experiments/db_scan_test.py +0 -0
  388. {workbench-0.8.332 → workbench-0.8.334}/experiments/log_testing.py +0 -0
  389. {workbench-0.8.332 → workbench-0.8.334}/experiments/networkx_id.py +0 -0
  390. {workbench-0.8.332 → workbench-0.8.334}/experiments/prediction_intervals.py +0 -0
  391. {workbench-0.8.332 → workbench-0.8.334}/experiments/residual_analysis.py +0 -0
  392. {workbench-0.8.332 → workbench-0.8.334}/experiments/rocauc_testing.py +0 -0
  393. {workbench-0.8.332 → workbench-0.8.334}/experiments/scatter_zoom_issue.py +0 -0
  394. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/README.md +0 -0
  395. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/_common.py +0 -0
  396. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/molecular_utils/mol_descriptors.py +0 -0
  397. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/molecular_utils/mol_descriptors_3d.py +0 -0
  398. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/molecular_utils/mol_standardize.py +0 -0
  399. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/requirements.txt +0 -0
  400. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/smiles_to_2d_keep_salts_model_script.py +0 -0
  401. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/smiles_to_2d_model_script.py +0 -0
  402. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/smiles_to_3d_fast_model_script.py +0 -0
  403. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/model_scripts/smiles_to_3d_full_model_script.py +0 -0
  404. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/smiles_to_2d_3d_v1.py +0 -0
  405. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/smiles_to_2d_keep_salts_v1.py +0 -0
  406. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/smiles_to_2d_v1.py +0 -0
  407. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/smiles_to_3d_fast_v1.py +0 -0
  408. {workbench-0.8.332 → workbench-0.8.334}/feature_endpoints/smiles_to_3d_full_v1.py +0 -0
  409. {workbench-0.8.332 → workbench-0.8.334}/glue_jobs/create_glue_workflow_with_trigger.py +0 -0
  410. {workbench-0.8.332 → workbench-0.8.334}/glue_jobs/example_glue_job.py +0 -0
  411. {workbench-0.8.332 → workbench-0.8.334}/glue_jobs/glue_mixed_case.py +0 -0
  412. {workbench-0.8.332 → workbench-0.8.334}/mkdocs.yml +0 -0
  413. {workbench-0.8.332 → workbench-0.8.334}/ml_pipelines/hyper_uq.py +0 -0
  414. {workbench-0.8.332 → workbench-0.8.334}/notebooks/Inference_On_Legacy_Models.ipynb +0 -0
  415. {workbench-0.8.332 → workbench-0.8.334}/notebooks/ML_Pipeline_with_Workbench.ipynb +0 -0
  416. {workbench-0.8.332 → workbench-0.8.334}/notebooks/ML_Pipeline_with_Workbench_2.ipynb +0 -0
  417. {workbench-0.8.332 → workbench-0.8.334}/notebooks/Outliers_in_Workbench.ipynb +0 -0
  418. {workbench-0.8.332 → workbench-0.8.334}/notebooks/Regression_Confidence_Experiments.ipynb +0 -0
  419. {workbench-0.8.332 → workbench-0.8.334}/notebooks/Residual_Analysis.ipynb +0 -0
  420. {workbench-0.8.332 → workbench-0.8.334}/notebooks/images/athena_query_aqsol.png +0 -0
  421. {workbench-0.8.332 → workbench-0.8.334}/notebooks/images/aws_dashboard_aqsol.png +0 -0
  422. {workbench-0.8.332 → workbench-0.8.334}/notebooks/images/dashboard_aqsol_features.png +0 -0
  423. {workbench-0.8.332 → workbench-0.8.334}/notebooks/images/model_screenshot.png +0 -0
  424. {workbench-0.8.332 → workbench-0.8.334}/notebooks/images/scp_labs.png +0 -0
  425. {workbench-0.8.332 → workbench-0.8.334}/open_admet/.gitignore +0 -0
  426. {workbench-0.8.332 → workbench-0.8.334}/open_admet/README.md +0 -0
  427. {workbench-0.8.332 → workbench-0.8.334}/open_admet/all_models.py +0 -0
  428. {workbench-0.8.332 → workbench-0.8.334}/open_admet/hello_world.py +0 -0
  429. {workbench-0.8.332 → workbench-0.8.334}/open_admet/images/confidence.jpg +0 -0
  430. {workbench-0.8.332 → workbench-0.8.334}/open_admet/images/open_admet_model.jpg +0 -0
  431. {workbench-0.8.332 → workbench-0.8.334}/open_admet/load_data.py +0 -0
  432. {workbench-0.8.332 → workbench-0.8.334}/open_admet/model_metrics.md +0 -0
  433. {workbench-0.8.332 → workbench-0.8.334}/open_admet/run_inference.py +0 -0
  434. {workbench-0.8.332 → workbench-0.8.334}/open_admet/utils/compute_model_metrics.py +0 -0
  435. {workbench-0.8.332 → workbench-0.8.334}/open_admet_pxr/all_models.py +0 -0
  436. {workbench-0.8.332 → workbench-0.8.334}/open_admet_pxr/create_feature_sets.py +0 -0
  437. {workbench-0.8.332 → workbench-0.8.334}/open_admet_pxr/load_data.py +0 -0
  438. {workbench-0.8.332 → workbench-0.8.334}/open_admet_pxr/pytorch_experiments.py +0 -0
  439. {workbench-0.8.332 → workbench-0.8.334}/presentations/README.md +0 -0
  440. {workbench-0.8.332 → workbench-0.8.334}/pyproject.toml +0 -0
  441. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/Readme.md +0 -0
  442. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/base/inference/Dockerfile +0 -0
  443. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/base/inference/requirements.txt +0 -0
  444. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/base/training/Dockerfile +0 -0
  445. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/base/training/requirements.txt +0 -0
  446. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/build_deploy.sh +0 -0
  447. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/ml_pipelines/ml_pipeline_runner.py +0 -0
  448. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/ml_pipelines/requirements.txt +0 -0
  449. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/pytorch_chem/inference/Dockerfile +0 -0
  450. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/pytorch_chem/inference/requirements.txt +0 -0
  451. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/pytorch_chem/training/Dockerfile +0 -0
  452. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/pytorch_chem/training/requirements.txt +0 -0
  453. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/shared/main.py +0 -0
  454. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/shared/serve +0 -0
  455. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/tests/data/abalone_sm.csv +0 -0
  456. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/tests/example_model_script.py +0 -0
  457. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/tests/run_tests.sh +0 -0
  458. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/tests/test_inference.py +0 -0
  459. {workbench-0.8.332 → workbench-0.8.334}/sagemaker_images/tests/test_training.py +0 -0
  460. {workbench-0.8.332 → workbench-0.8.334}/scripts/active_logs.sh +0 -0
  461. {workbench-0.8.332 → workbench-0.8.334}/scripts/admet/partition_aqsol_alignment.py +0 -0
  462. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/async_typical_usage.py +0 -0
  463. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/athena_ddl_mixed_case.py +0 -0
  464. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/capture_check.py +0 -0
  465. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/check_all_glue_tables.py +0 -0
  466. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/compact_inference_cache.py +0 -0
  467. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/delete_invalid_views.py +0 -0
  468. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/delete_redis_keys.py +0 -0
  469. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/find_orphan_models.py +0 -0
  470. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/inference_cache_concurrency_check.py +0 -0
  471. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/list_datacatalog.py +0 -0
  472. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/migration/copy_glue_database.py +0 -0
  473. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/migration/delete_sageworks_glue_database.sh +0 -0
  474. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/migration/ds_migrate.py +0 -0
  475. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/migration/endpoint_migrate.py +0 -0
  476. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/migration/fs_migrate.py +0 -0
  477. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/migration/model_migrate.py +0 -0
  478. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/populate_3d_perf_reference_compounds.py +0 -0
  479. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/populate_3d_reference_compounds.py +0 -0
  480. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/populate_complexity_skip_reference_compounds.py +0 -0
  481. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/populate_corner_cases_reference_compounds.py +0 -0
  482. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/populate_flexibility_reference_compounds.py +0 -0
  483. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/populate_standardization_reference_compounds.py +0 -0
  484. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/profile_3d_fast.py +0 -0
  485. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/pull_image_digest.py +0 -0
  486. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/redis_reaper.py +0 -0
  487. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/reference_compounds_common.py +0 -0
  488. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/smiles_nan_investigation.py +0 -0
  489. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/spam_list_tags.py +0 -0
  490. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/storage/convert_training_views.py +0 -0
  491. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/storage/migrate_data_source_via_df.py +0 -0
  492. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/storage/migrate_ds_meta.py +0 -0
  493. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/test_3d_descriptors.py +0 -0
  494. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/test_3d_endpoint.py +0 -0
  495. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/test_batch_job_failure.py +0 -0
  496. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/test_no_workbench_config.py +0 -0
  497. {workbench-0.8.332 → workbench-0.8.334}/scripts/admin/verify_async_autoscaling.py +0 -0
  498. {workbench-0.8.332 → workbench-0.8.334}/scripts/ag_table_row_selection.py +0 -0
  499. {workbench-0.8.332 → workbench-0.8.334}/scripts/compare_dataframes.py +0 -0
  500. {workbench-0.8.332 → workbench-0.8.334}/scripts/compare_model_packages.py +0 -0
  501. {workbench-0.8.332 → workbench-0.8.334}/scripts/delete_data_capture.py +0 -0
  502. {workbench-0.8.332 → workbench-0.8.334}/scripts/endpoint_timing.py +0 -0
  503. {workbench-0.8.332 → workbench-0.8.334}/scripts/get_tags.py +0 -0
  504. {workbench-0.8.332 → workbench-0.8.334}/scripts/instantiation_timings.py +0 -0
  505. {workbench-0.8.332 → workbench-0.8.334}/scripts/llm_deploys/deepseek_deploy.py +0 -0
  506. {workbench-0.8.332 → workbench-0.8.334}/scripts/model_cache_refresh.py +0 -0
  507. {workbench-0.8.332 → workbench-0.8.334}/scripts/model_endpoint_sanity_check.py +0 -0
  508. {workbench-0.8.332 → workbench-0.8.334}/scripts/monitor_event_bridge.py +0 -0
  509. {workbench-0.8.332 → workbench-0.8.334}/scripts/onboard_endpoints.py +0 -0
  510. {workbench-0.8.332 → workbench-0.8.334}/scripts/onboard_models.py +0 -0
  511. {workbench-0.8.332 → workbench-0.8.334}/scripts/pubchem/pubchem_example.py +0 -0
  512. {workbench-0.8.332 → workbench-0.8.334}/scripts/pubchem/pubchem_query.py +0 -0
  513. {workbench-0.8.332 → workbench-0.8.334}/scripts/pubchem/pubchem_query_with_cid.py +0 -0
  514. {workbench-0.8.332 → workbench-0.8.334}/scripts/sagemaker_feature_group_issue.py +0 -0
  515. {workbench-0.8.332 → workbench-0.8.334}/scripts/sagemaker_pipeline_model_endpoint.py +0 -0
  516. {workbench-0.8.332 → workbench-0.8.334}/scripts/seaborn_to_plotly.py +0 -0
  517. {workbench-0.8.332 → workbench-0.8.334}/scripts/storage/dns_data_to_features.py +0 -0
  518. {workbench-0.8.332 → workbench-0.8.334}/scripts/storage/generate_jsonl_data.py +0 -0
  519. {workbench-0.8.332 → workbench-0.8.334}/scripts/test_feature_resolution.py +0 -0
  520. {workbench-0.8.332 → workbench-0.8.334}/scripts/test_feature_set_creation.py +0 -0
  521. {workbench-0.8.332 → workbench-0.8.334}/scripts/tox21/test_tox_heuristic.py +0 -0
  522. {workbench-0.8.332 → workbench-0.8.334}/scripts/tox21/tox21_to_df_store.py +0 -0
  523. {workbench-0.8.332 → workbench-0.8.334}/setup.cfg +0 -0
  524. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/__init__.py +0 -0
  525. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/__init__.py +0 -0
  526. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/Readme.md +0 -0
  527. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/__init__.py +0 -0
  528. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/data_source_eda.py +0 -0
  529. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/feature_space_proximity.py +0 -0
  530. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/fingerprint_proximity.py +0 -0
  531. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/multi_task_alignment.py +0 -0
  532. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/projection_2d.py +0 -0
  533. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/proximity.py +0 -0
  534. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/storage/aggregation.py +0 -0
  535. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/storage/feature_resolution.py +0 -0
  536. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/storage/feature_spider.py +0 -0
  537. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/storage/residuals_calculator.py +0 -0
  538. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/storage/row_tagger.py +0 -0
  539. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/dataframe/storage/target_gradients.py +0 -0
  540. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/graph/__init__.py +0 -0
  541. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/graph/heavy/Readme.md +0 -0
  542. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/graph/light/Readme.md +0 -0
  543. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/graph/light/__init__.py +0 -0
  544. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/graph/light/laplacian_smoothness.py +0 -0
  545. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/graph/light/proximity_graph.py +0 -0
  546. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/models/cleanlab_model.py +0 -0
  547. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/models/noise_model.py +0 -0
  548. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/spark/Readme.md +0 -0
  549. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/Readme.md +0 -0
  550. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/__init__.py +0 -0
  551. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/column_stats.py +0 -0
  552. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/correlations.py +0 -0
  553. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/descriptive_stats.py +0 -0
  554. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/outliers.py +0 -0
  555. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/sample_rows.py +0 -0
  556. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/algorithms/sql/value_counts.py +0 -0
  557. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/__init__.py +0 -0
  558. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/compound.py +0 -0
  559. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/data_source.py +0 -0
  560. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/df_store.py +0 -0
  561. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/endpoint.py +0 -0
  562. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/feature_set.py +0 -0
  563. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/graph_store.py +0 -0
  564. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/inference_cache.py +0 -0
  565. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/meta.py +0 -0
  566. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/meta_endpoint.py +0 -0
  567. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/model.py +0 -0
  568. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/monitor.py +0 -0
  569. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/parameter_store.py +0 -0
  570. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/api/public_data.py +0 -0
  571. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/__init__.py +0 -0
  572. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/cached_data_source.py +0 -0
  573. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/cached_endpoint.py +0 -0
  574. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/cached_feature_set.py +0 -0
  575. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/cached/cached_meta.py +0 -0
  576. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/__init__.py +0 -0
  577. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/__init__.py +0 -0
  578. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/artifact.py +0 -0
  579. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/async_endpoint_core.py +0 -0
  580. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/athena_source.py +0 -0
  581. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/data_capture_core.py +0 -0
  582. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/data_source_abstract.py +0 -0
  583. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/data_source_factory.py +0 -0
  584. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/df_store_core.py +0 -0
  585. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/feature_set_core.py +0 -0
  586. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/model_core.py +0 -0
  587. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/artifacts/monitor_core.py +0 -0
  588. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/README.md +0 -0
  589. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/aws_account_clamp.py +0 -0
  590. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/aws_graph_store.py +0 -0
  591. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/aws_meta.py +0 -0
  592. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/aws_secrets_manager.py +0 -0
  593. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/aws_session.py +0 -0
  594. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/aws/cache_dataframe.py +0 -0
  595. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/azure/README.md +0 -0
  596. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/cloud_meta.py +0 -0
  597. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/cloud_platform/gcp/README.md +0 -0
  598. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/pipelines/__init__.py +0 -0
  599. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/pipelines/pipeline_meta.py +0 -0
  600. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/Readme.md +0 -0
  601. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/__init__.py +0 -0
  602. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/__init__.py +0 -0
  603. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/heavy/__init__.py +0 -0
  604. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/heavy/s3_heavy_to_data_source.py +0 -0
  605. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/light/__init__.py +0 -0
  606. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/light/csv_to_data_source.py +0 -0
  607. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/light/json_to_data_source.py +0 -0
  608. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_loaders/light/s3_to_data_source_light.py +0 -0
  609. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/__init__.py +0 -0
  610. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/heavy/__init__.py +0 -0
  611. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/heavy/emr/Readme.md +0 -0
  612. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/heavy/glue/Readme.md +0 -0
  613. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/light/__init__.py +0 -0
  614. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/light/clean_data.py +0 -0
  615. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_data/light/data_to_data_light.py +0 -0
  616. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/__init__.py +0 -0
  617. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/heavy/__init__.py +0 -0
  618. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/heavy/chunk/__init__.py +0 -0
  619. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/heavy/chunk/data_to_features_chunk.py +0 -0
  620. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/heavy/emr/Readme.md +0 -0
  621. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/heavy/glue/Readme.md +0 -0
  622. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/heavy/storage/data_to_features_heavy_old.py +0 -0
  623. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/light/__init__.py +0 -0
  624. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/light/data_to_features_light.py +0 -0
  625. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/data_to_features/light/molecular_descriptors.py +0 -0
  626. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/features_to_features/__init__.py +0 -0
  627. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/features_to_features/heavy/emr/Readme.md +0 -0
  628. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/features_to_features/heavy/glue/Readme.md +0 -0
  629. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/features_to_model/__init__.py +0 -0
  630. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/features_to_model/features_to_model.py +0 -0
  631. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/model_to_endpoint/__init__.py +0 -0
  632. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/model_to_endpoint/model_to_endpoint.py +0 -0
  633. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/pandas_transforms/__init__.py +0 -0
  634. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/pandas_transforms/data_to_pandas.py +0 -0
  635. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/pandas_transforms/features_to_pandas.py +0 -0
  636. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/pandas_transforms/pandas_to_data.py +0 -0
  637. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/pandas_transforms/pandas_to_features.py +0 -0
  638. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/pandas_transforms/pandas_to_features_chunked.py +0 -0
  639. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/transforms/transform.py +0 -0
  640. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/__init__.py +0 -0
  641. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/column_subset_view.py +0 -0
  642. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/computation_view.py +0 -0
  643. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/create_view.py +0 -0
  644. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/display_view.py +0 -0
  645. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/inference_view.py +0 -0
  646. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/pandas_to_view.py +0 -0
  647. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/storage/mdq_view.py +0 -0
  648. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/training_view.py +0 -0
  649. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/view.py +0 -0
  650. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/core/views/view_utils.py +0 -0
  651. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_script_utils/chemprop_shap_utils.py +0 -0
  652. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_script_utils/ensemble_utils.py +0 -0
  653. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_script_utils/model_script_utils.py +0 -0
  654. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_script_utils/pytorch_utils.py +0 -0
  655. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_script_utils/training_harness.py +0 -0
  656. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/chemprop/chemprop_shap_utils.py +0 -0
  657. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/chemprop/model_script_utils.py +0 -0
  658. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/chemprop/requirements.txt +0 -0
  659. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/Readme.md +0 -0
  660. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/fingerprints.py +0 -0
  661. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/mol_descriptors.py +0 -0
  662. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/mol_standardize.py +0 -0
  663. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/molecular_descriptors.py +0 -0
  664. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/morgan_fingerprints.py +0 -0
  665. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/chem_info/requirements.txt +0 -0
  666. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/network_security/Readme.md +0 -0
  667. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/proximity/Readme.md +0 -0
  668. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/proximity/feature_space_proximity.py +0 -0
  669. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/proximity/feature_space_proximity.template +0 -0
  670. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/proximity/requirements.txt +0 -0
  671. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/Readme.md +0 -0
  672. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/bayesian_ridge.template +0 -0
  673. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/ensemble_xgb.template +0 -0
  674. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/feature_space_proximity.py +0 -0
  675. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/gaussian_process.template +0 -0
  676. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/ngboost.template +0 -0
  677. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_models/uq_models/requirements.txt +0 -0
  678. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_script_example/custom_model_script.py +0 -0
  679. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/custom_script_example/requirements.txt +0 -0
  680. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/meta_endpoint/aggregation_nodes.py +0 -0
  681. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/meta_endpoint/ensemble_utils.py +0 -0
  682. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/meta_endpoint/meta_endpoint.template +0 -0
  683. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/meta_endpoint/meta_endpoint_dag.py +0 -0
  684. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/pytorch_model/model_script_utils.py +0 -0
  685. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/pytorch_model/pytorch.template +0 -0
  686. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/pytorch_model/pytorch_utils.py +0 -0
  687. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/pytorch_model/requirements.txt +0 -0
  688. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/scikit_learn/requirements.txt +0 -0
  689. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/scikit_learn/scikit_learn.template +0 -0
  690. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/script_generation.py +0 -0
  691. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/xgb_model/model_script_utils.py +0 -0
  692. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/xgb_model/requirements.txt +0 -0
  693. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/model_scripts/xgb_model/xgb_model.template +0 -0
  694. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/repl/__init__.py +0 -0
  695. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/repl/workbench_shell.py +0 -0
  696. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/resources/open_source_api.key +0 -0
  697. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/resources/signature_verify_pub.pem +0 -0
  698. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/check_double_bond_stereo.py +0 -0
  699. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/df_store.py +0 -0
  700. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/endpoint_test.py +0 -0
  701. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/ensemble_sim.py +0 -0
  702. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/glue_launcher.py +0 -0
  703. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/lambda_test.py +0 -0
  704. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/ml_pipeline_batch.py +0 -0
  705. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/ml_pipeline_launcher.py +0 -0
  706. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/ml_pipeline_sqs.py +0 -0
  707. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/monitor_cloud_watch.py +0 -0
  708. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/redis_expire.py +0 -0
  709. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/redis_report.py +0 -0
  710. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/show_config.py +0 -0
  711. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/scripts/training_test.py +0 -0
  712. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/dark/base_css.url +0 -0
  713. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/dark/custom.css +0 -0
  714. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/light/base_css.url +0 -0
  715. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/light/branding.json +0 -0
  716. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/light/custom.css +0 -0
  717. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/midnight_blue/base_css.url +0 -0
  718. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/midnight_blue/branding.json +0 -0
  719. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/themes/midnight_blue/custom.css +0 -0
  720. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/__init__.py +0 -0
  721. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/aggregation_nodes.py +0 -0
  722. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/ai_compound_generator.py +0 -0
  723. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/ai_summary.py +0 -0
  724. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/ai_synth.py +0 -0
  725. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/athena_utils.py +0 -0
  726. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/aws_utils.py +0 -0
  727. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/bulk_utils.py +0 -0
  728. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/cache.py +0 -0
  729. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/__init__.py +0 -0
  730. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/fingerprints.py +0 -0
  731. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/misc.py +0 -0
  732. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/mol_descriptors.py +0 -0
  733. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/mol_descriptors_3d.py +0 -0
  734. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/mol_standardize.py +0 -0
  735. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/mol_tagging.py +0 -0
  736. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/projections.py +0 -0
  737. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/salts.py +0 -0
  738. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/sdf.py +0 -0
  739. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/toxicity.py +0 -0
  740. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chem_utils/vis.py +0 -0
  741. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/chemprop_utils.py +0 -0
  742. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/cloudwatch_handler.py +0 -0
  743. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/cloudwatch_utils.py +0 -0
  744. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/color_utils.py +0 -0
  745. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/config_manager.py +0 -0
  746. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/dashboard_metrics.py +0 -0
  747. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/datetime_utils.py +0 -0
  748. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/deprecated_utils.py +0 -0
  749. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/df_to_endpoint.py +0 -0
  750. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/distribution_stats.py +0 -0
  751. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/ecs_info.py +0 -0
  752. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/endpoint_autoscaling.py +0 -0
  753. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/endpoint_metrics.py +0 -0
  754. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/endpoint_utils.py +0 -0
  755. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/ensemble_simulator.py +0 -0
  756. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/extract_model_artifact.py +0 -0
  757. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/glue_utils.py +0 -0
  758. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/graph_utils.py +0 -0
  759. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/inference_cache_utils.py +0 -0
  760. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/ipython_utils.py +0 -0
  761. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/json_utils.py +0 -0
  762. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/lambda_utils.py +0 -0
  763. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/license_manager.py +0 -0
  764. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/log_utils.py +0 -0
  765. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/markdown_utils.py +0 -0
  766. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/meta_endpoint_dag.py +0 -0
  767. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/metrics_utils.py +0 -0
  768. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/model_utils.py +0 -0
  769. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/monitor_utils.py +0 -0
  770. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/multi_task.py +0 -0
  771. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/pandas_utils.py +0 -0
  772. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/performance_utils.py +0 -0
  773. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/plot_utils.py +0 -0
  774. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/plugin_manager.py +0 -0
  775. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/prox_utils.py +0 -0
  776. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/pytorch_utils.py +0 -0
  777. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/redis_cache.py +0 -0
  778. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/repl_utils.py +0 -0
  779. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/s3_utils.py +0 -0
  780. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/shap_utils.py +0 -0
  781. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/shapley_values.py +0 -0
  782. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/symbols.py +0 -0
  783. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/synthetic_data_generator.py +0 -0
  784. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/theme_manager.py +0 -0
  785. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/trace_calls.py +0 -0
  786. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/type_abbrev.py +0 -0
  787. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/workbench_cache.py +0 -0
  788. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/workbench_event_bridge.py +0 -0
  789. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/workbench_logging.py +0 -0
  790. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/workbench_sqs.py +0 -0
  791. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/xgboost_local_crossfold.py +0 -0
  792. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/utils/xgboost_model_utils.py +0 -0
  793. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/component_interface.py +0 -0
  794. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/correlation_matrix.py +0 -0
  795. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/data_details_markdown.py +0 -0
  796. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/endpoint_metric_plots.py +0 -0
  797. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/experiments/dashboard_metric_plots.py +0 -0
  798. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/experiments/outlier_plot.py +0 -0
  799. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugin_interface.py +0 -0
  800. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugin_unit_test.py +0 -0
  801. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/confusion_explorer.py +0 -0
  802. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/confusion_matrix.py +0 -0
  803. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/dashboard_status.py +0 -0
  804. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/data_details.py +0 -0
  805. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/endpoint_details.py +0 -0
  806. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/generated_compounds.py +0 -0
  807. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/graph_plot.py +0 -0
  808. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/license_details.py +0 -0
  809. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/model_details.py +0 -0
  810. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/model_plot.py +0 -0
  811. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/molecule_panel.py +0 -0
  812. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/molecule_viewer.py +0 -0
  813. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/proximity_mini_graph.py +0 -0
  814. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/plugins/shap_summary_plot.py +0 -0
  815. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/regression_plot.py +0 -0
  816. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/settings_menu.py +0 -0
  817. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/components/violin_plots.py +0 -0
  818. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/page_views/data_sources_page_view.py +0 -0
  819. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/page_views/endpoints_page_view.py +0 -0
  820. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/page_views/feature_sets_page_view.py +0 -0
  821. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/page_views/main_page.py +0 -0
  822. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/page_views/models_page_view.py +0 -0
  823. {workbench-0.8.332 → workbench-0.8.334}/src/workbench/web_interface/page_views/page_view.py +0 -0
  824. {workbench-0.8.332 → workbench-0.8.334}/src/workbench.egg-info/dependency_links.txt +0 -0
  825. {workbench-0.8.332 → workbench-0.8.334}/src/workbench.egg-info/entry_points.txt +0 -0
  826. {workbench-0.8.332 → workbench-0.8.334}/src/workbench.egg-info/requires.txt +0 -0
  827. {workbench-0.8.332 → workbench-0.8.334}/src/workbench.egg-info/top_level.txt +0 -0
  828. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_aqsol_artifacts.py +0 -0
  829. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_aqsol_artifacts_all.py +0 -0
  830. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_aqsol_rt_artifacts.py +0 -0
  831. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_basic_test_artifacts.py +0 -0
  832. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_copy_artifacts.py +0 -0
  833. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_empty_model_group.py +0 -0
  834. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_endpoints_for_timing.py +0 -0
  835. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_graph_artifacts.py +0 -0
  836. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_knn_artifacts.py +0 -0
  837. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_meta_endpoints.py +0 -0
  838. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_proximity_models.py +0 -0
  839. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_quant_regression_artifacts.py +0 -0
  840. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_realtime_endpoint.py +0 -0
  841. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_sagemaker_pipeline_model.py +0 -0
  842. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_training_adjusted_artifacts.py +0 -0
  843. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/create_wine_artifacts.py +0 -0
  844. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/delete_stress_test_artifacts.py +0 -0
  845. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/delete_test_artifacts.py +0 -0
  846. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/hyper_testing.py +0 -0
  847. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/regression_ensemble.py +0 -0
  848. {workbench-0.8.332 → workbench-0.8.334}/test_artifacts/stress_test_aws.py +0 -0
  849. {workbench-0.8.332 → workbench-0.8.334}/tests/README.md +0 -0
  850. {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/data_source_tests.py +0 -0
  851. {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/empty_model_group.py +0 -0
  852. {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/featureset_ingest_boundaries.py +0 -0
  853. {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/featureset_tests.py +0 -0
  854. {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/graph_tests.py +0 -0
  855. {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/model_metrics_tests.py +0 -0
  856. {workbench-0.8.332 → workbench-0.8.334}/tests/artifacts/model_tests.py +0 -0
  857. {workbench-0.8.332 → workbench-0.8.334}/tests/aws_account/aws_account_clamp_tests.py +0 -0
  858. {workbench-0.8.332 → workbench-0.8.334}/tests/cached/cached_artifact_tests.py +0 -0
  859. {workbench-0.8.332 → workbench-0.8.334}/tests/cached/cached_meta_tests.py +0 -0
  860. {workbench-0.8.332 → workbench-0.8.334}/tests/chem_info/test_standardization_reference.py +0 -0
  861. {workbench-0.8.332 → workbench-0.8.334}/tests/chem_info/test_tautomerization.py +0 -0
  862. {workbench-0.8.332 → workbench-0.8.334}/tests/corner_cases/end_to_end.py +0 -0
  863. {workbench-0.8.332 → workbench-0.8.334}/tests/df_store/df_store_tests.py +0 -0
  864. {workbench-0.8.332 → workbench-0.8.334}/tests/endpoints/endpoint_tests.py +0 -0
  865. {workbench-0.8.332 → workbench-0.8.334}/tests/endpoints/inference_cache_tests.py +0 -0
  866. {workbench-0.8.332 → workbench-0.8.334}/tests/endpoints/meta_endpoint_dag_tests.py +0 -0
  867. {workbench-0.8.332 → workbench-0.8.334}/tests/feature_endpoints/test_3d_complexity_skips.py +0 -0
  868. {workbench-0.8.332 → workbench-0.8.334}/tests/feature_endpoints/test_3d_consistency.py +0 -0
  869. {workbench-0.8.332 → workbench-0.8.334}/tests/feature_endpoints/test_3d_corner_cases.py +0 -0
  870. {workbench-0.8.332 → workbench-0.8.334}/tests/feature_endpoints/test_3d_flexibility_comparison.py +0 -0
  871. {workbench-0.8.332 → workbench-0.8.334}/tests/feature_endpoints/test_smiles_to_3d_fast_v1.py +0 -0
  872. {workbench-0.8.332 → workbench-0.8.334}/tests/feature_endpoints/test_smiles_to_3d_full_v1.py +0 -0
  873. {workbench-0.8.332 → workbench-0.8.334}/tests/lambda/decompress_layers.py +0 -0
  874. {workbench-0.8.332 → workbench-0.8.334}/tests/pandas_tests/test_drift.py +0 -0
  875. {workbench-0.8.332 → workbench-0.8.334}/tests/pandas_tests/test_multi_task.py +0 -0
  876. {workbench-0.8.332 → workbench-0.8.334}/tests/pandas_tests/test_temporal_split.py +0 -0
  877. {workbench-0.8.332 → workbench-0.8.334}/tests/parameter_store/param_store_tests.py +0 -0
  878. {workbench-0.8.332 → workbench-0.8.334}/tests/pipelines/test_pipeline_launcher.py +0 -0
  879. {workbench-0.8.332 → workbench-0.8.334}/tests/pipelines/test_pipeline_meta.py +0 -0
  880. {workbench-0.8.332 → workbench-0.8.334}/tests/plugin_tests/crashing_plugin.py +0 -0
  881. {workbench-0.8.332 → workbench-0.8.334}/tests/pytorch/pytorch_hello.py +0 -0
  882. {workbench-0.8.332 → workbench-0.8.334}/tests/requirements-dev.txt +0 -0
  883. {workbench-0.8.332 → workbench-0.8.334}/tests/specific/capital_tests.py +0 -0
  884. {workbench-0.8.332 → workbench-0.8.334}/tests/specific/column_changes.py +0 -0
  885. {workbench-0.8.332 → workbench-0.8.334}/tests/specific/config_manager.py +0 -0
  886. {workbench-0.8.332 → workbench-0.8.334}/tests/specific/deletion_tests.py +0 -0
  887. {workbench-0.8.332 → workbench-0.8.334}/tests/specific/public_data_test.py +0 -0
  888. {workbench-0.8.332 → workbench-0.8.334}/tests/specific/shap_tests.py +0 -0
  889. {workbench-0.8.332 → workbench-0.8.334}/tests/specific/spawn_test.py +0 -0
  890. {workbench-0.8.332 → workbench-0.8.334}/tests/specific/tag_tests.py +0 -0
  891. {workbench-0.8.332 → workbench-0.8.334}/tests/transforms/data_to_data_tests.py +0 -0
  892. {workbench-0.8.332 → workbench-0.8.334}/tests/transforms/data_to_features_tests.py +0 -0
  893. {workbench-0.8.332 → workbench-0.8.334}/tests/transforms/features_to_model_tests.py +0 -0
  894. {workbench-0.8.332 → workbench-0.8.334}/tests/transforms/model_to_endpoint_tests.py +0 -0
  895. {workbench-0.8.332 → workbench-0.8.334}/tests/transforms/pandas_to_data_tests.py +0 -0
  896. {workbench-0.8.332 → workbench-0.8.334}/tests/transforms/pandas_to_features_test.py +0 -0
  897. {workbench-0.8.332 → workbench-0.8.334}/tests/views/view_tests.py +0 -0
  898. {workbench-0.8.332 → workbench-0.8.334}/tests/views/view_tests_complex.py +0 -0
  899. {workbench-0.8.332 → workbench-0.8.334}/tests/web_components/confusion_matrix_test.py +0 -0
  900. {workbench-0.8.332 → workbench-0.8.334}/tests/web_components/correlation_matrix_test.py +0 -0
  901. {workbench-0.8.332 → workbench-0.8.334}/tests/web_components/graph_plot_test.py +0 -0
  902. {workbench-0.8.332 → workbench-0.8.334}/tests/web_components/plugin_interface_test.py +0 -0
  903. {workbench-0.8.332 → workbench-0.8.334}/tests/web_components/scatter_plot_test.py +0 -0
  904. {workbench-0.8.332 → workbench-0.8.334}/tox.ini +0 -0
  905. {workbench-0.8.332 → workbench-0.8.334}/ui_testing/assets/custom.css +0 -0
  906. {workbench-0.8.332 → workbench-0.8.334}/ui_testing/table_comparison.py +0 -0
  907. {workbench-0.8.332 → workbench-0.8.334}/ui_testing/theme_switching.py +0 -0
  908. {workbench-0.8.332 → workbench-0.8.334}/ui_testing/theme_switching_2.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: workbench
3
- Version: 0.8.332
3
+ Version: 0.8.334
4
4
  Summary: Workbench: A Dashboard and Python API for creating and deploying AWS SageMaker Model Pipelines
5
5
  Author-email: SuperCowPowers LLC <support@supercowpowers.com>
6
6
  License: MIT License
@@ -31,7 +31,7 @@ open('/tmp/deps.txt', 'w').write('\n'.join(deps))" && \
31
31
  rm /tmp/pyproject.toml /tmp/deps.txt
32
32
 
33
33
  # Layer 3: Workbench only (changes often, ~20MB)
34
- ARG WORKBENCH_VERSION=0.8.309
34
+ ARG WORKBENCH_VERSION=0.8.333
35
35
  RUN pip install --no-cache-dir --no-deps "workbench[ui]==${WORKBENCH_VERSION}"
36
36
 
37
37
  # Copy app code and configuration (after pip installs to avoid cache invalidation)
@@ -12,7 +12,7 @@ print(f"Account: {aws_account}")
12
12
  print(f"Region: {aws_region}")
13
13
 
14
14
  # When you want a different docker image change this line
15
- dashboard_image = "public.ecr.aws/m6i5k1r2/workbench_dashboard:v0_8_309_amd64"
15
+ dashboard_image = "public.ecr.aws/m6i5k1r2/workbench_dashboard:v0_8_333_amd64"
16
16
 
17
17
  # Workbench Configuration
18
18
  try:
@@ -16,7 +16,7 @@ Every Workbench model — whether XGBoost, PyTorch, or ChemProp — is actually
16
16
  The idea behind using ensemble disagreement as an uncertainty signal is well-established in the ML literature (see [Lakshminarayanan et al., 2017](https://arxiv.org/abs/1612.01474)): **when the models disagree, the prediction is less reliable.** If all 5 models predict log CLint = 2.4 ± 0.02, we have reason to be confident. If they predict 2.4 ± 0.71, something about that compound is tricky and we should be cautious.
17
17
 
18
18
  <figure style="margin: 20px auto; text-align: center;">
19
- <img src="../../images/ensemble_disagreement.svg" alt="Ensemble disagreement drives confidence" style="max-width: 800px; width: 100%; min-height: 250px;">
19
+ <img src="../../images/ensemble_disagreement.svg" alt="Ensemble disagreement drives confidence" style="width: 100%; height: auto; min-height: 400px;">
20
20
  </figure>
21
21
 
22
22
  This ensemble standard deviation (`prediction_std`) is the raw uncertainty signal. It comes directly from the model itself — not from an external surrogate or statistical assumption. In our testing, it correlates strongly with actual prediction error (Spearman r > 0.85 for ChemProp on MLM CLint from the [OpenADMET Blind Challenge](https://openadmet.org/)), though your mileage will vary depending on the dataset and model type.
@@ -52,35 +52,33 @@ In practice, this gives us intervals that inherit the ensemble's discrimination
52
52
 
53
53
  ## Confidence Scores
54
54
 
55
- With calibrated intervals in hand, we compute a **confidence score** between 0 and 1 for every prediction. We explored several approaches (exponential decay, z-score normalization) and settled on a simple percentile-rank method inspired by the nonparametric statistics literature:
55
+ With calibrated intervals in hand, we compute a **confidence score** between 0 and 1 for every prediction. The naïve approach is to use ensemble std directly: rank a prediction's std against the cal-set distribution. That works most of the time but has a known failure mode — when the ensemble unanimously agrees on a prediction that's nonetheless wrong, std-based confidence has no way to surface the problem.
56
56
 
57
- <figure style="margin: 20px auto; text-align: center;">
58
- <img src="../../images/confidence_percentile.svg" alt="Confidence bands showing prediction uncertainty" style="max-width: 800px; width: 100%; min-height: 300px;">
59
- </figure>
57
+ This happens most often near **censoring boundaries** or in dense regions of target space. Solubility is a textbook example: kinetic-sol assays cap at ~-3.5 LogS, producing a large training cluster at -3.5 to -3.7. When the model encounters a chemically similar compound whose true LogS is much lower (say -5.5), all 5 ensemble members tend to converge on the attractor and predict -3.6 anyway — including the one that didn't see the compound during training. The ensemble agreement is genuine but uninformative; the prediction is confidently wrong.
60
58
 
61
- Specifically, confidence is the **percentile rank** of the prediction's `prediction_std` within the training set's std distribution:
59
+ To address this, we use a **residual-aware confidence** metric. Instead of ranking std directly, we fit a locally adaptive calibrator that maps `(prediction, prediction_std) expected |residual|`, then rank the *expected residual* against the cal-set distribution:
62
60
 
63
61
  ```
64
- confidence = 1 - percentile_rank(prediction_std)
62
+ expected_residual = calibrator(prediction, prediction_std)
63
+ confidence = 1 - percentile_rank(expected_residual)
65
64
  ```
66
65
 
67
- A confidence of **0.7** means this prediction's ensemble disagreement is lower than 70% of the training set it's a relatively tight prediction. A confidence of **0.1** means 90% of training predictions had lower uncertaintythis compound is an outlier in some way.
66
+ The calibrator is fit on the cross-fold validation data, where every compound's residual comes from a model that didn't see it during training. We bin predictions into quantile bins along the prediction axis and fit an `IsotonicRegression(std → |residual|)` within each bin. At inference this becomes a fast `np.interp` lookupno sklearn dependency in production.
68
67
 
69
- We like this approach for a few reasons:
68
+ This is the standard **locally adaptive conformal prediction** approach from [Lei et al. (2018)](https://www.tandfonline.com/doi/abs/10.1080/01621459.2017.1307116) applied to the scalar confidence score: instead of treating ensemble disagreement as a constant indicator of uncertainty, we let the data tell us how std actually relates to error in different regions of prediction space.
70
69
 
71
- - **Full range**: Confidence scores spread across the entire 0–1 range, rather than clustering near zero
72
- - **Directly interpretable**: "confidence 0.7" means "tighter than 70% of training predictions"
73
- - **No arbitrary parameters**: No decay rates or normalization constants to tune
74
- - **Grounded in the calibration data**: Derived from the same distribution used for interval calibration
70
+ <figure style="margin: 20px auto; text-align: center;">
71
+ <img src="../../images/confidence_percentile.svg" alt="Residual-aware confidence: same std means different expected error depending on prediction band" style="max-width: 800px; width: 100%; min-height: 300px;">
72
+ </figure>
75
73
 
76
- That said, percentile-rank confidence is **relative, not absolute**. A confidence of 0.7 means "tighter than 70% of training predictions," not "70% probability of being correct" two different models trained on the same data will produce similar confidence *distributions* even if one is far more accurate. The calibrated conformal intervals (`q_025`, `q_05`, `q_975`) are where the absolute-coverage guarantee lives; the scalar confidence is for ranking and visualization. We think this is an acceptable trade-off for now, but adding an error-calibrated absolute confidence (analogous to what classification does with isotonic P(correct)) is something we're considering.
74
+ **Interpretation:** confidence of 0.7 means "this prediction's expected error is lower than 70% of cal-set predictions." Unlike the naïve std-percentile approach, this is now a *probabilistically meaningful* statement: among compounds with similar `(prediction, std)` signatures, roughly 70% will have lower error than this one. Two compounds with identical std but predictions in different regions of target space can now get different confidence scores which is the right behavior, because std means different things in different regions.
77
75
 
78
76
  <figure style="margin: 20px auto; text-align: center;">
79
77
  <img src="../../images/uq_conf_residual.png" alt="Confidence vs residual plot" style="max-width: 800px; width: 100%;">
80
78
  <figcaption><em>Confidence vs. prediction residual — high-confidence predictions (right) cluster near zero error, while low-confidence predictions (left) show the largest residuals.</em></figcaption>
81
79
  </figure>
82
80
 
83
- You'll notice the outlier around confidence ~0.55 with a residual near 1.0the model is moderately confident on that compound but clearly getting it wrong. We're not going to pretend this doesn't happen. The value of this plot is that it gives us **visibility** into exactly these cases, so we can investigate individual compounds where the model's confidence doesn't match reality.
81
+ A residual-aware metric isn't magic. When good and bad predictions share the same `(prediction, std)` signature same prediction, same ensemble agreement no post-hoc calibrator can distinguish them. In our solubility example, ~96% of compounds with `prediction ≈ -3.6` and tight std are correctly predicted; the remaining 4% have true values far from -3.6. The calibrator will assign them all roughly the same moderate-high confidence, because that's what the population-level evidence supports. Distinguishing the unlucky 4% requires either fixing the upstream model bias (e.g., censored-aware training with `bounded_loss=True`) or adding chemistry-aware applicability-domain features — both of which are orthogonal to the UQ pipeline itself.
84
82
 
85
83
  ## Classification Confidence
86
84
 
@@ -170,7 +168,8 @@ We want to be upfront about the limitations. Confidence reflects how much the en
170
168
  - **Novel chemistry may get falsely high confidence** if it happens to fall in a region where the models extrapolate consistently.
171
169
  - **Confidence is relative to the training set.** A confidence of 0.9 on a kinase solubility model doesn't transfer to a PROTAC dataset.
172
170
  - **Conformal coverage assumes exchangeability.** The guarantee holds when test data comes from the same distribution as calibration data. For out-of-distribution compounds, coverage may degrade.
173
- - **Training-exposure bias in calibration.** Calibration `prediction_std` is computed by running all 5 ensemble members on the full training set, so every row was seen by 4 of the 5 models during training. Truly novel molecules (seen by 0 of 5) will tend to produce larger stds than the calibration distribution captures, which can make confidence skew optimistic-then-low on out-of-distribution chemistry. Workbench now defaults to **scaffold-based cross-validation splits** (Bemis-Murcko) for any dataset with a SMILES column this makes confidence calibration reflect scaffold-hopping performance rather than same-scaffold interpolation. For stricter "novel chemistry" evaluation, set `split_strategy="butina"` (Morgan-fingerprint clustering).
171
+ - **Training-exposure bias in calibration.** Calibration `prediction_std` is computed by running all 5 ensemble members on the full training set, so every row was seen by 4 of the 5 models during training. Truly novel molecules (seen by 0 of 5) will tend to produce larger stds than the calibration distribution captures, which can make confidence skew optimistic-then-low on out-of-distribution chemistry. The residual-aware calibrator helps here by anchoring confidence to historical *errors* rather than raw std — but it doesn't eliminate the bias. Workbench now defaults to **scaffold-based cross-validation splits** (Bemis-Murcko) for any dataset with a SMILES column, which makes confidence calibration reflect scaffold-hopping performance rather than same-scaffold interpolation. For stricter "novel chemistry" evaluation, set `split_strategy="butina"` (Morgan-fingerprint clustering).
172
+ - **Indistinguishable populations within a calibration bin.** When a chunk of compounds shares the same `(prediction, std)` signature but a subset are wrong (e.g. censored-data attractors in solubility), the residual-aware metric assigns them all roughly the same confidence — population-correct, but unable to flag individual unlucky misses. Addressing this requires either upstream model fixes (censored-aware training) or chemistry-aware applicability-domain features, neither of which is part of the confidence pipeline itself.
174
173
 
175
174
  For truly out-of-distribution detection, we'd recommend pairing confidence with applicability domain analysis (e.g., feature-space proximity to training data). This is something we're actively exploring for future Workbench releases.
176
175
 
@@ -182,7 +181,7 @@ Here's how Workbench approaches model confidence today:
182
181
 
183
182
  1. **Ensemble disagreement** — Building on [Lakshminarayanan et al.](https://arxiv.org/abs/1612.01474), the 5-fold CV ensemble provides `prediction_std` as the raw uncertainty signal
184
183
  2. **Conformal calibration** — Following [Angelopoulos & Bates](https://arxiv.org/abs/2107.07511), we scale std into prediction intervals with target coverage (80% CI → ~80% coverage)
185
- 3. **Percentile-rank confidence** — Ranks each prediction's std against the training distribution (0.0 1.0)
184
+ 3. **Residual-aware confidence** — Following [Lei et al. (2018)](https://www.tandfonline.com/doi/abs/10.1080/01621459.2017.1307116), a locally adaptive calibrator maps `(prediction, std) → expected |residual|`, then ranks the expected residual against the cal-set distribution. This surfaces the failure mode where ensemble disagreement is artificially low in dense regions of target space (e.g. near censoring boundaries)
186
185
 
187
186
  **Classification models:**
188
187
 
@@ -197,6 +196,7 @@ Both approaches share the same philosophy: leverage the ensemble's own disagreem
197
196
  - [Lakshminarayanan et al., "Simple and Scalable Predictive Uncertainty Estimation using Deep Ensembles" (2017)](https://arxiv.org/abs/1612.01474) — Foundational work on using ensemble disagreement for uncertainty
198
197
  - [Vovk et al., "Algorithmic Learning in a Random World"](https://link.springer.com/book/10.1007/978-3-031-06649-8) — Foundational text on conformal prediction
199
198
  - [Angelopoulos & Bates, "Conformal Prediction: A Gentle Introduction" (2021)](https://arxiv.org/abs/2107.07511) — Accessible introduction to conformal methods
199
+ - [Lei et al., "Distribution-Free Predictive Inference for Regression" (2018)](https://www.tandfonline.com/doi/abs/10.1080/01621459.2017.1307116) — Locally adaptive conformal prediction; basis for the residual-aware confidence calibrator
200
200
  - [Gneiting et al., "Probabilistic Forecasts, Calibration and Sharpness" (2007)](https://doi.org/10.1111/j.1467-9868.2007.00587.x) — Calibration vs. discrimination framework
201
201
  - [Ovadia et al., "Can You Trust Your Model's Uncertainty?" (2019)](https://arxiv.org/abs/1906.02530) — Analysis of ensemble UQ under dataset shift
202
202
  - [Gillis et al., "Variance-Gated Ensembles: An Epistemic-Aware Framework" (2025)](https://arxiv.org/abs/2602.08142) — VGMU approach for combining margin and ensemble variance in classification
@@ -0,0 +1,118 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 520" width="100%" height="auto">
2
+ <defs>
3
+ <linearGradient id="highConf" x1="0" y1="0" x2="0" y2="1">
4
+ <stop offset="0%" stop-color="#00d4aa"/>
5
+ <stop offset="100%" stop-color="#00a080"/>
6
+ </linearGradient>
7
+ <linearGradient id="midConf" x1="0" y1="0" x2="0" y2="1">
8
+ <stop offset="0%" stop-color="#ff9f43"/>
9
+ <stop offset="100%" stop-color="#cc7a30"/>
10
+ </linearGradient>
11
+ <linearGradient id="lowConf" x1="0" y1="0" x2="0" y2="1">
12
+ <stop offset="0%" stop-color="#ff6b6b"/>
13
+ <stop offset="100%" stop-color="#c44040"/>
14
+ </linearGradient>
15
+ <linearGradient id="modelBox" x1="0" y1="0" x2="0" y2="1">
16
+ <stop offset="0%" stop-color="#3a86ff"/>
17
+ <stop offset="100%" stop-color="#2a66cc"/>
18
+ </linearGradient>
19
+ <linearGradient id="calibBox" x1="0" y1="0" x2="0" y2="1">
20
+ <stop offset="0%" stop-color="#9b59b6"/>
21
+ <stop offset="100%" stop-color="#7d3f96"/>
22
+ </linearGradient>
23
+ </defs>
24
+
25
+ <!-- Title -->
26
+ <text x="450" y="38" text-anchor="middle" fill="#ccc" font-family="Helvetica, Arial" font-size="24" font-weight="bold">Ensemble Std + Region → Confidence</text>
27
+ <text x="450" y="64" text-anchor="middle" fill="#999" font-family="Helvetica, Arial" font-size="16">via the residual-aware calibrator</text>
28
+
29
+ <!-- ============ PANEL 1: Models agree, sparse region ============ -->
30
+ <text x="155" y="100" text-anchor="middle" fill="#00d4aa" font-family="Helvetica, Arial" font-size="18" font-weight="bold">Models Agree</text>
31
+ <text x="155" y="120" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="14">in a typical region</text>
32
+
33
+ <rect x="35" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
34
+ <text x="75" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.41</text>
35
+ <rect x="120" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
36
+ <text x="160" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.38</text>
37
+ <rect x="205" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
38
+ <text x="245" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.43</text>
39
+ <rect x="80" y="175" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
40
+ <text x="120" y="196" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.39</text>
41
+ <rect x="165" y="175" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
42
+ <text x="205" y="196" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.40</text>
43
+
44
+ <line x1="155" y1="215" x2="155" y2="240" stroke="#999" stroke-width="2"/>
45
+ <polygon points="155,248 149,236 161,236" fill="#999"/>
46
+ <text x="155" y="270" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="16">pred=2.40, std=0.02</text>
47
+
48
+ <rect x="40" y="285" width="230" height="60" rx="10" fill="url(#calibBox)" opacity="0.25" stroke="#9b59b6" stroke-width="1.5"/>
49
+ <text x="155" y="307" text-anchor="middle" fill="#c89bd9" font-family="Helvetica, Arial" font-size="15" font-weight="bold">Residual Calibrator</text>
50
+ <text x="155" y="328" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="13">historical |resid| ≈ 0.05</text>
51
+
52
+ <line x1="155" y1="355" x2="155" y2="385" stroke="#00d4aa" stroke-width="3"/>
53
+ <polygon points="155,392 148,378 162,378" fill="#00d4aa"/>
54
+
55
+ <rect x="40" y="400" width="230" height="80" rx="10" fill="url(#highConf)" opacity="0.2" stroke="#00d4aa" stroke-width="2"/>
56
+ <text x="155" y="430" text-anchor="middle" fill="#ccc" font-family="Helvetica, Arial" font-size="15">confidence = 0.92</text>
57
+ <text x="155" y="462" text-anchor="middle" fill="#00d4aa" font-family="Helvetica, Arial" font-size="22" font-weight="bold">HIGH</text>
58
+
59
+ <!-- ============ PANEL 2: Models agree, dense region (NEW CASE) ============ -->
60
+ <text x="450" y="100" text-anchor="middle" fill="#ff9f43" font-family="Helvetica, Arial" font-size="18" font-weight="bold">Models Agree</text>
61
+ <text x="450" y="120" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="14">in a dense/censored region</text>
62
+
63
+ <rect x="330" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
64
+ <text x="370" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">-3.56</text>
65
+ <rect x="415" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
66
+ <text x="455" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">-3.55</text>
67
+ <rect x="500" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
68
+ <text x="540" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">-3.58</text>
69
+ <rect x="375" y="175" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
70
+ <text x="415" y="196" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">-3.57</text>
71
+ <rect x="460" y="175" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
72
+ <text x="500" y="196" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">-3.56</text>
73
+
74
+ <line x1="450" y1="215" x2="450" y2="240" stroke="#999" stroke-width="2"/>
75
+ <polygon points="450,248 444,236 456,236" fill="#999"/>
76
+ <text x="450" y="270" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="16">pred=-3.56, std=0.02</text>
77
+
78
+ <rect x="335" y="285" width="230" height="60" rx="10" fill="url(#calibBox)" opacity="0.25" stroke="#9b59b6" stroke-width="1.5"/>
79
+ <text x="450" y="307" text-anchor="middle" fill="#c89bd9" font-family="Helvetica, Arial" font-size="15" font-weight="bold">Residual Calibrator</text>
80
+ <text x="450" y="328" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="13">historical |resid| ≈ 0.50</text>
81
+
82
+ <line x1="450" y1="355" x2="450" y2="385" stroke="#ff9f43" stroke-width="3"/>
83
+ <polygon points="450,392 443,378 457,378" fill="#ff9f43"/>
84
+
85
+ <rect x="335" y="400" width="230" height="80" rx="10" fill="url(#midConf)" opacity="0.2" stroke="#ff9f43" stroke-width="2"/>
86
+ <text x="450" y="430" text-anchor="middle" fill="#ccc" font-family="Helvetica, Arial" font-size="15">confidence = 0.55</text>
87
+ <text x="450" y="462" text-anchor="middle" fill="#ff9f43" font-family="Helvetica, Arial" font-size="22" font-weight="bold">MODERATE</text>
88
+
89
+ <!-- ============ PANEL 3: Models disagree ============ -->
90
+ <text x="745" y="100" text-anchor="middle" fill="#ff6b6b" font-family="Helvetica, Arial" font-size="18" font-weight="bold">Models Disagree</text>
91
+ <text x="745" y="120" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="14">wide ensemble spread</text>
92
+
93
+ <rect x="625" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
94
+ <text x="665" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">1.82</text>
95
+ <rect x="710" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
96
+ <text x="750" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.95</text>
97
+ <rect x="795" y="135" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
98
+ <text x="835" y="156" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">2.31</text>
99
+ <rect x="670" y="175" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
100
+ <text x="710" y="196" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">3.47</text>
101
+ <rect x="755" y="175" width="80" height="32" rx="6" fill="url(#modelBox)" opacity="0.9"/>
102
+ <text x="795" y="196" text-anchor="middle" fill="white" font-family="Helvetica, Arial" font-size="16">1.58</text>
103
+
104
+ <line x1="745" y1="215" x2="745" y2="240" stroke="#999" stroke-width="2"/>
105
+ <polygon points="745,248 739,236 751,236" fill="#999"/>
106
+ <text x="745" y="270" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="16">pred=2.43, std=0.71</text>
107
+
108
+ <rect x="630" y="285" width="230" height="60" rx="10" fill="url(#calibBox)" opacity="0.25" stroke="#9b59b6" stroke-width="1.5"/>
109
+ <text x="745" y="307" text-anchor="middle" fill="#c89bd9" font-family="Helvetica, Arial" font-size="15" font-weight="bold">Residual Calibrator</text>
110
+ <text x="745" y="328" text-anchor="middle" fill="#aaa" font-family="Helvetica, Arial" font-size="13">historical |resid| ≈ 0.85</text>
111
+
112
+ <line x1="745" y1="355" x2="745" y2="385" stroke="#ff6b6b" stroke-width="3"/>
113
+ <polygon points="745,392 738,378 752,378" fill="#ff6b6b"/>
114
+
115
+ <rect x="630" y="400" width="230" height="80" rx="10" fill="url(#lowConf)" opacity="0.2" stroke="#ff6b6b" stroke-width="2"/>
116
+ <text x="745" y="430" text-anchor="middle" fill="#ccc" font-family="Helvetica, Arial" font-size="15">confidence = 0.15</text>
117
+ <text x="745" y="462" text-anchor="middle" fill="#ff6b6b" font-family="Helvetica, Arial" font-size="22" font-weight="bold">LOW</text>
118
+ </svg>
@@ -0,0 +1,175 @@
1
+ """Bounded-Loss Sanity Check (ChemProp)
2
+
3
+ This script verifies that ChemProp's bounded-loss path (BoundedMAE / BoundedMSE)
4
+ fires correctly when a FeatureSet provides per-target `_gt` / `_lt` censor
5
+ columns and the model is trained with hyperparameters={"bounded_loss": True}.
6
+
7
+ It builds a small synthetic FeatureSet from public LogP data with artificial
8
+ right-censoring, then trains two ChemProp variants against the same FeatureSet:
9
+
10
+ 1. logp-bounded-off -- hyperparameters omitted (bounded_loss defaults to False)
11
+ 2. logp-bounded-on -- hyperparameters={"bounded_loss": True}
12
+
13
+ Predictions on the *artificially censored* rows should look very different:
14
+
15
+ bounded_loss=False: predictions cluster near the censor value T because the
16
+ labels are exactly T and MAE punishes deviations in
17
+ either direction.
18
+ bounded_loss=True: predictions are free to go above T without penalty, and
19
+ since the uncensored half of the high-LogP chemistry
20
+ remains at its true (>T) value, the model can learn
21
+ that high-LogP chemistry actually exists.
22
+
23
+ Test design notes
24
+ -----------------
25
+ - Use a real LogP dataset so the model has actual chemistry signal to learn.
26
+ - Pick T at a percentile that leaves a meaningful population above the cap.
27
+ - Censor ONLY half of the rows above T -- the other half stays at its true
28
+ value so the bounded model has uncensored examples to learn from. Without
29
+ any uncensored examples above T, even bounded_loss=True can't pull
30
+ predictions above T (no information to push them there).
31
+
32
+ Verifying the bounded-loss effect after training
33
+ ------------------------------------------------
34
+ Note: workbench stores boolean FS columns as nullable Int64, so cast logp_gt to
35
+ bool before boolean indexing (or compare with == 1):
36
+
37
+ fs = FeatureSet("bounded_loss_test_fs").pull_dataframe()
38
+ fs["logp_gt"] = fs["logp_gt"].fillna(0).astype(bool)
39
+ off = Model("logp-bounded-off").get_inference_predictions("full_cross_fold")
40
+ on = Model("logp-bounded-on" ).get_inference_predictions("full_cross_fold")
41
+ off_m = off.merge(fs[["id", "logp_gt", "logp_true"]], on="id")
42
+ on_m = on .merge(fs[["id", "logp_gt", "logp_true"]], on="id")
43
+ for name, m in [("off", off_m), ("on", on_m)]:
44
+ c = m[m["logp_gt"]]
45
+ err = (c["prediction"] - c["logp_true"]).abs()
46
+ print(f"{name}: MAE on censored vs true = {err.mean():.3f}")
47
+ """
48
+
49
+ import numpy as np
50
+
51
+ from workbench.api import Endpoint, FeatureSet, Model, ModelFramework, ModelType, PublicData
52
+ from workbench.core.transforms.pandas_transforms.pandas_to_features import PandasToFeatures
53
+
54
+ # Recreate Flag in case you want to recreate the artifacts
55
+ recreate = False
56
+
57
+ # Synthetic dataset tunables -- these define how visible the bounded-loss effect is
58
+ FS_NAME = "bounded_loss_test_fs"
59
+ PUBLIC_KEY = "comp_chem/logp/logp_all"
60
+ N_ROWS = 3000 # subsample size (keeps training fast)
61
+ CENSOR_THRESHOLD = 3.0 # T: cap above which rows can be censored (top ~25% of LogP)
62
+ CENSOR_FRACTION = 0.5 # fraction of >T rows to actually censor
63
+ RANDOM_SEED = 42
64
+
65
+
66
+ # =============================================================================
67
+ # Build Synthetic FeatureSet (LogP with artificial right-censoring)
68
+ # =============================================================================
69
+ # Pulls real LogP data from public storage, censors half of the rows above T
70
+ # (recorded logp clipped to T, logp_gt flag set), and keeps the other half at
71
+ # their true values. logp_true is preserved for post-training analysis.
72
+
73
+ if recreate or not FeatureSet(FS_NAME).exists():
74
+ df = PublicData().get(PUBLIC_KEY)
75
+ if df is None:
76
+ raise RuntimeError(f"Could not load {PUBLIC_KEY} from public data")
77
+
78
+ df = df[["smiles", "logp"]].dropna().reset_index(drop=True)
79
+ df = df.sample(n=min(N_ROWS, len(df)), random_state=RANDOM_SEED).reset_index(drop=True)
80
+ df["id"] = df.index.astype(int)
81
+
82
+ # Preserve the true value so we can analyze post-training
83
+ df["logp_true"] = df["logp"]
84
+
85
+ # Censor half of the rows with logp > T: set recorded logp = T and mark _gt
86
+ rng = np.random.default_rng(RANDOM_SEED)
87
+ above = df.index[df["logp_true"] > CENSOR_THRESHOLD]
88
+ n_to_censor = int(len(above) * CENSOR_FRACTION)
89
+ censored_idx = rng.choice(above, size=n_to_censor, replace=False)
90
+
91
+ df["logp_gt"] = False
92
+ df.loc[censored_idx, "logp_gt"] = True
93
+ df.loc[censored_idx, "logp"] = CENSOR_THRESHOLD # clip the label to the cap
94
+
95
+ df = df[["id", "smiles", "logp", "logp_gt", "logp_true"]]
96
+ n_above = int((df["logp_true"] > CENSOR_THRESHOLD).sum())
97
+ n_censored = int(df["logp_gt"].sum())
98
+ print(
99
+ f"FeatureSet '{FS_NAME}': {len(df)} rows | "
100
+ f"true logp > {CENSOR_THRESHOLD}: {n_above} | censored (logp_gt=True): {n_censored} | "
101
+ f"uncensored above cap: {n_above - n_censored}"
102
+ )
103
+
104
+ to_features = PandasToFeatures(FS_NAME)
105
+ to_features.set_input(df, id_column="id")
106
+ to_features.set_output_tags(["chemprop", "bounded-loss", "synthetic", "logp"])
107
+ to_features.transform()
108
+
109
+
110
+ # =============================================================================
111
+ # Control Model (bounded_loss=False -- default MAE)
112
+ # =============================================================================
113
+ # Trained without the bounded_loss hyperparameter so the censor labels are
114
+ # treated as exact targets. Predictions on censored rows should cluster near
115
+ # the cap value (T=3.0) because MAE punishes deviations in either direction.
116
+
117
+ if recreate or not Model("logp-bounded-off").exists():
118
+ feature_set = FeatureSet(FS_NAME)
119
+ m = feature_set.to_model(
120
+ name="logp-bounded-off",
121
+ model_type=ModelType.UQ_REGRESSOR,
122
+ model_framework=ModelFramework.CHEMPROP,
123
+ target_column="logp",
124
+ feature_list=["smiles"],
125
+ description=(
126
+ "Bounded-loss sanity check (control): standard MAE on artificially censored "
127
+ f"LogP. Censored rows have logp = {CENSOR_THRESHOLD} and logp_gt = True; "
128
+ "trained without bounded_loss hyperparameter so censor labels are treated as exact."
129
+ ),
130
+ tags=["chemprop", "bounded-loss", "synthetic", "logp", "off"],
131
+ )
132
+ m.set_owner("BW")
133
+
134
+ # Create an Endpoint
135
+ if recreate or not Endpoint("logp-bounded-off").exists():
136
+ m = Model("logp-bounded-off")
137
+ end = m.to_endpoint(tags=["chemprop", "bounded-loss", "synthetic", "logp", "off"])
138
+ end.set_owner("BW")
139
+ end.auto_inference()
140
+ end.cross_fold_inference()
141
+
142
+
143
+ # =============================================================================
144
+ # Treatment Model (bounded_loss=True -- BoundedMAE)
145
+ # =============================================================================
146
+ # Trained with hyperparameters={"bounded_loss": True} so the logp_gt column is
147
+ # read by the template and censor labels become lower bounds. Predictions on
148
+ # censored rows should spread above the cap, using the chemistry signal from
149
+ # the uncensored half of the high-LogP rows.
150
+
151
+ if recreate or not Model("logp-bounded-on").exists():
152
+ feature_set = FeatureSet(FS_NAME)
153
+ m = feature_set.to_model(
154
+ name="logp-bounded-on",
155
+ model_type=ModelType.UQ_REGRESSOR,
156
+ model_framework=ModelFramework.CHEMPROP,
157
+ target_column="logp",
158
+ feature_list=["smiles"],
159
+ description=(
160
+ "Bounded-loss sanity check (treatment): BoundedMAE on artificially censored "
161
+ f"LogP. Censored rows have logp = {CENSOR_THRESHOLD} and logp_gt = True; "
162
+ "trained with bounded_loss=True so censor labels are treated as lower bounds."
163
+ ),
164
+ tags=["chemprop", "bounded-loss", "synthetic", "logp", "on"],
165
+ hyperparameters={"bounded_loss": True},
166
+ )
167
+ m.set_owner("BW")
168
+
169
+ # Create an Endpoint
170
+ if recreate or not Endpoint("logp-bounded-on").exists():
171
+ m = Model("logp-bounded-on")
172
+ end = m.to_endpoint(tags=["chemprop", "bounded-loss", "synthetic", "logp", "on"])
173
+ end.set_owner("BW")
174
+ end.auto_inference()
175
+ end.cross_fold_inference()
@@ -39,7 +39,7 @@ COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/pytho
39
39
  COPY --from=builder /usr/local/bin /usr/local/bin
40
40
 
41
41
  # Layer 2: Workbench + Bridges (changes often, small layer)
42
- ARG WORKBENCH_VERSION=0.8.331
42
+ ARG WORKBENCH_VERSION=0.8.332
43
43
  RUN pip install --no-cache-dir --no-deps "workbench==${WORKBENCH_VERSION}" && \
44
44
  pip install --no-cache-dir --no-deps workbench-bridges
45
45
 
@@ -10,7 +10,7 @@ import logging
10
10
  log = logging.getLogger("workbench")
11
11
 
12
12
 
13
- def smart_aggregator(df: pd.DataFrame, target_rows: int = 5000, outlier_column: str = "residual") -> pd.DataFrame:
13
+ def smart_aggregator(df: pd.DataFrame, target_rows: int = 50000, outlier_column: str = "residual") -> pd.DataFrame:
14
14
  """
15
15
  Reduce DataFrame rows by aggregating similar rows based on numeric column similarity.
16
16
 
@@ -36,11 +36,9 @@ def smart_aggregator(df: pd.DataFrame, target_rows: int = 5000, outlier_column:
36
36
  # Preserve original column order
37
37
  original_columns = df.columns.tolist()
38
38
 
39
- # If already at or below target, just add the count column and return
39
+ # If already at or below target, just return the dataframe
40
40
  if n_rows <= target_rows:
41
- result = df.copy()
42
- result["aggregation_count"] = 1
43
- return result
41
+ return df
44
42
 
45
43
  log.info(f"smart_aggregator: Reducing {n_rows} rows to ~{target_rows} rows")
46
44
 
@@ -103,7 +101,7 @@ if __name__ == "__main__":
103
101
 
104
102
  # Create test data with clusters
105
103
  np.random.seed(42)
106
- n_samples = 10000
104
+ n_samples = 100000
107
105
 
108
106
  # Create 3 distinct clusters
109
107
  cluster_1 = np.random.randn(n_samples // 3, 3) + np.array([0, 0, 0])
@@ -49,6 +49,24 @@ class CachedArtifactMixin:
49
49
 
50
50
  return wrapper
51
51
 
52
+ def refresh(self) -> int:
53
+ """Invalidate all cached method results for this artifact.
54
+
55
+ Forces subsequent method calls to bypass the cache and re-fetch fresh
56
+ data. Useful when post-processing logic has changed but the underlying
57
+ artifact's Modified timestamp has not.
58
+
59
+ Returns:
60
+ int: Number of cache entries deleted.
61
+ """
62
+ class_name = self.__class__.__name__.lower()
63
+ prefix = f"{class_name}_{self.name}_"
64
+ keys = self.artifact_cache.list_subkeys(prefix)
65
+ for key in keys:
66
+ self.artifact_cache.delete(key)
67
+ self.log.info(f"Refresh: Cleared {len(keys)} cached entries for {self.name}")
68
+ return len(keys)
69
+
52
70
 
53
71
  # Example usage of CachedModel
54
72
  if __name__ == "__main__":
@@ -86,7 +86,7 @@ class CachedModel(CachedArtifactMixin, ModelCore):
86
86
 
87
87
  @CachedArtifactMixin.cache_result
88
88
  def get_inference_predictions(
89
- self, capture_name: str = "full_cross_fold", target_rows: int = 5000
89
+ self, capture_name: str = "full_cross_fold", target_rows: int = 50000
90
90
  ) -> Union[pd.DataFrame, None]:
91
91
  """Retrieve the captured prediction results for this model
92
92
 
@@ -609,12 +609,17 @@ class EndpointCore(Artifact):
609
609
  target_list = targets if isinstance(targets, list) else [targets]
610
610
  primary_target = target_list[0]
611
611
 
612
- # If we don't have a smiles column, try to merge it from the FeatureSet
613
- if "smiles" not in out_of_fold_df.columns and "smiles" in fs.columns:
614
- fs_df = fs.query(f'SELECT {fs.id_column}, "smiles" FROM "{fs.athena_table}"')
615
- if "smiles" in fs_df.columns:
616
- self.log.info("Merging 'smiles' column from FeatureSet into out-of-fold predictions.")
617
- out_of_fold_df = out_of_fold_df.merge(fs_df, on=fs.id_column, how="left")
612
+ # Templates don't save smiles or user-specified meta columns to
613
+ # validation_predictions.csv merge them in from the FeatureSet so
614
+ # cross_fold captures match the live-inference column set.
615
+ meta_cols = self.workbench_meta().get("inference_meta", []) or []
616
+ merge_candidates = ["smiles"] + [c for c in meta_cols if c != "smiles"]
617
+ to_merge = [c for c in merge_candidates if c not in out_of_fold_df.columns and c in fs.columns]
618
+ if to_merge:
619
+ quoted = ", ".join(f'"{c}"' for c in to_merge)
620
+ fs_df = fs.query(f'SELECT {fs.id_column}, {quoted} FROM "{fs.athena_table}"')
621
+ self.log.info(f"Merging columns from FeatureSet into out-of-fold predictions: {to_merge}")
622
+ out_of_fold_df = out_of_fold_df.merge(fs_df, on=fs.id_column, how="left")
618
623
 
619
624
  # Collect UQ columns (q_*, confidence) for additional tracking (used for hashing)
620
625
  additional_columns = [col for col in out_of_fold_df.columns if col.startswith("q_") or col == "confidence"]
@@ -1100,6 +1105,12 @@ class EndpointCore(Artifact):
1100
1105
  if "smiles" in cols:
1101
1106
  output_columns.append("smiles")
1102
1107
 
1108
+ # Add user-specified passthrough columns (workbench_meta["inference_meta"])
1109
+ meta_cols = self.workbench_meta().get("inference_meta", []) or []
1110
+ for c in meta_cols:
1111
+ if c in cols and c not in output_columns:
1112
+ output_columns.append(c)
1113
+
1103
1114
  # Write the predictions to S3
1104
1115
  output_file = f"{inference_capture_path}/inference_predictions.csv"
1105
1116
  self.log.info(f"Writing predictions to {output_file}")