iints-sdk-python35 1.5.20__py3-none-any.whl → 1.5.23__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.
iints/__init__.py CHANGED
@@ -11,7 +11,7 @@ except ImportError: # pragma: no cover - Python < 3.8 fallback
11
11
  try:
12
12
  __version__ = version("iints-sdk-python35")
13
13
  except PackageNotFoundError: # pragma: no cover - source tree fallback
14
- __version__ = "1.5.20"
14
+ __version__ = "1.5.23"
15
15
 
16
16
  # Note to developers: this SDK is currently maintained by a single author.
17
17
  # Please report bugs via GitHub issues and feel free to contribute fixes via PRs.
@@ -854,9 +854,15 @@ class ClinicalReportGenerator:
854
854
  ax.set_ylabel("Sensor glucose (mg/dL)")
855
855
  ax.grid(True, alpha=0.22)
856
856
  ax.legend(loc="upper left", fontsize=7, frameon=True)
857
- fig.tight_layout()
858
- fig.savefig(output_path, dpi=260, bbox_inches="tight")
859
- plt.close(fig)
857
+ try:
858
+ fig.tight_layout()
859
+ fig.savefig(output_path, dpi=260, bbox_inches="tight")
860
+ except ValueError as exc:
861
+ logger.warning("Clinical validation plot layout failed; saving fallback layout: %s", exc)
862
+ fig.subplots_adjust(left=0.08, right=0.98, top=0.9, bottom=0.12)
863
+ fig.savefig(output_path, dpi=260)
864
+ finally:
865
+ plt.close(fig)
860
866
 
861
867
  @staticmethod
862
868
  def _metric_delta(current: float, target: float, higher_is_better: bool = True) -> str:
iints/utils/plotting.py CHANGED
@@ -54,6 +54,11 @@ def apply_plot_style(
54
54
  "ytick.labelsize": 10,
55
55
  "axes.spines.top": False,
56
56
  "axes.spines.right": False,
57
+ # Scientific styles can enable mathtext tick formatting. Some
58
+ # Matplotlib/macOS combinations then try to parse empty ticklabels
59
+ # during tight_layout(), which can abort report generation.
60
+ "axes.formatter.use_mathtext": False,
61
+ "text.usetex": False,
57
62
  }
58
63
  )
59
64
  return colors
iints_desktop/launcher.py CHANGED
@@ -29,7 +29,8 @@ def main() -> int | None:
29
29
  return qt_main()
30
30
 
31
31
  print(
32
- "PySide6 is not installed; falling back to the Tkinter desktop app.",
32
+ "PySide6 is not installed; falling back to the Tkinter desktop app. "
33
+ 'Install the full desktop app with: python -m pip install -U "iints-sdk-python35[full,desktop,mdmp]"',
33
34
  file=sys.stderr,
34
35
  )
35
36
  from iints_desktop.app import main as tk_main
iints_desktop/qt_app.py CHANGED
@@ -43,7 +43,7 @@ from iints_desktop.render_3dmol import generate_3dmol_html
43
43
 
44
44
  DESKTOP_RELEASE_URL = "https://github.com/python35/IINTS-SDK/releases/tag/desktop-beta-latest"
45
45
  UPDATE_DOCS_URL = "https://python35.github.io/IINTS-SDK/APP_INSTALL/"
46
- PYTHON_SDK_UPDATE_COMMAND = 'python -m pip install -U "iints-sdk-python35[full,desktop-qt,mdmp]"'
46
+ PYTHON_SDK_UPDATE_COMMAND = 'python -m pip install -U "iints-sdk-python35[full,desktop,mdmp]"'
47
47
  ENABLE_EMBEDDED_WEBENGINE = os.environ.get("QT_QPA_PLATFORM") != "offscreen"
48
48
  _CRASH_LOG_HANDLE: Any | None = None
49
49
 
@@ -55,7 +55,7 @@ def _python_update_command() -> list[str]:
55
55
  python_executable = "py" if sys.platform.startswith("win") else "python3"
56
56
  else:
57
57
  python_executable = sys.executable
58
- return [python_executable, "-m", "pip", "install", "-U", "iints-sdk-python35[full,desktop-qt,mdmp]"]
58
+ return [python_executable, "-m", "pip", "install", "-U", "iints-sdk-python35[full,desktop,mdmp]"]
59
59
 
60
60
 
61
61
  def _display_command(command: list[str]) -> str:
@@ -598,7 +598,7 @@ if _PYSIDE_IMPORT_ERROR is None:
598
598
 
599
599
  # Setup keyboard shortcuts
600
600
  self.run_shortcut = QShortcut(QKeySequence("Ctrl+R"), self)
