quarchpy 2.1.13.dev2__py2.py3-none-any.whl → 2.1.14__py2.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 (820) hide show
  1. quarchpy/.idea/.name +1 -1
  2. quarchpy/.idea/modules.xml +1 -0
  3. quarchpy/.idea/quarchpy.iml +4 -1
  4. quarchpy/.idea/workspace.xml +208 -11
  5. quarchpy/__pycache__/__init__.cpython-311.pyc +0 -0
  6. quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
  7. quarchpy/__pycache__/connection.cpython-311.pyc +0 -0
  8. quarchpy/__pycache__/run.cpython-311.pyc +0 -0
  9. quarchpy/_version.py +1 -1
  10. quarchpy/config_files/__pycache__/__init__.cpython-311.pyc +0 -0
  11. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-311.pyc +0 -0
  12. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-311.pyc +0 -0
  13. quarchpy/connection_specific/__pycache__/__init__.cpython-311.pyc +0 -0
  14. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-311.pyc +0 -0
  15. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-311.pyc +0 -0
  16. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-311.pyc +0 -0
  17. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-311.pyc +0 -0
  18. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-311.pyc +0 -0
  19. quarchpy/connection_specific/__pycache__/connection_Telnet.cpython-311.pyc +0 -0
  20. quarchpy/connection_specific/__pycache__/connection_USB.cpython-311.pyc +0 -0
  21. quarchpy/connection_specific/__pycache__/connection_mDNS.cpython-311.pyc +0 -0
  22. quarchpy/connection_specific/connection_QIS.py +237 -320
  23. quarchpy/connection_specific/connection_ReST.py +26 -16
  24. quarchpy/connection_specific/connection_TCP.py +1 -1
  25. quarchpy/connection_specific/connection_mDNS.py +46 -0
  26. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-311.pyc +0 -0
  27. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-311.pyc +0 -0
  28. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-311.pyc +0 -0
  29. quarchpy/connection_specific/serial/__pycache__/win32.cpython-311.pyc +0 -0
  30. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-311.pyc +0 -0
  31. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-311.pyc +0 -0
  32. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-311.pyc +0 -0
  33. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-311.pyc +0 -0
  34. quarchpy/debug/__pycache__/SystemTest.cpython-311.pyc +0 -0
  35. quarchpy/debug/__pycache__/__init__.cpython-311.pyc +0 -0
  36. quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
  37. quarchpy/debug/__pycache__/simple_terminal.cpython-311.pyc +0 -0
  38. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-311.pyc +0 -0
  39. quarchpy/debug/__pycache__/versionCompare.cpython-311.pyc +0 -0
  40. quarchpy/device/__pycache__/__init__.cpython-311.pyc +0 -0
  41. quarchpy/device/__pycache__/device.cpython-311.pyc +0 -0
  42. quarchpy/device/__pycache__/quarchArray.cpython-311.pyc +0 -0
  43. quarchpy/device/__pycache__/quarchPPM.cpython-311.pyc +0 -0
  44. quarchpy/device/__pycache__/quarchQPS.cpython-311.pyc +0 -0
  45. quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
  46. quarchpy/device/quarchPPM.py +2 -2
  47. quarchpy/device/quarchQPS.py +95 -86
  48. quarchpy/device/scanDevices.py +13 -3
  49. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-311.pyc +0 -0
  50. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-311.pyc +0 -0
  51. quarchpy/disk_test/__pycache__/__init__.cpython-311.pyc +0 -0
  52. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-311.pyc +0 -0
  53. quarchpy/docs/CHANGES.rst +11 -1
  54. quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
  55. quarchpy/docs/_build/doctrees/environment.pickle +0 -0
  56. quarchpy/docs/_build/doctrees/index.doctree +0 -0
  57. quarchpy/docs/_build/doctrees/readme.doctree +0 -0
  58. quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
  59. quarchpy/docs/_build/doctrees/source/licenses.doctree +0 -0
  60. quarchpy/docs/_build/doctrees/source/modules.doctree +0 -0
  61. quarchpy/docs/_build/doctrees/source/quarchpy.calibration.doctree +0 -0
  62. quarchpy/docs/_build/doctrees/source/quarchpy.config_files.doctree +0 -0
  63. quarchpy/docs/_build/doctrees/source/quarchpy.connection_specific.doctree +0 -0
  64. quarchpy/docs/_build/doctrees/source/quarchpy.debug.doctree +0 -0
  65. quarchpy/docs/_build/doctrees/source/quarchpy.device.doctree +0 -0
  66. quarchpy/docs/_build/doctrees/source/quarchpy.disk_test.doctree +0 -0
  67. quarchpy/docs/_build/doctrees/source/quarchpy.doctree +0 -0
  68. quarchpy/docs/_build/doctrees/source/quarchpy.fio.doctree +0 -0
  69. quarchpy/docs/_build/doctrees/source/quarchpy.iometer.doctree +0 -0
  70. quarchpy/docs/_build/doctrees/source/quarchpy.qis.doctree +0 -0
  71. quarchpy/docs/_build/doctrees/source/quarchpy.qps.doctree +0 -0
  72. quarchpy/docs/_build/doctrees/source/quarchpy.user_interface.doctree +0 -0
  73. quarchpy/docs/_build/doctrees/source/quarchpy.utilities.doctree +0 -0
  74. quarchpy/docs/_build/doctrees/source/readme.doctree +0 -0
  75. quarchpy/docs/_build/html/.buildinfo +1 -1
  76. quarchpy/docs/_build/html/CHANGES.html +198 -156
  77. quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +30 -0
  78. quarchpy/docs/_build/html/_static/alabaster.css +3 -1
  79. quarchpy/docs/_build/html/_static/basic.css +47 -27
  80. quarchpy/docs/_build/html/_static/doctools.js +107 -274
  81. quarchpy/docs/_build/html/_static/documentation_options.js +5 -4
  82. quarchpy/docs/_build/html/_static/language_data.js +2 -100
  83. quarchpy/docs/_build/html/_static/pygments.css +1 -0
  84. quarchpy/docs/_build/html/_static/searchtools.js +440 -395
  85. quarchpy/docs/_build/html/_static/sphinx_highlight.js +154 -0
  86. quarchpy/docs/_build/html/genindex.html +263 -87
  87. quarchpy/docs/_build/html/index.html +68 -63
  88. quarchpy/docs/_build/html/objects.inv +0 -0
  89. quarchpy/docs/_build/html/py-modindex.html +9 -11
  90. quarchpy/docs/_build/html/readme.html +26 -27
  91. quarchpy/docs/_build/html/search.html +8 -10
  92. quarchpy/docs/_build/html/searchindex.js +1 -1
  93. quarchpy/docs/_build/html/source/changelog.html +249 -201
  94. quarchpy/docs/_build/html/source/licenses.html +23 -24
  95. quarchpy/docs/_build/html/source/modules.html +24 -17
  96. quarchpy/docs/_build/html/source/quarchpy.calibration.html +44 -45
  97. quarchpy/docs/_build/html/source/quarchpy.config_files.html +25 -26
  98. quarchpy/docs/_build/html/source/quarchpy.connection_specific.html +239 -133
  99. quarchpy/docs/_build/html/source/quarchpy.debug.html +57 -54
  100. quarchpy/docs/_build/html/source/quarchpy.device.html +245 -211
  101. quarchpy/docs/_build/html/source/quarchpy.disk_test.html +75 -76
  102. quarchpy/docs/_build/html/source/quarchpy.fio.html +33 -34
  103. quarchpy/docs/_build/html/source/quarchpy.html +518 -61
  104. quarchpy/docs/_build/html/source/quarchpy.iometer.html +130 -44
  105. quarchpy/docs/_build/html/source/quarchpy.qis.html +420 -44
  106. quarchpy/docs/_build/html/source/quarchpy.qps.html +44 -43
  107. quarchpy/docs/_build/html/source/quarchpy.user_interface.html +70 -120
  108. quarchpy/docs/_build/html/source/quarchpy.utilities.html +39 -40
  109. quarchpy/docs/_build/html/source/readme.html +26 -27
  110. quarchpy/fio/__pycache__/FIO_interface.cpython-311.pyc +0 -0
  111. quarchpy/fio/__pycache__/__init__.cpython-311.pyc +0 -0
  112. quarchpy/fio/__pycache__/fioDiskFinder.cpython-311.pyc +0 -0
  113. quarchpy/iometer/__pycache__/__init__.cpython-311.pyc +0 -0
  114. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-311.pyc +0 -0
  115. quarchpy/iometer/__pycache__/iometerFuncs.cpython-311.pyc +0 -0
  116. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-311.pyc +0 -0
  117. quarchpy/qis/__pycache__/__init__.cpython-311.pyc +0 -0
  118. quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc +0 -0
  119. quarchpy/qis/qisFuncs.py +25 -42
  120. quarchpy/qps/__pycache__/__init__.cpython-311.pyc +0 -0
  121. quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
  122. quarchpy/qps/qpsFuncs.py +18 -19
  123. quarchpy/run.py +1 -1
  124. quarchpy/user_interface/__pycache__/__init__.cpython-311.pyc +0 -0
  125. quarchpy/user_interface/__pycache__/user_interface.cpython-311.pyc +0 -0
  126. quarchpy/utilities/TestCenter.py +1 -1
  127. quarchpy/utilities/Version.py +50 -0
  128. quarchpy/utilities/__pycache__/TestCenter.cpython-311.pyc +0 -0
  129. quarchpy/utilities/__pycache__/TimeValue.cpython-311.pyc +0 -0
  130. quarchpy/utilities/__pycache__/Version.cpython-311.pyc +0 -0
  131. quarchpy/utilities/__pycache__/__init__.cpython-311.pyc +0 -0
  132. quarchpy/venv/.gitignore +2 -0
  133. quarchpy/venv/Include/Python-ast.h +535 -0
  134. quarchpy/venv/Include/Python.h +181 -0
  135. quarchpy/venv/Include/abstract.h +1396 -0
  136. quarchpy/venv/Include/asdl.h +45 -0
  137. quarchpy/venv/Include/ast.h +13 -0
  138. quarchpy/venv/Include/bitset.h +32 -0
  139. quarchpy/venv/Include/boolobject.h +36 -0
  140. quarchpy/venv/Include/bufferobject.h +33 -0
  141. quarchpy/venv/Include/bytearrayobject.h +57 -0
  142. quarchpy/venv/Include/bytes_methods.h +75 -0
  143. quarchpy/venv/Include/bytesobject.h +27 -0
  144. quarchpy/venv/Include/cStringIO.h +73 -0
  145. quarchpy/venv/Include/cellobject.h +28 -0
  146. quarchpy/venv/Include/ceval.h +154 -0
  147. quarchpy/venv/Include/classobject.h +83 -0
  148. quarchpy/venv/Include/cobject.h +89 -0
  149. quarchpy/venv/Include/code.h +116 -0
  150. quarchpy/venv/Include/codecs.h +212 -0
  151. quarchpy/venv/Include/compile.h +40 -0
  152. quarchpy/venv/Include/complexobject.h +66 -0
  153. quarchpy/venv/Include/datetime.h +239 -0
  154. quarchpy/venv/Include/descrobject.h +94 -0
  155. quarchpy/venv/Include/dictobject.h +160 -0
  156. quarchpy/venv/Include/dtoa.h +15 -0
  157. quarchpy/venv/Include/enumobject.h +17 -0
  158. quarchpy/venv/Include/errcode.h +37 -0
  159. quarchpy/venv/Include/eval.h +25 -0
  160. quarchpy/venv/Include/fileobject.h +97 -0
  161. quarchpy/venv/Include/floatobject.h +140 -0
  162. quarchpy/venv/Include/frameobject.h +89 -0
  163. quarchpy/venv/Include/funcobject.h +76 -0
  164. quarchpy/venv/Include/genobject.h +40 -0
  165. quarchpy/venv/Include/graminit.h +87 -0
  166. quarchpy/venv/Include/grammar.h +94 -0
  167. quarchpy/venv/Include/import.h +71 -0
  168. quarchpy/venv/Include/intobject.h +84 -0
  169. quarchpy/venv/Include/intrcheck.h +15 -0
  170. quarchpy/venv/Include/iterobject.h +23 -0
  171. quarchpy/venv/Include/listobject.h +68 -0
  172. quarchpy/venv/Include/longintrepr.h +103 -0
  173. quarchpy/venv/Include/longobject.h +135 -0
  174. quarchpy/venv/Include/marshal.h +25 -0
  175. quarchpy/venv/Include/memoryobject.h +74 -0
  176. quarchpy/venv/Include/metagrammar.h +18 -0
  177. quarchpy/venv/Include/methodobject.h +93 -0
  178. quarchpy/venv/Include/modsupport.h +134 -0
  179. quarchpy/venv/Include/moduleobject.h +24 -0
  180. quarchpy/venv/Include/node.h +41 -0
  181. quarchpy/venv/Include/object.h +1046 -0
  182. quarchpy/venv/Include/objimpl.h +369 -0
  183. quarchpy/venv/Include/opcode.h +171 -0
  184. quarchpy/venv/Include/osdefs.h +63 -0
  185. quarchpy/venv/Include/parsetok.h +64 -0
  186. quarchpy/venv/Include/patchlevel.h +43 -0
  187. quarchpy/venv/Include/pgen.h +18 -0
  188. quarchpy/venv/Include/pgenheaders.h +43 -0
  189. quarchpy/venv/Include/py_curses.h +177 -0
  190. quarchpy/venv/Include/pyarena.h +62 -0
  191. quarchpy/venv/Include/pycapsule.h +56 -0
  192. quarchpy/venv/Include/pyconfig.h +770 -0
  193. quarchpy/venv/Include/pyctype.h +31 -0
  194. quarchpy/venv/Include/pydebug.h +41 -0
  195. quarchpy/venv/Include/pyerrors.h +329 -0
  196. quarchpy/venv/Include/pyexpat.h +50 -0
  197. quarchpy/venv/Include/pyfpe.h +176 -0
  198. quarchpy/venv/Include/pygetopt.h +18 -0
  199. quarchpy/venv/Include/pymacconfig.h +102 -0
  200. quarchpy/venv/Include/pymactoolbox.h +232 -0
  201. quarchpy/venv/Include/pymath.h +214 -0
  202. quarchpy/venv/Include/pymem.h +122 -0
  203. quarchpy/venv/Include/pyport.h +950 -0
  204. quarchpy/venv/Include/pystate.h +200 -0
  205. quarchpy/venv/Include/pystrcmp.h +23 -0
  206. quarchpy/venv/Include/pystrtod.h +45 -0
  207. quarchpy/venv/Include/pythonrun.h +181 -0
  208. quarchpy/venv/Include/pythread.h +41 -0
  209. quarchpy/venv/Include/rangeobject.h +28 -0
  210. quarchpy/venv/Include/setobject.h +99 -0
  211. quarchpy/venv/Include/sliceobject.h +50 -0
  212. quarchpy/venv/Include/stringobject.h +210 -0
  213. quarchpy/venv/Include/structmember.h +99 -0
  214. quarchpy/venv/Include/structseq.h +41 -0
  215. quarchpy/venv/Include/symtable.h +98 -0
  216. quarchpy/venv/Include/sysmodule.h +31 -0
  217. quarchpy/venv/Include/timefuncs.h +26 -0
  218. quarchpy/venv/Include/token.h +85 -0
  219. quarchpy/venv/Include/traceback.h +31 -0
  220. quarchpy/venv/Include/tupleobject.h +61 -0
  221. quarchpy/venv/Include/ucnhash.h +33 -0
  222. quarchpy/venv/Include/unicodeobject.h +1413 -0
  223. quarchpy/venv/Include/warnings.h +23 -0
  224. quarchpy/venv/Include/weakrefobject.h +82 -0
  225. quarchpy/venv/Lib/os.py +742 -0
  226. quarchpy/venv/Lib/os.pyc +0 -0
  227. quarchpy/venv/Lib/site-packages/_virtualenv.pth +1 -0
  228. quarchpy/venv/Lib/site-packages/_virtualenv.py +130 -0
  229. quarchpy/venv/Lib/site-packages/_virtualenv.pyc +0 -0
  230. quarchpy/venv/Lib/site-packages/easy_install.py +5 -0
  231. quarchpy/venv/Lib/site-packages/pip/__init__.py +18 -0
  232. quarchpy/venv/Lib/site-packages/pip/__main__.py +26 -0
  233. quarchpy/venv/Lib/site-packages/pip/_internal/__init__.py +17 -0
  234. quarchpy/venv/Lib/site-packages/pip/_internal/build_env.py +242 -0
  235. quarchpy/venv/Lib/site-packages/pip/_internal/cache.py +346 -0
  236. quarchpy/venv/Lib/site-packages/pip/_internal/cli/__init__.py +4 -0
  237. quarchpy/venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +164 -0
  238. quarchpy/venv/Lib/site-packages/pip/_internal/cli/base_command.py +260 -0
  239. quarchpy/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +971 -0
  240. quarchpy/venv/Lib/site-packages/pip/_internal/cli/command_context.py +36 -0
  241. quarchpy/venv/Lib/site-packages/pip/_internal/cli/main.py +75 -0
  242. quarchpy/venv/Lib/site-packages/pip/_internal/cli/main_parser.py +96 -0
  243. quarchpy/venv/Lib/site-packages/pip/_internal/cli/parser.py +285 -0
  244. quarchpy/venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +280 -0
  245. quarchpy/venv/Lib/site-packages/pip/_internal/cli/req_command.py +436 -0
  246. quarchpy/venv/Lib/site-packages/pip/_internal/cli/spinners.py +173 -0
  247. quarchpy/venv/Lib/site-packages/pip/_internal/cli/status_codes.py +8 -0
  248. quarchpy/venv/Lib/site-packages/pip/_internal/commands/__init__.py +123 -0
  249. quarchpy/venv/Lib/site-packages/pip/_internal/commands/cache.py +234 -0
  250. quarchpy/venv/Lib/site-packages/pip/_internal/commands/check.py +51 -0
  251. quarchpy/venv/Lib/site-packages/pip/_internal/commands/completion.py +98 -0
  252. quarchpy/venv/Lib/site-packages/pip/_internal/commands/configuration.py +280 -0
  253. quarchpy/venv/Lib/site-packages/pip/_internal/commands/debug.py +230 -0
  254. quarchpy/venv/Lib/site-packages/pip/_internal/commands/download.py +143 -0
  255. quarchpy/venv/Lib/site-packages/pip/_internal/commands/freeze.py +116 -0
  256. quarchpy/venv/Lib/site-packages/pip/_internal/commands/hash.py +63 -0
  257. quarchpy/venv/Lib/site-packages/pip/_internal/commands/help.py +46 -0
  258. quarchpy/venv/Lib/site-packages/pip/_internal/commands/install.py +737 -0
  259. quarchpy/venv/Lib/site-packages/pip/_internal/commands/list.py +327 -0
  260. quarchpy/venv/Lib/site-packages/pip/_internal/commands/search.py +169 -0
  261. quarchpy/venv/Lib/site-packages/pip/_internal/commands/show.py +186 -0
  262. quarchpy/venv/Lib/site-packages/pip/_internal/commands/uninstall.py +95 -0
  263. quarchpy/venv/Lib/site-packages/pip/_internal/commands/wheel.py +198 -0
  264. quarchpy/venv/Lib/site-packages/pip/_internal/configuration.py +407 -0
  265. quarchpy/venv/Lib/site-packages/pip/_internal/distributions/__init__.py +24 -0
  266. quarchpy/venv/Lib/site-packages/pip/_internal/distributions/base.py +46 -0
  267. quarchpy/venv/Lib/site-packages/pip/_internal/distributions/installed.py +25 -0
  268. quarchpy/venv/Lib/site-packages/pip/_internal/distributions/sdist.py +105 -0
  269. quarchpy/venv/Lib/site-packages/pip/_internal/distributions/wheel.py +37 -0
  270. quarchpy/venv/Lib/site-packages/pip/_internal/exceptions.py +391 -0
  271. quarchpy/venv/Lib/site-packages/pip/_internal/index/__init__.py +2 -0
  272. quarchpy/venv/Lib/site-packages/pip/_internal/index/collector.py +667 -0
  273. quarchpy/venv/Lib/site-packages/pip/_internal/index/package_finder.py +1015 -0
  274. quarchpy/venv/Lib/site-packages/pip/_internal/locations.py +193 -0
  275. quarchpy/venv/Lib/site-packages/pip/_internal/main.py +16 -0
  276. quarchpy/venv/Lib/site-packages/pip/_internal/models/__init__.py +2 -0
  277. quarchpy/venv/Lib/site-packages/pip/_internal/models/candidate.py +39 -0
  278. quarchpy/venv/Lib/site-packages/pip/_internal/models/direct_url.py +243 -0
  279. quarchpy/venv/Lib/site-packages/pip/_internal/models/format_control.py +92 -0
  280. quarchpy/venv/Lib/site-packages/pip/_internal/models/index.py +34 -0
  281. quarchpy/venv/Lib/site-packages/pip/_internal/models/link.py +246 -0
  282. quarchpy/venv/Lib/site-packages/pip/_internal/models/scheme.py +31 -0
  283. quarchpy/venv/Lib/site-packages/pip/_internal/models/search_scope.py +135 -0
  284. quarchpy/venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +50 -0
  285. quarchpy/venv/Lib/site-packages/pip/_internal/models/target_python.py +117 -0
  286. quarchpy/venv/Lib/site-packages/pip/_internal/models/wheel.py +78 -0
  287. quarchpy/venv/Lib/site-packages/pip/_internal/network/__init__.py +2 -0
  288. quarchpy/venv/Lib/site-packages/pip/_internal/network/auth.py +310 -0
  289. quarchpy/venv/Lib/site-packages/pip/_internal/network/cache.py +79 -0
  290. quarchpy/venv/Lib/site-packages/pip/_internal/network/download.py +202 -0
  291. quarchpy/venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +231 -0
  292. quarchpy/venv/Lib/site-packages/pip/_internal/network/session.py +428 -0
  293. quarchpy/venv/Lib/site-packages/pip/_internal/network/utils.py +97 -0
  294. quarchpy/venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +53 -0
  295. quarchpy/venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
  296. quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  297. quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +38 -0
  298. quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +77 -0
  299. quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +47 -0
  300. quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +113 -0
  301. quarchpy/venv/Lib/site-packages/pip/_internal/operations/check.py +155 -0
  302. quarchpy/venv/Lib/site-packages/pip/_internal/operations/freeze.py +277 -0
  303. quarchpy/venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +2 -0
  304. quarchpy/venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +52 -0
  305. quarchpy/venv/Lib/site-packages/pip/_internal/operations/install/legacy.py +130 -0
  306. quarchpy/venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +846 -0
  307. quarchpy/venv/Lib/site-packages/pip/_internal/operations/prepare.py +608 -0
  308. quarchpy/venv/Lib/site-packages/pip/_internal/pyproject.py +196 -0
  309. quarchpy/venv/Lib/site-packages/pip/_internal/req/__init__.py +103 -0
  310. quarchpy/venv/Lib/site-packages/pip/_internal/req/constructors.py +476 -0
  311. quarchpy/venv/Lib/site-packages/pip/_internal/req/req_file.py +574 -0
  312. quarchpy/venv/Lib/site-packages/pip/_internal/req/req_install.py +907 -0
  313. quarchpy/venv/Lib/site-packages/pip/_internal/req/req_set.py +204 -0
  314. quarchpy/venv/Lib/site-packages/pip/_internal/req/req_tracker.py +151 -0
  315. quarchpy/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +657 -0
  316. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
  317. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/base.py +21 -0
  318. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  319. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +473 -0
  320. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  321. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +156 -0
  322. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +604 -0
  323. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +504 -0
  324. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +101 -0
  325. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +174 -0
  326. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +84 -0
  327. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +201 -0
  328. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +296 -0
  329. quarchpy/venv/Lib/site-packages/pip/_internal/self_outdated_check.py +197 -0
  330. quarchpy/venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
  331. quarchpy/venv/Lib/site-packages/pip/_internal/utils/appdirs.py +44 -0
  332. quarchpy/venv/Lib/site-packages/pip/_internal/utils/compat.py +293 -0
  333. quarchpy/venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +178 -0
  334. quarchpy/venv/Lib/site-packages/pip/_internal/utils/datetime.py +14 -0
  335. quarchpy/venv/Lib/site-packages/pip/_internal/utils/deprecation.py +104 -0
  336. quarchpy/venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +126 -0
  337. quarchpy/venv/Lib/site-packages/pip/_internal/utils/distutils_args.py +48 -0
  338. quarchpy/venv/Lib/site-packages/pip/_internal/utils/encoding.py +41 -0
  339. quarchpy/venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +31 -0
  340. quarchpy/venv/Lib/site-packages/pip/_internal/utils/filesystem.py +224 -0
  341. quarchpy/venv/Lib/site-packages/pip/_internal/utils/filetypes.py +26 -0
  342. quarchpy/venv/Lib/site-packages/pip/_internal/utils/glibc.py +98 -0
  343. quarchpy/venv/Lib/site-packages/pip/_internal/utils/hashes.py +169 -0
  344. quarchpy/venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py +36 -0
  345. quarchpy/venv/Lib/site-packages/pip/_internal/utils/logging.py +399 -0
  346. quarchpy/venv/Lib/site-packages/pip/_internal/utils/misc.py +962 -0
  347. quarchpy/venv/Lib/site-packages/pip/_internal/utils/models.py +44 -0
  348. quarchpy/venv/Lib/site-packages/pip/_internal/utils/packaging.py +95 -0
  349. quarchpy/venv/Lib/site-packages/pip/_internal/utils/parallel.py +107 -0
  350. quarchpy/venv/Lib/site-packages/pip/_internal/utils/pkg_resources.py +44 -0
  351. quarchpy/venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +181 -0
  352. quarchpy/venv/Lib/site-packages/pip/_internal/utils/subprocess.py +299 -0
  353. quarchpy/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +284 -0
  354. quarchpy/venv/Lib/site-packages/pip/_internal/utils/typing.py +38 -0
  355. quarchpy/venv/Lib/site-packages/pip/_internal/utils/unpacking.py +281 -0
  356. quarchpy/venv/Lib/site-packages/pip/_internal/utils/urls.py +55 -0
  357. quarchpy/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +119 -0
  358. quarchpy/venv/Lib/site-packages/pip/_internal/utils/wheel.py +225 -0
  359. quarchpy/venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
  360. quarchpy/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +123 -0
  361. quarchpy/venv/Lib/site-packages/pip/_internal/vcs/git.py +454 -0
  362. quarchpy/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +172 -0
  363. quarchpy/venv/Lib/site-packages/pip/_internal/vcs/subversion.py +340 -0
  364. quarchpy/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +735 -0
  365. quarchpy/venv/Lib/site-packages/pip/_internal/wheel_builder.py +362 -0
  366. quarchpy/venv/Lib/site-packages/pip/_vendor/__init__.py +114 -0
  367. quarchpy/venv/Lib/site-packages/pip/_vendor/appdirs.py +633 -0
  368. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +11 -0
  369. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +57 -0
  370. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +133 -0
  371. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +39 -0
  372. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +2 -0
  373. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +146 -0
  374. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +33 -0
  375. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py +29 -0
  376. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +376 -0
  377. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +80 -0
  378. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +135 -0
  379. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +188 -0
  380. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +29 -0
  381. quarchpy/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +3 -0
  382. quarchpy/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
  383. quarchpy/venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem +4606 -0
  384. quarchpy/venv/Lib/site-packages/pip/_vendor/certifi/core.py +60 -0
  385. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/__init__.py +39 -0
  386. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py +386 -0
  387. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py +47 -0
  388. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py +233 -0
  389. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py +106 -0
  390. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py +145 -0
  391. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py +1 -0
  392. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py +85 -0
  393. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py +88 -0
  394. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/compat.py +34 -0
  395. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py +49 -0
  396. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/enums.py +76 -0
  397. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/escprober.py +101 -0
  398. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/escsm.py +246 -0
  399. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py +92 -0
  400. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py +195 -0
  401. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py +47 -0
  402. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py +387 -0
  403. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py +46 -0
  404. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py +283 -0
  405. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py +46 -0
  406. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py +292 -0
  407. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py +325 -0
  408. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py +233 -0
  409. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +228 -0
  410. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langcyrillicmodel.py +333 -0
  411. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py +225 -0
  412. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py +200 -0
  413. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py +225 -0
  414. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py +199 -0
  415. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py +193 -0
  416. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py +145 -0
  417. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py +91 -0
  418. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +54 -0
  419. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py +572 -0
  420. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py +132 -0
  421. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +73 -0
  422. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py +92 -0
  423. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py +286 -0
  424. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py +82 -0
  425. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/version.py +9 -0
  426. quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/__init__.py +6 -0
  427. quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/ansi.py +102 -0
  428. quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py +258 -0
  429. quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/initialise.py +80 -0
  430. quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/win32.py +152 -0
  431. quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/winterm.py +169 -0
  432. quarchpy/venv/Lib/site-packages/pip/_vendor/contextlib2.py +518 -0
  433. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +23 -0
  434. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py +6 -0
  435. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py +41 -0
  436. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py +764 -0
  437. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg +84 -0
  438. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py +786 -0
  439. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py +2607 -0
  440. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1120 -0
  441. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/database.py +1339 -0
  442. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/index.py +516 -0
  443. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/locators.py +1302 -0
  444. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/manifest.py +393 -0
  445. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/markers.py +131 -0
  446. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/metadata.py +1056 -0
  447. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/resources.py +355 -0
  448. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +419 -0
  449. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/t32.exe +0 -0
  450. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/t64.exe +0 -0
  451. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/util.py +1761 -0
  452. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/version.py +736 -0
  453. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/w32.exe +0 -0
  454. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/w64.exe +0 -0
  455. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/wheel.py +1018 -0
  456. quarchpy/venv/Lib/site-packages/pip/_vendor/distro.py +1230 -0
  457. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py +35 -0
  458. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py +289 -0
  459. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py +918 -0
  460. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py +1735 -0
  461. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py +5 -0
  462. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py +40 -0
  463. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py +67 -0
  464. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py +159 -0
  465. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/constants.py +2946 -0
  466. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py +0 -0
  467. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py +29 -0
  468. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py +12 -0
  469. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py +73 -0
  470. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py +93 -0
  471. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py +207 -0
  472. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py +916 -0
  473. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py +38 -0
  474. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py +2795 -0
  475. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py +409 -0
  476. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py +30 -0
  477. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py +54 -0
  478. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py +50 -0
  479. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py +88 -0
  480. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py +417 -0
  481. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py +239 -0
  482. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py +343 -0
  483. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py +392 -0
  484. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py +154 -0
  485. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py +252 -0
  486. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py +43 -0
  487. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py +131 -0
  488. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py +215 -0
  489. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py +69 -0
  490. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/__init__.py +2 -0
  491. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/codec.py +118 -0
  492. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/compat.py +12 -0
  493. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/core.py +400 -0
  494. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +2050 -0
  495. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/intranges.py +53 -0
  496. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/package_data.py +2 -0
  497. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8357 -0
  498. quarchpy/venv/Lib/site-packages/pip/_vendor/ipaddress.py +2420 -0
  499. quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +54 -0
  500. quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/_version.py +1 -0
  501. quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
  502. quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +191 -0
  503. quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +1063 -0
  504. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/__about__.py +27 -0
  505. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +26 -0
  506. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/_compat.py +38 -0
  507. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +86 -0
  508. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/_typing.py +48 -0
  509. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/markers.py +328 -0
  510. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +151 -0
  511. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +864 -0
  512. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/tags.py +852 -0
  513. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/utils.py +67 -0
  514. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/version.py +556 -0
  515. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/__init__.py +6 -0
  516. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/_in_process.py +280 -0
  517. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/build.py +124 -0
  518. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/check.py +203 -0
  519. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py +115 -0
  520. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/compat.py +34 -0
  521. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/dirtools.py +44 -0
  522. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py +167 -0
  523. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/meta.py +92 -0
  524. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py +327 -0
  525. quarchpy/venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3296 -0
  526. quarchpy/venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py +23 -0
  527. quarchpy/venv/Lib/site-packages/pip/_vendor/progress/__init__.py +177 -0
  528. quarchpy/venv/Lib/site-packages/pip/_vendor/progress/bar.py +91 -0
  529. quarchpy/venv/Lib/site-packages/pip/_vendor/progress/counter.py +41 -0
  530. quarchpy/venv/Lib/site-packages/pip/_vendor/progress/spinner.py +43 -0
  531. quarchpy/venv/Lib/site-packages/pip/_vendor/pyparsing.py +7107 -0
  532. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/__init__.py +144 -0
  533. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
  534. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +42 -0
  535. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/adapters.py +533 -0
  536. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/api.py +161 -0
  537. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/auth.py +305 -0
  538. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/certs.py +18 -0
  539. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/compat.py +76 -0
  540. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/cookies.py +549 -0
  541. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +123 -0
  542. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/help.py +119 -0
  543. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/hooks.py +34 -0
  544. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/models.py +956 -0
  545. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/packages.py +16 -0
  546. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/sessions.py +781 -0
  547. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +123 -0
  548. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/structures.py +105 -0
  549. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/utils.py +988 -0
  550. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +26 -0
  551. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py +0 -0
  552. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +6 -0
  553. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +119 -0
  554. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +37 -0
  555. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py +454 -0
  556. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +149 -0
  557. quarchpy/venv/Lib/site-packages/pip/_vendor/retrying.py +267 -0
  558. quarchpy/venv/Lib/site-packages/pip/_vendor/six.py +982 -0
  559. quarchpy/venv/Lib/site-packages/pip/_vendor/toml/__init__.py +25 -0
  560. quarchpy/venv/Lib/site-packages/pip/_vendor/toml/decoder.py +1057 -0
  561. quarchpy/venv/Lib/site-packages/pip/_vendor/toml/encoder.py +304 -0
  562. quarchpy/venv/Lib/site-packages/pip/_vendor/toml/ordered.py +15 -0
  563. quarchpy/venv/Lib/site-packages/pip/_vendor/toml/tz.py +24 -0
  564. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +85 -0
  565. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +337 -0
  566. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
  567. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +535 -0
  568. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1067 -0
  569. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  570. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
  571. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  572. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
  573. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +396 -0
  574. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
  575. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +121 -0
  576. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +509 -0
  577. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +920 -0
  578. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
  579. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +313 -0
  580. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
  581. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
  582. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +5 -0
  583. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  584. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
  585. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1021 -0
  586. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py +22 -0
  587. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +160 -0
  588. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +536 -0
  589. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/request.py +170 -0
  590. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/response.py +821 -0
  591. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
  592. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +150 -0
  593. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +56 -0
  594. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
  595. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +143 -0
  596. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
  597. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +601 -0
  598. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +474 -0
  599. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
  600. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +268 -0
  601. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +430 -0
  602. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +153 -0
  603. quarchpy/venv/Lib/site-packages/pip/_vendor/vendor.txt +24 -0
  604. quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py +342 -0
  605. quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/labels.py +231 -0
  606. quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py +59 -0
  607. quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/tests.py +153 -0
  608. quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py +325 -0
  609. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/INSTALLER +1 -0
  610. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/LICENSE.txt +20 -0
  611. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/METADATA +94 -0
  612. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/RECORD +812 -0
  613. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/WHEEL +6 -0
  614. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/entry_points.txt +5 -0
  615. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/top_level.txt +1 -0
  616. quarchpy/venv/Lib/site-packages/pip-20.3.4.virtualenv +0 -0
  617. quarchpy/venv/Lib/site-packages/pkg_resources/__init__.py +3296 -0
  618. quarchpy/venv/Lib/site-packages/pkg_resources/__init__.pyc +0 -0
  619. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/__init__.py +0 -0
  620. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/__init__.pyc +0 -0
  621. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py +608 -0
  622. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/appdirs.pyc +0 -0
  623. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py +21 -0
  624. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.pyc +0 -0
  625. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py +14 -0
  626. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.pyc +0 -0
  627. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py +30 -0
  628. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.pyc +0 -0
  629. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py +68 -0
  630. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.pyc +0 -0
  631. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py +301 -0
  632. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.pyc +0 -0
  633. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py +127 -0
  634. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.pyc +0 -0
  635. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py +774 -0
  636. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.pyc +0 -0
  637. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py +14 -0
  638. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py +393 -0
  639. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.pyc +0 -0
  640. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py +5742 -0
  641. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.pyc +0 -0
  642. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/six.py +868 -0
  643. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/six.pyc +0 -0
  644. quarchpy/venv/Lib/site-packages/pkg_resources/extern/__init__.py +73 -0
  645. quarchpy/venv/Lib/site-packages/pkg_resources/extern/__init__.pyc +0 -0
  646. quarchpy/venv/Lib/site-packages/pkg_resources/py31compat.py +23 -0
  647. quarchpy/venv/Lib/site-packages/pkg_resources/py31compat.pyc +0 -0
  648. quarchpy/venv/Lib/site-packages/setuptools/__init__.py +245 -0
  649. quarchpy/venv/Lib/site-packages/setuptools/_deprecation_warning.py +7 -0
  650. quarchpy/venv/Lib/site-packages/setuptools/_imp.py +73 -0
  651. quarchpy/venv/Lib/site-packages/setuptools/_vendor/__init__.py +0 -0
  652. quarchpy/venv/Lib/site-packages/setuptools/_vendor/ordered_set.py +488 -0
  653. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py +27 -0
  654. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +26 -0
  655. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py +31 -0
  656. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +68 -0
  657. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +296 -0
  658. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +138 -0
  659. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +749 -0
  660. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +404 -0
  661. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +57 -0
  662. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +420 -0
  663. quarchpy/venv/Lib/site-packages/setuptools/_vendor/pyparsing.py +5742 -0
  664. quarchpy/venv/Lib/site-packages/setuptools/_vendor/six.py +868 -0
  665. quarchpy/venv/Lib/site-packages/setuptools/archive_util.py +173 -0
  666. quarchpy/venv/Lib/site-packages/setuptools/build_meta.py +264 -0
  667. quarchpy/venv/Lib/site-packages/setuptools/cli-32.exe +0 -0
  668. quarchpy/venv/Lib/site-packages/setuptools/cli-64.exe +0 -0
  669. quarchpy/venv/Lib/site-packages/setuptools/cli.exe +0 -0
  670. quarchpy/venv/Lib/site-packages/setuptools/command/__init__.py +17 -0
  671. quarchpy/venv/Lib/site-packages/setuptools/command/alias.py +80 -0
  672. quarchpy/venv/Lib/site-packages/setuptools/command/bdist_egg.py +502 -0
  673. quarchpy/venv/Lib/site-packages/setuptools/command/bdist_rpm.py +43 -0
  674. quarchpy/venv/Lib/site-packages/setuptools/command/bdist_wininst.py +21 -0
  675. quarchpy/venv/Lib/site-packages/setuptools/command/build_clib.py +98 -0
  676. quarchpy/venv/Lib/site-packages/setuptools/command/build_ext.py +327 -0
  677. quarchpy/venv/Lib/site-packages/setuptools/command/build_py.py +270 -0
  678. quarchpy/venv/Lib/site-packages/setuptools/command/develop.py +221 -0
  679. quarchpy/venv/Lib/site-packages/setuptools/command/dist_info.py +36 -0
  680. quarchpy/venv/Lib/site-packages/setuptools/command/easy_install.py +2347 -0
  681. quarchpy/venv/Lib/site-packages/setuptools/command/egg_info.py +717 -0
  682. quarchpy/venv/Lib/site-packages/setuptools/command/install.py +125 -0
  683. quarchpy/venv/Lib/site-packages/setuptools/command/install_egg_info.py +62 -0
  684. quarchpy/venv/Lib/site-packages/setuptools/command/install_lib.py +121 -0
  685. quarchpy/venv/Lib/site-packages/setuptools/command/install_scripts.py +65 -0
  686. quarchpy/venv/Lib/site-packages/setuptools/command/launcher manifest.xml +15 -0
  687. quarchpy/venv/Lib/site-packages/setuptools/command/py36compat.py +136 -0
  688. quarchpy/venv/Lib/site-packages/setuptools/command/register.py +18 -0
  689. quarchpy/venv/Lib/site-packages/setuptools/command/rotate.py +66 -0
  690. quarchpy/venv/Lib/site-packages/setuptools/command/saveopts.py +22 -0
  691. quarchpy/venv/Lib/site-packages/setuptools/command/sdist.py +252 -0
  692. quarchpy/venv/Lib/site-packages/setuptools/command/setopt.py +149 -0
  693. quarchpy/venv/Lib/site-packages/setuptools/command/test.py +279 -0
  694. quarchpy/venv/Lib/site-packages/setuptools/command/upload.py +17 -0
  695. quarchpy/venv/Lib/site-packages/setuptools/command/upload_docs.py +206 -0
  696. quarchpy/venv/Lib/site-packages/setuptools/config.py +659 -0
  697. quarchpy/venv/Lib/site-packages/setuptools/dep_util.py +23 -0
  698. quarchpy/venv/Lib/site-packages/setuptools/depends.py +176 -0
  699. quarchpy/venv/Lib/site-packages/setuptools/dist.py +1274 -0
  700. quarchpy/venv/Lib/site-packages/setuptools/errors.py +16 -0
  701. quarchpy/venv/Lib/site-packages/setuptools/extension.py +57 -0
  702. quarchpy/venv/Lib/site-packages/setuptools/extern/__init__.py +73 -0
  703. quarchpy/venv/Lib/site-packages/setuptools/glob.py +174 -0
  704. quarchpy/venv/Lib/site-packages/setuptools/gui-32.exe +0 -0
  705. quarchpy/venv/Lib/site-packages/setuptools/gui-64.exe +0 -0
  706. quarchpy/venv/Lib/site-packages/setuptools/gui.exe +0 -0
  707. quarchpy/venv/Lib/site-packages/setuptools/installer.py +150 -0
  708. quarchpy/venv/Lib/site-packages/setuptools/launch.py +35 -0
  709. quarchpy/venv/Lib/site-packages/setuptools/lib2to3_ex.py +62 -0
  710. quarchpy/venv/Lib/site-packages/setuptools/monkey.py +179 -0
  711. quarchpy/venv/Lib/site-packages/setuptools/msvc.py +1679 -0
  712. quarchpy/venv/Lib/site-packages/setuptools/namespaces.py +107 -0
  713. quarchpy/venv/Lib/site-packages/setuptools/package_index.py +1136 -0
  714. quarchpy/venv/Lib/site-packages/setuptools/py27compat.py +60 -0
  715. quarchpy/venv/Lib/site-packages/setuptools/py31compat.py +32 -0
  716. quarchpy/venv/Lib/site-packages/setuptools/py33compat.py +59 -0
  717. quarchpy/venv/Lib/site-packages/setuptools/py34compat.py +13 -0
  718. quarchpy/venv/Lib/site-packages/setuptools/sandbox.py +491 -0
  719. quarchpy/venv/Lib/site-packages/setuptools/script (dev).tmpl +6 -0
  720. quarchpy/venv/Lib/site-packages/setuptools/script.tmpl +3 -0
  721. quarchpy/venv/Lib/site-packages/setuptools/site-patch.py +74 -0
  722. quarchpy/venv/Lib/site-packages/setuptools/ssl_support.py +260 -0
  723. quarchpy/venv/Lib/site-packages/setuptools/unicode_utils.py +44 -0
  724. quarchpy/venv/Lib/site-packages/setuptools/version.py +6 -0
  725. quarchpy/venv/Lib/site-packages/setuptools/wheel.py +220 -0
  726. quarchpy/venv/Lib/site-packages/setuptools/windows_support.py +29 -0
  727. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/INSTALLER +1 -0
  728. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/LICENSE +19 -0
  729. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/METADATA +86 -0
  730. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/RECORD +207 -0
  731. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/WHEEL +6 -0
  732. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/dependency_links.txt +2 -0
  733. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/entry_points.txt +69 -0
  734. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/top_level.txt +3 -0
  735. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/zip-safe +1 -0
  736. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.virtualenv +0 -0
  737. quarchpy/venv/Lib/site-packages/wheel/__init__.py +1 -0
  738. quarchpy/venv/Lib/site-packages/wheel/__main__.py +19 -0
  739. quarchpy/venv/Lib/site-packages/wheel/bdist_wheel.py +492 -0
  740. quarchpy/venv/Lib/site-packages/wheel/cli/__init__.py +88 -0
  741. quarchpy/venv/Lib/site-packages/wheel/cli/convert.py +269 -0
  742. quarchpy/venv/Lib/site-packages/wheel/cli/pack.py +82 -0
  743. quarchpy/venv/Lib/site-packages/wheel/cli/unpack.py +25 -0
  744. quarchpy/venv/Lib/site-packages/wheel/macosx_libfile.py +428 -0
  745. quarchpy/venv/Lib/site-packages/wheel/metadata.py +133 -0
  746. quarchpy/venv/Lib/site-packages/wheel/pkginfo.py +43 -0
  747. quarchpy/venv/Lib/site-packages/wheel/util.py +46 -0
  748. quarchpy/venv/Lib/site-packages/wheel/vendored/__init__.py +0 -0
  749. quarchpy/venv/Lib/site-packages/wheel/vendored/packaging/__init__.py +0 -0
  750. quarchpy/venv/Lib/site-packages/wheel/vendored/packaging/_typing.py +48 -0
  751. quarchpy/venv/Lib/site-packages/wheel/vendored/packaging/tags.py +866 -0
  752. quarchpy/venv/Lib/site-packages/wheel/wheelfile.py +181 -0
  753. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/INSTALLER +1 -0
  754. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/LICENSE.txt +22 -0
  755. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/METADATA +69 -0
  756. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/RECORD +49 -0
  757. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/WHEEL +6 -0
  758. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/entry_points.txt +6 -0
  759. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/top_level.txt +1 -0
  760. quarchpy/venv/Lib/site-packages/wheel-0.37.1.virtualenv +0 -0
  761. quarchpy/venv/Lib/site.py +190 -0
  762. quarchpy/venv/Lib/site.pyc +0 -0
  763. quarchpy/venv/Scripts/activate +83 -0
  764. quarchpy/venv/Scripts/activate.bat +39 -0
  765. quarchpy/venv/Scripts/activate.fish +100 -0
  766. quarchpy/venv/Scripts/activate.nu +41 -0
  767. quarchpy/venv/Scripts/activate.ps1 +60 -0
  768. quarchpy/venv/Scripts/activate_this.py +32 -0
  769. quarchpy/venv/Scripts/deactivate.bat +19 -0
  770. quarchpy/venv/Scripts/deactivate.nu +11 -0
  771. quarchpy/venv/Scripts/easy_install-2.7.exe +0 -0
  772. quarchpy/venv/Scripts/easy_install.exe +0 -0
  773. quarchpy/venv/Scripts/easy_install2.7.exe +0 -0
  774. quarchpy/venv/Scripts/easy_install2.exe +0 -0
  775. quarchpy/venv/Scripts/pip-2.7.exe +0 -0
  776. quarchpy/venv/Scripts/pip.exe +0 -0
  777. quarchpy/venv/Scripts/pip2.7.exe +0 -0
  778. quarchpy/venv/Scripts/pip2.exe +0 -0
  779. quarchpy/venv/Scripts/pydoc.bat +1 -0
  780. quarchpy/venv/Scripts/python.exe +0 -0
  781. quarchpy/venv/Scripts/python27.dll +0 -0
  782. quarchpy/venv/Scripts/pythonw.exe +0 -0
  783. quarchpy/venv/Scripts/wheel-2.7.exe +0 -0
  784. quarchpy/venv/Scripts/wheel.exe +0 -0
  785. quarchpy/venv/Scripts/wheel2.7.exe +0 -0
  786. quarchpy/venv/Scripts/wheel2.exe +0 -0
  787. quarchpy/venv/libs/_bsddb.lib +0 -0
  788. quarchpy/venv/libs/_ctypes.lib +0 -0
  789. quarchpy/venv/libs/_ctypes_test.lib +0 -0
  790. quarchpy/venv/libs/_elementtree.lib +0 -0
  791. quarchpy/venv/libs/_hashlib.lib +0 -0
  792. quarchpy/venv/libs/_msi.lib +0 -0
  793. quarchpy/venv/libs/_multiprocessing.lib +0 -0
  794. quarchpy/venv/libs/_socket.lib +0 -0
  795. quarchpy/venv/libs/_sqlite3.lib +0 -0
  796. quarchpy/venv/libs/_ssl.lib +0 -0
  797. quarchpy/venv/libs/_testcapi.lib +0 -0
  798. quarchpy/venv/libs/_tkinter.lib +0 -0
  799. quarchpy/venv/libs/bz2.lib +0 -0
  800. quarchpy/venv/libs/libpython27.a +0 -0
  801. quarchpy/venv/libs/pyexpat.lib +0 -0
  802. quarchpy/venv/libs/python27.lib +0 -0
  803. quarchpy/venv/libs/select.lib +0 -0
  804. quarchpy/venv/libs/unicodedata.lib +0 -0
  805. quarchpy/venv/libs/winsound.lib +0 -0
  806. quarchpy/venv/pyvenv.cfg +8 -0
  807. {quarchpy-2.1.13.dev2.dist-info → quarchpy-2.1.14.dist-info}/METADATA +12 -2
  808. quarchpy-2.1.14.dist-info/RECORD +1216 -0
  809. quarchpy/.idea/inspectionProfiles/Project_Default.xml +0 -26
  810. quarchpy/connection_specific/connection_QIS.py.bak +0 -1821
  811. quarchpy/connection_specific/usb_libs/__pycache__/libusb1.cpython-311.pyc +0 -0
  812. quarchpy/connection_specific/usb_libs/__pycache__/usb1.cpython-311.pyc +0 -0
  813. quarchpy/debug/TextScanIP.py +0 -11
  814. quarchpy/device/device.py.bak +0 -504
  815. quarchpy/device/scanDevices.py.bak +0 -661
  816. quarchpy/user_interface/user_interface.py.bak +0 -749
  817. quarchpy/utilities/TestCenter.py.bak +0 -150
  818. quarchpy-2.1.13.dev2.dist-info/RECORD +0 -542
  819. {quarchpy-2.1.13.dev2.dist-info → quarchpy-2.1.14.dist-info}/WHEEL +0 -0
  820. {quarchpy-2.1.13.dev2.dist-info → quarchpy-2.1.14.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,4 @@
1
+ import csv
1
2
  import socket
2
3
  import re
3
4
  import time
@@ -9,7 +10,7 @@ import threading
9
10
  import math
10
11
  import logging
11
12
  import struct
12
- from pathlib import Path
13
+ from io import StringIO
13
14
  from quarchpy.user_interface import *
14
15
  import xml.etree.ElementTree as ET
15
16
  from connection_specific.StreamChannels import StreamGroups
@@ -46,13 +47,7 @@ class QisInterface:
46
47
  self.streamSock.settimeout(5)
47
48
  self.streamSock.connect((self.host, self.port))
48
49
  self.pythonVersion = sys.version[0]
49
- #self.sendText(self.streamSock, '$scan')
50
- #time.sleep(3)
51
- if self.pythonVersion == '3':
52
- temp = '>'
53
- self.cursor = temp.encode()
54
- else:
55
- self.cursor = '>'
50
+ self.cursor = '>'
56
51
  #clear packets
57
52
  welcomeString = self.streamSock.recv(self.maxRxBytes).rstrip()
58
53
 
@@ -111,19 +106,15 @@ class QisInterface:
111
106
  def closeConnection(self, sock=None, conString=None):
112
107
  if sock == None:
113
108
  sock = self.sock
114
-
115
109
  if conString is None:
116
110
  cmd="close"
117
111
  else:
118
112
  cmd =conString+" close"
119
113
 
120
- if self.pythonVersion == '3':
121
- response = self.sendAndReceiveText(sock, cmd).decode()
122
- else:
123
- response = self.sendAndReceiveText(sock, cmd)
114
+ response = self.sendAndReceiveText(sock, cmd)
124
115
  return response
125
116
 
126
- def startStream(self, module, fileName, fileMaxMB, streamName, streamAverage, releaseOnData, separator, streamDuration = None):
117
+ def startStream(self, module, fileName, fileMaxMB, streamName, streamAverage, releaseOnData, separator, streamDuration = None, inMemoryData = None):
127
118
  self.StreamRunSentSemaphore.acquire()
128
119
  self.deviceDictSetup('QIS')
129
120
  i = self.deviceMulti(module)
@@ -133,7 +124,7 @@ class QisInterface:
133
124
 
134
125
  # Create the thread
135
126
  t1 = threading.Thread(target=self.startStreamThread, name=module,
136
- args=(module, fileName, fileMaxMB, streamName, streamAverage, releaseOnData, separator, streamDuration))
127
+ args=(module, fileName, fileMaxMB, streamName, streamAverage, releaseOnData, separator, streamDuration, inMemoryData))
137
128
  # Start the thread
