iints-sdk-python35 1.1.3__tar.gz → 1.3.0__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 (165) hide show
  1. {iints_sdk_python35-1.1.3/src/iints_sdk_python35.egg-info → iints_sdk_python35-1.3.0}/PKG-INFO +122 -2
  2. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/README.md +121 -1
  3. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/pyproject.toml +1 -1
  4. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/__init__.py +15 -1
  5. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/ai/prompts.py +16 -15
  6. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/__init__.py +6 -0
  7. iints_sdk_python35-1.3.0/src/iints/analysis/booth_demo.py +439 -0
  8. iints_sdk_python35-1.3.0/src/iints/analysis/carelink_workbench.py +733 -0
  9. iints_sdk_python35-1.3.0/src/iints/analysis/poster.py +289 -0
  10. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/cli/cli.py +285 -1
  11. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/__init__.py +8 -0
  12. iints_sdk_python35-1.3.0/src/iints/data/importer.py +602 -0
  13. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0/src/iints_sdk_python35.egg-info}/PKG-INFO +122 -2
  14. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints_sdk_python35.egg-info/SOURCES.txt +6 -0
  15. iints_sdk_python35-1.3.0/tests/test_cli_booth_demo.py +33 -0
  16. iints_sdk_python35-1.3.0/tests/test_cli_carelink_workbench.py +46 -0
  17. iints_sdk_python35-1.3.0/tests/test_cli_poster.py +61 -0
  18. iints_sdk_python35-1.1.3/src/iints/data/importer.py +0 -275
  19. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/LICENSE +0 -0
  20. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/setup.cfg +0 -0
  21. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/ai/__init__.py +0 -0
  22. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/ai/assistant.py +0 -0
  23. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/ai/backends/__init__.py +0 -0
  24. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/ai/backends/base.py +0 -0
  25. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/ai/backends/mistral_api.py +0 -0
  26. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/ai/backends/ollama.py +0 -0
  27. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/ai/cli.py +0 -0
  28. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/ai/mdmp_guard.py +0 -0
  29. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/ai/model_catalog.py +0 -0
  30. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/ai/prepare.py +0 -0
  31. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/algorithm_xray.py +0 -0
  32. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/baseline.py +0 -0
  33. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/clinical_benchmark.py +0 -0
  34. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/clinical_metrics.py +0 -0
  35. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/clinical_tir_analyzer.py +0 -0
  36. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/diabetes_metrics.py +0 -0
  37. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/edge_efficiency.py +0 -0
  38. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/edge_performance_monitor.py +0 -0
  39. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/explainability.py +0 -0
  40. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/explainable_ai.py +0 -0
  41. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/hardware_benchmark.py +0 -0
  42. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/metrics.py +0 -0
  43. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/population_report.py +0 -0
  44. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/reporting.py +0 -0
  45. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/safety_index.py +0 -0
  46. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/sensor_filtering.py +0 -0
  47. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/analysis/validator.py +0 -0
  48. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/api/__init__.py +0 -0
  49. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/api/base_algorithm.py +0 -0
  50. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/api/registry.py +0 -0
  51. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/api/template_algorithm.py +0 -0
  52. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/assets/iints_logo.png +0 -0
  53. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/cli/__init__.py +0 -0
  54. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/__init__.py +0 -0
  55. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/algorithms/__init__.py +0 -0
  56. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/algorithms/battle_runner.py +0 -0
  57. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/algorithms/correction_bolus.py +0 -0
  58. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/algorithms/discovery.py +0 -0
  59. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/algorithms/fixed_basal_bolus.py +0 -0
  60. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/algorithms/hybrid_algorithm.py +0 -0
  61. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/algorithms/lstm_algorithm.py +0 -0
  62. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/algorithms/mock_algorithms.py +0 -0
  63. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/algorithms/pid_controller.py +0 -0
  64. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/algorithms/standard_pump_algo.py +0 -0
  65. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/device.py +0 -0
  66. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/device_manager.py +0 -0
  67. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/devices/__init__.py +0 -0
  68. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/devices/models.py +0 -0
  69. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/patient/__init__.py +0 -0
  70. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/patient/bergman_model.py +0 -0
  71. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/patient/models.py +0 -0
  72. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/patient/patient_factory.py +0 -0
  73. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/patient/profile.py +0 -0
  74. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/safety/__init__.py +0 -0
  75. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/safety/config.py +0 -0
  76. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/safety/input_validator.py +0 -0
  77. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/safety/supervisor.py +0 -0
  78. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/simulation/__init__.py +0 -0
  79. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/simulation/scenario_parser.py +0 -0
  80. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/simulator.py +0 -0
  81. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/core/supervisor.py +0 -0
  82. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/adapter.py +0 -0
  83. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/column_mapper.py +0 -0
  84. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/contracts.py +0 -0
  85. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/datasets.json +0 -0
  86. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/demo/__init__.py +0 -0
  87. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/demo/demo_cgm.csv +0 -0
  88. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/guardians.py +0 -0
  89. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/ingestor.py +0 -0
  90. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/mdmp_visualizer.py +0 -0
  91. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/nightscout.py +0 -0
  92. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/quality_checker.py +0 -0
  93. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/registry.py +0 -0
  94. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/runner.py +0 -0
  95. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/synthetic_mirror.py +0 -0
  96. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/tidepool.py +0 -0
  97. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/universal_parser.py +0 -0
  98. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/virtual_patients/clinic_safe_baseline.yaml +0 -0
  99. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/virtual_patients/clinic_safe_hyper_challenge.yaml +0 -0
  100. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/virtual_patients/clinic_safe_hypo_prone.yaml +0 -0
  101. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/virtual_patients/clinic_safe_midnight.yaml +0 -0
  102. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/virtual_patients/clinic_safe_pizza.yaml +0 -0
  103. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/virtual_patients/clinic_safe_stress_meal.yaml +0 -0
  104. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/virtual_patients/default_patient.yaml +0 -0
  105. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/data/virtual_patients/patient_559_config.yaml +0 -0
  106. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/emulation/__init__.py +0 -0
  107. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/emulation/legacy_base.py +0 -0
  108. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/emulation/medtronic_780g.py +0 -0
  109. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/emulation/omnipod_5.py +0 -0
  110. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/emulation/tandem_controliq.py +0 -0
  111. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/highlevel.py +0 -0
  112. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/learning/__init__.py +0 -0
  113. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/learning/autonomous_optimizer.py +0 -0
  114. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/learning/learning_system.py +0 -0
  115. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/mdmp/__init__.py +0 -0
  116. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/mdmp/backend.py +0 -0
  117. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/metrics.py +0 -0
  118. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/population/__init__.py +0 -0
  119. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/population/generator.py +0 -0
  120. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/population/runner.py +0 -0
  121. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/presets/__init__.py +0 -0
  122. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/presets/evidence_sources.yaml +0 -0
  123. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/presets/forecast_calibration_profiles.yaml +0 -0
  124. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/presets/golden_benchmark.yaml +0 -0
  125. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/presets/presets.json +0 -0
  126. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/presets/safety_contract_default.yaml +0 -0
  127. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/presets/validation_profiles.yaml +0 -0
  128. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/research/__init__.py +0 -0
  129. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/research/audit.py +0 -0
  130. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/research/calibration_gate.py +0 -0
  131. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/research/config.py +0 -0
  132. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/research/dataset.py +0 -0
  133. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/research/evaluation.py +0 -0
  134. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/research/losses.py +0 -0
  135. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/research/metrics.py +0 -0
  136. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/research/model_registry.py +0 -0
  137. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/research/predictor.py +0 -0
  138. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/scenarios/__init__.py +0 -0
  139. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/scenarios/generator.py +0 -0
  140. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/templates/__init__.py +0 -0
  141. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/templates/default_algorithm.py +0 -0
  142. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/templates/scenarios/__init__.py +0 -0
  143. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/templates/scenarios/chaos_insulin_stacking.json +0 -0
  144. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/templates/scenarios/chaos_runaway_ai.json +0 -0
  145. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/templates/scenarios/example_scenario.json +0 -0
  146. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/templates/scenarios/exercise_stress.json +0 -0
  147. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/utils/__init__.py +0 -0
  148. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/utils/plotting.py +0 -0
  149. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/utils/run_io.py +0 -0
  150. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/validation/__init__.py +0 -0
  151. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/validation/golden.py +0 -0
  152. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/validation/replay.py +0 -0
  153. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/validation/run_validation.py +0 -0
  154. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/validation/safety_contract.py +0 -0
  155. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/validation/schemas.py +0 -0
  156. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/visualization/__init__.py +0 -0
  157. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/visualization/cockpit.py +0 -0
  158. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints/visualization/uncertainty_cloud.py +0 -0
  159. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints_sdk_python35.egg-info/dependency_links.txt +0 -0
  160. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints_sdk_python35.egg-info/entry_points.txt +0 -0
  161. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints_sdk_python35.egg-info/requires.txt +0 -0
  162. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/src/iints_sdk_python35.egg-info/top_level.txt +0 -0
  163. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/tests/test_bergman.py +0 -0
  164. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/tests/test_install_doctor.py +0 -0
  165. {iints_sdk_python35-1.1.3 → iints_sdk_python35-1.3.0}/tests/test_population.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iints-sdk-python35
