iints-sdk-python35 1.5.2__tar.gz → 1.5.4__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 (251) hide show
  1. iints_sdk_python35-1.5.4/PKG-INFO +200 -0
  2. iints_sdk_python35-1.5.4/README.md +134 -0
  3. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/pyproject.toml +6 -2
  4. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/__init__.py +20 -3
  5. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/ai/cli.py +8 -8
  6. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/__init__.py +44 -0
  7. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/baseline.py +7 -2
  8. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/booth_demo.py +286 -0
  9. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/carelink_workbench.py +1 -1
  10. iints_sdk_python35-1.5.4/src/iints/analysis/eucys_results.py +549 -0
  11. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/hardware_benchmark.py +17 -7
  12. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/reporting.py +5 -2
  13. iints_sdk_python35-1.5.4/src/iints/analysis/study_analysis.py +1289 -0
  14. iints_sdk_python35-1.5.4/src/iints/analysis/study_engine.py +442 -0
  15. iints_sdk_python35-1.5.4/src/iints/analysis/study_experiment.py +168 -0
  16. iints_sdk_python35-1.5.4/src/iints/analysis/study_poster.py +344 -0
  17. iints_sdk_python35-1.5.4/src/iints/analysis/study_protocol.py +307 -0
  18. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/cli/cli.py +3028 -607
  19. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/cli/patient_cli.py +100 -15
  20. iints_sdk_python35-1.5.4/src/iints/core/algorithms/clinical_baseline.py +151 -0
  21. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/algorithms/pid_controller.py +22 -6
  22. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/patient/models.py +27 -8
  23. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/simulator.py +2 -1
  24. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/nightscout.py +4 -0
  25. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/registry.py +36 -1
  26. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/tidepool.py +5 -0
  27. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/highlevel.py +9 -3
  28. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/live_patient/__init__.py +23 -1
  29. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/live_patient/api.py +182 -51
  30. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/live_patient/daemon.py +22 -1
  31. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/live_patient/edge_benchmark.py +3 -3
  32. iints_sdk_python35-1.5.4/src/iints/live_patient/edge_ops.py +1221 -0
  33. iints_sdk_python35-1.5.4/src/iints/live_patient/long_study.py +885 -0
  34. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/live_patient/runtime.py +101 -20
  35. iints_sdk_python35-1.5.4/src/iints/live_patient/service_export.py +578 -0
  36. iints_sdk_python35-1.5.4/src/iints/live_patient/uno_q.py +413 -0
  37. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/scenarios/study_pack.py +4 -7
  38. iints_sdk_python35-1.5.4/src/iints/templates/uno_q/README.md +110 -0
  39. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/templates/uno_q/iints_supervisor_bridge.ino +4 -0
  40. iints_sdk_python35-1.5.4/src/iints/utils/csv_safety.py +31 -0
  41. iints_sdk_python35-1.5.4/src/iints/utils/url_safety.py +33 -0
  42. iints_sdk_python35-1.5.4/src/iints_sdk_python35.egg-info/PKG-INFO +200 -0
  43. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints_sdk_python35.egg-info/SOURCES.txt +10 -0
  44. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints_sdk_python35.egg-info/requires.txt +3 -0
  45. iints_sdk_python35-1.5.4/tests/test_cli_algorithm_loading.py +24 -0
  46. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/tests/test_cli_booth_demo.py +6 -0
  47. iints_sdk_python35-1.5.4/tests/test_cli_cloud_import_security.py +131 -0
  48. iints_sdk_python35-1.5.4/tests/test_cli_edge_runtime.py +686 -0
  49. iints_sdk_python35-1.5.4/tests/test_cli_expo_tools.py +518 -0
  50. iints_sdk_python35-1.5.4/tests/test_cli_onboarding.py +92 -0
  51. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/tests/test_cli_patient_runtime.py +88 -0
  52. iints_sdk_python35-1.5.2/PKG-INFO +0 -120
  53. iints_sdk_python35-1.5.2/README.md +0 -57
  54. iints_sdk_python35-1.5.2/src/iints/analysis/study_analysis.py +0 -721
  55. iints_sdk_python35-1.5.2/src/iints/analysis/study_poster.py +0 -150
  56. iints_sdk_python35-1.5.2/src/iints/analysis/study_protocol.py +0 -310
  57. iints_sdk_python35-1.5.2/src/iints/live_patient/edge_ops.py +0 -391
  58. iints_sdk_python35-1.5.2/src/iints/live_patient/service_export.py +0 -71
  59. iints_sdk_python35-1.5.2/src/iints/live_patient/uno_q.py +0 -37
  60. iints_sdk_python35-1.5.2/src/iints/templates/uno_q/README.md +0 -21
  61. iints_sdk_python35-1.5.2/src/iints_sdk_python35.egg-info/PKG-INFO +0 -120
  62. iints_sdk_python35-1.5.2/tests/test_cli_edge_runtime.py +0 -43
  63. iints_sdk_python35-1.5.2/tests/test_cli_expo_tools.py +0 -246
  64. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/LICENSE +0 -0
  65. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/LICENSE-MIT-IINTS-LEGACY +0 -0
  66. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/NOTICE +0 -0
  67. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/setup.cfg +0 -0
  68. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/ai/__init__.py +0 -0
  69. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/ai/assistant.py +0 -0
  70. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/ai/backends/__init__.py +0 -0
  71. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/ai/backends/base.py +0 -0
  72. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/ai/backends/mistral_api.py +0 -0
  73. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/ai/backends/ollama.py +0 -0
  74. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/ai/mdmp_guard.py +0 -0
  75. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/ai/model_catalog.py +0 -0
  76. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/ai/prepare.py +0 -0
  77. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/ai/prompts.py +0 -0
  78. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/algorithm_xray.py +0 -0
  79. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/clinical_benchmark.py +0 -0
  80. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/clinical_metrics.py +0 -0
  81. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/clinical_tir_analyzer.py +0 -0
  82. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/diabetes_metrics.py +0 -0
  83. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/edge_efficiency.py +0 -0
  84. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/edge_performance_monitor.py +0 -0
  85. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/explainability.py +0 -0
  86. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/explainable_ai.py +0 -0
  87. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/metrics.py +0 -0
  88. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/population_report.py +0 -0
  89. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/poster.py +0 -0
  90. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/safety_index.py +0 -0
  91. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/sensor_filtering.py +0 -0
  92. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/analysis/validator.py +0 -0
  93. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/api/__init__.py +0 -0
  94. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/api/base_algorithm.py +0 -0
  95. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/api/registry.py +0 -0
  96. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/api/template_algorithm.py +0 -0
  97. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/assets/iints_logo.png +0 -0
  98. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/cli/__init__.py +0 -0
  99. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/__init__.py +0 -0
  100. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/algorithms/__init__.py +0 -0
  101. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/algorithms/battle_runner.py +0 -0
  102. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/algorithms/correction_bolus.py +0 -0
  103. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/algorithms/discovery.py +0 -0
  104. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/algorithms/fixed_basal_bolus.py +0 -0
  105. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/algorithms/hybrid_algorithm.py +0 -0
  106. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/algorithms/lstm_algorithm.py +0 -0
  107. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/algorithms/mock_algorithms.py +0 -0
  108. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/algorithms/standard_pump_algo.py +0 -0
  109. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/device.py +0 -0
  110. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/device_manager.py +0 -0
  111. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/devices/__init__.py +0 -0
  112. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/devices/models.py +0 -0
  113. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/patient/__init__.py +0 -0
  114. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/patient/bergman_model.py +0 -0
  115. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/patient/patient_factory.py +0 -0
  116. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/patient/profile.py +0 -0
  117. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/safety/__init__.py +0 -0
  118. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/safety/config.py +0 -0
  119. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/safety/input_validator.py +0 -0
  120. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/safety/supervisor.py +0 -0
  121. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/simulation/__init__.py +0 -0
  122. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/simulation/scenario_parser.py +0 -0
  123. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/core/supervisor.py +0 -0
  124. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/__init__.py +0 -0
  125. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/adapter.py +0 -0
  126. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/certify.py +0 -0
  127. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/column_mapper.py +0 -0
  128. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/contracts.py +0 -0
  129. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/datasets.json +0 -0
  130. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/demo/__init__.py +0 -0
  131. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/demo/demo_cgm.csv +0 -0
  132. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/guardians.py +0 -0
  133. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/importer.py +0 -0
  134. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/ingestor.py +0 -0
  135. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/mdmp_visualizer.py +0 -0
  136. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/quality_checker.py +0 -0
  137. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/runner.py +0 -0
  138. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/study_corruption.py +0 -0
  139. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/synthetic_mirror.py +0 -0
  140. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/universal_parser.py +0 -0
  141. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/virtual_patients/clinic_safe_baseline.yaml +0 -0
  142. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/virtual_patients/clinic_safe_hyper_challenge.yaml +0 -0
  143. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/virtual_patients/clinic_safe_hypo_prone.yaml +0 -0
  144. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/virtual_patients/clinic_safe_midnight.yaml +0 -0
  145. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/virtual_patients/clinic_safe_pizza.yaml +0 -0
  146. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/virtual_patients/clinic_safe_stress_meal.yaml +0 -0
  147. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/virtual_patients/default_patient.yaml +0 -0
  148. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/data/virtual_patients/patient_559_config.yaml +0 -0
  149. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/demo_assets.py +0 -0
  150. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/emulation/__init__.py +0 -0
  151. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/emulation/legacy_base.py +0 -0
  152. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/emulation/medtronic_780g.py +0 -0
  153. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/emulation/omnipod_5.py +0 -0
  154. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/emulation/tandem_controliq.py +0 -0
  155. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/learning/__init__.py +0 -0
  156. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/learning/autonomous_optimizer.py +0 -0
  157. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/learning/learning_system.py +0 -0
  158. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/mdmp/__init__.py +0 -0
  159. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/mdmp/backend.py +0 -0
  160. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/metrics.py +0 -0
  161. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/population/__init__.py +0 -0
  162. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/population/generator.py +0 -0
  163. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/population/runner.py +0 -0
  164. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/presets/__init__.py +0 -0
  165. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/presets/evidence_sources.yaml +0 -0
  166. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/presets/forecast_calibration_profiles.yaml +0 -0
  167. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/presets/golden_benchmark.yaml +0 -0
  168. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/presets/presets.json +0 -0
  169. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/presets/safety_contract_default.yaml +0 -0
  170. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/presets/validation_profiles.yaml +0 -0
  171. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/research/__init__.py +0 -0
  172. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/research/audit.py +0 -0
  173. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/research/calibration_gate.py +0 -0
  174. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/research/config.py +0 -0
  175. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/research/dataset.py +0 -0
  176. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/research/evaluation.py +0 -0
  177. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/research/losses.py +0 -0
  178. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/research/metrics.py +0 -0
  179. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/research/model_registry.py +0 -0
  180. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/research/predictor.py +0 -0
  181. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/scenarios/__init__.py +0 -0
  182. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/scenarios/generator.py +0 -0
  183. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/templates/__init__.py +0 -0
  184. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/templates/default_algorithm.py +0 -0
  185. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/templates/demos/__init__.py +0 -0
  186. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/templates/demos/live_stage_demo.py +0 -0
  187. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/templates/scenarios/__init__.py +0 -0
  188. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/templates/scenarios/chaos_insulin_stacking.json +0 -0
  189. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/templates/scenarios/chaos_runaway_ai.json +0 -0
  190. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/templates/scenarios/example_scenario.json +0 -0
  191. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/templates/scenarios/exercise_stress.json +0 -0
  192. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/utils/__init__.py +0 -0
  193. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/utils/plotting.py +0 -0
  194. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/utils/run_io.py +0 -0
  195. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/validation/__init__.py +0 -0
  196. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/validation/golden.py +0 -0
  197. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/validation/replay.py +0 -0
  198. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/validation/run_validation.py +0 -0
  199. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/validation/safety_contract.py +0 -0
  200. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/validation/schemas.py +0 -0
  201. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/visualization/__init__.py +0 -0
  202. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/visualization/cockpit.py +0 -0
  203. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints/visualization/uncertainty_cloud.py +0 -0
  204. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints_sdk_python35.egg-info/dependency_links.txt +0 -0
  205. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints_sdk_python35.egg-info/entry_points.txt +0 -0
  206. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/iints_sdk_python35.egg-info/top_level.txt +0 -0
  207. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_ai/__init__.py +0 -0
  208. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_ai/lineage.py +0 -0
  209. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/__init__.py +0 -0
  210. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/audit.py +0 -0
  211. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/bias_hooks.py +0 -0
  212. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/bundle.py +0 -0
  213. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/certification.py +0 -0
  214. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/cli.py +0 -0
  215. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/compare.py +0 -0
  216. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/conformance.py +0 -0
  217. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/contracts.py +0 -0
  218. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/crypto.py +0 -0
  219. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/data/conformance/vectors/delegation.json +0 -0
  220. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/data/conformance/vectors/fingerprint.json +0 -0
  221. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/data/conformance/vectors/grading.json +0 -0
  222. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/data/conformance/vectors/signing.json +0 -0
  223. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/delegate.py +0 -0
  224. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/diffing.py +0 -0
  225. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/drift.py +0 -0
  226. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/exceptions.py +0 -0
  227. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/fingerprint.py +0 -0
  228. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/fingerprint_store.py +0 -0
  229. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/hf.py +0 -0
  230. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/keys/mdmp_pub_v1.pem +0 -0
  231. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/llm_provenance.py +0 -0
  232. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/migrate.py +0 -0
  233. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/policy.py +0 -0
  234. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/prov.py +0 -0
  235. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/registry.py +0 -0
  236. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/runner.py +0 -0
  237. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/schema_export.py +0 -0
  238. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/synthetic.py +0 -0
  239. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/trust.py +0 -0
  240. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_core/visualizer.py +0 -0
  241. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_flavors/__init__.py +0 -0
  242. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_integrations/__init__.py +0 -0
  243. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_integrations/dvc.py +0 -0
  244. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_integrations/mlflow.py +0 -0
  245. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/src/mdmp_integrations/wandb.py +0 -0
  246. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/tests/test_bergman.py +0 -0
  247. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/tests/test_cli_carelink_workbench.py +0 -0
  248. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/tests/test_cli_demo_export.py +0 -0
  249. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/tests/test_cli_poster.py +0 -0
  250. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/tests/test_install_doctor.py +0 -0
  251. {iints_sdk_python35-1.5.2 → iints_sdk_python35-1.5.4}/tests/test_population.py +0 -0
