iints-sdk-python35 1.5.0__tar.gz → 1.5.2__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 (234) hide show
  1. iints_sdk_python35-1.5.2/PKG-INFO +120 -0
  2. iints_sdk_python35-1.5.2/README.md +57 -0
  3. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/pyproject.toml +20 -7
  4. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/__init__.py +73 -5
  5. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/ai/cli.py +9 -0
  6. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/ai/prompts.py +5 -4
  7. iints_sdk_python35-1.5.2/src/iints/analysis/__init__.py +95 -0
  8. iints_sdk_python35-1.5.2/src/iints/analysis/study_analysis.py +721 -0
  9. iints_sdk_python35-1.5.2/src/iints/analysis/study_poster.py +150 -0
  10. iints_sdk_python35-1.5.2/src/iints/analysis/study_protocol.py +310 -0
  11. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/cli/cli.py +1191 -19
  12. iints_sdk_python35-1.5.2/src/iints/cli/patient_cli.py +450 -0
  13. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/__init__.py +20 -0
  14. iints_sdk_python35-1.5.2/src/iints/data/certify.py +80 -0
  15. iints_sdk_python35-1.5.2/src/iints/data/study_corruption.py +267 -0
  16. iints_sdk_python35-1.5.2/src/iints/live_patient/__init__.py +30 -0
  17. iints_sdk_python35-1.5.2/src/iints/live_patient/api.py +331 -0
  18. iints_sdk_python35-1.5.2/src/iints/live_patient/daemon.py +62 -0
  19. iints_sdk_python35-1.5.2/src/iints/live_patient/edge_benchmark.py +160 -0
  20. iints_sdk_python35-1.5.2/src/iints/live_patient/edge_ops.py +391 -0
  21. iints_sdk_python35-1.5.2/src/iints/live_patient/runtime.py +964 -0
  22. iints_sdk_python35-1.5.2/src/iints/live_patient/service_export.py +71 -0
  23. iints_sdk_python35-1.5.2/src/iints/live_patient/uno_q.py +37 -0
  24. iints_sdk_python35-1.5.2/src/iints/scenarios/__init__.py +18 -0
  25. iints_sdk_python35-1.5.2/src/iints/scenarios/study_pack.py +293 -0
  26. iints_sdk_python35-1.5.2/src/iints/templates/uno_q/README.md +21 -0
  27. iints_sdk_python35-1.5.2/src/iints/templates/uno_q/iints_supervisor_bridge.ino +66 -0
  28. iints_sdk_python35-1.5.2/src/iints_sdk_python35.egg-info/PKG-INFO +120 -0
  29. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints_sdk_python35.egg-info/SOURCES.txt +20 -0
  30. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints_sdk_python35.egg-info/entry_points.txt +0 -1
  31. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints_sdk_python35.egg-info/requires.txt +18 -5
  32. iints_sdk_python35-1.5.2/tests/test_cli_edge_runtime.py +43 -0
  33. iints_sdk_python35-1.5.2/tests/test_cli_expo_tools.py +246 -0
  34. iints_sdk_python35-1.5.2/tests/test_cli_patient_runtime.py +137 -0
  35. iints_sdk_python35-1.5.0/PKG-INFO +0 -425
  36. iints_sdk_python35-1.5.0/README.md +0 -372
  37. iints_sdk_python35-1.5.0/src/iints/analysis/__init__.py +0 -18
  38. iints_sdk_python35-1.5.0/src/iints/scenarios/__init__.py +0 -3
  39. iints_sdk_python35-1.5.0/src/iints_sdk_python35.egg-info/PKG-INFO +0 -425
  40. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/LICENSE +0 -0
  41. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/LICENSE-MIT-IINTS-LEGACY +0 -0
  42. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/NOTICE +0 -0
  43. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/setup.cfg +0 -0
  44. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/ai/__init__.py +0 -0
  45. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/ai/assistant.py +0 -0
  46. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/ai/backends/__init__.py +0 -0
  47. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/ai/backends/base.py +0 -0
  48. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/ai/backends/mistral_api.py +0 -0
  49. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/ai/backends/ollama.py +0 -0
  50. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/ai/mdmp_guard.py +0 -0
  51. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/ai/model_catalog.py +0 -0
  52. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/ai/prepare.py +0 -0
  53. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/algorithm_xray.py +0 -0
  54. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/baseline.py +0 -0
  55. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/booth_demo.py +0 -0
  56. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/carelink_workbench.py +0 -0
  57. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/clinical_benchmark.py +0 -0
  58. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/clinical_metrics.py +0 -0
  59. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/clinical_tir_analyzer.py +0 -0
  60. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/diabetes_metrics.py +0 -0
  61. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/edge_efficiency.py +0 -0
  62. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/edge_performance_monitor.py +0 -0
  63. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/explainability.py +0 -0
  64. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/explainable_ai.py +0 -0
  65. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/hardware_benchmark.py +0 -0
  66. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/metrics.py +0 -0
  67. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/population_report.py +0 -0
  68. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/poster.py +0 -0
  69. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/reporting.py +0 -0
  70. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/safety_index.py +0 -0
  71. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/sensor_filtering.py +0 -0
  72. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/analysis/validator.py +0 -0
  73. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/api/__init__.py +0 -0
  74. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/api/base_algorithm.py +0 -0
  75. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/api/registry.py +0 -0
  76. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/api/template_algorithm.py +0 -0
  77. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/assets/iints_logo.png +0 -0
  78. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/cli/__init__.py +0 -0
  79. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/__init__.py +0 -0
  80. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/algorithms/__init__.py +0 -0
  81. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/algorithms/battle_runner.py +0 -0
  82. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/algorithms/correction_bolus.py +0 -0
  83. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/algorithms/discovery.py +0 -0
  84. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/algorithms/fixed_basal_bolus.py +0 -0
  85. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/algorithms/hybrid_algorithm.py +0 -0
  86. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/algorithms/lstm_algorithm.py +0 -0
  87. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/algorithms/mock_algorithms.py +0 -0
  88. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/algorithms/pid_controller.py +0 -0
  89. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/algorithms/standard_pump_algo.py +0 -0
  90. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/device.py +0 -0
  91. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/device_manager.py +0 -0
  92. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/devices/__init__.py +0 -0
  93. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/devices/models.py +0 -0
  94. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/patient/__init__.py +0 -0
  95. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/patient/bergman_model.py +0 -0
  96. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/patient/models.py +0 -0
  97. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/patient/patient_factory.py +0 -0
  98. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/patient/profile.py +0 -0
  99. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/safety/__init__.py +0 -0
  100. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/safety/config.py +0 -0
  101. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/safety/input_validator.py +0 -0
  102. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/safety/supervisor.py +0 -0
  103. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/simulation/__init__.py +0 -0
  104. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/simulation/scenario_parser.py +0 -0
  105. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/simulator.py +0 -0
  106. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/core/supervisor.py +0 -0
  107. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/adapter.py +0 -0
  108. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/column_mapper.py +0 -0
  109. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/contracts.py +0 -0
  110. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/datasets.json +0 -0
  111. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/demo/__init__.py +0 -0
  112. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/demo/demo_cgm.csv +0 -0
  113. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/guardians.py +0 -0
  114. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/importer.py +0 -0
  115. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/ingestor.py +0 -0
  116. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/mdmp_visualizer.py +0 -0
  117. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/nightscout.py +0 -0
  118. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/quality_checker.py +0 -0
  119. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/registry.py +0 -0
  120. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/runner.py +0 -0
  121. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/synthetic_mirror.py +0 -0
  122. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/tidepool.py +0 -0
  123. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/universal_parser.py +0 -0
  124. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/virtual_patients/clinic_safe_baseline.yaml +0 -0
  125. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/virtual_patients/clinic_safe_hyper_challenge.yaml +0 -0
  126. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/virtual_patients/clinic_safe_hypo_prone.yaml +0 -0
  127. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/virtual_patients/clinic_safe_midnight.yaml +0 -0
  128. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/virtual_patients/clinic_safe_pizza.yaml +0 -0
  129. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/virtual_patients/clinic_safe_stress_meal.yaml +0 -0
  130. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/virtual_patients/default_patient.yaml +0 -0
  131. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/data/virtual_patients/patient_559_config.yaml +0 -0
  132. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/demo_assets.py +0 -0
  133. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/emulation/__init__.py +0 -0
  134. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/emulation/legacy_base.py +0 -0
  135. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/emulation/medtronic_780g.py +0 -0
  136. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/emulation/omnipod_5.py +0 -0
  137. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/emulation/tandem_controliq.py +0 -0
  138. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/highlevel.py +0 -0
  139. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/learning/__init__.py +0 -0
  140. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/learning/autonomous_optimizer.py +0 -0
  141. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/learning/learning_system.py +0 -0
  142. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/mdmp/__init__.py +0 -0
  143. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/mdmp/backend.py +0 -0
  144. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/metrics.py +0 -0
  145. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/population/__init__.py +0 -0
  146. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/population/generator.py +0 -0
  147. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/population/runner.py +0 -0
  148. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/presets/__init__.py +0 -0
  149. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/presets/evidence_sources.yaml +0 -0
  150. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/presets/forecast_calibration_profiles.yaml +0 -0
  151. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/presets/golden_benchmark.yaml +0 -0
  152. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/presets/presets.json +0 -0
  153. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/presets/safety_contract_default.yaml +0 -0
  154. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/presets/validation_profiles.yaml +0 -0
  155. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/research/__init__.py +0 -0
  156. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/research/audit.py +0 -0
  157. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/research/calibration_gate.py +0 -0
  158. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/research/config.py +0 -0
  159. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/research/dataset.py +0 -0
  160. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/research/evaluation.py +0 -0
  161. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/research/losses.py +0 -0
  162. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/research/metrics.py +0 -0
  163. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/research/model_registry.py +0 -0
  164. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/research/predictor.py +0 -0
  165. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/scenarios/generator.py +0 -0
  166. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/templates/__init__.py +0 -0
  167. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/templates/default_algorithm.py +0 -0
  168. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/templates/demos/__init__.py +0 -0
  169. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/templates/demos/live_stage_demo.py +0 -0
  170. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/templates/scenarios/__init__.py +0 -0
  171. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/templates/scenarios/chaos_insulin_stacking.json +0 -0
  172. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/templates/scenarios/chaos_runaway_ai.json +0 -0
  173. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/templates/scenarios/example_scenario.json +0 -0
  174. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/templates/scenarios/exercise_stress.json +0 -0
  175. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/utils/__init__.py +0 -0
  176. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/utils/plotting.py +0 -0
  177. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/utils/run_io.py +0 -0
  178. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/validation/__init__.py +0 -0
  179. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/validation/golden.py +0 -0
  180. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/validation/replay.py +0 -0
  181. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/validation/run_validation.py +0 -0
  182. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/validation/safety_contract.py +0 -0
  183. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/validation/schemas.py +0 -0
  184. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/visualization/__init__.py +0 -0
  185. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/visualization/cockpit.py +0 -0
  186. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints/visualization/uncertainty_cloud.py +0 -0
  187. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints_sdk_python35.egg-info/dependency_links.txt +0 -0
  188. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/iints_sdk_python35.egg-info/top_level.txt +0 -0
  189. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_ai/__init__.py +0 -0
  190. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_ai/lineage.py +0 -0
  191. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/__init__.py +0 -0
  192. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/audit.py +0 -0
  193. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/bias_hooks.py +0 -0
  194. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/bundle.py +0 -0
  195. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/certification.py +0 -0
  196. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/cli.py +0 -0
  197. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/compare.py +0 -0
  198. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/conformance.py +0 -0
  199. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/contracts.py +0 -0
  200. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/crypto.py +0 -0
  201. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/data/conformance/vectors/delegation.json +0 -0
  202. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/data/conformance/vectors/fingerprint.json +0 -0
  203. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/data/conformance/vectors/grading.json +0 -0
  204. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/data/conformance/vectors/signing.json +0 -0
  205. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/delegate.py +0 -0
  206. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/diffing.py +0 -0
  207. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/drift.py +0 -0
  208. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/exceptions.py +0 -0
  209. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/fingerprint.py +0 -0
  210. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/fingerprint_store.py +0 -0
  211. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/hf.py +0 -0
  212. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/keys/mdmp_pub_v1.pem +0 -0
  213. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/llm_provenance.py +0 -0
  214. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/migrate.py +0 -0
  215. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/policy.py +0 -0
  216. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/prov.py +0 -0
  217. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/registry.py +0 -0
  218. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/runner.py +0 -0
  219. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/schema_export.py +0 -0
  220. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/synthetic.py +0 -0
  221. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/trust.py +0 -0
  222. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_core/visualizer.py +0 -0
  223. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_flavors/__init__.py +0 -0
  224. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_integrations/__init__.py +0 -0
  225. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_integrations/dvc.py +0 -0
  226. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_integrations/mlflow.py +0 -0
  227. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/src/mdmp_integrations/wandb.py +0 -0
  228. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/tests/test_bergman.py +0 -0
  229. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/tests/test_cli_booth_demo.py +0 -0
  230. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/tests/test_cli_carelink_workbench.py +0 -0
  231. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/tests/test_cli_demo_export.py +0 -0
  232. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/tests/test_cli_poster.py +0 -0
  233. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/tests/test_install_doctor.py +0 -0
  234. {iints_sdk_python35-1.5.0 → iints_sdk_python35-1.5.2}/tests/test_population.py +0 -0
