pyRFtk 2.0.7__tar.gz → 2.0.9__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 (231) hide show
  1. {pyrftk-2.0.7 → pyrftk-2.0.9}/PKG-INFO +13 -1
  2. {pyrftk-2.0.7 → pyrftk-2.0.9}/README.md +12 -0
  3. {pyrftk-2.0.7 → pyrftk-2.0.9}/pyproject.toml +3 -1
  4. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/ReadTSF.py +12 -6
  5. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/WriteTSF.py +4 -3
  6. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/__init__.py +2 -2
  7. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/rfCircuit.py +33 -3
  8. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/rfGTL.py +2 -0
  9. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/rfObject.py +98 -13
  10. pyrftk-2.0.7/docs/Makefile +0 -20
  11. pyrftk-2.0.7/docs/build/.buildinfo +0 -4
  12. pyrftk-2.0.7/docs/build/.doctrees/Arcs.doctree +0 -0
  13. pyrftk-2.0.7/docs/build/.doctrees/Deembedding.doctree +0 -0
  14. pyrftk-2.0.7/docs/build/.doctrees/Examples.doctree +0 -0
  15. pyrftk-2.0.7/docs/build/.doctrees/Installation.doctree +0 -0
  16. pyrftk-2.0.7/docs/build/.doctrees/Introduction.doctree +0 -0
  17. pyrftk-2.0.7/docs/build/.doctrees/Logging.doctree +0 -0
  18. pyrftk-2.0.7/docs/build/.doctrees/Touchstone.doctree +0 -0
  19. pyrftk-2.0.7/docs/build/.doctrees/Tutorials.doctree +0 -0
  20. pyrftk-2.0.7/docs/build/.doctrees/backup.doctree +0 -0
  21. pyrftk-2.0.7/docs/build/.doctrees/environment.pickle +0 -0
  22. pyrftk-2.0.7/docs/build/.doctrees/index.doctree +0 -0
  23. pyrftk-2.0.7/docs/build/.doctrees/modules.doctree +0 -0
  24. pyrftk-2.0.7/docs/build/.doctrees/pyRFtk.doctree +0 -0
  25. pyrftk-2.0.7/docs/build/.nojekyll +0 -0
  26. pyrftk-2.0.7/docs/build/Arcs.html +0 -103
  27. pyrftk-2.0.7/docs/build/Deembedding.html +0 -192
  28. pyrftk-2.0.7/docs/build/Examples.html +0 -105
  29. pyrftk-2.0.7/docs/build/Installation.html +0 -140
  30. pyrftk-2.0.7/docs/build/Introduction.html +0 -199
  31. pyrftk-2.0.7/docs/build/Logging.html +0 -103
  32. pyrftk-2.0.7/docs/build/Touchstone.html +0 -191
  33. pyrftk-2.0.7/docs/build/Tutorials.html +0 -127
  34. pyrftk-2.0.7/docs/build/_downloads/b90e652aafe314ced71820d596828aed/Tomas-Ref_geo-R=200-Diel_eps=0500.s2p +0 -1010
  35. pyrftk-2.0.7/docs/build/_downloads/bf8243189246eb0547daf197b1578bac/tomas_icrh_linear_2017-vacuum.s2p +0 -1014
  36. pyrftk-2.0.7/docs/build/_images/RLC.png +0 -0
  37. pyrftk-2.0.7/docs/build/_images/RLCSC.png +0 -0
  38. pyrftk-2.0.7/docs/build/_images/SC.png +0 -0
  39. pyrftk-2.0.7/docs/build/_images/SimpleCircuit.png +0 -0
  40. pyrftk-2.0.7/docs/build/_images/TomasCircuit.png +0 -0
  41. pyrftk-2.0.7/docs/build/_sources/Arcs.rst.txt +0 -2
  42. pyrftk-2.0.7/docs/build/_sources/Deembedding.rst.txt +0 -91
  43. pyrftk-2.0.7/docs/build/_sources/Examples.rst.txt +0 -5
  44. pyrftk-2.0.7/docs/build/_sources/Installation.rst.txt +0 -23
  45. pyrftk-2.0.7/docs/build/_sources/Introduction.rst.txt +0 -101
  46. pyrftk-2.0.7/docs/build/_sources/Logging.rst.txt +0 -5
  47. pyrftk-2.0.7/docs/build/_sources/Touchstone.rst.txt +0 -85
  48. pyrftk-2.0.7/docs/build/_sources/Tutorials.rst.txt +0 -7
  49. pyrftk-2.0.7/docs/build/_sources/backup.rst.txt +0 -84
  50. pyrftk-2.0.7/docs/build/_sources/index.rst.txt +0 -24
  51. pyrftk-2.0.7/docs/build/_sources/modules.rst.txt +0 -7
  52. pyrftk-2.0.7/docs/build/_sources/pyRFtk.rst.txt +0 -245
  53. pyrftk-2.0.7/docs/build/_static/_sphinx_javascript_frameworks_compat.js +0 -123
  54. pyrftk-2.0.7/docs/build/_static/alabaster.css +0 -703
  55. pyrftk-2.0.7/docs/build/_static/basic.css +0 -925
  56. pyrftk-2.0.7/docs/build/_static/classic.css +0 -269
  57. pyrftk-2.0.7/docs/build/_static/css/badge_only.css +0 -1
  58. pyrftk-2.0.7/docs/build/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  59. pyrftk-2.0.7/docs/build/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  60. pyrftk-2.0.7/docs/build/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  61. pyrftk-2.0.7/docs/build/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  62. pyrftk-2.0.7/docs/build/_static/css/fonts/fontawesome-webfont.eot +0 -0
  63. pyrftk-2.0.7/docs/build/_static/css/fonts/fontawesome-webfont.svg +0 -2671
  64. pyrftk-2.0.7/docs/build/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  65. pyrftk-2.0.7/docs/build/_static/css/fonts/fontawesome-webfont.woff +0 -0
  66. pyrftk-2.0.7/docs/build/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  67. pyrftk-2.0.7/docs/build/_static/css/fonts/lato-bold-italic.woff +0 -0
  68. pyrftk-2.0.7/docs/build/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  69. pyrftk-2.0.7/docs/build/_static/css/fonts/lato-bold.woff +0 -0
  70. pyrftk-2.0.7/docs/build/_static/css/fonts/lato-bold.woff2 +0 -0
  71. pyrftk-2.0.7/docs/build/_static/css/fonts/lato-normal-italic.woff +0 -0
  72. pyrftk-2.0.7/docs/build/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  73. pyrftk-2.0.7/docs/build/_static/css/fonts/lato-normal.woff +0 -0
  74. pyrftk-2.0.7/docs/build/_static/css/fonts/lato-normal.woff2 +0 -0
  75. pyrftk-2.0.7/docs/build/_static/css/theme.css +0 -4
  76. pyrftk-2.0.7/docs/build/_static/custom.css +0 -1
  77. pyrftk-2.0.7/docs/build/_static/doctools.js +0 -156
  78. pyrftk-2.0.7/docs/build/_static/documentation_options.js +0 -13
  79. pyrftk-2.0.7/docs/build/_static/file.png +0 -0
  80. pyrftk-2.0.7/docs/build/_static/groundwork.css +0 -720
  81. pyrftk-2.0.7/docs/build/_static/gw_logo.png +0 -0
  82. pyrftk-2.0.7/docs/build/_static/jquery.js +0 -2
  83. pyrftk-2.0.7/docs/build/_static/js/badge_only.js +0 -1
  84. pyrftk-2.0.7/docs/build/_static/js/html5shiv-printshiv.min.js +0 -4
  85. pyrftk-2.0.7/docs/build/_static/js/html5shiv.min.js +0 -4
  86. pyrftk-2.0.7/docs/build/_static/js/theme.js +0 -1
  87. pyrftk-2.0.7/docs/build/_static/language_data.js +0 -199
  88. pyrftk-2.0.7/docs/build/_static/minus.png +0 -0
  89. pyrftk-2.0.7/docs/build/_static/plus.png +0 -0
  90. pyrftk-2.0.7/docs/build/_static/pygments.css +0 -75
  91. pyrftk-2.0.7/docs/build/_static/searchtools.js +0 -574
  92. pyrftk-2.0.7/docs/build/_static/sidebar.js +0 -70
  93. pyrftk-2.0.7/docs/build/_static/small_groundwork.css +0 -102
  94. pyrftk-2.0.7/docs/build/_static/sphinx_highlight.js +0 -154
  95. pyrftk-2.0.7/docs/build/backup.html +0 -178
  96. pyrftk-2.0.7/docs/build/doctrees/Deembedding.doctree +0 -0
  97. pyrftk-2.0.7/docs/build/doctrees/Examples.doctree +0 -0
  98. pyrftk-2.0.7/docs/build/doctrees/Installation.doctree +0 -0
  99. pyrftk-2.0.7/docs/build/doctrees/Introduction.doctree +0 -0
  100. pyrftk-2.0.7/docs/build/doctrees/TOMAS.doctree +0 -0
  101. pyrftk-2.0.7/docs/build/doctrees/Touchstone.doctree +0 -0
  102. pyrftk-2.0.7/docs/build/doctrees/Tutorials.doctree +0 -0
  103. pyrftk-2.0.7/docs/build/doctrees/backup.doctree +0 -0
  104. pyrftk-2.0.7/docs/build/doctrees/environment.pickle +0 -0
  105. pyrftk-2.0.7/docs/build/doctrees/index.doctree +0 -0
  106. pyrftk-2.0.7/docs/build/doctrees/modules.doctree +0 -0
  107. pyrftk-2.0.7/docs/build/doctrees/pyRFtk.doctree +0 -0
  108. pyrftk-2.0.7/docs/build/doctrees/usage.doctree +0 -0
  109. pyrftk-2.0.7/docs/build/genindex.html +0 -759
  110. pyrftk-2.0.7/docs/build/html/.buildinfo +0 -4
  111. pyrftk-2.0.7/docs/build/html/.nojekyll +0 -0
  112. pyrftk-2.0.7/docs/build/html/Deembedding.html +0 -174
  113. pyrftk-2.0.7/docs/build/html/Examples.html +0 -90
  114. pyrftk-2.0.7/docs/build/html/Installation.html +0 -147
  115. pyrftk-2.0.7/docs/build/html/Introduction.html +0 -192
  116. pyrftk-2.0.7/docs/build/html/TOMAS.html +0 -102
  117. pyrftk-2.0.7/docs/build/html/Touchstone.html +0 -183
  118. pyrftk-2.0.7/docs/build/html/Tutorials.html +0 -119
  119. pyrftk-2.0.7/docs/build/html/_images/RLC.png +0 -0
  120. pyrftk-2.0.7/docs/build/html/_images/RLCSC.png +0 -0
  121. pyrftk-2.0.7/docs/build/html/_images/SC.png +0 -0
  122. pyrftk-2.0.7/docs/build/html/_images/SimpleCircuit.pdf +0 -0
  123. pyrftk-2.0.7/docs/build/html/_images/SimpleCircuit.png +0 -0
  124. pyrftk-2.0.7/docs/build/html/_images/TOMAS_ICRH_Antenna.png +0 -0
  125. pyrftk-2.0.7/docs/build/html/_images/TOMAS_ICRH_Circuit.png +0 -0
  126. pyrftk-2.0.7/docs/build/html/_images/TomasCircuit.png +0 -0
  127. pyrftk-2.0.7/docs/build/html/_sources/Deembedding.rst.txt +0 -90
  128. pyrftk-2.0.7/docs/build/html/_sources/Examples.rst.txt +0 -5
  129. pyrftk-2.0.7/docs/build/html/_sources/Installation.rst.txt +0 -33
  130. pyrftk-2.0.7/docs/build/html/_sources/Introduction.rst.txt +0 -101
  131. pyrftk-2.0.7/docs/build/html/_sources/TOMAS.rst.txt +0 -13
  132. pyrftk-2.0.7/docs/build/html/_sources/Touchstone.rst.txt +0 -84
  133. pyrftk-2.0.7/docs/build/html/_sources/Tutorials.rst.txt +0 -7
  134. pyrftk-2.0.7/docs/build/html/_sources/backup.rst.txt +0 -84
  135. pyrftk-2.0.7/docs/build/html/_sources/index.rst.txt +0 -24
  136. pyrftk-2.0.7/docs/build/html/_sources/modules.rst.txt +0 -7
  137. pyrftk-2.0.7/docs/build/html/_sources/pyRFtk.rst.txt +0 -245
  138. pyrftk-2.0.7/docs/build/html/_sources/usage.rst.txt +0 -176
  139. pyrftk-2.0.7/docs/build/html/_static/alabaster.css +0 -703
  140. pyrftk-2.0.7/docs/build/html/_static/basic.css +0 -925
  141. pyrftk-2.0.7/docs/build/html/_static/classic.css +0 -269
  142. pyrftk-2.0.7/docs/build/html/_static/custom.css +0 -1
  143. pyrftk-2.0.7/docs/build/html/_static/doctools.js +0 -156
  144. pyrftk-2.0.7/docs/build/html/_static/documentation_options.js +0 -13
  145. pyrftk-2.0.7/docs/build/html/_static/file.png +0 -0
  146. pyrftk-2.0.7/docs/build/html/_static/language_data.js +0 -199
  147. pyrftk-2.0.7/docs/build/html/_static/minus.png +0 -0
  148. pyrftk-2.0.7/docs/build/html/_static/plus.png +0 -0
  149. pyrftk-2.0.7/docs/build/html/_static/pygments.css +0 -75
  150. pyrftk-2.0.7/docs/build/html/_static/searchtools.js +0 -574
  151. pyrftk-2.0.7/docs/build/html/_static/sidebar.js +0 -70
  152. pyrftk-2.0.7/docs/build/html/_static/sphinx_highlight.js +0 -154
  153. pyrftk-2.0.7/docs/build/html/backup.html +0 -165
  154. pyrftk-2.0.7/docs/build/html/genindex.html +0 -738
  155. pyrftk-2.0.7/docs/build/html/index.html +0 -147
  156. pyrftk-2.0.7/docs/build/html/modules.html +0 -305
  157. pyrftk-2.0.7/docs/build/html/objects.inv +0 -0
  158. pyrftk-2.0.7/docs/build/html/py-modindex.html +0 -238
  159. pyrftk-2.0.7/docs/build/html/pyRFtk.html +0 -1581
  160. pyrftk-2.0.7/docs/build/html/search.html +0 -102
  161. pyrftk-2.0.7/docs/build/html/searchindex.js +0 -1
  162. pyrftk-2.0.7/docs/build/html/usage.html +0 -267
  163. pyrftk-2.0.7/docs/build/index.html +0 -142
  164. pyrftk-2.0.7/docs/build/modules.html +0 -320
  165. pyrftk-2.0.7/docs/build/objects.inv +0 -0
  166. pyrftk-2.0.7/docs/build/py-modindex.html +0 -259
  167. pyrftk-2.0.7/docs/build/pyRFtk.html +0 -1377
  168. pyrftk-2.0.7/docs/build/search.html +0 -119
  169. pyrftk-2.0.7/docs/build/searchindex.js +0 -1
  170. pyrftk-2.0.7/docs/make.bat +0 -35
  171. pyrftk-2.0.7/docs/source/Arcs.rst +0 -2
  172. pyrftk-2.0.7/docs/source/Deembedding.rst +0 -91
  173. pyrftk-2.0.7/docs/source/Drawings/SimpleCircuit.odg +0 -0
  174. pyrftk-2.0.7/docs/source/Examples.rst +0 -5
  175. pyrftk-2.0.7/docs/source/Files/Tomas-Ref_geo-R=200-Diel_eps=0500.s2p +0 -1010
  176. pyrftk-2.0.7/docs/source/Files/tomas_icrh_linear_2017-vacuum.s2p +0 -1014
  177. pyrftk-2.0.7/docs/source/Images/RLC.png +0 -0
  178. pyrftk-2.0.7/docs/source/Images/RLCSC.png +0 -0
  179. pyrftk-2.0.7/docs/source/Images/SC.png +0 -0
  180. pyrftk-2.0.7/docs/source/Images/SimpleCircuit.pdf +0 -0
  181. pyrftk-2.0.7/docs/source/Images/SimpleCircuit.png +0 -0
  182. pyrftk-2.0.7/docs/source/Images/TOMAS_ICRH_Antenna.png +0 -0
  183. pyrftk-2.0.7/docs/source/Images/TOMAS_ICRH_Circuit.png +0 -0
  184. pyrftk-2.0.7/docs/source/Images/TomasCircuit.png +0 -0
  185. pyrftk-2.0.7/docs/source/Installation.rst +0 -23
  186. pyrftk-2.0.7/docs/source/Introduction.rst +0 -101
  187. pyrftk-2.0.7/docs/source/Logging.rst +0 -5
  188. pyrftk-2.0.7/docs/source/Touchstone.rst +0 -85
  189. pyrftk-2.0.7/docs/source/Tutorials.rst +0 -7
  190. pyrftk-2.0.7/docs/source/backup.rst +0 -84
  191. pyrftk-2.0.7/docs/source/conf.py +0 -28
  192. pyrftk-2.0.7/docs/source/index.rst +0 -24
  193. pyrftk-2.0.7/docs/source/modules.rst +0 -7
  194. pyrftk-2.0.7/docs/source/pyRFtk.rst +0 -245
  195. pyrftk-2.0.7/rfCommon.log +0 -67
  196. pyrftk-2.0.7/tests/WEST_TWA_7s_4_No_FS_protruding.s7p +0 -3256
  197. pyrftk-2.0.7/tests/rfCommon.log +0 -100
  198. pyrftk-2.0.7/tests/routine.sh +0 -3
  199. pyrftk-2.0.7/tests/tests.py +0 -433
  200. {pyrftk-2.0.7 → pyrftk-2.0.9}/.gitignore +0 -0
  201. {pyrftk-2.0.7 → pyrftk-2.0.9}/LICENCE +0 -0
  202. {pyrftk-2.0.7 → pyrftk-2.0.9}/logo/logo.pdf +0 -0
  203. {pyrftk-2.0.7 → pyrftk-2.0.9}/logo/logo.png +0 -0
  204. {pyrftk-2.0.7 → pyrftk-2.0.9}/logo/logo.svg +0 -0
  205. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/.gitignore +0 -0
  206. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/ConvertGeneral.py +0 -0
  207. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/ReadDictData.py +0 -0
  208. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/S_from_VI.py +0 -0
  209. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/S_from_Y.py +0 -0
  210. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/S_from_Z.py +0 -0
  211. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/Y_from_S.py +0 -0
  212. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/Z_from_S.py +0 -0
  213. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/_check_3D_shape_.py +0 -0
  214. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/circuit.py +0 -0
  215. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/codebase.py +0 -0
  216. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/compareSs.py +0 -0
  217. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/config.py +0 -0
  218. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/findpath.py +0 -0
  219. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/getlines.py +0 -0
  220. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/maxfun.py +0 -0
  221. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/plotVSWs.py +0 -0
  222. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/printMatrices.py +0 -0
  223. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/resolveTLparams.py +0 -0
  224. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/rfArcObj.py +0 -0
  225. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/rfBase.py +0 -0
  226. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/rfCoupler.py +0 -0
  227. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/rfRLC.py +0 -0
  228. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/rfTRL.py +0 -0
  229. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/str_dict.py +0 -0
  230. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/tictoc.py +0 -0
  231. {pyrftk-2.0.7 → pyrftk-2.0.9}/src/pyRFtk/whoami.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyRFtk
3
- Version: 2.0.7
3
+ Version: 2.0.9
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>
@@ -23,7 +23,19 @@ you can:
23
23
  - Detect Arcs
24
24
  - Deembed systems
25
25
  - ...
26
+
27
+ ## Installation
28
+ pyRFtk is available as a pip package:
29
+
30
+ ```sh
31
+ pip install pyRFtk
32
+ ```
33
+
34
+ Or using your favorite distribution platform
26
35
 
27
36
  ## Authors
28
37
  The code was developed by RF-engineer Frederic Durodie and later
29
38
  on refactored, packaged and documented by Arthur Adriaens
39
+
40
+ ## Example usage
41
+ This code was extensively used for the paper [An automatic matching system for the ICRF antenna at TOMAS: Development and experimental proof](https://doi.org/10.1016/j.fusengdes.2025.114840), the code for which may be found in the examples folder.
@@ -11,7 +11,19 @@ you can:
11
11
  - Detect Arcs
12
12
  - Deembed systems
13
13
  - ...
14
+
15
+ ## Installation
16
+ pyRFtk is available as a pip package:
17
+
18
+ ```sh
19
+ pip install pyRFtk
20
+ ```
21
+
22
+ Or using your favorite distribution platform
14
23
 
15
24
  ## Authors
16
25
  The code was developed by RF-engineer Frederic Durodie and later
17
26
  on refactored, packaged and documented by Arthur Adriaens
27
+
28
+ ## Example usage
29
+ This code was extensively used for the paper [An automatic matching system for the ICRF antenna at TOMAS: Development and experimental proof](https://doi.org/10.1016/j.fusengdes.2025.114840), the code for which may be found in the examples folder.
@@ -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.7"
6
+ version = "2.0.9"
7
7
  authors = [
8
8
  { name="Frederic Durodie", email="frederic.durodie@rma.ac.be" },
9
9
  { name="Arthur Adriaens", email="arthur.adriaens@mil.be" },
@@ -17,3 +17,5 @@ classifiers = [
17
17
  ]
18
18
  [project.urls]
19
19
  "Homepage" = "https://lpp-erm-kms.github.io/pyrftk/"
20
+ [tool.hatch.build]
21
+ exclude = ["docs", "tests", "examples"]
@@ -1,4 +1,4 @@
1
- __updated__ = "2025-01-21 15:58:36"
1
+ __updated__ = "2026-05-20 14:58:47"
2
2
 
3
3
  import numpy as np
4
4
  import re
@@ -349,14 +349,15 @@ def ReadTSF(src, **kwargs):
349
349
 
350
350
  ## do some checking
351
351
  nZcs, nZbase = 0, 0
352
- if len(Zcs) and (nZcs := Zcs.shape[1]):
352
+ if len(Zcs) and (nZcs := np.array(Zcs).shape[1]):
353
353
  # Zcs (and probably gammas) were present in the file
354
354
  if Zbase is not None:
355
355
  # there was also a R ... in the format
356
356
  if (nZbase := len(Zbase) if hasattr(Zbase, '__iter__') else 1) != nZcs :
357
- warn(f'\nInconsistent length of the Zcs ({nZcs}) comments and the '
358
- f'format supplied reference impedance R ({nZbase})',
359
- stacklevel=4)
357
+ if False:
358
+ warn(f'\nInconsistent length of the Zcs ({nZcs}) comments and the '
359
+ f'format supplied reference impedance R ({nZbase})',
360
+ stacklevel=4)
360
361
  else:
361
362
  # numbers match ... but do the values
362
363
  if nZbase == 1:
@@ -376,7 +377,9 @@ def ReadTSF(src, **kwargs):
376
377
  if nZbase == 1 and nZcs != 1:
377
378
  err = []
378
379
 
379
-
380
+ else: # this should be the case when no Zcs or gammas are present
381
+ nZbase = len(Zlist)
382
+
380
383
 
381
384
  # if the data type is Z or Y we need to convert to S
382
385
 
@@ -397,6 +400,7 @@ def ReadTSF(src, **kwargs):
397
400
 
398
401
  elif Zbase is not None and (nZbase == 1 or nZbase == Ss.shape[1]):
399
402
  Ss = ConvertGeneral(TZbase if TZbase else 50., Ss, Zbase, 'P', 'V')
403
+ # print(f'have converted the data from {Zbase} in the touchstone to {TZbase}')
400
404
 
401
405
  elif Zbase is None: # No Zcs and Zbase is None:
402
406
  Ss = ConvertGeneral(TZbase if TZbase else 50., Ss, Zcs, 'P', 'V')
@@ -404,6 +408,7 @@ def ReadTSF(src, **kwargs):
404
408
  else:
405
409
  logit['ERROR'] and tLogger.error(f'len(Zcs)[{len(Zcs)}] != N[{N}]')
406
410
  logit['ERROR'] and tLogger.error(f'Zcs={Zcs}')
411
+ raise ValueError('in ReadTSF: please specify Zbase')
407
412
 
408
413
 
409
414
  # set the portnames
@@ -440,6 +445,7 @@ def ReadTSF(src, **kwargs):
440
445
  debug and tLogger.debug(ident(f'set ports to {ports}'))
441
446
 
442
447
  debug and tLogger.debug(ident(f'< [CommonLib.ReadTSF]',-1))
448
+
443
449
  return {
444
450
  "ports" : ports,
445
451
  "fs" : fs,
@@ -95,6 +95,7 @@ def WriteTSF(object, path2tsf=None,
95
95
  num_format = ('8.4f', '10.7f', '10.7f')
96
96
 
97
97
  tnumfmt = f'%{num_format[1]} %{num_format[2]} '
98
+ leadspaces = ' '*(1 + int(num_format[0].split('.')[0]))
98
99
 
99
100
  for k,fk in enumerate(fs):
100
101
  s += (f'%{num_format[0]}' % (fk / fscale)) + ' '
@@ -106,7 +107,7 @@ def WriteTSF(object, path2tsf=None,
106
107
  s += tnumfmt % (np.real(dij),np.imag(dij))
107
108
 
108
109
  elif fmt == 'DB':
109
- s += tnumfmt% (20.*np.log10(np.abs(dij)),
110
+ s += tnumfmt % (20.*np.log10(np.abs(dij)),
110
111
  np.angle(dij,1))
111
112
 
112
113
  else: # can only be MA
@@ -115,12 +116,12 @@ def WriteTSF(object, path2tsf=None,
115
116
  if (kc % 4 == 3) and (kc is not nports-1):
116
117
  if kc == 3:
117
118
  s += ' ! row %d' % (kr+1)
118
- s += '\n'+' '*10
119
+ s += '\n' + leadspaces
119
120
 
120
121
  if nports > 2:
121
122
  s += '\n'
122
123
  if kr != nports-1:
123
- s += ' '*9
124
+ s += leadspaces
124
125
 
125
126
  s += '\n'
126
127
 
@@ -1,6 +1,6 @@
1
- __updated__ = "2025-01-24 07:58:36"
1
+ __updated__ = "2026-04-24 09:20:26"
2
2
 
3
- # print('\n*** using local copy of pyRFtk ***\n')
3
+ print('\n*** using local copy of pyRFtk ***\n')
4
4
 
5
5
  from .config import tLogger, setLogLevel, logit, ident, _newID, logident
6
6
  from .rfBase import rfBase
@@ -1,4 +1,6 @@
1
- __updated__ = "2023-11-09 10:00:05"
1
+ __updated__ = "2026-05-19 11:11:41"
2
+
3
+ #FIXME: addblock of a np.array fails because of xpos issues (also __str__ fails)
2
4
 
3
5
  import numpy as np
4
6
  import matplotlib.pyplot as plt
@@ -292,6 +294,30 @@ class rfCircuit(rfBase):
292
294
 
293
295
  return obj
294
296
 
297
+ #==============================================================================================
298
+ #
299
+ # o b j e c t
300
+ #
301
+ def object(self,path):
302
+ """object
303
+
304
+ returns the object pointed to by path
305
+
306
+ eg. rfCircuit_object = self.object('block1.block2. ... .blockN')
307
+
308
+ is equivalent to
309
+
310
+ rfCircuit_object = \
311
+ self.blocks['block1']['object'].blocks['block2']['object']. ... .blocks['blockN']['object']
312
+
313
+ Note this is similar to findObj
314
+ """
315
+ obj = self
316
+ for blk in path.split('.'):
317
+ obj = obj.blocks[blk]['object']
318
+
319
+ return obj
320
+
295
321
  #===========================================================================
296
322
  #
297
323
  # _ s u b s t p o r t s
@@ -692,8 +718,12 @@ class rfCircuit(rfBase):
692
718
 
693
719
  # update the self.xpos
694
720
  # self.xpos = []
695
- for p, x in zip(oports, RFobj.xpos):
696
- self.xpos.append(relpos + x)
721
+ if hasattr(RFobj,'xpos'):
722
+ for p, x in zip(oports, RFobj.xpos):
723
+ self.xpos.append(relpos + x)
724
+ else:
725
+ for p in oports:
726
+ self.xpos.append(relpos)
697
727
 
698
728
  _debug_ and tLogger.debug(ident(
699
729
  f'< [circuit.addblock] (inserted a new block)', -1
@@ -59,6 +59,8 @@ class rfGTL(rfCircuit):
59
59
 
60
60
  with open(path2model,'r') as f:
61
61
  self.model = ast.literal_eval(f.read())
62
+
63
+ pprint(self.model)
62
64
 
63
65
  try:
64
66
  self.GTL = self.model[self.objkey]['GTL']
@@ -1,4 +1,6 @@
1
- __updated__ = "2023-11-08 11:19:50"
1
+ __updated__ = "2026-05-20 14:05:43"
2
+
3
+ #TODO: add the possibility to fill doing rfObject(fs=[ ...], Ss=[ ... ])
2
4
 
3
5
  if __name__ == '__main__':
4
6
  import sys
@@ -60,9 +62,9 @@ class rfObject():
60
62
  and
61
63
 
62
64
  excitation = {port1:a1, ... }
63
- Vamx, rfObject.maxV(fHz, excitation)
65
+ Vmax, rfObject.maxV(fHz, excitation)
64
66
 
65
-
67
+ [note code partially debugged using co-pilot (GPT-5 mini)]
66
68
  """
67
69
  #===========================================================================
68
70
  #
@@ -85,6 +87,8 @@ class rfObject():
85
87
  fixme: no parameters to set the Zcs and Gms port properties
86
88
  """
87
89
 
90
+ self.got_args = False
91
+
88
92
  if not hasattr(self,'args'):
89
93
  self.args = args
90
94
 
@@ -93,12 +97,76 @@ class rfObject():
93
97
 
94
98
  self.Id = kwargs.pop('Id',f'{type(self).__name__}_{_newID()}')
95
99
 
100
+ # if only an arg is given -> convert it (type cast) to an rfObject
101
+ # this eg to convert a list/numpy array to an rfOject
102
+ #
103
+ # obj = rfObject(numpy.array([[0,1],[1,0]])
104
+ # obj.getS(fs) returns [[0,1],[1,0]] for all frequenies fs
105
+ #
106
+ # what could be valid kwargs ?
107
+ #
108
+ # ports, xpos, Zbase
109
+
110
+ # print(f'rfObject: Nargs = {len(args)}')
111
+
112
+ if Nargs := len(args):
113
+ if Nargs == 1:
114
+ # check type of arg
115
+ if not isinstance(args[0], (np.ndarray, np.matrix, list)):
116
+ raise TypeError(
117
+ f'rfObject: args[0] must be of type list, numpy.array or '
118
+ f'numpy.matrix; got {type(args[0])}')
119
+
120
+ arg0 = np.array(args[0], dtype=complex)
121
+
122
+ if len(arg0.shape) != 2:
123
+ raise TypeError(
124
+ f'rfObject: arg[0] must must represent a square 2-dim '
125
+ f'array; got {arg0.shape}')
126
+
127
+ if arg0.shape[0] != arg0.shape[1]:
128
+ raise TypeError(
129
+ f'rfObject: arg[0] must must represent a square 2-dim '
130
+ f'array; got {arg0.shape[0]} x {arg0.shape[1]}')
131
+
132
+ self.N = arg0.shape[0]
133
+ self.ports = [f'm{k:03d}' for k in range(1,self.N+1)]
134
+ self.Ss = np.array([arg0, arg0])
135
+ self.fs = np.array([0, 1e18])
136
+
137
+ self.got_args = True
138
+
139
+ elif Nargs == 2:
140
+ raise NotImplementedError()
141
+
142
+ else:
143
+ raise TypeError(f"rfObject: at most 2 args expected; got {Nargs}")
144
+
96
145
  #TODO: validate allowed port names
97
- self.ports = kwargs.get('ports',[])
98
- self.alias = {}
99
- if isinstance(self.ports, str):
100
- self.ports = self.ports.split()
101
- self.N = len(self.ports)
146
+
147
+ self.alias = {} #FIXME: what was the idea again ... does not appear to be used
148
+
149
+ _ports = kwargs.get('ports', [])
150
+ if isinstance(_ports, str):
151
+ _ports = _ports.split()
152
+ _N = len(_ports)
153
+
154
+ # If the object was created from an argument (e.g. an S-matrix),
155
+ # self.N and self.ports may already be set. Only override ports
156
+ # from kwargs when the caller actually provided a non-empty ports list.
157
+ if hasattr(self, 'N'):
158
+ if _N:
159
+ if _N != self.N:
160
+ raise ValueError(
161
+ f'rfObject: the supplied args suggests a {self.N} port '
162
+ f'object but the supplied port kwarg suggests a {_N} port one')
163
+ # override only when ports were explicitly provided
164
+ self.ports = _ports
165
+ else:
166
+ # no N previously set -> use provided ports count (may be zero)
167
+ self.N = _N
168
+ # assign provided ports (may be empty list)
169
+ self.ports = _ports
102
170
 
103
171
  self.Zbase = kwargs.get('Zbase', rcparams['Zbase'])
104
172
  self.funit = kwargs.get('funit', rcparams['funit'])
@@ -107,13 +175,17 @@ class rfObject():
107
175
 
108
176
  self.interp = kwargs.get('interp',rcparams['interp'])
109
177
  self.interpkws = kwargs.get('interpkws',rcparams['interpkws'])
110
-
178
+
111
179
  self.xpos = kwargs.get('xpos', [0.]*self.N)
112
-
180
+
113
181
  # initialize arrays and stuff
114
- self.fs = np.array([],dtype=float).reshape((0,))
182
+ if not hasattr(self,'fs'):
183
+ self.fs = np.array([],dtype=float).reshape((0,))
115
184
  self.sorted = True
116
- self.Ss = np.array([], dtype=complex).reshape((0, self.N, self.N))
185
+
186
+ if not hasattr(self, 'Ss'):
187
+ self.Ss = np.array([], dtype=complex).reshape((0, self.N, self.N))
188
+
117
189
  self.Zcs = np.array([], dtype=complex).reshape(0, self.N)
118
190
  self.Gms = np.array([], dtype=complex).reshape(0, self.N)
119
191
  self.process_kwargs()
@@ -121,13 +193,22 @@ class rfObject():
121
193
 
122
194
  self.touchstone = kwargs.get('touchstone', None)
123
195
  if self.touchstone:
196
+ if self.got_args:
197
+ raise ValueError(
198
+ f'rfObject: touchstone is not compatible with the use of args')
199
+
124
200
  Tkwargs = {'Zbase': self.Zbase, 'funit':'HZ'}
201
+ # FIXME: if Zbase is not supplied it defaults to 50 Ohm but that is
202
+ # not taking into account the information supplied in the
203
+ # touchstone !
204
+
125
205
  for (kw, value) in kwargs.items():
126
206
  if kw in Tkwargs:
127
207
  Tkwargs[kw] = value
128
208
 
129
209
  self.read_tsf(self.touchstone, **Tkwargs)
130
-
210
+
211
+
131
212
  self.interpOK = False
132
213
 
133
214
  self.f, self.S = None, None
@@ -214,7 +295,10 @@ class rfObject():
214
295
  for kw, val in self.kwargs.items():
215
296
  s += ',\n'
216
297
  s += ' %s = %r' % (kw,val)
298
+ if 'Zbase' not in self.kwargs:
299
+ s += f'\n Zbase = {self.Zbase} [default]'
217
300
  s += '\n)'
301
+
218
302
  return s
219
303
 
220
304
  #===========================================================================
@@ -673,3 +757,4 @@ class rfObject():
673
757
  f'pyRFtk2.rfObject.deembed: port(s) {",".join([p for p in ports])}'
674
758
  ' not found.')
675
759
 
760
+
@@ -1,20 +0,0 @@
1
- # Minimal makefile for Sphinx documentation
2
- #
3
-
4
- # You can set these variables from the command line, and also
5
- # from the environment for the first two.
6
- SPHINXOPTS ?=
7
- SPHINXBUILD ?= sphinx-build
8
- SOURCEDIR = source
9
- BUILDDIR = build
10
-
11
- # Put it first so that "make" without argument is like "make help".
12
- help:
13
- @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14
-
15
- .PHONY: help Makefile
16
-
17
- # Catch-all target: route all unknown targets to Sphinx using the new
18
- # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19
- %: Makefile
20
- @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
@@ -1,4 +0,0 @@
1
- # Sphinx build info version 1
2
- # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
3
- config: cb251cce34174a1cdced4cac6de7a8a9
4
- tags: 645f666f9bcd5a90fca523b33c5a78b7
File without changes
@@ -1,103 +0,0 @@
1
- <!DOCTYPE html>
2
- <html class="writer-html5" lang="en" >
3
- <head>
4
- <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
5
-
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Arc Detection &mdash; pyRFtk 2.0.0 documentation</title>
8
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
9
- <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
10
- <!--[if lt IE 9]>
11
- <script src="_static/js/html5shiv.min.js"></script>
12
- <![endif]-->
13
-
14
- <script src="_static/jquery.js?v=5d32c60e"></script>
15
- <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
16
- <script src="_static/documentation_options.js?v=51b770b3"></script>
17
- <script src="_static/doctools.js?v=888ff710"></script>
18
- <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
19
- <script src="_static/js/theme.js"></script>
20
- <link rel="index" title="Index" href="genindex.html" />
21
- <link rel="search" title="Search" href="search.html" />
22
- </head>
23
-
24
- <body class="wy-body-for-nav">
25
- <div class="wy-grid-for-nav">
26
- <nav data-toggle="wy-nav-shift" class="wy-nav-side">
27
- <div class="wy-side-scroll">
28
- <div class="wy-side-nav-search" >
29
-
30
-
31
-
32
- <a href="index.html" class="icon icon-home">
33
- pyRFtk
34
- </a>
35
- <div role="search">
36
- <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
37
- <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
38
- <input type="hidden" name="check_keywords" value="yes" />
39
- <input type="hidden" name="area" value="default" />
40
- </form>
41
- </div>
42
- </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
43
- <ul>
44
- <li class="toctree-l1"><a class="reference internal" href="Tutorials.html">Tutorials</a></li>
45
- </ul>
46
-
47
- </div>
48
- </div>
49
- </nav>
50
-
51
- <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
52
- <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
53
- <a href="index.html">pyRFtk</a>
54
- </nav>
55
-
56
- <div class="wy-nav-content">
57
- <div class="rst-content">
58
- <div role="navigation" aria-label="Page navigation">
59
- <ul class="wy-breadcrumbs">
60
- <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
61
- <li class="breadcrumb-item active">Arc Detection</li>
62
- <li class="wy-breadcrumbs-aside">
63
- <a href="_sources/Arcs.rst.txt" rel="nofollow"> View page source</a>
64
- </li>
65
- </ul>
66
- <hr/>
67
- </div>
68
- <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
69
- <div itemprop="articleBody">
70
-
71
- <section id="arc-detection">
72
- <h1>Arc Detection<a class="headerlink" href="#arc-detection" title="Link to this heading"></a></h1>
73
- </section>
74
-
75
-
76
- </div>
77
- </div>
78
- <footer>
79
-
80
- <hr/>
81
-
82
- <div role="contentinfo">
83
- <p>&#169; Copyright 2023, Frederic Durodie and Arthur Adriaens.</p>
84
- </div>
85
-
86
- Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
87
- <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
88
- provided by <a href="https://readthedocs.org">Read the Docs</a>.
89
-
90
-
91
- </footer>
92
- </div>
93
- </div>
94
- </section>
95
- </div>
96
- <script>
97
- jQuery(function () {
98
- SphinxRtdTheme.Navigation.enable(true);
99
- });
100
- </script>
101
-
102
- </body>
103
- </html>