@@ -0,0 +1,200 @@
1
+ Metadata-Version: 2.4
2
+ Name: iints-sdk-python35
3
+ Version: 1.5.4
4
+ Summary: A pre-clinical Edge-AI SDK for diabetes management validation.
5
+ Author-email: Rune Bobbaers <rune.bobbaers@gmail.com>
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Homepage, https://github.com/python35/IINTS-SDK
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.10
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Development Status :: 5 - Production/Stable
15
+ Requires-Python: >=3.10
16
+ Description-Content-Type: text/markdown
17
+ License-File: LICENSE
18
+ License-File: NOTICE
19
+ License-File: LICENSE-MIT-IINTS-LEGACY
20
+ Requires-Dist: fastapi>=0.115.0
21
+ Requires-Dist: numpy>=1.24.0
22
+ Requires-Dist: pandas>=2.0.0
23
+ Requires-Dist: pydantic>=2.0.0
24
+ Requires-Dist: PyYAML
25
+ Requires-Dist: rich>=12.0.0
26
+ Requires-Dist: scipy>=1.9.0
27
+ Requires-Dist: typer[all]
28
+ Requires-Dist: uvicorn>=0.30.0
29
+ Provides-Extra: edge
30
+ Requires-Dist: pyserial>=3.5; extra == "edge"
31
+ Provides-Extra: reports
32
+ Requires-Dist: fpdf2>=2.8.0; extra == "reports"
33
+ Requires-Dist: matplotlib>=3.5.0; extra == "reports"
34
+ Requires-Dist: openpyxl>=3.0.0; extra == "reports"
35
+ Requires-Dist: pillow>=12.1.1; extra == "reports"
36
+ Requires-Dist: seaborn>=0.11.0; extra == "reports"
37
+ Provides-Extra: full
38
+ Requires-Dist: fpdf2>=2.8.0; extra == "full"
39
+ Requires-Dist: matplotlib>=3.5.0; extra == "full"
40
+ Requires-Dist: openpyxl>=3.0.0; extra == "full"
41
+ Requires-Dist: pyserial>=3.5; extra == "full"
42
+ Requires-Dist: pillow>=12.1.1; extra == "full"
43
+ Requires-Dist: seaborn>=0.11.0; extra == "full"
44
+ Provides-Extra: dev
45
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
46
+ Requires-Dist: hypothesis>=6.0.0; extra == "dev"
47
+ Requires-Dist: flake8; extra == "dev"
48
+ Requires-Dist: httpx>=0.27.0; extra == "dev"
49
+ Requires-Dist: mypy; extra == "dev"
50
+ Requires-Dist: pandas-stubs; extra == "dev"
51
+ Requires-Dist: types-PyYAML; extra == "dev"
52
+ Requires-Dist: types-psutil; extra == "dev"
53
+ Provides-Extra: torch
54
+ Requires-Dist: torch>=1.9.0; extra == "torch"
55
+ Provides-Extra: nightscout
56
+ Requires-Dist: py-nightscout; extra == "nightscout"
57
+ Provides-Extra: research
58
+ Requires-Dist: torch>=2.0.0; extra == "research"
59
+ Requires-Dist: pyarrow>=12.0.0; extra == "research"
60
+ Requires-Dist: h5py>=3.10.0; extra == "research"
61
+ Requires-Dist: onnx>=1.16.0; extra == "research"
62
+ Requires-Dist: onnxscript>=0.1.0; extra == "research"
63
+ Provides-Extra: mdmp
64
+ Requires-Dist: cryptography>=42.0.0; extra == "mdmp"
65
+ Dynamic: license-file
66
+
67
+ # IINTS-AF SDK
68
+ [![EUCYS 2026](https://img.shields.io/badge/EUCYS-2026%20Selected-gold?style=flat)](https://eucys.eu)
69
+ [![PyPI version](https://badge.fury.io/py/iints-sdk-python35.svg)](https://badge.fury.io/py/iints-sdk-python35)
70
+ [![Python Package CI](https://github.com/python35/IINTS-SDK/actions/workflows/python-package.yml/badge.svg)](https://github.com/python35/IINTS-SDK/actions/workflows/python-package.yml)
71
+ [![Docs](https://img.shields.io/badge/docs-IINTS--AF-0a66c2?style=flat&logo=firefox-browser&logoColor=white)](https://python35.github.io/IINTS-SDK/)
72
+
73
+ > "Code shouldn't be a secret when it's managing a life."
74
+
75
+ Insulin pumps make hundreds of autonomous decisions about drug delivery every day.
76
+ The algorithms behind those decisions are proprietary, unauditable, and difficult to inspect or improve, even by the patients whose lives depend on them.
77
+
78
+ IINTS-AF is an open-source research platform that changes that.
79
+
80
+ ## Core Research Question
81
+
82
+ **Can open-source simulation and deterministic safety supervision make insulin delivery algorithm development safer and more transparent for researchers and patients?**
83
+
84
+ ---
85
+
86
+ ## What It Does
87
+
88
+ **Simulate:** Run virtual patients through thousands of scenarios before any algorithm reaches a real device. A deterministic safety supervisor audits every AI decision. The AI may suggest. The supervisor decides.
89
+
90
+ **Certify:** Every dataset is fingerprinted and graded before it touches a study workflow. The goal is to keep benchmark inputs traceable, reviewable, and reproducible.
91
+
92
+ **Understand:** Generate audit-ready reports, visual posters, and local AI summaries from the same study bundle. IINTS-AF can use local models such as Ministral for explanation workflows on your own hardware.
93
+
94
+ ---
95
+
96
+ ## Research Results
97
+
98
+ Final locked benchmark: `3600` simulation runs, `6` profiles, `4` scenario families, `5` algorithms, `10` fixed seeds.
99
+
100
+ | Metric | ExampleAlgorithm | PID Baseline | Delta |
101
+ |---|---:|---:|---:|
102
+ | Time in Range | 87.16% | 83.72% | +3.44% |
103
+ | Time < 70 mg/dL | 1.28% | 5.25% | -3.97% |
104
+ | Supervisor interventions | 99 | 177 | -78 |
105
+
106
+ Additional benchmark result:
107
+ - clean certified conditions showed `+17.64` Time-in-Range points versus corrupted uncertified conditions
108
+
109
+ For the full scientific write-up, see:
110
+ - `research/EUCYS_REPORT.md`
111
+ - `research/EUCYS_REPORT.pdf`
112
+ - `results/eucys_2026/EUCYS_RESULTS/EUCYS_SUMMARY.md`
113
+
114
+ ---
115
+
116
+ ## Install
117
+
118
+ ```bash
119
+ python3 -m venv .venv && source .venv/bin/activate
120
+ pip install -U "iints-sdk-python35[full,mdmp]"
121
+ iints doctor --smoke-run
122
+ ```
123
+
124
+ **Edge devices (Raspberry Pi 5, Arduino UNO Q):**
125
+
126
+ ```bash
127
+ pip install -U "iints-sdk-python35[edge,mdmp]"
128
+ ```
129
+
130
+ ---
131
+
132
+ ## Quick Start
133
+
134
+ ```bash
135
+ iints quickstart --project-name my_study
136
+ cd my_study
137
+ iints presets run --name baseline_t1d --algo algorithms/example_algorithm.py
138
+ iints data certify contracts/clinical_mdmp_contract.yaml data/demo/diabetes_cgm.csv --output-json audit/certification.json
139
+ iints ai report results/<run_id>
140
+ ```
141
+
142
+ ---
143
+
144
+ ## Final Benchmark Workflow
145
+
146
+ ```bash
147
+ tools/research/run_eucys_final.sh \
148
+ --algo algorithms/example_algorithm.py \
149
+ --output-dir results/eucys_2026 \
150
+ --seeds 1,2,3,4,5,6,7,8,9,10
151
+ ```
152
+
153
+ Then render the report:
154
+
155
+ ```bash
156
+ tools/research/render_eucys_report_pdf.sh
157
+ ```
158
+
159
+ Main final artifacts:
160
+ - `results/eucys_2026/`
161
+ - `results/eucys_2026/EUCYS_RESULTS/EUCYS_MAIN_FIGURE.png`
162
+ - `results/eucys_2026/EUCYS_RESULTS/EUCYS_RESULTS_TABLE.csv`
163
+ - `research/EUCYS_REPORT.md`
164
+ - `research/EUCYS_REPORT.pdf`
165
+
166
+ ---
167
+
168
+ ## Live Digital Patient (Raspberry Pi)
169
+
170
+ ```bash
171
+ iints patient start \
172
+ --algo algorithms/example_algorithm.py \
173
+ --scenario-profile expo_hot_start \
174
+ --mode demo-time --speed 60x
175
+ ```
176
+
177
+ Open `http://127.0.0.1:8765/dashboard`. You will see a virtual patient running continuously, reacting to meals, exercise, and sleep in real time.
178
+
179
+ ---
180
+
181
+ ## Documentation
182
+
183
+ | | |
184
+ |---|---|
185
+ | Getting started | [Open guide](https://python35.github.io/IINTS-SDK/GETTING_STARTED/) |
186
+ | Edge hardware | [Open guide](https://python35.github.io/IINTS-SDK/EDGE_HARDWARE/) |
187
+ | Raspberry Pi setup | [Open guide](https://python35.github.io/IINTS-SDK/DIGITAL_PATIENT_PI/) |
188
+ | Data certification | [Open guide](https://python35.github.io/IINTS-SDK/MDMP_QUICKSTART/) |
189
+ | Full manual | [Open PDF manual](https://python35.github.io/IINTS-SDK/manuals/IINTS-AF_SDK_Manual.pdf) |
190
+ | Research report | [Open report source](research/EUCYS_REPORT.md) |
191
+
192
+ ---
193
+
194
+ > IINTS-AF is research software. Not a medical device.
195
+ > No clinical dosing advice. MIT Licensed.
196
+
197
+ ---
198
+
199
+ *Built by a 17-year-old with type 1 diabetes who wanted to
200
+ understand the device managing his life.*
@@ -0,0 +1,134 @@
1
+ # IINTS-AF SDK
2
+ [![EUCYS 2026](https://img.shields.io/badge/EUCYS-2026%20Selected-gold?style=flat)](https://eucys.eu)
3
+ [![PyPI version](https://badge.fury.io/py/iints-sdk-python35.svg)](https://badge.fury.io/py/iints-sdk-python35)
4
+ [![Python Package CI](https://github.com/python35/IINTS-SDK/actions/workflows/python-package.yml/badge.svg)](https://github.com/python35/IINTS-SDK/actions/workflows/python-package.yml)
5
+ [![Docs](https://img.shields.io/badge/docs-IINTS--AF-0a66c2?style=flat&logo=firefox-browser&logoColor=white)](https://python35.github.io/IINTS-SDK/)
6
+
7
+ > "Code shouldn't be a secret when it's managing a life."
8
+
9
+ Insulin pumps make hundreds of autonomous decisions about drug delivery every day.
10
+ The algorithms behind those decisions are proprietary, unauditable, and difficult to inspect or improve, even by the patients whose lives depend on them.
11
+
12
+ IINTS-AF is an open-source research platform that changes that.
13
+
14
+ ## Core Research Question
15
+
16
+ **Can open-source simulation and deterministic safety supervision make insulin delivery algorithm development safer and more transparent for researchers and patients?**
17
+
18
+ ---
19
+
20
+ ## What It Does
21
+
22
+ **Simulate:** Run virtual patients through thousands of scenarios before any algorithm reaches a real device. A deterministic safety supervisor audits every AI decision. The AI may suggest. The supervisor decides.
23
+
24
+ **Certify:** Every dataset is fingerprinted and graded before it touches a study workflow. The goal is to keep benchmark inputs traceable, reviewable, and reproducible.
25
+
26
+ **Understand:** Generate audit-ready reports, visual posters, and local AI summaries from the same study bundle. IINTS-AF can use local models such as Ministral for explanation workflows on your own hardware.
27
+
28
+ ---
29
+
30
+ ## Research Results
31
+
32
+ Final locked benchmark: `3600` simulation runs, `6` profiles, `4` scenario families, `5` algorithms, `10` fixed seeds.
33
+
34
+ | Metric | ExampleAlgorithm | PID Baseline | Delta |
35
+ |---|---:|---:|---:|
36
+ | Time in Range | 87.16% | 83.72% | +3.44% |
37
+ | Time < 70 mg/dL | 1.28% | 5.25% | -3.97% |
38
+ | Supervisor interventions | 99 | 177 | -78 |
39
+
40
+ Additional benchmark result:
41
+ - clean certified conditions showed `+17.64` Time-in-Range points versus corrupted uncertified conditions
42
+
43
+ For the full scientific write-up, see:
44
+ - `research/EUCYS_REPORT.md`
45
+ - `research/EUCYS_REPORT.pdf`
46
+ - `results/eucys_2026/EUCYS_RESULTS/EUCYS_SUMMARY.md`
47
+
48
+ ---
49
+
50
+ ## Install
51
+
52
+ ```bash
53
+ python3 -m venv .venv && source .venv/bin/activate
54
+ pip install -U "iints-sdk-python35[full,mdmp]"
55
+ iints doctor --smoke-run
56
+ ```
57
+
58
+ **Edge devices (Raspberry Pi 5, Arduino UNO Q):**
59
+
60
+ ```bash
61
+ pip install -U "iints-sdk-python35[edge,mdmp]"
62
+ ```
63
+
64
+ ---
65
+
66
+ ## Quick Start
67
+
68
+ ```bash
69
+ iints quickstart --project-name my_study
70
+ cd my_study
71
+ iints presets run --name baseline_t1d --algo algorithms/example_algorithm.py
72
+ iints data certify contracts/clinical_mdmp_contract.yaml data/demo/diabetes_cgm.csv --output-json audit/certification.json
73
+ iints ai report results/<run_id>
74
+ ```
75
+
76
+ ---
77
+
78
+ ## Final Benchmark Workflow
79
+
80
+ ```bash
81
+ tools/research/run_eucys_final.sh \
82
+ --algo algorithms/example_algorithm.py \
83
+ --output-dir results/eucys_2026 \
84
+ --seeds 1,2,3,4,5,6,7,8,9,10
85
+ ```
86
+
87
+ Then render the report:
88
+
89
+ ```bash
90
+ tools/research/render_eucys_report_pdf.sh
91
+ ```
92
+
93
+ Main final artifacts:
94
+ - `results/eucys_2026/`
95
+ - `results/eucys_2026/EUCYS_RESULTS/EUCYS_MAIN_FIGURE.png`
96
+ - `results/eucys_2026/EUCYS_RESULTS/EUCYS_RESULTS_TABLE.csv`
97
+ - `research/EUCYS_REPORT.md`
98
+ - `research/EUCYS_REPORT.pdf`
99
+
100
+ ---
101
+
102
+ ## Live Digital Patient (Raspberry Pi)
103
+
104
+ ```bash
105
+ iints patient start \
106
+ --algo algorithms/example_algorithm.py \
107
+ --scenario-profile expo_hot_start \
108
+ --mode demo-time --speed 60x
109
+ ```
110
+
111
+ Open `http://127.0.0.1:8765/dashboard`. You will see a virtual patient running continuously, reacting to meals, exercise, and sleep in real time.
112
+
113
+ ---
114
+
115
+ ## Documentation
116
+
117
+ | | |
118
+ |---|---|
119
+ | Getting started | [Open guide](https://python35.github.io/IINTS-SDK/GETTING_STARTED/) |
120
+ | Edge hardware | [Open guide](https://python35.github.io/IINTS-SDK/EDGE_HARDWARE/) |
121
+ | Raspberry Pi setup | [Open guide](https://python35.github.io/IINTS-SDK/DIGITAL_PATIENT_PI/) |
122
+ | Data certification | [Open guide](https://python35.github.io/IINTS-SDK/MDMP_QUICKSTART/) |
123
+ | Full manual | [Open PDF manual](https://python35.github.io/IINTS-SDK/manuals/IINTS-AF_SDK_Manual.pdf) |
124
+ | Research report | [Open report source](research/EUCYS_REPORT.md) |
125
+
126
+ ---
127
+
128
+ > IINTS-AF is research software. Not a medical device.
129
+ > No clinical dosing advice. MIT Licensed.
130
+
131
+ ---
132
+
133
+ *Built by a 17-year-old with type 1 diabetes who wanted to
134
+ understand the device managing his life.*
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "iints-sdk-python35"
7
- version = "1.5.2"
7
+ version = "1.5.4"
8
8
  authors = [
9
9
  { name="Rune Bobbaers", email="rune.bobbaers@gmail.com" },
10
10
  ]
@@ -35,7 +35,9 @@ dependencies = [
35
35
  ]
36
36
 
37
37
  [project.optional-dependencies]
38
- edge = []
38
+ edge = [
39
+ "pyserial>=3.5",
40
+ ]
39
41
  reports = [
40
42
  "fpdf2>=2.8.0",
41
43
  "matplotlib>=3.5.0",
@@ -47,6 +49,7 @@ full = [
47
49
  "fpdf2>=2.8.0",
48
50
  "matplotlib>=3.5.0",
49
51
  "openpyxl>=3.0.0",
52
+ "pyserial>=3.5",
50
53
  "pillow>=12.1.1",
51
54
  "seaborn>=0.11.0",
52
55
  ]
@@ -54,6 +57,7 @@ dev = [
54
57
  "pytest>=7.0.0",
55
58
  "hypothesis>=6.0.0",
56
59
  "flake8",
60
+ "httpx>=0.27.0",
57
61
  "mypy",
58
62
  "pandas-stubs",
59
63
  "types-PyYAML",
@@ -1,7 +1,7 @@
1
1
  # src/iints/__init__.py
2
2
 
3
3
  import pandas as pd # Required for type hints like pd.DataFrame
4
- from typing import Optional
4
+ from typing import Any, Optional
5
5
 
6
6
  try:
7
7
  from importlib.metadata import PackageNotFoundError, version
@@ -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.2"
14
+ __version__ = "1.5.4"
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.
@@ -95,9 +95,26 @@ from .live_patient import (
95
95
  summarize_edge_workspace,
96
96
  write_edge_update_script,
97
97
  )
98
- from .highlevel import run_simulation, run_full, run_population
99
98
  from .scenarios import ScenarioGeneratorConfig, generate_random_scenario
100
99
 
100
+
101
+ def run_simulation(*args: Any, **kwargs: Any) -> Any:
102
+ from .highlevel import run_simulation as _run_simulation
103
+
104
+ return _run_simulation(*args, **kwargs)
105
+
106
+
107
+ def run_full(*args: Any, **kwargs: Any) -> Any:
108
+ from .highlevel import run_full as _run_full
109
+
110
+ return _run_full(*args, **kwargs)
111
+
112
+
113
+ def run_population(*args: Any, **kwargs: Any) -> Any:
114
+ from .highlevel import run_population as _run_population
115
+
116
+ return _run_population(*args, **kwargs)
117
+
101
118
  try:
102
119
  from .analysis.booth_demo import build_booth_demo
103
120
  except Exception as exc: # pragma: no cover - optional reports stack
@@ -160,7 +160,7 @@ def _render_local_check(console: Console, status: dict[str, object]) -> None:
160
160
  console.print("[bold red]Ollama is too old for the open Ministral 3 runtime.[/bold red]")
161
161
 
162
162
 
163
- @app.command("models")
163
+ @app.command(name="models")
164
164
  def models() -> None:
165
165
  console = Console()
166
166
  table = Table(title="IINTS AI Local Mistral Model Guide")
@@ -189,7 +189,7 @@ def models() -> None:
189
189
  )
190
190
 
191
191
 
192
- @app.command("prepare")
192
+ @app.command(name="prepare")
193
193
  def prepare(
194
194
  run_dir: Annotated[Path, typer.Argument(help="Run output directory containing results.csv and run_metadata.json.")],
195
195
  create_dev_mdmp_cert: Annotated[
@@ -254,7 +254,7 @@ def _build_assistant(
254
254
  )
255
255
 
256
256
 
257
- @app.command("local-check")
257
+ @app.command(name="local-check")
258
258
  def local_check(
259
259
  model: Annotated[str, typer.Option(help="Ollama model name to validate locally.")] = DEFAULT_MINISTRAL_MODEL,
260
260
  ollama_host: Annotated[Optional[str], typer.Option(help="Override the Ollama base URL.")] = None,
@@ -294,7 +294,7 @@ def local_check(
294
294
  raise typer.Exit(code=1)
295
295
 
296
296
 
297
- @app.command("explain")
297
+ @app.command(name="explain")
298
298
  def explain(
299
299
  input_json: Annotated[Path, typer.Argument(help="Prepared run directory or JSON file with a single simulation step or decision context.")],
300
300
  mdmp_cert: Annotated[Optional[Path], typer.Option(help="Signed MDMP artifact required before AI analysis can run.")] = None,
@@ -335,7 +335,7 @@ def explain(
335
335
  raise typer.Exit(code=1)
336
336
 
337
337
 
338
- @app.command("trends")
338
+ @app.command(name="trends")
339
339
  def trends(
340
340
  input_json: Annotated[Path, typer.Argument(help="Prepared run directory or JSON file with glucose trace data or a run payload.")],
341
341
  mdmp_cert: Annotated[Optional[Path], typer.Option(help="Signed MDMP artifact required before AI analysis can run.")] = None,
@@ -376,7 +376,7 @@ def trends(
376
376
  raise typer.Exit(code=1)
377
377
 
378
378
 
379
- @app.command("anomalies")
379
+ @app.command(name="anomalies")
380
380
  def anomalies(
381
381
  input_json: Annotated[Path, typer.Argument(help="Prepared run directory or JSON file with simulation results or run summary.")],
382
382
  mdmp_cert: Annotated[Optional[Path], typer.Option(help="Signed MDMP artifact required before AI analysis can run.")] = None,
@@ -417,7 +417,7 @@ def anomalies(
417
417
  raise typer.Exit(code=1)
418
418
 
419
419
 
420
- @app.command("report")
420
+ @app.command(name="report")
421
421
  def report(
422
422
  input_json: Annotated[Path, typer.Argument(help="Prepared run directory or JSON file with run-level simulation outputs.")],
423
423
  mdmp_cert: Annotated[Optional[Path], typer.Option(help="Signed MDMP artifact required before AI analysis can run.")] = None,
@@ -458,7 +458,7 @@ def report(
458
458
  raise typer.Exit(code=1)
459
459
 
460
460
 
461
- @app.command("review")
461
+ @app.command(name="review")
462
462
  def review(
463
463
  input_json: Annotated[Path, typer.Argument(help="Prepared run directory or JSON file with run-level simulation outputs.")],
464
464
  mdmp_cert: Annotated[Optional[Path], typer.Option(help="Signed MDMP artifact required before AI analysis can run.")] = None,
@@ -1,10 +1,26 @@
1
1
  from .clinical_metrics import ClinicalMetricsCalculator, ClinicalMetricsResult
2
2
  from .baseline import compute_metrics, run_baseline_comparison, write_baseline_comparison
3
+ from .study_engine import (
4
+ StudyAlgorithmSpec,
5
+ StudyArmSpec,
6
+ StudyDesignPayload,
7
+ StudyMatrixRow,
8
+ StudyProfileSpec,
9
+ build_algorithm_registry,
10
+ build_study_design_payload,
11
+ resolve_profile_specs,
12
+ )
3
13
  from .study_protocol import (
4
14
  build_study_protocol_payload,
5
15
  render_study_protocol_markdown,
6
16
  write_study_protocol_bundle,
7
17
  )
18
+ from .study_experiment import (
19
+ StudyExperimentConfig,
20
+ build_study_experiment_template,
21
+ load_study_experiment_config,
22
+ render_study_experiment_yaml,
23
+ )
8
24
  from .study_analysis import (
9
25
  analyze_run_directory,
10
26
  analyze_study_directory,
@@ -15,6 +31,15 @@ from .study_analysis import (
15
31
  StudyRunSummary,
16
32
  StudySummary,
17
33
  )
34
+ from .eucys_results import (
35
+ build_eucys_abstract_draft_markdown,
36
+ build_eucys_filled_abstract_markdown,
37
+ build_eucys_jury_qa_markdown,
38
+ build_eucys_limitations_and_ethics_markdown,
39
+ build_eucys_poster_outline_markdown,
40
+ generate_eucys_main_figure,
41
+ generate_eucys_results_bundle,
42
+ )
18
43
 
19
44
 
20
45
  def _missing_reports_dependency(feature: str, exc: Exception) -> None:
@@ -80,15 +105,34 @@ __all__ = [
80
105
  "ClinicalReportGenerator",
81
106
  "compute_metrics",
82
107
  "compare_studies",
108
+ "build_eucys_abstract_draft_markdown",
109
+ "build_eucys_filled_abstract_markdown",
110
+ "build_eucys_jury_qa_markdown",
111
+ "build_eucys_limitations_and_ethics_markdown",
112
+ "build_eucys_poster_outline_markdown",
113
+ "generate_eucys_main_figure",
114
+ "resolve_profile_specs",
115
+ "generate_eucys_results_bundle",
83
116
  "generate_results_poster",
84
117
  "generate_study_poster",
118
+ "build_algorithm_registry",
119
+ "build_study_design_payload",
85
120
  "build_study_protocol_payload",
121
+ "build_study_experiment_template",
86
122
  "render_study_protocol_markdown",
123
+ "render_study_experiment_yaml",
87
124
  "write_study_protocol_bundle",
125
+ "load_study_experiment_config",
88
126
  "load_study_summary",
89
127
  "quality_badges_for_metrics",
90
128
  "run_baseline_comparison",
129
+ "StudyAlgorithmSpec",
130
+ "StudyArmSpec",
91
131
  "StudyComparison",
132
+ "StudyDesignPayload",
133
+ "StudyExperimentConfig",
134
+ "StudyMatrixRow",
135
+ "StudyProfileSpec",
92
136
  "StudyRunSummary",
93
137
  "StudySummary",
94
138
  "write_baseline_comparison",
@@ -8,10 +8,12 @@ import pandas as pd
8
8
 
9
9
  from iints.analysis.clinical_metrics import ClinicalMetricsCalculator
10
10
  from iints.api.base_algorithm import InsulinAlgorithm
11
+ from iints.core.algorithms.clinical_baseline import ClinicalBaselineAlgorithm
11
12
  from iints.core.algorithms.pid_controller import PIDController
12
13
  from iints.core.algorithms.standard_pump_algo import StandardPumpAlgorithm
13
14
  from iints.core.patient.models import PatientModel
14
15
  from iints.core.simulator import Simulator
16
+ from iints.utils.csv_safety import sanitize_csv_dataframe
15
17
  from iints.validation import build_stress_events
16
18
 
17
19
 
@@ -50,7 +52,10 @@ def run_baseline_comparison(
50
52
  }
51
53
  )
52
54
 
53
- baselines: List[Tuple[str, InsulinAlgorithm]] = [("Standard PID", PIDController())]
55
+ baselines: List[Tuple[str, InsulinAlgorithm]] = [
56
+ ("Clinical Baseline", ClinicalBaselineAlgorithm()),
57
+ ("Standard PID", PIDController()),
58
+ ]
54
59
  if compare_standard_pump:
55
60
  baselines.append(("Standard Pump", StandardPumpAlgorithm()))
56
61
 
@@ -88,5 +93,5 @@ def write_baseline_comparison(comparison: Dict[str, Any], output_dir: Path) -> D
88
93
  json_path = output_dir / "baseline_comparison.json"
89
94
  csv_path = output_dir / "baseline_comparison.csv"
90
95
  json_path.write_text(json.dumps(comparison, indent=2))
91
- pd.DataFrame(comparison.get("rows", [])).to_csv(csv_path, index=False)
96
+ sanitize_csv_dataframe(pd.DataFrame(comparison.get("rows", []))).to_csv(csv_path, index=False)
92
97
  return {"json": str(json_path), "csv": str(csv_path)}