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.
Files changed (232) hide show
  1. pyrftk-2.0.4/.gitignore +2 -0
  2. {pyrftk-2.0.2 → pyrftk-2.0.4}/PKG-INFO +6 -5
  3. {pyrftk-2.0.2 → pyrftk-2.0.4}/README.md +4 -3
  4. pyrftk-2.0.4/logo/logo.pdf +0 -0
  5. pyrftk-2.0.4/logo/logo.svg +109 -0
  6. {pyrftk-2.0.2 → pyrftk-2.0.4}/pyproject.toml +1 -1
  7. pyrftk-2.0.4/src/pyRFtk/.gitignore +2 -0
  8. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/ReadTSF.py +84 -23
  9. pyrftk-2.0.4/src/pyRFtk/WriteTSF.py +174 -0
  10. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/__init__.py +4 -1
  11. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfObject.py +1 -0
  12. pyrftk-2.0.4/tests/WEST_TWA_7s_4_No_FS_protruding.s7p +3256 -0
  13. pyrftk-2.0.2/src/pyRFtk/.gitignore +0 -1
  14. {pyrftk-2.0.2 → pyrftk-2.0.4}/LICENCE +0 -0
  15. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/Makefile +0 -0
  16. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.buildinfo +0 -0
  17. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Arcs.doctree +0 -0
  18. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Deembedding.doctree +0 -0
  19. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Examples.doctree +0 -0
  20. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Installation.doctree +0 -0
  21. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Introduction.doctree +0 -0
  22. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Logging.doctree +0 -0
  23. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Touchstone.doctree +0 -0
  24. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/Tutorials.doctree +0 -0
  25. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/backup.doctree +0 -0
  26. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/environment.pickle +0 -0
  27. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/index.doctree +0 -0
  28. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/modules.doctree +0 -0
  29. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.doctrees/pyRFtk.doctree +0 -0
  30. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/.nojekyll +0 -0
  31. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Arcs.html +0 -0
  32. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Deembedding.html +0 -0
  33. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Examples.html +0 -0
  34. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Installation.html +0 -0
  35. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Introduction.html +0 -0
  36. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Logging.html +0 -0
  37. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Touchstone.html +0 -0
  38. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/Tutorials.html +0 -0
  39. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_downloads/b90e652aafe314ced71820d596828aed/Tomas-Ref_geo-R=200-Diel_eps=0500.s2p +0 -0
  40. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_downloads/bf8243189246eb0547daf197b1578bac/tomas_icrh_linear_2017-vacuum.s2p +0 -0
  41. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_images/RLC.png +0 -0
  42. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_images/RLCSC.png +0 -0
  43. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_images/SC.png +0 -0
  44. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_images/SimpleCircuit.png +0 -0
  45. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_images/TomasCircuit.png +0 -0
  46. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Arcs.rst.txt +0 -0
  47. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Deembedding.rst.txt +0 -0
  48. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Examples.rst.txt +0 -0
  49. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Installation.rst.txt +0 -0
  50. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Introduction.rst.txt +0 -0
  51. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Logging.rst.txt +0 -0
  52. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Touchstone.rst.txt +0 -0
  53. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/Tutorials.rst.txt +0 -0
  54. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/backup.rst.txt +0 -0
  55. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/index.rst.txt +0 -0
  56. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/modules.rst.txt +0 -0
  57. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_sources/pyRFtk.rst.txt +0 -0
  58. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  59. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/alabaster.css +0 -0
  60. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/basic.css +0 -0
  61. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/classic.css +0 -0
  62. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/badge_only.css +0 -0
  63. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  64. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  65. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  66. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  67. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/fontawesome-webfont.eot +0 -0
  68. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/fontawesome-webfont.svg +0 -0
  69. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  70. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/fontawesome-webfont.woff +0 -0
  71. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  72. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-bold-italic.woff +0 -0
  73. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  74. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-bold.woff +0 -0
  75. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-bold.woff2 +0 -0
  76. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-normal-italic.woff +0 -0
  77. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  78. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-normal.woff +0 -0
  79. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/fonts/lato-normal.woff2 +0 -0
  80. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/css/theme.css +0 -0
  81. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/custom.css +0 -0
  82. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/doctools.js +0 -0
  83. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/documentation_options.js +0 -0
  84. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/file.png +0 -0
  85. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/groundwork.css +0 -0
  86. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/gw_logo.png +0 -0
  87. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/jquery.js +0 -0
  88. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/js/badge_only.js +0 -0
  89. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/js/html5shiv-printshiv.min.js +0 -0
  90. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/js/html5shiv.min.js +0 -0
  91. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/js/theme.js +0 -0
  92. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/language_data.js +0 -0
  93. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/minus.png +0 -0
  94. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/plus.png +0 -0
  95. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/pygments.css +0 -0
  96. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/searchtools.js +0 -0
  97. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/sidebar.js +0 -0
  98. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/small_groundwork.css +0 -0
  99. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/_static/sphinx_highlight.js +0 -0
  100. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/backup.html +0 -0
  101. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/Deembedding.doctree +0 -0
  102. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/Examples.doctree +0 -0
  103. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/Installation.doctree +0 -0
  104. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/Introduction.doctree +0 -0
  105. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/TOMAS.doctree +0 -0
  106. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/Touchstone.doctree +0 -0
  107. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/Tutorials.doctree +0 -0
  108. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/backup.doctree +0 -0
  109. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/environment.pickle +0 -0
  110. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/index.doctree +0 -0
  111. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/modules.doctree +0 -0
  112. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/pyRFtk.doctree +0 -0
  113. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/doctrees/usage.doctree +0 -0
  114. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/genindex.html +0 -0
  115. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/.buildinfo +0 -0
  116. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/.nojekyll +0 -0
  117. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/Deembedding.html +0 -0
  118. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/Examples.html +0 -0
  119. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/Installation.html +0 -0
  120. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/Introduction.html +0 -0
  121. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/TOMAS.html +0 -0
  122. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/Touchstone.html +0 -0
  123. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/Tutorials.html +0 -0
  124. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/RLC.png +0 -0
  125. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/RLCSC.png +0 -0
  126. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/SC.png +0 -0
  127. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/SimpleCircuit.pdf +0 -0
  128. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/SimpleCircuit.png +0 -0
  129. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/TOMAS_ICRH_Antenna.png +0 -0
  130. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/TOMAS_ICRH_Circuit.png +0 -0
  131. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_images/TomasCircuit.png +0 -0
  132. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/Deembedding.rst.txt +0 -0
  133. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/Examples.rst.txt +0 -0
  134. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/Installation.rst.txt +0 -0
  135. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/Introduction.rst.txt +0 -0
  136. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/TOMAS.rst.txt +0 -0
  137. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/Touchstone.rst.txt +0 -0
  138. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/Tutorials.rst.txt +0 -0
  139. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/backup.rst.txt +0 -0
  140. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/index.rst.txt +0 -0
  141. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/modules.rst.txt +0 -0
  142. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/pyRFtk.rst.txt +0 -0
  143. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_sources/usage.rst.txt +0 -0
  144. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/alabaster.css +0 -0
  145. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/basic.css +0 -0
  146. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/classic.css +0 -0
  147. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/custom.css +0 -0
  148. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/doctools.js +0 -0
  149. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/documentation_options.js +0 -0
  150. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/file.png +0 -0
  151. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/language_data.js +0 -0
  152. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/minus.png +0 -0
  153. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/plus.png +0 -0
  154. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/pygments.css +0 -0
  155. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/searchtools.js +0 -0
  156. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/sidebar.js +0 -0
  157. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/_static/sphinx_highlight.js +0 -0
  158. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/backup.html +0 -0
  159. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/genindex.html +0 -0
  160. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/index.html +0 -0
  161. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/modules.html +0 -0
  162. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/objects.inv +0 -0
  163. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/py-modindex.html +0 -0
  164. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/pyRFtk.html +0 -0
  165. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/search.html +0 -0
  166. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/searchindex.js +0 -0
  167. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/html/usage.html +0 -0
  168. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/index.html +0 -0
  169. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/modules.html +0 -0
  170. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/objects.inv +0 -0
  171. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/py-modindex.html +0 -0
  172. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/pyRFtk.html +0 -0
  173. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/search.html +0 -0
  174. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/build/searchindex.js +0 -0
  175. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/make.bat +0 -0
  176. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Arcs.rst +0 -0
  177. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Deembedding.rst +0 -0
  178. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Drawings/SimpleCircuit.odg +0 -0
  179. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Examples.rst +0 -0
  180. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Files/Tomas-Ref_geo-R=200-Diel_eps=0500.s2p +0 -0
  181. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Files/tomas_icrh_linear_2017-vacuum.s2p +0 -0
  182. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/RLC.png +0 -0
  183. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/RLCSC.png +0 -0
  184. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/SC.png +0 -0
  185. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/SimpleCircuit.pdf +0 -0
  186. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/SimpleCircuit.png +0 -0
  187. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/TOMAS_ICRH_Antenna.png +0 -0
  188. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/TOMAS_ICRH_Circuit.png +0 -0
  189. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Images/TomasCircuit.png +0 -0
  190. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Installation.rst +0 -0
  191. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Introduction.rst +0 -0
  192. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Logging.rst +0 -0
  193. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Touchstone.rst +0 -0
  194. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/Tutorials.rst +0 -0
  195. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/backup.rst +0 -0
  196. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/conf.py +0 -0
  197. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/index.rst +0 -0
  198. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/modules.rst +0 -0
  199. {pyrftk-2.0.2 → pyrftk-2.0.4}/docs/source/pyRFtk.rst +0 -0
  200. {pyrftk-2.0.2 → pyrftk-2.0.4/logo}/logo.png +0 -0
  201. {pyrftk-2.0.2 → pyrftk-2.0.4}/rfCommon.log +0 -0
  202. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/ConvertGeneral.py +0 -0
  203. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/ReadDictData.py +0 -0
  204. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/S_from_VI.py +0 -0
  205. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/S_from_Y.py +0 -0
  206. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/S_from_Z.py +0 -0
  207. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/Y_from_S.py +0 -0
  208. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/Z_from_S.py +0 -0
  209. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/_check_3D_shape_.py +0 -0
  210. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/circuit.py +0 -0
  211. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/codebase.py +0 -0
  212. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/compareSs.py +0 -0
  213. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/config.py +0 -0
  214. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/findpath.py +0 -0
  215. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/getlines.py +0 -0
  216. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/maxfun.py +0 -0
  217. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/plotVSWs.py +0 -0
  218. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/printMatrices.py +0 -0
  219. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/resolveTLparams.py +0 -0
  220. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfArcObj.py +0 -0
  221. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfBase.py +0 -0
  222. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfCircuit.py +0 -0
  223. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfCoupler.py +0 -0
  224. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfGTL.py +0 -0
  225. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfRLC.py +0 -0
  226. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/rfTRL.py +0 -0
  227. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/str_dict.py +0 -0
  228. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/tictoc.py +0 -0
  229. {pyrftk-2.0.2 → pyrftk-2.0.4}/src/pyRFtk/whoami.py +0 -0
  230. {pyrftk-2.0.2 → pyrftk-2.0.4}/tests/rfCommon.log +0 -0
  231. {pyrftk-2.0.2 → pyrftk-2.0.4}/tests/routine.sh +0 -0
  232. {pyrftk-2.0.2 → pyrftk-2.0.4}/tests/tests.py +0 -0
@@ -0,0 +1,2 @@
1
+ /.project
2
+ /.pydevproject
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: pyRFtk
3
- Version: 2.0.2
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
- ![logo](logo.png)
14
+ [![DOI](https://zenodo.org/badge/702980029.svg)](https://zenodo.org/doi/10.5281/zenodo.10391750)
15
+ ![logo](https://github.com/LPP-ERM-KMS/pyRFtk/blob/master/logo/logo.svg)
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 maximum current throughout your circuit
21
- - Compute the S-matrix
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
- ![logo](logo.png)
2
+ [![DOI](https://zenodo.org/badge/702980029.svg)](https://zenodo.org/doi/10.5281/zenodo.10391750)
3
+ ![logo](https://github.com/LPP-ERM-KMS/pyRFtk/blob/master/logo/logo.svg)
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 maximum current throughout your circuit
9
- - Compute the S-matrix
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.2"
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" },
@@ -0,0 +1,2 @@
1
+ /rfCommon.log
2
+ /__pycache__/*
@@ -1,7 +1,11 @@
1
- __updated__ = "2023-09-12 10:02:08"
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', 50.)
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
- Zbase = float(items.pop())
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 Zbase is not None:
334
- if Zbase != TZbase:
335
- Ss = ConvertGeneral(TZbase, Ss, Zbase, 'V', 'V')
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
- else: # Zbase is None:
338
- if len(Zcs[0]) == N:
339
- Ss = ConvertGeneral(TZbase, Ss, Zcs, 'P', 'V')
340
- else:
341
- logit['ERROR'] and tLogger.error(f'len(Zcs)[{len(Zcs)}] != N[{N}]')
342
- logit['ERROR'] and tLogger.error(f'Zcs={Zcs}')
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" : None,
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__ = "2023-09-22 15:55:47"
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
  #===========================================================================