138
129
  t1.start()
139
130
 
@@ -163,7 +154,6 @@ class QisInterface:
163
154
  pass
164
155
  # just wait until event is cleared
165
156
 
166
-
167
157
  def stopStream(self, module, blocking = True):
168
158
  moduleName=module.ConString
169
159
  i = self.deviceMulti(moduleName)
@@ -191,15 +181,20 @@ class QisInterface:
191
181
  else:
192
182
  running = False
193
183
  time.sleep(0.1)
194
-
195
- # This is the function that is run when t1 is created. It is run in a seperate thread from
196
- # the main application so streaming can happen without blocking the main application from
197
- # doing other things. Within this function/thread you have to be very careful not to try
198
- # and 'communicate' with anything from other threads. If you do, you MUST use a thread safe
199
- # way of communicating. The thread creates it's own socket and should use that, NOT the objects socket
200
- # (which some of the comms with module functions will use by default).
201
- def startStreamThread(self, module, fileName, fileMaxMB, streamName, streamAverage, releaseOnData, separator, streamDuration = None):
184
+
185
+ def startStreamThread(self, module, fileName, fileMaxMB, streamName, streamAverage, releaseOnData, separator, streamDuration = None, inMemoryData = None):
186
+ # This is the function that is run when t1 is created. It is run in a seperate thread from
187
+ # the main application so streaming can happen without blocking the main application from
188
+ # doing other things. Within this function/thread you have to be very careful not to try
189
+ # and 'communicate' with anything from other threads. If you do, you MUST use a thread safe
190
+ # way of communicating. The thread creates it's own socket and should use that, NOT the objects socket
191
+ # (which some of the comms with module functions will use by default).
192
+
202
193
  #Start module streaming and then read stream data
194
+ if inMemoryData is not None:
195
+ if not isinstance(inMemoryData, StringIO):
196
+ print("Error! The parameter 'inMemoryData' is NOT of type StringIO")
197
+ exit()
203
198
 
204
199
  stripes = ['Empty Header']
205
200
  #Send stream command so module starts streaming data into the backends buffer
@@ -234,6 +229,9 @@ class QisInterface:
234
229
  formatHeader = self.streamHeaderFormat(device=module, sock=self.streamSock)
235
230
  formatHeader = formatHeader.replace(", ", separator)
236
231
  f.write(formatHeader + '\n')
232
+ if inMemoryData is not None:
233
+ inMemoryData.write(formatHeader + '\n')
234
+
237
235
  numStripesPerRead = 4096
238
236
  maxFileExceeded = False
239
237
  openAttempts = 0
@@ -271,14 +269,14 @@ class QisInterface:
271
269
  isRun = True
272
270
  while isRun:
273
271
  try:
274
- with open(fileName, 'ab') as f:
272
+ with open(fileName, 'a', newline='') as f: #changed from ab to a as all data should be in string format now regardless of py2 or py3
275
273
  # Until the event threadRunEvent is set externally to this thread,
276
274
  # loop and read from the stream
277
275
  i = self.deviceMulti(module)
278
276
  while self.stopFlagList[i] and (not streamOverrun) and (not streamComplete):
279
277
  #now = time.time()
280
278
  streamOverrun, removeChar, newStripes = self.streamGetStripesText(self.streamSock, module, numStripesPerRead)
281
- newStripes = newStripes.replace(b' ', str.encode(separator))
279
+ newStripes = newStripes.replace(' ', separator)
282
280
  #print (time.time() - now)
283
281
  if streamOverrun:
284
282
  self.deviceDict[module][0:3] = [True, 'Stopped', 'Device buffer overrun']
@@ -308,22 +306,31 @@ class QisInterface:
308
306
  if streamDuration != None:
309
307
  # Get the last data line in the file
310
308
  lastLine = newStripes.splitlines()[-3] # the last data line is followed by 'eof' and '>'
311
- lastTime = lastLine.decode().split(separator)[0] # get the first (time) entry
309
+ lastTime = lastLine.split(separator)[0] # get the first (time) entry
312
310
 
313
311
  # if the last entry is still within the required stream length, write the whole lot
314
312
  if int(lastTime) < int(streamDuration/(10**baseSampleUnitExponent)): # < rather than <= because we start at 0
313
+ newStripes = newStripes.replace(' ', separator)
315
314
  f.write(newStripes[:removeChar])
