thermocouple-its90
NIST ITS-90 thermocouple conversion for Python: voltage to temperature and temperature to voltage for all eight letter-designated types (B, E, J, K, N, R, S, T), with cold-junction compensation and Seebeck coefficients. The test suite verifies every one of the 12,026 tabulated points of the NIST reference tables on every run.
Pure standard library, no dependencies, fully typed. A browser version of this engine runs as a free online thermocouple calculator, vendored from this repository on every release.
Install
pip install thermocouple-its90
Convert thermocouple millivolts to temperature
from thermocouple_its90 import TypeK
TypeK.emf(300.0) # 12.209 (mV at 300 C, 0 C reference: the table value)
TypeK.temperature(12.209) # 300.0 (C, ice-bath reference)
TypeK.seebeck(300.0) # 0.0416 (mV per C)
TypeK.range # (-270.0, 1372.0)
Cold-junction compensation
A thermocouple measures the difference between its junctions, and the reference tables assume the cold junction sits at 0 C. If your meter's terminals are at room temperature, a direct table lookup is wrong:
from thermocouple_its90 import TypeK
# Meter reads 4.096 mV, terminals at 25 C:
TypeK.temperature(4.096) # 100.0 C <- naive lookup, wrong
TypeK.temperature(4.096, reference=25.0) # 124.3 C <- the actual answer
All eight types work the same way:
from thermocouple_its90 import get, letters
letters() # ['B', 'E', 'J', 'K', 'N', 'R', 'S', 'T']
get("s").emf(1400.0) # 14.373 mV
get("t").temperature(-4.648) # -149.98 C (cryogenic ranges included)
Accuracy, verified rather than asserted
- The forward reference functions reproduce all 12,026 one-degree points
of the NIST reference tables within their 0.001 mV print rounding. The
full comparison runs in CI on every push (
tests/test_full_tables.py). - Inversion seeds with the published ITS-90 inverse polynomials and refines by Newton iteration on the exact forward function. Round trips agree to microdegrees instead of the inverse polynomials' 0.02 to 0.06 C error bands.
- Types K, E and T invert over their full cryogenic ranges (to -270 C), below where the published inverse polynomials stop.
- Type B is handled with its physics: its EMF is non-monotonic near room temperature, so inversion below 0.291 mV (about 250 C) is refused with an explanation instead of returning one of two possible answers.
MCP server for AI agents
Language models mis-remember thermocouple polynomials. The package ships a Model Context Protocol server so agents call the verified implementation instead:
pip install "thermocouple-its90[mcp]"
claude mcp add thermocouple -- thermocouple-its90-mcp
Tools: thermocouple_to_temperature, thermocouple_to_emf,
thermocouple_types.
Data provenance and licensing
Coefficients were machine-parsed, never hand-typed, from the NIST ITS-90
Thermocouple Database (SRD 60, https://its90.nist.gov/). The database reproduces
NIST Monograph 175 (Burns, Scroger, Strouse, Croarkin, and Guthrie, 1993),
a United States government publication not subject to copyright. The
canonical dataset lives in data/its90.json; _data.py is generated from
it and CI fails if they drift. Code is MIT licensed.
Related
- Live calculator, this engine in the browser, with worked examples and FAQ
- More verified engineering calculators by the same author, including reference-electrode, alloy-composition, diffusion and XRD tools
- lcf-strain-life, the same library-plus-MCP pattern for low-cycle fatigue analysis
Citation
If this library is useful in published work, please cite it via
https://doi.org/10.5281/zenodo.22036394 (see CITATION.cff; each release
gets its own DOI). Please also cite the underlying reference: Burns, G. W., Scroger, M. G., Strouse, G. F.,
Croarkin, M. C., & Guthrie, W. F. (1993). Temperature-electromotive force
reference functions and tables for the letter-designated thermocouple types
based on the ITS-90 (NIST Monograph 175). NIST.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file thermocouple_its90-1.0.1.tar.gz.
File metadata
- Download URL: thermocouple_its90-1.0.1.tar.gz
- Upload date:
- Size: 70.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c4c72bf9aadf9bb99cc4c4d082e5f9a01151ed41a78131f36a96d5b2e9851ab
|
|
| MD5 |
77a083d5824969a644ed12ef776e7c18
|
|
| BLAKE2b-256 |
f11d3152b7d92ed49c4b0c672abe5f2d77515ec82cf90e9001730163ae16e42c
|
Provenance
The following attestation bundles were made for thermocouple_its90-1.0.1.tar.gz:
Publisher:
publish.yml on dfieser/thermocouple-its90
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
thermocouple_its90-1.0.1.tar.gz -
Subject digest:
6c4c72bf9aadf9bb99cc4c4d082e5f9a01151ed41a78131f36a96d5b2e9851ab - Sigstore transparency entry: 2540425968
- Sigstore integration time:
-
Permalink:
dfieser/thermocouple-its90@ab1479ed419e021d91353cf65b56ad151a9dc6f4 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/dfieser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ab1479ed419e021d91353cf65b56ad151a9dc6f4 -
Trigger Event:
release
-
Statement type:
File details
Details for the file thermocouple_its90-1.0.1-py3-none-any.whl.
File metadata
- Download URL: thermocouple_its90-1.0.1-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9c6db10bc2fdc79451d400e9a78007f9ccc2b61ae05917bcf4af385a5f555da
|
|
| MD5 |
a0f4b2a45d68a2f4b7f089f7215b6ca9
|
|
| BLAKE2b-256 |
ff891b583ea637286a77e91c95efa2316a71f5ec67dfc3f55f9ec6147eb5b3a1
|
Provenance
The following attestation bundles were made for thermocouple_its90-1.0.1-py3-none-any.whl:
Publisher:
publish.yml on dfieser/thermocouple-its90
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
thermocouple_its90-1.0.1-py3-none-any.whl -
Subject digest:
f9c6db10bc2fdc79451d400e9a78007f9ccc2b61ae05917bcf4af385a5f555da - Sigstore transparency entry: 2540426012
- Sigstore integration time:
-
Permalink:
dfieser/thermocouple-its90@ab1479ed419e021d91353cf65b56ad151a9dc6f4 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/dfieser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ab1479ed419e021d91353cf65b56ad151a9dc6f4 -
Trigger Event:
release
-
Statement type: