workbench 0.8.234__py3-none-any.whl → 0.8.236__py3-none-any.whl

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 (36) hide show
  1. workbench/algorithms/dataframe/smart_aggregator.py +17 -12
  2. workbench/api/endpoint.py +13 -4
  3. workbench/cached/cached_model.py +2 -2
  4. workbench/core/artifacts/endpoint_core.py +30 -5
  5. workbench/model_script_utils/model_script_utils.py +225 -0
  6. workbench/model_script_utils/uq_harness.py +39 -21
  7. workbench/model_scripts/chemprop/chemprop.template +29 -14
  8. workbench/model_scripts/chemprop/generated_model_script.py +35 -18
  9. workbench/model_scripts/chemprop/model_script_utils.py +225 -0
  10. workbench/model_scripts/pytorch_model/generated_model_script.py +34 -20
  11. workbench/model_scripts/pytorch_model/model_script_utils.py +225 -0
  12. workbench/model_scripts/pytorch_model/pytorch.template +28 -14
  13. workbench/model_scripts/pytorch_model/uq_harness.py +39 -21
  14. workbench/model_scripts/xgb_model/generated_model_script.py +35 -22
  15. workbench/model_scripts/xgb_model/model_script_utils.py +225 -0
  16. workbench/model_scripts/xgb_model/uq_harness.py +39 -21
  17. workbench/model_scripts/xgb_model/xgb_model.template +29 -18
  18. workbench/themes/dark/custom.css +29 -0
  19. workbench/themes/light/custom.css +29 -0
  20. workbench/themes/midnight_blue/custom.css +28 -0
  21. workbench/utils/model_utils.py +9 -0
  22. workbench/utils/theme_manager.py +95 -0
  23. workbench/web_interface/components/component_interface.py +3 -0
  24. workbench/web_interface/components/plugin_interface.py +26 -0
  25. workbench/web_interface/components/plugins/confusion_matrix.py +14 -8
  26. workbench/web_interface/components/plugins/model_plot.py +156 -0
  27. workbench/web_interface/components/plugins/scatter_plot.py +9 -2
  28. workbench/web_interface/components/plugins/shap_summary_plot.py +12 -4
  29. workbench/web_interface/components/settings_menu.py +10 -49
  30. {workbench-0.8.234.dist-info → workbench-0.8.236.dist-info}/METADATA +1 -1
  31. {workbench-0.8.234.dist-info → workbench-0.8.236.dist-info}/RECORD +35 -35
  32. workbench/web_interface/components/model_plot.py +0 -75
  33. {workbench-0.8.234.dist-info → workbench-0.8.236.dist-info}/WHEEL +0 -0
  34. {workbench-0.8.234.dist-info → workbench-0.8.236.dist-info}/entry_points.txt +0 -0
  35. {workbench-0.8.234.dist-info → workbench-0.8.236.dist-info}/licenses/LICENSE +0 -0
  36. {workbench-0.8.234.dist-info → workbench-0.8.236.dist-info}/top_level.txt +0 -0
@@ -100,74 +100,35 @@ class SettingsMenu:
100
100
  caret=False,
101
101
  align_end=True,
102
102
  ),
103
- # Dummy store for the clientside callback output
104
- dcc.Store(id=f"{component_id}-dummy", data=None),
105
- # Store to trigger checkmark update on load
103
+ # Store to trigger checkmark update on load and theme change
106
104
  dcc.Store(id=f"{component_id}-init", data=True),
107
105
  ],
108
106
  id=component_id,
109
107
  )
110
108
 
111
- @staticmethod
112
- def get_clientside_callback_code(component_id: str) -> str:
109
+ def get_clientside_callback_code(self) -> str:
113
110
  """Get the JavaScript code for the theme selection clientside callback.
114
111
 
115
- Args:
116
- component_id (str): The ID prefix used in create_component.
117
-
118
112
  Returns:
119
113
  str: JavaScript code for the clientside callback.
120
114
  """
121
- return """
122
- function(n_clicks_list, ids) {
123
- // Find which button was clicked
124
- if (!n_clicks_list || n_clicks_list.every(n => !n)) {
125
- return window.dash_clientside.no_update;
126
- }
127
-
128
- // Find the clicked theme
129
- let clickedTheme = null;
130
- for (let i = 0; i < n_clicks_list.length; i++) {
131
- if (n_clicks_list[i]) {
132
- clickedTheme = ids[i].theme;
133
- break;
134
- }
135
- }
136
-
137
- if (clickedTheme) {
138
- // Store in localStorage
139
- localStorage.setItem('wb_theme', clickedTheme);
140
- // Set cookie for Flask to read on reload
141
- document.cookie = `wb_theme=${clickedTheme}; path=/; max-age=31536000`;
142
- // Reload the page to apply the new theme
143
- window.location.reload();
144
- }
145
-
146
- return window.dash_clientside.no_update;
147
- }
148
- """
115
+ return self.tm.get_theme_switch_js()
149
116
 
150
117
  @staticmethod
151
118
  def get_checkmark_callback_code() -> str:
152
- """Get the JavaScript code to update checkmarks based on localStorage.
119
+ """Get the JavaScript code to update checkmarks based on current theme.
153
120
 
154
121
  Returns:
155
122
  str: JavaScript code for the checkmark update callback.
156
123
  """
157
124
  return """
158
- function(init, ids) {
159
- // Get current theme from localStorage (or cookie as fallback)
160
- let currentTheme = localStorage.getItem('wb_theme');
125
+ function(theme, ids) {
126
+ // If theme is a string (from theme switch), use it directly
127
+ let currentTheme = (typeof theme === 'string') ? theme : null;
128
+
129
+ // Otherwise, get from localStorage
161
130
  if (!currentTheme) {
162
- // Try to read from cookie
163
- const cookies = document.cookie.split(';');
164
- for (let cookie of cookies) {
165
- const [name, value] = cookie.trim().split('=');
166
- if (name === 'wb_theme') {
167
- currentTheme = value;
168
- break;
169
- }
170
- }
131
+ currentTheme = localStorage.getItem('wb_theme');
171
132
  }
172
133
 
173
134
  // Return checkmarks for each theme
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: workbench
3
- Version: 0.8.234
3
+ Version: 0.8.236
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
@@ -8,7 +8,7 @@ workbench/algorithms/dataframe/feature_space_proximity.py,sha256=FYsQd5Lf5CrSWi-
8
8
  workbench/algorithms/dataframe/fingerprint_proximity.py,sha256=EJhbiio99-6ZyymswFD69pmLQa2UECclvt2-mWfp3-M,20174
9
9
  workbench/algorithms/dataframe/projection_2d.py,sha256=UgdAWYXFxCdMGZpWSbRSPbjZAGjaumP7va1FyUnwiIA,9114
10
10
  workbench/algorithms/dataframe/proximity.py,sha256=Qbgs9uhfQTceXWXf-fc26aYMPsQrZLOHuFUm8KqQHmc,13387
11
- workbench/algorithms/dataframe/smart_aggregator.py,sha256=AZ790s5nxeOezPQzojmVB3DR5Q2kh27-8X8rxmpp0SA,6401
11
+ workbench/algorithms/dataframe/smart_aggregator.py,sha256=XKWAQEbodVUo6efvR_vNPBRplE4xtiD8kAZCN63n-gk,6813
12
12
  workbench/algorithms/dataframe/storage/aggregation.py,sha256=VuTb7A6Vh6IS5djZeItvOLnnEOlf7tzMQ8OaYIuftvU,2852
13
13
  workbench/algorithms/dataframe/storage/feature_resolution.py,sha256=w_iLf8EFTg7Jc5laH-bsq8MEtZVqcg05W-GihCqR-r4,9450
14
14
  workbench/algorithms/dataframe/storage/feature_spider.py,sha256=uIZ4JHIKuhpy08wBFReSrohb5DGxx8vGroHUbjPm1jE,14353
@@ -35,7 +35,7 @@ workbench/api/__init__.py,sha256=1JAQKD82biia4h07BRA9ytjxuJUYQqgHvkf8FwpnlVQ,119
35
35
  workbench/api/compound.py,sha256=kf5EaM5qjWwsZutcxqj9IC_MPnDV1uVHDMns9OA_GOo,2545
36
36
  workbench/api/data_source.py,sha256=Ngz36YZWxFfpJbmURhM1LQPYjh5kdpZNGo6_fCRePbA,8321
37
37
  workbench/api/df_store.py,sha256=1qSYM3Xb4MwMMTMaF3CX0hOCEzhIbnra5Deivg4cryk,3014
38
- workbench/api/endpoint.py,sha256=tvPINPv_EFwphuZ3tv09jwO6dee-DRH371ZzXrrUxfM,3897
38
+ workbench/api/endpoint.py,sha256=CCMOnEIGzwG4LlTjs6ulOR6Wqa3XHCeXRLFfC2JgT8I,4255
39
39
  workbench/api/feature_set.py,sha256=-21ztp7JDqs7CKF3KtNdPoXppkiDqfb4JVK8xBK9rIY,10966
40
40
  workbench/api/graph_store.py,sha256=LremJyPrQFgsHb7hxsctuCsoxx3p7TKtaY5qALHe6pc,4372
41
41
  workbench/api/meta.py,sha256=1JxCpLn4JENiWUJaVjGgDL7WqhIy-s1swUbBzprI-uY,8595
@@ -49,7 +49,7 @@ workbench/cached/cached_data_source.py,sha256=A0o4H9g1aEms8HkOHWnb46vJ5fx6ebs1aC
49
49
  workbench/cached/cached_endpoint.py,sha256=HxS8V9MF43uSy-Yu-pAs15PbNeq6u_JGXU332DDIQMc,2630
50
50
  workbench/cached/cached_feature_set.py,sha256=vJe2WUTeIyMAvCM1Jp-sPLbX6S0Y7jv51FAhhMgrSDE,2780
51
51
  workbench/cached/cached_meta.py,sha256=wOuqWiXoJPxl2HUlslUvyrUQigrzXWwgMYZFQ9y5k5c,12256
52
- workbench/cached/cached_model.py,sha256=c4KxmHGFgBbHgtb_mJckQcQZEidZtKAtxwmMJd6Tfhk,5684
52
+ workbench/cached/cached_model.py,sha256=k5dJAy8AxLkOa17dw7WfuzcVPEae3X6L_uim3bzd6gA,5684
53
53
  workbench/cached/cached_pipeline.py,sha256=QOVnEKu5RbIdlNpJUi-0Ebh0_-C68RigSPwKh4dvZTM,1948
54
54
  workbench/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
55
  workbench/core/artifacts/__init__.py,sha256=ukcgbYlI9m99bzwaBNO01K1h0-cQkzsbh_jT_GyQ-LY,1034
@@ -60,7 +60,7 @@ workbench/core/artifacts/data_capture_core.py,sha256=q8f79rRTYiZ7T4IQRWXl8ZvPpcv
60
60
  workbench/core/artifacts/data_source_abstract.py,sha256=5IRCzFVK-17cd4NXPMRfx99vQAmQ0WHE5jcm5RfsVTg,10619
61
61
  workbench/core/artifacts/data_source_factory.py,sha256=YL_tA5fsgubbB3dPF6T4tO0rGgz-6oo3ge4i_YXVC-M,2380
62
62
  workbench/core/artifacts/df_store_core.py,sha256=AueNr_JvuLLu_ByE7cb3u-isH9u0Q7cMP-UCgCX-Ctg,3536
63
- workbench/core/artifacts/endpoint_core.py,sha256=kf8OuQhevoEcS_1j861SS1qWVLPfD6F964YCfk4Gx5w,54645
63
+ workbench/core/artifacts/endpoint_core.py,sha256=e9Fs07D2SXvLabaywTndX8R1iyO-WjHoNW4A80UUiSs,55694
64
64
  workbench/core/artifacts/feature_set_core.py,sha256=IjSUpxpj2S611uo5LmnOK-aH3CZhfbC5ztC02PQ5gqE,42128
65
65
  workbench/core/artifacts/model_core.py,sha256=wPkpdRlxnAXMqsDtJGPotGFO146Hm7NCfYbImHwZo9c,52343
66
66
  workbench/core/artifacts/monitor_core.py,sha256=M307yz7tEzOEHgv-LmtVy9jKjSbM98fHW3ckmNYrwlU,27897
@@ -127,13 +127,13 @@ workbench/core/views/training_view.py,sha256=7HwhbQhDBhT3Zo_gssS-b4eueJ0h9nqqT8Y
127
127
  workbench/core/views/view.py,sha256=DvmEA1xdvL980GET_cnbmHzqSy6IhlNaZcoQnVTtYis,13534
128
128
  workbench/core/views/view_utils.py,sha256=CwOlpqXpumCr6REi-ey7Qjz5_tpg-s4oWHmlOVu8POQ,12270
129
129
  workbench/core/views/storage/mdq_view.py,sha256=qf_ep1KwaXOIfO930laEwNIiCYP7VNOqjE3VdHfopRE,5195
130
- workbench/model_script_utils/model_script_utils.py,sha256=kIB_RUBBPAXyTCnrQRZuAjM6AwNlVW5It_U1RaXuaBI,12806
130
+ workbench/model_script_utils/model_script_utils.py,sha256=aM3ZaJxyMy7smokIF83fXUx3YSzLs8BNNMLfJDCoe8I,21231
131
131
  workbench/model_script_utils/pytorch_utils.py,sha256=vr8ybK45U0H8Jhjb5qx6xbJNozdcl7bVqubknDwh6U0,13704
132
- workbench/model_script_utils/uq_harness.py,sha256=zzFgQrNCtUyDMWxY7tjlFiHFBzPP6LWGyFBPr-PyKug,10304
132
+ workbench/model_script_utils/uq_harness.py,sha256=Qv5UQdjn72Ssa3NWGGsnSB_wDp0au2TXVauFK81Ebr0,11498
133
133
  workbench/model_scripts/script_generation.py,sha256=Sv0OJdASNKk1KXr8goiZWUL5W7i8G8gBb_R_OTb8caI,8257
134
- workbench/model_scripts/chemprop/chemprop.template,sha256=3AQuepH9JjR7fSeMd4qx9fZUr6KbW5je29SKKk5W7qA,35932
135
- workbench/model_scripts/chemprop/generated_model_script.py,sha256=kYxJQ2qaQDGit0paaKIDZPvx2Phs6B1ury_5jTpC1AU,35836
136
- workbench/model_scripts/chemprop/model_script_utils.py,sha256=kIB_RUBBPAXyTCnrQRZuAjM6AwNlVW5It_U1RaXuaBI,12806
134
+ workbench/model_scripts/chemprop/chemprop.template,sha256=9Rb4J2_FVG2avqONLY-_5rZc-6PwSykvn7395bm0EUk,36473
135
+ workbench/model_scripts/chemprop/generated_model_script.py,sha256=awO8O1Arbpct8c3QoUjABWQ2ZbVus-ie8dNRLo1UiD4,36498
136
+ workbench/model_scripts/chemprop/model_script_utils.py,sha256=aM3ZaJxyMy7smokIF83fXUx3YSzLs8BNNMLfJDCoe8I,21231
137
137
  workbench/model_scripts/chemprop/requirements.txt,sha256=2IBHZZNYqhX9Ed7AmRVgN06tO3EHeBbN2EM8-tjWZhs,216
138
138
  workbench/model_scripts/custom_models/chem_info/Readme.md,sha256=mH1lxJ4Pb7F5nBnVXaiuxpi8zS_yjUw_LBJepVKXhlA,574
139
139
  workbench/model_scripts/custom_models/chem_info/fingerprints.py,sha256=ECDzjZs4wSx3ZvAQipMl2NEqI2isCWHLYBv7mp0NVgk,6939
@@ -160,21 +160,21 @@ workbench/model_scripts/ensemble_xgb/ensemble_xgb.template,sha256=lMEx0IkawcpTI5
160
160
  workbench/model_scripts/ensemble_xgb/requirements.txt,sha256=jWlGc7HH7vqyukTm38LN4EyDi8jDUPEay4n45z-30uc,104
161
161
  workbench/model_scripts/meta_model/generated_model_script.py,sha256=ncPrHd9-R8l_98vAiuTUJ92C9PKpEgAtpIrmd7TuqSQ,8341
162
162
  workbench/model_scripts/meta_model/meta_model.template,sha256=viz-AKVq3YRwOUBt8-rUO1TwdEPFzyP7nnifqcIJurw,8244
163
- workbench/model_scripts/pytorch_model/generated_model_script.py,sha256=sdR3tFidxeSgZUTwbyeSXl0bYSHqUrCjOifYkvCkfWM,26412
164
- workbench/model_scripts/pytorch_model/model_script_utils.py,sha256=kIB_RUBBPAXyTCnrQRZuAjM6AwNlVW5It_U1RaXuaBI,12806
165
- workbench/model_scripts/pytorch_model/pytorch.template,sha256=KrQw66cTGFvRLkwOhjM31BYAxdBX33MT-QGBWX6tN5c,22172
163
+ workbench/model_scripts/pytorch_model/generated_model_script.py,sha256=JfCPF7lFhnKVbOBmNyqiFXcynXltpfEm_e_BQwLeiAg,27038
164
+ workbench/model_scripts/pytorch_model/model_script_utils.py,sha256=aM3ZaJxyMy7smokIF83fXUx3YSzLs8BNNMLfJDCoe8I,21231
165
+ workbench/model_scripts/pytorch_model/pytorch.template,sha256=FZYI4D-u5lDkJSyvgJYVhtvt9PnfL_pEVGtBYv64sNU,22767
166
166
  workbench/model_scripts/pytorch_model/pytorch_utils.py,sha256=vr8ybK45U0H8Jhjb5qx6xbJNozdcl7bVqubknDwh6U0,13704
167
167
  workbench/model_scripts/pytorch_model/requirements.txt,sha256=ES7YehHEL4E5oV8FScHm3oNQmkMI4ODgbC1fSbaY7T4,183
168
- workbench/model_scripts/pytorch_model/uq_harness.py,sha256=zzFgQrNCtUyDMWxY7tjlFiHFBzPP6LWGyFBPr-PyKug,10304
168
+ workbench/model_scripts/pytorch_model/uq_harness.py,sha256=Qv5UQdjn72Ssa3NWGGsnSB_wDp0au2TXVauFK81Ebr0,11498
169
169
  workbench/model_scripts/scikit_learn/generated_model_script.py,sha256=xhQIglpAgPRCH9iwI3wI0N0V6p9AgqW0mVOMuSXzUCk,17187
170
170
  workbench/model_scripts/scikit_learn/requirements.txt,sha256=aVvwiJ3LgBUhM_PyFlb2gHXu_kpGPho3ANBzlOkfcvs,107
171
171
  workbench/model_scripts/scikit_learn/scikit_learn.template,sha256=QQvqx-eX9ZTbYmyupq6R6vIQwosmsmY_MRBPaHyfjdk,12586
172
172
  workbench/model_scripts/uq_models/generated_model_script.py,sha256=kgcIWghY6eazcBWS77MukhQUyYFmfJcS8SQ8RmjM82I,9006
173
- workbench/model_scripts/xgb_model/generated_model_script.py,sha256=ENLuKqbRAVrqNymtcrJcYSm1eE4KUgU-oZN4PMalOZg,22647
174
- workbench/model_scripts/xgb_model/model_script_utils.py,sha256=kIB_RUBBPAXyTCnrQRZuAjM6AwNlVW5It_U1RaXuaBI,12806
173
+ workbench/model_scripts/xgb_model/generated_model_script.py,sha256=Qq6SBjnBbcryzssILCm1CjucEGbBlBqruyqdJTgX9HI,23354
174
+ workbench/model_scripts/xgb_model/model_script_utils.py,sha256=aM3ZaJxyMy7smokIF83fXUx3YSzLs8BNNMLfJDCoe8I,21231
175
175
  workbench/model_scripts/xgb_model/requirements.txt,sha256=jWlGc7HH7vqyukTm38LN4EyDi8jDUPEay4n45z-30uc,104
176
- workbench/model_scripts/xgb_model/uq_harness.py,sha256=zzFgQrNCtUyDMWxY7tjlFiHFBzPP6LWGyFBPr-PyKug,10304
177
- workbench/model_scripts/xgb_model/xgb_model.template,sha256=w4-yx82yws-_esObZQIq13S8WKXXnZxqe86ZuyWoP5w,18367
176
+ workbench/model_scripts/xgb_model/uq_harness.py,sha256=Qv5UQdjn72Ssa3NWGGsnSB_wDp0au2TXVauFK81Ebr0,11498
177
+ workbench/model_scripts/xgb_model/xgb_model.template,sha256=CfREX3N_lf4lg8l-w004jr-utiDiMkOrdHEm76MPFec,18900
178
178
  workbench/repl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
179
  workbench/repl/workbench_shell.py,sha256=RuuJVfO7pVTXWiwKGpBdDAL_fXJZfSay4KRDbhNNBXY,22309
180
180
  workbench/resources/open_source_api.key,sha256=vi9099CjkNnZ1IXB6AQWcG83iFYn2db0iTfTlpGVA1o,432
@@ -192,15 +192,15 @@ workbench/scripts/redis_report.py,sha256=iaJSuGPyLCs6e0TMcZDoT0YyJ43xJ1u74YD8FLn
192
192
  workbench/scripts/show_config.py,sha256=ff2wIKIlOktoitcrhk2r2B4I4N_ynXkEHB11l5nn0nA,548
193
193
  workbench/scripts/training_test.py,sha256=eRqy45LcfEY2_UlnpQbrRBb8RYPWEXcEg6us1fkZ6kw,2383
194
194
  workbench/themes/dark/base_css.url,sha256=gGaJWe9iajwbJUzr03K9AuTNouQP_prwOv5Q9lEYBVo,18
195
- workbench/themes/dark/custom.css,sha256=t8V-0NslZz_yAN7WTpN1AbFgbVCEKVFE6Uakm52Iw_U,5262
195
+ workbench/themes/dark/custom.css,sha256=LhSLCn-oBcuwOQbdrepJBv4RBjTlaEQF4-5sPPSrQnY,5975
196
196
  workbench/themes/dark/plotly.json,sha256=M6Xo6AeH9Aw41f6Zz2qrTxO6VElrsu0Ubai7QmWC3z4,18207
197
197
  workbench/themes/light/base_css.url,sha256=Y4c_u6Qjkt7GyQf5gvlHNCHnS8XxIzubuSmBQ8XizCQ,17
198
198
  workbench/themes/light/branding.json,sha256=13-LMVeNETpwXlC-p-x6sWGq58gd4dF3LuGDtq147Hk,77
199
- workbench/themes/light/custom.css,sha256=faBLoX1_7udHggpYhXuclcXseUm3um_1FCFqEBvsa2U,6973
199
+ workbench/themes/light/custom.css,sha256=5pU_ejJ3wZTto6-1YvqN6QcY_Vie6Q7NxV7EpWdAmho,7729
200
200
  workbench/themes/light/plotly.json,sha256=jo37FWlmgiR8FYvf_s4xSOe68QdZglF1pmrB0gA7YV8,18832
201
201
  workbench/themes/midnight_blue/base_css.url,sha256=IN-Pth07vNDtfH2r2_9m3vCkKxy-pPjIaXoD1uTmFmY,17
202
202
  workbench/themes/midnight_blue/branding.json,sha256=DvTVjVlB8hLyYIYUHqE2COPyfOUvPV9fAApTEY24DVk,77
203
- workbench/themes/midnight_blue/custom.css,sha256=zsi5yb84MMm7Znh7TCgS2dtF8xSDET5gCPdr8C6J2XA,5020
203
+ workbench/themes/midnight_blue/custom.css,sha256=BM0Xrxu-F5e_BewdyYCiGR5JUqMEtKDPiOTbMRpjJNc,5735
204
204
  workbench/themes/midnight_blue/plotly.json,sha256=sCrkxD9x_faKYe8wQsfRAup1T9BSS6X6wkVLCmZdaeU,18575
205
205
  workbench/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
206
206
  workbench/utils/ai_compound_generator.py,sha256=8no4ufP1LJhQfPqaDHvqUYOAh1kzeDVeF_-323yo1VA,6772
@@ -234,7 +234,7 @@ workbench/utils/log_utils.py,sha256=7n1NJXO_jUX82e6LWAQug6oPo3wiPDBYsqk9gsYab_A,
234
234
  workbench/utils/markdown_utils.py,sha256=0sGG71hci_vQaamfQjHj8vttj90WOzlSYZwwAAbRatY,10359
235
235
  workbench/utils/meta_model_simulator.py,sha256=fMKZoLi_VEJohNVvbZSMvZWNdUbIpGlB6Bg6mJQW33s,20630
236
236
  workbench/utils/metrics_utils.py,sha256=iAoKrAM4iRX8wFSjSJhfNKbbW1BqB3eI_U3wvdhUdhE,9496
237
- workbench/utils/model_utils.py,sha256=ApUg3EclAIEzzGr7i1zwJsO-OV1NUqjOMV6Fd9lWlno,19261
237
+ workbench/utils/model_utils.py,sha256=5o9aQ6ajjIGljTictAA97seCdIopcK_rHMQDrya9ut8,19777
238
238
  workbench/utils/monitor_utils.py,sha256=kVaJ7BgUXs3VPMFYfLC03wkIV4Dq-pEhoXS0wkJFxCc,7858
239
239
  workbench/utils/pandas_utils.py,sha256=uTUx-d1KYfjbS9PMQp2_9FogCV7xVZR6XLzU5YAGmfs,39371
240
240
  workbench/utils/performance_utils.py,sha256=WDNvz-bOdC99cDuXl0urAV4DJ7alk_V3yzKPwvqgST4,1329
@@ -250,7 +250,7 @@ workbench/utils/shap_utils.py,sha256=FeFNRH5mJTbuHlpHyFJgjHcU5BU7UthJL1Gb5Gl8_zw
250
250
  workbench/utils/shapley_values.py,sha256=3DvQz4HIPnxW42idgtuQ5vtzU-oF4_lToaWzLRjU-E4,3673
251
251
  workbench/utils/symbols.py,sha256=PioF1yAQyOabw7kLg8nhvaZBPFe7ABkpfpPPE0qz_2k,1265
252
252
  workbench/utils/test_data_generator.py,sha256=gqRXL7IUKG4wVfO1onflY3wg7vLkgx402_Zy3iqY7NU,11921
253
- workbench/utils/theme_manager.py,sha256=NEd4q10RxqReWI2WL9Y0BR3MjfiuDSJuW1d094iktXE,14044
253
+ workbench/utils/theme_manager.py,sha256=RCuwmQnUMPD4gs13i49SOkKOUmJAbmDb0aWnic_3l18,18044
254
254
  workbench/utils/trace_calls.py,sha256=tY4DOVMGXBh-mbUWzo1l-X9XjD0ux_qR9I1ypkjWNIQ,2092
255
255
  workbench/utils/type_abbrev.py,sha256=3ai7ZbE8BgvdotOSb48w_BmgrEGVYvLoyzoNYH8ZuOs,1470
256
256
  workbench/utils/workbench_cache.py,sha256=IQchxB81iR4eVggHBxUJdXxUCRkqWz1jKe5gxN3z6yc,5657
@@ -270,20 +270,19 @@ workbench/utils/chem_utils/salts.py,sha256=ZzFb6Z71Z_kMjVF-PKwHx0fn9pN9rPMj-oEY8
270
270
  workbench/utils/chem_utils/sdf.py,sha256=wucyMtnmdg6onBa5N_sX6ONDE4PThJokImFxCBk22RI,10319
271
271
  workbench/utils/chem_utils/toxicity.py,sha256=OmVvR05XjP8rLteQ0gjlC5tRh3WitjoahPnSLPhbUXQ,10195
272
272
  workbench/utils/chem_utils/vis.py,sha256=3hFwH6fD-UQFJTuuQjJxvoHcxJHK9y5CZL67XAFapoo,12838
273
- workbench/web_interface/components/component_interface.py,sha256=QCPWqiZLkVsAEzQFEQxFelk7H0UF5uI2dVvJNf0lRV4,7980
273
+ workbench/web_interface/components/component_interface.py,sha256=Owrh3R11biZBBuwNPKbNLZbLHERs_s3_jCx-zpmDx_k,8102
274
274
  workbench/web_interface/components/correlation_matrix.py,sha256=Lv4vRta5-TdxBsu0G8Ea7hyyR3XyPes-k5AfL6qZWEc,6376
275
275
  workbench/web_interface/components/data_details_markdown.py,sha256=axDs6eXniglBmvFwIKjpJ5oyT-3D4FO9IcfA_cl-EJ8,9706
276
276
  workbench/web_interface/components/endpoint_metric_plots.py,sha256=H0cXuj9UQrrh_2JvRHtq7O8pMXFXKs7o9XpzySENylw,3441
277
- workbench/web_interface/components/model_plot.py,sha256=oIBWP3lfI6FvujM9e8TfgAq6bm5yeC5wvMt-QO1bh9M,2857
278
- workbench/web_interface/components/plugin_interface.py,sha256=jGRq4igUTVXUT4sDqqsKKI2yjilV0ORNBQq6CjEWE84,9563
277
+ workbench/web_interface/components/plugin_interface.py,sha256=1O47i5gEkeP2j5sLJOXU1JP02Ltlx-L-hMpL6_Kwiko,10618
279
278
  workbench/web_interface/components/plugin_unit_test.py,sha256=CHBGKTySRhdUSt5ERCfg09_RSGUP4OLuOQFW4W5cDtQ,7746
280
279
  workbench/web_interface/components/regression_plot.py,sha256=k18Bd0fcH7ig6kL5GqC_dINci3_YLle_fSEM32zXtzY,3342
281
- workbench/web_interface/components/settings_menu.py,sha256=cC4ZibfFFYa-A6kyY_lucQUAEE6tHfdWX0PiWyDamvU,6667
280
+ workbench/web_interface/components/settings_menu.py,sha256=HdMhi0Lm7s6U9c7qzQJdUfrCkPV2qWPanieKZu8ao98,5224
282
281
  workbench/web_interface/components/violin_plots.py,sha256=3_T85hIs_R_WZpfFkSrqY2eYXmYzWsywDqsLhB7W1RQ,5320
283
282
  workbench/web_interface/components/experiments/dashboard_metric_plots.py,sha256=DPIw13tO9XOGxA6IeRPLgl-C3XUJ2N287JkSEg73Rjg,2984
284
283
  workbench/web_interface/components/experiments/outlier_plot.py,sha256=5yGVnVScM0TR80OjPypx_83Ksg7r5HDR3hGjpT4Ub14,3646
285
284
  workbench/web_interface/components/plugins/ag_table.py,sha256=MUtaKNzumCOvnvmZJGY4_j6rpl-ITeYCVKrxmLDwSzM,3923
286
- workbench/web_interface/components/plugins/confusion_matrix.py,sha256=n7Fk361nArlFoxbfdgfjRPQHy3UpwUjplfPyCdLx0c0,7071
285
+ workbench/web_interface/components/plugins/confusion_matrix.py,sha256=gkmbAOWsZRVBoPQSav-aglDtw0Nt54YcDya9Z4OG0Vc,7387
287
286
  workbench/web_interface/components/plugins/dashboard_status.py,sha256=4plmoiXj3dDjoQerUNpep_jfk50pI9rHvcoSP20UbE8,5832
288
287
  workbench/web_interface/components/plugins/data_details.py,sha256=pZm1AbM_0EXQwx77qUkfyrU9MedAs4Wlkp6iOtSrUtI,11104
289
288
  workbench/web_interface/components/plugins/endpoint_details.py,sha256=0A7g_Lx5-3XnDWOGT3YEDPNpmME_-WfYc65f-rRVjJE,3769
@@ -291,12 +290,13 @@ workbench/web_interface/components/plugins/generated_compounds.py,sha256=A6JGlkl
291
290
  workbench/web_interface/components/plugins/graph_plot.py,sha256=JFzuSH_CkEmlaLAgFpzmiEpS3sXov0ycnCfP0VLsK2g,14502
292
291
  workbench/web_interface/components/plugins/license_details.py,sha256=UyMSBGxEgdp3m9szDkDUAl_Ua8C5a4RNMdYpYCx354M,5497
293
292
  workbench/web_interface/components/plugins/model_details.py,sha256=vBGg7_KHCJv69g-RrXcFQsmMpO7ULufGav1zz0Jb2fI,9944
293
+ workbench/web_interface/components/plugins/model_plot.py,sha256=Hylt6IZXMhueo-Ib4wly0asOVrAF6eQ7-9W_6rBlkYs,6433
294
294
  workbench/web_interface/components/plugins/molecule_panel.py,sha256=xGCEI5af8F5lNId5eKUpetdQs_ahnIPdW6U7wKvbz2o,3515
295
295
  workbench/web_interface/components/plugins/molecule_viewer.py,sha256=xavixcu4RNzh6Nj_-3-XlK09DgpNx5jGmo3wEPNftiE,4529
296
296
  workbench/web_interface/components/plugins/pipeline_details.py,sha256=caiFIakHk-1dGGNW7wlio2X7iAm2_tCNbSjDzoRWGEk,5534
297
297
  workbench/web_interface/components/plugins/proximity_mini_graph.py,sha256=b_YYnvLczJUhaDbrrXnyjUDYF7C4R4ufCZXtJiyRnJ0,7233
298
- workbench/web_interface/components/plugins/scatter_plot.py,sha256=PxcmirvUPmMNw269i8U_tb-5Ryatg5PeyW05LFYnba0,23640
299
- workbench/web_interface/components/plugins/shap_summary_plot.py,sha256=_V-xxVehU-60IpYWvAqTW5x_6u6pbjz9mI8r0ppIXKg,9454
298
+ workbench/web_interface/components/plugins/scatter_plot.py,sha256=ZpN0BNjchczXWLhZjixbyixiZNPBljvGiaw_haLX6iw,23956
299
+ workbench/web_interface/components/plugins/shap_summary_plot.py,sha256=sqLyDOcKHgC1VAnrEd1TwmbGqXnG_P4BKvRd7WYzY48,9781
300
300
  workbench/web_interface/page_views/data_sources_page_view.py,sha256=SXNUG6n_eP9i4anddEXd5E9rMRt-R2EyNR-bbe8OQK4,4673
301
301
  workbench/web_interface/page_views/endpoints_page_view.py,sha256=EI3hA18pEn-mAPEzGAw0W-wM8qJR2j_8pQEJlbJCENk,2770
302
302
  workbench/web_interface/page_views/feature_sets_page_view.py,sha256=BnIU_Yg0g71mg51ryuXIYaEF-SZpJELXUGhNfyXZO8o,4449
@@ -304,9 +304,9 @@ workbench/web_interface/page_views/main_page.py,sha256=DyChwOGX_KtbJ09pw2Iswofba
304
304
  workbench/web_interface/page_views/models_page_view.py,sha256=M0bdC7bAzLyIaE2jviY12FF4abdMFZmg6sFuOY_LaGI,2650
305
305
  workbench/web_interface/page_views/page_view.py,sha256=Gh6YnpOGlUejx-bHZAf5pzqoQ1H1R0OSwOpGhOBO06w,455
306
306
  workbench/web_interface/page_views/pipelines_page_view.py,sha256=v2pxrIbsHBcYiblfius3JK766NZ7ciD2yPx0t3E5IJo,2656
307
- workbench-0.8.234.dist-info/licenses/LICENSE,sha256=RTBoTMeEwTgEhS-n8vgQ-VUo5qig0PWVd8xFPKU6Lck,1080
308
- workbench-0.8.234.dist-info/METADATA,sha256=GL5xEn6UylhTPU6KjGrCT-ea9bL3Epr0L2WLZjtNUkI,10033
309
- workbench-0.8.234.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
310
- workbench-0.8.234.dist-info/entry_points.txt,sha256=t_9tY7iYku9z96qFZZtUgbWDh_nHtehXxLPLBSpAzeM,566
311
- workbench-0.8.234.dist-info/top_level.txt,sha256=Dhy72zTxaA_o_yRkPZx5zw-fwumnjGaeGf0hBN3jc_w,10
312
- workbench-0.8.234.dist-info/RECORD,,
307
+ workbench-0.8.236.dist-info/licenses/LICENSE,sha256=RTBoTMeEwTgEhS-n8vgQ-VUo5qig0PWVd8xFPKU6Lck,1080
308
+ workbench-0.8.236.dist-info/METADATA,sha256=uujaljy_KtWusibQh5-Lcyw9Z0Bv7p7R5cvDZtk9Ibo,10033
309
+ workbench-0.8.236.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
310
+ workbench-0.8.236.dist-info/entry_points.txt,sha256=t_9tY7iYku9z96qFZZtUgbWDh_nHtehXxLPLBSpAzeM,566
311
+ workbench-0.8.236.dist-info/top_level.txt,sha256=Dhy72zTxaA_o_yRkPZx5zw-fwumnjGaeGf0hBN3jc_w,10
312
+ workbench-0.8.236.dist-info/RECORD,,
@@ -1,75 +0,0 @@
1
- """A Model Plot component that switches display based on model type. The plot
2
- will be a confusion matrix for a classifier and a regression plot for a regressor
3
- """
4
-
5
- from dash import dcc
6
- import plotly.graph_objects as go
7
-
8
- # Workbench Imports
9
- from workbench.api import Model, ModelType
10
- from workbench.web_interface.components.component_interface import ComponentInterface
11
- from workbench.web_interface.components.plugins.confusion_matrix import ConfusionMatrix
12
- from workbench.web_interface.components.plugins.scatter_plot import ScatterPlot
13
- from workbench.utils.deprecated_utils import deprecated
14
-
15
-
16
- @deprecated(version="0.9")
17
- class ModelPlot(ComponentInterface):
18
- """Model Metrics Components"""
19
-
20
- def create_component(self, component_id: str) -> dcc.Graph:
21
- # Initialize an empty plot figure
22
- return dcc.Graph(id=component_id, figure=self.display_text("Waiting for Data..."))
23
-
24
- def update_properties(self, model: Model, inference_run: str) -> go.Figure:
25
- """Create a Model Plot Figure based on the model type.
26
- Args:
27
- model (Model): Workbench Model object
28
- inference_run (str): Inference run capture Name
29
- Returns:
30
- go.Figure: A Plotly Figure (either a Confusion Matrix or Scatter Plot)
31
- """
32
-
33
- # Based on the model type, we'll generate a different plot
34
- if model.model_type == ModelType.CLASSIFIER:
35
- return ConfusionMatrix().update_properties(model, inference_run=inference_run)[0]
36
- elif model.model_type in [ModelType.REGRESSOR, ModelType.UQ_REGRESSOR]:
37
- df = model.get_inference_predictions(inference_run)
38
- if df is None:
39
- return self.display_text("No Data")
40
-
41
- # Grab the target(s) for this model
42
- target = model.target()
43
-
44
- # For multi-task models, match target to inference_run name or default to first
45
- if isinstance(target, list):
46
- target = next((t for t in target if t in inference_run), target[0])
47
-
48
- # Compute error for coloring
49
- df["error"] = abs(df["prediction"] - df[target])
50
- return ScatterPlot().update_properties(
51
- df,
52
- color="error",
53
- regression_line=True,
54
- x=target,
55
- y="prediction",
56
- )[0]
57
- else:
58
- return self.display_text(f"Model Type: {model.model_type}\n\n Awesome Plot Coming Soon!")
59
-
60
-
61
- if __name__ == "__main__":
62
- # This class takes in model details and generates a Confusion Matrix
63
- from workbench.api.model import Model
64
-
65
- m = Model("abalone-regression")
66
- inference_run = "model_training"
67
-
68
- # Instantiate the ModelPlot class
69
- model_plot = ModelPlot()
70
-
71
- # Generate the figure
72
- fig = model_plot.update_properties(m, inference_run)
73
-
74
- # Show the figure
75
- fig.show()