Skip to content

Developer CLI Guide

This document contains the full technical usage for the IINTS-AF SDK.

If you are new to the project, start with docs/PLAIN_LANGUAGE_GUIDE.md and README.md first.

Environment Requirement (Important)

Run all SDK commands from an active virtual environment:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U pip

This guide assumes .venv is active for every command.

Who This Page Is For

  • Engineers integrating SDK runs into applications or CI pipelines.
  • Researchers needing exact commands and reproducible artifact expectations.
  • Technical reviewers validating run traceability and data-quality gates.

Terminology Used Consistently In This Page

  • Algorithm: insulin-dosing logic under test.
  • Forecast model: optional AI predictor signal (advisory only).
  • Safety Supervisor: deterministic safety gate enforcing hard rules.
  • Run bundle: output folder containing result traces + metadata + reports.
  • MDMP: data contract validation protocol and grading system.

Reading Structure

Workflow chapters are organized with: - Purpose - When to use - Commands - Output

Documentation Site

Local preview:

python3 -m pip install mkdocs mkdocs-material
mkdocs serve

Static build:

mkdocs build

GitHub Actions deployment notes: - Set repository Pages source to GitHub Actions once in repository settings. - Set repository variable ENABLE_PAGES_DEPLOY=true to enable deploy job.

What This File Is For

  • Exact CLI commands.
  • Integration and development workflows.
  • Reproducible run artifacts and technical options.

Installation

System Requirements

  • Python 3.10+
  • Works on Windows, macOS, and Linux

From TestPyPI

pip install -i https://test.pypi.org/simple/ iints-sdk-python35

From Source (Development)

git clone https://github.com/python35/IINTS-SDK.git
cd IINTS-SDK
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
python3 -m pip install -e .
python3 -m pip install -e ".[dev]"

CLI Workflow

Core Workflow Chapter A: Initialize a Project

Purpose - Create a standard SDK workspace with expected folder structure.

When to use - At the start of a new study, benchmark, or algorithm experiment.

Commands

iints init --project-name my_research
cd my_research

Output - Project folders for algorithms, scenarios, and results.

Core Workflow Chapter B: Baseline Simulation

Purpose - Run a known-good baseline to verify end-to-end simulation behavior.

When to use - After setup, before introducing custom algorithms.

Commands

iints quickstart --project-name iints_quickstart
cd iints_quickstart
iints presets run --name baseline_t1d --algo algorithms/example_algorithm.py

Output - Initial run bundle with results.csv, report PDF, and audit logs.

Core Workflow Chapter C: Study-Ready Bundle

Purpose - Generate one reproducible package for review and validation.

When to use - Before internal review, external sharing, or paper-support artifacts.

Commands

iints study-ready \
  --algo algorithms/example_algorithm.py \
  --output-dir results/study_ready

Output - results.csv, clinical_report.pdf, audit/, run_manifest.json - validation_report.json, sources_manifest.json, SUMMARY.md

Core Workflow Chapter D: MDMP Data Validation

Purpose - Validate dataset quality before training or evaluation.

When to use - Whenever new raw CGM data is introduced into your pipeline.

Commands

iints mdmp template --output-path mdmp_contract.yaml
iints mdmp validate mdmp_contract.yaml data/my_cgm.csv \
  --output-json results/mdmp_report.json
iints mdmp visualizer results/mdmp_report.json \
  --output-html results/mdmp_dashboard.html

Output - Contract validation report, MDMP grade, fingerprints, and HTML dashboard.

Detailed Command Reference

Initialize a Project

iints init --project-name my_research
cd my_research

Quickstart Project

iints quickstart --project-name iints_quickstart
cd iints_quickstart
iints presets run --name baseline_t1d --algo algorithms/example_algorithm.py

Run a Simulation

iints run --algo algorithms/example_algorithm.py \
  --scenario-path scenarios/example_scenario.json \
  --patient-config-name default_patient \
  --seed 42

Each run writes a reproducible bundle to results/<run_id>/ by default: - config.json - run_metadata.json - run_manifest.json (SHA-256 hashes for provenance) - results.csv - report.pdf - audit/ and baseline/ (when enabled)

One-Line Runner (CSV + audit + PDF + baseline + profiling)

iints run-full --algo algorithms/example_algorithm.py \
  --scenario-path scenarios/example_scenario.json \
  --patient-config-name default_patient \
  --output-dir results/run_full

One-Line Research Bundle (run + validate + sources + summary)

iints study-ready \
  --algo algorithms/example_algorithm.py \
  --output-dir results/study_ready

Creates: - results.csv, clinical_report.pdf, audit/, run_manifest.json - validation_report.json - sources_manifest.json - SUMMARY.md

Parallel Batch Runner

iints run-parallel --algo algorithms/example_algorithm.py \
  --scenarios-dir scenarios \
  --output-dir results/batch

