Skip to main content

trntensor

CI codecov Ruff PyPI Python License Docs

Tensor contractions for AWS Trainium via NKI.

Einstein summation with contraction planning, CP and Tucker decompositions. Expresses scientific tensor workloads naturally instead of decomposing to GEMM. Part of the trnsci scientific computing suite (github.com/trnsci).

Current phase

trntensor follows the trnsci 5-phase roadmap. Active work is tracked in phase-labeled GitHub issues:

Suite-wide tracker: trnsci/trnsci#1.

Install

pip install trntensor

# Trn2/Trn3 with TorchNeuron (native PyTorch, Neuron SDK 2.33+)
pip install "trntensor[torchneuron]" --extra-index-url https://pip.repos.neuron.amazonaws.com

# Trn1 / PyTorch-XLA lineage
pip install "trntensor[neuron]" --extra-index-url https://pip.repos.neuron.amazonaws.com

Kernels dispatch on whichever Neuron PyTorch lineage is installed:

  • TorchNeuron (native): Trn2/Trn3, Neuron SDK 2.33+, Python ≥ 3.12, torch 2.14, torch-neuronx 2.14.*. Each kernel is a PyTorch custom op (torch.ops.trntensor.*) on the neuron device; no torch_xla.
  • PyTorch/XLA: Trn1 (and any host on the torch-neuronx 2.9 lineage). Kernels dispatch through torch_xla, unchanged.

trntensor picks the native path when the native torch_neuronx and a neuron device are present, and the XLA path when torch_xla is installed; otherwise it runs on PyTorch. Set TRNSCI_NKI_DISPATCH=native or xla (shared by all trnsci libraries) to force a path. Pin operands on the device with to_device / from_device; the older to_xla / from_xla still work on both lineages (see the migration note). With an editable install (pip install -e), set NKI_ENABLE_TRACE_CACHE=0: the NKI kernel cache only versions installed wheels and can serve stale kernels.

Usage

import torch
import trntensor

# Einsum — drop-in for torch.einsum with contraction planning
C = trntensor.einsum("ij,jk->ik", A, B)  # matmul
T = trntensor.einsum("ap,bp->ab", B_i, B_j)  # DF-MP2 contraction
X = trntensor.einsum("mi,mnP->inP", C_occ, eri)  # AO→MO transform

# Contraction planning
plan = trntensor.plan_contraction("ij,jk->ik", A, B)
flops = trntensor.estimate_flops("ij,jk->ik", A, B)

# CP decomposition (tensor hypercontraction)
factors, weights = trntensor.cp_decompose(tensor, rank=10)
reconstructed = trntensor.cp_reconstruct(factors, weights)

# Tucker decomposition (HOSVD)
core, factors = trntensor.tucker_decompose(tensor, ranks=(5, 5, 5))

Operations

Category Operation Description
Contraction einsum General tensor contraction
Contraction multi_einsum Multiple contractions (fusion-ready)
Planning plan_contraction Analyze and select strategy
Planning estimate_flops FLOPs for a contraction
Decomposition cp_decompose CP/PARAFAC via ALS
Decomposition tucker_decompose Tucker via HOSVD

Status

  • Einsum with matmul/bmm/torch dispatch
  • Contraction planner
  • CP decomposition (ALS)
  • Tucker decomposition (HOSVD)
  • DF-MP2 einsum example
  • NKI fused contraction kernels (mp2_energy, ao_to_mo_transform, df_exchange, df_coulomb)
  • Device operand residency (to_device / from_device; to_xla / from_xla kept)
  • Native TorchNeuron dispatch (Trn2/Trn3, torch.ops.trntensor.*) alongside PyTorch/XLA (Trn1)
  • NKI CPU simulator + nki-simulator CI gate
  • Optimal contraction ordering — greedy path search for 3+ operands
  • Multi-contraction shared-operand XLA pre-pinning
  • Contraction plan cache (clear_plan_cache / plan_cache_info)
  • Alpha/beta scaling for einsum (cuTENSOR GEMM-style)
  • Input validation with descriptive errors
  • Tensor Train (TT) decomposition (TT-SVD)
  • Non-negative CP + warm-start CP
  • PEP 561 py.typed marker
  • Mixed precision / dtype override for bf16/fp16
  • precision= kwarg ("fast" / "kahan" fp64 promotion / "dd" stub)
Project What
trnfft FFT + complex ops
trnblas BLAS operations
trnsolver Linear solvers
trnrand Random number generation
trnsparse Sparse operations

License

Apache 2.0 — Copyright 2026 Scott Friedman

Disclaimer

trnsci is an independent open-source project. It is not sponsored by, endorsed by, or affiliated with Amazon.com, Inc., Amazon Web Services, Inc., or Annapurna Labs Ltd.

"AWS", "Amazon", "Trainium", "Inferentia", "NeuronCore", "Neuron SDK", and related identifiers are trademarks of their respective owners and are used here solely for descriptive and interoperability purposes. Use does not imply endorsement, partnership, or any other relationship.

All work, opinions, analyses, benchmark results, architectural commentary, and editorial judgments in this repository and on trnsci.dev are those of the project's contributors. They do not represent the views, positions, or commitments of Amazon, AWS, or Annapurna Labs.

Feedback directed at the Neuron SDK or Trainium hardware is good-faith ecosystem commentary from independent users. It is not privileged information, is not pre-reviewed by AWS, and should not be read as authoritative about product roadmap, behavior, or quality.

For official AWS guidance, see aws-neuron documentation and the AWS Trainium product page.

Metadata

Release files for trntensor 0.21.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for trntensor 0.21.0
File Size Uploaded Provenance Actions
trntensor-0.21.0.tar.gz 305.0 kB With provenance Details for trntensor-0.21.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for trntensor 0.21.0
File Interpreter ABI Platform Actions
trntensor-0.21.0-py3-none-any.whl Python 3 none any Details for trntensor-0.21.0-py3-none-any.whl

Total release size: 385.7 kB

Release files / trntensor-0.21.0.tar.gz

Download URL trntensor-0.21.0.tar.gz
Size 305.0 kB
Tags Source
SHA-256 checksum
How to use checksums
0b40954ff98a051ffc9034a34b17f5fae003a0800ac8d29e1e9e3de13d13f462
BLAKE2b-256 checksum
How to use checksums
2ff8d9c737504214846661a3053b21800641287be1224500a2716bb68d24a38e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

Release files / trntensor-0.21.0-py3-none-any.whl

Download URL trntensor-0.21.0-py3-none-any.whl
Size 80.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3c4b2f14ab07249ffcd8e716347652e8f927c5650b03a8415181991ef9de54cb
BLAKE2b-256 checksum
How to use checksums
d2c4b9d44933970d557c7528155a2d66115bc06a79ab29bbc355101d3b949999
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

Security for trntensor 0.21.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for trntensor-0.21.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page