pyRFtk 2.0.2__tar.gz → 2.0.3__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.3/.gitignore +2 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/PKG-INFO +3 -2
- {pyrftk-2.0.2 → pyrftk-2.0.3}/README.md +1 -0
- pyrftk-2.0.3/logo.pdf +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/pyproject.toml +1 -1
- pyrftk-2.0.3/src/pyRFtk/.gitignore +2 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/ReadTSF.py +39 -10
- pyrftk-2.0.3/src/pyRFtk/WriteTSF.py +174 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/__init__.py +4 -1
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/config.py +1 -1
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/rfObject.py +1 -0
- pyrftk-2.0.3/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.3}/LICENCE +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/Makefile +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.buildinfo +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/Arcs.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/Deembedding.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/Examples.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/Installation.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/Introduction.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/Logging.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/Touchstone.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/Tutorials.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/backup.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/environment.pickle +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/index.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/modules.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.doctrees/pyRFtk.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/.nojekyll +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/Arcs.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/Deembedding.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/Examples.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/Installation.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/Introduction.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/Logging.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/Touchstone.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/Tutorials.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_downloads/b90e652aafe314ced71820d596828aed/Tomas-Ref_geo-R=200-Diel_eps=0500.s2p +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_downloads/bf8243189246eb0547daf197b1578bac/tomas_icrh_linear_2017-vacuum.s2p +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_images/RLC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_images/RLCSC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_images/SC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_images/SimpleCircuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_images/TomasCircuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_sources/Arcs.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_sources/Deembedding.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_sources/Examples.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_sources/Installation.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_sources/Introduction.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_sources/Logging.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_sources/Touchstone.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_sources/Tutorials.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_sources/backup.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_sources/index.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_sources/modules.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_sources/pyRFtk.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/alabaster.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/basic.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/classic.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/badge_only.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/lato-bold-italic.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/lato-bold.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/lato-bold.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/lato-normal-italic.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/lato-normal.woff +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/fonts/lato-normal.woff2 +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/css/theme.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/custom.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/doctools.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/documentation_options.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/file.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/groundwork.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/gw_logo.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/jquery.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/js/badge_only.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/js/html5shiv-printshiv.min.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/js/html5shiv.min.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/js/theme.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/language_data.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/minus.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/plus.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/pygments.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/searchtools.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/sidebar.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/small_groundwork.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/_static/sphinx_highlight.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/backup.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/Deembedding.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/Examples.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/Installation.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/Introduction.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/TOMAS.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/Touchstone.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/Tutorials.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/backup.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/environment.pickle +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/index.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/modules.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/pyRFtk.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/doctrees/usage.doctree +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/genindex.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/.buildinfo +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/.nojekyll +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/Deembedding.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/Examples.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/Installation.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/Introduction.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/TOMAS.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/Touchstone.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/Tutorials.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_images/RLC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_images/RLCSC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_images/SC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_images/SimpleCircuit.pdf +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_images/SimpleCircuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_images/TOMAS_ICRH_Antenna.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_images/TOMAS_ICRH_Circuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_images/TomasCircuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_sources/Deembedding.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_sources/Examples.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_sources/Installation.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_sources/Introduction.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_sources/TOMAS.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_sources/Touchstone.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_sources/Tutorials.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_sources/backup.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_sources/index.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_sources/modules.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_sources/pyRFtk.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_sources/usage.rst.txt +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/alabaster.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/basic.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/classic.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/custom.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/doctools.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/documentation_options.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/file.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/language_data.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/minus.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/plus.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/pygments.css +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/searchtools.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/sidebar.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/_static/sphinx_highlight.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/backup.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/genindex.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/index.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/modules.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/objects.inv +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/py-modindex.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/pyRFtk.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/search.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/searchindex.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/html/usage.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/index.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/modules.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/objects.inv +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/py-modindex.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/pyRFtk.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/search.html +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/build/searchindex.js +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/make.bat +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Arcs.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Deembedding.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Drawings/SimpleCircuit.odg +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Examples.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Files/Tomas-Ref_geo-R=200-Diel_eps=0500.s2p +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Files/tomas_icrh_linear_2017-vacuum.s2p +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Images/RLC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Images/RLCSC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Images/SC.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Images/SimpleCircuit.pdf +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Images/SimpleCircuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Images/TOMAS_ICRH_Antenna.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Images/TOMAS_ICRH_Circuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Images/TomasCircuit.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Installation.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Introduction.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Logging.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Touchstone.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/Tutorials.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/backup.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/conf.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/index.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/modules.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/docs/source/pyRFtk.rst +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/logo.png +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/rfCommon.log +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/ConvertGeneral.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/ReadDictData.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/S_from_VI.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/S_from_Y.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/S_from_Z.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/Y_from_S.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/Z_from_S.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/_check_3D_shape_.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/circuit.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/codebase.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/compareSs.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/findpath.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/getlines.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/maxfun.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/plotVSWs.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/printMatrices.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/resolveTLparams.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/rfArcObj.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/rfBase.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/rfCircuit.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/rfCoupler.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/rfGTL.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/rfRLC.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/rfTRL.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/str_dict.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/tictoc.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/src/pyRFtk/whoami.py +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/tests/rfCommon.log +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/tests/routine.sh +0 -0
- {pyrftk-2.0.2 → pyrftk-2.0.3}/tests/tests.py +0 -0
pyrftk-2.0.3/.gitignore
ADDED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: pyRFtk
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.3
|
|
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,6 +11,7 @@ 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)
|
|
14
15
|