3
- Version: 1.1.3
3
+ Version: 1.3.0
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
  Project-URL: Homepage, https://github.com/python35/IINTS-SDK
@@ -81,6 +81,47 @@ cd iints_quickstart
81
81
  iints presets run --name baseline_t1d --algo algorithms/example_algorithm.py
82
82
  ```
83
83
 
84
+ ## CareLink Import
85
+
86
+ The SDK can now ingest Medtronic CareLink / MiniMed CSV exports and convert them into the standard IINTS schema:
87
+
88
+ ```bash
89
+ iints import-carelink \
90
+ --input-csv "/path/to/CareLink export.csv" \
91
+ --output-dir results/imported_carelink
92
+ ```
93
+
94
+ This writes:
95
+ - `cgm_standard.csv`
96
+ - `scenario.json`
97
+ - `carelink_summary.json`
98
+
99
+ It extracts glucose, carb, and insulin events from the CareLink event log and aligns them onto an IINTS-ready timeline.
100
+
101
+ If you want a reusable personal-data workspace in one command, build a CareLink workbench:
102
+
103
+ ```bash
104
+ iints carelink-workbench \
105
+ --input-csv "/path/to/CareLink export.csv" \
106
+ --output-dir results/personal_carelink
107
+ ```
108
+
109
+ This adds:
110
+ - `carelink_timeline.csv`
111
+ - `carelink_metrics.json`
112
+ - `carelink_dashboard.png`
113
+ - `carelink_poster.png`
114
+ - `carelink_dashboard.html`
115
+ - `ai/report_payload.json`
116
+ - `ai/trends_payload.json`
117
+ - `ai/anomalies_payload.json`
118
+ - `ai/step_riskiest.json`
119
+
120
+ That workbench is designed for three things:
121
+ - inspect your own data visually
122
+ - reuse the generated `scenario.json` inside IINTS experiments
123
+ - let the local AI assistant explain what the imported patterns mean
124
+
84
125
  ## AI Assistant (Ministral 3 Open-Weight via Ollama)
85
126
 
86
127
  The SDK now includes a research-only AI assistant layer for explanations and run summaries.
@@ -122,6 +163,18 @@ iints ai prepare results/<run_id>
122
163
  iints ai report results/<run_id>
123
164
  ```
