thermocouples


Namethermocouples JSON
Version 2.1.2 PyPI version JSON
download
home_pageNone
SummaryClean object-oriented thermocouple library with simplified API and hidden implementation details for professional use
upload_time2025-08-15 22:46:46
maintainerNone
docs_urlNone
authorRogerGdot
requires_python>=3.9
licenseMIT
keywords thermocouple temperature voltage nist measurement sensor instrumentation seebeck cold-junction oop abstract-base-class factory-pattern polynomials
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Thermocouples

[![PyPI version](https://badge.fury.io/py/thermocouples.svg)](https://badge.fury.io/py/thermocouples)
[![Python](https://img.shields.io/pypi/pyversions/thermocouples.svg)](https://pypi.org/project/thermocouples/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

A comprehensive, high-accuracy thermocouple calculation library for Python with clean object-oriented architecture and professional API design that hides implementation details.

## Features

- **🎯 Temperature to Voltage Conversion**: Convert temperature (°C) to thermoelectric voltage (V)
- **🌡️ Voltage to Temperature Conversion**: Convert voltage (V) to temperature (°C)
- **📊 Seebeck Coefficient Calculation**: Get the Seebeck coefficient (µV/K) at any temperature
- **📈 Temperature Derivative of Seebeck**: Calculate dSeebeck/dT (nV/K²) for advanced analysis
- **❄️ Cold Junction Compensation**: Built-in `volt_to_temp_with_cjc()` method for reference junction temperature compensation
- **🔬 Individual Thermocouple Leg Calculations**: 
  - Voltage calculations for positive and negative legs separately
  - Seebeck coefficient calculations for positive and negative legs separately
- **🎯 High Accuracy**: Based on NIST Monograph 175 polynomial coefficients
- **✅ All Standard Types**: Supports B, E, J, K, N, R, S, and T type thermocouples
- **🐍 Pure Python**: No external dependencies required
- **🏗️ Modern OOP Architecture**: Clean, maintainable object-oriented design
- **🧪 Well Tested**: Comprehensive test suite ensuring accuracy
- **📚 Type Safe**: Full type hints for better IDE support

## What's New in Version 2.1

**🧹 Professional API Cleanup:**
- **Clean Interface**: All internal implementation details hidden with underscore prefixes
- **IDE-Friendly**: Only user-relevant methods visible in autocomplete
- **Simplified Functions**: Shortened method names (`temp_to_volt` vs `temperature_to_voltage`)
- **Pure OOP Design**: Complete removal of legacy function-based API
- **Professional Standards**: Following Python best practices for library design

## Supported Thermocouple Types

| Type | Temperature Range | Materials | Application |
|------|------------------|-----------|-------------|
| **B** | 0°C to 1820°C | Pt-30%Rh / Pt-6%Rh | Ultra-high temperature |
| **E** | -270°C to 1000°C | Ni-Cr / Cu-Ni | Highest sensitivity |
| **K** | -270°C to 1372°C | Ni-Cr / Ni-Al | Most popular, general purpose |
| **N** | -270°C to 1300°C | Ni-Cr-Si / Ni-Si | Improved K-type |
| **R** | -50°C to 1768°C | Pt-13%Rh / Pt | High temperature, precious metal |
| **S** | -50°C to 1768°C | Pt-10%Rh / Pt | High temperature, precious metal |
| **T** | -270°C to 400°C | Cu / Cu-Ni | Cryogenic applications |

## Quick Start

### Installation

```bash
pip install thermocouples
```

### Basic Usage (New OOP API - Recommended)

```python
import thermocouples as tc

# Create thermocouple instance
tc_k = tc.get_thermocouple("K")

# Temperature to voltage conversion
voltage = tc_k.temp_to_volt(100.0)  # 4.096 mV at 100°C
print(f"K-type at 100°C: {voltage:.3f} mV")

# Voltage to temperature conversion  
temperature = tc_k.volt_to_temp(0.004096)  # Back to ~100°C
print(f"K-type at 4.096 mV: {temperature:.1f}°C")

# Seebeck coefficient calculation
seebeck = tc_k.temp_to_seebeck(100.0)  # µV/K
print(f"Seebeck coefficient at 100°C: {seebeck:.1f} µV/K")
```

### Advanced Usage

```python
import thermocouples as tc

# Get a thermocouple instance
tc_k = tc.get_thermocouple("K")

# High-precision calculations
voltage = tc_k.temp_to_volt(200.5)
seebeck = tc_k.temp_to_seebeck(200.5)  # Seebeck coefficient
dsdt = tc_k.temp_to_dsdt(200.5)        # Temperature derivative

# Cold junction compensation
hot_junction_temp = 500.0  # °C
cold_junction_temp = 25.0   # °C (room temperature)

# Method 1: Built-in Cold Junction Compensation (Recommended)
measured_voltage = 0.019665  # V (voltage measured by your instrument)
actual_temp = tc_k.volt_to_temp_with_cjc(measured_voltage, cold_junction_temp)
print(f"Actual temperature: {actual_temp:.1f}°C")

# Method 2: Manual calculation (for understanding)
voltage_hot = tc_k.temp_to_volt(hot_junction_temp)
voltage_cold = tc_k.temp_to_volt(cold_junction_temp)
expected_measurement = voltage_hot - voltage_cold
print(f"Expected measured voltage: {expected_measurement:.6f} V")

# Verify with built-in CJC function
calculated_temp = tc_k.volt_to_temp_with_cjc(expected_measurement, cold_junction_temp)
print(f"Calculated temperature: {calculated_temp:.1f}°C")

# Individual thermocouple leg analysis
tc_e = tc.get_thermocouple("E")

# Positive leg (Ni-Cr) calculations
pos_voltage = tc_e.temp_to_volt_pos_leg(300.0)
pos_seebeck = tc_e.temp_to_seebeck_pos_leg(300.0)

# Negative leg (Cu-Ni) calculations  
neg_voltage = tc_e.temp_to_volt_neg_leg(300.0)
neg_seebeck = tc_e.temp_to_seebeck_neg_leg(300.0)

print(f"E-type at 300°C:")
print(f"  Positive leg: {pos_voltage:.6f} V, {pos_seebeck:.3f} µV/K")
print(f"  Negative leg: {neg_voltage:.6f} V, {neg_seebeck:.3f} µV/K")
print(f"  Difference:   {pos_voltage - neg_voltage:.6f} V")
```

### Working with Multiple Types

```python
import thermocouples as tc

# Compare different thermocouple types at the same temperature
temperature = 400.0  # °C
types = ["B", "E", "J", "K", "N", "R", "S", "T"]

print(f"Voltages at {temperature}°C:")
for tc_type in types:
    if tc_type == "B" and temperature < 250:
        continue  # B-type has limited range at low temperatures
    
    thermocouple = tc.get_thermocouple(tc_type)
    voltage = thermocouple.temp_to_volt(temperature)
    seebeck = thermocouple.temp_to_seebeck(temperature)
    print(f"  Type {tc_type}: {voltage:.6f} V (Seebeck: {seebeck:.1f} µV/K)")
```

## Architecture Overview

**Version 2.0** features a clean object-oriented architecture:

```
thermocouples/
├── base.py              # Abstract base class with common calculation logic
├── registry.py          # Factory functions for creating thermocouple instances  
├── types/
│   ├── type_b_class.py  # B-type thermocouple implementation
│   ├── type_e_class.py  # E-type thermocouple implementation
│   ├── type_j_class.py  # J-type thermocouple implementation
│   ├── type_k_class.py  # K-type thermocouple implementation
│   ├── type_n_class.py  # N-type thermocouple implementation
│   ├── type_r_class.py  # R-type thermocouple implementation
│   ├── type_s_class.py  # S-type thermocouple implementation
│   └── type_t_class.py  # T-type thermocouple implementation
└── __init__.py          # Public API with backward compatibility
```

Each thermocouple type inherits from the abstract `Thermocouple` base class, ensuring:
- **Consistent Interface**: All types support the same methods
- **Code Reuse**: Common calculation logic is shared
- **Type Safety**: Full Python type hints throughout
- **Extensibility**: Adding new types is straightforward

## API Reference

### Factory Functions

- `get_thermocouple(tc_type: str) -> Thermocouple`: Get a thermocouple instance

### Thermocouple Class Methods

Each thermocouple instance provides:

#### Core Conversion Methods
- `temp_to_volt(temperature: float) -> float`
- `volt_to_temp(voltage: float) -> float`
- `volt_to_temp_with_cjc(voltage: float, ref_temp: float) -> float`
- `temp_to_seebeck(temperature: float) -> float` 
- `temp_to_dsdt(temperature: float) -> float`

#### Individual Leg Methods
- `temp_to_volt_pos_leg(temperature: float) -> float`
- `temp_to_volt_neg_leg(temperature: float) -> float`
- `temp_to_seebeck_pos_leg(temperature: float) -> float`
- `temp_to_seebeck_neg_leg(temperature: float) -> float`

#### Properties
- `name: str` - Thermocouple type identifier (e.g., "Type K")

## Requirements

- **Python**: 3.9+
- **Dependencies**: None (pure Python implementation)

## Accuracy and Validation

This library implements the official NIST ITS-90 thermocouple equations from **NIST Monograph 175** with rigorous precision:

- **Temperature-to-Voltage**: Polynomial evaluation using NIST coefficients
- **Voltage-to-Temperature**: Iterative solution with Newton-Raphson method
- **Individual Leg Calculations**: Separate positive and negative leg polynomials
- **Exponential Corrections**: Applied for specific types (K, N) where required
- **High Precision**: Maintains accuracy within NIST tolerance specifications

### Temperature Ranges by Type

| Type | Lower Limit | Upper Limit | Note |
|------|-------------|-------------|------|
| B | 0°C | 1820°C | Limited accuracy below 250°C |
| E | -270°C | 1000°C | Highest sensitivity of all types |
| J | -210°C | 1200°C | Iron oxidizes above 750°C in air |
| K | -270°C | 1372°C | Most common general-purpose type |
| N | -270°C | 1300°C | Improved drift characteristics vs. K |
| R | -50°C | 1768°C | Precious metal, high temperature |
| S | -50°C | 1768°C | Precious metal, similar to R |
| T | -270°C | 400°C | Excellent for cryogenic applications |

## Installation & Testing

### Install from PyPI

```bash
pip install thermocouples
```

### Run Built-in Tests

```bash
# Quick validation test
python -c "import thermocouples as tc; print('✓ Library loaded successfully')"

# Compare multiple types
python -c "
import thermocouples as tc
for t in ['K', 'J', 'T']:
    tc_obj = tc.get_thermocouple(t)
    v = tc_obj.temp_to_volt(100.0)
    print(f'Type {t}: {v:.6f} V at 100°C')
"
```

## Migration Guide

**Version 2.1 uses a clean OOP-only API**. Here's how to use the new simplified interface:

```python
# Modern API (clean, professional)
import thermocouples as tc
tc_k = tc.get_thermocouple("K")
voltage = tc_k.temp_to_volt(100.0)
temperature = tc_k.volt_to_temp(0.004096)
```

The clean OOP approach offers:
- **Better Performance**: Instantiate once, use many times
- **Type Safety**: Full Python type hints
- **IDE Support**: Only relevant methods visible in autocomplete
- **Code Clarity**: Professional object-oriented interface
- **Clean Design**: Implementation details hidden from user view

## Contributors

- **Version 2.1 Architecture** - *Clean API with hidden implementation details*

## License

MIT License - see [LICENSE](LICENSE) file for details.

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request. Areas for contribution:
- Additional thermocouple types (C, G, M, etc.)
- Performance optimizations
- Enhanced documentation
- Test coverage improvements

## Disclaimer

⚠️ **Important**: While this library implements NIST-standard calculations with high precision, users are responsible for validating results for their specific applications. For critical measurements or safety-related applications, please refer directly to NIST Monograph 175 or conduct independent verification.

---

*If this library helped your project, please consider giving it a ⭐ on GitHub!*

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "thermocouples",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "thermocouple, temperature, voltage, nist, measurement, sensor, instrumentation, seebeck, cold-junction, oop, abstract-base-class, factory-pattern, polynomials",
    "author": "RogerGdot",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/7e/d4/e709c2f0219d7f95bf43a482cde2990d7ae63f02da4a914e494df232ddd6/thermocouples-2.1.2.tar.gz",
    "platform": null,
    "description": "# Thermocouples\n\n[![PyPI version](https://badge.fury.io/py/thermocouples.svg)](https://badge.fury.io/py/thermocouples)\n[![Python](https://img.shields.io/pypi/pyversions/thermocouples.svg)](https://pypi.org/project/thermocouples/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA comprehensive, high-accuracy thermocouple calculation library for Python with clean object-oriented architecture and professional API design that hides implementation details.\n\n## Features\n\n- **\ud83c\udfaf Temperature to Voltage Conversion**: Convert temperature (\u00b0C) to thermoelectric voltage (V)\n- **\ud83c\udf21\ufe0f Voltage to Temperature Conversion**: Convert voltage (V) to temperature (\u00b0C)\n- **\ud83d\udcca Seebeck Coefficient Calculation**: Get the Seebeck coefficient (\u00b5V/K) at any temperature\n- **\ud83d\udcc8 Temperature Derivative of Seebeck**: Calculate dSeebeck/dT (nV/K\u00b2) for advanced analysis\n- **\u2744\ufe0f Cold Junction Compensation**: Built-in `volt_to_temp_with_cjc()` method for reference junction temperature compensation\n- **\ud83d\udd2c Individual Thermocouple Leg Calculations**: \n  - Voltage calculations for positive and negative legs separately\n  - Seebeck coefficient calculations for positive and negative legs separately\n- **\ud83c\udfaf High Accuracy**: Based on NIST Monograph 175 polynomial coefficients\n- **\u2705 All Standard Types**: Supports B, E, J, K, N, R, S, and T type thermocouples\n- **\ud83d\udc0d Pure Python**: No external dependencies required\n- **\ud83c\udfd7\ufe0f Modern OOP Architecture**: Clean, maintainable object-oriented design\n- **\ud83e\uddea Well Tested**: Comprehensive test suite ensuring accuracy\n- **\ud83d\udcda Type Safe**: Full type hints for better IDE support\n\n## What's New in Version 2.1\n\n**\ud83e\uddf9 Professional API Cleanup:**\n- **Clean Interface**: All internal implementation details hidden with underscore prefixes\n- **IDE-Friendly**: Only user-relevant methods visible in autocomplete\n- **Simplified Functions**: Shortened method names (`temp_to_volt` vs `temperature_to_voltage`)\n- **Pure OOP Design**: Complete removal of legacy function-based API\n- **Professional Standards**: Following Python best practices for library design\n\n## Supported Thermocouple Types\n\n| Type | Temperature Range | Materials | Application |\n|------|------------------|-----------|-------------|\n| **B** | 0\u00b0C to 1820\u00b0C | Pt-30%Rh / Pt-6%Rh | Ultra-high temperature |\n| **E** | -270\u00b0C to 1000\u00b0C | Ni-Cr / Cu-Ni | Highest sensitivity |\n| **K** | -270\u00b0C to 1372\u00b0C | Ni-Cr / Ni-Al | Most popular, general purpose |\n| **N** | -270\u00b0C to 1300\u00b0C | Ni-Cr-Si / Ni-Si | Improved K-type |\n| **R** | -50\u00b0C to 1768\u00b0C | Pt-13%Rh / Pt | High temperature, precious metal |\n| **S** | -50\u00b0C to 1768\u00b0C | Pt-10%Rh / Pt | High temperature, precious metal |\n| **T** | -270\u00b0C to 400\u00b0C | Cu / Cu-Ni | Cryogenic applications |\n\n## Quick Start\n\n### Installation\n\n```bash\npip install thermocouples\n```\n\n### Basic Usage (New OOP API - Recommended)\n\n```python\nimport thermocouples as tc\n\n# Create thermocouple instance\ntc_k = tc.get_thermocouple(\"K\")\n\n# Temperature to voltage conversion\nvoltage = tc_k.temp_to_volt(100.0)  # 4.096 mV at 100\u00b0C\nprint(f\"K-type at 100\u00b0C: {voltage:.3f} mV\")\n\n# Voltage to temperature conversion  \ntemperature = tc_k.volt_to_temp(0.004096)  # Back to ~100\u00b0C\nprint(f\"K-type at 4.096 mV: {temperature:.1f}\u00b0C\")\n\n# Seebeck coefficient calculation\nseebeck = tc_k.temp_to_seebeck(100.0)  # \u00b5V/K\nprint(f\"Seebeck coefficient at 100\u00b0C: {seebeck:.1f} \u00b5V/K\")\n```\n\n### Advanced Usage\n\n```python\nimport thermocouples as tc\n\n# Get a thermocouple instance\ntc_k = tc.get_thermocouple(\"K\")\n\n# High-precision calculations\nvoltage = tc_k.temp_to_volt(200.5)\nseebeck = tc_k.temp_to_seebeck(200.5)  # Seebeck coefficient\ndsdt = tc_k.temp_to_dsdt(200.5)        # Temperature derivative\n\n# Cold junction compensation\nhot_junction_temp = 500.0  # \u00b0C\ncold_junction_temp = 25.0   # \u00b0C (room temperature)\n\n# Method 1: Built-in Cold Junction Compensation (Recommended)\nmeasured_voltage = 0.019665  # V (voltage measured by your instrument)\nactual_temp = tc_k.volt_to_temp_with_cjc(measured_voltage, cold_junction_temp)\nprint(f\"Actual temperature: {actual_temp:.1f}\u00b0C\")\n\n# Method 2: Manual calculation (for understanding)\nvoltage_hot = tc_k.temp_to_volt(hot_junction_temp)\nvoltage_cold = tc_k.temp_to_volt(cold_junction_temp)\nexpected_measurement = voltage_hot - voltage_cold\nprint(f\"Expected measured voltage: {expected_measurement:.6f} V\")\n\n# Verify with built-in CJC function\ncalculated_temp = tc_k.volt_to_temp_with_cjc(expected_measurement, cold_junction_temp)\nprint(f\"Calculated temperature: {calculated_temp:.1f}\u00b0C\")\n\n# Individual thermocouple leg analysis\ntc_e = tc.get_thermocouple(\"E\")\n\n# Positive leg (Ni-Cr) calculations\npos_voltage = tc_e.temp_to_volt_pos_leg(300.0)\npos_seebeck = tc_e.temp_to_seebeck_pos_leg(300.0)\n\n# Negative leg (Cu-Ni) calculations  \nneg_voltage = tc_e.temp_to_volt_neg_leg(300.0)\nneg_seebeck = tc_e.temp_to_seebeck_neg_leg(300.0)\n\nprint(f\"E-type at 300\u00b0C:\")\nprint(f\"  Positive leg: {pos_voltage:.6f} V, {pos_seebeck:.3f} \u00b5V/K\")\nprint(f\"  Negative leg: {neg_voltage:.6f} V, {neg_seebeck:.3f} \u00b5V/K\")\nprint(f\"  Difference:   {pos_voltage - neg_voltage:.6f} V\")\n```\n\n### Working with Multiple Types\n\n```python\nimport thermocouples as tc\n\n# Compare different thermocouple types at the same temperature\ntemperature = 400.0  # \u00b0C\ntypes = [\"B\", \"E\", \"J\", \"K\", \"N\", \"R\", \"S\", \"T\"]\n\nprint(f\"Voltages at {temperature}\u00b0C:\")\nfor tc_type in types:\n    if tc_type == \"B\" and temperature < 250:\n        continue  # B-type has limited range at low temperatures\n    \n    thermocouple = tc.get_thermocouple(tc_type)\n    voltage = thermocouple.temp_to_volt(temperature)\n    seebeck = thermocouple.temp_to_seebeck(temperature)\n    print(f\"  Type {tc_type}: {voltage:.6f} V (Seebeck: {seebeck:.1f} \u00b5V/K)\")\n```\n\n## Architecture Overview\n\n**Version 2.0** features a clean object-oriented architecture:\n\n```\nthermocouples/\n\u251c\u2500\u2500 base.py              # Abstract base class with common calculation logic\n\u251c\u2500\u2500 registry.py          # Factory functions for creating thermocouple instances  \n\u251c\u2500\u2500 types/\n\u2502   \u251c\u2500\u2500 type_b_class.py  # B-type thermocouple implementation\n\u2502   \u251c\u2500\u2500 type_e_class.py  # E-type thermocouple implementation\n\u2502   \u251c\u2500\u2500 type_j_class.py  # J-type thermocouple implementation\n\u2502   \u251c\u2500\u2500 type_k_class.py  # K-type thermocouple implementation\n\u2502   \u251c\u2500\u2500 type_n_class.py  # N-type thermocouple implementation\n\u2502   \u251c\u2500\u2500 type_r_class.py  # R-type thermocouple implementation\n\u2502   \u251c\u2500\u2500 type_s_class.py  # S-type thermocouple implementation\n\u2502   \u2514\u2500\u2500 type_t_class.py  # T-type thermocouple implementation\n\u2514\u2500\u2500 __init__.py          # Public API with backward compatibility\n```\n\nEach thermocouple type inherits from the abstract `Thermocouple` base class, ensuring:\n- **Consistent Interface**: All types support the same methods\n- **Code Reuse**: Common calculation logic is shared\n- **Type Safety**: Full Python type hints throughout\n- **Extensibility**: Adding new types is straightforward\n\n## API Reference\n\n### Factory Functions\n\n- `get_thermocouple(tc_type: str) -> Thermocouple`: Get a thermocouple instance\n\n### Thermocouple Class Methods\n\nEach thermocouple instance provides:\n\n#### Core Conversion Methods\n- `temp_to_volt(temperature: float) -> float`\n- `volt_to_temp(voltage: float) -> float`\n- `volt_to_temp_with_cjc(voltage: float, ref_temp: float) -> float`\n- `temp_to_seebeck(temperature: float) -> float` \n- `temp_to_dsdt(temperature: float) -> float`\n\n#### Individual Leg Methods\n- `temp_to_volt_pos_leg(temperature: float) -> float`\n- `temp_to_volt_neg_leg(temperature: float) -> float`\n- `temp_to_seebeck_pos_leg(temperature: float) -> float`\n- `temp_to_seebeck_neg_leg(temperature: float) -> float`\n\n#### Properties\n- `name: str` - Thermocouple type identifier (e.g., \"Type K\")\n\n## Requirements\n\n- **Python**: 3.9+\n- **Dependencies**: None (pure Python implementation)\n\n## Accuracy and Validation\n\nThis library implements the official NIST ITS-90 thermocouple equations from **NIST Monograph 175** with rigorous precision:\n\n- **Temperature-to-Voltage**: Polynomial evaluation using NIST coefficients\n- **Voltage-to-Temperature**: Iterative solution with Newton-Raphson method\n- **Individual Leg Calculations**: Separate positive and negative leg polynomials\n- **Exponential Corrections**: Applied for specific types (K, N) where required\n- **High Precision**: Maintains accuracy within NIST tolerance specifications\n\n### Temperature Ranges by Type\n\n| Type | Lower Limit | Upper Limit | Note |\n|------|-------------|-------------|------|\n| B | 0\u00b0C | 1820\u00b0C | Limited accuracy below 250\u00b0C |\n| E | -270\u00b0C | 1000\u00b0C | Highest sensitivity of all types |\n| J | -210\u00b0C | 1200\u00b0C | Iron oxidizes above 750\u00b0C in air |\n| K | -270\u00b0C | 1372\u00b0C | Most common general-purpose type |\n| N | -270\u00b0C | 1300\u00b0C | Improved drift characteristics vs. K |\n| R | -50\u00b0C | 1768\u00b0C | Precious metal, high temperature |\n| S | -50\u00b0C | 1768\u00b0C | Precious metal, similar to R |\n| T | -270\u00b0C | 400\u00b0C | Excellent for cryogenic applications |\n\n## Installation & Testing\n\n### Install from PyPI\n\n```bash\npip install thermocouples\n```\n\n### Run Built-in Tests\n\n```bash\n# Quick validation test\npython -c \"import thermocouples as tc; print('\u2713 Library loaded successfully')\"\n\n# Compare multiple types\npython -c \"\nimport thermocouples as tc\nfor t in ['K', 'J', 'T']:\n    tc_obj = tc.get_thermocouple(t)\n    v = tc_obj.temp_to_volt(100.0)\n    print(f'Type {t}: {v:.6f} V at 100\u00b0C')\n\"\n```\n\n## Migration Guide\n\n**Version 2.1 uses a clean OOP-only API**. Here's how to use the new simplified interface:\n\n```python\n# Modern API (clean, professional)\nimport thermocouples as tc\ntc_k = tc.get_thermocouple(\"K\")\nvoltage = tc_k.temp_to_volt(100.0)\ntemperature = tc_k.volt_to_temp(0.004096)\n```\n\nThe clean OOP approach offers:\n- **Better Performance**: Instantiate once, use many times\n- **Type Safety**: Full Python type hints\n- **IDE Support**: Only relevant methods visible in autocomplete\n- **Code Clarity**: Professional object-oriented interface\n- **Clean Design**: Implementation details hidden from user view\n\n## Contributors\n\n- **Version 2.1 Architecture** - *Clean API with hidden implementation details*\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request. Areas for contribution:\n- Additional thermocouple types (C, G, M, etc.)\n- Performance optimizations\n- Enhanced documentation\n- Test coverage improvements\n\n## Disclaimer\n\n\u26a0\ufe0f **Important**: While this library implements NIST-standard calculations with high precision, users are responsible for validating results for their specific applications. For critical measurements or safety-related applications, please refer directly to NIST Monograph 175 or conduct independent verification.\n\n---\n\n*If this library helped your project, please consider giving it a \u2b50 on GitHub!*\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Clean object-oriented thermocouple library with simplified API and hidden implementation details for professional use",
    "version": "2.1.2",
    "project_urls": {
        "Bug Tracker": "https://github.com/RogerGdot/thermocouples/issues",
        "Changelog": "https://github.com/RogerGdot/thermocouples/releases",
        "Documentation": "https://github.com/RogerGdot/thermocouples#readme",
        "Homepage": "https://github.com/RogerGdot/thermocouples",
        "Repository": "https://github.com/RogerGdot/thermocouples.git",
        "Source Code": "https://github.com/RogerGdot/thermocouples"
    },
    "split_keywords": [
        "thermocouple",
        " temperature",
        " voltage",
        " nist",
        " measurement",
        " sensor",
        " instrumentation",
        " seebeck",
        " cold-junction",
        " oop",
        " abstract-base-class",
        " factory-pattern",
        " polynomials"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d25ab85dbe11bb34452cd5213f1d41c4a241c52dbeb2fc93945eb15d3e6641e4",
                "md5": "d6ec7373fae5ce2f565924640ad5564d",
                "sha256": "80a008c19349175d217b3532b376baf54898b98895cba6fe5b12c4335831e57e"
            },
            "downloads": -1,
            "filename": "thermocouples-2.1.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d6ec7373fae5ce2f565924640ad5564d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 35718,
            "upload_time": "2025-08-15T22:46:45",
            "upload_time_iso_8601": "2025-08-15T22:46:45.481452Z",
            "url": "https://files.pythonhosted.org/packages/d2/5a/b85dbe11bb34452cd5213f1d41c4a241c52dbeb2fc93945eb15d3e6641e4/thermocouples-2.1.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7ed4e709c2f0219d7f95bf43a482cde2990d7ae63f02da4a914e494df232ddd6",
                "md5": "75b7d4f9c103996ccdc10e3aa7f7ac87",
                "sha256": "dee564ba7710c6d1e6726d582814c76ac6f00f7fc7b69b95522ea4b525cef443"
            },
            "downloads": -1,
            "filename": "thermocouples-2.1.2.tar.gz",
            "has_sig": false,
            "md5_digest": "75b7d4f9c103996ccdc10e3aa7f7ac87",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 30986,
            "upload_time": "2025-08-15T22:46:46",
            "upload_time_iso_8601": "2025-08-15T22:46:46.775414Z",
            "url": "https://files.pythonhosted.org/packages/7e/d4/e709c2f0219d7f95bf43a482cde2990d7ae63f02da4a914e494df232ddd6/thermocouples-2.1.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-15 22:46:46",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "RogerGdot",
    "github_project": "thermocouples",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "thermocouples"
}
        
Elapsed time: 0.92314s