@@ -0,0 +1,120 @@
1
+ Metadata-Version: 2.4
2
+ Name: iints-sdk-python35
3
+ Version: 1.5.2
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
+ Provides-Extra: reports
31
+ Requires-Dist: fpdf2>=2.8.0; extra == "reports"
32
+ Requires-Dist: matplotlib>=3.5.0; extra == "reports"
33
+ Requires-Dist: openpyxl>=3.0.0; extra == "reports"
34
+ Requires-Dist: pillow>=12.1.1; extra == "reports"
35
+ Requires-Dist: seaborn>=0.11.0; extra == "reports"
36
+ Provides-Extra: full
37
+ Requires-Dist: fpdf2>=2.8.0; extra == "full"
38
+ Requires-Dist: matplotlib>=3.5.0; extra == "full"
39
+ Requires-Dist: openpyxl>=3.0.0; extra == "full"
40
+ Requires-Dist: pillow>=12.1.1; extra == "full"
41
+ Requires-Dist: seaborn>=0.11.0; extra == "full"
42
+ Provides-Extra: dev
43
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
44
+ Requires-Dist: hypothesis>=6.0.0; extra == "dev"
45
+ Requires-Dist: flake8; extra == "dev"
46
+ Requires-Dist: mypy; extra == "dev"
47
+ Requires-Dist: pandas-stubs; extra == "dev"
48
+ Requires-Dist: types-PyYAML; extra == "dev"
49
+ Requires-Dist: types-psutil; extra == "dev"
50
+ Provides-Extra: torch
51
+ Requires-Dist: torch>=1.9.0; extra == "torch"
52
+ Provides-Extra: nightscout
53
+ Requires-Dist: py-nightscout; extra == "nightscout"
54
+ Provides-Extra: research
55
+ Requires-Dist: torch>=2.0.0; extra == "research"
56
+ Requires-Dist: pyarrow>=12.0.0; extra == "research"
57
+ Requires-Dist: h5py>=3.10.0; extra == "research"
58
+ Requires-Dist: onnx>=1.16.0; extra == "research"
59
+ Requires-Dist: onnxscript>=0.1.0; extra == "research"
60
+ Provides-Extra: mdmp
61
+ Requires-Dist: cryptography>=42.0.0; extra == "mdmp"
62
+ Dynamic: license-file
63
+
64
+ # IINTS-AF SDK
65
+ [![PyPI version](https://badge.fury.io/py/iints-sdk-python35.svg)](https://badge.fury.io/py/iints-sdk-python35)
66
+ [![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)
67
+ [![Docs](https://img.shields.io/badge/docs-IINTS--AF-0a66c2?style=flat&logo=firefox-browser&logoColor=white)](https://python35.github.io/IINTS-SDK/)
68
+
69
+ One platform for insulin-algorithm research.
70
+
71
+ IINTS-AF combines three layers in one SDK:
72
+ - **Simulate** insulin algorithms on virtual patients
73
+ - **Certify** the data and outputs with built-in trust grading
74
+ - **Understand** results with reports, posters, and local AI review
75
+
76
+ Docs: [python35.github.io/IINTS-SDK](https://python35.github.io/IINTS-SDK/)
77
+
78
+ ## Install
79
+ ```bash
80
+ python3 -m venv .venv
81
+ source .venv/bin/activate
82
+ python -m pip install -U pip
83
+ python -m pip install -U "iints-sdk-python35[full,mdmp]"
84
+ ```
85
+
86
+ For Raspberry Pi or UNO Q edge rigs, use `iints-sdk-python35[edge,mdmp]` and follow `docs/EDGE_HARDWARE.md`.
87
+
88
+ Edge workflow:
89
+ ```bash
90
+ iints edge setup --output-dir iints_edge_demo --board raspberry_pi
91
+ iints edge status --workspace iints_edge_demo/patient_runtime
92
+ iints edge bundle --workspace iints_edge_demo/patient_runtime --output results/edge_runtime_bundle.zip
93
+ ```
94
+
95
+ Sanity check:
96
+ ```bash
97
+ iints doctor --smoke-run
98
+ ```
99
+
100
+ ## Quick Flow
101
+ ```bash
102
+ iints quickstart --project-name iints_quickstart
103
+ cd iints_quickstart
104
+ iints presets run --name baseline_t1d --algo algorithms/example_algorithm.py
105
+ iints data certify contracts/clinical_mdmp_contract.yaml results/<run_id>/results.csv --output-json results/<run_id>/certification.json
106
+ iints ai report results/<run_id>
107
+ ```
108
+
109
+ ## Read Next
110
+ - Start here: `docs/GETTING_STARTED.md`
111
+ - Installation and paths: `docs/INSTALLATION.md`
112
+ - Edge hardware profiles: `docs/EDGE_HARDWARE.md`
113
+ - Raspberry Pi digital patient: `docs/DIGITAL_PATIENT_PI.md`
114
+ - Study analysis: `docs/STUDY_ANALYSIS.md`
115
+ - AI assistant: `docs/AI_ASSISTANT.md`
116
+ - Data certification: `docs/MDMP_QUICKSTART.md`
117
+ - Full manual: `docs/manuals/IINTS-AF_SDK_Manual.md`
118
+
119
+ ## Important
120
+ IINTS-AF is research software. It is not a medical device and does not provide clinical treatment advice.
@@ -0,0 +1,57 @@
1
+ # IINTS-AF SDK
2
+ [![PyPI version](https://badge.fury.io/py/iints-sdk-python35.svg)](https://badge.fury.io/py/iints-sdk-python35)
3
+ [![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)
4
+ [![Docs](https://img.shields.io/badge/docs-IINTS--AF-0a66c2?style=flat&logo=firefox-browser&logoColor=white)](https://python35.github.io/IINTS-SDK/)
5
+
6
+ One platform for insulin-algorithm research.
7
+
8
+ IINTS-AF combines three layers in one SDK:
9
+ - **Simulate** insulin algorithms on virtual patients
10
+ - **Certify** the data and outputs with built-in trust grading
11
+ - **Understand** results with reports, posters, and local AI review
12
+
13
+ Docs: [python35.github.io/IINTS-SDK](https://python35.github.io/IINTS-SDK/)
14
+
15
+ ## Install
16
+ ```bash
17
+ python3 -m venv .venv
18
+ source .venv/bin/activate
19
+ python -m pip install -U pip
20
+ python -m pip install -U "iints-sdk-python35[full,mdmp]"
21
+ ```
22
+
23
+ For Raspberry Pi or UNO Q edge rigs, use `iints-sdk-python35[edge,mdmp]` and follow `docs/EDGE_HARDWARE.md`.
24
+
25
+ Edge workflow:
26
+ ```bash
27
+ iints edge setup --output-dir iints_edge_demo --board raspberry_pi
28
+ iints edge status --workspace iints_edge_demo/patient_runtime
29
+ iints edge bundle --workspace iints_edge_demo/patient_runtime --output results/edge_runtime_bundle.zip
30
+ ```
31
+
32
+ Sanity check:
33
+ ```bash
34
+ iints doctor --smoke-run
35
+ ```
36
+
37
+ ## Quick Flow
38
+ ```bash
39
+ iints quickstart --project-name iints_quickstart
40
+ cd iints_quickstart
41
+ iints presets run --name baseline_t1d --algo algorithms/example_algorithm.py
42
+ iints data certify contracts/clinical_mdmp_contract.yaml results/<run_id>/results.csv --output-json results/<run_id>/certification.json
43
+ iints ai report results/<run_id>
44
+ ```
45
+
46
+ ## Read Next
47
+ - Start here: `docs/GETTING_STARTED.md`
48
+ - Installation and paths: `docs/INSTALLATION.md`
49
+ - Edge hardware profiles: `docs/EDGE_HARDWARE.md`
50
+ - Raspberry Pi digital patient: `docs/DIGITAL_PATIENT_PI.md`
51
+ - Study analysis: `docs/STUDY_ANALYSIS.md`
52
+ - AI assistant: `docs/AI_ASSISTANT.md`
53
+ - Data certification: `docs/MDMP_QUICKSTART.md`
54
+ - Full manual: `docs/manuals/IINTS-AF_SDK_Manual.md`
55
+
56
+ ## Important
57
+ IINTS-AF is research software. It is not a medical device and does not provide clinical treatment advice.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "iints-sdk-python35"
7
- version = "1.5.0"
7
+ version = "1.5.2"
8
8
  authors = [
9
9
  { name="Rune Bobbaers", email="rune.bobbaers@gmail.com" },
10
10
  ]
@@ -23,21 +23,33 @@ classifiers = [
23
23
  "Development Status :: 5 - Production/Stable",
24
24
  ]
25
25
  dependencies = [
26
- "fpdf2>=2.8.0",
27
- "matplotlib>=3.5.0",
26
+ "fastapi>=0.115.0",
28
27
  "numpy>=1.24.0",
29
- "openpyxl>=3.0.0",
30
28
  "pandas>=2.0.0",
31
- "pillow>=12.1.1",
32
29
  "pydantic>=2.0.0",
33
30
  "PyYAML",
34
31
  "rich>=12.0.0",
35
32
  "scipy>=1.9.0",
36
- "seaborn>=0.11.0",
37
33
  "typer[all]",
34
+ "uvicorn>=0.30.0",
38
35
  ]
39
36
 
40
37
  [project.optional-dependencies]
38
+ edge = []
39
+ reports = [
40
+ "fpdf2>=2.8.0",
41
+ "matplotlib>=3.5.0",
42
+ "openpyxl>=3.0.0",
43
+ "pillow>=12.1.1",
44
+ "seaborn>=0.11.0",
45
+ ]
46
+ full = [
47
+ "fpdf2>=2.8.0",
48
+ "matplotlib>=3.5.0",
49
+ "openpyxl>=3.0.0",
50
+ "pillow>=12.1.1",
51
+ "seaborn>=0.11.0",
52
+ ]
41
53
  dev = [
42
54
  "pytest>=7.0.0",
43
55
  "hypothesis>=6.0.0",
@@ -67,7 +79,6 @@ mdmp = [
67
79
  [project.scripts]
68
80
  iints = "iints.cli.cli:app"
69
81
  iints-sdk-doctor = "iints_sdk_python35_doctor:main"
70
- mdmp = "mdmp_core.cli:app"
71
82
 
72
83
  [project.entry-points."iints.algorithms"]
73
84
  "PID Controller" = "iints.core.algorithms.pid_controller:PIDController"
@@ -87,6 +98,8 @@ where = ["src"]
87
98
  iints = [
88
99
  "templates/*.py",
89
100
  "templates/scenarios/*.json",
101
+ "templates/uno_q/*.ino",
102
+ "templates/uno_q/*.md",
90
103
  "assets/*.png",
91
104
  "data/*.json",
92
105
  "data/virtual_patients/*.yaml",
@@ -11,11 +11,18 @@ 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.0"
14
+ __version__ = "1.5.2"
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.
18
18
 
19
+
20
+ def _missing_reports_dependency(feature: str, exc: Exception) -> None:
21
+ raise ImportError(
22
+ f"{feature} requires the optional reporting stack. Install "
23
+ f"'iints-sdk-python35[reports]' or 'iints-sdk-python35[full]'."
24
+ ) from exc
25
+
19
26
  # API Components for Algorithm Development
20
27
  from .api.base_algorithm import (
21
28
  InsulinAlgorithm,
@@ -70,16 +77,60 @@ from .data.nightscout import NightscoutConfig, import_nightscout
70
77
  from .data.tidepool import TidepoolClient, load_openapi_spec
71
78
  from .data.guardians import mdmp_gate, MDMPGateError
72
79
  from .data.synthetic_mirror import generate_synthetic_mirror, SyntheticMirrorArtifact
80
+ from .data.study_corruption import AVAILABLE_STUDY_CORRUPTIONS, apply_study_corruptions, write_corrupted_study_csv
73
81
  from .analysis.metrics import generate_benchmark_metrics # Added for benchmark
74
- from .analysis.booth_demo import build_booth_demo
75
- from .analysis.carelink_workbench import build_carelink_workbench
76
- from .analysis.poster import generate_results_poster
77
- from .analysis.reporting import ClinicalReportGenerator
82
+ from .analysis.study_protocol import build_study_protocol_payload, render_study_protocol_markdown, write_study_protocol_bundle
78
83
  from .analysis.edge_efficiency import EnergyEstimate, estimate_energy_per_decision
79
84
  from .ai import AIResponse, IINTSAssistant, MDMPGuard
85
+ from .live_patient import (
86
+ create_edge_bundle,
87
+ export_edge_setup,
88
+ LivePatientDaemon,
89
+ PatientRuntimeConfig,
90
+ create_patient_app,
91
+ export_uno_q_bridge,
92
+ get_runtime_scenario_profile,
93
+ list_runtime_scenario_profiles,
94
+ run_edge_benchmark,
95
+ summarize_edge_workspace,
96
+ write_edge_update_script,
97
+ )
80
98
  from .highlevel import run_simulation, run_full, run_population
81
99
  from .scenarios import ScenarioGeneratorConfig, generate_random_scenario
82
100
 
101
+ try:
102
+ from .analysis.booth_demo import build_booth_demo
103
+ except Exception as exc: # pragma: no cover - optional reports stack
104
+ _build_booth_demo_exc = exc
105
+
106
+ def build_booth_demo(*args, **kwargs): # type: ignore[misc,no-redef]
107
+ _missing_reports_dependency("build_booth_demo()", _build_booth_demo_exc)
108
+
109
+ try:
110
+ from .analysis.carelink_workbench import build_carelink_workbench
111
+ except Exception as exc: # pragma: no cover - optional reports stack
112
+ _build_carelink_workbench_exc = exc
113
+
114
+ def build_carelink_workbench(*args, **kwargs): # type: ignore[misc,no-redef]
115
+ _missing_reports_dependency("build_carelink_workbench()", _build_carelink_workbench_exc)
116
+
117
+ try:
118
+ from .analysis.poster import generate_results_poster
119
+ except Exception as exc: # pragma: no cover - optional reports stack
120
+ _generate_results_poster_exc = exc
121
+
122
+ def generate_results_poster(*args, **kwargs): # type: ignore[misc,no-redef]
123
+ _missing_reports_dependency("generate_results_poster()", _generate_results_poster_exc)
124
+
125
+ try:
126
+ from .analysis.reporting import ClinicalReportGenerator
127
+ except Exception as exc: # pragma: no cover - optional reports stack
128
+ _clinical_report_generator_exc = exc
129
+
130
+ class ClinicalReportGenerator: # type: ignore[no-redef]
131
+ def __init__(self, *args, **kwargs):
132
+ _missing_reports_dependency("ClinicalReportGenerator", _clinical_report_generator_exc)
133
+
83
134
  # Population testing
84
135
  from .population import (
85
136
  PopulationGenerator,
@@ -184,16 +235,33 @@ __all__ = [
184
235
  "MDMPGateError",
185
236
  "generate_synthetic_mirror",
186
237
  "SyntheticMirrorArtifact",
238
+ "AVAILABLE_STUDY_CORRUPTIONS",
239
+ "apply_study_corruptions",
240
+ "write_corrupted_study_csv",
187
241
  # Analysis Metrics
188
242
  "generate_benchmark_metrics",
189
243
  "build_booth_demo",
190
244
  "build_carelink_workbench",
245
+ "build_study_protocol_payload",
246
+ "render_study_protocol_markdown",
247
+ "write_study_protocol_bundle",
191
248
  "ClinicalReportGenerator",
192
249
  "EnergyEstimate",
193
250
  "estimate_energy_per_decision",
194
251
  "AIResponse",
195
252
  "IINTSAssistant",
196
253
  "MDMPGuard",
254
+ "create_edge_bundle",
255
+ "export_edge_setup",
256
+ "LivePatientDaemon",
257
+ "PatientRuntimeConfig",
258
+ "create_patient_app",
259
+ "export_uno_q_bridge",
260
+ "get_runtime_scenario_profile",
261
+ "list_runtime_scenario_profiles",
262
+ "run_edge_benchmark",
263
+ "summarize_edge_workspace",
264
+ "write_edge_update_script",
197
265
  # Reporting
198
266
  "generate_report",
199
267
  "generate_quickstart_report",
@@ -70,6 +70,15 @@ def _resolve_cli_inputs(
70
70
 
71
71
  if input_path.is_dir():
72
72
  ai_dir = input_path / "ai"
73
+ if (
74
+ not ai_dir.exists()
75
+ or not any((ai_dir / candidate).is_file() for candidate in ("report_payload.json", "trends_payload.json", "anomalies_payload.json", "step_riskiest.json", "review_payload.json"))
76
+ or (resolved_cert is None and not (ai_dir / "report.signed.mdmp").is_file())
77
+ ):
78
+ prepare_ai_ready_artifacts(
79
+ input_path,
80
+ create_dev_mdmp_cert=resolved_cert is None,
81
+ )
73
82
  resolved_input = _default_prepared_payload(task, ai_dir)
74
83
  if resolved_cert is None:
75
84
  candidate_cert = ai_dir / "report.signed.mdmp"
@@ -63,10 +63,11 @@ TASK_TEMPLATES: dict[TaskName, str] = {
63
63
  "Be conservative and do not overclaim. If the payload is incomplete, say so clearly.\n"
64
64
  "Respond in markdown with these sections:\n"
65
65
  "1. Overall realism verdict (Likely realistic / Needs review / Likely unrealistic)\n"
66
- "2. Strong realism signals\n"
67
- "3. Questionable or unrealistic patterns\n"
68
- "4. Concrete feedback points the SDK developer can improve\n"
69
- "5. Suggested follow-up validation checks\n\n"
66
+ "2. What looks realistic\n"
67
+ "3. What looks suspicious\n"
68
+ "4. Priority fixes\n"
69
+ "5. What to improve next\n"
70
+ "6. Suggested follow-up validation checks\n\n"
70
71
  "Focus on glycemic ranges, excursion patterns, insulin behavior, safety overrides, and whether the data looks internally coherent.\n\n"
71
72
  "Input JSON:\n{data}"
72
73
  ),
@@ -0,0 +1,95 @@
1
+ from .clinical_metrics import ClinicalMetricsCalculator, ClinicalMetricsResult
2
+ from .baseline import compute_metrics, run_baseline_comparison, write_baseline_comparison
3
+ from .study_protocol import (
4
+ build_study_protocol_payload,
5
+ render_study_protocol_markdown,
6
+ write_study_protocol_bundle,
7
+ )
8
+ from .study_analysis import (
9
+ analyze_run_directory,
10
+ analyze_study_directory,
11
+ compare_studies,
12
+ load_study_summary,
13
+ quality_badges_for_metrics,
14
+ StudyComparison,
15
+ StudyRunSummary,
16
+ StudySummary,
17
+ )
18
+
19
+
20
+ def _missing_reports_dependency(feature: str, exc: Exception) -> None:
21
+ raise ImportError(
22
+ f"{feature} requires the optional reporting stack. Install "
23
+ f"'iints-sdk-python35[reports]' or 'iints-sdk-python35[full]'."
24
+ ) from exc
25
+
26
+
27
+ try:
28
+ from .booth_demo import build_booth_demo
29
+ except Exception as exc: # pragma: no cover - optional reports stack
30
+ _build_booth_demo_exc = exc
31
+
32
+ def build_booth_demo(*args, **kwargs): # type: ignore[misc,no-redef]
33
+ _missing_reports_dependency("build_booth_demo()", _build_booth_demo_exc)
34
+
35
+
36
+ try:
37
+ from .carelink_workbench import build_carelink_workbench
38
+ except Exception as exc: # pragma: no cover - optional reports stack
39
+ _build_carelink_workbench_exc = exc
40
+
41
+ def build_carelink_workbench(*args, **kwargs): # type: ignore[misc,no-redef]
42
+ _missing_reports_dependency("build_carelink_workbench()", _build_carelink_workbench_exc)
43
+
44
+
45
+ try:
46
+ from .poster import generate_results_poster
47
+ except Exception as exc: # pragma: no cover - optional reports stack
48
+ _generate_results_poster_exc = exc
49
+
50
+ def generate_results_poster(*args, **kwargs): # type: ignore[misc,no-redef]
51
+ _missing_reports_dependency("generate_results_poster()", _generate_results_poster_exc)
52
+
53
+
54
+ try:
55
+ from .reporting import ClinicalReportGenerator
56
+ except Exception as exc: # pragma: no cover - optional reports stack
57
+ _clinical_report_generator_exc = exc
58
+
59
+ class ClinicalReportGenerator: # type: ignore[no-redef]
60
+ def __init__(self, *args, **kwargs):
61
+ _missing_reports_dependency("ClinicalReportGenerator", _clinical_report_generator_exc)
62
+
63
+
64
+ try:
65
+ from .study_poster import generate_study_poster
66
+ except Exception as exc: # pragma: no cover - optional reports stack
67
+ _generate_study_poster_exc = exc
68
+
69
+ def generate_study_poster(*args, **kwargs): # type: ignore[misc,no-redef]
70
+ _missing_reports_dependency("generate_study_poster()", _generate_study_poster_exc)
71
+
72
+
73
+ __all__ = [
74
+ "analyze_run_directory",
75
+ "analyze_study_directory",
76
+ "build_booth_demo",
77
+ "build_carelink_workbench",
78
+ "ClinicalMetricsCalculator",
79
+ "ClinicalMetricsResult",
80
+ "ClinicalReportGenerator",
81
+ "compute_metrics",
82
+ "compare_studies",
83
+ "generate_results_poster",
84
+ "generate_study_poster",
85
+ "build_study_protocol_payload",
86
+ "render_study_protocol_markdown",
87
+ "write_study_protocol_bundle",
88
+ "load_study_summary",
89
+ "quality_badges_for_metrics",
90
+ "run_baseline_comparison",
91
+ "StudyComparison",
92
+ "StudyRunSummary",
93
+ "StudySummary",
94
+ "write_baseline_comparison",
95
+ ]