315
+ if inMemoryData is not None:
316
+ inMemoryData.write(newStripes[:removeChar])
317
+
316
318
  # else write each line individually until we have reached the desired endpoint
317
319
  else:
318
320
  for thisLine in newStripes.splitlines()[:-2]:
319
- lastTime = thisLine.decode().split(separator)[0]
321
+ lastTime = thisLine.split(separator)[0]
320
322
  if int(lastTime) < int(streamDuration/(10**baseSampleUnitExponent)):
321
- f.write(thisLine + b'\r' + b'\n') # Put the CR back on the end
323
+ f.write(thisLine + '\r\n') # Put the CR back on the end
324
+ if inMemoryData is not None:
325
+ inMemoryData.write(thisLine + '\r\n')
322
326
  else:
323
327
  streamComplete = True
324
328
  break
325
329
  else:
330
+ newStripes = newStripes.replace(' ', separator)
326
331
  f.write(newStripes[:removeChar])
332
+ if inMemoryData is not None:
333
+ inMemoryData.write(newStripes[:removeChar])
327
334
 
328
335
  else:
329
336
  maxFileExceeded = True
@@ -331,6 +338,9 @@ class QisInterface:
331
338
  maxFileStatus = self.streamBufferStatus(device=module, sock=self.streamSock)
