crispy 0.8.0__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 (546) hide show
  1. crispy/__init__.py +22 -0
  2. crispy/__main__.py +282 -0
  3. crispy/broaden.py +112 -0
  4. crispy/config.py +109 -0
  5. crispy/icons/clipboard.svg +9 -0
  6. crispy/icons/cog.svg +4 -0
  7. crispy/icons/crispy.png +0 -0
  8. crispy/icons/crispy.svg +36 -0
  9. crispy/icons/folder-open.svg +4 -0
  10. crispy/icons/play.svg +4 -0
  11. crispy/icons/save.svg +4 -0
  12. crispy/icons/stop.svg +4 -0
  13. crispy/icons/trash.svg +4 -0
  14. crispy/items.py +423 -0
  15. crispy/loggers.py +70 -0
  16. crispy/models.py +115 -0
  17. crispy/notebook.py +313 -0
  18. crispy/plot.py +268 -0
  19. crispy/profiling.py +28 -0
  20. crispy/quanty/.DS_Store +0 -0
  21. crispy/quanty/__init__.py +23 -0
  22. crispy/quanty/__pycache__/__init__.cpython-310.pyc +0 -0
  23. crispy/quanty/__pycache__/__init__.cpython-311.pyc +0 -0
  24. crispy/quanty/__pycache__/axes.cpython-310.pyc +0 -0
  25. crispy/quanty/__pycache__/axes.cpython-311.pyc +0 -0
  26. crispy/quanty/__pycache__/calculation.cpython-310.pyc +0 -0
  27. crispy/quanty/__pycache__/calculation.cpython-311.pyc +0 -0
  28. crispy/quanty/__pycache__/cowan.cpython-310.pyc +0 -0
  29. crispy/quanty/__pycache__/cowan.cpython-311.pyc +0 -0
  30. crispy/quanty/__pycache__/details.cpython-310.pyc +0 -0
  31. crispy/quanty/__pycache__/details.cpython-311.pyc +0 -0
  32. crispy/quanty/__pycache__/experiment.cpython-311.pyc +0 -0
  33. crispy/quanty/__pycache__/external.cpython-311.pyc +0 -0
  34. crispy/quanty/__pycache__/hamiltonian.cpython-310.pyc +0 -0
  35. crispy/quanty/__pycache__/hamiltonian.cpython-311.pyc +0 -0
  36. crispy/quanty/__pycache__/main.cpython-310.pyc +0 -0
  37. crispy/quanty/__pycache__/main.cpython-311.pyc +0 -0
  38. crispy/quanty/__pycache__/preferences.cpython-310.pyc +0 -0
  39. crispy/quanty/__pycache__/preferences.cpython-311.pyc +0 -0
  40. crispy/quanty/__pycache__/progress.cpython-310.pyc +0 -0
  41. crispy/quanty/__pycache__/progress.cpython-311.pyc +0 -0
  42. crispy/quanty/__pycache__/spectra.cpython-310.pyc +0 -0
  43. crispy/quanty/__pycache__/spectra.cpython-311.pyc +0 -0
  44. crispy/quanty/axes.py +515 -0
  45. crispy/quanty/bin/.DS_Store +0 -0
  46. crispy/quanty/bin/darwin/.DS_Store +0 -0
  47. crispy/quanty/bin/darwin/Quanty +0 -0
  48. crispy/quanty/bin/linux/Quanty +0 -0
  49. crispy/quanty/bin/win32/Quanty.exe +0 -0
  50. crispy/quanty/calculation.py +792 -0
  51. crispy/quanty/calculations.yaml +156 -0
  52. crispy/quanty/cowan.py +282 -0
  53. crispy/quanty/details.py +162 -0
  54. crispy/quanty/external.py +17 -0
  55. crispy/quanty/generate.py +325 -0
  56. crispy/quanty/hamiltonian.py +612 -0
  57. crispy/quanty/main.py +634 -0
  58. crispy/quanty/parameters/.DS_Store +0 -0
  59. crispy/quanty/parameters/Ac.h5 +0 -0
  60. crispy/quanty/parameters/Ag.h5 +0 -0
  61. crispy/quanty/parameters/Am.h5 +0 -0
  62. crispy/quanty/parameters/Au.h5 +0 -0
  63. crispy/quanty/parameters/Ce.h5 +0 -0
  64. crispy/quanty/parameters/Cm.h5 +0 -0
  65. crispy/quanty/parameters/Co.h5 +0 -0
  66. crispy/quanty/parameters/Cr.h5 +0 -0
  67. crispy/quanty/parameters/Cu.h5 +0 -0
  68. crispy/quanty/parameters/Dy.h5 +0 -0
  69. crispy/quanty/parameters/Er.h5 +0 -0
  70. crispy/quanty/parameters/Eu.h5 +0 -0
  71. crispy/quanty/parameters/Fe.h5 +0 -0
  72. crispy/quanty/parameters/Gd.h5 +0 -0
  73. crispy/quanty/parameters/Hf.h5 +0 -0
  74. crispy/quanty/parameters/Ho.h5 +0 -0
  75. crispy/quanty/parameters/Ir.h5 +0 -0
  76. crispy/quanty/parameters/La.h5 +0 -0
  77. crispy/quanty/parameters/Mn.h5 +0 -0
  78. crispy/quanty/parameters/Mo.h5 +0 -0
  79. crispy/quanty/parameters/Nb.h5 +0 -0
  80. crispy/quanty/parameters/Nd.h5 +0 -0
  81. crispy/quanty/parameters/Ni.h5 +0 -0
  82. crispy/quanty/parameters/Np.h5 +0 -0
  83. crispy/quanty/parameters/Os.h5 +0 -0
  84. crispy/quanty/parameters/Pa.h5 +0 -0
  85. crispy/quanty/parameters/Pd.h5 +0 -0
  86. crispy/quanty/parameters/Pm.h5 +0 -0
  87. crispy/quanty/parameters/Pr.h5 +0 -0
  88. crispy/quanty/parameters/Pt.h5 +0 -0
  89. crispy/quanty/parameters/Pu.h5 +0 -0
  90. crispy/quanty/parameters/Re.h5 +0 -0
  91. crispy/quanty/parameters/Rh.h5 +0 -0
  92. crispy/quanty/parameters/Ru.h5 +0 -0
  93. crispy/quanty/parameters/Sc.h5 +0 -0
  94. crispy/quanty/parameters/Sm.h5 +0 -0
  95. crispy/quanty/parameters/Ta.h5 +0 -0
  96. crispy/quanty/parameters/Tb.h5 +0 -0
  97. crispy/quanty/parameters/Tc.h5 +0 -0
  98. crispy/quanty/parameters/Th.h5 +0 -0
  99. crispy/quanty/parameters/Ti.h5 +0 -0
  100. crispy/quanty/parameters/Tm.h5 +0 -0
  101. crispy/quanty/parameters/U.h5 +0 -0
  102. crispy/quanty/parameters/V.h5 +0 -0
  103. crispy/quanty/parameters/W.h5 +0 -0
  104. crispy/quanty/parameters/Y.h5 +0 -0
  105. crispy/quanty/parameters/Yb.h5 +0 -0
  106. crispy/quanty/parameters/Zr.h5 +0 -0
  107. crispy/quanty/parameters/cowan/README.rst +11 -0
  108. crispy/quanty/parameters/cowan/bin/darwin/libgfortran.5.dylib +0 -0
  109. crispy/quanty/parameters/cowan/bin/darwin/libquadmath.0.dylib +0 -0
  110. crispy/quanty/parameters/cowan/bin/darwin/rcg_cfp72 +0 -0
  111. crispy/quanty/parameters/cowan/bin/darwin/rcg_cfp73 +0 -0
  112. crispy/quanty/parameters/cowan/bin/darwin/rcg_cfp74 +0 -0
  113. crispy/quanty/parameters/cowan/bin/darwin/rcn +0 -0
  114. crispy/quanty/parameters/cowan/bin/darwin/rcn2 +0 -0
  115. crispy/quanty/parameters/cowan/bin/darwin/rcn31 +0 -0
  116. crispy/quanty/parameters/cowan/bin/darwin/ttrcg +0 -0
  117. crispy/quanty/parameters/cowan/bin/linux/rcg_cfp72 +0 -0
  118. crispy/quanty/parameters/cowan/bin/linux/rcg_cfp73 +0 -0
  119. crispy/quanty/parameters/cowan/bin/linux/rcg_cfp74 +0 -0
  120. crispy/quanty/parameters/cowan/bin/linux/rcn +0 -0
  121. crispy/quanty/parameters/cowan/bin/linux/rcn2 +0 -0
  122. crispy/quanty/parameters/cowan/bin/linux/rcn31 +0 -0
  123. crispy/quanty/parameters/cowan/bin/linux/ttrcg +0 -0
  124. crispy/quanty/parameters/cowan/scripts/runrcg.sh +41 -0
  125. crispy/quanty/parameters/cowan/scripts/runrcn.sh +37 -0
  126. crispy/quanty/parameters/cowan/scripts/runrcn2.sh +33 -0
  127. crispy/quanty/parameters/p-d_hybridization/parameters.dat +42 -0
  128. crispy/quanty/preferences.py +112 -0
  129. crispy/quanty/progress.py +59 -0
  130. crispy/quanty/spectra.py +410 -0
  131. crispy/quanty/templates/3d_C3v_RIXS_1s2p.lua +682 -0
  132. crispy/quanty/templates/3d_C3v_RIXS_1s3p.lua +682 -0
  133. crispy/quanty/templates/3d_C3v_RIXS_2p3d.lua +662 -0
  134. crispy/quanty/templates/3d_C3v_XAS_1s.lua +1033 -0
  135. crispy/quanty/templates/3d_C3v_XAS_2p.lua +675 -0
  136. crispy/quanty/templates/3d_C3v_XAS_2s.lua +665 -0
  137. crispy/quanty/templates/3d_C3v_XAS_3p.lua +675 -0
  138. crispy/quanty/templates/3d_C3v_XAS_3s.lua +665 -0
  139. crispy/quanty/templates/3d_C3v_XPS_1s.lua +593 -0
  140. crispy/quanty/templates/3d_C3v_XPS_2p.lua +603 -0
  141. crispy/quanty/templates/3d_C3v_XPS_2s.lua +593 -0
  142. crispy/quanty/templates/3d_C3v_XPS_3p.lua +603 -0
  143. crispy/quanty/templates/3d_C3v_XPS_3s.lua +593 -0
  144. crispy/quanty/templates/3d_D3h_RIXS_1s2p.lua +669 -0
  145. crispy/quanty/templates/3d_D3h_RIXS_1s3p.lua +669 -0
  146. crispy/quanty/templates/3d_D3h_RIXS_2p3d.lua +649 -0
  147. crispy/quanty/templates/3d_D3h_XAS_1s.lua +654 -0
  148. crispy/quanty/templates/3d_D3h_XAS_2p.lua +664 -0
  149. crispy/quanty/templates/3d_D3h_XAS_2s.lua +654 -0
  150. crispy/quanty/templates/3d_D3h_XAS_3p.lua +664 -0
  151. crispy/quanty/templates/3d_D3h_XAS_3s.lua +654 -0
  152. crispy/quanty/templates/3d_D3h_XPS_1s.lua +582 -0
  153. crispy/quanty/templates/3d_D3h_XPS_2p.lua +592 -0
  154. crispy/quanty/templates/3d_D3h_XPS_2s.lua +582 -0
  155. crispy/quanty/templates/3d_D3h_XPS_3p.lua +592 -0
  156. crispy/quanty/templates/3d_D3h_XPS_3s.lua +582 -0
  157. crispy/quanty/templates/3d_D4h_RIXS_1s2p.lua +970 -0
  158. crispy/quanty/templates/3d_D4h_RIXS_1s3p.lua +970 -0
  159. crispy/quanty/templates/3d_D4h_RIXS_2p3d.lua +936 -0
  160. crispy/quanty/templates/3d_D4h_XAS_1s.lua +886 -0
  161. crispy/quanty/templates/3d_D4h_XAS_2p.lua +896 -0
  162. crispy/quanty/templates/3d_D4h_XAS_2s.lua +886 -0
  163. crispy/quanty/templates/3d_D4h_XAS_3p.lua +896 -0
  164. crispy/quanty/templates/3d_D4h_XAS_3s.lua +886 -0
  165. crispy/quanty/templates/3d_D4h_XPS_1s.lua +814 -0
  166. crispy/quanty/templates/3d_D4h_XPS_2p.lua +824 -0
  167. crispy/quanty/templates/3d_D4h_XPS_2s.lua +814 -0
  168. crispy/quanty/templates/3d_D4h_XPS_3p.lua +824 -0
  169. crispy/quanty/templates/3d_D4h_XPS_3s.lua +814 -0
  170. crispy/quanty/templates/3d_Oh_RIXS_1s2p.lua +884 -0
  171. crispy/quanty/templates/3d_Oh_RIXS_1s3p.lua +884 -0
  172. crispy/quanty/templates/3d_Oh_RIXS_2p3d.lua +850 -0
  173. crispy/quanty/templates/3d_Oh_XAS_1s.lua +820 -0
  174. crispy/quanty/templates/3d_Oh_XAS_2p.lua +830 -0
  175. crispy/quanty/templates/3d_Oh_XAS_2s.lua +820 -0
  176. crispy/quanty/templates/3d_Oh_XAS_3p.lua +830 -0
  177. crispy/quanty/templates/3d_Oh_XAS_3s.lua +820 -0
  178. crispy/quanty/templates/3d_Oh_XPS_1s.lua +748 -0
  179. crispy/quanty/templates/3d_Oh_XPS_2p.lua +758 -0
  180. crispy/quanty/templates/3d_Oh_XPS_2s.lua +748 -0
  181. crispy/quanty/templates/3d_Oh_XPS_3p.lua +758 -0
  182. crispy/quanty/templates/3d_Oh_XPS_3s.lua +748 -0
  183. crispy/quanty/templates/3d_Td_RIXS_1s2p.lua +662 -0
  184. crispy/quanty/templates/3d_Td_RIXS_1s3p.lua +662 -0
  185. crispy/quanty/templates/3d_Td_RIXS_2p3d.lua +642 -0
  186. crispy/quanty/templates/3d_Td_XAS_1s.lua +1007 -0
  187. crispy/quanty/templates/3d_Td_XAS_2p.lua +659 -0
  188. crispy/quanty/templates/3d_Td_XAS_2s.lua +649 -0
  189. crispy/quanty/templates/3d_Td_XAS_3p.lua +659 -0
  190. crispy/quanty/templates/3d_Td_XAS_3s.lua +649 -0
  191. crispy/quanty/templates/3d_Td_XPS_1s.lua +577 -0
  192. crispy/quanty/templates/3d_Td_XPS_2p.lua +587 -0
  193. crispy/quanty/templates/3d_Td_XPS_2s.lua +577 -0
  194. crispy/quanty/templates/3d_Td_XPS_3p.lua +587 -0
  195. crispy/quanty/templates/3d_Td_XPS_3s.lua +577 -0
  196. crispy/quanty/templates/4d_C3v_RIXS_2p4d.lua +662 -0
  197. crispy/quanty/templates/4d_C3v_XAS_2p.lua +675 -0
  198. crispy/quanty/templates/4d_C3v_XAS_2s.lua +665 -0
  199. crispy/quanty/templates/4d_C3v_XAS_3p.lua +675 -0
  200. crispy/quanty/templates/4d_C3v_XAS_3s.lua +665 -0
  201. crispy/quanty/templates/4d_C3v_XAS_4p.lua +675 -0
  202. crispy/quanty/templates/4d_C3v_XAS_4s.lua +665 -0
  203. crispy/quanty/templates/4d_C3v_XPS_2p.lua +603 -0
  204. crispy/quanty/templates/4d_C3v_XPS_2s.lua +593 -0
  205. crispy/quanty/templates/4d_C3v_XPS_3p.lua +603 -0
  206. crispy/quanty/templates/4d_C3v_XPS_3s.lua +593 -0
  207. crispy/quanty/templates/4d_C3v_XPS_4p.lua +603 -0
  208. crispy/quanty/templates/4d_C3v_XPS_4s.lua +593 -0
  209. crispy/quanty/templates/4d_D3h_RIXS_2p4d.lua +649 -0
  210. crispy/quanty/templates/4d_D3h_XAS_2p.lua +664 -0
  211. crispy/quanty/templates/4d_D3h_XAS_2s.lua +654 -0
  212. crispy/quanty/templates/4d_D3h_XAS_3p.lua +664 -0
  213. crispy/quanty/templates/4d_D3h_XAS_3s.lua +654 -0
  214. crispy/quanty/templates/4d_D3h_XAS_4p.lua +664 -0
  215. crispy/quanty/templates/4d_D3h_XAS_4s.lua +654 -0
  216. crispy/quanty/templates/4d_D3h_XPS_2p.lua +592 -0
  217. crispy/quanty/templates/4d_D3h_XPS_2s.lua +582 -0
  218. crispy/quanty/templates/4d_D3h_XPS_3p.lua +592 -0
  219. crispy/quanty/templates/4d_D3h_XPS_3s.lua +582 -0
  220. crispy/quanty/templates/4d_D3h_XPS_4p.lua +592 -0
  221. crispy/quanty/templates/4d_D3h_XPS_4s.lua +582 -0
  222. crispy/quanty/templates/4d_D4h_RIXS_2p4d.lua +936 -0
  223. crispy/quanty/templates/4d_D4h_XAS_2p.lua +896 -0
  224. crispy/quanty/templates/4d_D4h_XAS_2s.lua +886 -0
  225. crispy/quanty/templates/4d_D4h_XAS_3p.lua +896 -0
  226. crispy/quanty/templates/4d_D4h_XAS_3s.lua +886 -0
  227. crispy/quanty/templates/4d_D4h_XAS_4p.lua +896 -0
  228. crispy/quanty/templates/4d_D4h_XAS_4s.lua +886 -0
  229. crispy/quanty/templates/4d_D4h_XPS_2p.lua +824 -0
  230. crispy/quanty/templates/4d_D4h_XPS_2s.lua +814 -0
  231. crispy/quanty/templates/4d_D4h_XPS_3p.lua +824 -0
  232. crispy/quanty/templates/4d_D4h_XPS_3s.lua +814 -0
  233. crispy/quanty/templates/4d_D4h_XPS_4p.lua +824 -0
  234. crispy/quanty/templates/4d_D4h_XPS_4s.lua +814 -0
  235. crispy/quanty/templates/4d_Oh_RIXS_2p4d.lua +850 -0
  236. crispy/quanty/templates/4d_Oh_XAS_2p.lua +830 -0
  237. crispy/quanty/templates/4d_Oh_XAS_2s.lua +820 -0
  238. crispy/quanty/templates/4d_Oh_XAS_3p.lua +830 -0
  239. crispy/quanty/templates/4d_Oh_XAS_3s.lua +820 -0
  240. crispy/quanty/templates/4d_Oh_XAS_4p.lua +830 -0
  241. crispy/quanty/templates/4d_Oh_XAS_4s.lua +820 -0
  242. crispy/quanty/templates/4d_Oh_XPS_2p.lua +758 -0
  243. crispy/quanty/templates/4d_Oh_XPS_2s.lua +748 -0
  244. crispy/quanty/templates/4d_Oh_XPS_3p.lua +758 -0
  245. crispy/quanty/templates/4d_Oh_XPS_3s.lua +748 -0
  246. crispy/quanty/templates/4d_Oh_XPS_4p.lua +758 -0
  247. crispy/quanty/templates/4d_Oh_XPS_4s.lua +748 -0
  248. crispy/quanty/templates/4d_Td_RIXS_2p4d.lua +642 -0
  249. crispy/quanty/templates/4d_Td_XAS_2p.lua +659 -0
  250. crispy/quanty/templates/4d_Td_XAS_2s.lua +649 -0
  251. crispy/quanty/templates/4d_Td_XAS_3p.lua +659 -0
  252. crispy/quanty/templates/4d_Td_XAS_3s.lua +649 -0
  253. crispy/quanty/templates/4d_Td_XAS_4p.lua +659 -0
  254. crispy/quanty/templates/4d_Td_XAS_4s.lua +649 -0
  255. crispy/quanty/templates/4d_Td_XPS_2p.lua +587 -0
  256. crispy/quanty/templates/4d_Td_XPS_2s.lua +577 -0
  257. crispy/quanty/templates/4d_Td_XPS_3p.lua +587 -0
  258. crispy/quanty/templates/4d_Td_XPS_3s.lua +577 -0
  259. crispy/quanty/templates/4d_Td_XPS_4p.lua +587 -0
  260. crispy/quanty/templates/4d_Td_XPS_4s.lua +577 -0
  261. crispy/quanty/templates/4f_Oh_RIXS_2p3d.lua +869 -0
  262. crispy/quanty/templates/4f_Oh_RIXS_2p4d.lua +869 -0
  263. crispy/quanty/templates/4f_Oh_XAS_2p.lua +801 -0
  264. crispy/quanty/templates/4f_Oh_XAS_3d.lua +807 -0
  265. crispy/quanty/templates/4f_Oh_XAS_3p.lua +801 -0
  266. crispy/quanty/templates/4f_Oh_XAS_4d.lua +807 -0
  267. crispy/quanty/templates/4f_Oh_XAS_4p.lua +801 -0
  268. crispy/quanty/templates/4f_Oh_XPS_2p.lua +729 -0
  269. crispy/quanty/templates/4f_Oh_XPS_3d.lua +735 -0
  270. crispy/quanty/templates/4f_Oh_XPS_3p.lua +729 -0
  271. crispy/quanty/templates/4f_Oh_XPS_4d.lua +735 -0
  272. crispy/quanty/templates/4f_Oh_XPS_4p.lua +729 -0
  273. crispy/quanty/templates/5d_C3v_RIXS_2p5d.lua +662 -0
  274. crispy/quanty/templates/5d_C3v_XAS_2p.lua +675 -0
  275. crispy/quanty/templates/5d_C3v_XAS_2s.lua +665 -0
  276. crispy/quanty/templates/5d_C3v_XAS_3p.lua +675 -0
  277. crispy/quanty/templates/5d_C3v_XAS_3s.lua +665 -0
  278. crispy/quanty/templates/5d_C3v_XAS_4p.lua +675 -0
  279. crispy/quanty/templates/5d_C3v_XAS_4s.lua +665 -0
  280. crispy/quanty/templates/5d_C3v_XAS_5p.lua +675 -0
  281. crispy/quanty/templates/5d_C3v_XAS_5s.lua +665 -0
  282. crispy/quanty/templates/5d_C3v_XPS_2p.lua +603 -0
  283. crispy/quanty/templates/5d_C3v_XPS_2s.lua +593 -0
  284. crispy/quanty/templates/5d_C3v_XPS_3p.lua +603 -0
  285. crispy/quanty/templates/5d_C3v_XPS_3s.lua +593 -0
  286. crispy/quanty/templates/5d_C3v_XPS_4p.lua +603 -0
  287. crispy/quanty/templates/5d_C3v_XPS_4s.lua +593 -0
  288. crispy/quanty/templates/5d_C3v_XPS_5p.lua +603 -0
  289. crispy/quanty/templates/5d_C3v_XPS_5s.lua +593 -0
  290. crispy/quanty/templates/5d_D3h_RIXS_2p5d.lua +649 -0
  291. crispy/quanty/templates/5d_D3h_XAS_2p.lua +664 -0
  292. crispy/quanty/templates/5d_D3h_XAS_2s.lua +654 -0
  293. crispy/quanty/templates/5d_D3h_XAS_3p.lua +664 -0
  294. crispy/quanty/templates/5d_D3h_XAS_3s.lua +654 -0
  295. crispy/quanty/templates/5d_D3h_XAS_4p.lua +664 -0
  296. crispy/quanty/templates/5d_D3h_XAS_4s.lua +654 -0
  297. crispy/quanty/templates/5d_D3h_XAS_5p.lua +664 -0
  298. crispy/quanty/templates/5d_D3h_XAS_5s.lua +654 -0
  299. crispy/quanty/templates/5d_D3h_XPS_2p.lua +592 -0
  300. crispy/quanty/templates/5d_D3h_XPS_2s.lua +582 -0
  301. crispy/quanty/templates/5d_D3h_XPS_3p.lua +592 -0
  302. crispy/quanty/templates/5d_D3h_XPS_3s.lua +582 -0
  303. crispy/quanty/templates/5d_D3h_XPS_4p.lua +592 -0
  304. crispy/quanty/templates/5d_D3h_XPS_4s.lua +582 -0
  305. crispy/quanty/templates/5d_D3h_XPS_5p.lua +592 -0
  306. crispy/quanty/templates/5d_D3h_XPS_5s.lua +582 -0
  307. crispy/quanty/templates/5d_D4h_RIXS_2p5d.lua +936 -0
  308. crispy/quanty/templates/5d_D4h_XAS_2p.lua +896 -0
  309. crispy/quanty/templates/5d_D4h_XAS_2s.lua +886 -0
  310. crispy/quanty/templates/5d_D4h_XAS_3p.lua +896 -0
  311. crispy/quanty/templates/5d_D4h_XAS_3s.lua +886 -0
  312. crispy/quanty/templates/5d_D4h_XAS_4p.lua +896 -0
  313. crispy/quanty/templates/5d_D4h_XAS_4s.lua +886 -0
  314. crispy/quanty/templates/5d_D4h_XAS_5p.lua +896 -0
  315. crispy/quanty/templates/5d_D4h_XAS_5s.lua +886 -0
  316. crispy/quanty/templates/5d_D4h_XPS_2p.lua +824 -0
  317. crispy/quanty/templates/5d_D4h_XPS_2s.lua +814 -0
  318. crispy/quanty/templates/5d_D4h_XPS_3p.lua +824 -0
  319. crispy/quanty/templates/5d_D4h_XPS_3s.lua +814 -0
  320. crispy/quanty/templates/5d_D4h_XPS_4p.lua +824 -0
  321. crispy/quanty/templates/5d_D4h_XPS_4s.lua +814 -0
  322. crispy/quanty/templates/5d_D4h_XPS_5p.lua +824 -0
  323. crispy/quanty/templates/5d_D4h_XPS_5s.lua +814 -0
  324. crispy/quanty/templates/5d_Oh_RIXS_2p5d.lua +850 -0
  325. crispy/quanty/templates/5d_Oh_XAS_2p.lua +830 -0
  326. crispy/quanty/templates/5d_Oh_XAS_2s.lua +820 -0
  327. crispy/quanty/templates/5d_Oh_XAS_3p.lua +830 -0
  328. crispy/quanty/templates/5d_Oh_XAS_3s.lua +820 -0
  329. crispy/quanty/templates/5d_Oh_XAS_4p.lua +830 -0
  330. crispy/quanty/templates/5d_Oh_XAS_4s.lua +820 -0
  331. crispy/quanty/templates/5d_Oh_XAS_5p.lua +830 -0
  332. crispy/quanty/templates/5d_Oh_XAS_5s.lua +820 -0
  333. crispy/quanty/templates/5d_Oh_XPS_2p.lua +758 -0
  334. crispy/quanty/templates/5d_Oh_XPS_2s.lua +748 -0
  335. crispy/quanty/templates/5d_Oh_XPS_3p.lua +758 -0
  336. crispy/quanty/templates/5d_Oh_XPS_3s.lua +748 -0
  337. crispy/quanty/templates/5d_Oh_XPS_4p.lua +758 -0
  338. crispy/quanty/templates/5d_Oh_XPS_4s.lua +748 -0
  339. crispy/quanty/templates/5d_Oh_XPS_5p.lua +758 -0
  340. crispy/quanty/templates/5d_Oh_XPS_5s.lua +748 -0
  341. crispy/quanty/templates/5d_Td_RIXS_2p5d.lua +642 -0
  342. crispy/quanty/templates/5d_Td_XAS_2p.lua +659 -0
  343. crispy/quanty/templates/5d_Td_XAS_2s.lua +649 -0
  344. crispy/quanty/templates/5d_Td_XAS_3p.lua +659 -0
  345. crispy/quanty/templates/5d_Td_XAS_3s.lua +649 -0
  346. crispy/quanty/templates/5d_Td_XAS_4p.lua +659 -0
  347. crispy/quanty/templates/5d_Td_XAS_4s.lua +649 -0
  348. crispy/quanty/templates/5d_Td_XAS_5p.lua +659 -0
  349. crispy/quanty/templates/5d_Td_XAS_5s.lua +649 -0
  350. crispy/quanty/templates/5d_Td_XPS_2p.lua +587 -0
  351. crispy/quanty/templates/5d_Td_XPS_2s.lua +577 -0
  352. crispy/quanty/templates/5d_Td_XPS_3p.lua +587 -0
  353. crispy/quanty/templates/5d_Td_XPS_3s.lua +577 -0
  354. crispy/quanty/templates/5d_Td_XPS_4p.lua +587 -0
  355. crispy/quanty/templates/5d_Td_XPS_4s.lua +577 -0
  356. crispy/quanty/templates/5d_Td_XPS_5p.lua +587 -0
  357. crispy/quanty/templates/5d_Td_XPS_5s.lua +577 -0
  358. crispy/quanty/templates/5f_Oh_RIXS_2p3d.lua +869 -0
  359. crispy/quanty/templates/5f_Oh_RIXS_2p4d.lua +869 -0
  360. crispy/quanty/templates/5f_Oh_XAS_2p.lua +801 -0
  361. crispy/quanty/templates/5f_Oh_XAS_3d.lua +807 -0
  362. crispy/quanty/templates/5f_Oh_XAS_3p.lua +801 -0
  363. crispy/quanty/templates/5f_Oh_XAS_4d.lua +807 -0
  364. crispy/quanty/templates/5f_Oh_XAS_4p.lua +801 -0
  365. crispy/quanty/templates/5f_Oh_XPS_2p.lua +729 -0
  366. crispy/quanty/templates/5f_Oh_XPS_3d.lua +735 -0
  367. crispy/quanty/templates/5f_Oh_XPS_3p.lua +729 -0
  368. crispy/quanty/templates/5f_Oh_XPS_4d.lua +735 -0
  369. crispy/quanty/templates/5f_Oh_XPS_4p.lua +729 -0
  370. crispy/quanty/templates/__init__.py +0 -0
  371. crispy/quanty/templates/__pycache__/__init__.cpython-310.pyc +0 -0
  372. crispy/quanty/templates/__pycache__/__init__.cpython-311.pyc +0 -0
  373. crispy/quanty/templates/meta/helper_functions.lua +244 -0
  374. crispy/quanty/templates/meta/rixs/fields.lua +107 -0
  375. crispy/quanty/templates/meta/rixs/pdd/base.lua +86 -0
  376. crispy/quanty/templates/meta/rixs/pdd/c3v_cf.lua +54 -0
  377. crispy/quanty/templates/meta/rixs/pdd/d3h_cf.lua +41 -0
  378. crispy/quanty/templates/meta/rixs/pdd/d4h_lf.lua +258 -0
  379. crispy/quanty/templates/meta/rixs/pdd/fields.lua +107 -0
  380. crispy/quanty/templates/meta/rixs/pdd/footer_cf.lua +75 -0
  381. crispy/quanty/templates/meta/rixs/pdd/footer_lf.lua +93 -0
  382. crispy/quanty/templates/meta/rixs/pdd/header_cf.lua +85 -0
  383. crispy/quanty/templates/meta/rixs/pdd/header_lf.lua +109 -0
  384. crispy/quanty/templates/meta/rixs/pdd/helper_functions.lua +244 -0
  385. crispy/quanty/templates/meta/rixs/pdd/oh_lf.lua +172 -0
  386. crispy/quanty/templates/meta/rixs/pdd/restrictions_cf.lua +12 -0
  387. crispy/quanty/templates/meta/rixs/pdd/restrictions_lf.lua +40 -0
  388. crispy/quanty/templates/meta/rixs/pdd/td_cf.lua +34 -0
  389. crispy/quanty/templates/meta/rixs/pfd/base.lua +120 -0
  390. crispy/quanty/templates/meta/rixs/pfd/fields.lua +107 -0
  391. crispy/quanty/templates/meta/rixs/pfd/footer_lf.lua +86 -0
  392. crispy/quanty/templates/meta/rixs/pfd/header_lf.lua +98 -0
  393. crispy/quanty/templates/meta/rixs/pfd/helper_functions.lua +244 -0
  394. crispy/quanty/templates/meta/rixs/pfd/oh_lf.lua +180 -0
  395. crispy/quanty/templates/meta/rixs/pfd/restrictions_lf.lua +35 -0
  396. crispy/quanty/templates/meta/rixs/sdp/base.lua +97 -0
  397. crispy/quanty/templates/meta/rixs/sdp/c3v_cf.lua +54 -0
  398. crispy/quanty/templates/meta/rixs/sdp/d3h_cf.lua +41 -0
  399. crispy/quanty/templates/meta/rixs/sdp/d4h_lf.lua +262 -0
  400. crispy/quanty/templates/meta/rixs/sdp/fields.lua +107 -0
  401. crispy/quanty/templates/meta/rixs/sdp/footer_cf.lua +77 -0
  402. crispy/quanty/templates/meta/rixs/sdp/footer_lf.lua +95 -0
  403. crispy/quanty/templates/meta/rixs/sdp/header_cf.lua +88 -0
  404. crispy/quanty/templates/meta/rixs/sdp/header_lf.lua +112 -0
  405. crispy/quanty/templates/meta/rixs/sdp/helper_functions.lua +244 -0
  406. crispy/quanty/templates/meta/rixs/sdp/oh_lf.lua +176 -0
  407. crispy/quanty/templates/meta/rixs/sdp/restrictions_cf.lua +16 -0
  408. crispy/quanty/templates/meta/rixs/sdp/restrictions_lf.lua +54 -0
  409. crispy/quanty/templates/meta/rixs/sdp/td_cf.lua +34 -0
  410. crispy/quanty/templates/meta/xas/df/base.lua +82 -0
  411. crispy/quanty/templates/meta/xas/df/fields.lua +89 -0
  412. crispy/quanty/templates/meta/xas/df/footer_lf.lua +156 -0
  413. crispy/quanty/templates/meta/xas/df/header_lf.lua +81 -0
  414. crispy/quanty/templates/meta/xas/df/helper_functions.lua +244 -0
  415. crispy/quanty/templates/meta/xas/df/oh_lf.lua +136 -0
  416. crispy/quanty/templates/meta/xas/df/restrictions_lf.lua +20 -0
  417. crispy/quanty/templates/meta/xas/fields.lua +89 -0
  418. crispy/quanty/templates/meta/xas/pd/base.lua +71 -0
  419. crispy/quanty/templates/meta/xas/pd/c3v_cf.lua +45 -0
  420. crispy/quanty/templates/meta/xas/pd/d3h_cf.lua +34 -0
  421. crispy/quanty/templates/meta/xas/pd/d4h_lf.lua +199 -0
  422. crispy/quanty/templates/meta/xas/pd/fields.lua +89 -0
  423. crispy/quanty/templates/meta/xas/pd/footer_cf.lua +147 -0
  424. crispy/quanty/templates/meta/xas/pd/footer_lf.lua +165 -0
  425. crispy/quanty/templates/meta/xas/pd/header_cf.lua +71 -0
  426. crispy/quanty/templates/meta/xas/pd/header_lf.lua +95 -0
  427. crispy/quanty/templates/meta/xas/pd/helper_functions.lua +244 -0
  428. crispy/quanty/templates/meta/xas/pd/oh_lf.lua +133 -0
  429. crispy/quanty/templates/meta/xas/pd/restrictions_cf.lua +10 -0
  430. crispy/quanty/templates/meta/xas/pd/restrictions_lf.lua +34 -0
  431. crispy/quanty/templates/meta/xas/pd/td_cf.lua +29 -0
  432. crispy/quanty/templates/meta/xas/pf/base.lua +76 -0
  433. crispy/quanty/templates/meta/xas/pf/fields.lua +89 -0
  434. crispy/quanty/templates/meta/xas/pf/footer_lf.lua +156 -0
  435. crispy/quanty/templates/meta/xas/pf/header_lf.lua +81 -0
  436. crispy/quanty/templates/meta/xas/pf/helper_functions.lua +244 -0
  437. crispy/quanty/templates/meta/xas/pf/oh_lf.lua +136 -0
  438. crispy/quanty/templates/meta/xas/pf/restrictions_lf.lua +20 -0
  439. crispy/quanty/templates/meta/xas/sd/base.lua +61 -0
  440. crispy/quanty/templates/meta/xas/sd/c3v_cf.lua +45 -0
  441. crispy/quanty/templates/meta/xas/sd/c3v_pd.lua +131 -0
  442. crispy/quanty/templates/meta/xas/sd/d3h_cf.lua +34 -0
  443. crispy/quanty/templates/meta/xas/sd/d4h_lf.lua +199 -0
  444. crispy/quanty/templates/meta/xas/sd/fields.lua +89 -0
  445. crispy/quanty/templates/meta/xas/sd/footer_cf.lua +147 -0
  446. crispy/quanty/templates/meta/xas/sd/footer_lf.lua +165 -0
  447. crispy/quanty/templates/meta/xas/sd/footer_pd.lua +406 -0
  448. crispy/quanty/templates/meta/xas/sd/header_cf.lua +71 -0
  449. crispy/quanty/templates/meta/xas/sd/header_lf.lua +95 -0
  450. crispy/quanty/templates/meta/xas/sd/header_pd.lua +81 -0
  451. crispy/quanty/templates/meta/xas/sd/helper_functions.lua +244 -0
  452. crispy/quanty/templates/meta/xas/sd/oh_lf.lua +133 -0
  453. crispy/quanty/templates/meta/xas/sd/restrictions_cf.lua +10 -0
  454. crispy/quanty/templates/meta/xas/sd/restrictions_lf.lua +34 -0
  455. crispy/quanty/templates/meta/xas/sd/restrictions_pd.lua +22 -0
  456. crispy/quanty/templates/meta/xas/sd/td_cf.lua +29 -0
  457. crispy/quanty/templates/meta/xas/sd/td_pd.lua +105 -0
  458. crispy/quanty/templates/meta/xps/df/base.lua +82 -0
  459. crispy/quanty/templates/meta/xps/df/fields.lua +89 -0
  460. crispy/quanty/templates/meta/xps/df/footer_lf.lua +84 -0
  461. crispy/quanty/templates/meta/xps/df/header_lf.lua +81 -0
  462. crispy/quanty/templates/meta/xps/df/helper_functions.lua +244 -0
  463. crispy/quanty/templates/meta/xps/df/oh_lf.lua +136 -0
  464. crispy/quanty/templates/meta/xps/df/restrictions_lf.lua +20 -0
  465. crispy/quanty/templates/meta/xps/pd/base.lua +71 -0
  466. crispy/quanty/templates/meta/xps/pd/c3v_cf.lua +45 -0
  467. crispy/quanty/templates/meta/xps/pd/d3h_cf.lua +34 -0
  468. crispy/quanty/templates/meta/xps/pd/d4h_lf.lua +199 -0
  469. crispy/quanty/templates/meta/xps/pd/fields.lua +89 -0
  470. crispy/quanty/templates/meta/xps/pd/footer_cf.lua +75 -0
  471. crispy/quanty/templates/meta/xps/pd/footer_lf.lua +93 -0
  472. crispy/quanty/templates/meta/xps/pd/header_cf.lua +71 -0
  473. crispy/quanty/templates/meta/xps/pd/header_lf.lua +95 -0
  474. crispy/quanty/templates/meta/xps/pd/helper_functions.lua +244 -0
  475. crispy/quanty/templates/meta/xps/pd/oh_lf.lua +133 -0
  476. crispy/quanty/templates/meta/xps/pd/restrictions_cf.lua +10 -0
  477. crispy/quanty/templates/meta/xps/pd/restrictions_lf.lua +34 -0
  478. crispy/quanty/templates/meta/xps/pd/td_cf.lua +29 -0
  479. crispy/quanty/templates/meta/xps/pf/base.lua +76 -0
  480. crispy/quanty/templates/meta/xps/pf/fields.lua +89 -0
  481. crispy/quanty/templates/meta/xps/pf/footer_lf.lua +84 -0
  482. crispy/quanty/templates/meta/xps/pf/header_lf.lua +81 -0
  483. crispy/quanty/templates/meta/xps/pf/helper_functions.lua +244 -0
  484. crispy/quanty/templates/meta/xps/pf/oh_lf.lua +136 -0
  485. crispy/quanty/templates/meta/xps/pf/restrictions_lf.lua +20 -0
  486. crispy/quanty/templates/meta/xps/sd/base.lua +61 -0
  487. crispy/quanty/templates/meta/xps/sd/c3v_cf.lua +45 -0
  488. crispy/quanty/templates/meta/xps/sd/d3h_cf.lua +34 -0
  489. crispy/quanty/templates/meta/xps/sd/d4h_lf.lua +199 -0
  490. crispy/quanty/templates/meta/xps/sd/fields.lua +89 -0
  491. crispy/quanty/templates/meta/xps/sd/footer_cf.lua +75 -0
  492. crispy/quanty/templates/meta/xps/sd/footer_lf.lua +93 -0
  493. crispy/quanty/templates/meta/xps/sd/header_cf.lua +71 -0
  494. crispy/quanty/templates/meta/xps/sd/header_lf.lua +95 -0
  495. crispy/quanty/templates/meta/xps/sd/header_pd.lua +81 -0
  496. crispy/quanty/templates/meta/xps/sd/helper_functions.lua +244 -0
  497. crispy/quanty/templates/meta/xps/sd/oh_lf.lua +133 -0
  498. crispy/quanty/templates/meta/xps/sd/restrictions_cf.lua +10 -0
  499. crispy/quanty/templates/meta/xps/sd/restrictions_lf.lua +34 -0
  500. crispy/quanty/templates/meta/xps/sd/td_cf.lua +29 -0
  501. crispy/quanty/templates/tests/__init__.py +0 -0
  502. crispy/quanty/templates/tests/__pycache__/__init__.cpython-310.pyc +0 -0
  503. crispy/quanty/templates/tests/__pycache__/__init__.cpython-311.pyc +0 -0
  504. crispy/quanty/templates/tests/__pycache__/test_templates.cpython-310-pytest-7.4.3.pyc +0 -0
  505. crispy/quanty/templates/tests/__pycache__/test_templates.cpython-311-pytest-7.4.3.pyc +0 -0
  506. crispy/quanty/templates/tests/__pycache__/test_templates.cpython-311-pytest-8.3.3.pyc +0 -0
  507. crispy/quanty/templates/tests/references/0/test.lua +830 -0
  508. crispy/quanty/templates/tests/references/0/test_iso.spec +2006 -0
  509. crispy/quanty/templates/tests/references/1/test.lua +830 -0
  510. crispy/quanty/templates/tests/references/1/test_iso.spec +2006 -0
  511. crispy/quanty/templates/tests/references/2/test.lua +830 -0
  512. crispy/quanty/templates/tests/references/2/test_iso.spec +2006 -0
  513. crispy/quanty/templates/tests/references/3/test.lua +830 -0
  514. crispy/quanty/templates/tests/references/3/test_iso.spec +2006 -0
  515. crispy/quanty/templates/tests/references/4/test.lua +830 -0
  516. crispy/quanty/templates/tests/references/4/test_iso.spec +2006 -0
  517. crispy/quanty/templates/tests/references/5/test.lua +896 -0
  518. crispy/quanty/templates/tests/references/5/test_iso.spec +2006 -0
  519. crispy/quanty/templates/tests/references/6/test.lua +664 -0
  520. crispy/quanty/templates/tests/references/6/test_iso.spec +2006 -0
  521. crispy/quanty/templates/tests/references/7/test.lua +675 -0
  522. crispy/quanty/templates/tests/references/7/test_iso.spec +2006 -0
  523. crispy/quanty/templates/tests/test_data.yaml +163 -0
  524. crispy/quanty/templates/tests/test_templates.py +77 -0
  525. crispy/quanty/uis/axis.ui +364 -0
  526. crispy/quanty/uis/details/axis.ui +181 -0
  527. crispy/quanty/uis/details/main.ui +271 -0
  528. crispy/quanty/uis/general.ui +272 -0
  529. crispy/quanty/uis/hamiltonian.ui +385 -0
  530. crispy/quanty/uis/main.ui +181 -0
  531. crispy/quanty/uis/preferences.ui +212 -0
  532. crispy/quanty/uis/progress.ui +55 -0
  533. crispy/quanty/uis/results.ui +65 -0
  534. crispy/uic.py +225 -0
  535. crispy/uis/about.ui +265 -0
  536. crispy/uis/main.ui +132 -0
  537. crispy/uis/update.ui +130 -0
  538. crispy/utils.py +82 -0
  539. crispy/views.py +83 -0
  540. crispy/widgets.py +147 -0
  541. crispy-0.8.0.dist-info/LICENSE.rst +21 -0
  542. crispy-0.8.0.dist-info/METADATA +166 -0
  543. crispy-0.8.0.dist-info/RECORD +546 -0
  544. crispy-0.8.0.dist-info/WHEEL +5 -0
  545. crispy-0.8.0.dist-info/entry_points.txt +2 -0
  546. crispy-0.8.0.dist-info/top_level.txt +1 -0