124
165
 
166
+ For imported CareLink data, the matching flow is:
167
+
168
+ ```bash
169
+ iints carelink-workbench \
170
+ --input-csv "/path/to/CareLink export.csv" \
171
+ --output-dir results/personal_carelink
172
+
173
+ iints ai report results/personal_carelink --model ministral-3:3b
174
+ iints ai trends results/personal_carelink --model ministral-3:3b
175
+ iints ai explain results/personal_carelink --model ministral-3:3b
176
+ ```
177
+
125
178
  Direct JSON mode still works if you already have your own payloads and signed MDMP artifact:
126
179
 
127
180
  ```bash
@@ -136,10 +189,77 @@ Notes:
136
189
  - Users can choose a larger or smaller local Mistral-family model with `--model ...`.
137
190
  - Large JSON payloads are clipped automatically before prompt generation to keep local inference stable.
138
191
  - `iints ai prepare <run_dir>` now creates AI-ready JSON payloads and, when MDMP is installed, a local development certificate plus keypair in `<run_dir>/ai/`.
192
+ - `iints carelink-workbench` now does the same kind of AI preparation for imported personal CareLink data and also generates a dashboard PNG/HTML pair.
139
193
  - If Ollama closes the connection during generation, the SDK now surfaces an explicit recovery hint and points users toward `ministral-3:3b` for lower-memory systems.
140
194
  - After `iints ai prepare`, you can point `iints ai explain|trends|anomalies|report` directly at the run directory.
195
+ - After `iints carelink-workbench`, you can point those same AI commands directly at the generated CareLink workspace directory.
141
196
  - Output is research-only and not medical advice.
142
197
 
198
+ ## Jury Poster / Demo Graphic
199
+
200
+ You can now generate a poster-style PNG directly from one to three real run bundles:
201
+
202
+ ```bash
203
+ iints poster \
204
+ --run-dir results/normal_run \
205
+ --run-dir results/meal_stress \
206
+ --run-dir results/supervisor_override \
207
+ --label "Normal Run" \
208
+ --label "Meal Stress Test" \
209
+ --label "Supervisor Override" \
210
+ --output-path results/posters/iints_results_poster.png
211
+ ```
212
+
213
+ The poster shows:
214
+ - glucose curves with the target range highlighted
215
+ - meal events
216
+ - supervisor interventions
217
+ - panel summaries with TIR, hypo time, meal count, and intervention count
218
+
219
+ If you omit `--run-dir`, the CLI auto-discovers the latest run bundles under `./results`.
220
+
221
+ ## Fair / Jury Demo
222
+
223
+ If you want one clean live demo for a booth, jury, or pitch session, use the built-in booth flow:
224
+
225
+ ```bash
226
+ ./scripts/run_booth_demo.sh
227
+ ```
228
+
229
+ This generates:
230
+ - three run bundles (`Normal Run`, `Meal Stress Test`, `Supervisor Override`)
231
+ - a ready-to-show poster PNG
232
+ - a markdown jury talk track
233
+ - a plain-text live demo script for the stand
234
+ - optional AI-ready artifacts for the safety case
235
+
236
+ You can also run it through the CLI:
237
+
238
+ ```bash
239
+ iints demo-booth --output-dir results/booth_demo
240
+ ```
241
+
242
+ ## Updating The SDK
243
+
244
+ If another machine is missing newer commands like `iints ai ...` or `iints demo-booth`, upgrade inside the active virtual environment:
245
+
246
+ ```bash
247
+ source .venv/bin/activate
248
+ python -m pip install -U pip
249
+ python -m pip install -U "iints-sdk-python35[mdmp]==1.3.0"
250
+ hash -r
251
+ python -c "import iints; print(iints.__version__)"
252
+ ```
253
+
254
+ If that machine still behaves like an old install, run:
255
+
256
+ ```bash
257
+ iints-sdk-doctor
258
+ ```
259
+
260
+ Full guide:
261
+ - `docs/UPDATING.md`
262
+
143
263
  Troubleshooting:
144
264
  - If `iints ai ...` says `No such command 'ai'`, your environment usually still has a legacy `iints` package installed alongside `iints-sdk-python35`.
145
265
  - Run `iints-sdk-doctor` first.
@@ -147,7 +267,7 @@ Troubleshooting:
147
267
 
148
268
  ```bash