332
339
  f.write('Warning: Max file size exceeded before end of stream.\n')
333
340
  f.write('Unrecorded stripes in buffer when file full: ' + maxFileStatus + '.')
341
+ if inMemoryData is not None:
342
+ inMemoryData.write('Warning: Max file size exceeded before end of stream.\n')
343
+ inMemoryData.write('Unrecorded stripes in buffer when file full: ' + maxFileStatus + '.')
334
344
  self.deviceDict[module][0:3] = [True, 'Stopped', 'User defined max filesize reached']
335
345
  break
336
346
  else:
@@ -378,8 +388,10 @@ class QisInterface:
378
388
  if(streamAverage != None):
379
389
  leftover, remainingStripes = self.averageStripes(leftover, stripesPerAverage, newStripes[:removeChar], f, remainingStripes)
380
390
  else:
381
- newStripes = newStripes.replace(b' ', str.encode(separator))
391
+ newStripes = newStripes.replace(' ',separator)
382
392
  f.write(newStripes[:removeChar])
393
+ if inMemoryData is not None:
394
+ inMemoryData.write(newStripes[:removeChar])
383
395
  else:
384
396
  if not maxFileExceeded:
385
397
  maxFileStatus = self.streamBufferStatus(device=module, sock=self.streamSock)
@@ -394,6 +406,9 @@ class QisInterface:
394
406
  if maxFileExceeded:
395
407
  f.write(b'Warning: Max file size exceeded before end of stream.\n')
396
408
  f.write(b'Unrecorded stripes in buffer when file full: ' + maxFileStatus + '.')
409
+ if inMemoryData is not None:
410
+ inMemoryData.write(b'Warning: Max file size exceeded before end of stream.\n')
411
+ inMemoryData.write(b'Unrecorded stripes in buffer when file full: ' + maxFileStatus + '.')
397
412
  logging.warning('Max file size exceeded. Some data has not been saved to file: ' + maxFileStatus + '.')
398
413
 
399
414
  #printText('Stripes in buffer now: ' + self.streamBufferStatus(device=module, sock=self.streamSock))
@@ -484,7 +499,7 @@ class QisInterface:
484
499
  # now = time.time()
485
500
  streamOverrun, removeChar, newStripes = self.streamGetStripesText(self.streamSock, module,
486
501
  numStripesPerRead)
487
- newStripes = newStripes.replace(b' ', str.encode(separator))
502
+ newStripes = newStripes.replace(' ',separator)
488
503
  # print(newStripes)
489
504
  # print(len(newStripes))
490
505
 
@@ -498,11 +513,7 @@ class QisInterface:
498
513
  if isEmpty == False:
499
514
  # Writes in file if not too big else stops streaming
500
515
  # print(newStripes)
501
-
502
- x = newStripes[:removeChar]
503
- y = x.decode("utf-8")
504
-
505
- print("decoded stripe : " + y)
516
+ print("decoded stripe : " + newStripes[:removeChar])
506
517
 
507
518
  # Writing multiple stripes
508
519
  if "\r\n" in y:
@@ -581,7 +592,7 @@ class QisInterface:
581
592
  continue
582
593
  with open(os.path.join(self.qps_record_dir_path, "data000",
583
594
  "data000_00" + index - 1 + "_000000000"),
584
- "ab") as file1:
595
+ "a") as file1:#changed from ab to a as all data should be in string format now regardless of py2 or py3
585
596
 
586
597
  x = struct.pack(">d", int(item))
587
598
  # logging.debug(item, x)
@@ -604,7 +615,7 @@ class QisInterface:
604
615
 
605
616
  with open(os.path.join(self.qps_record_dir_path, "data000",
606
617
  "data000_"+x+"_000000000"),
607
- "ab") as file1:
618
+ "a") as file1:#changed from ab to a as all data should be in string format now regardless of py2 or py3
608
619
  x = struct.pack(">d", int(stripe[counter]))
609
620
  # logging.debug(item, x)
610
621
  file1.write(x)
@@ -612,195 +623,10 @@ class QisInterface:
612
623
  # Write all in group 1 to digital
613
624
  with open(os.path.join(self.qps_record_dir_path, "data101",
614
625
  "data101_"+x+"_000000000"),
615
- "ab") as file1:
626
+ "a") as file1:#changed from ab to a as all data should be in string format now regardless of py2 or py3
616
627
  x = struct.pack(">d", int(stripe[counter]))
617
628
  # logging.debug(item, x)
618
629
  file1.write(x)
619
-
620
-
621
- # Send text and get the backends response. - acts as wrapper to the sendAndReceiveText, intended to provide some extra convenience
622
- # when sending commands to module (as opposed to back end)
623
- # If read until cursor is set to True (which is default) then keep reading response until a cursor is returned as the last character of result string
624
- # After command is sent wait for betweenCommandDelay which defaults to 0 but can be specified to add a delay between commands
625
- # The objects connection needs to be opened (connect()) before this is used
626
- def sendCmd(self, device='', cmd='$help', sock=None, readUntilCursor=True, betweenCommandDelay=0.0, expectedResponse = True):
627
- if sock==None:
628
- sock = self.sock
629
- if not (device == ''):
630
- self.deviceDictSetup(device)
631
-
632
- if expectedResponse is False:
633
- self.sendText(sock, cmd, device)
634
- return
635
-
636
- res = self.sendAndReceiveText(sock, cmd, device, readUntilCursor)
637
- if (betweenCommandDelay > 0):
638
- time.sleep(betweenCommandDelay)
639
- #If ends with cursor get rid of it
640
- if res[-1:] == self.cursor:
641
- res = res[:-3] #remove last three chars - hopefully '\r\n>'
642
- # time.sleep(0.1)
643
- return res.decode()
644
-
645
-
646
- def sendAndReceiveCmd(self, sock=None, cmd='$help', device='', readUntilCursor=True, betweenCommandDelay=0.0):
647
- if sock==None:
648
- sock = self.sock
649
- if not (device == ''):
650
- self.deviceDictSetup(device)
651
- if self.pythonVersion == '3':
652
- res = self.sendAndReceiveText(sock, cmd, device, readUntilCursor).decode()
653
- else:
654
- res = self.sendAndReceiveText(sock, cmd, device, readUntilCursor)
655
- if (betweenCommandDelay > 0):
656
- time.sleep(betweenCommandDelay)
657
- #If ends with cursor get rid of it
658
- if res[-1:] == '>':
659
- res = res[:-3] #remove last three chars - hopefully '\r\n>'
660
- return cmd + ' : ' + res
661
-
662
- # Send text to the back end then read it's response
663
- # The objects connection needs to be opened (connect()) before this is used
664
- # If read until cursor is set to True (which is default) then keep reading response until a cursor is returned as the last character of result string
665
- def sendAndReceiveText(self, sock, sentText='$help', device='', readUntilCursor=True):
666
- self.sockSemaphore.acquire()
667
- try:
668
- self.sendText(sock, sentText, device)
669
- if self.pythonVersion == '3':
670
- res = bytearray()
671
- res.extend(self.rxBytes(sock))
672
- #Somtimes we just get one cursor back of currently unknown origins
673
- #If that happens discard it and read again
674
- if len(res)==0:
675
- logging.warning("empty response from QIS. Retrying.")
676
- streamResp=self.sendAndReceiveText(sock, "stream?",device,readUntilCursor).lower()
677
- if len(streamResp)==0:
678
- raise("Empty response from QIS twice in a row")
679
- else:
680
- logging.warning("Response recovered Successfully. Continuing.")
681
- res = bytearray()
682
- res.extend(self.rxBytes(sock))
683
- if len(res) == 0:
684
- raise ("empty response from QIS after second ")
685
- if res[0] == self.cursor:
686
- #res[0] = self.rxBytes(sock)
687
- logging.warning('Only Returned Cursor!!!!!')
688
- #If create socked fail (between backend and tcp/ip module)
689
- cba = 'Create Socket Fail'
690
- if cba.encode() == res[0]:
691
- logging.warning(res[0].decode())
692
- cba = 'Connection Timeout'
693
- if cba.encode() == res[0]:
694
- logging.warning(res[0].decode())
695
- #If reading until a cursor comes back then keep reading until a cursor appears or max tries exceeded
696
- if readUntilCursor:
697
- maxReads = 1000
698
- count = 1
699
- #check for cursor at end of read and if not there read again
700
- while res[-1:] != self.cursor:
701
- res.extend(self.rxBytes(sock))
702
- count += 1
703
- if count >= maxReads:
704
- raise Exception(' Count = Error: max reads exceeded before cursor returned')
705
- return res
706
- else:
707
- res = self.rxBytes(sock)
708
- #Somtimes we just get one cursor back of currently unknown origins
709
- #If that happens discard it and read again
710
- if res == self.cursor:
711
- #printText(" CURSOR ONLY")
712
- res = self.rxBytes(sock)
713
- #If create socked fail (between backend and tcp/ip module)
714
- if 'Create Socket Fail' in res:
715
- raise Exception(res)
716
- if 'Connection Timeout' in res:
717
- raise Exception(res)
718
- #If reading until a cursor comes back then keep reading until a cursor appears or max tries exceeded
719
- if readUntilCursor:
720
- maxReads = 1000
721
- count = 1
722
- #check for cursor at end of read and if not there read again
723
- while res[-1:] != self.cursor:
724
- res += self.rxBytes(sock)
725
- count += 1
726
- if count >= maxReads:
727
- raise Exception(' Count = Error: max reads exceeded before cursor returned')
728
- return res
729
-
730
- except Exception as e:
731
- raise e
732
- finally:
733
- self.sockSemaphore.release()
734
-
735
- def rxBytes(self,sock):
736
- #sock.setblocking(0) #make socket non-blocking
737
- #printText('rxBytes')
738
- maxExceptions=10
739
- exceptions=0
740
- maxReadRepeats=50
741
- readRepeats=0
742
- timeout_in_seconds = 10
743
- #Keep trying to read bytes until we get some, unless number of read repeads or exceptions is exceeded
744
- while True:
745
- try:
746
- #select.select returns a list of waitable objects which are ready. On windows it has to be sockets.
747
- #The first arguement is a list of objects to wait for reading, second writing, third 'exceptional condition'
748
- #We only use the read list and our socket to check if it is readable. if no timeout is specified then it blocks until it becomes readable.
749
- ready = select.select([sock], [], [], timeout_in_seconds)
750
- #time.sleep(0.1)
751
- #ready = [1,2]
752
- if ready[0]:
753
- ret = sock.recv(self.maxRxBytes)
754
- #time.sleep(0.1)
755
- return ret
756
- else:
757
- #printText('rxBytes - readRepeats + 1')
758
-
759
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
760
- sock.connect((self.host, self.port))
761
- sock.settimeout(5)
762
-
763
- try:
764
- welcomeString = self.sock.recv(self.maxRxBytes).rstrip()
765
- welcomeString = 'Connected@' + self.host + ':' + str(self.port) + ' ' + '\n ' + welcomeString
766
- printText('New Welcome:' + welcomeString)
767
- except Exception as e:
768
- logging.error('tried and failed to get new welcome')
769
- raise e
770
-
771
- readRepeats=readRepeats+1
772
- time.sleep(0.5)
773
-
774
- except Exception as e:
775
- #printText('rxBytes - exceptions + 1')
776
- exceptions=exceptions+1
777
- time.sleep(0.5)
778
- raise e
779
-
780
- #If read repeats has been exceeded we failed to get any data on this read.
781
- # !!! This is likely to break whatever called us !!!
782
- if readRepeats >= maxReadRepeats:
783
- logging.error('Max read repeats exceeded - returning.')
784
- return 'No data received from QIS'
785
- #If number of exceptions exceeded then give up by exiting
786
- if exceptions >= maxExceptions:
787
- logging.error('Max exceptions exceeded - exiting') #exceptions are probably 10035 non-blocking socket could not complete immediatley
788
- exit()
789
-
790
- # Send text to the back end don't read it's response
791
- # The objects connection needs to be opened (connect()) before this is used
792
- def sendText(self, sock, message='$help', device=''):
793
- if device != '':
794
- specialTimeout = '%500000'
795
- message = device + specialTimeout + ' ' + message
796
- #printText('Sending: "' + message + '" ' + self.host + ':' + str(self.port))
797
-
798
- if self.pythonVersion == 2:
799
- sock.sendall(message + '\r\n')
800
- else:
801
- convM = message + '\r\n'
802
- sock.sendall(convM.encode('utf-8'))
803
- return 'Sent:' + message
804
630
 