Scenario Generator

iints scenarios generate --name "Random Stress Test" \
  --output-path scenarios/generated_scenario.json

Validate Scenario + Patient Config

iints validate --scenario-path scenarios/example_scenario.json \
  --patient-config-path src/iints/data/virtual_patients/clinic_safe_baseline.yaml

Show Scientific Sources Used by the SDK

iints sources
iints sources --category guideline
iints sources --output-json results/source_manifest.json

Import Real-World CGM Data

iints import-data --input-csv data/my_cgm.csv --output-dir results/imported

Data Contract Runner (Model-Ready Gate)

iints data contract-template --output-path data_contract.yaml
iints data contract-run data_contract.yaml data/my_cgm.csv \
  --output-json results/contract_data_report.json
iints data contract-run data_contract.yaml data/my_cgm.csv \
  --min-mdmp-grade research_grade --fail-on-noncompliant
iints data synthetic-mirror data/my_cgm.csv data_contract.yaml \
  --output-csv data/synthetic_mirror.csv \
  --output-json results/synthetic_mirror_report.json
iints data mdmp-visualizer results/contract_data_report.json \
  --output-html results/mdmp_dashboard.html
iints mdmp template --output-path mdmp_contract.yaml
iints mdmp validate mdmp_contract.yaml data/my_cgm.csv \
  --output-json results/mdmp_report.json
iints mdmp synthetic-mirror data/my_cgm.csv mdmp_contract.yaml \
  --output-csv data/synthetic_mirror.csv \
  --output-json results/synthetic_mirror_report.json
iints mdmp visualizer results/mdmp_report.json \
  --output-html results/mdmp_dashboard.html

contract-run reports: - compliance_score - contract_fingerprint_sha256 - dataset_fingerprint_sha256 - mdmp_grade (draft, research_grade, clinical_grade) - certified_for_medical_research

mdmp-visualizer generates a single self-contained HTML dashboard that can be reviewed offline by auditors and collaborators.

synthetic-mirror generates a synthetic dataset from a validated source CSV, preserving schema and broad numeric behavior, then validates the synthetic output against the same contract.

iints mdmp ... is the preferred protocol namespace for MDMP. iints data ... MDMP commands remain available for compatibility.

MDMP Auto-Guardian Decorator

import pandas as pd
from iints import mdmp_gate

@mdmp_gate("contracts/clinical_mdmp_contract.yaml", min_grade="clinical_grade")
def train_step(df: pd.DataFrame) -> int:
    return len(df)

You can also import from iints.mdmp for protocol-specific code boundaries. Behavior: - fail_mode="raise" (default): blocks execution with MDMPGateError - fail_mode="warn": continues with RuntimeWarning - fail_mode="log": continues and logs warning

Clinical-Trial Scaffold

iints init --project-name iints_trial --template clinical-trial

This template creates: - contracts/clinical_mdmp_contract.yaml - data/demo/diabetes_cgm.csv - audit/, reports/, notebooks/, results/

Import Wizard (Interactive)

iints import-wizard

Use the Demo Data Pack

iints import-demo --output-dir results/demo_import

Nightscout Import (Optional Dependency)

pip install iints-sdk-python35[nightscout]
iints import-nightscout --url https://your-nightscout.example \
  --output-dir results/nightscout_import

Tidepool Client Skeleton (Future Cloud Imports)

iints import-tidepool --base-url https://api.tidepool.org --token YOUR_TOKEN

Demo Quickstart Workflow (Script)

python3 examples/demo_quickstart_flow.py

Create a Patient Profile (YAML)

iints profiles create --name patient_john \
  --isf 45 --icr 11 --basal-rate 0.9 --initial-glucose 130 \
  --dawn-strength 8 --dawn-start 4 --dawn-end 8

# Use it in a run:
iints run --algo algorithms/example_algorithm.py \
  --patient-config-path patient_profiles/patient_john.yaml

Generate a Report from Results CSV

iints report --results-csv results/data/sim_results_example.csv \
  --output-path results/clinical_report.pdf

Research Track (AI Predictor)

See research/README.md for training and evaluation scripts. The predictor is not a dosing controller; it only provides a 30-120 minute forecast signal to the Safety Supervisor.

Quick start:

pip install iints-sdk-python35[research]
python research/synthesize_dataset.py --runs 10 --output data/synthetic.parquet
python research/train_predictor.py --data data/synthetic.parquet --config research/configs/predictor.yaml --out models

Integration:

from iints.research import load_predictor_service
predictor = load_predictor_service("models/predictor.pt")
outputs = iints.run_simulation(
    algorithm=PIDController(),
    scenario="scenarios/example_scenario.json",
    predictor=predictor,
    duration_minutes=720,
)

Dependency Check (Optional Torch)

pip install "iints[torch]"
iints check-deps