149
269
  python -m pip uninstall -y iints iints-sdk-python35
150
- python -m pip install -U "iints-sdk-python35[mdmp]==1.1.3"
270
+ python -m pip install -U "iints-sdk-python35[mdmp]==1.3.0"
151
271
  hash -r
152
272
  ```
153
273
 
@@ -30,6 +30,47 @@ cd iints_quickstart
30
30
  iints presets run --name baseline_t1d --algo algorithms/example_algorithm.py
31
31
  ```
32
32
 
33
+ ## CareLink Import
34
+
35
+ The SDK can now ingest Medtronic CareLink / MiniMed CSV exports and convert them into the standard IINTS schema:
36
+
37
+ ```bash
38
+ iints import-carelink \
39
+ --input-csv "/path/to/CareLink export.csv" \
40
+ --output-dir results/imported_carelink
41
+ ```
42
+
43
+ This writes:
44
+ - `cgm_standard.csv`
45
+ - `scenario.json`
46
+ - `carelink_summary.json`
47
+
48
+ It extracts glucose, carb, and insulin events from the CareLink event log and aligns them onto an IINTS-ready timeline.
49
+
50
+ If you want a reusable personal-data workspace in one command, build a CareLink workbench:
51
+
52
+ ```bash
53
+ iints carelink-workbench \
54
+ --input-csv "/path/to/CareLink export.csv" \
55
+ --output-dir results/personal_carelink
56
+ ```
57
+
58
+ This adds:
59
+ - `carelink_timeline.csv`
60
+ - `carelink_metrics.json`
61
+ - `carelink_dashboard.png`
62
+ - `carelink_poster.png`
63
+ - `carelink_dashboard.html`
64
+ - `ai/report_payload.json`
65
+ - `ai/trends_payload.json`
66
+ - `ai/anomalies_payload.json`
67
+ - `ai/step_riskiest.json`
68
+
69
+ That workbench is designed for three things:
70
+ - inspect your own data visually
71
+ - reuse the generated `scenario.json` inside IINTS experiments
72
+ - let the local AI assistant explain what the imported patterns mean
73
+
33
74
  ## AI Assistant (Ministral 3 Open-Weight via Ollama)