805
631
  # Query the backend for a list of connected modules. A $scan command is sent to refresh the list of devices,
806
632
  # Then a wait occurs while the backend discovers devices (network ones can take a while) and then a list of device name strings is returned
@@ -809,21 +635,9 @@ class QisInterface:
809
635
 
810
636
  if sock == None:
811
637
  sock = self.sock
812
- scanWait = 2
813
- #printText('Scanning for devices and waiting ' + str(scanWait) + ' seconds.')
814
- if self.pythonVersion == '3':
815
- #devString = self.sendAndReceiveText(sock, '$scan').decode
816
- #time.sleep(scanWait)
817
- devString = self.sendAndReceiveText(sock, '$list').decode()
818
- else:
819
- #devString = self.sendAndReceiveText(sock, '$scan')
820
- #time.sleep(scanWait)
821
- devString = self.sendAndReceiveText(sock, '$list')
822
-
638
+ devString = self.sendAndReceiveText(sock, '$list')
823
639
  devString = devString.replace('>', '')
824
- devString = devString.replace(r'\d+\) ', '')
825
-
826
- #printText('"' + devString + '"')
640
+ devString = devString.replace(r'\d+\) ', '')
827
641
  devString = devString.split('\r\n')
828
642
  devString = filter(None, devString) #remove empty elements
829
643
  return devString
@@ -831,21 +645,10 @@ class QisInterface:
831
645
  def get_list_details(self, sock=None):
832
646
  if sock == None:
833
647
  sock = self.sock
834
- scanWait = 2
835
- # printText('Scanning for devices and waiting ' + str(scanWait) + ' seconds.')
836
- if self.pythonVersion == '3':
837
- # devString = self.sendAndReceiveText(sock, '$scan').decode
838
- # time.sleep(scanWait)
839
- devString = self.sendAndReceiveText(sock, '$list details').decode()
840
- else:
841
- # devString = self.sendAndReceiveText(sock, '$scan')
842
- # time.sleep(scanWait)
843
- devString = self.sendAndReceiveText(sock, '$list details')
844
648
 
649
+ devString = self.sendAndReceiveText(sock, '$list details')
845
650
  devString = devString.replace('>', '')
846
651
  devString = devString.replace(r'\d+\) ', '')
847
-
848
- # printText('"' + devString + '"')
849
652
  devString = devString.split('\r\n')
850
653
  devString = [x for x in devString if x] # remove empty elements
851
654
  return devString
@@ -884,9 +687,6 @@ class QisInterface:
884
687
  logging.warning(e)
885
688
  logging.warning("No module found at " + ipAddress)
886
689
 
887
-
888
-
889
-
890
690
  def GetQisModuleSelection(self, favouriteOnly=True , additionalOptions=['rescan', 'all con types', 'ip scan'], scan=True):
891
691
  tableHeaders =["Modules"]
892
692
  ip_address = None
@@ -922,33 +722,19 @@ class QisInterface:
922
722
  foundDevices = "1"
923
723
  foundDevices2 = "2" # this is used to check if new modules are being discovered or if all have been found.
924
724
  scanWait = 2 # The number of seconds waited between the two scans.
925
- if self.pythonVersion == '3':
926
- if scan:
927
- if ipAddress == None:
928
- devString = self.sendAndReceiveText(self.sock, '$scan').decode
929
- else:
930
- devString = self.sendAndReceiveText(self.sock, '$scan TCP::' + ipAddress).decode
931
- time.sleep(scanWait)
932
- while foundDevices not in foundDevices2:
933
- foundDevices = self.sendAndReceiveText(self.sock, '$list').decode()
934
- time.sleep(scanWait)
935
- foundDevices2 = self.sendAndReceiveText(self.sock, '$list').decode()
936
- else:
937
- foundDevices = self.sendAndReceiveText(self.sock, '$list').decode()
938
725
 
939
- else:
940
- if scan:
941
- if ipAddress == None:
942
- devString = self.sendAndReceiveText(self.sock, '$scan').decode
943
- else:
944
- devString = self.sendAndReceiveText(self.sock, '$scan TCP::' + ipAddress).decode
945
- time.sleep(scanWait)
946
- while foundDevices not in foundDevices2:
947
- foundDevices = self.sendAndReceiveText(self.sock, '$list')
948
- time.sleep(scanWait)
949
- foundDevices2 = self.sendAndReceiveText(self.sock, '$list')
726
+ if scan:
727
+ if ipAddress == None:
728
+ devString = self.sendAndReceiveText(self.sock, '$scan')
950
729
  else:
730
+ devString = self.sendAndReceiveText(self.sock, '$scan TCP::' + ipAddress)
731
+ time.sleep(scanWait)
732
+ while foundDevices not in foundDevices2:
951
733
  foundDevices = self.sendAndReceiveText(self.sock, '$list')
734
+ time.sleep(scanWait)
735
+ foundDevices2 = self.sendAndReceiveText(self.sock, '$list')
736
+ else:
737
+ foundDevices = self.sendAndReceiveText(self.sock, '$list')
952
738
 
953
739
  if not "no devices found" in foundDevices.lower():
954
740
  foundDevices = foundDevices.replace('>', '')
@@ -998,10 +784,7 @@ class QisInterface:
998
784
  if sock == None:
999
785
  sock = self.sock
1000
786
  index = 0 # index of relevant line in split string
1001
- if self.pythonVersion == '3':
1002
- streamStatus = self.sendAndReceiveText(sock, 'stream?', device).decode()
1003
- else:
1004
- streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
787
+ streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
1005
788
  streamStatus = streamStatus.split('\r\n')
1006
789
  streamStatus[index] = re.sub(r':', '', streamStatus[index]) #remove :
1007
790
  return streamStatus[index]
@@ -1012,10 +795,7 @@ class QisInterface:
1012
795
  if sock == None:
1013
796
  sock = self.sock
1014
797
  index = 1 # index of relevant line in split string
1015
- if self.pythonVersion == '3':
1016
- streamStatus = self.sendAndReceiveText(sock, 'stream?', device).decode()
1017
- else:
1018
- streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
798
+ streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
1019
799
  streamStatus = streamStatus.split('\r\n')
1020
800
  streamStatus[index] = re.sub(r'^Stripes Buffered: ', '', streamStatus[index])
1021
801
  return streamStatus[index]
@@ -1030,10 +810,7 @@ class QisInterface:
1030
810
  if sock == None:
1031
811
  sock = self.sock
1032
812
  index = 2 # index of relevant line in split string
1033
- if self.pythonVersion == '3':
1034
- streamStatus = self.sendAndReceiveText(sock, sentText='stream text header', device=device).decode()
1035
- else:
1036
- streamStatus = self.sendAndReceiveText(sock, sentText='stream text header', device=device)
813
+ streamStatus = self.sendAndReceiveText(sock, sentText='stream text header', device=device)
1037
814
 
1038
815
  self.qps_stream_header = streamStatus
1039
816
 
@@ -1074,10 +851,7 @@ class QisInterface:
1074
851
  if sock == None:
1075
852
  sock = self.sock
1076
853
  index = 0 # index of relevant line in split string
1077
- if self.pythonVersion == '3':
1078
- streamStatus = self.sendAndReceiveText(sock,'stream text header', device).decode()
1079
- else:
1080
- streamStatus = self.sendAndReceiveText(sock,'stream text header', device)
854
+ streamStatus = self.sendAndReceiveText(sock,'stream text header', device)
1081
855
  streamStatus = streamStatus.split('\r\n')
1082
856
  if 'Header Not Available' in streamStatus[0]:
1083
857
  str = streamStatus[0] + '. Check stream has been ran on device.'
@@ -1104,10 +878,7 @@ class QisInterface:
1104
878
  if sock == None:
1105
879
  sock = self.sock
1106
880
  index = 1 # index of relevant line in split string STREAM MODE HEADER [?|V1,V2,V3]
1107
- if self.pythonVersion == '3':
1108
- streamStatus = self.sendAndReceiveText(sock,'stream text header', device).decode()
1109
- else:
1110
- streamStatus = self.sendAndReceiveText(sock,'stream text header', device)
881
+ streamStatus = self.sendAndReceiveText(sock,'stream text header', device)
1111
882
  # Check if this is a new XML form header
1112
883
  if (self.isXmlHeader (streamStatus)):
1113
884
  # Get the basic averaging rate (V3 header)
@@ -1142,12 +913,8 @@ class QisInterface:
1142
913
  str = streamStatus[0] + '. Check stream has been ran on device.'
1143
914
  logging.error(str)
1144
915
  return str
1145
- if self.pythonVersion == '3':
1146
- outputMode = self.sendAndReceiveText(sock,'Config Output Mode?', device).decode()
1147
- powerMode = self.sendAndReceiveText(sock,'stream mode power?', device).decode()
1148
- else:
1149
- outputMode = self.sendAndReceiveText(sock,'Config Output Mode?', device)
1150
- powerMode = self.sendAndReceiveText(sock,'stream mode power?', device)
916
+ outputMode = self.sendAndReceiveText(sock,'Config Output Mode?', device)
917
+ powerMode = self.sendAndReceiveText(sock,'stream mode power?', device)
1151
918
  format = int(re.sub(r'^Format: ', '', streamStatus[index]))
1152
919
  b0 = 1 #12V_I
1153
920
  b1 = 1 << 1 #12V_V
@@ -1188,10 +955,7 @@ class QisInterface:
1188
955
  bufferStatus = False
