Skip to main content

Parametric radio frequency modeling, optimization and sampling

Project description

Tests Status Documentation Status

ParamRF Logo

ParamRF, or pmrf, is an open-source radio frequency (RF) modeling framework. It provides a declarative, object-orientated syntax for creating complex RF circuit and surrogate models using JAX.

The library also provides tools for model optimization, fitting, statistical analysis and Bayesian inference.

Version:

GitHub Release

Author:

Gary Allen

Homepage:

https://github.com/gvcallen/paramrf

Docs:

https://gvcallen.github.io/paramrf

Paper:

https://doi.org/10.48550/arXiv.2510.15881

Features

  • Declarative syntax: Allows for the definition of models using either a self-documenting, declarative syntax, or via compositional techniques such as cascading or nodal circuit building. Also, since models can contain other models, this provides a natural means of building deeply nested, hierarchical models.

  • Differentiable: Since the framework is built on top of jax (as opposed to numpy), all models can be differentiated with respect to both frequency and parameters using auto-differentiation. This allows for both more efficient and flexible optimization, as well as unique design and analysis opportunities.

  • High performance and hardware flexible: Since models are compiled using jax with Just-In-Time (JIT) compilation, model performance is improved, and models can also be computed on high-performance hardware (CPU, GPU, TPU).

  • Built-in optimization and inference wrappers: Provides built-in wrappers for frequentist optimization and Bayesian inference in pmrf.optimize and pmrf.infer, as well as high-level wrappers for fitting models to data in pmrf.fitting.

  • Extensibility: Designed to be extendable, such that additional models, fitting algorithms, cost functions, sampling routines etc. can easily be implemented.

Installation

ParamRF can be installed directly using pip (requires Python 3.11+):

$ pip install paramrf

Example

The example below shows how to define and optimize a simple RLC model to satisfy a given goal function. See the documentation for more complex examples, or have a look at the tutorials folder on GitHub.

import pmrf as prf
from pmrf.parameters import Scaled
from pmrf.models import Resistor, Inductor, Capacitor

freq = prf.Frequency(1, 10, 101, 'GHz')
rlc_model = Resistor(50) ** Inductor(Scaled(1.0, 1e-9)) ** Capacitor(Scaled(1.0, 1e-12))

opt_freq = prf.Frequency(4, 6, 101, 'GHz')
goal = prf.evaluators.Goal('s11_db', '<', -20)

result = prf.optimize.minimize(goal, rlc_model, opt_freq, solver=prf.optimize.ScipyMinimize())
result.model.plot_s_db(freq, m=0, n=0)

Optional dependencies

Several additional dependencies are required/recommended for more advanced use-cases.

For Bayesian inference, you may need this fork of distreqx:

$ pip install git+https://github.com/gvcallen/distreqx

For BlackJAX’s Bayesian solvers:

$ pip install git+https://github.com/handley-lab/blackjax.git@v0.1.0-beta

For the PolyChord solver:

$ pip install git+https://github.com/PolyChord/PolyChordLite.git anesthetic mpi4py

Citation

If you have used ParamRF for academic work, please cite the original paper (https://doi.org/10.48550/arXiv.2510.15881): as:

G.V.C. Allen, D.I.L. de Villiers, (2025). ParamRF: A JAX-native Framework for Declarative Circuit Modelling. arXiv, https://doi.org/10.48550/arXiv.2510.15881.

or using the BibTeX:

@article{paramrf,
   doi = {10.48550/arXiv.2510.15881},
   url = {https://doi.org/10.48550/arXiv.2510.15881},
   year = {2025},
   month = {Oct},
   title = {ParamRF: A JAX-native Framework for Declarative Circuit Modelling},
   author = {Gary V. C. Allen and Dirk I. L. de Villiers},
   eprint = {2510.15881},
   archivePrefix = {arXiv},
   primaryClass = {cs.OH},
}

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

paramrf-0.17.2.tar.gz (4.8 MB view details)

Uploaded Source

Built Distribution

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

paramrf-0.17.2-py3-none-any.whl (141.5 kB view details)

Uploaded Python 3

File details

Details for the file paramrf-0.17.2.tar.gz.

File metadata

  • Download URL: paramrf-0.17.2.tar.gz
  • Upload date:
  • Size: 4.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for paramrf-0.17.2.tar.gz
Algorithm Hash digest
SHA256 0efcddd36a238c5071f71a922a93a897350d2c7e63e3c538e3ad922fd61511e2
MD5 13fdb534c0e9e2ef20ad7ad97388b5b4
BLAKE2b-256 44cc572fb07b5dc6c1e201f62c4ec5a6326ac82ede35668d2ed0e1742438fef7

See more details on using hashes here.

Provenance

The following attestation bundles were made for paramrf-0.17.2.tar.gz:

Publisher: publish.yml on gvcallen/paramrf

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

File details

Details for the file paramrf-0.17.2-py3-none-any.whl.

File metadata

  • Download URL: paramrf-0.17.2-py3-none-any.whl
  • Upload date:
  • Size: 141.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for paramrf-0.17.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7172aaf601522b6f17baee8e9aee2043e89821bd7eb6c3f7adafdab795ba1702
MD5 3c6ea061ff19919a82bd3aa38b0f00a2
BLAKE2b-256 4dec9911a40005dae28837a2e63e43e9cd1ec83f04deaabf97e6af0b700b8eac

See more details on using hashes here.

Provenance

The following attestation bundles were made for paramrf-0.17.2-py3-none-any.whl:

Publisher: publish.yml on gvcallen/paramrf

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