34
75
 
35
76
  The SDK now includes a research-only AI assistant layer for explanations and run summaries.
@@ -71,6 +112,18 @@ iints ai prepare results/<run_id>
71
112
  iints ai report results/<run_id>
72
113
  ```
73
114
 
115
+ For imported CareLink data, the matching flow is:
116
+
117
+ ```bash
118
+ iints carelink-workbench \
119
+ --input-csv "/path/to/CareLink export.csv" \
120
+ --output-dir results/personal_carelink
121
+
122
+ iints ai report results/personal_carelink --model ministral-3:3b
123
+ iints ai trends results/personal_carelink --model ministral-3:3b
124
+ iints ai explain results/personal_carelink --model ministral-3:3b
125
+ ```
126
+
74
127
  Direct JSON mode still works if you already have your own payloads and signed MDMP artifact:
75
128
 
76
129
  ```bash
@@ -85,10 +138,77 @@ Notes:
85
138
  - Users can choose a larger or smaller local Mistral-family model with `--model ...`.
86
139
  - Large JSON payloads are clipped automatically before prompt generation to keep local inference stable.
87
140
  - `iints ai prepare <run_dir>` now creates AI-ready JSON payloads and, when MDMP is installed, a local development certificate plus keypair in `<run_dir>/ai/`.
141
+ - `iints carelink-workbench` now does the same kind of AI preparation for imported personal CareLink data and also generates a dashboard PNG/HTML pair.
88
142
  - If Ollama closes the connection during generation, the SDK now surfaces an explicit recovery hint and points users toward `ministral-3:3b` for lower-memory systems.
89
143
  - After `iints ai prepare`, you can point `iints ai explain|trends|anomalies|report` directly at the run directory.
144
+ - After `iints carelink-workbench`, you can point those same AI commands directly at the generated CareLink workspace directory.
90
145
  - Output is research-only and not medical advice.
91
146
 
147
+ ## Jury Poster / Demo Graphic
148
+
149
+ You can now generate a poster-style PNG directly from one to three real run bundles:
150
+
151
+ ```bash
152
+ iints poster \
153
+ --run-dir results/normal_run \
154
+ --run-dir results/meal_stress \
155
+ --run-dir results/supervisor_override \
156
+ --label "Normal Run" \
157
+ --label "Meal Stress Test" \
158
+ --label "Supervisor Override" \
159
+ --output-path results/posters/iints_results_poster.png
160
+ ```
161
+
162
+ The poster shows:
163
+ - glucose curves with the target range highlighted
164
+ - meal events
165
+ - supervisor interventions
166
+ - panel summaries with TIR, hypo time, meal count, and intervention count
167
+
168
+ If you omit `--run-dir`, the CLI auto-discovers the latest run bundles under `./results`.
169
+
170
+ ## Fair / Jury Demo
171
+
172
+ If you want one clean live demo for a booth, jury, or pitch session, use the built-in booth flow:
173
+
174
+ ```bash
175
+ ./scripts/run_booth_demo.sh
176
+ ```
177
+
178
+ This generates:
179
+ - three run bundles (`Normal Run`, `Meal Stress Test`, `Supervisor Override`)
180
+ - a ready-to-show poster PNG
181
+ - a markdown jury talk track
182
+ - a plain-text live demo script for the stand
183
+ - optional AI-ready artifacts for the safety case
184
+
185
+ You can also run it through the CLI:
186
+
187
+ ```bash
188
+ iints demo-booth --output-dir results/booth_demo
189
+ ```
190
+
191
+ ## Updating The SDK
192
+
193
+ If another machine is missing newer commands like `iints ai ...` or `iints demo-booth`, upgrade inside the active virtual environment:
194
+
195
+ ```bash
196
+ source .venv/bin/activate
197
+ python -m pip install -U pip
198
+ python -m pip install -U "iints-sdk-python35[mdmp]==1.3.0"
199
+ hash -r
200
+ python -c "import iints; print(iints.__version__)"
201
+ ```
202
+
203
+ If that machine still behaves like an old install, run:
204
+
205
+ ```bash
206
+ iints-sdk-doctor
207
+ ```
208
+
209
+ Full guide:
210
+ - `docs/UPDATING.md`
211
+
92
212
  Troubleshooting:
