Source profileQuality 93/100Review permissions

K-Dense-AI/scientific-agent-skills/skills/qutip/SKILL.md

qutip

Simulate and audit closed and open quantum-system models with QuTiP 5, including deterministic, trajectory, steady-state, spectral, and phase-space workflows. Use for local quantum-dynamics work where physical assumptions, dimensions, and numerical convergence must be explicit.

Source repository stars
31,966
Declared platforms
0
Static risk flags
1
Last source update
2026-07-28
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Simulate and audit closed and open quantum-system models with QuTiP 5, including deterministic, trajectory, steady-state, spectral, and phase-space workflows. Use for local quantum-dynamics work where physical assumptions, dimensions, and numerical convergence must be explicit.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/K-Dense-AI/scientific-agent-skills --skill "skills/qutip"
    Safe inspection promptEditorial

    Inspect the Agent Skill "qutip" from https://github.com/K-Dense-AI/scientific-agent-skills/blob/e7ac42510774624f327003c95b6650e2883bc01d/skills/qutip/SKILL.md at commit e7ac42510774624f327003c95b6650e2883bc01d. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Steady states, spectra, and phase space

      For wigner, qfunc, and QFunc, array element [j, k] corresponds to yvec[j], xvec[k]. In QuTiP 5.3, QFunc is initialized with fixed coordinates and called with a state; it has no .eval method. This skill never uses Python dynamic-code execution. Prefer plotwigner, Result.plotexpec…

      For wigner, qfunc, and QFunc, array element [j, k] corresponds to yvec[j], xvec[k]. In QuTiP 5.3, QFunc is initialized with fixed coordinates and called with a state; it has no .eval method. This skill never uses Python…Direct spectrum is a stationary steady-state spectrum. An FFT of a finite correlation requires explicit checks for tail decay, timestep aliasing, frequency resolution, window sensitivity, and transform convention. See r…
    2. 02

      Scope

      Use QuTiP for finite-dimensional quantum mechanics, quantum optics, Lindblad dynamics, trajectories, weak-coupling Bloch-Redfield models, and specialized Floquet, HEOM, and permutational-invariance methods. It is not a hardware execution SDK. Circuit and control functionality mo…

      Use QuTiP for finite-dimensional quantum mechanics, quantum optics, Lindblad dynamics, trajectories, weak-coupling Bloch-Redfield models, and specialized Floquet, HEOM, and permutational-invariance methods. It is not a…This skill targets QuTiP 5.3.0, released 2026-05-22. QuTiP 5.3 requires Python 3.11 or newer. Its required distributions are NumPy (=1.23.2), SciPy (=1.9.2, excluding 1.16.0 and 1.17.0), and packaging.
    3. 03

      Reproducible uv snapshot

      Create a dedicated environment and pin every direct distribution:

      qutip-qip 0.4.2 (2026-06-23) is the production/stable circuit, gate, andqutip-qtrl 0.2.0 (2026-06-23) provides GRAPE and CRAB quantum optimalqutip-jax 0.1.1 (2025-05-29) is the official JAX data backend for GPU and
    4. 04

      Non-negotiable model contract

      1. Units and convention. QuTiP equations normally set \(\hbar=1\). Hamiltonian entries are angular frequencies and rates have reciprocal-time units. Convert cyclic frequency with \(2\pi f\); never mix Hz and rad/s. 2. Subsystem order. tensor(A, B, C) fixes subsystem indices 0, 1…

      Units and convention. QuTiP equations normally set \(\hbar=1\).Subsystem order. tensor(A, B, C) fixes subsystem indices 0, 1, 2.State validity. Check ket norm or density-matrix Hermiticity, unit trace,
    5. 05

      Qobj, dimensions, and tensor order

      Prefer explicit imports and inspect both shape and structured dimensions:

      Prefer explicit imports and inspect both shape and structured dimensions:Matrix shape alone is insufficient: two objects can both be 6-by-6 but encode different tensor factorizations. Read references/coreconcepts.md before building composite, superoperator, or channel models.

    Permission review

    Static risk signals and limitations

    Runs scripts

    medium · line 262

    The documentation asks the agent to run terminal commands or scripts.

    python skills/qutip/scripts/two_level_simulation.py --help

    Runs scripts

    medium · line 263

    The documentation asks the agent to run terminal commands or scripts.

    python skills/qutip/scripts/two_level_simulation.py \

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score93/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars31,966SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    K-Dense-AI/scientific-agent-skills
    Skill path
    skills/qutip/SKILL.md
    Commit
    e7ac42510774624f327003c95b6650e2883bc01d
    License
    MIT
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    QuTiP 5

    Scope

    Use QuTiP for finite-dimensional quantum mechanics, quantum optics, Lindblad dynamics, trajectories, weak-coupling Bloch-Redfield models, and specialized Floquet, HEOM, and permutational-invariance methods. It is not a hardware execution SDK. Circuit and control functionality moved to separate QuTiP family packages.

    This skill targets QuTiP 5.3.0, released 2026-05-22. QuTiP 5.3 requires Python 3.11 or newer. Its required distributions are NumPy (>=1.23.2), SciPy (>=1.9.2, excluding 1.16.0 and 1.17.0), and packaging.

    Reproducible uv snapshot

    Create a dedicated environment and pin every direct distribution:

    uv venv --python 3.11
    uv pip install "qutip==5.3.0"
    

    For plots:

    uv pip install "qutip[graphics]==5.3.0"
    

    Optional QuTiP family packages are independently versioned:

    uv pip install "qutip-qip==0.4.2"
    uv pip install "qutip-qtrl==0.2.0"
    uv pip install "qutip-jax==0.1.1"
    
    • qutip-qip 0.4.2 (2026-06-23) is the production/stable circuit, gate, and noisy-device simulation package. Import from qutip_qip, not qutip.qip.
    • qutip-qtrl 0.2.0 (2026-06-23) provides GRAPE and CRAB quantum optimal control. It is not a trajectory viewer. Import from qutip_qtrl, not qutip.control; PyPI still classifies it pre-alpha.
    • qutip-jax 0.1.1 (2025-05-29) is the official JAX data backend for GPU and automatic-differentiation experiments. It is explicitly pre-alpha.
    • qutip-cupy is an official QuTiP-organization repository, but it has no PyPI release and its own README says it is not officially released. Do not put an unreleased Git install into a reproducible workflow.

    Use a project lockfile or a hash-generating uv pip compile workflow when transitive dependency identity must also be frozen.

    Non-negotiable model contract

    Before solving, record:

    1. Units and convention. QuTiP equations normally set (\hbar=1). Hamiltonian entries are angular frequencies and rates have reciprocal-time units. Convert cyclic frequency with (2\pi f); never mix Hz and rad/s.
    2. Subsystem order. tensor(A, B, C) fixes subsystem indices 0, 1, 2. Preserve that order in every state, operator, collapse channel, and partial trace. obj.ptrace([0, 2]) keeps those subsystems; it does not trace them.
    3. State validity. Check ket norm or density-matrix Hermiticity, unit trace, and eigenvalues above a stated negative tolerance. Tiny negative values may be numerical; material negativity invalidates a claimed state.
    4. Generator meaning. A Lindblad channel with rate gamma is represented by sqrt(gamma) * A, not gamma * A. Define what each rate measures. For example, sqrt(gamma_phi / 2) * sigmaz() gives coherence decay exp(-gamma_phi * t).
    5. Approximations. State rotating-wave, Born-Markov, secular, weak-coupling, bath-equilibrium, truncation, symmetry, and initial-factorization assumptions wherever used.
    6. Numerics. Justify Hilbert truncation, output grid, integration method, tolerances, trajectory count, and random seeds. Report result.stats.
    7. Convergence. Sweep every artificial cutoff: Fock dimension, time/frequency window and spacing, ODE tolerances, trajectories, Floquet harmonics, HEOM depth and bath exponents, or PIQS representation as applicable.

    Qobj, dimensions, and tensor order

    Prefer explicit imports and inspect both shape and structured dimensions:

    from qutip import basis, qeye, sigmaz, tensor
    
    psi = tensor(basis(2, 0), basis(3, 1))
    z_on_first = tensor(sigmaz(), qeye(3))
    
    assert psi.shape == (6, 1)
    assert psi.dims == [[2, 3], [1]]
    assert z_on_first.dims == [[2, 3], [2, 3]]
    rho_first = psi.proj().ptrace(0)  # keep subsystem 0
    

    Matrix shape alone is insufficient: two objects can both be 6-by-6 but encode different tensor factorizations. Read references/core_concepts.md before building composite, superoperator, or channel models.

    Choose the solver by physics

    ModelCurrent APIRequired justification
    Closed, pure, unitarysesolveHermitian Hamiltonian; no dissipation
    Lindblad/open or mixedmesolveMarkovian completely positive model and channel rates
    Quantum jumpsmcsolveUnravelling, trajectory convergence, seeds
    Microscopic weak bathbrmesolveBorn-Markov/weak coupling, spectra, secular choice
    Diffusive measurementssesolve, smesolvemonitored versus unmonitored channels
    Periodic driveFloquetBasis, fsesolve, fmmesolveverified period and Floquet convergence
    Structured non-Markovian bathqutip.solver.heombath expansion and hierarchy convergence
    Symmetric spin ensemblequtip.piqspermutation symmetry and basis choice

    Do not select a more specialized solver merely because it exists.

    Deterministic open-system example

    QuTiP 5.3 uses ordinary option dictionaries. Solver controls, e_ops, and args are keyword-only; the old mutable options object is gone.

    import numpy as np
    from qutip import basis, mesolve, sigmam, sigmaz
    
    omega = 2.0
    gamma = 0.15
    tlist = np.linspace(0.0, 20.0, 401)
    excited = basis(2, 0)
    
    result = mesolve(
        0.5 * omega * sigmaz(),
        excited,
        tlist,
        c_ops=[np.sqrt(gamma) * sigmam()],
        e_ops={"sigma_z": sigmaz(), "excited": excited.proj()},
        options={
            "method": "adams",
            "atol": 1e-10,
            "rtol": 1e-8,
            "store_final_state": True,
            "progress_bar": "",
        },
    )
    
    population = np.asarray(result.e_data["excited"])
    assert np.max(np.abs(population - np.exp(-gamma * tlist))) < 2e-6
    assert isinstance(result.stats, dict)
    

    If the problem is stiff, compare bdf or lsoda; do not change an integrator without rerunning tolerance and invariant checks. QuTiP 5.3 also supports options={"matrix_form": True} in mesolve; benchmark and validate it before using it as a default.

    Time-dependent systems

    Prefer trusted Pythonic callables or numeric coefficient arrays. Do not create coefficient source strings from user input.

    import numpy as np
    from qutip import QobjEvo, sigmax, sigmaz
    
    def envelope(t, amplitude, center, width):
        return amplitude * np.exp(-0.5 * ((t - center) / width) ** 2)
    
    H = QobjEvo(
        [0.5 * sigmaz(), [sigmax(), envelope]],
        args={"amplitude": 0.2, "center": 5.0, "width": 1.0},
    )
    instantaneous_H = H(5.0)
    H.arguments(amplitude=0.1)
    

    The older f(t, args) coefficient signature is deprecated in 5.3 and is scheduled for removal in 5.5. See references/time_evolution.md.

    Trajectories and stochastic solvers

    import numpy as np
    from qutip import basis, mcsolve, sigmam, sigmaz
    
    tlist = np.linspace(0.0, 10.0, 201)
    result = mcsolve(
        0.5 * sigmaz(),
        basis(2, 0),
        tlist,
        [np.sqrt(0.2) * sigmam()],
        e_ops=[basis(2, 0).proj()],
        ntraj=400,
        seeds=20260723,
        options={"keep_runs_results": False, "progress_bar": ""},
    )
    

    Report ntraj, result.seeds, uncertainty or repeated-seed sensitivity, and whether individual runs were retained. Reuse seeds=previous_result.seeds only when paired trajectories are intentional. ssesolve and smesolve use the boolean heterodyne argument, not legacy integer noise codes.

    Steady states, spectra, and phase space

    import numpy as np
    from qutip import QFunc, liouvillian, operator_to_vector, qfunc, steadystate
    
    rho_ss = steadystate(H, c_ops, method="direct")
    residual = (liouvillian(H, c_ops) * operator_to_vector(rho_ss)).norm()
    assert residual < 1e-9
    
    xvec = np.linspace(-5.0, 5.0, 151)
    Q_once = qfunc(rho_ss, xvec, xvec)
    q_many = QFunc(xvec, xvec)
    Q_again = q_many(rho_ss)
    assert Q_once.shape == (len(xvec), len(xvec))
    

    For wigner, qfunc, and QFunc, array element [j, k] corresponds to yvec[j], xvec[k]. In QuTiP 5.3, QFunc is initialized with fixed coordinates and called with a state; it has no .eval method. This skill never uses Python dynamic-code execution. Prefer plot_wigner, Result.plot_expect, or explicit Matplotlib axes as documented in references/visualization.md.

    Direct spectrum is a stationary steady-state spectrum. An FFT of a finite correlation requires explicit checks for tail decay, timestep aliasing, frequency resolution, window sensitivity, and transform convention. See references/analysis.md.

    Advanced boundaries

    • Import HEOM from qutip.solver.heom; the legacy QuTiP 4 nonmarkov HEOM namespace is stale.
    • Use FloquetBasis for modes and quasi-energies. Verify H(t + T) == H(t) numerically and sweep basis/truncation choices.
    • Access PIQS with from qutip import piqs. Dicke.pisolve is only the optimized diagonal-state/diagonal-Hamiltonian route; general Dicke-basis dynamics use the Liouvillian with mesolve.
    • brmesolve can violate positivity, especially without secularization. Check density-matrix eigenvalues over time.
    • QIP and optimal control are extension-package concerns. Never present local simulation as quantum-hardware execution.

    See references/advanced.md for HEOM, Floquet, PIQS, stochastic, and extension boundaries.

    Safe local CLIs

    All bundled tools are local-only, emit strict JSON, reject non-finite JSON and unknown keys, and never load pickle files or executable model code. Simulation imports are lazy, so every --help works without QuTiP installed.

    ScriptPurpose
    scripts/qobj_model_validator.pyValidate bounded Qobj model JSON, dimensions, states, rates, and role compatibility
    scripts/two_level_simulation.pyRun a bounded two-level Lindblad or jump simulation
    scripts/solver_config_planner.pySelect a current solver and option/checklist plan
    scripts/convergence_sweep.pySweep tolerances/grid size or trajectory count on a synthetic model
    scripts/result_audit.pyAudit JSON output without deserializing Python objects
    scripts/steady_state_spectrum_planner.pyPlan bounded steady-state and direct/FFT spectral checks

    Example:

    python skills/qutip/scripts/two_level_simulation.py --help
    python skills/qutip/scripts/two_level_simulation.py \
      --decay-rate 0.2 --t-final 10 --time-points 201 \
      --output two-level.json
    python skills/qutip/scripts/result_audit.py two-level.json
    

    Completion checklist

    • Record units, (\hbar), tensor order, initial state, channels, and model assumptions.
    • Validate Hermiticity, norm/trace, positivity, dimensions, and generator units.
    • Pin QuTiP and direct extensions; record platform, Python, NumPy, and SciPy.
    • Inspect result options and stats; do not assume states were stored.
    • Perform cutoff, grid, tolerance/integrator, and stochastic convergence sweeps.
    • Save portable numeric/configuration summaries as JSON or text. Do not load untrusted QuTiP object/result files because object serialization can execute code.

    References

    • references/core_concepts.md — Qobj, dimensions, tensor products, states, channels, and unit conventions
    • references/time_evolution.md — current solver signatures, options, results, QobjEvo, trajectories, and numerical controls
    • references/analysis.md — physical-state audits, steady states, correlations, spectra, and convergence
    • references/visualization.md — Wigner, Q functions, QFunc, Bloch, result, and matrix plots
    • references/advanced.md — Bloch-Redfield, stochastic, Floquet, HEOM, PIQS, and QuTiP family package boundaries

    Dated official sources

    Verified 2026-07-23:

    Alternatives

    Compare before choosing

    Computed 9831,966

    K-Dense-AI/scientific-agent-skills

    dask

    Distributed computing for larger-than-RAM pandas/NumPy workflows. Use when you need to scale existing pandas/NumPy code beyond memory or across clusters. Best for parallel file processing, distributed ML, integration with existing pandas code. For out-of-core analytics on single machine use vaex; for in-memory speed use polars.

    Computed 9831,966

    K-Dense-AI/scientific-agent-skills

    medchem

    Medicinal chemistry filters for compound triage. Apply drug-likeness rules (Lipinski, Veber, CNS), structural alert catalogs (PAINS, NIBR, ChEMBL), complexity metrics, and the medchem query language for library filtering.

    Computed 9831,966

    K-Dense-AI/scientific-agent-skills

    neurokit2

    Use NeuroKit2 to build or audit reproducible research workflows for physiological time-series preprocessing, event/interval analysis, multimodal alignment, variability, and complexity. Trigger when code imports neurokit2 or needs its current APIs, schemas, and method-aware validation—not for diagnosis or device validation.

    Computed 97234,327

    affaan-m/ECC

    plan-orchestrate

    Read a plan document, decompose it into steps, design a per-step agent chain from the ECC catalogue, and emit ready-to-paste /orchestrate custom prompts. Generative only — never invokes /orchestrate itself. Use when the user has a multi-step plan and wants to drive it through orchestrate without composing chains by hand.