Python library for Touchstone .sNp parsing and S-parameter analysis in RF/microwave engineering.
Project description
touchstone.parser
A Python library for Touchstone
.sNpparsing and S‑parameter analysis in RF/microwave engineering.
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
.sNpfiles 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
numpyfor 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
- Touchstone File Format Specification (IBIS)
- S-parameter — Wikipedia
- PyPI Package
- Touchstone .NET Library - check out the .NET version for C#-based workflows.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
064f97b90cd738d490cf9a7ca3bfe9dd2279f243eab175c8ead79416291272da
|
|
| MD5 |
d6874efe98f9b22d7d3625fee5a22375
|
|
| BLAKE2b-256 |
cce46040ede58b8973b8b03d1d08c2633a6e087f149c20860572538a3daa637d
|
Provenance
The following attestation bundles were made for touchstone_parser-1.0.3.tar.gz:
Publisher:
publish.yml on suryakantamangaraj/touchstone-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
touchstone_parser-1.0.3.tar.gz -
Subject digest:
064f97b90cd738d490cf9a7ca3bfe9dd2279f243eab175c8ead79416291272da - Sigstore transparency entry: 1361370317
- Sigstore integration time:
-
Permalink:
suryakantamangaraj/touchstone-python@e2dcd46f446b4438ad0b1091d4d0f961f57a619d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/suryakantamangaraj
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e2dcd46f446b4438ad0b1091d4d0f961f57a619d -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file touchstone_parser-1.0.3-py3-none-any.whl.
File metadata
- Download URL: touchstone_parser-1.0.3-py3-none-any.whl
- Upload date:
- Size: 31.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
136ffda2f20757731001c9712ab86e1563e99dae7c35a178ea3eedb326ec89de
|
|
| MD5 |
3510659a01a83ecaf88c37d5a39f2f36
|
|
| BLAKE2b-256 |
8c48c2fb8910233b79239fc64f30e9f6108d70c3d739339a6e7e86410e7db4f0
|
Provenance
The following attestation bundles were made for touchstone_parser-1.0.3-py3-none-any.whl:
Publisher:
publish.yml on suryakantamangaraj/touchstone-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
touchstone_parser-1.0.3-py3-none-any.whl -
Subject digest:
136ffda2f20757731001c9712ab86e1563e99dae7c35a178ea3eedb326ec89de - Sigstore transparency entry: 1361370347
- Sigstore integration time:
-
Permalink:
suryakantamangaraj/touchstone-python@e2dcd46f446b4438ad0b1091d4d0f961f57a619d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/suryakantamangaraj
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e2dcd46f446b4438ad0b1091d4d0f961f57a619d -
Trigger Event:
workflow_dispatch
-
Statement type: