Files
rustytorch/Cargo.toml
T
Omar SobhandClaude Opus 5 9be5f4a68f
CI / Build CPU-Only (Explicit) (push) Canceled after 0s
CI / Python Bindings (maturin) (macos-latest) (push) Canceled after 0s
CI / Python Bindings (maturin) (ubuntu-latest) (push) Canceled after 0s
CI / WASM Build + Size Check (push) Canceled after 0s
CI / Distributed Training Tests (push) Canceled after 0s
CI / CI Success (push) Canceled after 0s
Documentation / Build API Documentation (push) Canceled after 0s
Documentation / Build User Guide (push) Canceled after 0s
CI / Format Check (push) Canceled after 0s
CI / Clippy Check (push) Canceled after 0s
CI / Build (macos-latest) (push) Canceled after 0s
CI / Build (ubuntu-latest) (push) Canceled after 0s
CI / Test (macos-latest) (push) Canceled after 0s
CI / Test (ubuntu-latest) (push) Canceled after 0s
Performance Benchmarks / Run Benchmarks (push) Canceled after 0s
rtx-fsi: partitioned fluid-structure coupling
rtx-cfd (18,715 lines) and rtx-fea (36,576 lines) both exist and nothing
connects them -- rtx-fea is commented out of rtx-cfd's dependencies. This
is the coupling layer, and it is the piece Prof. Charbel Farhat's 2026
Guggenheim Medal citation is actually about.

It depends on NEITHER solver. The properties that make a partitioned
coupling correct -- conservation of force, moment and interface work --
are statements about the transfer operators alone, so they can be
validated now, on solvers whose canonical-benchmark validation is still
outstanding. Adapters to the concrete solvers belong above this.

TRANSFER (transfer.rs). Weights satisfy two constraints:
  sum(w_i) = 1            partition of unity  -> force conserved
  sum(w_i x_i) = x_face   linear reproduction -> MOMENT conserved

The second is the one that gets skipped. Inverse-distance weighting
satisfies the first and generally violates the second, conserving force
while corrupting moment -- which shows up as slow spurious rotation rather
than as an obvious error. Underdetermined for >4 nodes, so it takes the
minimum-norm solution w = A^T (A A^T)^+ b.

That is a PSEUDO-inverse, and not for defensiveness. A wetted surface is a
surface, so its nodes are usually planar, and for a planar patch the z
constraint row is an affine multiple of the ones row -- A A^T is genuinely
rank-deficient. The constraint is redundant there, not unsatisfiable. An
ordinary inverse rejects the most ordinary interface there is; I found
this because my first test fixture was collinear and the code correctly
refused it. Constraints are then verified against the weights actually
obtained, since a pseudo-inverse returns a least-squares answer whether or
not the system was consistent.

Motion transfer uses the TRANSPOSE of the load operator, which makes
interface work conserved identically: (Hf).v = f.(H^T v). Any other
pairing leaks energy every step, and the leak looks like physics until it
destabilises.

COUPLING (coupling.rs). Staggered and Aitken-relaxed subiteration. The
decisive tests reproduce the added-mass effect: at a gain of 2.5 the
fixed-relaxation scheme DIVERGES and is reported as CouplingDiverged
rather than as an exhausted budget, and Aitken recovers the same case. A
partitioned coupling that cannot reproduce its own classic failure mode is
not being tested hard enough. Aitken is exact for a linear fixed point, so
convergence is asserted at <=4 iterations -- pinning that this is the real
delta-squared formula and not an under-relaxation that happens to work.

SCOPE, stated up front in the crate docs: small-displacement transpiration
coupling on a fixed mesh. Deliberately not ALE and not embedded-boundary,
so the Discrete Geometric Conservation Law does not yet apply -- the mesh
does not move. Large motion needs an embedded boundary treatment; that is
the next phase, not an oversight.

External comparator named at entry: Turek-Hron FSI2/FSI3, not yet reached.

26 tests written red-first; cargo test/fmt/clippy -D warnings clean.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-19 06:49:36 -07:00

858 lines
41 KiB
TOML

