Skip to main content

Python library for Touchstone .sNp parsing and S-parameter analysis in RF/microwave engineering.

Project description

touchstone.parser

A Python library for Touchstone .sNp parsing and S‑parameter analysis in RF/microwave engineering.

PyPI PyPI Downloads Build Coverage Docs License Python

touchstone.parser is a clean, modular, enterprise-ready Python library for parsing Touchstone (.sNp) files — the industry-standard format for RF and microwave S‑parameter data. It provides strongly typed classes, LINQ-friendly APIs, and seamless integration into simulation and analysis workflows.


✨ Features

  • Parse .sNp files into strongly typed Python classes (TouchstoneData, FrequencyPoint, NetworkParameter)
  • Multi-port support — 1‑port through N‑port networks
  • All data formats — Real/Imaginary (RI), Magnitude/Angle (MA), Decibel/Angle (DB)
  • All frequency units — Hz, kHz, MHz, GHz with automatic normalization
  • All parameter types — S, Y, Z, H, G
  • LINQ-friendly APIs — query S‑parameters with get_s11(data), get_s21(data), data.get_parameter(r, c)
  • RF calculations — insertion loss, return loss, VSWR out of the box
  • Export utilities — CSV export and Touchstone writer for round-trip fidelity
  • Minimal dependencies — powered by numpy for fast array operations

📦 Installation

pip install touchstone.parser

Or via the PyPI Package Manager:

pip install touchstone.parser

🚀 Quick Start

from touchstone.parser import TouchstoneParser

# Parse a Touchstone file
data = TouchstoneParser.parse("filter.s2p")

print(f"Ports: {data.n_ports}")
print(f"Frequency points: {data.n_freq}")

# Query S21 insertion loss
il = data.to_insertion_loss()
for f, val in zip(data.frequencies, il):
    freq_ghz = f / 1e9
    print(f"{freq_ghz:.3f} GHz → IL = {val:.2f} dB")

# Filter to a frequency range
passband = data.in_frequency_range(2.0e9, 3.0e9)

# Compute VSWR
vswr = data.to_vswr()
for f, val in zip(data.frequencies, vswr):
    print(f"VSWR = {val:.3f}")

# Export to CSV
data.to_csv("output.csv")

📖 API Overview

Parsing

Method Description
TouchstoneParser.parse(filepath) Parse from a file path
TouchstoneParser.parse_string(content, n_ports?) Parse from a raw string

Data Access

Method Description
data.get_s(to_port, from_port) Get S‑parameters across all frequencies
data.frequency All frequency values in Hz
data.s_parameters 3D numpy array of all parameters

RF Calculations

Method Description
data.to_insertion_loss() |S21| insertion loss in dB
data.to_return_loss() |S11| return loss in dB
data.to_vswr() VSWR from S11

Filtering & Export

Method Description
data.in_frequency_range(min_hz, max_hz) Filter to frequency range
data.to_csv(writer) Export to CSV file or path
data.to_csv_string() Export to CSV string
write_snp(data, filepath) Write back to Touchstone format

Utilities

Method Description
normalize_frequency(val, unit) Convert to Hz
db_to_mag(db) Convert DB to magnitude
mag_to_db(mag) Convert magnitude to DB
ma_to_complex(mag, deg) Create from MA
db_to_complex(dB, deg) Create from DB

🏗️ Project Structure

touchstone-python/
├── src/
│   └── touchstone/parser/          # Core library
│       ├── models/                  # Domain models (enums, data classes)
│       ├── parsing/                 # Parser engine
│       └── utilities/               # Converters, extensions, writer
├── tests/                           # pytest test suite
├── docs/                            # Sphinx documentation
├── pyproject.toml                   # Project metadata and dependencies
└── .github/workflows/               # GitHub Actions CI/CD

🔧 Supported Formats

Feature Supported
Touchstone v1.0 / v1.1
1‑port (.s1p)
2‑port (.s2p)
Multi-port (.s3p, .s4p, ...)
Real-Imaginary (RI)
Magnitude-Angle (MA)
Decibel-Angle (DB)
Hz / kHz / MHz / GHz
S / Y / Z / H / G parameters
Comments and metadata
Touchstone v2.0 keywords 🔜 Planned

🧪 Running Tests

pytest --verbosity normal

🤝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.


💬 Community

  • Star this repo and related RF/microwave projects to help them grow - then mention your project in context to build visibility.
  • 💡 Share feedback via GitHub Discussions - we'd love to hear how you're using the library, what's working, and what could be better.

📄 License

This project is licensed under the MIT License.


💖 Support & Funding

If this library helps you in your RF/microwave engineering work, consider supporting its maintenance and the development of new features:

  • Sponsor on GitHub
  • Star the project to help it gain visibility in the engineering community.

📚 Resources


Made by suryamangaraj · Built for the RF/microwave engineering community 📡

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

touchstone_parser-1.0.4.tar.gz (31.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

touchstone_parser-1.0.4-py3-none-any.whl (31.0 kB view details)

Uploaded Python 3

File details

Details for the file touchstone_parser-1.0.4.tar.gz.

File metadata

  • Download URL: touchstone_parser-1.0.4.tar.gz
  • Upload date:
  • Size: 31.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for touchstone_parser-1.0.4.tar.gz
Algorithm Hash digest
SHA256 0067d61ebc4d03fbe65421e6bc2f6f7df1133d4cdb1e5e4851533fca228b48f7
MD5 a155d270aa256fa2f2ce644be6951efe
BLAKE2b-256 8598480b7b253d0d0d45c7ad1046e6702a0d0dea1baf4bdefb2e7191ce5bc522

See more details on using hashes here.

Provenance

The following attestation bundles were made for touchstone_parser-1.0.4.tar.gz:

Publisher: publish.yml on suryakantamangaraj/touchstone-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file touchstone_parser-1.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for touchstone_parser-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 6cd206f0d9f6b4fece259d62410bd65c2b258ffd176d0c0c7b0f097cec27120d
MD5 f5a3786d503b6a46797c2fbe96ee2a34
BLAKE2b-256 4f96c529db49c25d7599ab35a1e94da5d016a4950354b382cdaa82717fd70392

See more details on using hashes here.

Provenance

The following attestation bundles were made for touchstone_parser-1.0.4-py3-none-any.whl:

Publisher: publish.yml on suryakantamangaraj/touchstone-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page