crispy/__init__.py ADDED
@@ -0,0 +1,22 @@
1
+ ###################################################################
2
+ # Copyright (c) 2016-2024 European Synchrotron Radiation Facility #
3
+ # #
4
+ # Author: Marius Retegan #
5
+ # #
6
+ # This work is licensed under the terms of the MIT license. #
7
+ # For further information, see https://github.com/mretegan/crispy #
8
+ ###################################################################
9
+ """This is the Crispy package."""
10
+
11
+ __version__ = "0.8.0"
12
+ import os
13
+ import sys
14
+
15
+ version = __version__
16
+
17
+
18
+ # https://stackoverflow.com/questions/7674790/bundling-data-files-with-pyinstaller-onefile
19
+ def resourceAbsolutePath(relativePath):
20
+ """Get the absolute path to a resource. Works for development and for PyInstaller."""
21
+ basePath = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__)))
22
+ return os.path.join(basePath, relativePath)
crispy/__main__.py ADDED
@@ -0,0 +1,282 @@
1
+ ###################################################################
2
+ # Copyright (c) 2016-2024 European Synchrotron Radiation Facility #
3
+ # #
4
+ # Author: Marius Retegan #
5
+ # #
6
+ # This work is licensed under the terms of the MIT license. #
7
+ # For further information, see https://github.com/mretegan/crispy #
8
+ ###################################################################
9
+ """This module is the entry point to the application."""
10
+
11
+ import json
12
+ import logging
13
+ import numpy as np
14
+ import os
15
+ import socket
16
+ import sys
17
+ import warnings
18
+ from urllib.error import URLError
19
+ from urllib.request import Request, urlopen
20
+
21
+ from silx.gui.qt import (
22
+ QAction,
23
+ QApplication,
24
+ QByteArray,
25
+ QDialog,
26
+ QIcon,
27
+ QLocale,
28
+ QMainWindow,
29
+ QPixmap,
30
+ QPlainTextEdit,
31
+ QPoint,
32
+ QSize,
33
+ Qt,
34
+ QThread,
35
+ QProcess,
36
+ QFileDialog,
37
+ pyqtSignal,
38
+ )
39
+
40
+ from crispy import resourceAbsolutePath, version
41
+ from crispy.config import Config
42
+ from crispy.loggers import StatusBarHandler, setUpLoggers
43
+ from crispy.plot import MainPlotWidget # noqa: F401
44
+ from crispy.quanty.main import DockWidget
45
+ from crispy.uic import loadUi
46
+ from crispy.utils import fixedFont
47
+
48
+ logger = logging.getLogger("crispy.main")
49
+ warnings.filterwarnings("ignore", category=UserWarning)
50
+
51
+ settings = Config().read()
52
+
53
+
54
+ class MainWindow(QMainWindow):
55
+ def __init__(self, parent=None):
56
+ super().__init__(parent=parent)
57
+
58
+ uiPath = os.path.join("uis", "main.ui")
59
+ loadUi(resourceAbsolutePath(uiPath), baseinstance=self)
60
+
61
+ self.setWindowTitle("Crispy")
62
+
63
+ # Set the icon.
64
+ iconPath = os.path.join("crispy.png")
65
+ self.setWindowIcon(QIcon(resourceAbsolutePath(iconPath)))
66
+
67
+ # Setup the logger widget.
68
+ self.loggerWidget.setFont(fixedFont())
69
+ self.loggerWidget.setLineWrapMode(QPlainTextEdit.NoWrap)
70
+
71
+ # Setup the about dialog.
72
+ self.aboutDialog = AboutDialog(parent=self)
73
+
74
+ # Instantiate the Quanty dock widget.
75
+ self.quantyDockWidget = DockWidget(parent=self)
76
+ self.quantyDockWidget.setVisible(True)
77
+ self.addDockWidget(Qt.RightDockWidgetArea, self.quantyDockWidget)
78
+
79
+ # Compose the menu.
80
+ menu = self.menuBar().addMenu("Quanty")
81
+ menu.addAction(self.quantyDockWidget.preferencesAction)
82
+ menu.addSeparator()
83
+ menu.addAction(self.quantyDockWidget.saveInputAction)
84
+ menu.addAction(self.quantyDockWidget.saveInputAsAction)
85
+ menu.addSeparator()
86
+ menu.addAction(self.quantyDockWidget.showHideAction)
87
+
88
+ menu = self.menuBar().addMenu("Tools")
89
+ self.loadExternalDataAction = QAction(
90
+ "Load External Data", self, triggered=self.loadExternalData
91
+ )
92
+ menu.addAction(self.loadExternalDataAction)
93
+
94
+ self.runJupyterLabAction = QAction(
95
+ "Start Jupyter Lab", self, triggered=self.runJupyterLab
96
+ )
97
+ menu.addAction(self.runJupyterLabAction)
98
+
99
+ menu = self.menuBar().addMenu("Help")
100
+ self.openAboutDialogAction = QAction(
101
+ "About Crispy", self, triggered=self.openAboutDialog
102
+ )
103
+ menu.addAction(self.openAboutDialogAction)
104
+
105
+ # Register a handler to display messages in the status bar.
106
+ logger = logging.getLogger("crispy")
107
+ handler = StatusBarHandler()
108
+ logger.addHandler(handler)
109
+ # If I don't set the level here, the handler will also display debug
110
+ # messages, even though the level is set to INFO in the __init__ method.
111
+ handler.setLevel(logging.INFO)
112
+ handler.bridge.logUpdated.connect(self.updateStatusBar)
113
+
114
+ def updateStatusBar(self, message):
115
+ self.statusBar().showMessage(message, 3000)
116
+
117
+ def showEvent(self, event):
118
+ self.loadSettings()
119
+ super().showEvent(event)
120
+
121
+ def closeEvent(self, event):
122
+ self.saveSettings()
123
+ super().closeEvent(event)
124
+
125
+ def loadSettings(self):
126
+ settings.beginGroup("MainWindow")
127
+
128
+ state = settings.value("State")
129
+ if state is not None:
130
+ self.restoreState(QByteArray(state))
131
+
132
+ size = settings.value("Size")
133
+ if size is not None:
134
+ self.resize(QSize(size))
135
+
136
+ pos = settings.value("Position")
137
+ if pos is not None:
138
+ self.move(QPoint(pos))
139
+
140
+ splitter = settings.value("Splitter")
141
+ if splitter is not None:
142
+ sizes = [int(size) for size in splitter]
143
+ else:
144
+ sizes = [6, 1]
145
+ self.splitter.setSizes(sizes)
146
+ settings.endGroup()
147
+
148
+ def saveSettings(self):
149
+ settings.beginGroup("MainWindow")
150
+ settings.setValue("State", self.saveState())
151
+ settings.setValue("Size", self.size())
152
+ settings.setValue("Position", self.pos())
153
+ settings.setValue("Splitter", self.splitter.sizes())
154
+ settings.endGroup()
155
+
156
+ settings.sync()
157
+
158
+ def openAboutDialog(self):
159
+ self.aboutDialog.exec()
160
+
161
+ def loadExternalData(self):
162
+ dialog = QFileDialog()
163
+ path, _ = dialog.getOpenFileName(self, "Select File")
164
+
165
+ if path:
166
+ try:
167
+ x, y = np.loadtxt(path, unpack=True)
168
+ except ValueError:
169
+ logger.error(f"Failed to load data from {path}")
170
+ return
171
+
172
+ name = os.path.splitext(os.path.basename(path))[0]
173
+ self.quantyDockWidget.addExternalData(name, x, y)
174
+
175
+ def runJupyterLab(self):
176
+ process = QProcess()
177
+ process.setProgram("jupyter-lab")
178
+ process.setArguments([f"--notebook-dir={os.path.expanduser('~')}"])
179
+ process.startDetached()
180
+
181
+
182
+ class CheckUpdateThread(QThread):
183
+ updateAvailable = pyqtSignal()
184
+
185
+ @staticmethod
186
+ def _getSiteVersion():
187
+ URL = "http://www.esrf.eu/computing/scientific/crispy/version.json"
188
+
189
+ request = Request(URL)
190
+ request.add_header("Cache-Control", "max-age=0")
191
+
192
+ try:
193
+ response = urlopen(request, timeout=5)
194
+ except (URLError, socket.timeout):
195
+ return None
196
+
197
+ try:
198
+ data = json.loads(response.read().decode("utf-8"))
199
+ except Exception:
200
+ return None
201
+
202
+ return data["version"]
203
+
204
+ def run(self):
205
+ # TODO: The implementation is not ideal. The run() method of the parent
206
+ # class is not called.
207
+ # Wait a few seconds to avoid too much work at startup.
208
+ seconds = 1
209
+ self.sleep(seconds)
210
+ siteVersion = self._getSiteVersion()
211
+
212
+ if siteVersion is not None and version < siteVersion:
213
+ self.updateAvailable.emit()
214
+ else:
215
+ logger.info("There are no updates.")
216
+
217
+
218
+ class UpdateAvailableDialog(QDialog):
219
+ def __init__(self, parent):
220
+ super().__init__(parent)
221
+
222
+ uiPath = os.path.join("uis", "update.ui")
223
+ loadUi(resourceAbsolutePath(uiPath), baseinstance=self)
224
+
225
+
226
+ class AboutDialog(QDialog):
227
+ def __init__(self, parent):
228
+ super().__init__(parent)
229
+
230
+ uiPath = os.path.join("uis", "about.ui")
231
+ loadUi(resourceAbsolutePath(uiPath), baseinstance=self)
232
+
233
+ self.nameLabel.setText(f"Crispy {version}")
234
+
235
+ self.updateCheckBox.stateChanged.connect(self.updateCheckBoxStateChanged)
236
+ self.updateCheckBox.setChecked(settings.value("CheckForUpdates", type=bool))
237
+
238
+ iconPath = resourceAbsolutePath(os.path.join("icons", "crispy.svg"))
239
+ self.iconLabel.setPixmap(QPixmap(iconPath))
240
+
241
+ if settings.value("CheckForUpdates", type=bool):
242
+ self.runUpdateCheck()
243
+
244
+ def updateCheckBoxStateChanged(self):
245
+ updateCheck = self.updateCheckBox.isChecked()
246
+ settings.setValue("CheckForUpdates", updateCheck)
247
+ if updateCheck:
248
+ self.runUpdateCheck()
249
+
250
+ def runUpdateCheck(self):
251
+ thread = CheckUpdateThread(self)
252
+ thread.start()
253
+ thread.updateAvailable.connect(self.informAboutAvailableUpdate)
254
+
255
+ def informAboutAvailableUpdate(self):
256
+ updateAvailableDialog = UpdateAvailableDialog(self.parent())
257
+ updateAvailableDialog.show()
258
+
259
+
260
+ def main():
261
+ app = QApplication([])
262
+
263
+ # This must be done after the application is instantiated.
264
+ locale = QLocale(QLocale.C)
265
+ locale.setNumberOptions(QLocale.OmitGroupSeparator)
266
+ QLocale.setDefault(locale)
267
+
268
+ config = Config()
269
+ config.prune()
270
+
271
+ setUpLoggers()
272
+
273
+ logger.info("Starting the application.")
274
+ window = MainWindow()
275
+ window.show()
276
+ logger.info("Ready.")
277
+
278
+ sys.exit(app.exec())
279
+
280
+
281
+ if __name__ == "__main__":
282
+ main()
crispy/broaden.py ADDED
@@ -0,0 +1,112 @@
1
+ ###################################################################
2
+ # Copyright (c) 2016-2024 European Synchrotron Radiation Facility #
3
+ # #
4
+ # Author: Marius Retegan #
5
+ # #
6
+ # This work is licensed under the terms of the MIT license. #
7
+ # For further information, see https://github.com/mretegan/crispy #
8
+ ###################################################################
9
+ """The module implements fast FFT broadening."""
10
+
11
+ from math import ceil
12
+
13
+ import numpy as np
14
+
15
+
16
+ def gaussian_kernel1d(sigma=None, truncate=4):
17
+ size = ceil(2 * truncate * sigma + 1)
18
+ if size % 2 == 0:
19
+ size = size + 1
20
+ x = np.arange(size)
21
+ mu = np.median(x)
22
+ # The prefactor 1 / (sigma * np.sqrt(2 * np.pi)) drops in the normalization.
23
+ kernel = np.exp(-0.5 * ((x - mu) ** 2 / sigma**2))
24
+ if kernel.sum() < np.finfo(float).eps:
25
+ raise Exception(
26
+ f"The kernel can't be normalized, because its sum is {kernel.sum():.1e}."
27
+ )
28
+ kernel /= kernel.sum()
29
+ return kernel
30
+
31
+
32
+ def gaussian_kernel2d(sigma=None, truncate=(4, 4)):
33
+ if len(sigma) != 2 or len(truncate) != 2:
34
+ raise ValueError(
35
+ "Sigma and the truncation parameter don't have the required dimensions."
36
+ )
37
+ kernel_x = gaussian_kernel1d(sigma[0], truncate[0])
38
+ kernel_y = gaussian_kernel1d(sigma[1], truncate[1])
39
+ kernel = np.outer(kernel_y, kernel_x)
40
+ return kernel
41
+
42
+
43
+ def convolve_fft(array, kernel):
44
+ """Convolve an array with a kernel using FFT.
45
+
46
+ Implementation based on the convolve_fft function from astropy:
47
+ https://github.com/astropy/astropy/blob/main/astropy/convolution/convolve.py
48
+ """
49
+ array = np.asarray(array, dtype=complex)
50
+ kernel = np.asarray(kernel, dtype=complex)
51
+
52
+ if array.ndim != kernel.ndim:
53
+ raise ValueError("Image and kernel must have same number of dimensions")
54
+
55
+ new_shape = np.array(array.shape) + np.array(kernel.shape)
56
+
57
+ array_slices = []
58
+ kernel_slices = []
59
+ for new_dimsize, array_dimsize, kernel_dimsize in zip(
60
+ new_shape, array.shape, kernel.shape
61
+ ):
62
+ center = new_dimsize - (new_dimsize + 1) // 2
63
+ array_slices += [
64
+ slice(center - array_dimsize // 2, center + (array_dimsize + 1) // 2)
65
+ ]
66
+ kernel_slices += [
67
+ slice(center - kernel_dimsize // 2, center + (kernel_dimsize + 1) // 2)
68
+ ]
69
+
70
+ array_slices = tuple(array_slices)
71
+ kernel_slices = tuple(kernel_slices)
72
+
73
+ if not np.all(new_shape == array.shape):
74
+ big_array = np.zeros(new_shape, dtype=complex)
75
+ big_array[array_slices] = array
76
+ else:
77
+ big_array = array
78
+
79
+ if not np.all(new_shape == kernel.shape):
80
+ big_kernel = np.zeros(new_shape, dtype=complex)
81
+ big_kernel[kernel_slices] = kernel
82
+ else:
83
+ big_kernel = kernel
84
+
85
+ array_fft = np.fft.fftn(big_array)
86
+ kernel_fft = np.fft.fftn(np.fft.ifftshift(big_kernel))
87
+
88
+ rifft = np.fft.ifftn(array_fft * kernel_fft)
89
+
90
+ return rifft[array_slices].real
91
+
92
+
93
+ def broaden(array, fwhm=None, kind="gaussian"):
94
+ if fwhm is None:
95
+ return array
96
+
97
+ fwhm = np.array(fwhm)
98
+ if (fwhm <= 0).any():
99
+ return array
100
+
101
+ kernel = None
102
+ if kind == "gaussian":
103
+ sigma = fwhm / (2 * np.sqrt(2 * np.log(2)))
104
+ if fwhm.size == 1:
105
+ kernel = gaussian_kernel1d(sigma)
106
+ elif fwhm.size == 2:
107
+ kernel = gaussian_kernel2d(sigma)
108
+
109
+ if kernel is None:
110
+ return array
111
+
112
+ return convolve_fft(array, kernel)
crispy/config.py ADDED
@@ -0,0 +1,109 @@
1
+ ###################################################################
2
+ # Copyright (c) 2016-2024 European Synchrotron Radiation Facility #
3
+ # #
4
+ # Author: Marius Retegan #
5
+ # #
6
+ # This work is licensed under the terms of the MIT license. #
7
+ # For further information, see https://github.com/mretegan/crispy #
8
+ ###################################################################
9
+ """The modules provides a class to deal with the configuration."""
10
+
11
+ import logging
12
+ import os
13
+ import shutil
14
+ import sys
15
+
16
+ from packaging.version import parse
17
+ from silx.gui.qt import QSettings, QStandardPaths
18
+
19
+ from crispy import resourceAbsolutePath, version
20
+
21
+ logger = logging.getLogger(__name__)
22
+
23
+
24
+ class Config:
25
+ @property
26
+ def name(self):
27
+ return "Crispy" if sys.platform == "win32" else "crispy"
28
+
29
+ @property
30
+ def path(self):
31
+ return os.path.split(self.read().fileName())[0]
32
+
33
+ def read(self):
34
+ return QSettings(
35
+ QSettings.IniFormat, QSettings.UserScope, self.name, "settings"
36
+ )
37
+
38
+ def default(self):
39
+ """Set default settings."""
40
+ settings = self.read()
41
+ settings.clear()
42
+
43
+ logger.debug("Setting the default values.")
44
+
45
+ settings.beginGroup("Quanty")
46
+ settings.setValue("Path", self.findQuanty())
47
+ settings.setValue("Verbosity", "0x0000")
48
+ settings.setValue("DenseBorder", "2000")
49
+ settings.setValue("ShiftSpectra", True)
50
+ settings.setValue("RemoveFiles", True)
51
+ settings.endGroup()
52
+
53
+ settings.setValue("CheckForUpdates", True)
54
+ settings.setValue("CurrentPath", os.path.expanduser("~"))
55
+ settings.setValue("Version", version)
56
+
57
+ settings.sync()
58
+
59
+ def prune(self):
60
+ """Remove previous config files."""
61
+
62
+ root = QStandardPaths.standardLocations(QStandardPaths.GenericConfigLocation)[0]
63
+ path = os.path.join(root, self.name)
64
+ if os.path.exists(path):
65
+ shutil.rmtree(path, ignore_errors=True)
66
+
67
+ versionFromSettings = self.read().value("Version")
68
+ if versionFromSettings is None or parse(versionFromSettings) != parse(version):
69
+ path, _ = os.path.split(self.read().fileName())
70
+ shutil.rmtree(path, ignore_errors=True)
71
+ self.default()
72
+
73
+ @staticmethod
74
+ def findQuanty():
75
+ executable = "Quanty"
76
+ if sys.platform == "win32":
77
+ executable = f"{executable}.exe"
78
+ localPath = resourceAbsolutePath(os.path.join("quanty", "bin", "win32"))
79
+ elif sys.platform == "darwin":
80
+ localPath = resourceAbsolutePath(os.path.join("quanty", "bin", "darwin"))
81
+ elif sys.platform == "linux":
82
+ localPath = resourceAbsolutePath(os.path.join("quanty", "bin", "linux"))
83
+ else:
84
+ localPath = None
85
+
86
+ if localPath is not None:
87
+ localPath = QStandardPaths.findExecutable(executable, [localPath])
88
+
89
+ envPath = QStandardPaths.findExecutable(executable)
90
+ # Check if Quanty is in the paths defined in the $PATH.
91
+ if envPath:
92
+ path = envPath
93
+ # Check if Quanty is bundled with Crispy.
94
+ elif localPath is not None:
95
+ path = localPath
96
+ else:
97
+ path = None
98
+
99
+ if path is None:
100
+ logger.debug(
101
+ "Could not find the Quanty executable."
102
+ 'Please set it up using the "Preferences" dialog.'
103
+ )
104
+
105
+ return path
106
+
107
+ def setQuantyPath(self, path):
108
+ self.read().setValue("Quanty/Path", path)
109
+ self.read().sync()
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
3
+ <svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" version="1.1" viewBox="0 0 2048 2048" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
4
+ <g transform="matrix(.25009 0 0 .25009 -43.054 -43.069)">
5
+ <path d="m6465.7 1334.6h-1221.7c0-538.92-438.44-977.36-977.36-977.36s-977.36 438.44-977.36 977.36h-1221.7c-404.84 0-733.02 328.18-733.02 733.02v5375.5c0 404.84 328.18 733.02 733.02 733.02h4398.1c404.84 0 733.02-328.18 733.02-733.02v-5375.5c0-404.84-328.18-733.02-733.02-733.02h0.02zm-91.63 6108.5h-4214.8c-50.26 0-91.62-41.36-91.62-91.63v-5192.2c0-50.26 41.36-91.62 91.62-91.62h641.39v549.76c0 101.2 82.06 183.26 183.25 183.26h2565.6c101.2 0 183.25-82.06 183.25-183.26v-549.76h641.39c50.27 0 91.63 41.36 91.63 91.62v5192.2c0 50.27-41.36 91.63-91.63 91.63h-0.08zm-2107.4-6475c202.42 0 366.51 164.09 366.51 366.51s-164.09 366.51-366.51 366.51-366.51-164.09-366.51-366.51 164.09-366.51 366.51-366.51" fill-rule="nonzero"/>
6
+ <path d="m2831.1 4196.1h2871.2" fill="none" stroke="#000" stroke-width="625px"/>
7
+ <path d="m2831.1 5761.8h2871.2" fill="none" stroke="#000" stroke-width="625px"/>
8
+ </g>
9
+ </svg>
crispy/icons/cog.svg ADDED
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg version="1.1" viewBox="0 0 2048 2048" xmlns="http://www.w3.org/2000/svg">
3
+ <path d="m1741.4 1157.4 161.94 93.476c18.495 10.674 27.079 32.748 20.744 53.143-42.066 135.44-113.89 257.8-207.82 359.43a45.661 45.661 0 0 1-56.362 8.5652l-161.82-93.461a727.99 727.99 0 0 1-230.88 133.49v186.89a45.638 45.638 0 0 1-35.633 44.528c-132.83 29.83-275.5 31.373-415.03 0.038-20.862-4.6854-35.731-23.165-35.731-44.547v-186.9a727.91 727.91 0 0 1-230.88-133.49l-161.82 93.461a45.661 45.661 0 0 1-56.362-8.5652c-93.928-101.63-165.75-223.99-207.82-359.43-6.3346-20.391 2.2496-42.465 20.744-53.143l161.94-93.488a735.22 735.22 0 0 1 0-266.76l-161.94-93.476c-18.495-10.674-27.079-32.748-20.744-53.143 42.066-135.44 113.89-257.8 207.82-359.43a45.661 45.661 0 0 1 56.362-8.5652l161.82 93.461a727.99 727.99 0 0 1 230.88-133.49v-186.9a45.638 45.638 0 0 1 35.633-44.528c132.83-29.83 275.5-31.373 415.03-0.038 20.862 4.6854 35.731 23.165 35.731 44.547v186.9a727.91 727.91 0 0 1 230.88 133.49l161.82-93.461a45.661 45.661 0 0 1 56.362 8.5652c93.928 101.63 165.75 223.99 207.82 359.43 6.3346 20.391-2.2496 42.465-20.744 53.143l-161.94 93.476a735.24 735.24 0 0 1 0 266.76zm-413.39-133.38c0-167.63-136.37-304-304-304s-304 136.37-304 304 136.37 304 304 304 304-136.37 304-304z" stroke-width="3.8"/>
4
+ </svg>
Binary file
@@ -0,0 +1,36 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
3
+ <svg clip-rule="evenodd" fill-rule="evenodd" version="1.1" viewBox="0 0 1007 1007" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
4
+ <g transform="translate(-1367.2 -1940.2)">
5
+ <g transform="scale(4.1667)">
6
+ <g transform="translate(-.69718 165.43)">
7
+ <path d="m548.6 421c0 54.672-44.32 98.991-98.992 98.991-54.671 0-98.991-44.319-98.991-98.991 0-54.671 44.32-98.991 98.991-98.991 54.672 0 98.992 44.32 98.992 98.991" fill="#1f78b4" fill-rule="nonzero"/>
8
+ </g>
9
+ </g>
10
+ <g transform="scale(4.1667)">
11
+ <g transform="matrix(0 -1.2379 -1.2379 -0 970.07 1143)">
12
+ <ellipse cx="449.61" cy="421" rx="77.588" ry="77.589" fill="none" stroke="#a6cee3" stroke-width="9.69px"/>
13
+ </g>
14
+ </g>
15
+ <g transform="scale(4.1667)">
16
+ <g transform="matrix(.42909 .42909 -.42909 .42909 450.8 -507.87)">
17
+ <path d="m1273.1 1171.7c-58.34 0-105.63 47.29-105.63 105.63 0 58.29 47.33 105.62 105.63 105.62 58.33 0 105.63-47.29 105.63-105.62" fill="none" stroke="#2fa037" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" stroke-width="16.48px"/>
18
+ </g>
19
+ </g>
20
+ <g transform="scale(4.1667)">
21
+ <g transform="matrix(.30605 .30605 -.30605 .30605 450.58 -194.15)">
22
+ <path d="m1273.1 1171.7c-58.34 0-105.63 47.29-105.63 105.63 0 58.29 47.33 105.62 105.63 105.62 58.33 0 105.63-47.29 105.63-105.62" fill="none" stroke="#b3d388" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" stroke-width="23.1px"/>
23
+ </g>
24
+ </g>
25
+ <g transform="scale(4.1667)">
26
+ <g transform="matrix(.42567 0 0 .42567 -253.21 87.72)">
27
+ <circle cx="1662.6" cy="1278.6" r="24.667" fill="#b3d388"/>
28
+ </g>
29
+ </g>
30
+ <g transform="scale(4.1667)">
31
+ <g transform="matrix(.42567 0 0 .42567 -290.06 -13.085)">
32
+ <circle cx="1662.6" cy="1278.6" r="24.667" fill="#2fa037"/>
33
+ </g>
34
+ </g>
35
+ </g>
36
+ </svg>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg version="1.1" viewBox="0 0 2048 2048" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
3
+ <path d="m1844.6 914.56h-163.97v-164.16c0-90.664-73.496-164.16-164.16-164.16h-547.2l-218.88-218.88h-547.2c-90.664 0-164.16 73.496-164.16 164.16v984.96c0 90.664 73.496 164.16 164.16 164.16h1368a164.16 164.16 0 0 0 139.21-77.155l273.4-437.76c68.222-109.16-10.39-251.16-139.2-251.16zm-1620.9-383.04h458.68l218.88 218.88h594.68a20.52 20.52 0 0 1 20.52 20.52v143.64h-957.6a164.16 164.16 0 0 0-140.56 79.351l-215.12 356.52v-798.42a20.496 20.496 0 0 1 20.52-20.496zm1347.5 984.96h-1285.9l264.14-437.76h1295.4z" stroke-width="3.42"/>
4
+ </svg>
crispy/icons/play.svg ADDED
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg version="1.1" viewBox="0 0 2048 2048" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
3
+ <path d="m1785.5 866.9-1337.6-790.78c-108.68-64.22-275.12-1.9-275.12 156.94v1581.2c0 142.5 154.66 228.38 275.12 156.94l1337.6-790.4c119.32-70.3 119.7-243.58 0-313.88z" fill="#27ae60" stroke-width="3.8"/>
4
+ </svg>
crispy/icons/save.svg ADDED
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg version="1.1" viewBox="0 0 2048 2048" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
3
+ <path d="m1821.8 544.98-318.75-318.75a182.4 182.4 0 0 0-128.98-53.424h-1018.8c-100.74 0-182.4 81.662-182.4 182.4v1337.6c0 100.74 81.662 182.4 182.4 182.4h1337.6c100.74 0 182.4-81.662 182.4-182.4v-1018.8a182.4 182.4 0 0 0-53.424-128.98zm-615.38-189.78v304h-486.4v-304zm463.6 1337.6h-1292a22.8 22.8 0 0 1-22.8-22.8v-1292a22.8 22.8 0 0 1 22.8-22.8h159.6v395.2c0 50.369 40.831 91.2 91.2 91.2h668.8c50.369 0 91.2-40.831 91.2-91.2v-380.45l297.32 297.32a22.8 22.8 0 0 1 6.6766 16.123v986.6a22.8 22.8 0 0 1-22.8 22.8zm-646-760c-184.39 0-334.4 150.01-334.4 334.4s150.01 334.4 334.4 334.4 334.4-150.01 334.4-334.4-150.01-334.4-334.4-334.4zm0 486.4c-83.813 0-152-68.187-152-152s68.187-152 152-152 152 68.187 152 152-68.187 152-152 152z" stroke-width="3.8"/>
4
+ </svg>
crispy/icons/stop.svg ADDED
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg version="1.1" viewBox="0 0 2048 2048" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
3
+ <path d="m1692.8 172.8h-1337.6c-100.7 0-182.4 81.7-182.4 182.4v1337.6c0 100.7 81.7 182.4 182.4 182.4h1337.6c100.7 0 182.4-81.7 182.4-182.4v-1337.6c0-100.7-81.7-182.4-182.4-182.4z" fill="#c0392b" stroke-width="3.8"/>
4
+ </svg>
crispy/icons/trash.svg ADDED
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg version="1.1" viewBox="0 0 2048 2048" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
3
+ <path d="m902.4 765.6v820.8c0 25.183-20.417 45.6-45.6 45.6h-91.2c-25.183 0-45.6-20.417-45.6-45.6v-820.8c0-25.183 20.417-45.6 45.6-45.6h91.2c25.183 0 45.6 20.417 45.6 45.6zm380-45.6h-91.2c-25.183 0-45.6 20.417-45.6 45.6v820.8c0 25.183 20.417 45.6 45.6 45.6h91.2c25.183 0 45.6-20.417 45.6-45.6v-820.8c0-25.183-20.417-45.6-45.6-45.6zm501.6-364.8c50.369 0 91.2 40.831 91.2 91.2v45.6c0 25.183-20.417 45.6-45.6 45.6h-76v1276.8c0 100.74-81.662 182.4-182.4 182.4h-1094.4c-100.74 0-182.4-81.662-182.4-182.4v-1276.8h-76c-25.183 0-45.6-20.417-45.6-45.6v-45.6c0-50.369 40.831-91.2 91.2-91.2h282.76l129.27-215.44a182.4 182.4 0 0 1 156.41-88.555h383.13a182.4 182.4 0 0 1 156.41 88.555l129.26 215.44zm-1024.5 0h529.05l-66.318-110.53a22.8 22.8 0 0 0-19.551-11.069h-357.31a22.8 22.8 0 0 0-19.551 11.069zm811.72 182.4h-1094.4v1254a22.8 22.8 0 0 0 22.8 22.8h1048.8a22.8 22.8 0 0 0 22.8-22.8z" stroke-width="3.8"/>
4
+ </svg>