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

Uploaded Python 3

File details

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

File metadata

  • Download URL: touchstone_parser-1.0.5.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.5.tar.gz
Algorithm Hash digest
SHA256 44a7e50015566603ecc71ae30c84bc0cf8c94a3a18bf7ede1e6b64d3125ccc8c
MD5 6eabe62b0412c00359d765e19ccde372
BLAKE2b-256 262ecd4c10a872c7468a670a71d878366f267ffb96b38047c71acdf6fe2040dd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for touchstone_parser-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 edb8d2b3c011ed6bc3bcb8abe38dba3543ee3f7cb09d125693f82bf6868324c4
MD5 76240b6255472b9d764c0db00b9c33a9
BLAKE2b-256 3aacffa7dd099cc67321476c45ce1c3c080b50845463581efc7a2d1231879f2f

See more details on using hashes here.

Provenance

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