1189
956
  # Allows the status check to be skipped when emptying the buffer after streaming has stopped (saving time)
1190
957
  if (skipStatusCheck == False):
1191
- if self.pythonVersion == '3':
1192
- streamStatus = self.sendAndReceiveText(sock, 'stream?', device).decode()
1193
- else:
1194
- streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
958
+ streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
1195
959
  if ('Overrun' in streamStatus) or ('8388608 of 8388608' in streamStatus):
1196
960
  bufferStatus = True
1197
961
  stripes = self.sendAndReceiveText(sock, 'stream text all', device, readUntilCursor=True)
@@ -1199,11 +963,7 @@ class QisInterface:
1199
963
  if stripes[-1:] != self.cursor:
1200
964
  return "Error no cursor returned."
1201
965
  else:
1202
- if self.pythonVersion == '3':
1203
- endOfFile = 'eof\r\n>'
1204
- genEndOfFile = endOfFile.encode()
1205
- else:
1206
- genEndOfFile = 'eof\r\n>'
966
+ genEndOfFile = 'eof\r\n>'
1207
967
  if stripes[-6:] == genEndOfFile:
1208
968
  removeChar = -6
1209
969
  else:
@@ -1264,8 +1024,6 @@ class QisInterface:
1264
1024
  finalAverage = splitList[0:2] + [str(round(x / streamAverage)) for x in runningAverage]
1265
1025
  for counter in xrange(len(finalAverage)-1):
1266
1026
  finalAverage[counter] = finalAverage[counter] + ' '
1267
- if self.pythonVersion == '3':
1268
- finalAverage = finalAverage.encode
1269
1027
  for x in finalAverage:
1270
1028
  f.write(x)
1271
1029
  f.write('\r\n')
@@ -1350,10 +1108,7 @@ class QisInterface:
1350
1108
  sock = self.sock
1351
1109
 
1352
1110
  # Get the raw data
1353
- if self.pythonVersion == '3':
1354
- headerData = self.sendAndReceiveText(sock, sentText='stream text header', device=device).decode()
1355
- else:
1356
- headerData = self.sendAndReceiveText(sock, sentText='stream text header', device=device)
1111
+ headerData = self.sendAndReceiveText(sock, sentText='stream text header', device=device)
1357
1112
 
1358
1113
  # The XML can contain the cursor on the end! Trap and remove it here TODO: Needs fixed in the command layer above
1359
1114
  if ('\r\n>' in headerData):
@@ -1480,10 +1235,10 @@ class QisInterface:
1480
1235
  folder_name = None
1481
1236
  # Checking if there was a directory passed; and if it's a valid directory
1482
1237
  if not directory:
1483
- directory = os.path.join(str(Path.home()), "AppData", "Local", "Quarch", "QPS", "Recordings")
1238
+ directory = os.path.join(os.path.expanduser("~"), "AppData", "Local", "Quarch", "QPS", "Recordings")
1484
1239
  logging.debug("No directory specified")
1485
1240
  elif not os.path.isdir(directory):
1486
- new_dir = os.path.join(str(Path.home()), "AppData", "Local", "Quarch", "QPS", "Recordings")
1241
+ new_dir = os.path.join(str(os.path.expanduser("~"), "AppData", "Local", "Quarch", "QPS", "Recordings"))
1487
1242
  logging.warning(directory+" was not a valid directory, streaming to default location: \n"+new_dir)
1488
1243
  directory = new_dir
1489
1244
  else:
@@ -1808,6 +1563,168 @@ class QisInterface:
1808
1563
  f.write("Saved: "+x+ "\n")
1809
1564
 
1810
1565
 
1566
+ # when sending commands to module (as opposed to back end)
1567
+ # If read until cursor is set to True (which is default) then keep reading response until a cursor is returned as the last character of result string
1568
+ # After command is sent wait for betweenCommandDelay which defaults to 0 but can be specified to add a delay between commands
1569
+ # The objects connection needs to be opened (connect()) before this is used
1570
+ def sendCmd(self, device='', cmd='$help', sock=None, readUntilCursor=True, betweenCommandDelay=0.0, expectedResponse = True):
1571
+ '''Send command is used to send a command to QIS and as far as I can see it has no difference than sendAndReceiveCmd'''
1572
+ if expectedResponse is True:
1573
+ res = self.sendAndReceiveCmd(device=device, cmd=cmd, sock=sock, readUntilCursor=readUntilCursor, betweenCommandDelay=betweenCommandDelay)
1574
+ #If ends with cursor get rid of it
1575
+ if res[-1:] == self.cursor:
1576
+ res = res[:-3] #remove last three chars - hopefully '\r\n>'
1577
+ return res
1578
+ else :
1579
+ self.sendText(sock, cmd, device)
1580
+ return
1581
+
1582
+ def sendAndReceiveCmd(self, sock=None, cmd='$help', device='', readUntilCursor=True, betweenCommandDelay=0.0):
1583
+ if sock==None:
1584
+ sock = self.sock
1585
+ if not (device == ''):
1586
+ self.deviceDictSetup(device)
1587
+ res = self.sendAndReceiveText(sock, cmd, device, readUntilCursor)
1588
+ if (betweenCommandDelay > 0):
1589
+ time.sleep(betweenCommandDelay)
1590
+ #If ends with cursor get rid of it
1591
+ if res[-1:] == '>':
1592
+ res = res[:-3] #remove last three chars - hopefully '\r\n>'
1593
+ return cmd + ' : ' + res
1594
+
1595
+ def sendAndReceiveText(self, sock, sentText='$help', device='', readUntilCursor=True):
1596
+ # Send text to QIS
1597
+ # The objects connection needs to be opened (connect()) before this is used
1598
+ # If read until cursor is set to True (which is default) then keep reading response until a cursor is returned as the last character of result string
1599
+
1600
+ # do sendText
1601
+ self.sockSemaphore.acquire()
1602
+ try:
1603
+ #Send Text
1604
+ self.sendText(sock, sentText, device)
1605
+ #Receive Response
1606
+ res = self.receiveText(sock)
1607
+ # Error Check / validate response
1608
+ if len(res) == 0:
1609
+ #logging.error("Empty response from QIS.")
1610
+ self.sendText(sock, "stream?", device)
1611
+ res = self.receiveText(sock)
1612
+ if len(res) != 0:
1613
+ self.sendText(sock, sentText, device)
1614
+ res = self.receiveText(sock)
1615
+ if len(res) == 0:
1616
+ raise (Exception("Empty response from QIS. Sent: " + sentText))
1617
+ else:
1618
+ raise (Exception("Empty response from QIS. Sent: " + sentText))
1619
+
1620
+ if res[0] == self.cursor:
1621
+ logging.warning('Only Returned Cursor!!!!!')
1622
+ if 'Create Socket Fail' == res[0]: # If create socked fail (between QIS and tcp/ip module)
1623
+ logging.warning(res[0])
1624
+ if 'Connection Timeout' == res[0]:
1625
+ logging.warning(res[0])
1626
+ # If reading until a cursor comes back then keep reading until a cursor appears or max tries exceeded
1627
+ if readUntilCursor:
1628
+ maxReads = 1000
1629
+ count = 1
1630
+ # check for cursor at end of read and if not there read again
1631
+ while res[-1:] != self.cursor:
1632
+ res+= self.receiveText(sock) #TODO Confirm this works with multi response CMD Like a $get stats on a large stream with many annos. test with py2 and py3
1633
+ #res.extend(self.rxBytes(sock))
1634
+ count += 1
1635
+ if count >= maxReads:
1636
+ raise Exception(' Count = Error: max reads exceeded before cursor returned')
1637
+ return res
1638
+
1639
+ except Exception as e:
1640
+ #something went wrong during send qis cmd
1641
+ logging.error(e)
1642
+ raise e
1643
+ finally:
1644
+ self.sockSemaphore.release()
1645
+
1646
+
1647
+ def receiveText(self, sock):
1648
+ if self.pythonVersion == '3':
1649
+ res = bytearray()
1650
+ res.extend(self.rxBytes(sock))
1651
+ res = res.decode()
1652
+ else:
1653
+ res = self.rxBytes(sock)
1654
+ return res
1655
+
1656
+ def sendText(self, sock, message='$help', device=''):
1657
+ # Send text to QIS, don't read it's response
1658
+ # The objects connection needs to be opened (connect()) before this is used
1659
+ if device != '':
1660
+ #specialTimeout = '%500000'
1661
+ #message = device + ' ' + specialTimeout + ' ' + message
1662
+ message = device + ' ' + message
1663
+ #printText('Sending: "' + message + '" ' + self.host + ':' + str(self.port))
1664
+
1665
+ if self.pythonVersion == 2:
1666
+ sock.sendall(message + '\r\n')
1667
+ else:
1668
+ convM = message + '\r\n'
1669
+ sock.sendall(convM.encode('utf-8'))
1670
+ return 'Sent:' + message
1671
+
1672
+ def rxBytes(self,sock):
1673
+ #sock.setblocking(0) #make socket non-blocking
1674
+ #printText('rxBytes')
1675
+ maxExceptions=10
1676
+ exceptions=0
1677
+ maxReadRepeats=50
1678
+ readRepeats=0
1679
+ timeout_in_seconds = 10
1680
+ #Keep trying to read bytes until we get some, unless number of read repeads or exceptions is exceeded
1681
+ while True:
1682
+ try:
1683
+ #select.select returns a list of waitable objects which are ready. On windows it has to be sockets.
1684
+ #The first arguement is a list of objects to wait for reading, second writing, third 'exceptional condition'
1685
+ #We only use the read list and our socket to check if it is readable. if no timeout is specified then it blocks until it becomes readable.
1686
+ ready = select.select([sock], [], [], timeout_in_seconds)
1687
+ #time.sleep(0.1)
1688
+ #ready = [1,2]
1689
+ if ready[0]:
1690
+ ret = sock.recv(self.maxRxBytes)
1691
+ #time.sleep(0.1)
1692
+ return ret
1693
+ else:
1694
+ #printText('rxBytes - readRepeats + 1')
1695
+
1696
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
1697
+ sock.connect((self.host, self.port))
1698
+ sock.settimeout(5)
1699
+
1700
+ try:
1701
+ welcomeString = self.sock.recv(self.maxRxBytes).rstrip()
1702
+ welcomeString = 'Connected@' + self.host + ':' + str(self.port) + ' ' + '\n ' + welcomeString
1703
+ printText('New Welcome:' + welcomeString)
1704
+ except Exception as e:
1705
+ logging.error('tried and failed to get new welcome')
1706
+ raise e
1707
+
1708
+ readRepeats=readRepeats+1
1709
+ time.sleep(0.5)
1710
+
1711
+ except Exception as e:
1712
+ #printText('rxBytes - exceptions + 1')
1713
+ exceptions=exceptions+1
1714
+ time.sleep(0.5)
1715
+ raise e
1716
+
1717
+ #If read repeats has been exceeded we failed to get any data on this read.
1718
+ # !!! This is likely to break whatever called us !!!
1719
+ if readRepeats >= maxReadRepeats:
1720
+ logging.error('Max read repeats exceeded - returning.')
1721
+ return 'No data received from QIS'
1722
+ #If number of exceptions exceeded then give up by exiting
1723
+ if exceptions >= maxExceptions:
1724
+ logging.error('Max exceptions exceeded - exiting') #exceptions are probably 10035 non-blocking socket could not complete immediatley
1725
+ exit()
1726
+
1727
+
1811
1728
  def strToBb(string_in, add_length=True):
1812
1729
  length = len(str(string_in))
1813
1730
  b_array = []