|
|
15
16
|
## About
|
|
16
17
|
|
pyrftk-2.0.3/logo.pdf
ADDED
|
Binary file
|
|
@@ -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.3"
|
|
7
7
|
authors = [
|
|
8
8
|
{ name="Frederic Durodie", email="frederic.durodie@rma.ac.be" },
|
|
9
9
|
{ name="Arthur Adriaens", email="arthur.adriaens@mil.be" },
|
|
@@ -35,7 +35,7 @@ def ReadTSF(src, **kwargs):
|
|
|
35
35
|
|
|
36
36
|
#TODO: implement ports, funit
|
|
37
37
|
|
|
38
|
-
TZbase = kwargs.pop('Zbase',
|
|
38
|
+
TZbase = kwargs.pop('Zbase', None)
|
|
39
39
|
Tfunit = kwargs.get('funit', 'GHz')
|
|
40
40
|
Tports = kwargs.get('ports', 'port-%03d')
|
|
41
41
|
Tcomments = kwargs.get('comments',[])
|
|
@@ -114,7 +114,26 @@ def ReadTSF(src, **kwargs):
|
|
|
114
114
|
elif kw in ['HZ','KHZ','MHZ','GHZ']:
|
|
115
115
|
funit = kw
|
|
116
116
|
elif kw == 'R':
|
|
117
|
-
|
|
117
|
+
Zlist = []
|
|
118
|
+
while len(items):
|
|
119
|
+
try:
|
|
120
|
+
item = items[-1]
|
|
121
|
+
Zlist.append(float(item))
|
|
122
|
+
except ValueError:
|
|
123
|
+
break
|
|
124
|
+
items.pop()
|
|
125
|
+
|
|
126
|
+
if (NZ := len(Zlist)) == 1:
|
|
127
|
+
Zbase = Zlist[0]
|
|
128
|
+
|
|
129
|
+
elif NZ > 1:
|
|
130
|
+
debug and tLogger.debug(ident(f'Zbase [{len(Zlist)}] {", ".join([str(z) for z in Zlist])}'))
|
|
131
|
+
Zbase = Zlist
|
|
132
|
+
|
|
133
|
+
else:
|
|
134
|
+
# this should be flagged as an error in the touchstone
|
|
135
|
+
Zbase = 50. if TZbase is None else TZbase
|
|
136
|
+
debug and tLogger.debug(ident(f'Zbase not specified in R [ERROR]: set to {Zbase}'))
|
|
118
137
|
else:
|
|
119
138
|
raise ValueError('Unrecognized format specification: %r' % kw)
|
|
120
139
|
|
|
@@ -190,7 +209,7 @@ def ReadTSF(src, **kwargs):
|
|
|
190
209
|
lineno += 1
|
|
191
210
|
aline = comments[lineno]
|
|
192
211
|
while aline.strip() != '!':
|
|
193
|
-
varline = re.findall('!\s*([A-Za-z0-9_]+)\s*=\s*(.+)',
|
|
212
|
+
varline = re.findall('!\s*([\$]?[A-Za-z0-9_]+)\s*=\s*(.+)',
|
|
194
213
|
aline)
|
|
195
214
|
if varline:
|
|
196
215
|
pvars[varline[0][0]] = varline[0][1]
|
|
@@ -322,17 +341,26 @@ def ReadTSF(src, **kwargs):
|
|
|
322
341
|
pass
|
|
323
342
|
|
|
324
343
|
# if the data type is Z or Y we need to convert to S
|
|
344
|
+
|
|
345
|
+
#FIXME: if TZbase was given then Zbase can be ignored
|
|
346
|
+
Zbase = 50. if datatype in 'ZY' and Zbase is None else Zbase
|
|
325
347
|
if datatype == 'Z':
|
|
326
|
-
Ss = S_from_Z(Ss, Zbase if Zbase else TZbase)
|
|
348
|
+
# Ss = S_from_Z(Ss, Zbase if Zbase else TZbase)
|
|
349
|
+
Ss = S_from_Z(Ss, TZbase if TZbase else Zbase)
|
|
327
350
|
|
|
328
351
|
elif datatype == 'Y':
|
|
329
|
-
Ss = S_from_Y(Ss, Zbase if Zbase else TZbase)
|
|
330
|
-
|
|
352
|
+
# Ss = S_from_Y(Ss, Zbase if Zbase else TZbase)
|
|
353
|
+
Ss = S_from_Y(Ss, TZbase if TZbase else Zbase)
|
|
354
|
+
|
|
331
355
|
else: # datatype == 'S':
|
|
332
356
|
|
|
333
357
|
if Zbase is not None:
|
|
334
|
-
if Zbase
|
|
335
|
-
|
|
358
|
+
if not hasattr(Zbase,'__iter__'):
|
|
359
|
+
if Zbase != TZbase:
|
|
360
|
+
Ss = ConvertGeneral(TZbase, Ss, Zbase, 'V', 'V')
|
|
361
|
+
|
|
362
|
+
else:
|
|
363
|
+
Ss = ConvertGeneral(TZbase, Ss, Zbase, 'P', 'V')
|
|
336
364
|
|
|
337
365
|
else: # Zbase is None:
|
|
338
366
|
if len(Zcs[0]) == N:
|
|
@@ -340,7 +368,8 @@ def ReadTSF(src, **kwargs):
|
|
|
340
368
|
else:
|
|
341
369
|
logit['ERROR'] and tLogger.error(f'len(Zcs)[{len(Zcs)}] != N[{N}]')
|
|
342
370
|
logit['ERROR'] and tLogger.error(f'Zcs={Zcs}')
|
|
343
|
-
|
|
371
|
+
|
|
372
|
+
|
|
344
373
|
# set the portnames
|
|
345
374
|
|
|
346
375
|
if 'ports' in kwargs:
|
|
@@ -387,7 +416,7 @@ def ReadTSF(src, **kwargs):
|
|
|
387
416
|
"markers" : markers,
|
|
388
417
|
"Zc" : Zcs,
|
|
389
418
|
"Gm" : Gms,
|
|
390
|
-
"variables" :
|
|
419
|
+
"variables" : pvars,
|
|
391
420
|
"datafmt" : datafmt,
|
|
392
421
|
}
|
|
393
422
|
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
__updated__ = "2024-08-29 15:46:08"
|
|
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\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-08-29 09:55:04"
|
|
2
|
+
|
|
3
|
+
print('using local copy of pyRFtk')
|
|
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
|
|
@@ -195,7 +195,7 @@ rcparams = {
|
|
|
195
195
|
'funit' : 'Hz', # 'Hz' | 'kHz' | 'MHz' | 'GHz' # keep to Hz for the moment
|
|
196
196
|
'fs' : (35e6, 60e6, 251),
|
|
197
197
|
'interp' : 'MA', # 'MA' | 'RI' | 'dB'
|
|
198
|
-
'interpkws' : {'kind':
|
|
198
|
+
'interpkws' : {'kind': 1,
|
|
199
199
|
'fill_value':'extrapolate'
|
|
200
200
|
},
|
|
201
201
|
}
|
|
@@ -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
|
#===========================================================================
|