Python API

One-Line Runner

import iints
from iints.core.algorithms.pid_controller import PIDController
from iints.core.patient.profile import PatientProfile

outputs = iints.run_simulation(
    algorithm=PIDController(),
    scenario="scenarios/example_scenario.json",
    patient_config="default_patient",
    duration_minutes=720,
    seed=42,
    output_dir="results/quick_run",
)

# Full bundle in one call
outputs = iints.run_full(
    algorithm=PIDController(),
    scenario="scenarios/example_scenario.json",
    patient_config="default_patient",
    duration_minutes=720,
    seed=42,
    output_dir="results/run_full",
)

# Patient profile shortcut
profile = PatientProfile(isf=45, icr=11, basal_rate=0.9, initial_glucose=130)
outputs = iints.run_simulation(
    algorithm=PIDController(),
    scenario="scenarios/example_scenario.json",
    patient_config=profile,
    duration_minutes=720,
    seed=42,
    output_dir="results/profile_run",
)

# SafetyConfig override
from iints.core.safety import SafetyConfig
safe = SafetyConfig(max_insulin_per_bolus=2.0, hypo_cutoff=80.0)
outputs = iints.run_full(
    algorithm=PIDController(),
    scenario="scenarios/example_scenario.json",
    patient_config="default_patient",
    duration_minutes=720,
    seed=42,
    output_dir="results/safe_run",
    safety_config=safe,
)

Quickstart & Demo PDF Exports

quickstart_pdf = iints.generate_quickstart_report(
    outputs["results"],
    "results/quickstart/quickstart_report.pdf",
    outputs["safety_report"],
)

demo_pdf = iints.generate_demo_report(
    outputs["results"],
    "results/quickstart/demo_report.pdf",
    outputs["safety_report"],
)

Real-World Import (Python)

import iints

result = iints.scenario_from_csv(
    "data/my_cgm.csv",
    data_format="dexcom",
    scenario_name="Patient A - Week 1",
)

result.dataframe.head()
scenario = result.scenario

Demo data in Python:

import iints

demo_df = iints.load_demo_dataframe()

Clinic-Safe Presets

iints presets list
iints presets run --name baseline_t1d --algo algorithms/example_algorithm.py

New presets: * hypo_prone_night * hyper_challenge * pizza_paradox * midnight_crash

Create a scaffold:

iints presets create --name custom_safe --output-dir ./presets

Audit Trail + Report Bundle

python3 examples/audit_and_report.py

Notes: * The PDF includes top intervention reasons for explainability. * The simulator stops on sustained critical hypoglycemia (default: <40 mg/dL for 30 minutes). * When the limit is exceeded, SimulationLimitError is raised and the safety report marks terminated_early.

Metrics

import iints.metrics as metrics

gmi = metrics.calculate_gmi(results_df["glucose_actual_mgdl"])
lbgi = metrics.calculate_lbgi(results_df["glucose_actual_mgdl"])

Human-in-the-loop + Sensor/Pump Models

from iints import SensorModel, PumpModel
from iints.core.simulator import Simulator

sensor = SensorModel(noise_std=8.0, lag_minutes=5, dropout_prob=0.02, seed=42)
pump = PumpModel(max_units_per_step=0.25, quantization_units=0.05, dropout_prob=0.01, seed=42)

def rescue_callback(ctx):
    if ctx["glucose_actual_mgdl"] < 65:
        return {"additional_carbs": 15, "note": "rescue carbs"}
    return None

sim = Simulator(patient_model=patient, algorithm=algo, sensor_model=sensor, pump_model=pump, on_step=rescue_callback)

State Serialization (Time‑travel Debugging)

state = sim.save_state()
sim.load_state(state)

Performance Profiling

from iints.core.simulator import Simulator

sim = Simulator(patient_model=patient, algorithm=algo, enable_profiling=True)
results_df, safety_report = sim.run_batch(duration_minutes=1440)
print(safety_report["performance_report"])

Mock Algorithms (CI-Safe)

from iints import ConstantDoseAlgorithm, RandomDoseAlgorithm

Testing

pytest

One-Command Dev Workflow

make dev
make test
make lint

Helper Scripts

./scripts/run_tests.sh
./scripts/run_lint.sh
./scripts/run_demo.sh

Safety Architecture

  • IndependentSupervisor: deterministic safety layer that caps insulin, blocks dangerous doses, and logs interventions.
  • InputValidator: filters CGM noise and blocks physiologically impossible glucose values.
  • Deterministic Audit: every decision is logged for accountability and explainability.

Roadmap

  • February 2026: Safety Engine hardening + documentation sprint
  • March 2026: Monte Carlo population studies + edge AI benchmarking
  • March 27, 2026: Official Launch & Live Expo Demo

API Stability

See API_STABILITY.md for semver and deprecation policy.