[workspace]
resolver = "2"
# Exclude Tauri app (has different MSRV and dependency requirements)
# Also exclude crates with Rust 2024 incompatible dependencies
exclude = [
"demos/ui/src-tauri",
"crates/meta/rtx",
"integration_tests",
# Python bindings require different PyO3 version, build with maturin
"crates/specialized/rtx-neuro-python",
]
members = [
# Meta-crates (user-facing bundles)
# "crates/meta/rtx", # Excluded - depends on rtx-distributed (re-enable after testing)
"crates/meta/rtx-core",
"crates/meta/rtx-training",
"crates/meta/rtx-inference-stack",
# Core infrastructure (17 crates)
"crates/core/rtx-backend",
"crates/core/rtx-backend-cuda",
"crates/core/rtx-backend-metal",
"crates/core/rtx-backend-rocm",
"crates/core/rtx-backend-sycl",
"crates/core/rtx-backend-cpu",
"crates/core/rtx-backend-webgpu",
"crates/core/rtx-tensor",
"crates/core/rtx-runtime",
"crates/core/rtx-autograd",
"crates/core/rtx-memory",
"crates/core/rtx-kernel",
"crates/core/rtx-bindings",
"crates/core/rtx-graph",
"crates/core/rtx-validation",
"crates/core/rtx-losses",
"crates/core/rtx-tokenization",
"crates/core/rtx-nn",
"crates/core/rtx-interpret",
"crates/core/rtx-metal",
"crates/core/rtx-cubecl", # CubeCL kernel compilation (Rust → GPU)
"crates/core/rtx-fusion", # Automatic kernel fusion (stream-based)
"crates/core/rtx-lora", # LoRA/QLoRA adapter support
"crates/core/rtx-macros", # Derive macros (Module, Config)
# Vendor stubs (RNCCL — real impl at github.com/rustyverse/rnccl)
"crates/vendor/rnccl/rnccl-core",
"crates/vendor/rnccl/rnccl-collectives",
"crates/vendor/rnccl/rnccl-transport",
"crates/vendor/rnccl/rnccl-bootstrap",
# Training & optimization (13 crates + 2 super-crates)
"crates/training/rtx-transformers",
"crates/training/rtx-distributed",
"crates/training/rtx-rl",
"crates/training/rtx-compress",
"crates/training/rtx-flash-attention",
"crates/training/rtx-flash-metal-attention",
"crates/training/rtx-preprocessing",
"crates/training/rtx-auto",
"crates/training/rtx-automeasure",
"crates/training/rtx-evolution",
"crates/training/rtx-federated",
"crates/training/rtx-model-merging",
"crates/training/rtx-nas",
# Training super-crates (unified APIs)
"crates/training/rtx-optim-core", # Compression + Merging unified
"crates/training/rtx-search-core", # NAS + Evolution unified
# Model architectures (8 crates)
"crates/models/rtx-vision",
"crates/models/rtx-vision-advanced",
"crates/models/rtx-multimodal",
"crates/models/rtx-diffuse",
"crates/models/rtx-timeseries",
"crates/models/rtx-nlg",
"crates/models/rtx-llm-tools",
"crates/models/rtx-csm",
"crates/models/rtx-tts",
# Production & deployment (10 crates)
"crates/production/rtx-serving-api",
"crates/production/rtx-inference",
"crates/production/rtx-streaming",
"crates/production/rtx-hub",
"crates/production/rtx-config",
"crates/production/rtx-monitoring",
"crates/production/rtx-wasm-inference",
"crates/production/rtx-onnx",
"crates/production/rtx-onnx-codegen",
# Specialized computing (14 crates)
"crates/specialized/rtx-synthesis",
"crates/specialized/rtx-compiler",
"crates/specialized/rtx-geom",
"crates/specialized/rtx-polygraph",
"crates/specialized/rtx-sklearn-py",
"crates/specialized/rtx-ml-classic",
"crates/specialized/rtx-platform",
"crates/specialized/rtx-science",
"crates/specialized/rtx-nmf",
"crates/specialized/rtx-fea",
"crates/specialized/rtx-cfd",
"crates/specialized/rtx-fsi",
# Medical imaging crates (MRI2FE parity)
"crates/specialized/rtx-medical-core", # Super-crate consolidating medical imaging I/O
"crates/specialized/rtx-medical-io",
"crates/specialized/rtx-materials",
"crates/specialized/rtx-fem-export",
"crates/specialized/rtx-mesh-gen",
"crates/specialized/rtx-registration",
"crates/specialized/rtx-segmentation",
"crates/specialized/rtx-mri2fe",
# Neuroimaging crates
"crates/specialized/rtx-neuro-core", # Super-crate consolidating 16 neuro crates (47K LOC)
"crates/specialized/rtx-neuro",
"crates/specialized/rtx-neuro-io",
"crates/specialized/rtx-neuro-signal",
"crates/specialized/rtx-neuro-forward",
"crates/specialized/rtx-neuro-inverse",
"crates/specialized/rtx-neuro-connectivity",
"crates/specialized/rtx-neuro-stats",
"crates/specialized/rtx-neuro-anatomy",
"crates/specialized/rtx-neuro-db",
"crates/specialized/rtx-neuro-lsl",
"crates/specialized/rtx-neuro-realtime",
"crates/specialized/rtx-neuro-artifacts",
"crates/specialized/rtx-neuro-gnn",
"crates/specialized/rtx-neuro-pinn",
"crates/specialized/rtx-neuro-fem",
# "crates/specialized/rtx-neuro-python", # Excluded - build with maturin
# Neural operators (FNO, DeepONet)
"crates/specialized/rtx-neural-operator",
# Physics-Informed Diffusion Models
"crates/specialized/rtx-piddm",
# Medical Digital Twin
"crates/specialized/rtx-digital-twin",
# Development & tooling (13 crates)
"crates/tooling/rtx-eval",
"crates/tooling/rtx-bench",
"crates/tooling/rtx-jepa-cli",
"crates/tooling/rtx-kernel-bench",
# Data management (3 crates)
"crates/data/rtx-feature-store",
"crates/data/rtx-data-validation",
"crates/data/rtx-etl",
# Integration tests
# "integration_tests", # Excluded from workspace (standalone binary, build separately)
# RustyBooks GPU integration
"crates/integration/rtx-rustybooks",
# ML Framework integrations
"crates/integration/rtx-burn",
"crates/integration/rtx-candle",
# Demos (Virtual Catheter hemodynamics demo)
"demos/shared",
"demos/rtx-hemodynamics",
"demos/server",
# Demos (MRE Elastography demo)
"demos/mre-shared",
"demos/rtx-mre",
# Demos (Thermal Ablation Bioheat demo)
"demos/bioheat-shared",
"demos/rtx-bioheat",
# Demos (SlideScope pathology demo)
"demos/slidescope-shared",
"demos/rtx-slidescope",
# Demos (Neural Operator PDE solver demo)
"demos/neural-operator-shared",
"demos/rtx-neural-operator-demo",
# Demos (Physics-Informed Diffusion Model demo)
"demos/piddm-shared",
"demos/rtx-piddm-demo",
# Demos (Medical Digital Twin demo)
"demos/digital-twin-shared",
"demos/rtx-digital-twin-demo",
# Demos (Image Classifier demo)
"demos/image-classifier-shared",
"demos/rtx-image-classifier-demo",
# Demos (Time Series Forecast demo)
"demos/timeseries-shared",
"demos/rtx-timeseries-demo",
# Demos (Portfolio Optimizer demo)
"demos/portfolio-shared",
"demos/rtx-portfolio-demo",
# Demos (Risk Analyzer demo)
"demos/risk-analyzer-shared",
"demos/rtx-risk-analyzer",
# Demos (PINN Benchmark demo)
"demos/pinn-benchmark-shared",
"demos/rtx-pinn-benchmark",
# Demos (Inference Profiler demo)
"demos/inference-profiler-shared",
"demos/rtx-inference-profiler",
# Demos (Object Detector demo)
"demos/object-detector-shared",
"demos/rtx-object-detector",
# Demos (Model Zoo demo)
"demos/model-zoo-shared",
"demos/rtx-model-zoo",
# Demos (Segmentation demo)
"demos/segmentation-shared",
"demos/rtx-segmentation-demo",
# Demos (AlphaFold-Lite - Protein Structure Prediction)
"demos/alphafold-shared",
"demos/rtx-alphafold-demo",
# Demos (CellAtlas - Single-Cell Transcriptomics)
"demos/cellatlas-shared",
"demos/rtx-cellatlas-demo",
# Demos (DrugBinder - Drug-Target Binding Affinity)
"demos/drugbinder-shared",
"demos/rtx-drugbinder-demo",
# Demos (CardioSim - Cardiac Electrophysiology)
"demos/cardiosim-shared",
"demos/rtx-cardiosim-demo",
# Demos (TumorBoard AI - Multi-Modal Medical Imaging)
"demos/tumorboard-shared",
"demos/rtx-tumorboard-demo",
# Demos (QuantumPort - Higher-Order Portfolio Optimization)
"demos/quantumport-shared",
"demos/rtx-quantumport-demo",
# Demos (MarketSim - Financial World Model)
"demos/marketsim-shared",
"demos/rtx-marketsim-demo",
# Demos (RiskFlow - Real-Time Risk Attribution)
"demos/riskflow-shared",
"demos/rtx-riskflow-demo",
# Demos (AlgoArena - Strategy Backtesting Battleground)
"demos/algoarena-shared",
"demos/rtx-algoarena-demo",
# Demos (NeuralOp Studio - Neural Operator Workbench)
"demos/neuralop-studio-shared",
"demos/rtx-neuralop-studio-demo",
# Demos (WorldGen - Video Diffusion World Simulator)
"demos/worldgen-shared",
"demos/rtx-worldgen-demo",
# Demos (EmbodiedSim - Robotics World Model Trainer)
"demos/embodied-shared",
"demos/rtx-embodied-demo",
# Demos (FoundationForge - Model Compression Hub)
"demos/forge-shared",
"demos/rtx-forge-demo",
# Demos (AeroFlow - Aircraft CFD with Neural Operators)
"demos/aeroflow-shared",
"demos/rtx-aeroflow-demo",
# Demos (FederatedMed - Privacy-Preserving Medical AI)
"demos/fedmed-shared",
"demos/rtx-fedmed-demo",
# Demos (WeatherCast - GraphCast-style Weather Prediction)
"demos/weathercast-shared",
"demos/rtx-weathercast-demo",
# Demos (DistributedLLM - Trillion-Parameter Inference)
"demos/distllm-shared",
"demos/rtx-distllm-demo",
# Demos (ClusterViz - Real-Time Cluster Monitor)
"demos/clusterviz-shared",
"demos/rtx-clusterviz-demo",
# Demos (SeismicAI - Earthquake Simulation & Early Warning)
"demos/seismic-shared",
"demos/rtx-seismic-demo",
# Demos (StructuralPINN - Structural Mechanics Solver)
"demos/structural-shared",
"demos/rtx-structural-demo",
]
[workspace.package]
version = "1.0.0"
edition = "2024"
authors = ["RustyTorch Team"]
license = "MIT OR Apache-2.0"
repository = "https://github.com/rustytorch/rustytorch"
# Shared workspace dependencies (unified versions from consolidation)
[workspace.dependencies]
# RTX internal crates - Core
rtx-backend = { path = "crates/core/rtx-backend", version = "1.0.0" }
rtx-fusion = { path = "crates/core/rtx-fusion", version = "1.0.0" }
rtx-backend-cuda = { path = "crates/core/rtx-backend-cuda", version = "1.0.0" }
rtx-backend-metal = { path = "crates/core/rtx-backend-metal", version = "1.0.0" }
rtx-backend-rocm = { path = "crates/core/rtx-backend-rocm", version = "1.0.0" }
rtx-backend-sycl = { path = "crates/core/rtx-backend-sycl", version = "0.1.0" }
rtx-backend-cpu = { path = "crates/core/rtx-backend-cpu", version = "1.0.0" }
rtx-backend-webgpu = { path = "crates/core/rtx-backend-webgpu", version = "1.0.0" }
rtx-tensor = { path = "crates/core/rtx-tensor", version = "1.0.0", default-features = false }
rtx-runtime = { path = "crates/core/rtx-runtime", version = "1.0.0", default-features = false }
rtx-autograd = { path = "crates/core/rtx-autograd", version = "1.0.0" }
rtx-memory = { path = "crates/core/rtx-memory", version = "1.0.0" }
rtx-kernel = { path = "crates/core/rtx-kernel", version = "1.0.0" }
rtx-bindings = { path = "crates/core/rtx-bindings", version = "1.0.0" }
rtx-graph = { path = "crates/core/rtx-graph", version = "1.0.0" }
rtx-validation = { path = "crates/core/rtx-validation", version = "1.0.0" }
rtx-losses = { path = "crates/core/rtx-losses", version = "1.0.0" }
rtx-tokenization = { path = "crates/core/rtx-tokenization", version = "1.0.0" }
rtx-nn = { path = "crates/core/rtx-nn", version = "1.0.0" }
rtx-metal = { path = "crates/core/rtx-metal", version = "1.0.0" }
rtx-cubecl = { path = "crates/core/rtx-cubecl", version = "1.0.0", default-features = false }
rtx-macros = { path = "crates/core/rtx-macros", version = "1.0.0" }
# RTX internal crates - Training
rtx-transformers = { path = "crates/training/rtx-transformers", version = "1.0.0" }
rtx-distributed = { path = "crates/training/rtx-distributed", version = "1.0.0" }
rtx-rl = { path = "crates/training/rtx-rl", version = "1.0.0" }
rtx-compress = { path = "crates/training/rtx-compress", version = "1.0.0" }
rtx-flash-attention = { path = "crates/training/rtx-flash-attention", version = "1.0.0", default-features = false }
rtx-flash-metal-attention = { path = "crates/training/rtx-flash-metal-attention", version = "0.1.0" }
rtx-preprocessing = { path = "crates/training/rtx-preprocessing", version = "1.0.0" }
rtx-auto = { path = "crates/training/rtx-auto", version = "1.0.0" }
rtx-automeasure = { path = "crates/training/rtx-automeasure", version = "1.0.0" }
rtx-evolution = { path = "crates/training/rtx-evolution", version = "1.0.0" }
rtx-federated = { path = "crates/training/rtx-federated", version = "1.0.0" }
rtx-model-merging = { path = "crates/training/rtx-model-merging", version = "1.0.0" }
rtx-nas = { path = "crates/training/rtx-nas", version = "1.0.0" }
# RTX internal crates - Models
rtx-vision = { path = "crates/models/rtx-vision", version = "1.0.0" }
rtx-vision-advanced = { path = "crates/models/rtx-vision-advanced", version = "1.0.0" }
rtx-multimodal = { path = "crates/models/rtx-multimodal", version = "1.0.0" }
rtx-diffuse = { path = "crates/models/rtx-diffuse", version = "1.0.0" }
rtx-timeseries = { path = "crates/models/rtx-timeseries", version = "1.0.0" }
rtx-nlg = { path = "crates/models/rtx-nlg", version = "1.0.0" }
rtx-llm-tools = { path = "crates/models/rtx-llm-tools", version = "1.0.0" }
rtx-csm = { path = "crates/models/rtx-csm", version = "1.0.0" }
# RTX internal crates - Production
rtx-serving-api = { path = "crates/production/rtx-serving-api", version = "1.0.0" }
rtx-inference = { path = "crates/production/rtx-inference", version = "1.0.0" }
rtx-streaming = { path = "crates/production/rtx-streaming", version = "1.0.0" }
rtx-hub = { path = "crates/production/rtx-hub", version = "1.0.0" }
rtx-config = { path = "crates/production/rtx-config", version = "1.0.0" }
rtx-monitoring = { path = "crates/production/rtx-monitoring", version = "1.0.0" }
rtx-wasm-inference = { path = "crates/production/rtx-wasm-inference", version = "1.0.0" }
rtx-onnx = { path = "crates/production/rtx-onnx", version = "1.0.0" }
rtx-onnx-codegen = { path = "crates/production/rtx-onnx-codegen", version = "1.0.0" }
# ONNX Runtime (using git main branch for TLS feature support)
# The rc.10 release lacks tls-native/tls-rustls features needed for download-binaries
# Main branch has the fix: https://github.com/pykeio/ort
ort = { git = "https://github.com/pykeio/ort", branch = "main", default-features = false, features = ["std", "ndarray", "download-binaries", "tls-native"] }
# RTX internal crates - Specialized
rtx-synthesis = { path = "crates/specialized/rtx-synthesis", version = "1.0.0" }
rtx-compiler = { path = "crates/specialized/rtx-compiler", version = "1.0.0" }
rtx-geom = { path = "crates/specialized/rtx-geom", version = "1.0.0" }
rtx-polygraph = { path = "crates/specialized/rtx-polygraph", version = "1.0.0" }
rtx-sklearn-py = { path = "crates/specialized/rtx-sklearn-py", version = "1.0.0" }
rtx-ml-classic = { path = "crates/specialized/rtx-ml-classic", version = "1.0.0" }
rtx-platform = { path = "crates/specialized/rtx-platform", version = "1.0.0" }
rtx-science = { path = "crates/specialized/rtx-science", version = "1.0.0" }
rtx-nmf = { path = "crates/specialized/rtx-nmf", version = "1.0.0" }
rtx-fea = { path = "crates/specialized/rtx-fea", version = "1.0.0" }
rtx-cfd = { path = "crates/specialized/rtx-cfd", version = "1.0.0" }
rtx-fsi = { path = "crates/specialized/rtx-fsi", version = "1.0.0" }
rtx-medical-core = { path = "crates/specialized/rtx-medical-core", version = "1.0.0" }
rtx-medical-io = { path = "crates/specialized/rtx-medical-io", version = "1.0.0" }
rtx-materials = { path = "crates/specialized/rtx-materials", version = "1.0.0" }
rtx-fem-export = { path = "crates/specialized/rtx-fem-export", version = "1.0.0" }
rtx-mesh-gen = { path = "crates/specialized/rtx-mesh-gen", version = "1.0.0" }
rtx-registration = { path = "crates/specialized/rtx-registration", version = "1.0.0" }
rtx-segmentation = { path = "crates/specialized/rtx-segmentation", version = "1.0.0" }
rtx-neuro-core = { path = "crates/specialized/rtx-neuro-core", version = "1.0.0" }
rtx-neuro = { path = "crates/specialized/rtx-neuro", version = "1.0.0" }
rtx-neuro-io = { path = "crates/specialized/rtx-neuro-io", version = "1.0.0" }
rtx-neuro-signal = { path = "crates/specialized/rtx-neuro-signal", version = "1.0.0" }
rtx-neuro-forward = { path = "crates/specialized/rtx-neuro-forward", version = "1.0.0" }
rtx-neuro-inverse = { path = "crates/specialized/rtx-neuro-inverse", version = "1.0.0" }
rtx-neuro-anatomy = { path = "crates/specialized/rtx-neuro-anatomy", version = "1.0.0" }
rtx-neuro-db = { path = "crates/specialized/rtx-neuro-db", version = "1.0.0" }
rtx-neuro-lsl = { path = "crates/specialized/rtx-neuro-lsl", version = "1.0.0" }
rtx-neuro-realtime = { path = "crates/specialized/rtx-neuro-realtime", version = "1.0.0" }
rtx-neuro-artifacts = { path = "crates/specialized/rtx-neuro-artifacts", version = "1.0.0" }
rtx-neuro-gnn = { path = "crates/specialized/rtx-neuro-gnn", version = "0.1.0" }
rtx-neuro-pinn = { path = "crates/specialized/rtx-neuro-pinn", version = "0.1.0" }
rtx-neuro-fem = { path = "crates/specialized/rtx-neuro-fem", version = "0.1.0" }
rtx-neuro-connectivity = { path = "crates/specialized/rtx-neuro-connectivity", version = "1.0.0" }
rtx-neuro-stats = { path = "crates/specialized/rtx-neuro-stats", version = "0.1.0" }
rtx-neuro-python = { path = "crates/specialized/rtx-neuro-python", version = "1.0.0" }
rtx-neural-operator = { path = "crates/specialized/rtx-neural-operator", version = "1.0.0" }
rtx-piddm = { path = "crates/specialized/rtx-piddm", version = "1.0.0" }
rtx-digital-twin = { path = "crates/specialized/rtx-digital-twin", version = "1.0.0" }
# RTX internal crates - Tooling
rtx-eval = { path = "crates/tooling/rtx-eval", version = "1.0.0" }
rtx-bench = { path = "crates/tooling/rtx-bench", version = "1.0.0" }
rtx-kernel-bench = { path = "crates/tooling/rtx-kernel-bench", version = "0.1.0" }
# RTX internal crates - Data
rtx-feature-store = { path = "crates/data/rtx-feature-store", version = "1.0.0" }
rtx-data-validation = { path = "crates/data/rtx-data-validation", version = "1.0.0" }
rtx-etl = { path = "crates/data/rtx-etl", version = "1.0.0" }
# RTX internal crates - Demos
rtx-hemodynamics-shared = { path = "demos/shared", version = "1.0.0" }
rtx-hemodynamics = { path = "demos/rtx-hemodynamics", version = "1.0.0" }
rtx-hemodynamics-server = { path = "demos/server", version = "1.0.0" }
mre-shared = { path = "demos/mre-shared", version = "1.0.0" }
rtx-mre = { path = "demos/rtx-mre", version = "1.0.0" }
slidescope-shared = { path = "demos/slidescope-shared", version = "0.1.0" }
rtx-neural-operator-shared = { path = "demos/neural-operator-shared", version = "1.0.0" }
rtx-neural-operator-demo = { path = "demos/rtx-neural-operator-demo", version = "1.0.0" }
rtx-slidescope = { path = "demos/rtx-slidescope", version = "0.1.0" }
rtx-piddm-shared = { path = "demos/piddm-shared", version = "1.0.0" }
rtx-piddm-demo = { path = "demos/rtx-piddm-demo", version = "1.0.0" }
rtx-digital-twin-shared = { path = "demos/digital-twin-shared", version = "1.0.0" }
rtx-digital-twin-demo = { path = "demos/rtx-digital-twin-demo", version = "1.0.0" }
image-classifier-shared = { path = "demos/image-classifier-shared", version = "1.0.0" }
rtx-image-classifier-demo = { path = "demos/rtx-image-classifier-demo", version = "1.0.0" }
timeseries-shared = { path = "demos/timeseries-shared", version = "1.0.0" }
rtx-timeseries-demo = { path = "demos/rtx-timeseries-demo", version = "1.0.0" }
portfolio-shared = { path = "demos/portfolio-shared", version = "1.0.0" }
rtx-portfolio-demo = { path = "demos/rtx-portfolio-demo", version = "1.0.0" }
risk-analyzer-shared = { path = "demos/risk-analyzer-shared", version = "1.0.0" }
rtx-risk-analyzer = { path = "demos/rtx-risk-analyzer", version = "1.0.0" }
pinn-benchmark-shared = { path = "demos/pinn-benchmark-shared", version = "1.0.0" }
rtx-pinn-benchmark = { path = "demos/rtx-pinn-benchmark", version = "1.0.0" }
object-detector-shared = { path = "demos/object-detector-shared", version = "1.0.0" }
rtx-object-detector = { path = "demos/rtx-object-detector", version = "1.0.0" }
model-zoo-shared = { path = "demos/model-zoo-shared", version = "1.0.0" }
rtx-model-zoo = { path = "demos/rtx-model-zoo", version = "1.0.0" }
segmentation-shared = { path = "demos/segmentation-shared", version = "1.0.0" }
rtx-segmentation-demo = { path = "demos/rtx-segmentation-demo", version = "1.0.0" }
worldgen-shared = { path = "demos/worldgen-shared", version = "1.0.0" }
rtx-worldgen-demo = { path = "demos/rtx-worldgen-demo", version = "1.0.0" }
embodied-shared = { path = "demos/embodied-shared", version = "1.0.0" }
rtx-embodied-demo = { path = "demos/rtx-embodied-demo", version = "1.0.0" }
forge-shared = { path = "demos/forge-shared", version = "1.0.0" }
rtx-forge-demo = { path = "demos/rtx-forge-demo", version = "1.0.0" }
aeroflow-shared = { path = "demos/aeroflow-shared", version = "1.0.0" }
rtx-aeroflow-demo = { path = "demos/rtx-aeroflow-demo", version = "1.0.0" }
fedmed-shared = { path = "demos/fedmed-shared", version = "1.0.0" }
rtx-fedmed-demo = { path = "demos/rtx-fedmed-demo", version = "1.0.0" }
weathercast-shared = { path = "demos/weathercast-shared", version = "1.0.0" }
rtx-weathercast-demo = { path = "demos/rtx-weathercast-demo", version = "1.0.0" }
distllm-shared = { path = "demos/distllm-shared", version = "1.0.0" }
rtx-distllm-demo = { path = "demos/rtx-distllm-demo", version = "1.0.0" }
clusterviz-shared = { path = "demos/clusterviz-shared", version = "1.0.0" }
rtx-clusterviz-demo = { path = "demos/rtx-clusterviz-demo", version = "1.0.0" }
seismic-shared = { path = "demos/seismic-shared", version = "1.0.0" }
rtx-seismic-demo = { path = "demos/rtx-seismic-demo", version = "1.0.0" }
structural-shared = { path = "demos/structural-shared", version = "1.0.0" }
rtx-structural-demo = { path = "demos/rtx-structural-demo", version = "1.0.0" }
# Essential dependencies
anyhow = "1.0"
thiserror = "2"
tracing = "0.1"
tracing-subscriber = "0.3"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tokio = { version = "1.43", features = ["full"] }
# Math and collections
nalgebra = { version = "0.34", features = ["serde-serialize"] }
indexmap = { version = "2.0", features = ["serde"] }
dashmap = "6.0"
rand = "0.8"
num-complex = "0.4"
half = "2.3"
base64 = "0.22"
reqwest = { version = "0.12", features = ["json"] }
# Async runtime
futures = "0.3"
async-trait = "0.1"
# Time handling
chrono = { version = "0.4", features = ["serde"] }
# Concurrency
parking_lot = "0.12"
crossbeam = "0.8"
rayon = "1.8"
# GPU acceleration (auto-detect CUDA version via nvcc at build time)
# f16 feature enables native FP16/BF16 GEMM with Tensor Cores (4-16x faster)
cudarc = { version = "0.18.2", features = ["std", "driver", "runtime", "nvrtc", "cublas", "cublaslt", "nccl", "cudnn", "cusparse", "cusolver", "cufile", "curand", "cuda-version-from-build-system", "f16"] }
# Dev dependencies
tokio-test = "0.4"
proptest = "1.4"
criterion = { version = "0.5", features = ["html_reports", "csv_output"] }
tempfile = "3.0"
loom = "0.7"
# Benchmarking and analysis dependencies
statistical = "1.0"
plotters = "0.3"
hdrhistogram = "7.5"
sysinfo = "0.29"
psutil = "3.2"
# Additional dependencies
uuid = { version = "1.0", features = ["v4", "serde"] }
memmap2 = "0.9"
rustfft = "6.2"
sha2 = "0.10"
regex = "1.0"
bincode = "1.3"
byteorder = "1.5"
config = "0.14"
clap = { version = "4.5", features = ["derive"] }
dialoguer = "0.11"
indicatif = "0.17"
comfy-table = "7.1"
colorful = "0.2"
walkdir = "2.5"
toml = "0.8"
pyo3 = { version = "0.25", features = ["extension-module"] }
numpy = "0.25"
petgraph = "0.6"
# Federated learning specific
rand_distr = "0.4"
statrs = "0.17"
ndarray = "0.15"
# ML Framework integrations
burn = { version = "0.16", default-features = false, features = ["std"] }
burn-tensor = { version = "0.16", default-features = false, features = ["std"] }
burn-ndarray = { version = "0.16" }
burn-wgpu = { version = "0.16" }
candle-core = { version = "0.11", default-features = false }
candle-nn = { version = "0.11", default-features = false }
candle-transformers = { version = "0.11", default-features = false }
safetensors = "0.4"
tokenizers = { version = "0.20", default-features = false }
bytemuck = "1.14"
dirs = "5.0"
# CubeCL - Rust GPU kernel compilation (Burn's compute layer)
# Enables writing GPU kernels in Rust syntax that compile to CUDA/WebGPU/ROCm/Metal
# Updated to 0.9.0-pre.5 for Flash Attention, improved memory management, CUDA 12.8 support
# Note: cubecl-linalg replaced by cubecl-matmul and other specialized crates in 0.9.x
# All crates pinned to pre.5 for version compatibility
# default-features = false to avoid cubecl-cpu which conflicts with zip's lzma
# features = ["std"] re-enables stream/async support required by wgpu/cuda backends
cubecl = { version = "0.9.0-pre.5", default-features = false, features = ["std"] }
cubecl-core = { version = "0.9.0-pre.5", default-features = false, features = ["std"] }
cubecl-runtime = { version = "0.9.0-pre.5", default-features = false, features = ["std"] }
cubecl-wgpu = { version = "0.9.0-pre.5", default-features = false }
cubecl-cuda = { version = "0.9.0-pre.5", default-features = false }
cubecl-hip = { version = "0.9.0-pre.5", default-features = false } # ROCm/AMD
cubecl-matmul = { version = "0.9.0-pre.5", default-features = false, features = ["std"] }
cubecl-reduce = { version = "0.9.0-pre.5", default-features = false, features = ["std"] }
cubecl-attention = { version = "0.9.0-pre.5", default-features = false, features = ["std"] }
# Database and caching
sqlx = { version = "0.8", features = ["runtime-tokio", "tls-rustls", "postgres", "uuid", "chrono", "json"] }
redis = { version = "1.0", features = ["tokio-comp", "connection-manager"] }
# Tokenization and text processing
unicode-segmentation = "1.10"
unicode-normalization = "0.1"
# Data validation and schema
jsonschema = "0.17"
# Feature store and vector storage
qdrant-client = "1.7"
milvus = "0.1"
# Audio and image processing for multimodal tokenization
image = { version = "0.24", features = ["jpeg", "png", "gif", "webp"] }
symphonia = { version = "0.5", features = ["all"] }
# HPC-AI integration
hpc-channels = { path = "../rustyinfra/network/hpc-channels", features = ["rkyv-codec"] }
hpc-parcode = { path = "../parcode" }
# RNCCL - Pure Rust collective communications (GPU collectives without NCCL/cudarc dependency)
rnccl-core = { path = "../rnccl/rnccl-core" }
rnccl-collectives = { path = "../rnccl/rnccl-collectives", default-features = false }
rnccl-transport = { path = "../rnccl/rnccl-transport" }
rnccl-bootstrap = { path = "../rnccl/rnccl-bootstrap" }
# Shared crates (Phase 3 consolidation - deduplication with horizon/stratoswarm)
security-common = { path = "../shared/security-common" }
observability-common = { path = "../shared/observability-common" }
config-common = { path = "../shared/config-common" }
error-types = { path = "../shared/error-types" }
[workspace.lints.rust]
unsafe_code = "allow" # GPU/SIMD/FFI codebase requires unsafe; allow for -D warnings compatibility
# Note: missing_docs is enabled per-crate with #![warn(missing_docs)]
# We'll enforce documentation in Stage 2
# Allow dead code for API surface that's designed for external use
# Many functions/structs are part of the public API but not used internally
dead_code = "allow"
unused_variables = "allow" # Common in placeholder implementations
non_snake_case = "allow" # Mathematical variables often use uppercase (A, B, C, X, Y)
unexpected_cfgs = "allow" # Backend-specific cfg values (cuda, metal, rocm) are valid
unused_imports = "allow" # Changed to allow for -D warnings compatibility
missing_docs = "allow" # Documentation will be enforced in Stage 2
ambiguous_glob_reexports = "allow" # Common pattern in ML libraries for convenience APIs
deprecated = "allow" # Internal deprecations during migration to Generic* types
unused_assignments = "allow" # Common in iterative algorithms
dropping_references = "allow" # drop(&ref) pattern for explicit lock release comments
unused_must_use = "allow" # Result<()> from fire-and-forget operations
unsafe_op_in_unsafe_fn = "allow" # Rust 2024 requires unsafe{} in unsafe fn; allow for SIMD/GPU code
unused_mut = "allow" # Common in macro-generated or conditional-compile code
unused_doc_comments = "allow" # Doc comments on non-pub items
mismatched_lifetime_syntaxes = "allow" # Named vs elided lifetime style preference
unreachable_code = "allow" # Unreachable code in ML fallback paths
unreachable_patterns = "allow" # Unreachable patterns in exhaustive matches
hidden_glob_reexports = "allow" # Private item shadowing glob reexport
async_fn_in_trait = "allow" # async fn in traits, stable since 1.75
non_camel_case_types = "allow" # WASM_SIMD and similar GPU names
non_local_definitions = "allow" # impl blocks in macro-generated code are sometimes non-local
[workspace.lints.clippy]
# Base lint groups with lower priority
all = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -1 }
# Allow pedantic lints that are too noisy or stylistic preferences
module_name_repetitions = "allow"
similar_names = "allow"
too_many_lines = "allow"
too_many_arguments = "allow"
struct_excessive_bools = "allow"
struct_field_names = "allow"
must_use_candidate = "allow" # Too many false positives
missing_errors_doc = "allow" # Will fix in Stage 2 (API docs)
missing_panics_doc = "allow" # Will fix in Stage 2 (API docs)
doc_markdown = "allow" # Will fix in Stage 2 (API docs)
# Allow certain cast warnings that are intentional in ML code
cast_possible_truncation = "allow" # Common in indexing ops
cast_sign_loss = "allow" # Common in array indexing
cast_precision_loss = "allow" # Intentional in f64->f32 conversions
cast_lossless = "allow" # Style preference
# Allow async/ownership patterns common in ML code
unused_async = "allow" # Many async traits require async signature even if not awaiting
unused_self = "allow" # Methods often take &self for API consistency
return_self_not_must_use = "allow" # Builder pattern returns Self
needless_pass_by_value = "allow" # Sometimes clearer API
unnecessary_wraps = "allow" # Often for API consistency with fallible versions
# Allow style preferences that are context-dependent
redundant_closure = "allow" # Sometimes clearer
redundant_closure_for_method_calls = "allow" # .map(|x| x.method()) vs .map(Type::method)
needless_borrow = "allow" # Style preference
needless_borrows_for_generic_args = "allow" # Borrowed slices in generic contexts
unreadable_literal = "allow" # ML code often uses specific numeric constants
collapsible_if = "allow" # Sometimes more readable when separate
match_same_arms = "allow" # Often for documentation/clarity
items_after_statements = "allow" # Common pattern in tests
blocks_in_conditions = "allow" # Sometimes needed for complex conditions
if_not_else = "allow" # Style preference
# Allow newer Rust features that aren't stabilized everywhere yet
manual_div_ceil = "allow" # div_ceil not stable in all contexts
manual_clamp = "allow" # Sometimes explicit is clearer
manual_is_multiple_of = "allow" # is_multiple_of not always available
# More style/pedantic lints that are context-dependent
needless_range_loop = "allow" # Sometimes index access is clearer
option_if_let_else = "allow" # Style preference
uninlined_format_args = "allow" # Style preference for format strings
missing_fields_in_debug = "allow" # Some fields shouldn't be in debug
derivable_impls = "allow" # Sometimes explicit is clearer
cast_possible_wrap = "allow" # Common in ML indexing
ptr_as_ptr = "allow" # FFI code often needs explicit casts
cast_ptr_alignment = "allow" # Common in GPU memory operations
single_match = "allow" # match vs if-let is style preference
format_push_string = "allow" # String formatting style preference
no_effect_underscore_binding = "allow" # Common for explicit drops
many_single_char_names = "allow" # Common in mathematical code (x, y, z, i, j, k)
if_same_then_else = "allow" # Sometimes intentional for clarity
single_char_pattern = "allow" # Style preference for string operations
used_underscore_binding = "allow" # Sometimes variables are prefixed for documentation
implicit_hasher = "allow" # HashMap parameter generalization is overkill
manual_memcpy = "allow" # Sometimes explicit loops are clearer
case_sensitive_file_extension_comparisons = "allow" # False positives on non-file paths
wildcard_imports = "allow" # Common for prelude-style imports
float_cmp = "allow" # ML code often compares floats directly
doc_overindented_list_items = "allow" # Doc formatting preference
nonminimal_bool = "allow" # Sometimes explicit booleans are clearer
trivially_copy_pass_by_ref = "allow" # &bool, &u8 can be fine for API consistency
match_wildcard_for_single_variants = "allow" # Future-proofing with _ is intentional
doc_link_with_quotes = "allow" # Doc formatting style
missing_safety_doc = "allow" # Will be addressed in Stage 2 (safety audit)
should_implement_trait = "allow" # Sometimes custom impls are intentional
let_and_return = "allow" # Sometimes intermediate binding is clearer
map_clone = "allow" # Sometimes clearer than using reference
type_complexity = "allow" # Complex types are common in ML code
format_in_format_args = "allow" # Sometimes clearer to build string first
option_option = "allow" # Sometimes needed for APIs
ref_option = "allow" # &Option<T> is fine in many contexts
assigning_clones = "allow" # clone_into suggestion isn't always clearer
iter_without_into_iter = "allow" # iter() without IntoIterator is fine for custom types
vec_init_then_push = "allow" # Sometimes clearer than with_capacity chain
manual_let_else = "allow" # if-let vs let-else is style preference
while_let_loop = "allow" # loop + match vs while-let is style preference
if_then_some_else_none = "allow" # Explicit if is sometimes clearer
collapsible_else_if = "allow" # Sometimes separate else-if is clearer
large_enum_variant = "allow" # ML types often have large variants
clone_on_copy = "allow" # Sometimes explicit clone is clearer
useless_conversion = "allow" # .into() on same type can be clearer for consistency
redundant_else = "allow" # Sometimes else block aids readability
default_trait_access = "allow" # Default::default() vs Type::default() is preference
manual_range_contains = "allow" # Sometimes explicit comparison is clearer
inconsistent_digit_grouping = "allow" # Numeric constant formatting preference
iter_cloned_collect = "allow" # Sometimes clearer than .copied()
# Additional lints for ML codebase patterns
undocumented_unsafe_blocks = "allow" # SAFETY comments will be added in Stage 2
await_holding_lock = "allow" # Common in streaming/inference code
map_unwrap_or = "allow" # map().unwrap_or() is readable
needless_continue = "allow" # Sometimes explicit continue aids readability
excessive_precision = "allow" # ML constants often have specific precision
empty_line_after_doc_comments = "allow" # Doc formatting preference
cloned_instead_of_copied = "allow" # .cloned() is more general
manual_midpoint = "allow" # Manual implementation may be intentional for precision
# hidden_glob_reexports is a rustc lint (in [workspace.lints.rust] above), not clippy
only_used_in_recursion = "allow" # Recursive algorithms are common
field_reassign_with_default = "allow" # Builder pattern style
str_to_string = "allow" # String conversion style preference
needless_return = "allow" # Sometimes explicit return is clearer
borrow_as_ptr = "allow" # FFI code needs explicit conversions
redundant_field_names = "allow" # Sometimes explicit is clearer
redundant_pattern_matching = "allow" # is_some() vs matches! preference
# More pedantic lints that are too strict for ML codebase
new_without_default = "allow" # Not all constructors should impl Default
self_only_used_in_recursion = "allow" # Recursive algorithms are common
match_like_matches_macro = "allow" # Sometimes match is clearer than matches!
same_item_push = "allow" # Performance in loop push is often fine
comparison_chain = "allow" # Explicit comparisons can be clearer
unsafe_derive_deserialize = "allow" # Common in FFI/GPU types with both
unnecessary_literal_bound = "allow" # Sometimes explicit bounds are clearer
unnecessary_debug_formatting = "allow" # Debug formatting in debug builds is fine
single_match_else = "allow" # Sometimes match is clearer than if-let
inherent_to_string = "allow" # Sometimes to_string is more descriptive
unnecessary_cast = "allow" # Sometimes explicit casts aid clarity
unchecked_time_subtraction = "allow" # Time duration math is safe in context
ptr_arg = "allow" # &Vec<T> is fine for APIs accepting slices
op_ref = "allow" # Operations on references can be clearer
unnecessary_unwrap = "allow" # Sometimes explicit unwrap after check is clearer
unwrap_or_default = "allow" # .unwrap_or(Type::default()) can be clearer
significant_drop_tightening = "allow" # Manual drop scope control is intentional
unnecessary_mut_passed = "allow" # API compatibility with mutable patterns
iter_on_empty_collections = "allow" # Defensive coding pattern
iter_nth_zero = "allow" # .iter().nth(0) can be clearer than .first()
# Additional allows for -D warnings compatibility (added by rust-scan 2026-04-25)
duplicated_attributes = "allow" # Proc-macro and cfg-specific attribute patterns
len_without_is_empty = "allow" # ML types with len() don't always need is_empty()
to_string_trait_impl = "allow" # impl ToString directly is fine in some cases
suspicious_open_options = "allow" # File creation patterns without truncate flag
non_std_lazy_statics = "allow" # lazy_static! still used in many crates
mixed_attributes_style = "allow" # Mix of inner/outer attr styles is acceptable
manual_slice_fill = "allow" # Explicit loops can be clearer for GPU slices
wildcard_in_or_patterns = "allow" # _ | pattern can be clearer
zero_repeat_side_effects = "allow" # Intentional in some init patterns
bool_to_int_with_if = "allow" # if cond { 1 } else { 0 } is often clearer
elidable_lifetime_names = "allow" # Named lifetimes can improve readability
explicit_iter_loop = "allow" # for x in v.iter() vs for x in &v is preference
format_collect = "allow" # format! in collect() is sometimes clearer
iter_filter_is_ok = "allow" # filter(|r| r.is_ok()) is readable
manual_string_new = "allow" # String::new() vs "".to_string() preference
needless_for_each = "allow" # .for_each() vs for loop is preference
ptr_cast_constness = "allow" # *const/*mut casts are intentional
semicolon_if_nothing_returned = "allow" # Missing ; after last expr is style
unnecessary_box_returns = "allow" # Box<T> returns can be intentional for erasure
bind_instead_of_map = "allow" # and_then vs map preference
cloned_ref_to_slice_refs = "allow" # .cloned() on ref slices is fine
unnecessary_sort_by = "allow" # sort_by vs sort_by_key preference
manual_is_finite = "allow" # Finite float checks can be explicit (was manual_is_ascii, renamed in clippy)
explicit_counter_loop = "allow" # enumerate() vs counter is preference
extra_unused_type_parameters = "allow" # Generic params for API consistency
range_plus_one = "allow" # x..=y vs x..y+1 preference
pub_underscore_fields = "allow" # _field in pub structs for partial visibility
wrong_self_convention = "allow" # is_*/as_*/to_* naming is context-dependent
assign_op_pattern = "allow" # a = a + b vs a += b is style preference in math code
borrowed_box = "allow" # &Box<T> sometimes needed for API compatibility
doc_lazy_continuation = "allow" # Doc list indentation is style preference
erasing_op = "allow" # x * 0 can be intentional in matrix init code
identity_op = "allow" # x + 0 can be intentional for clarity
ignored_unit_patterns = "allow" # let _ = match... patterns are fine
legacy_numeric_constants = "allow" # std::f64::MAX vs f64::MAX compatibility
needless_late_init = "allow" # late init can be clearer with complex conditions
unnecessary_get_then_check = "allow" # contains() vs get().is_some() preference
useless_vec = "allow" # vec![x] is sometimes clearer than slice
manual_inspect = "allow" # map with passthrough can be clearer than inspect
to_string_in_format_args = "allow" # format!("{}", x.to_string()) is sometimes intentional
enum_variant_names = "allow" # ParallelType::DataParallel postfix repetition is fine
unnecessary_join = "allow" # collect + join is sometimes clearer than collect directly
needless_raw_string_hashes = "allow" # r#"..."# with extra hashes is intentional
naive_bytecount = "allow" # byte counting in ML data processing
# Optimized profiles for workspace
[profile.release]
lto = "thin"
codegen-units = 1
panic = "abort"
strip = true
[profile.dev]
debug = true
opt-level = 1 # Faster debug builds
incremental = true
# Fast compilation profile for development
[profile.dev-fast]
inherits = "dev"
opt-level = 0
debug = false
incremental = true
[patch.crates-io]
pathfinder_simd = { path = "third_party/pathfinder_simd" }