pyRFtk 2.0.2__tar.gz → 2.0.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyrftk-2.0.4/.gitignore +2 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/PKG-INFO +6 -5
- {pyrftk-2.0.2 → pyrftk-2.0.4}/README.md +4 -3
- pyrftk-2.0.4/logo/logo.pdf +0 -0
- pyrftk-2.0.4/logo/logo.svg +109 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/pyproject.toml +1 -1
- pyrftk-2.0.4/src/pyRFtk/.gitignore +2 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/ReadTSF.py +84 -23
- pyrftk-2.0.4/src/pyRFtk/WriteTSF.py +174 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/__init__.py +4 -1
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfObject.py +1 -0
- pyrftk-2.0.4/tests/WEST_TWA_7s_4_No_FS_protruding.s7p +3256 -0
- pyrftk-2.0.2/src/pyRFtk/.gitignore +0 -1
- {pyrftk-2.0.2 → pyrftk-2.0.4}/LICENCE +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/Makefile +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.buildinfo +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Arcs.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Deembedding.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Examples.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Installation.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Introduction.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Logging.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Touchstone.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Tutorials.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/backup.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/environment.pickle +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/index.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/modules.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/pyRFtk.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.nojekyll +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Arcs.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Deembedding.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Examples.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Installation.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Introduction.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Logging.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Touchstone.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Tutorials.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_downloads/b90e652aafe314ced71820d596828aed/Tomas-Ref_geo-R=200-Diel_eps=0500.s2p +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_downloads/bf8243189246eb0547daf197b1578bac/tomas_icrh_linear_2017-vacuum.s2p +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_images/RLC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_images/RLCSC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_images/SC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_images/SimpleCircuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_images/TomasCircuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Arcs.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Deembedding.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Examples.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Installation.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Introduction.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Logging.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Touchstone.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Tutorials.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/backup.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/index.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/modules.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/pyRFtk.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/alabaster.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/basic.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/classic.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/badge_only.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-bold-italic.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-bold.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-bold.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-normal-italic.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-normal.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-normal.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/theme.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/custom.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/doctools.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/documentation_options.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/file.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/groundwork.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/gw_logo.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/jquery.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/js/badge_only.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/js/html5shiv-printshiv.min.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/js/html5shiv.min.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/js/theme.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/language_data.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/minus.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/plus.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/pygments.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/searchtools.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/sidebar.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/small_groundwork.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/sphinx_highlight.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/backup.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/Deembedding.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/Examples.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/Installation.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/Introduction.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/TOMAS.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/Touchstone.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/Tutorials.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/backup.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/environment.pickle +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/index.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/modules.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/pyRFtk.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/usage.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/genindex.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/.buildinfo +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/.nojekyll +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/Deembedding.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/Examples.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/Installation.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/Introduction.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/TOMAS.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/Touchstone.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/Tutorials.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/RLC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/RLCSC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/SC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/SimpleCircuit.pdf +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/SimpleCircuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/TOMAS_ICRH_Antenna.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/TOMAS_ICRH_Circuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/TomasCircuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/Deembedding.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/Examples.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/Installation.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/Introduction.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/TOMAS.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/Touchstone.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/Tutorials.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/backup.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/index.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/modules.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/pyRFtk.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/usage.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/alabaster.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/basic.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/classic.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/custom.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/doctools.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/documentation_options.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/file.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/language_data.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/minus.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/plus.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/pygments.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/searchtools.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/sidebar.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/sphinx_highlight.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/backup.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/genindex.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/index.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/modules.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/objects.inv +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/py-modindex.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/pyRFtk.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/search.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/searchindex.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/usage.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/index.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/modules.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/objects.inv +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/py-modindex.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/pyRFtk.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/search.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/searchindex.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/make.bat +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Arcs.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Deembedding.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Drawings/SimpleCircuit.odg +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Examples.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Files/Tomas-Ref_geo-R=200-Diel_eps=0500.s2p +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Files/tomas_icrh_linear_2017-vacuum.s2p +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/RLC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/RLCSC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/SC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/SimpleCircuit.pdf +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/SimpleCircuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/TOMAS_ICRH_Antenna.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/TOMAS_ICRH_Circuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/TomasCircuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Installation.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Introduction.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Logging.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Touchstone.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Tutorials.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/backup.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/conf.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/index.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/modules.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/pyRFtk.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4/logo}/logo.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/rfCommon.log +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/ConvertGeneral.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/ReadDictData.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/S_from_VI.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/S_from_Y.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/S_from_Z.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/Y_from_S.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/Z_from_S.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/_check_3D_shape_.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/circuit.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/codebase.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/compareSs.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/config.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/findpath.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/getlines.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/maxfun.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/plotVSWs.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/printMatrices.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/resolveTLparams.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfArcObj.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfBase.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfCircuit.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfCoupler.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfGTL.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfRLC.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfTRL.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/str_dict.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/tictoc.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/whoami.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/tests/rfCommon.log +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/tests/routine.sh +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.4}/tests/tests.py +0 -0
pyrftk-2.0.4/.gitignore
ADDED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pyRFtk
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.4
|
|
4
4
|
Summary: Design tool for RF antennae networks
|
|
5
5
|
Project-URL: Homepage, https://lpp-erm-kms.github.io/pyrftk/
|
|
6
6
|
Author-email: Frederic Durodie <frederic.durodie@rma.ac.be>, Arthur Adriaens <arthur.adriaens@mil.be>
|
|
@@ -11,14 +11,15 @@ Requires-Python: >=3.8
|
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
12
|
|
|
13
13
|
# pyRFtk
|
|
14
|
-
](https://zenodo.org/doi/10.5281/zenodo.10391750)
|
|
15
|
+

|
|
15
16
|
## About
|
|
16
17
|
|
|
17
18
|
pyRFtk is a Python library able to build and analyse RF circuits, originally designed for ICRH antennae but now widely deployable.
|
|
18
19
|
you can:
|
|
19
20
|
- Incorporate touchstone files to create your own elements
|
|
20
|
-
- See the
|
|
21
|
-
- Compute
|
|
21
|
+
- See the currents throughout your circuit
|
|
22
|
+
- Compute S-matrices
|
|
22
23
|
- Detect Arcs
|
|
23
24
|
- Deembed systems
|
|
24
25
|
- ...
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# pyRFtk
|
|
2
|
-
](https://zenodo.org/doi/10.5281/zenodo.10391750)
|
|
3
|
+

|
|
3
4
|
## About
|
|
4
5
|
|
|
5
6
|
pyRFtk is a Python library able to build and analyse RF circuits, originally designed for ICRH antennae but now widely deployable.
|
|
6
7
|
you can:
|
|
7
8
|
- Incorporate touchstone files to create your own elements
|
|
8
|
-
- See the
|
|
9
|
-
- Compute
|
|
9
|
+
- See the currents throughout your circuit
|
|
10
|
+
- Compute S-matrices
|
|
10
11
|
- Detect Arcs
|
|
11
12
|
- Deembed systems
|
|
12
13
|
- ...
|
|
Binary file
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
3
|
+
|
|
4
|
+
<svg
|
|
5
|
+
version="1.1"
|
|
6
|
+
id="svg1"
|
|
7
|
+
width="853.33331"
|
|
8
|
+
height="429.33334"
|
|
9
|
+
viewBox="0 0 853.33331 429.33334"
|
|
10
|
+
sodipodi:docname="logo.pdf"
|
|
11
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
12
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
13
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
14
|
+
xmlns:svg="http://www.w3.org/2000/svg">
|
|
15
|
+
<defs
|
|
16
|
+
id="defs1" />
|
|
17
|
+
<sodipodi:namedview
|
|
18
|
+
id="namedview1"
|
|
19
|
+
pagecolor="#ffffff"
|
|
20
|
+
bordercolor="#000000"
|
|
21
|
+
borderopacity="0.25"
|
|
22
|
+
inkscape:showpageshadow="2"
|
|
23
|
+
inkscape:pageopacity="0.0"
|
|
24
|
+
inkscape:pagecheckerboard="0"
|
|
25
|
+
inkscape:deskcolor="#d1d1d1">
|
|
26
|
+
<inkscape:page
|
|
27
|
+
x="0"
|
|
28
|
+
y="0"
|
|
29
|
+
id="page1"
|
|
30
|
+
width="853.33331"
|
|
31
|
+
height="429.33334"
|
|
32
|
+
margin="0"
|
|
33
|
+
bleed="0" />
|
|
34
|
+
</sodipodi:namedview>
|
|
35
|
+
<g
|
|
36
|
+
id="g1"
|
|
37
|
+
inkscape:groupmode="layer"
|
|
38
|
+
inkscape:label="">
|
|
39
|
+
<path
|
|
40
|
+
id="path1"
|
|
41
|
+
d="m 96.414,77.684 c 4.492,-0.301 7.867,1.453 10.129,5.254 0.5,43.535 0.5,87.07 0,130.601 -0.043,5.02 -2.547,7.52 -7.504,7.508 -3.297,-0.149 -5.805,-1.649 -7.504,-4.504 -0.25,-6.754 -0.5,-13.512 -0.75,-20.266 -1.613,-1.457 -3.488,-1.832 -5.625,-1.125 -0.707,7.465 -4.707,10.719 -12.008,9.758 -1.875,-0.875 -3.25,-2.254 -4.125,-4.129 -0.125,-16.519 -0.5,-33.035 -1.125,-49.539 -2.093,-1.949 -4.222,-1.949 -6.379,0 -0.027,9.578 -0.527,19.086 -1.5,28.524 -2.808,2.82 -6.187,3.695 -10.128,2.625 -2.29,-1.539 -3.665,-3.664 -4.125,-6.379 -0.5,-17.766 -0.5,-35.528 0,-53.293 1.96,-4.996 5.585,-6.871 10.878,-5.629 3.204,1.965 4.829,4.84 4.875,8.633 2.25,3.004 4.504,3.004 6.754,0 0.25,-9.008 0.5,-18.016 0.75,-27.02 2.387,-4.305 6.012,-5.683 10.879,-4.129 1.813,1.246 3.188,2.871 4.125,4.879 0.25,27.27 0.5,54.543 0.75,81.813 2.004,2 4.004,2 6.004,0 0.25,-32.774 0.5,-65.551 0.75,-98.328 1.27,-2.145 2.899,-3.895 4.879,-5.254 z"
|
|
42
|
+
style="fill:#343434;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
|
43
|
+
transform="scale(1.3333333)" />
|
|
44
|
+
<path
|
|
45
|
+
id="path2"
|
|
46
|
+
d="m 119.672,77.684 c 4.492,-0.301 7.871,1.453 10.129,5.254 0.25,6.757 0.5,13.511 0.75,20.269 1.355,1.422 2.98,1.797 4.879,1.125 1.008,-2.652 2.132,-5.277 3.375,-7.883 5.269,-4.172 9.769,-3.422 13.504,2.254 0.25,16.262 0.5,32.524 0.75,48.785 1.566,2.762 3.57,3.012 6.003,0.75 0.25,-8.504 0.5,-17.011 0.75,-25.519 2.418,-5.887 6.547,-7.512 12.379,-4.879 0.965,1.062 1.84,2.187 2.625,3.379 0.504,18.765 0.504,37.531 0,56.293 -3.566,6.074 -8.066,6.828 -13.504,2.254 -0.96,-2.75 -2.085,-5.375 -3.374,-7.883 -1.899,-0.672 -3.524,-0.297 -4.879,1.125 -0.25,9.258 -0.5,18.515 -0.75,27.773 -3.504,4.899 -7.883,5.774 -13.129,2.625 -1.024,-1.457 -1.649,-3.086 -1.875,-4.879 -0.25,-27.019 -0.5,-54.039 -0.75,-81.062 -2.004,-2 -4.004,-2 -6.004,0 -0.25,32.277 -0.5,64.551 -0.75,96.828 -1.344,5.824 -4.973,7.949 -10.879,6.379 -1.875,-0.875 -3.25,-2.254 -4.129,-4.129 -0.5,-44.535 -0.5,-89.07 0,-133.605 1.273,-2.145 2.898,-3.895 4.879,-5.254 z"
|
|
47
|
+
style="fill:#ff7427;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
|
48
|
+
transform="scale(1.3333333)" />
|
|
49
|
+
<path
|
|
50
|
+
id="path3"
|
|
51
|
+
d="m 319.816,97.902 c -3.441,0 -6.878,0.016 -10.32,0.047 v 72.809 c 6.059,0.472 11.809,-0.028 17.258,-1.5 V 136.98 c 1.676,-0.222 3.176,0.028 4.5,0.75 8.398,10.903 16.902,21.786 25.512,32.653 6.5,0.5 13.004,0.5 19.507,0 0.715,-0.539 0.836,-1.164 0.375,-1.879 -6.152,-7.426 -12.027,-15.059 -17.632,-22.891 -5.711,-0.843 -11.461,-1.593 -17.258,-2.254 -3.02,-0.91 -5.524,-2.535 -7.504,-4.875 -0.406,-0.05 -0.656,-0.296 -0.75,-0.754 3.215,-0.742 6.465,-0.996 9.754,-0.75 3.801,-0.3 7.551,-0.925 11.254,-1.875 6.449,-2.199 10.574,-6.574 12.383,-13.136 2.332,-13.231 -3.047,-21.114 -16.133,-23.641 -10.313,-0.285 -20.629,-0.426 -30.946,-0.426 z m 13.797,0.27 c 10.016,0.14 14.731,6.199 14.149,18.168 1.297,14.84 -5.457,21.469 -20.258,19.89 V 98.703 c 2.219,-0.379 4.254,-0.558 6.109,-0.531 z"
|
|
52
|
+
style="fill:#353535;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
|
53
|
+
transform="scale(1.3333333)" />
|
|
54
|
+
<path
|
|
55
|
+
id="path4"
|
|
56
|
+
d="m 419.039,133.227 c 5.023,-0.247 10.027,0.007 15.004,0.753 -8.234,0.75 -16.488,1 -24.758,0.75 -1.25,0 -2.5,0 -3.75,0 0,12.008 0,24.02 0,36.028 -5.754,0 -11.508,0 -17.258,0 0,-24.27 0,-48.539 0,-72.809 17.758,-0.125 35.516,0 53.27,0.379 0.859,5.57 0.984,11.199 0.375,16.887 -0.602,0.976 -1.477,1.476 -2.625,1.5 -1.957,-0.477 -3.703,-1.352 -5.254,-2.625 -5.609,-5.18 -11.363,-10.184 -17.254,-15.012 -3.746,-0.375 -7.496,-0.5 -11.254,-0.375 0,11.508 0,23.016 0,34.524 4.5,0 9,0 13.504,0 z"
|
|
57
|
+
style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
|
58
|
+
transform="scale(1.3333333)" />
|
|
59
|
+
<path
|
|
60
|
+
id="path5"
|
|
61
|
+
d="m 199.395,112.914 c -2.567,0 -5.129,0.016 -7.696,0.047 -0.742,19.211 -0.992,38.477 -0.75,57.797 5.946,0.234 11.821,-0.012 17.633,-0.75 0.375,-6.5 0.5,-13.008 0.375,-19.516 5.527,0.028 11.031,-0.347 16.508,-1.125 5.539,-0.824 9.918,-3.453 13.129,-7.883 5.754,-15.886 0.379,-25.269 -16.133,-28.144 -7.688,-0.285 -15.375,-0.426 -23.066,-0.426 z m 11.667,1.461 c 4.696,0.133 7.872,2.664 9.524,7.594 1.703,7.648 1.203,15.152 -1.5,22.519 -2.422,3.649 -5.801,5.153 -10.129,4.504 v -34.527 c 0.734,-0.078 1.434,-0.11 2.105,-0.09 z"
|
|
62
|
+
style="fill:#353535;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
|
63
|
+
transform="scale(1.3333333)" />
|
|
64
|
+
<path
|
|
65
|
+
id="path6"
|
|
66
|
+
d="m 244.969,112.961 c 6.297,-0.227 12.551,0.023 18.758,0.754 5.628,10.258 11.253,20.515 16.882,30.773 2.766,-4.039 5.149,-8.293 7.129,-12.761 -2.613,-5.227 -5.242,-10.481 -7.879,-15.762 -0.367,-0.969 -0.492,-1.969 -0.375,-3.004 6.254,0 12.504,0 18.758,0 0.121,1.277 -0.004,2.527 -0.375,3.754 -5.754,10.508 -11.504,21.015 -17.258,31.523 -0.25,7.258 -0.5,14.512 -0.75,21.77 -5.754,1 -11.504,1 -17.257,0 -0.25,-7.758 -0.5,-15.512 -0.75,-23.27 -6.164,-10.465 -12.043,-21.097 -17.633,-31.898 0.187,-0.676 0.437,-1.301 0.75,-1.879 z"
|
|
67
|
+
style="fill:#353535;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
|
68
|
+
transform="scale(1.3333333)" />
|
|
69
|
+
<path
|
|
70
|
+
id="path7"
|
|
71
|
+
d="m 447.551,112.961 c 17.004,-0.125 34.015,0 51.019,0.379 0.739,7.566 0.989,15.199 0.75,22.89 -2.117,0.313 -3.742,-0.437 -4.879,-2.25 -3.953,-6.71 -8.203,-13.214 -12.753,-19.515 -0.25,18.512 -0.5,37.027 -0.75,55.543 -5.063,0.859 -10.196,0.984 -15.379,0.375 -0.621,-18.586 -1,-37.223 -1.129,-55.918 -4.793,6.551 -9.293,13.305 -13.504,20.265 -1.301,1.579 -2.801,1.829 -4.5,0.75 -0.5,-7.003 -0.5,-14.011 0,-21.015 0.539,-0.406 0.914,-0.91 1.125,-1.504 z"
|
|
72
|
+
style="fill:#363636;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
|
73
|
+
transform="scale(1.3333333)" />
|
|
74
|
+
<path
|
|
75
|
+
id="path8"
|
|
76
|
+
d="m 511.324,112.961 c 5.446,-0.231 10.821,0.019 16.133,0.754 0.621,18.941 0.496,37.832 -0.375,56.668 -5.687,0.609 -11.316,0.484 -16.883,-0.375 -0.5,-18.516 -0.5,-37.031 0,-55.543 0.539,-0.406 0.914,-0.91 1.125,-1.504 z"
|
|
77
|
+
style="fill:#353535;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
|
78
|
+
transform="scale(1.3333333)" />
|
|
79
|
+
<path
|
|
80
|
+
id="path9"
|
|
81
|
+
d="m 542.836,112.961 c 8.004,0 16.008,0 24.012,0 0.117,1.035 -0.008,2.035 -0.375,3.004 -6.379,7.758 -12.758,15.512 -19.133,23.269 6.98,9.36 14.109,18.618 21.383,27.77 0.757,1.148 1.132,2.398 1.125,3.754 -7.082,0.332 -14.086,-0.043 -21.008,-1.125 -5.844,-8.098 -11.969,-15.981 -18.383,-23.645 -0.363,-0.711 -0.488,-1.461 -0.375,-2.25 4.523,0.403 8.777,-0.476 12.754,-2.629 3.781,-3.527 7.277,-7.277 10.504,-11.257 -3.535,-4.946 -7.16,-9.825 -10.879,-14.637 -0.352,-0.809 -0.227,-1.563 0.375,-2.254 z"
|
|
82
|
+
style="fill:#353535;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
|
83
|
+
transform="scale(1.3333333)" />
|
|
84
|
+
<path
|
|
85
|
+
id="path10"
|
|
86
|
+
d="m 201.453,191.773 c 17.258,0 34.516,0 51.77,0 0,0.75 0,1.5 0,2.254 -17.254,0 -34.512,0 -51.77,0 0,-0.754 0,-1.504 0,-2.254 z"
|
|
87
|
+
style="fill:#3a3a3a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
|
88
|
+
transform="scale(1.3333333)" />
|
|
89
|
+
<path
|
|
90
|
+
id="path11"
|
|
91
|
+
d="m 507.574,191.773 c 17.254,0 34.512,0 51.77,0 0,0.75 0,1.5 0,2.254 -17.258,0 -34.516,0 -51.77,0 0,-0.754 0,-1.504 0,-2.254 z"
|
|
92
|
+
style="fill:#3a3a3a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
|
93
|
+
transform="scale(1.3333333)" />
|
|
94
|
+
<text
|
|
95
|
+
id="text11"
|
|
96
|
+
xml:space="preserve"
|
|
97
|
+
transform="matrix(1.3333333,0,0,1.3338481,353.27835,264.36785)"><tspan
|
|
98
|
+
style="font-variant:normal;font-weight:normal;font-size:20.0078px;font-family:'Hack Nerd Font';writing-mode:lr-tb;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
|
99
|
+
x="0 12.205783 24.431574 36.637356 48.84314 61.08894 73.294724 85.500504 97.726295 109.93208 122.13786 134.36365 146.56944 158.79523 171.02103 183.22681 195.43259 207.65837 219.86417"
|
|
100
|
+
y="0"
|
|
101
|
+
sodipodi:role="line"
|
|
102
|
+
id="tspan11">RF circuit modeling</tspan></text>
|
|
103
|
+
<path
|
|
104
|
+
id="path12"
|
|
105
|
+
d="m 403.902,132.238 h 31.227 v 2.977 h -31.227 z"
|
|
106
|
+
style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
|
107
|
+
transform="scale(1.3333333)" />
|
|
108
|
+
</g>
|
|
109
|
+
</svg>
|
|
@@ -3,7 +3,7 @@ requires = ["hatchling","numpy","matplotlib","logging"]
|
|
|
3
3
|
build-backend = "hatchling.build"
|
|
4
4
|
[project]
|
|
5
5
|
name = "pyRFtk"
|
|
6
|
-
version = "2.0.
|
|
6
|
+
version = "2.0.4"
|
|
7
7
|
authors = [
|
|
8
8
|
{ name="Frederic Durodie", email="frederic.durodie@rma.ac.be" },
|
|
9
9
|
{ name="Arthur Adriaens", email="arthur.adriaens@mil.be" },
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
__updated__ = "
|
|
1
|
+
__updated__ = "2024-12-20 14:21:08"
|
|
2
2
|
|
|
3
3
|
import numpy as np
|
|
4
4
|
import re
|
|
5
|
+
import os
|
|
6
|
+
from warnings import warn
|
|
7
|
+
_warn_skips = (os.path.dirname(__file__),)
|
|
8
|
+
|
|
5
9
|
from .getlines import getlines
|
|
6
10
|
from .config import tLogger, logit, ident
|
|
7
11
|
from .config import fscale
|
|
@@ -35,7 +39,7 @@ def ReadTSF(src, **kwargs):
|
|
|
35
39
|
|
|
36
40
|
#TODO: implement ports, funit
|
|
37
41
|
|
|
38
|
-
TZbase = kwargs.pop('Zbase',
|
|
42
|
+
TZbase = kwargs.pop('Zbase', None)
|
|
39
43
|
Tfunit = kwargs.get('funit', 'GHz')
|
|
40
44
|
Tports = kwargs.get('ports', 'port-%03d')
|
|
41
45
|
Tcomments = kwargs.get('comments',[])
|
|
@@ -114,7 +118,26 @@ def ReadTSF(src, **kwargs):
|
|
|
114
118
|
elif kw in ['HZ','KHZ','MHZ','GHZ']:
|
|
115
119
|
funit = kw
|
|
116
120
|
elif kw == 'R':
|
|
117
|
-
|
|
121
|
+
Zlist = []
|
|
122
|
+
while len(items):
|
|
123
|
+
try:
|
|
124
|
+
item = items[-1]
|
|
125
|
+
Zlist.append(float(item))
|
|
126
|
+
except ValueError:
|
|
127
|
+
break
|
|
128
|
+
items.pop()
|
|
129
|
+
|
|
130
|
+
if (NZ := len(Zlist)) == 1:
|
|
131
|
+
Zbase = Zlist[0]
|
|
132
|
+
|
|
133
|
+
elif NZ > 1:
|
|
134
|
+
debug and tLogger.debug(ident(f'Zbase [{len(Zlist)}] {", ".join([str(z) for z in Zlist])}'))
|
|
135
|
+
Zbase = Zlist
|
|
136
|
+
|
|
137
|
+
else:
|
|
138
|
+
# this should be flagged as an error in the touchstone
|
|
139
|
+
Zbase = 50. if TZbase is None else TZbase
|
|
140
|
+
debug and tLogger.debug(ident(f'Zbase not specified in R [ERROR]: set to {Zbase}'))
|
|
118
141
|
else:
|
|
119
142
|
raise ValueError('Unrecognized format specification: %r' % kw)
|
|
120
143
|
|
|
@@ -164,7 +187,7 @@ def ReadTSF(src, **kwargs):
|
|
|
164
187
|
pvars = {}
|
|
165
188
|
GENERAL_MIXED = False
|
|
166
189
|
source = re.findall(
|
|
167
|
-
'(?i)! Touchstone file exported from HFSS (\d{4}\.\d+\.\d+)',
|
|
190
|
+
r'(?i)! Touchstone file exported from HFSS (\d{4}\.\d+\.\d+)',
|
|
168
191
|
comments[0])
|
|
169
192
|
debug and tLogger.debug(ident(f'source = {source}'))
|
|
170
193
|
|
|
@@ -190,7 +213,7 @@ def ReadTSF(src, **kwargs):
|
|
|
190
213
|
lineno += 1
|
|
191
214
|
aline = comments[lineno]
|
|
192
215
|
while aline.strip() != '!':
|
|
193
|
-
varline = re.findall('!\s*([A-Za-z0-9_]+)\s*=\s*(.+)',
|
|
216
|
+
varline = re.findall(r'!\s*([\$]?[A-Za-z0-9_]+)\s*=\s*(.+)',
|
|
194
217
|
aline)
|
|
195
218
|
if varline:
|
|
196
219
|
pvars[varline[0][0]] = varline[0][1]
|
|
@@ -216,8 +239,8 @@ def ReadTSF(src, **kwargs):
|
|
|
216
239
|
|
|
217
240
|
re_compile = True # check if compiling regexes is faster ... not really
|
|
218
241
|
if re_compile:
|
|
219
|
-
reGline = re.compile('(?i)\s*(?:Gamma)\s+!?(.+)')
|
|
220
|
-
reZline = re.compile('(?i)\s*(?:Port Impedance)(.+)')
|
|
242
|
+
reGline = re.compile(r'(?i)\s*(?:Gamma)\s+!?(.+)')
|
|
243
|
+
reZline = re.compile(r'(?i)\s*(?:Port Impedance)(.+)')
|
|
221
244
|
|
|
222
245
|
for aline in comments[got_marker:]:
|
|
223
246
|
# check for gamma or port impedance lines
|
|
@@ -233,8 +256,8 @@ def ReadTSF(src, **kwargs):
|
|
|
233
256
|
Gline = reGline.search(rest)
|
|
234
257
|
Zline = reZline.search(rest)
|
|
235
258
|
else:
|
|
236
|
-
Gline = re.findall('(?i)\s*(Gamma)\s+!?(.+)',rest)
|
|
237
|
-
Zline = re.findall('(?i)\s*(Port Impedance)(.+)',rest)
|
|
259
|
+
Gline = re.findall(r'(?i)\s*(Gamma)\s+!?(.+)',rest)
|
|
260
|
+
Zline = re.findall(r'(?i)\s*(Port Impedance)(.+)',rest)
|
|
238
261
|
|
|
239
262
|
|
|
240
263
|
if Gline or (lastline == 'gamma' and not Zline):
|
|
@@ -320,27 +343,65 @@ def ReadTSF(src, **kwargs):
|
|
|
320
343
|
Ss = 10**(Ss.real/20.) * np.exp(1j * Ss.imag * np.pi / 180.)
|
|
321
344
|
else: # datafmt == 'RI':
|
|
322
345
|
pass
|
|
346
|
+
|
|
347
|
+
## do some checking
|
|
348
|
+
if nZcs := Zcs.shape[1]:
|
|
349
|
+
# Zcs (and probably gammas) were present in the file
|
|
350
|
+
if Zbase is not None:
|
|
351
|
+
# there was also a R ... in the format
|
|
352
|
+
if (nZbase := len(Zbase) if hasattr(Zbase, '__iter__') else 1) != nZcs :
|
|
353
|
+
warn(f'\nInconsistent length of the Zcs ({nZcs}) comments and the '
|
|
354
|
+
f'format supplied reference impedance R ({nZbase})',
|
|
355
|
+
stacklevel=4)
|
|
356
|
+
else:
|
|
357
|
+
# numbers match ... but do the values
|
|
358
|
+
if nZbase == 1:
|
|
359
|
+
errfs = np.max(np.abs([(Zbase - Zcs_k)/Zbase for Zcs_k in Zcs[:,0]]))
|
|
360
|
+
else:
|
|
361
|
+
errfs = np.max(np.abs([
|
|
362
|
+
[(Zbase_l - Zcs_kl)/Zbase_l for Zbase_l, Zcs_kl in zip(Zbase, Zcs_k)]
|
|
363
|
+
for Zcs_k in Zcs
|
|
364
|
+
]))
|
|
365
|
+
|
|
366
|
+
if (tol := 1e-3) < errfs:
|
|
367
|
+
warn(
|
|
368
|
+
f'\nInconsistent values for the reference impedances from Zcs comments'
|
|
369
|
+
f' and the one supplied in the format parameter R (rel. err. = {errfs:0.2g} > {tol:0.2g})',
|
|
370
|
+
stacklevel=4)
|
|
371
|
+
|
|
372
|
+
if nZbase == 1 and nZcs != 1:
|
|
373
|
+
err = []
|
|
374
|
+
|
|
375
|
+
|
|
323
376
|
|
|
324
377
|
# if the data type is Z or Y we need to convert to S
|
|
378
|
+
|
|
379
|
+
#FIXME: if TZbase was given then Zbase can be ignored
|
|
380
|
+
Zbase = 50. if datatype in 'ZY' and Zbase is None else Zbase
|
|
325
381
|
if datatype == 'Z':
|
|
326
|
-
Ss = S_from_Z(Ss, Zbase if Zbase else TZbase)
|
|
382
|
+
# Ss = S_from_Z(Ss, Zbase if Zbase else TZbase)
|
|
383
|
+
Ss = S_from_Z(Ss, TZbase if TZbase else Zbase)
|
|
327
384
|
|
|
328
385
|
elif datatype == 'Y':
|
|
329
|
-
Ss = S_from_Y(Ss, Zbase if Zbase else TZbase)
|
|
330
|
-
|
|
386
|
+
# Ss = S_from_Y(Ss, Zbase if Zbase else TZbase)
|
|
387
|
+
Ss = S_from_Y(Ss, TZbase if TZbase else Zbase)
|
|
388
|
+
|
|
331
389
|
else: # datatype == 'S':
|
|
332
390
|
|
|
333
|
-
if
|
|
334
|
-
if
|
|
335
|
-
|
|
391
|
+
if nZcs: # prefer the Zcs data over the format line R data
|
|
392
|
+
Ss = ConvertGeneral(TZbase if TZbase else 50., Ss, Zcs, 'P', 'V')
|
|
393
|
+
|
|
394
|
+
elif Zbase is not None and (nZbase == 1 or nZbase == Ss.shape[1]):
|
|
395
|
+
Ss = ConvertGeneral(TZbase if TZbase else 50., Ss, Zbase, 'P', 'V')
|
|
336
396
|
|
|
337
|
-
|
|
338
|
-
if
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
397
|
+
elif Zbase is None: # No Zcs and Zbase is None:
|
|
398
|
+
Ss = ConvertGeneral(TZbase if TZbase else 50., Ss, Zcs, 'P', 'V')
|
|
399
|
+
|
|
400
|
+
else:
|
|
401
|
+
logit['ERROR'] and tLogger.error(f'len(Zcs)[{len(Zcs)}] != N[{N}]')
|
|
402
|
+
logit['ERROR'] and tLogger.error(f'Zcs={Zcs}')
|
|
403
|
+
|
|
404
|
+
|
|
344
405
|
# set the portnames
|
|
345
406
|
|
|
346
407
|
if 'ports' in kwargs:
|
|
@@ -387,7 +448,7 @@ def ReadTSF(src, **kwargs):
|
|
|
387
448
|
"markers" : markers,
|
|
388
449
|
"Zc" : Zcs,
|
|
389
450
|
"Gm" : Gms,
|
|
390
|
-
"variables" :
|
|
451
|
+
"variables" : pvars,
|
|
391
452
|
"datafmt" : datafmt,
|
|
392
453
|
}
|
|
393
454
|
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
__updated__ = "2024-12-20 14:21:10"
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
import re
|
|
5
|
+
import time
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
#===============================================================================
|
|
10
|
+
#
|
|
11
|
+
# W r i t e T S F
|
|
12
|
+
#
|
|
13
|
+
#===============================================================================
|
|
14
|
+
|
|
15
|
+
def WriteTSF(object, path2tsf=None,
|
|
16
|
+
fs=[],
|
|
17
|
+
tsf_format='MHZ S DB R 50',
|
|
18
|
+
num_format=None,
|
|
19
|
+
comments = ''):
|
|
20
|
+
|
|
21
|
+
"""WriteTSF:
|
|
22
|
+
|
|
23
|
+
object : a pyFtk object (rfCircuit, fObject, rfTRL, ...)
|
|
24
|
+
path2tsf : path to file: if it is None or an empty string the TSF is
|
|
25
|
+
returned as a string
|
|
26
|
+
tsf_format : the touchstone version 1.1 string
|
|
27
|
+
num_format : tuple for resp. the freq, reat and imag number format
|
|
28
|
+
comments : multi-line string
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
note (I believe) the touchstone specification 1.1 transposes the
|
|
32
|
+
the coefficients for .s2p (2-ports): this is not implemented here
|
|
33
|
+
as it is (apparently) not done in ReadTSF.
|
|
34
|
+
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
s = '! TouchStone file (pyRFtk.WriteTSF version %s)\n' % __updated__
|
|
38
|
+
s += '! Date : %s \n\n' % time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
|
|
39
|
+
|
|
40
|
+
scomments = comments.split('\n')
|
|
41
|
+
if len(scomments) > 0 :
|
|
42
|
+
for line in scomments :
|
|
43
|
+
s += '! %s\n' % line
|
|
44
|
+
|
|
45
|
+
s += '\n# %s \n\n' % tsf_format
|
|
46
|
+
|
|
47
|
+
fscale = {'HZ': 1e0, 'KHZ':1e3,'MHZ':1e6, 'GHZ':1e9, 'THZ':1e12}[
|
|
48
|
+
re.findall('^.*?([KMG]?HZ).*$',tsf_format.upper())[0]]
|
|
49
|
+
|
|
50
|
+
try:
|
|
51
|
+
zref = float(
|
|
52
|
+
re.findall(
|
|
53
|
+
r'^.*?R\s*([-+]?(?:\d*[\.])?\d+(?:[eE][-+]?\d+)?).*?$',
|
|
54
|
+
tsf_format
|
|
55
|
+
)[0]
|
|
56
|
+
)
|
|
57
|
+
except:
|
|
58
|
+
zref = 50.0
|
|
59
|
+
|
|
60
|
+
fmt = re.findall('(RI|MA|DB)',tsf_format.upper())
|
|
61
|
+
if len(fmt) == 0:
|
|
62
|
+
fmt = 'DB' # default
|
|
63
|
+
elif len(fmt) == 1:
|
|
64
|
+
fmt = fmt[0]
|
|
65
|
+
else:
|
|
66
|
+
raise ValueError(
|
|
67
|
+
'WriteTSF: one one of DB, RI or MA allowed in format string'
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
try:
|
|
71
|
+
if len(object.ports) > 0 :
|
|
72
|
+
s += '!PORTS ' + ', '.join(object.ports) + '\n\n'
|
|
73
|
+
except AttributeError:
|
|
74
|
+
pass
|
|
75
|
+
|
|
76
|
+
if len(fs) == 0:
|
|
77
|
+
|
|
78
|
+
# try an find a way to a list of meaning full frequencies
|
|
79
|
+
try:
|
|
80
|
+
if len(object.fs) > 0:
|
|
81
|
+
fs = object.fs
|
|
82
|
+
except AttributeError:
|
|
83
|
+
pass
|
|
84
|
+
|
|
85
|
+
if len(fs) == 0:
|
|
86
|
+
raise ValueError(
|
|
87
|
+
'could not find list of frequencies in object and no list was supplied'
|
|
88
|
+
)
|
|
89
|
+
nports = len(object)
|
|
90
|
+
|
|
91
|
+
if num_format is None:
|
|
92
|
+
if fmt in ['DB','MA']:
|
|
93
|
+
num_format = ('9.5f', '15.12f', '+8.4f')
|
|
94
|
+
else:
|
|
95
|
+
num_format = ('8.4f', '10.7f', '10.7f')
|
|
96
|
+
|
|
97
|
+
tnumfmt = f'%{num_format[1]} %{num_format[2]} '
|
|
98
|
+
|
|
99
|
+
for k,fk in enumerate(fs):
|
|
100
|
+
s += (f'%{num_format[0]}' % (fk / fscale)) + ' '
|
|
101
|
+
d = object.getS(fk, Zbase=zref)
|
|
102
|
+
for kr in range(nports):
|
|
103
|
+
for kc in range(nports):
|
|
104
|
+
dij = d[kr,kc]
|
|
105
|
+
if fmt == 'RI':
|
|
106
|
+
s += tnumfmt % (np.real(dij),np.imag(dij))
|
|
107
|
+
|
|
108
|
+
elif fmt == 'DB':
|
|
109
|
+
s += tnumfmt% (20.*np.log10(np.abs(dij)),
|
|
110
|
+
np.angle(dij,1))
|
|
111
|
+
|
|
112
|
+
else: # can only be MA
|
|
113
|
+
s += tnumfmt % (np.abs(dij),np.angle(dij,1))
|
|
114
|
+
|
|
115
|
+
if (kc % 4 == 3) and (kc is not nports-1):
|
|
116
|
+
if kc == 3:
|
|
117
|
+
s += ' ! row %d' % (kr+1)
|
|
118
|
+
s += '\n'+' '*10
|
|
119
|
+
|
|
120
|
+
if nports > 2:
|
|
121
|
+
s += '\n'
|
|
122
|
+
if kr != nports-1:
|
|
123
|
+
s += ' '*9
|
|
124
|
+
|
|
125
|
+
s += '\n'
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
if path2tsf:
|
|
129
|
+
with open(path2tsf,'w') as f:
|
|
130
|
+
f.write(s)
|
|
131
|
+
|
|
132
|
+
else:
|
|
133
|
+
return s
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
#===============================================================================
|
|
137
|
+
#
|
|
138
|
+
# _ _ m a i n _ _
|
|
139
|
+
#
|
|
140
|
+
#===============================================================================
|
|
141
|
+
|
|
142
|
+
if __name__ == '__main__':
|
|
143
|
+
|
|
144
|
+
import os
|
|
145
|
+
import matplotlib.pyplot as pl
|
|
146
|
+
|
|
147
|
+
import sys
|
|
148
|
+
sys.path.insert(0, '/home/frederic/git/pyrftk/src/pyRFtk')
|
|
149
|
+
|
|
150
|
+
from pyRFtk import rfObject
|
|
151
|
+
|
|
152
|
+
path2data = '/home/frederic/git/twa-on-west/data/high'
|
|
153
|
+
|
|
154
|
+
fs = np.load(os.path.join(path2data,'f_lst.npy'))
|
|
155
|
+
R = np.load(os.path.join(path2data,'S22_TWA.npy'))
|
|
156
|
+
|
|
157
|
+
Q = rfObject(Zbase=30)
|
|
158
|
+
Q.setS(f=fs, S=R, Portnames=['in','out'])
|
|
159
|
+
|
|
160
|
+
WriteTSF(Q, tsf := os.path.join(path2data,f'test.s{len(Q)}p'),fs=np.linspace(45e6,65e6,201))
|
|
161
|
+
|
|
162
|
+
T = rfObject(touchstone=tsf)
|
|
163
|
+
print(T)
|
|
164
|
+
|
|
165
|
+
Sq = Q.getS(fs,Zbase=30)
|
|
166
|
+
St = T.getS(fs,Zbase=30)
|
|
167
|
+
print(St.shape)
|
|
168
|
+
for i in range(len(Q)):
|
|
169
|
+
for j in range(len(Q)):
|
|
170
|
+
pl.plot(fs, np.abs(Sq[:,i,j]-St[:,i,j]), label=f'Sq$_{{{i}{j}}}$')
|
|
171
|
+
|
|
172
|
+
pl.show()
|
|
173
|
+
print(Q)
|
|
174
|
+
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
__updated__ = "
|
|
1
|
+
__updated__ = "2024-12-20 14:11:19"
|
|
2
|
+
|
|
3
|
+
print('\n*** using local copy of pyRFtk ***\n')
|
|
2
4
|
|
|
3
5
|
from .config import tLogger, setLogLevel, logit, ident, _newID, logident
|
|
4
6
|
from .rfBase import rfBase
|
|
@@ -19,6 +21,7 @@ from .Y_from_S import Y_from_S
|
|
|
19
21
|
|
|
20
22
|
from .ConvertGeneral import ConvertGeneral
|
|
21
23
|
from .ReadTSF import ReadTSF
|
|
24
|
+
from .WriteTSF import WriteTSF
|
|
22
25
|
from .maxfun import maxfun
|
|
23
26
|
from .resolveTLparams import TLresolver
|
|
24
27
|
from .plotVSWs import plotVSWs, scaleVSW, strVSW
|
|
@@ -573,6 +573,7 @@ class rfObject():
|
|
|
573
573
|
self.shape = r['shape']
|
|
574
574
|
self.Zcs = np.array(r['Zc'])
|
|
575
575
|
self.Gms = np.array(r['Gm'])
|
|
576
|
+
self.variables = r['variables']
|
|
576
577
|
self.xpos = [0.] * len(self)
|
|
577
578
|
|
|
578
579
|
#===========================================================================
|