601
- self.run_shortcut.activated.connect(self._run_workflow)
601
+ self.run_shortcut.activated.connect(self._run_selected_workflow)
602
602
  self.open_update_docs_button = QPushButton("Open Update Docs")
603
603
  self.copy_update_command_button = QPushButton("Copy Update Command")
604
604
  self.open_update_terminal_button = QPushButton("Open Update Terminal")
@@ -3055,7 +3055,8 @@ def main() -> int:
3055
3055
  if _PYSIDE_IMPORT_ERROR is not None:
3056
3056
  message = (
3057
3057
  "PySide6 is not installed. Install it with: "
3058
- 'python -m pip install -U -e ".[full,desktop-qt,mdmp]"'
3058
+ 'python -m pip install -U "iints-sdk-python35[full,desktop,mdmp]" '
3059
+ 'or, from a source checkout, python -m pip install -U -e ".[full,desktop,mdmp]"'
3059
3060
  )
3060
3061
  _write_startup_log(message)
3061
3062
  raise RuntimeError(message) from _PYSIDE_IMPORT_ERROR
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iints-sdk-python35
3
- Version: 1.5.20
3
+ Version: 1.5.23
4
4
  Summary: A pre-clinical Edge-AI SDK for diabetes management validation.
5
5
  Author-email: Rune Bobbaers <rune.bobbaers@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -71,6 +71,8 @@ Requires-Dist: cryptography<50.0.0,>=42.0.0; extra == "mdmp"
71
71
  Provides-Extra: desktop
72
72
  Requires-Dist: pyinstaller<7.0.0,>=6.11.0; extra == "desktop"
73
73
  Requires-Dist: setuptools<81.0.0,>=77.0.0; extra == "desktop"
74
+ Requires-Dist: PySide6<7.0.0,>=6.7.0; extra == "desktop"
75
+ Requires-Dist: plotly<7.0.0,>=5.18.0; extra == "desktop"
74
76
  Provides-Extra: desktop-qt
75
77
  Requires-Dist: pyinstaller<7.0.0,>=6.11.0; extra == "desktop-qt"
76
78
  Requires-Dist: setuptools<81.0.0,>=77.0.0; extra == "desktop-qt"
@@ -115,7 +117,12 @@ Current beta downloads:
115
117
  | macOS | [`.dmg`](https://github.com/python35/IINTS-SDK/releases/download/desktop-beta-latest/IINTS-AF-Desktop-Beta-macos.dmg) |
116
118
  | Linux | [executable](https://github.com/python35/IINTS-SDK/releases/download/desktop-beta-latest/IINTS-AF-Desktop-Beta-linux-x64) |
117
119
 
120
+ Python install, including the PySide6 desktop runtime:
118
121
 
122
+ ```bash
123
+ python -m pip install -U "iints-sdk-python35[full,desktop,mdmp]"
124
+ iints-desktop
125
+ ```
119
126
 
120
127
  ## License
121
128
 
@@ -1,4 +1,4 @@
1
- iints/__init__.py,sha256=CLaO23rTD60_N4RXV4eXAUvQGbw6cLrHty357hNR8S8,11347
1
+ iints/__init__.py,sha256=ZHLtn-Hrxk9hCJJa_3g9ed-K0CD-nriWAA4bPpNt8aU,11347
2
2
  iints/demo_assets.py,sha256=h9bXB6aBptwtvd2drAjg4wp3XE7zXuESxVG8vJgSUJU,2071
3
3
  iints/highlevel.py,sha256=ozZ3AOux7a4qhc_WSUhfNbwVb07Tc7XekBfCgBv5qas,23024
4
4
  iints/metrics.py,sha256=pFFGiGa081YYmRJ8rpV72zYRWmrLq-zA9NxFJw-7HEM,903
@@ -34,7 +34,7 @@ iints/analysis/hardware_benchmark.py,sha256=fzGTiHYG0VO9mhNc20oCB73ZE6roVb2cM0Lk
34
34
  iints/analysis/metrics.py,sha256=M6SLIp3DKRJTpZNCv5M0AjKC_OveOjGf0nsJ_wcF-mk,4325
35
35
  iints/analysis/population_report.py,sha256=x3pIJijNynLYM4M6n47_6juUGWde73C7AvC5pJpV2mY,7397
36
36
  iints/analysis/poster.py,sha256=xR_KasvOLSFZspfw3rWl75RV_xLnzO-hObzzurG-NKQ,10071
37
- iints/analysis/reporting.py,sha256=5rzgakMzSxpYhToSy0wZC9Kp0lkOdOJQto23QN7l4JE,48541
37
+ iints/analysis/reporting.py,sha256=6M8ihJHcUwOktUR9gqJfsu7xCRIYNQ0AQN_E0kCsRgw,48842
38
38
  iints/analysis/run_quality.py,sha256=FyYg0ijD1aOKTjXVYv_neUPuNlFFgxNQL5s-ViAg_DE,7285
39
39
  iints/analysis/safety_index.py,sha256=jfYIELn9sSp9lLOH6t4fJ8jJi1mTOhGrFme9cX6Iric,10897
40
40
  iints/analysis/safety_visualizer.py,sha256=5bfJnoDoQF4HjSCf3XTZHI9mPuztXqeKpCIyuGcXZuU,14074
@@ -222,7 +222,7 @@ iints/tools/theory_stress_lab.py,sha256=IcV05LmAj-oQCy0-FHHFCXFlH7h5qDLatGdyEXi3
222
222
  iints/utils/__init__.py,sha256=KGDuOUBT-G2_76sLWJqDhR_nhcgE17ZMGuQxObhy_mo,71
223
223
  iints/utils/academic_artifacts.py,sha256=ucMgAtz82Bc3sSn8tPsco4wS8BpZWAd05800DYlL4F8,9663
224
224
  iints/utils/csv_safety.py,sha256=KdkBQja6hCVkLgxfqIoSqHa_6djLuxE3wYmjdIj4nuc,881
225
- iints/utils/plotting.py,sha256=kXyaWMBUSt5HApml0lAaQL-7MOVXCwknYS53TGet1Ig,1788
225
+ iints/utils/plotting.py,sha256=YRP0JIpnyyzq_GidHfrz1CbeRT0jzz6tnj8zCtdZHgw,2097
226
226
  iints/utils/run_io.py,sha256=Ipkwe1IgaNwDacJeVuR7jRqCzhbz4so2w-_JvHLN9fQ,5204
227
227
  iints/utils/url_safety.py,sha256=X-rkhLYRZ80nZcpxfWgn2WmgD48IUxb2XLNoChrBoFU,1312
228
228
  iints/validation/__init__.py,sha256=FQoVu8Dim6j_HubG6F_dOlwDj7k4Iw02YgpyELtGPjc,6852
@@ -240,12 +240,12 @@ iints_desktop/app.py,sha256=lGown5olPu3XmwpGPJLowd1BTqVSk3uvgOmNOxX9bFQ,12997
240
240
  iints_desktop/cocoa_app.py,sha256=0GluDzgnvUXXZ6qCl5Y2awDtuspGq1Ihz0Aqw3AZDDM,13351
241
241
  iints_desktop/engine.py,sha256=lp980q7VXGHSXAwVuTLdEcRRPNXDNFSO75TOZX7u8L4,14629
242
242
  iints_desktop/fetcher.py,sha256=3j1t4Z40PWdx-GzqIJQbzEqwk4_Jt3Bd_1FJq36KGuo,2468
243
- iints_desktop/launcher.py,sha256=gtZ4BBS58JebpwC9w_lgWvXNpS9dWaZImY0eaopFtig,971
243
+ iints_desktop/launcher.py,sha256=WZBH9-6B2Q9jCw-F1n3hFahLuwvkjb_imuM-A6foKz4,1082
244
244
  iints_desktop/local_ai.py,sha256=iLMfRVo9rMRojwSXAeML8FUQxgtqAQoe8Aud4AFwh8A,11360
245
245
  iints_desktop/mdmp.py,sha256=23RVTD-dhnWyFhJDsm6rGkJ-3TzCra-LpGh3cCEpqa0,2882
246
246
  iints_desktop/molecule_viewer.py,sha256=cyGphzyfWHzxMUJBerLSsJg-ieFwY3HVaiMX0cz-KnQ,8794
247
247
  iints_desktop/molecules.py,sha256=pP2Aonqzb_AQe_JBRe4yScKdJ2aEG0y8Xso6QxtaVdE,9977
248
- iints_desktop/qt_app.py,sha256=KezBafFT0ywBW0bZqoxCy0MhHQc2H2ofiXDkHXQp8iA,142462
248
+ iints_desktop/qt_app.py,sha256=nNxzsfQJOecKFkfz94DyZCBzGvrnsZYcTKDQiUYKLKU,142570
249
249
  iints_desktop/render_3dmol.py,sha256=yUlLaxII4v6wmSVQY87ntkgE9koHvINyTpKhU0QDCG0,2238
250
250
  iints_desktop/results.py,sha256=8RzweLw1QSgIQnnb_sor045RV6PgFcDPPCyZ4BpboqE,5640
251
251
  iints_desktop/assets/alphafold/AF-P01275-F1-model_v4.cif,sha256=5ZRnfI-AhcuhuSHUk5A_8ASn8pAnSauz1l_RjpPIos4,181229
@@ -258,9 +258,9 @@ iints_desktop/assets/alphafold/glucagon_3D.png,sha256=MnFj0ALjH_k4i_OeIG1EuXyM8s
258
258
  iints_desktop/assets/alphafold/glut4_3D.png,sha256=CvEJygGlQIXqWIipMoufS_NejWhl3-ISSA8UQK1vrJ4,806533
259
259
  iints_desktop/assets/alphafold/insr_3D.png,sha256=aq6xWr00sX_PmslMyiM9wCRMRw0WhUIpW6LW6NB2mvw,872797
260
260
  iints_desktop/assets/alphafold/insulin_3D.png,sha256=u1pJgCciaJYID7KghwJ3c3GK41kEkADf-am7-Ctm2LE,64492
261
- iints_sdk_python35-1.5.20.dist-info/licenses/LICENSE,sha256=pmk2DGE1Cj9zr5hfus2x_sILJBnIBR1KvJWp4OXYqc0,8978
262
- iints_sdk_python35-1.5.20.dist-info/licenses/LICENSE-MIT-IINTS-LEGACY,sha256=HzvJLhuEHRUlY9Sl1PZ3-jG0ZBOuMXtbrMF1la02M3E,1078
263
- iints_sdk_python35-1.5.20.dist-info/licenses/NOTICE,sha256=4sQjo6BqDGi1abL9Gp9W2F6851cpzE3jvIl1cpHuO0I,678
261
+ iints_sdk_python35-1.5.23.dist-info/licenses/LICENSE,sha256=pmk2DGE1Cj9zr5hfus2x_sILJBnIBR1KvJWp4OXYqc0,8978
262
+ iints_sdk_python35-1.5.23.dist-info/licenses/LICENSE-MIT-IINTS-LEGACY,sha256=HzvJLhuEHRUlY9Sl1PZ3-jG0ZBOuMXtbrMF1la02M3E,1078
263
+ iints_sdk_python35-1.5.23.dist-info/licenses/NOTICE,sha256=4sQjo6BqDGi1abL9Gp9W2F6851cpzE3jvIl1cpHuO0I,678
264
264
  mdmp_ai/__init__.py,sha256=chKE8_Wo7oxj5CFqZ9NcyLjAHM5npvaKkLvTdBPtjo8,160
265
265
  mdmp_ai/lineage.py,sha256=LY_sshoVTLPQfhP3ZDLv0drdBoxGW_YXbdAb_XMAllQ,7065
266
266
  mdmp_core/__init__.py,sha256=5kvhQwYy-puaztBzzohBex_wiv2YB4Ui9MWk1hTiVDA,3768
@@ -300,8 +300,8 @@ mdmp_integrations/__init__.py,sha256=r5z2RODMmZCFHkvAOahcL576S1Dp0AuyQXQAvefzVQQ
300
300
  mdmp_integrations/dvc.py,sha256=1UVL_It-Xp6ad8G66ubm9YaF0O9n31EMiJ466zPK9vY,740
301
301
  mdmp_integrations/mlflow.py,sha256=YiT6LKu_sN2k1Gzz4U4kqby_JNhQUiOi38AO6sCPvPg,367
302
302
  mdmp_integrations/wandb.py,sha256=r1-gXYkIKN396K0VU6uuqk1SWTNGqto1Q9HZ-RKBEss,496
303
- iints_sdk_python35-1.5.20.dist-info/METADATA,sha256=ccQpifUdsZjZZ2uhw8oqqS5NmJfudGIJBRdgoKz3xJE,6117
304
- iints_sdk_python35-1.5.20.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
305
- iints_sdk_python35-1.5.20.dist-info/entry_points.txt,sha256=E0M7J7Kham72tlGuT1vKDeFvFM7hpMSHFYKelgjFRnA,751
306
- iints_sdk_python35-1.5.20.dist-info/top_level.txt,sha256=LSZPi8SHOphWaSuSm6ztHLroHQHEHeuEuDh7PgstC3k,69
307
- iints_sdk_python35-1.5.20.dist-info/RECORD,,
303
+ iints_sdk_python35-1.5.23.dist-info/METADATA,sha256=EVCR5pb5nuoMThHGyQjQ95yI5eZUdhDFPS1nAgkz_dE,6377
304
+ iints_sdk_python35-1.5.23.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
305
+ iints_sdk_python35-1.5.23.dist-info/entry_points.txt,sha256=E0M7J7Kham72tlGuT1vKDeFvFM7hpMSHFYKelgjFRnA,751
306
+ iints_sdk_python35-1.5.23.dist-info/top_level.txt,sha256=LSZPi8SHOphWaSuSm6ztHLroHQHEHeuEuDh7PgstC3k,69
307
+ iints_sdk_python35-1.5.23.dist-info/RECORD,,