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.6.tar.gz (33.6 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.6-py3-none-any.whl (31.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: touchstone_parser-1.0.6.tar.gz
  • Upload date:
  • Size: 33.6 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.6.tar.gz
Algorithm Hash digest
SHA256 30ae2c9530e8f1c143c3c1fd0495975414da95c74ae61b1a276d4ed5468f2a59
MD5 9ecd2b7990ff2a14b38cdde565ed4d9c
BLAKE2b-256 fc719493fb8df7c68430980786b42554087455dc6472f6f576e5a5d072145a2c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for touchstone_parser-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 69112a027c7a2e51cf67b65c522833e80129bfaa96aa0381ed4b8ae80f5f6718
MD5 b247aba800d8a2103d9a904e0756f921
BLAKE2b-256 f268ec74fadf4d6673b9621729ad74bbfbb207cd541a45e68e42d709001b340e

See more details on using hashes here.

Provenance

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