93
213
  - If `iints ai ...` says `No such command 'ai'`, your environment usually still has a legacy `iints` package installed alongside `iints-sdk-python35`.
94
214
  - Run `iints-sdk-doctor` first.
@@ -96,7 +216,7 @@ Troubleshooting:
96
216
 
97
217
  ```bash
98
218
  python -m pip uninstall -y iints iints-sdk-python35
99
- python -m pip install -U "iints-sdk-python35[mdmp]==1.1.3"
219
+ python -m pip install -U "iints-sdk-python35[mdmp]==1.3.0"
100
220
  hash -r
101
221
  ```
102
222
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "iints-sdk-python35"
7
- version = "1.1.3"
7
+ version = "1.3.0"
8
8
  authors = [
9
9
  { name="Rune Bobbaers", email="rune.bobbaers@gmail.com" },
10
10
  ]
@@ -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.1.3"
14
+ __version__ = "1.3.0"
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.
@@ -56,17 +56,24 @@ from .data.importer import (
56
56
  export_demo_csv,
57
57
  export_standard_csv,
58
58
  guess_column_mapping,
59
+ import_carelink_csv,
60
+ import_carelink_timeline,
59
61
  import_cgm_csv,
60
62
  import_cgm_dataframe,
63
+ load_carelink_event_log,
61
64
  load_demo_dataframe,
62
65
  scenario_from_csv,
63
66
  scenario_from_dataframe,
67
+ summarize_carelink_csv,
64
68
  )
65
69
  from .data.nightscout import NightscoutConfig, import_nightscout
66
70
  from .data.tidepool import TidepoolClient, load_openapi_spec
67
71
  from .data.guardians import mdmp_gate, MDMPGateError
68
72
  from .data.synthetic_mirror import generate_synthetic_mirror, SyntheticMirrorArtifact
69
73
  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
70
77
  from .analysis.reporting import ClinicalReportGenerator
71
78
  from .analysis.edge_efficiency import EnergyEstimate, estimate_energy_per_decision
72
79
  from .ai import AIResponse, IINTSAssistant, MDMPGuard
