SLiCAP 3.3__py3-none-any.whl

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 (242) hide show
  1. SLiCAP/SLiCAP.py +175 -0
  2. SLiCAP/SLiCAPconfigure.py +612 -0
  3. SLiCAP/SLiCAPdesignData.py +297 -0
  4. SLiCAP/SLiCAPexecute.py +1704 -0
  5. SLiCAP/SLiCAPfc.py +316 -0
  6. SLiCAP/SLiCAPgschem.py +64 -0
  7. SLiCAP/SLiCAPhtml.py +1148 -0
  8. SLiCAP/SLiCAPinstruction.py +1714 -0
  9. SLiCAP/SLiCAPkicad.py +190 -0
  10. SLiCAP/SLiCAPlatex.py +810 -0
  11. SLiCAP/SLiCAPlex.py +326 -0
  12. SLiCAP/SLiCAPltspice.py +85 -0
  13. SLiCAP/SLiCAPmath.py +1947 -0
  14. SLiCAP/SLiCAPmatrices.py +535 -0
  15. SLiCAP/SLiCAPngspice.py +536 -0
  16. SLiCAP/SLiCAPnotebook.py +43 -0
  17. SLiCAP/SLiCAPplots.py +1743 -0
  18. SLiCAP/SLiCAPprotos.py +941 -0
  19. SLiCAP/SLiCAPrst.py +812 -0
  20. SLiCAP/SLiCAPshell.py +1374 -0
  21. SLiCAP/SLiCAPstatespace.py +333 -0
  22. SLiCAP/SLiCAPsvgTools.py +127 -0
  23. SLiCAP/SLiCAPyacc.py +1325 -0
  24. SLiCAP/__init__.py +7 -0
  25. SLiCAP/files/LICENCE.txt +10 -0
  26. SLiCAP/files/LTspice/SLABCD.asy +35 -0
  27. SLiCAP/files/LTspice/SLC.asy +21 -0
  28. SLiCAP/files/LTspice/SLD.asy +19 -0
  29. SLiCAP/files/LTspice/SLE.asy +36 -0
  30. SLiCAP/files/LTspice/SLEZ.asy +44 -0
  31. SLiCAP/files/LTspice/SLF.asy +42 -0
  32. SLiCAP/files/LTspice/SLG.asy +40 -0
  33. SLiCAP/files/LTspice/SLH.asy +38 -0
  34. SLiCAP/files/LTspice/SLHZ.asy +46 -0
  35. SLiCAP/files/LTspice/SLI.asy +28 -0
  36. SLiCAP/files/LTspice/SLJ.asy +26 -0
  37. SLiCAP/files/LTspice/SLJ_noise.asy +30 -0
  38. SLiCAP/files/LTspice/SLK.asy +12 -0
  39. SLiCAP/files/LTspice/SLL.asy +23 -0
  40. SLiCAP/files/LTspice/SLM.asy +33 -0
  41. SLiCAP/files/LTspice/SLMD.asy +46 -0
  42. SLiCAP/files/LTspice/SLM_noise.asy +30 -0
  43. SLiCAP/files/LTspice/SLN.asy +38 -0
  44. SLiCAP/files/LTspice/SLN_dcvar.asy +72 -0
  45. SLiCAP/files/LTspice/SLN_noise.asy +48 -0
  46. SLiCAP/files/LTspice/SLO.asy +29 -0
  47. SLiCAP/files/LTspice/SLO_dcvar.asy +31 -0
  48. SLiCAP/files/LTspice/SLO_noise.asy +31 -0
  49. SLiCAP/files/LTspice/SLQ.asy +30 -0
  50. SLiCAP/files/LTspice/SLQD.asy +40 -0
  51. SLiCAP/files/LTspice/SLQ_noise.asy +27 -0
  52. SLiCAP/files/LTspice/SLR.asy +27 -0
  53. SLiCAP/files/LTspice/SLR_r.asy +27 -0
  54. SLiCAP/files/LTspice/SLT.asy +44 -0
  55. SLiCAP/files/LTspice/SLV.asy +24 -0
  56. SLiCAP/files/LTspice/SLW.asy +35 -0
  57. SLiCAP/files/LTspice/SLXJ.asy +26 -0
  58. SLiCAP/files/LTspice/SLXM.asy +35 -0
  59. SLiCAP/files/LTspice/SLXMD.asy +48 -0
  60. SLiCAP/files/LTspice/SLXMPN.asy +35 -0
  61. SLiCAP/files/LTspice/SLXM_V.asy +35 -0
  62. SLiCAP/files/LTspice/SLXQ.asy +32 -0
  63. SLiCAP/files/LTspice/SLXQD.asy +42 -0
  64. SLiCAP/files/LTspice/SLiCAPsymbolsLTSpice.asc +108 -0
  65. SLiCAP/files/gSchem/gnet-spice-noqsi-master/README.md +9 -0
  66. SLiCAP/files/gSchem/gnet-spice-noqsi-master/gnet-spice-noqsi.scm +608 -0
  67. SLiCAP/files/gSchem/gnet-spice-noqsi-master/install.sh +5 -0
  68. SLiCAP/files/gSchem/gnet-spice-noqsi-master/scheme-path.scm +2 -0
  69. SLiCAP/files/gSchem/gnet-spice-noqsi-master/test/model-test.sch +30 -0
  70. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Models/nch.sym +48 -0
  71. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Models/openIP.inc +1106 -0
  72. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Models/pch.sym +48 -0
  73. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Models/submicron.inc +55 -0
  74. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Schematic/Comparator.sch +317 -0
  75. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Schematic/DISCRI.sch +237 -0
  76. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Simulation/DISCRItest.sch +129 -0
  77. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Simulation/control.cir +5 -0
  78. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Simulation/geda.conf +2 -0
  79. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/BIAS1-1.sym +59 -0
  80. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/Comparator.sym +47 -0
  81. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/DISCRI.sym +94 -0
  82. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/EDFFP-1.sym +96 -0
  83. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/INV1P-1.sym +52 -0
  84. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/NANDP-1.sym +63 -0
  85. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/NORP-1.sym +64 -0
  86. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/Noqsi-title-B.sym +41 -0
  87. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/RSFF1-1.sym +71 -0
  88. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/Vdd.sym +15 -0
  89. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/Vdd1.sym +15 -0
  90. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/Vss.sym +15 -0
  91. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/ASIC/Symbols/Vss1.sym +15 -0
  92. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/BBamp/Schematic/BBamp.sch +269 -0
  93. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/BBamp/Schematic/Board.sch +54 -0
  94. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/BBamp/Simulation/Test.sch +131 -0
  95. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/BBamp/Simulation/geda.conf +2 -0
  96. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/BBamp/Simulation/transistors.lib +54 -0
  97. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/BBamp/Symbols/BBamp.sym +58 -0
  98. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/BBamp/Symbols/Noqsi-title-B.sym +41 -0
  99. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/BBamp/Symbols/pwrjack-RAPC712.sym +45 -0
  100. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/HelloWorld/HelloWorld.sch +50 -0
  101. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/Images/BBamp.png +0 -0
  102. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/Images/Board.png +0 -0
  103. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/Images/Comparator.png +0 -0
  104. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/Images/DISCRI.png +0 -0
  105. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/Images/DISCRItest.png +0 -0
  106. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/Images/HelloWorld.png +0 -0
  107. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/Images/Test.png +0 -0
  108. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/Images/dB.jpg +0 -0
  109. SLiCAP/files/gSchem/gnet-spice-noqsi-master/tutorial/Images/dB.tiff +0 -0
  110. SLiCAP/files/gSchem/symbols/0.sym +19 -0
  111. SLiCAP/files/gSchem/symbols/ABCD.sym +84 -0
  112. SLiCAP/files/gSchem/symbols/C.sym +31 -0
  113. SLiCAP/files/gSchem/symbols/D.sym +40 -0
  114. SLiCAP/files/gSchem/symbols/DevicesGschem.eps +1998 -0
  115. SLiCAP/files/gSchem/symbols/DevicesGschem.sch +493 -0
  116. SLiCAP/files/gSchem/symbols/E.sym +63 -0
  117. SLiCAP/files/gSchem/symbols/EZ.sym +68 -0
  118. SLiCAP/files/gSchem/symbols/F.sym +70 -0
  119. SLiCAP/files/gSchem/symbols/G.sym +66 -0
  120. SLiCAP/files/gSchem/symbols/G_g.sym +66 -0
  121. SLiCAP/files/gSchem/symbols/H.sym +65 -0
  122. SLiCAP/files/gSchem/symbols/HZ.sym +71 -0
  123. SLiCAP/files/gSchem/symbols/I.sym +40 -0
  124. SLiCAP/files/gSchem/symbols/J.sym +51 -0
  125. SLiCAP/files/gSchem/symbols/K.sym +18 -0
  126. SLiCAP/files/gSchem/symbols/L.sym +32 -0
  127. SLiCAP/files/gSchem/symbols/M.sym +64 -0
  128. SLiCAP/files/gSchem/symbols/MD-H.sym +78 -0
  129. SLiCAP/files/gSchem/symbols/MD-V.sym +78 -0
  130. SLiCAP/files/gSchem/symbols/M_noise.sym +50 -0
  131. SLiCAP/files/gSchem/symbols/N.sym +62 -0
  132. SLiCAP/files/gSchem/symbols/N_dcvar.sym +93 -0
  133. SLiCAP/files/gSchem/symbols/N_noise.sym +66 -0
  134. SLiCAP/files/gSchem/symbols/O.sym +49 -0
  135. SLiCAP/files/gSchem/symbols/O_dcvar.sym +51 -0
  136. SLiCAP/files/gSchem/symbols/O_noise.sym +49 -0
  137. SLiCAP/files/gSchem/symbols/Q.sym +58 -0
  138. SLiCAP/files/gSchem/symbols/QD-H.sym +70 -0
  139. SLiCAP/files/gSchem/symbols/QD-V.sym +68 -0
  140. SLiCAP/files/gSchem/symbols/Q_noise.sym +46 -0
  141. SLiCAP/files/gSchem/symbols/Q_noise_LF.sym +50 -0
  142. SLiCAP/files/gSchem/symbols/R.sym +38 -0
  143. SLiCAP/files/gSchem/symbols/R_r.sym +38 -0
  144. SLiCAP/files/gSchem/symbols/T.sym +70 -0
  145. SLiCAP/files/gSchem/symbols/V.sym +37 -0
  146. SLiCAP/files/gSchem/symbols/W.sym +62 -0
  147. SLiCAP/files/gSchem/symbols/XJ.sym +53 -0
  148. SLiCAP/files/gSchem/symbols/XM.sym +68 -0
  149. SLiCAP/files/gSchem/symbols/XMD-H.sym +82 -0
  150. SLiCAP/files/gSchem/symbols/XMD-V.sym +82 -0
  151. SLiCAP/files/gSchem/symbols/XMV.sym +72 -0
  152. SLiCAP/files/gSchem/symbols/XQ.sym +70 -0
  153. SLiCAP/files/gSchem/symbols/XQD-H.sym +72 -0
  154. SLiCAP/files/gSchem/symbols/XQD-V.sym +72 -0
  155. SLiCAP/files/gSchem/symbols/Z.sym +30 -0
  156. SLiCAP/files/gSchem/symbols/detectorDef.sym +10 -0
  157. SLiCAP/files/gSchem/symbols/include.sym +10 -0
  158. SLiCAP/files/gSchem/symbols/lgrefDef.sym +10 -0
  159. SLiCAP/files/gSchem/symbols/modelDef.sym +10 -0
  160. SLiCAP/files/gSchem/symbols/parDef.sym +10 -0
  161. SLiCAP/files/gSchem/symbols/sourceDef.sym +10 -0
  162. SLiCAP/files/html/css/slicap.css +153 -0
  163. SLiCAP/files/html/img/Grid.png +0 -0
  164. SLiCAP/files/kicad/SLiCAP.kicad_prl +83 -0
  165. SLiCAP/files/kicad/SLiCAP.kicad_pro +407 -0
  166. SLiCAP/files/kicad/SLiCAP.kicad_sch +14196 -0
  167. SLiCAP/files/kicad/SLiCAP.kicad_sym +10314 -0
  168. SLiCAP/files/lepton-eda/SLiCAPcomponents.sch +532 -0
  169. SLiCAP/files/lepton-eda/symbols/0.sym +19 -0
  170. SLiCAP/files/lepton-eda/symbols/ABCD.sym +84 -0
  171. SLiCAP/files/lepton-eda/symbols/C.sym +31 -0
  172. SLiCAP/files/lepton-eda/symbols/D.sym +40 -0
  173. SLiCAP/files/lepton-eda/symbols/E.sym +63 -0
  174. SLiCAP/files/lepton-eda/symbols/EZ.sym +68 -0
  175. SLiCAP/files/lepton-eda/symbols/F.sym +70 -0
  176. SLiCAP/files/lepton-eda/symbols/G.sym +66 -0
  177. SLiCAP/files/lepton-eda/symbols/G_g.sym +66 -0
  178. SLiCAP/files/lepton-eda/symbols/H.sym +65 -0
  179. SLiCAP/files/lepton-eda/symbols/HZ.sym +71 -0
  180. SLiCAP/files/lepton-eda/symbols/I.sym +40 -0
  181. SLiCAP/files/lepton-eda/symbols/J.sym +51 -0
  182. SLiCAP/files/lepton-eda/symbols/K.sym +18 -0
  183. SLiCAP/files/lepton-eda/symbols/L.sym +32 -0
  184. SLiCAP/files/lepton-eda/symbols/M.sym +64 -0
  185. SLiCAP/files/lepton-eda/symbols/MD-H.sym +78 -0
  186. SLiCAP/files/lepton-eda/symbols/MD-V.sym +78 -0
  187. SLiCAP/files/lepton-eda/symbols/M_noise.sym +50 -0
  188. SLiCAP/files/lepton-eda/symbols/N.sym +62 -0
  189. SLiCAP/files/lepton-eda/symbols/N_dcvar.sym +93 -0
  190. SLiCAP/files/lepton-eda/symbols/N_noise.sym +66 -0
  191. SLiCAP/files/lepton-eda/symbols/O.sym +49 -0
  192. SLiCAP/files/lepton-eda/symbols/O_dcvar.sym +51 -0
  193. SLiCAP/files/lepton-eda/symbols/O_noise.sym +49 -0
  194. SLiCAP/files/lepton-eda/symbols/Q.sym +58 -0
  195. SLiCAP/files/lepton-eda/symbols/QD-H.sym +70 -0
  196. SLiCAP/files/lepton-eda/symbols/QD-V.sym +68 -0
  197. SLiCAP/files/lepton-eda/symbols/Q_noise.sym +46 -0
  198. SLiCAP/files/lepton-eda/symbols/R.sym +38 -0
  199. SLiCAP/files/lepton-eda/symbols/R_r.sym +38 -0
  200. SLiCAP/files/lepton-eda/symbols/T.sym +70 -0
  201. SLiCAP/files/lepton-eda/symbols/V.sym +37 -0
  202. SLiCAP/files/lepton-eda/symbols/W.sym +62 -0
  203. SLiCAP/files/lepton-eda/symbols/XJ.sym +53 -0
  204. SLiCAP/files/lepton-eda/symbols/XM.sym +68 -0
  205. SLiCAP/files/lepton-eda/symbols/XMD-H.sym +82 -0
  206. SLiCAP/files/lepton-eda/symbols/XMD-V.sym +82 -0
  207. SLiCAP/files/lepton-eda/symbols/XMV.sym +72 -0
  208. SLiCAP/files/lepton-eda/symbols/XQD-H.sym +72 -0
  209. SLiCAP/files/lepton-eda/symbols/XQD-V.sym +72 -0
  210. SLiCAP/files/lepton-eda/symbols/Z.sym +30 -0
  211. SLiCAP/files/lepton-eda/symbols/detectorDef.sym +10 -0
  212. SLiCAP/files/lepton-eda/symbols/include.sym +10 -0
  213. SLiCAP/files/lepton-eda/symbols/lgrefDef.sym +10 -0
  214. SLiCAP/files/lepton-eda/symbols/modelDef.sym +10 -0
  215. SLiCAP/files/lepton-eda/symbols/parDef.sym +10 -0
  216. SLiCAP/files/lepton-eda/symbols/sourceDef.sym +10 -0
  217. SLiCAP/files/lib/Grid.png +0 -0
  218. SLiCAP/files/lib/SLiCAP.lib +519 -0
  219. SLiCAP/files/lib/SLiCAPmodels.lib +166 -0
  220. SLiCAP/files/lib/slicap.css +153 -0
  221. SLiCAP/files/sphinx/Makefile +19 -0
  222. SLiCAP/files/sphinx/_static/custom.css +6 -0
  223. SLiCAP/files/sphinx/_static/handsontable.full.min.css +31 -0
  224. SLiCAP/files/sphinx/_static/handsontable.full.min.js +89 -0
  225. SLiCAP/files/sphinx/_static/html_logo.png +0 -0
  226. SLiCAP/files/sphinx/_templates/layout.html +11 -0
  227. SLiCAP/files/sphinx/_templates/table.html +16 -0
  228. SLiCAP/files/sphinx/conf.py +50 -0
  229. SLiCAP/files/sphinx/img/SLiCAP-h1.svg +154 -0
  230. SLiCAP/files/sphinx/img/SLiCAP.svg +149 -0
  231. SLiCAP/files/sphinx/img/colorCode.svg +242 -0
  232. SLiCAP/files/sphinx/index.rst +10 -0
  233. SLiCAP/files/sphinx/make.bat +35 -0
  234. SLiCAP/files/sphinx/source/Makefile +19 -0
  235. SLiCAP/files/sphinx/source/_templates/table.html +16 -0
  236. SLiCAP/files/sphinx/source/make.bat +35 -0
  237. SLiCAP/files/tex/SLiCAPdata/TEXsubstitutions.tex +1 -0
  238. SLiCAP/files/tex/preambuleSLiCAP.tex +122 -0
  239. slicap-3.3.dist-info/METADATA +116 -0
  240. slicap-3.3.dist-info/RECORD +242 -0
  241. slicap-3.3.dist-info/WHEEL +5 -0
  242. slicap-3.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,612 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ SLiCAP scripts for configuration management.
4
+
5
+ #. Main configuration is stored in ~/SLiCAP/SLiCAP.ini
6
+ #. Project configuration is stored in <project folder>/SLiCAP.ini
7
+
8
+ Configuration settings are imported as global (ini.<setting>)
9
+ """
10
+
11
+ import configparser
12
+ import os
13
+ import sys
14
+ import platform
15
+ import re
16
+ import inspect
17
+ import requests
18
+ from os.path import expanduser
19
+ from datetime import datetime
20
+ from sympy import Symbol
21
+ from time import time
22
+
23
+ if platform.system() == 'Windows':
24
+ import win32api
25
+ import windows_tools.installed_software as wi
26
+
27
+ TIMEOUT = 120
28
+ INSTALLVERSION = "3.2.4"
29
+
30
+ def _check_version():
31
+ """
32
+ Checks the version with the latest SLiCAP version from Git
33
+
34
+ Returns
35
+ -------
36
+ None.
37
+ """
38
+ latest = _get_latest_version()
39
+ if latest == "Unknown":
40
+ print("You are running SLiCAP version %s. Please check github for updates."%(INSTALLVERSION))
41
+ elif INSTALLVERSION != latest:
42
+ print("A new version of SLiCAP is available, please get it from 'https://github.com/SLiCAP/SLiCAP_python.git'.")
43
+ else:
44
+ print("SLiCAP Version matches with the latest release of SLiCAP on github.")
45
+ return str(latest)
46
+
47
+ def _get_latest_version():
48
+ """
49
+ Gets the SLiCAP version from Github
50
+
51
+ Returns
52
+ -------
53
+ String Version.
54
+ """
55
+ try:
56
+ response = requests.get("https://api.github.com/repos/SLiCAP/SLiCAP_python/releases/latest")
57
+ version = response.json()["tag_name"]
58
+ except BaseException:
59
+ print("Could not determine the latest available version of SLiCAP on github.")
60
+ version = "Unknown"
61
+ return version
62
+
63
+ def _find_installed_windows_software():
64
+ """
65
+ Searches for installed packages from the package list
66
+
67
+ Returns
68
+ -------
69
+ Dictionary with key-value pairs: key = package name, value = command
70
+ """
71
+ package_list = ['LTspice', 'KiCad', 'gEDA', 'NGspice']
72
+ commands = {}
73
+ search_list = []
74
+ # get list with installed apps
75
+ software_list = wi.get_installed_software()
76
+ # make a list of apps that we want to search for
77
+ for dct in software_list:
78
+ name = dct["name"]
79
+ if len(name) > 1:
80
+ name = name.split()[0]
81
+ if name in package_list:
82
+ search_list.append(name)
83
+ y_n = input("\nDo you have NGspice installed? [y/n] >>> ").lower()[0]
84
+ while y_n != 'y' and y_n != 'n':
85
+ y_n = input("\nPlease enter 'y' for 'yes' or 'n' for 'no' >>> ").lower()[0]
86
+ if y_n == 'y':
87
+ search_list.append('NGspice')
88
+ else:
89
+ commands['ngspice'] = ''
90
+ """
91
+ for package in search_list:
92
+ y_n = input("\nDo you want SLiCAP to search for the {} command? [y/n] >>> ".format(package)).lower()[0]
93
+ while y_n != 'y' and y_n != 'n':
94
+ y_n = input("\nPlease enter 'y' for 'yes' or 'n' for 'no' >>> ").lower()[0]
95
+ if y_n == 'y':
96
+ pass
97
+ else:
98
+ commands[package.lower()] = ''
99
+ """
100
+ # search for the command to start each app
101
+ if len(search_list) > 0:
102
+ found_all = False
103
+ t_start = time()
104
+ time_out = False
105
+ print("\nSearching installed software, this will time-out after {} seconds!\n".format(str(TIMEOUT)))
106
+ for drive in win32api.GetLogicalDriveStrings().split('\000')[:-1]:
107
+ for root, dirs, files in os.walk(drive):
108
+ t_now = time()
109
+ if t_now - t_start >TIMEOUT:
110
+ time_out = True
111
+ for name in dirs:
112
+ for package in search_list: # Only search for installed software
113
+ p_name = package.lower()
114
+ if p_name not in commands.keys():
115
+ #print("Searching for installation of:", package)
116
+ found = False
117
+ if package == 'LTspice':
118
+ if re.match('LT(S|s)pice*', name, flags=0):
119
+ if os.path.exists(os.path.join(root,name,'XVIIx64.exe')):
120
+ print("LTSpice command set as:", os.path.join(root,name,'XVIIx64.exe'))
121
+ commands[p_name] = os.path.join(root,name,'XVIIx64.exe')
122
+ found = True
123
+ elif os.path.exists(os.path.join(root,name,'LTspice.exe')):
124
+ print("LTSpice command set as:", os.path.join(root,name,'LTspice.exe'))
125
+ commands[p_name] = os.path.join(root,name,'LTspice.exe')
126
+ found = True
127
+ elif os.path.exists(os.path.join(root,name,'ltspice.exe')):
128
+ print("LTSpice command set as:", os.path.join(root,name,'ltspice.exe'))
129
+ commands[p_name] = os.path.join(root,name,'ltspice.exe')
130
+ found = True
131
+ elif package == 'KiCad':
132
+ try:
133
+ if re.match('KiCad', name, flags=0):
134
+ version=os.listdir(os.path.join(root, name))[0]
135
+ file_name = os.path.join(root, name, version, 'bin','kicad-cli.exe')
136
+ if os.path.exists(file_name):
137
+ print("KiCad command set as:", os.path.join(root,name,'kicad-cli.exe'))
138
+ commands[p_name] = file_name
139
+ found = True
140
+ except:
141
+ print("Could not find the KiCad command 'kicad-cli.exe'. " +
142
+ "Please add this command manually to the ~/SLiCAP/SLiCAP.ini file!")
143
+ elif package == 'gEDA':
144
+ if re.match('gEDA', name, flags=0):
145
+ file_name = os.path.join(root, name, 'gEDA', 'bin' ,'gnetlist.exe')
146
+ if os.path.exists(file_name):
147
+ print("gnetlist command set as:", os.path.join(root,name,'gnetlist.exe'))
148
+ commands[p_name] = file_name
149
+ found = True
150
+ elif package == 'NGspice':
151
+ if re.match('Spice64', name, flags=0):
152
+ file_name = os.path.join(root, name, 'bin' ,'ngspice.exe')
153
+ if os.path.exists(file_name):
154
+ print("NGspice command set as:", os.path.join(root,name,'ngspice.exe'))
155
+ commands[p_name] = file_name
156
+ found = True
157
+ if found:
158
+ # Stop walking is all packages are found
159
+ found_all = True
160
+ for item in search_list:
161
+ if item.lower() not in list(commands.keys()):
162
+ found_all = False
163
+ break
164
+ if found_all == True or time_out:
165
+ break
166
+ if found_all or time_out:
167
+ break
168
+ if found_all or time_out:
169
+ break
170
+ found_list = list(commands.keys())
171
+ if found_all:
172
+ print("SLiCAP found all installed apps!")
173
+ elif time_out:
174
+ print("\nSearching time for apps aborted due to time-out!\n")
175
+ for app in search_list:
176
+ if app.lower() not in found_list:
177
+ print("-", app, ": installed but not found")
178
+ print("\nIf you want SLiCAP to make calls to these apps, please edit " +
179
+ "the main configuration file: 'SLiCAP.ini' in the ~/SLiCAP/ " +
180
+ "folder. More information is available in the SLiCAP HTML help.")
181
+ # Complete the commands dictionary
182
+ if len(found_list) != len(package_list):
183
+ for package in package_list:
184
+ p_name = package.lower()
185
+ if p_name not in found_list:
186
+ commands[p_name] = ''
187
+ if package not in search_list:
188
+ print("-", package, ": not installed")
189
+ if len(search_list) != len(package_list):
190
+ print("After installation of missing apps, delete the 'SLiCAP.ini' " +
191
+ "file in the ~/SLiCAP/ folder. It will be recreated with the " +
192
+ "next SLiCAP import.")
193
+ commands['lepton-eda'] = ''
194
+ return commands
195
+
196
+ def _find_LTspice_wine():
197
+ """
198
+ Searches for LTspice under Linux or MacOS
199
+
200
+ Returns
201
+ -------
202
+ LTspice command
203
+ """
204
+ cmd = ''
205
+ try:
206
+ home = expanduser("~")
207
+ drives = [os.path.join(home, '.wine', 'drive_c')]
208
+ for drive in drives:
209
+ drive = os.path.join(drive, 'Program Files')
210
+ for root, dirs, files in os.walk(drive, topdown=True):
211
+ for name in dirs:
212
+ if re.match('LT(S|s)pice*', name, flags=0):
213
+ if os.path.exists(os.path.join(root,name,'XVIIx64.exe')):
214
+ cmd = os.path.join(root,name,'XVIIx64.exe')
215
+ elif os.path.exists(os.path.join(root,name,'LTspice.exe')):
216
+ cmd = os.path.join(root,name,'LTspice.exe')
217
+ elif os.path.exists(os.path.join(root,name,'ltspice.exe')):
218
+ cmd = os.path.join(root,name,'ltspice.exe')
219
+ return cmd
220
+ except:
221
+ pass
222
+ return cmd
223
+
224
+ def _find_installed_software():
225
+ system = platform.system()
226
+ commands = {}
227
+ commands['ltspice'] = _find_LTspice_wine()
228
+ commands['kicad'] = 'kicad-cli'
229
+ commands['geda'] = 'gnetlist'
230
+ commands['lepton-eda'] = 'lepton-cli'
231
+ commands['ngspice'] = 'ngspice'
232
+ if system != "Linux":
233
+ commands['kicad'] = '/Applications/KiCad/KiCad.app/Contents/MacOS/kicad-cli'
234
+ for key in commands.keys():
235
+ if key != "ltspice":
236
+ cmd = "which " + commands[key]
237
+ found = os.system(cmd)
238
+ if found == 256:
239
+ commands[key] = ""
240
+ if system != 'Windows' and commands['lepton-eda'] != '':
241
+ commands['geda'] = 'lepton-netlist'
242
+ # print not installed packages
243
+ not_installed = []
244
+ for key in commands.keys():
245
+ if commands[key] == '':
246
+ not_installed.append(key)
247
+ if len(not_installed) > 0:
248
+ print("The following apps have not been installed:")
249
+ for app in not_installed:
250
+ print("-", app)
251
+ print("After installation of missing apps, delete the 'SLiCAP.ini' " +
252
+ "file in the ~/SLiCAP/ folder. It will be recreated with the " +
253
+ "next SLiCAP import.")
254
+ return commands
255
+
256
+ def _generate_project_config():
257
+ os.path.abspath('.') + '/'
258
+ project_paths = {"html" : 'html/',
259
+ "cir" : 'cir/',
260
+ "lib" : 'lib/',
261
+ "csv" : 'csv/',
262
+ "txt" : 'txt/',
263
+ "img" : 'img/',
264
+ "mathml" : 'mathml/',
265
+ "sphinx" : 'sphinx/',
266
+ "tex" : 'tex/'
267
+ }
268
+ SLiCAPconfig = configparser.ConfigParser()
269
+ SLiCAPconfig['math'] = {"laplace" : "s",
270
+ "frequency" : "f",
271
+ "numer" : "ME",
272
+ "denom" : "ME",
273
+ "lambdify" : "numpy",
274
+ "stepfunction" : True,
275
+ "factor" : True,
276
+ "maxrecsubst" : 15,
277
+ "reducematrix" : True,
278
+ "reducecircuit" : True
279
+ }
280
+ SLiCAPconfig['plot'] = {"axisheight" : 5,
281
+ "axiswidth" : 7,
282
+ "defaultcolors" : "r,b,g,c,m,y,k",
283
+ "defaultmarkers" : "",
284
+ "legendloc" : "best",
285
+ "plotfontsize" : 12,
286
+ "plotfiletype" : "svg",
287
+ "linewidth" : 2,
288
+ "markersize" : 7,
289
+ "linetype" : "-",
290
+ "svgmargin" : 1
291
+ }
292
+ SLiCAPconfig['gaincolors'] = {"asymptotic" : "r",
293
+ "gain" : "b",
294
+ "loopgain" : "k",
295
+ "servo" : "m",
296
+ "direct" : "g",
297
+ "vi" : "c"
298
+ }
299
+ SLiCAPconfig['display'] = {'Hz' : True,
300
+ 'Digits' : 4,
301
+ 'notebook' : False,
302
+ 'scalefactors' : False,
303
+ 'engnotation' : True}
304
+ try:
305
+ _author = os.getlogin()
306
+ except:
307
+ _author = 'default'
308
+
309
+ SLiCAPconfig['project'] = {'author' : _author,
310
+ 'created' : datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
311
+ 'last_updated' : '',
312
+ 'title' : ''
313
+ }
314
+ SLiCAPconfig['projectpaths'] = project_paths
315
+ SLiCAPconfig['html'] = {'current_index' : 'index.html',
316
+ 'current_page' : 'index.html',
317
+ 'pages' : '',
318
+ 'prefix' : ''
319
+ }
320
+ SLiCAPconfig['labels'] = {
321
+ }
322
+ return SLiCAPconfig
323
+
324
+ def _generate_main_config():
325
+ install_path = inspect.getfile(_find_installed_software).replace('\\', '/').split('/')
326
+ install_path = '/'.join(install_path[0:-2]) + '/'
327
+ slicap_home = expanduser("~").replace('\\', '/')
328
+ home_path = slicap_home + '/'
329
+ install_paths = {"install" : install_path,
330
+ "user" : home_path,
331
+ "docs" : os.path.join(install_path, 'SLiCAP/docs/html/'),
332
+ "libs" : os.path.join(install_path, 'SLiCAP/files/lib/'),
333
+ "kicadsyms" : os.path.join(install_path, 'SLiCAP/files/kicad/SLiCAP.kicad_sym'),
334
+ "gedasyms" : os.path.join(install_path, 'SLiCAP/files/gSchem/'),
335
+ "leptonsyms" : os.path.join(install_path, 'SLiCAP/files/lepton-eda/'),
336
+ "ltspicesyms" : os.path.join(install_path, 'SLiCAP/files/LTspice/'),
337
+ "latexfiles" : os.path.join(install_path, 'SLiCAP/files/tex/'),
338
+ "sphinxfiles" : os.path.join(install_path, 'SLiCAP/files/sphinx/'),
339
+ }
340
+
341
+ if platform.system() == 'Windows':
342
+ commands = _find_installed_windows_software()
343
+ else:
344
+ commands = _find_installed_software()
345
+ SLiCAPconfig = configparser.ConfigParser()
346
+ SLiCAPconfig['version'] = {"install_version" : INSTALLVERSION,
347
+ "latest_version" : _check_version()}
348
+ SLiCAPconfig['installpaths'] = install_paths
349
+ SLiCAPconfig['commands'] = commands
350
+ return SLiCAPconfig
351
+
352
+ def _generate_default_config():
353
+ default_config = {'version':{'install_version' : '',
354
+ 'latest_version' : ''},
355
+ 'installpaths':{"install" : '',
356
+ "user" : '',
357
+ "docs" : '',
358
+ "libs" : '',
359
+ "kicadsyms" : '',
360
+ "gedasyms" : '',
361
+ "leptonsyms" : '',
362
+ "ltspicesyms" : '',
363
+ "latexfiles" : '',
364
+ "sphinxfiles" : ''},
365
+ 'commands':{'ltspice' : '',
366
+ 'kicad' : '',
367
+ 'geda' : '',
368
+ 'lepton-eda' : '',
369
+ 'ngspice' : ''}
370
+ }
371
+ return default_config
372
+
373
+ def _get_home_path():
374
+ slicap_home = expanduser("~").replace('\\', '/') + '/'
375
+ return slicap_home
376
+
377
+ def _read_project_config():
378
+ try:
379
+ if os.path.isfile("./SLiCAP.ini"):
380
+ config_dict = configparser.ConfigParser()
381
+ with open("SLiCAP.ini") as f:
382
+ config_dict.read_file(f)
383
+ else:
384
+ print("Generating project configuration file: SLiCAP.ini.\n")
385
+ config_dict = _generate_project_config()
386
+ _write_project_config(config_dict)
387
+ except:
388
+ config_dict = configparser.ConfigParser()
389
+ return config_dict
390
+
391
+ def _read_main_config():
392
+ try:
393
+ path = _get_home_path() + "SLiCAP.ini"
394
+ if os.path.isfile(path):
395
+ config_dict = configparser.ConfigParser()
396
+ with open(path) as f:
397
+ config_dict.read_file(f)
398
+ else:
399
+ print("Generating main configuration file: ~/SLiCAP/SLiCAP.ini.\n")
400
+ config_dict = _generate_main_config()
401
+ _write_main_config(config_dict)
402
+ except:
403
+ config_dict = configparser.ConfigParser()
404
+ return config_dict
405
+
406
+ def _write_project_config(config_dict):
407
+ with open("SLiCAP.ini", "w") as f:
408
+ config_dict.write(f)
409
+
410
+ def _write_main_config(config_dict):
411
+ with open(_get_home_path() + "SLiCAP.ini", "w") as f:
412
+ config_dict.write(f)
413
+
414
+ def _update_project_config():
415
+ config_dict = _read_project_config()
416
+ config_dict['project']['title'] = project_title
417
+ config_dict['project']['author'] = author
418
+ config_dict['project']['last_updated'] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
419
+ config_dict["html"]["current_page"] = html_index
420
+ config_dict["html"]["current_index"] = html_page
421
+ config_dict["html"]["prefix"] = html_prefix
422
+ config_dict["html"]["pages"] = (',').join(html_pages)
423
+ config_dict["labels"] = html_labels
424
+ _write_project_config(config_dict)
425
+
426
+ def _update_ini_files():
427
+ generate = False # Will be set to True is main config is corrupted
428
+ main_config = _read_main_config()
429
+ main_keys = main_config.keys()
430
+ default_config = _generate_default_config()
431
+ default_keys = default_config.keys()
432
+ for default_key in default_keys:
433
+ if default_key not in main_keys:
434
+ generate = True
435
+ else:
436
+ sub_keys = default_config[default_key].keys()
437
+ main_sub_keys = main_config[default_key].keys()
438
+ for sub_key in sub_keys:
439
+ if sub_key not in main_sub_keys:
440
+ generate is True
441
+ if generate:
442
+ print("Updating main configuration file; this may take a while.")
443
+ main_config = _generate_main_config()
444
+ _write_main_config(main_config)
445
+
446
+ # Update the project data from the project configuration file
447
+ project_config = _read_project_config()
448
+ proj_keys = project_config.keys()
449
+ default_config = _generate_project_config()
450
+ main_keys = default_config.keys()
451
+ for main_key in main_keys:
452
+ if main_key not in proj_keys:
453
+ project_config[main_key] = default_config[main_key]
454
+ sub_keys = default_config[main_key].keys()
455
+ prj_sub_keys = project_config[main_key].keys()
456
+ for sub_key in sub_keys:
457
+ if sub_key not in prj_sub_keys:
458
+ project_config[main_key][sub_key] = default_config[main_key][sub_key]
459
+ _write_project_config(project_config)
460
+
461
+ return main_config, project_config
462
+
463
+ def dump():
464
+ """
465
+ Prints the global SLiCAP settings.
466
+
467
+ :return None:
468
+ :rtype NoneType:
469
+
470
+ :example:
471
+
472
+ >>> import SLiCAP as sl
473
+ >>> sl.ini.dump()
474
+ """
475
+ main_config = _read_main_config()
476
+ # Global variables from main configuration file
477
+ print('ini.install_version =', main_config['version']['install_version'])
478
+ print('ini.latest_version =', main_config['version']['latest_version'])
479
+ print('ini.install_path =', main_config['installpaths']['install'])
480
+ print('ini.home_path =', main_config['installpaths']['user'])
481
+ print('ini.main_lib_path =', main_config['installpaths']['libs'])
482
+ print('ini.doc_path =', main_config['installpaths']['docs'])
483
+ print('ini.ltspice =', main_config['commands']['ltspice'])
484
+ print('ini.gnetlist =', main_config['commands']['geda'])
485
+ print('ini.kicad =', main_config['commands']['kicad'])
486
+ print('ini.ngspice =', main_config['commands']['ngspice'])
487
+ print('ini.lepton_eda =', main_config['commands']['lepton-eda'])
488
+ print('ini.ltspice_syms =', main_config['installpaths']['ltspicesyms'])
489
+ print('ini.gnetlist_syms =', main_config['installpaths']['gedasyms'])
490
+ print('ini.kicad_syms =', main_config['installpaths']['kicadsyms'])
491
+ print('ini.lepton_eda_syms =', main_config['installpaths']['leptonsyms'])
492
+ print('ini.latex_files =', main_config['installpaths']['latexfiles'])
493
+ print('ini.sphinx_files =', main_config['installpaths']['sphinxfiles'])
494
+
495
+ project_config = _read_project_config()
496
+ # Global variables from main configuration file
497
+ print('ini.html_path =', project_config['projectpaths']['html'])
498
+ print('ini.cir_path =', project_config['projectpaths']['cir'])
499
+ print('ini.img_path =', project_config['projectpaths']['img'])
500
+ print('ini.csv_path =', project_config['projectpaths']['csv'])
501
+ print('ini.txt_path =', project_config['projectpaths']['txt'])
502
+ print('ini.tex_path =', project_config['projectpaths']['tex'])
503
+ print('ini.user_lib_path =', project_config['projectpaths']['lib'])
504
+ print('ini.mathml_path =', project_config['projectpaths']['mathml'])
505
+ print('ini.sphinx_path =', project_config['projectpaths']['sphinx'])
506
+ print('ini.html_prefix =', project_config['html']['prefix'])
507
+ print('ini.html_index =', project_config['html']['current_index'])
508
+ print('ini.html_page =', project_config['html']['current_page'])
509
+ print('ini.html_pages =', project_config['html']['pages'].split(','))
510
+ print('ini.html_labels =', project_config['labels'])
511
+ print('ini.disp =', eval(project_config['display']['digits']))
512
+ print('ini.hz =', eval(project_config['display']['Hz']))
513
+ print('ini.notebook =', eval(project_config['display']['notebook']))
514
+ print('ini.scalefactors =', eval(project_config['display']['scalefactors']))
515
+ print('ini.eng_notation =', eval(project_config['display']['engnotation']))
516
+ print('ini.last_updated =', project_config['project']['last_updated'])
517
+ print('ini.project_title =', project_config['project']['title'])
518
+ print('ini.created =', project_config['project']['created'])
519
+ print('ini.author =', project_config['project']['author'])
520
+ print('ini.laplace =', Symbol(project_config['math']['laplace']))
521
+ print('ini.frequency =', Symbol(project_config['math']['frequency']))
522
+ print('ini.numer =', project_config['math']['numer'])
523
+ print('ini.denom =', project_config['math']['denom'])
524
+ print('ini.lambdify =', project_config['math']['lambdify'])
525
+ print('ini.step_function =', eval(project_config['math']['stepfunction']))
526
+ print('ini.factor =', eval(project_config['math']['factor']))
527
+ print('ini.max_rec_subst =', eval(project_config['math']['maxrecsubst']))
528
+ print('ini.reduce_matrix =', eval(project_config['math']['reducematrix']))
529
+ print('ini.reduce_circuit =', eval(project_config['math']['reducecircuit']))
530
+ print('ini.gain_colors =', dict(project_config['gaincolors']))
531
+ print('ini.plot_fontsize =', eval(project_config['plot']['plotfontsize']))
532
+ print('ini.axis_height =', eval(project_config['plot']['axisheight']))
533
+ print('ini.axis_width =', eval(project_config['plot']['axiswidth']))
534
+ print('ini.line_width =', eval(project_config['plot']['linewidth']))
535
+ print('ini.marker_size =', eval(project_config['plot']['markersize']))
536
+ print('ini.line_type =', project_config['plot']['linetype'])
537
+ print('ini.legend_loc =', project_config['plot']['legendloc'])
538
+ print('ini.default_colors =', project_config['plot']['defaultcolors'].split(','))
539
+ print('ini.default_markers =', project_config['plot']['defaultmarkers'].split(','))
540
+ print('ini.plot_fontsize =', project_config['plot']['plotfontsize'])
541
+ print('ini.plot_file_type =', project_config['plot']['plotfiletype'])
542
+ print('ini.svg_margin =', eval(project_config['plot']['svgmargin']))
543
+
544
+
545
+ # Define global variables from ini files
546
+
547
+ main_config, project_config = _update_ini_files()
548
+
549
+ install_version = main_config['version']['install_version']
550
+ latest_version = main_config['version']['latest_version']
551
+ install_path = main_config['installpaths']['install']
552
+ home_path = main_config['installpaths']['user']
553
+ main_lib_path = main_config['installpaths']['libs']
554
+ doc_path = main_config['installpaths']['docs']
555
+ ltspice_syms = main_config['installpaths']['ltspicesyms']
556
+ netlist_syms = main_config['installpaths']['gedasyms']
557
+ kicad_syms = main_config['installpaths']['kicadsyms']
558
+ lepton_eda_syms = main_config['installpaths']['leptonsyms']
559
+ latex_files = main_config['installpaths']['latexfiles']
560
+ sphinx_files = main_config['installpaths']['sphinxfiles']
561
+ ltspice = main_config['commands']['ltspice']
562
+ gnetlist = main_config['commands']['geda']
563
+ kicad = main_config['commands']['kicad']
564
+ ngspice = main_config['commands']['ngspice']
565
+ lepton_eda = main_config['commands']['lepton-eda']
566
+ html_path = project_config['projectpaths']['html']
567
+ cir_path = project_config['projectpaths']['cir']
568
+ img_path = project_config['projectpaths']['img']
569
+ csv_path = project_config['projectpaths']['csv']
570
+ txt_path = project_config['projectpaths']['txt']
571
+ tex_path = project_config['projectpaths']['tex']
572
+ user_lib_path = project_config['projectpaths']['lib']
573
+ mathml_path = project_config['projectpaths']['mathml']
574
+ sphinx_path = project_config['projectpaths']['sphinx']
575
+ html_prefix = project_config['html']['prefix']
576
+ html_index = project_config['html']['current_index']
577
+ html_page = project_config['html']['current_page']
578
+ html_pages = project_config['html']['pages'].split(',')
579
+ html_labels = project_config['labels']
580
+ disp = eval(project_config['display']['digits'])
581
+ scalefactors = eval(project_config['display']['scalefactors'])
582
+ eng_notation = eval(project_config['display']['engnotation'])
583
+ last_updated = project_config['project']['last_updated']
584
+ project_title = project_config['project']['title']
585
+ created = project_config['project']['created']
586
+ author = project_config['project']['author']
587
+ laplace = Symbol(project_config['math']['laplace'])
588
+ frequency = Symbol(project_config['math']['frequency'])
589
+ numer = project_config['math']['numer']
590
+ denom = project_config['math']['denom']
591
+ lambdify = project_config['math']['lambdify']
592
+ step_function = eval(project_config['math']['stepfunction'])
593
+ factor = eval(project_config['math']['factor'])
594
+ max_rec_subst = eval(project_config['math']['maxrecsubst'])
595
+ reduce_matrix = eval(project_config['math']['reducematrix'])
596
+ reduce_circuit = eval(project_config['math']['reducecircuit'])
597
+ hz = eval(project_config['display']['Hz'])
598
+ gain_colors = project_config['gaincolors']
599
+ plot_fontsize = eval(project_config['plot']['plotfontsize'])
600
+ axis_height = eval(project_config['plot']['axisheight'])
601
+ axis_width = eval(project_config['plot']['axiswidth'])
602
+ line_width = eval(project_config['plot']['linewidth'])
603
+ marker_size = eval(project_config['plot']['markersize'])
604
+ svg_margin = eval(project_config['plot']['svgmargin'])
605
+ line_type = project_config['plot']['linetype']
606
+ legend_loc = project_config['plot']['legendloc']
607
+ default_colors = project_config['plot']['defaultcolors'].split(',')
608
+ default_markers = project_config['plot']['defaultmarkers'].split(',')
609
+ plot_file_type = project_config['plot']['plotfiletype']
610
+ notebook = False
611
+
612
+ SLiCAPPARAMS = {} # Entries will be generated during circuit check