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.3.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.3-py3-none-any.whl (31.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: touchstone_parser-1.0.3.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.3.tar.gz
Algorithm Hash digest
SHA256 064f97b90cd738d490cf9a7ca3bfe9dd2279f243eab175c8ead79416291272da
MD5 d6874efe98f9b22d7d3625fee5a22375
BLAKE2b-256 cce46040ede58b8973b8b03d1d08c2633a6e087f149c20860572538a3daa637d

See more details on using hashes here.

Provenance

The following attestation bundles were made for touchstone_parser-1.0.3.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.3-py3-none-any.whl.

File metadata

File hashes

Hashes for touchstone_parser-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 136ffda2f20757731001c9712ab86e1563e99dae7c35a178ea3eedb326ec89de
MD5 3510659a01a83ecaf88c37d5a39f2f36
BLAKE2b-256 8c48c2fb8910233b79239fc64f30e9f6108d70c3d739339a6e7e86410e7db4f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for touchstone_parser-1.0.3-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