@@ -160,11 +167,15 @@ __all__ = [
160
167
  "export_demo_csv",
161
168
  "export_standard_csv",
162
169
  "guess_column_mapping",
170
+ "import_carelink_csv",
171
+ "import_carelink_timeline",
163
172
  "import_cgm_csv",
164
173
  "import_cgm_dataframe",
174
+ "load_carelink_event_log",
165
175
  "load_demo_dataframe",
166
176
  "scenario_from_csv",
167
177
  "scenario_from_dataframe",
178
+ "summarize_carelink_csv",
168
179
  "NightscoutConfig",
169
180
  "import_nightscout",
170
181
  "TidepoolClient",
@@ -175,6 +186,8 @@ __all__ = [
175
186
  "SyntheticMirrorArtifact",
176
187
  # Analysis Metrics
177
188
  "generate_benchmark_metrics",
189
+ "build_booth_demo",
190
+ "build_carelink_workbench",
178
191
  "ClinicalReportGenerator",
179
192
  "EnergyEstimate",
180
193
  "estimate_energy_per_decision",
@@ -185,6 +198,7 @@ __all__ = [
185
198
  "generate_report",
186
199
  "generate_quickstart_report",
187
200
  "generate_demo_report",
201
+ "generate_results_poster",
188
202
  # High-level API
189
203
  "run_simulation",
190
204
  "run_full",
@@ -8,8 +8,9 @@ TaskName = Literal["explain_decision", "analyze_trends", "detect_anomalies", "ge
8
8
  MAX_PROMPT_PAYLOAD_CHARS = 12000
9
9
 
10
10
  SYSTEM_PROMPT = (
11
- "You are the IINTS-AF research assistant for closed-loop insulin delivery simulations. "
12
- "Explain simulation behavior clearly, conservatively, and in plain language. "
11
+ "You are the IINTS-AF research assistant for closed-loop insulin delivery simulations "
12
+ "and imported glucose datasets. "
13
+ "Explain glycemic behavior clearly, conservatively, and in plain language. "
13
14
  "Do not give medical advice, treatment instructions, or patient-specific recommendations. "
14
15
  "State uncertainty when the input is incomplete. "
15
16
  "For research use only."
@@ -17,39 +18,39 @@ SYSTEM_PROMPT = (
17
18
 
18
19
  TASK_TEMPLATES: dict[TaskName, str] = {
19
20
  "explain_decision": (
20
- "Given this single simulation step, explain:\n"
21
- "1. What the algorithm decided and why\n"
22
- "2. Whether the independent safety supervisor likely intervened\n"
23
- "3. Whether the decision appears safe in context\n\n"
21
+ "Given this single decision step or noteworthy glucose snapshot, explain:\n"
22
+ "1. What is happening in the data and why it stands out\n"
23
+ "2. Whether there are safety signals, supervision, or notable context clues\n"
24
+ "3. What a research user should pay attention to next\n\n"
24
25
  "Respond in 3 short paragraphs.\n\n"
25
- "Simulation step JSON:\n{data}"
26
+ "Input JSON:\n{data}"
26
27
  ),
27
28
  "analyze_trends": (
28
- "Review this glucose-oriented simulation payload and summarize the main glycemic trends.\n"
29
+ "Review this glucose-oriented payload and summarize the main glycemic trends.\n"
29
30
  "Focus on direction, stability, excursions, and likely triggers.\n"
30
31
  "Respond with:\n"
31
32
  "- Trend summary\n"
32
33
  "- Main risk signals\n"
33
34
  "- Short operational takeaway\n\n"
34
- "Simulation payload JSON:\n{data}"
35
+ "Payload JSON:\n{data}"
35
36
  ),
36
37
  "detect_anomalies": (
37
- "Inspect this run summary and identify unusual patterns, inconsistent values, or clinically relevant anomalies.\n"
38
+ "Inspect this run or imported-data summary and identify unusual patterns, inconsistent values, or clinically relevant anomalies.\n"
38
39
  "Respond with:\n"
39
40
  "- Detected anomalies\n"
40
41
  "- Why each anomaly matters\n"
41
42
  "- Whether follow-up validation is recommended\n\n"
42
- "Run summary JSON:\n{data}"
43
+ "Summary JSON:\n{data}"
43
44
  ),
44
45
  "generate_report": (
45
- "Write a concise markdown report for this IINTS-AF simulation run.\n"
46
+ "Write a concise markdown report for this IINTS-AF simulation run or imported personal glucose dataset.\n"
46
47
  "Include sections:\n"
47
48
  "1. Executive summary\n"
48
49
  "2. Glycemic behavior\n"
49
- "3. Safety and supervisor behavior\n"
50
- "4. Notable events or anomalies\n"
50
+ "3. Safety, supervision, or device behavior\n"
51
+ "4. Notable events, patterns, or anomalies\n"
51
52
  "5. Research-only conclusion\n\n"
52
- "Simulation run JSON:\n{data}"
53
+ "Input JSON:\n{data}"
53
54
  ),
54
55
  }
55
56
 
@@ -1,12 +1,18 @@
1
1
  from .clinical_metrics import ClinicalMetricsCalculator, ClinicalMetricsResult
2
2
  from .baseline import compute_metrics, run_baseline_comparison, write_baseline_comparison
3
+ from .booth_demo import build_booth_demo
4
+ from .carelink_workbench import build_carelink_workbench
5
+ from .poster import generate_results_poster
3
6
  from .reporting import ClinicalReportGenerator
4
7
 
5
8
  __all__ = [
9
+ "build_booth_demo",
10
+ "build_carelink_workbench",
6
11
  "ClinicalMetricsCalculator",
7
12
  "ClinicalMetricsResult",
8
13
  "ClinicalReportGenerator",
9
14
  "compute_metrics",
15
+ "generate_results_poster",
10
16
  "run_baseline_comparison",
11
17
  "write_baseline_comparison",
12
18
  ]