quarchpy 2.2.5__py2.py3-none-any.whl → 2.2.7.dev1__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 (166) hide show
  1. quarchpy/.idea/misc.xml +4 -1
  2. quarchpy/.idea/modules.xml +0 -1
  3. quarchpy/.idea/quarchpy.iml +1 -2
  4. quarchpy/.idea/workspace.xml +28 -72
  5. quarchpy/_version.py +1 -1
  6. quarchpy/config_files/__pycache__/__init__.cpython-313.pyc +0 -0
  7. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-313.pyc +0 -0
  8. quarchpy/connection_specific/QPS/win-amd64/app.jar +0 -0
  9. quarchpy/connection_specific/QPS/win-amd64/qis/README.txt +2 -2
  10. quarchpy/connection_specific/QPS/win-amd64/qis/help.txt +2 -2
  11. quarchpy/connection_specific/QPS/win-amd64/qis/qis.jar +0 -0
  12. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/{CInterface-2.2.jar → CInterface-2.3.jar} +0 -0
  13. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/QuarchCommon-2.0.jar +0 -0
  14. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/TorridonCommon-1.0.jar +0 -0
  15. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/jmdns-3.6.0.jar +0 -0
  16. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/usb4java-1.3.1.jar +0 -0
  17. quarchpy/connection_specific/QPS/win-amd64/qps-command-reference.html +331 -0
  18. quarchpy/connection_specific/QPS/win-amd64/qps_lib/JFXUtilities-1.0.jar +0 -0
  19. quarchpy/connection_specific/QPS/win-amd64/qps_lib/QuarchCommon-2.0.jar +0 -0
  20. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-base-21.0.4-linux.jar → javafx-base-21.0.5-linux.jar} +0 -0
  21. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-controls-21.0.4-linux.jar → javafx-controls-21.0.5-linux.jar} +0 -0
  22. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-fxml-21.0.4-linux.jar → javafx-fxml-21.0.5-linux.jar} +0 -0
  23. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-graphics-21.0.4-linux.jar → javafx-graphics-21.0.5-linux.jar} +0 -0
  24. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-swing-21.0.4-linux.jar → javafx-swing-21.0.5-linux.jar} +0 -0
  25. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-base-21.0.4-mac-aarch64.jar → javafx-base-21.0.5-mac-aarch64.jar} +0 -0
  26. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-controls-21.0.4-mac-aarch64.jar → javafx-controls-21.0.5-mac-aarch64.jar} +0 -0
  27. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-fxml-21.0.4-mac-aarch64.jar → javafx-fxml-21.0.5-mac-aarch64.jar} +0 -0
  28. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-graphics-21.0.4-mac-aarch64.jar → javafx-graphics-21.0.5-mac-aarch64.jar} +0 -0
  29. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-swing-21.0.4-mac-aarch64.jar → javafx-swing-21.0.5-mac-aarch64.jar} +0 -0
  30. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-base-21.0.4-mac.jar → javafx-base-21.0.5-mac.jar} +0 -0
  31. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-controls-21.0.4-mac.jar → javafx-controls-21.0.5-mac.jar} +0 -0
  32. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-fxml-21.0.4-mac.jar → javafx-fxml-21.0.5-mac.jar} +0 -0
  33. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-graphics-21.0.4-mac.jar → javafx-graphics-21.0.5-mac.jar} +0 -0
  34. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-swing-21.0.4-mac.jar → javafx-swing-21.0.5-mac.jar} +0 -0
  35. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-base-21.0.4-win.jar → javafx-base-21.0.5-win.jar} +0 -0
  36. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-controls-21.0.4-win.jar → javafx-controls-21.0.5-win.jar} +0 -0
  37. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-fxml-21.0.4-win.jar → javafx-fxml-21.0.5-win.jar} +0 -0
  38. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-graphics-21.0.4-win.jar → javafx-graphics-21.0.5-win.jar} +0 -0
  39. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-swing-21.0.4-win.jar → javafx-swing-21.0.5-win.jar} +0 -0
  40. quarchpy/connection_specific/QPS/win-amd64/scriptCommands.txt +59 -3
  41. quarchpy/connection_specific/QPS/win-amd64/whats-new.txt +12 -20
  42. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-313.pyc +0 -0
  43. quarchpy/connection_specific/__pycache__/__init__.cpython-313.pyc +0 -0
  44. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-313.pyc +0 -0
  45. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-313.pyc +0 -0
  46. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-313.pyc +0 -0
  47. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-313.pyc +0 -0
  48. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-313.pyc +0 -0
  49. quarchpy/connection_specific/__pycache__/connection_Telnet.cpython-313.pyc +0 -0
  50. quarchpy/connection_specific/__pycache__/connection_USB.cpython-313.pyc +0 -0
  51. quarchpy/connection_specific/__pycache__/mDNS.cpython-313.pyc +0 -0
  52. quarchpy/connection_specific/connection_QPS.py +7 -3
  53. quarchpy/connection_specific/connection_QPS.py.bak +242 -0
  54. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-313.pyc +0 -0
  55. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-313.pyc +0 -0
  56. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-313.pyc +0 -0
  57. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-313.pyc +0 -0
  58. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-313.pyc +0 -0
  59. quarchpy/connection_specific/serial/__pycache__/win32.cpython-313.pyc +0 -0
  60. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-313.pyc +0 -0
  61. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-313.pyc +0 -0
  62. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-313.pyc +0 -0
  63. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-313.pyc +0 -0
  64. quarchpy/debug/__pycache__/SystemTest.cpython-313.pyc +0 -0
  65. quarchpy/debug/__pycache__/__init__.cpython-313.pyc +0 -0
  66. quarchpy/debug/__pycache__/module_debug.cpython-313.pyc +0 -0
  67. quarchpy/debug/__pycache__/simple_terminal.cpython-313.pyc +0 -0
  68. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-313.pyc +0 -0
  69. quarchpy/debug/__pycache__/versionCompare.cpython-313.pyc +0 -0
  70. quarchpy/device/__pycache__/__init__.cpython-313.pyc +0 -0
  71. quarchpy/device/__pycache__/device.cpython-313.pyc +0 -0
  72. quarchpy/device/__pycache__/quarchArray.cpython-313.pyc +0 -0
  73. quarchpy/device/__pycache__/quarchPPM.cpython-313.pyc +0 -0
  74. quarchpy/device/__pycache__/quarchQPS.cpython-313.pyc +0 -0
  75. quarchpy/device/__pycache__/scanDevices.cpython-313.pyc +0 -0
  76. quarchpy/device/quarchPPM.py +1 -1
  77. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-313.pyc +0 -0
  78. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-313.pyc +0 -0
  79. quarchpy/disk_test/__pycache__/__init__.cpython-313.pyc +0 -0
  80. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-313.pyc +0 -0
  81. quarchpy/docs/CHANGES.rst +17 -0
  82. quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
  83. quarchpy/docs/_build/doctrees/environment.pickle +0 -0
  84. quarchpy/docs/_build/doctrees/index.doctree +0 -0
  85. quarchpy/docs/_build/doctrees/readme.doctree +0 -0
  86. quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
  87. quarchpy/docs/_build/doctrees/source/licenses.doctree +0 -0
  88. quarchpy/docs/_build/doctrees/source/modules.doctree +0 -0
  89. quarchpy/docs/_build/doctrees/source/quarchpy.calibration.doctree +0 -0
  90. quarchpy/docs/_build/doctrees/source/quarchpy.config_files.doctree +0 -0
  91. quarchpy/docs/_build/doctrees/source/quarchpy.connection_specific.doctree +0 -0
  92. quarchpy/docs/_build/doctrees/source/quarchpy.debug.doctree +0 -0
  93. quarchpy/docs/_build/doctrees/source/quarchpy.device.doctree +0 -0
  94. quarchpy/docs/_build/doctrees/source/quarchpy.disk_test.doctree +0 -0
  95. quarchpy/docs/_build/doctrees/source/quarchpy.doctree +0 -0
  96. quarchpy/docs/_build/doctrees/source/quarchpy.fio.doctree +0 -0
  97. quarchpy/docs/_build/doctrees/source/quarchpy.iometer.doctree +0 -0
  98. quarchpy/docs/_build/doctrees/source/quarchpy.qis.doctree +0 -0
  99. quarchpy/docs/_build/doctrees/source/quarchpy.qps.doctree +0 -0
  100. quarchpy/docs/_build/doctrees/source/quarchpy.user_interface.doctree +0 -0
  101. quarchpy/docs/_build/doctrees/source/quarchpy.utilities.doctree +0 -0
  102. quarchpy/docs/_build/doctrees/source/readme.doctree +0 -0
  103. quarchpy/docs/_build/html/.buildinfo +2 -2
  104. quarchpy/docs/_build/html/.buildinfo.bak +4 -0
  105. quarchpy/docs/_build/html/CHANGES.html +176 -150
  106. quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +14 -0
  107. quarchpy/docs/_build/html/_static/alabaster.css +47 -87
  108. quarchpy/docs/_build/html/_static/basic.css +3 -14
  109. quarchpy/docs/_build/html/_static/doctools.js +0 -7
  110. quarchpy/docs/_build/html/_static/github-banner.svg +5 -0
  111. quarchpy/docs/_build/html/_static/language_data.js +1 -8
  112. quarchpy/docs/_build/html/_static/pygments.css +2 -1
  113. quarchpy/docs/_build/html/_static/searchtools.js +129 -71
  114. quarchpy/docs/_build/html/genindex.html +22 -55
  115. quarchpy/docs/_build/html/index.html +90 -85
  116. quarchpy/docs/_build/html/objects.inv +0 -0
  117. quarchpy/docs/_build/html/py-modindex.html +20 -29
  118. quarchpy/docs/_build/html/readme.html +20 -19
  119. quarchpy/docs/_build/html/search.html +14 -14
  120. quarchpy/docs/_build/html/searchindex.js +1 -1
  121. quarchpy/docs/_build/html/source/changelog.html +246 -216
  122. quarchpy/docs/_build/html/source/licenses.html +20 -19
  123. quarchpy/docs/_build/html/source/modules.html +22 -21
  124. quarchpy/docs/_build/html/source/quarchpy.calibration.html +20 -19
  125. quarchpy/docs/_build/html/source/quarchpy.config_files.html +20 -19
  126. quarchpy/docs/_build/html/source/quarchpy.connection_specific.html +22 -37
  127. quarchpy/docs/_build/html/source/quarchpy.debug.html +20 -19
  128. quarchpy/docs/_build/html/source/quarchpy.device.html +21 -20
  129. quarchpy/docs/_build/html/source/quarchpy.disk_test.html +20 -19
  130. quarchpy/docs/_build/html/source/quarchpy.fio.html +22 -47
  131. quarchpy/docs/_build/html/source/quarchpy.html +22 -37
  132. quarchpy/docs/_build/html/source/quarchpy.iometer.html +26 -25
  133. quarchpy/docs/_build/html/source/quarchpy.qis.html +20 -19
  134. quarchpy/docs/_build/html/source/quarchpy.qps.html +20 -19
  135. quarchpy/docs/_build/html/source/quarchpy.user_interface.html +20 -19
  136. quarchpy/docs/_build/html/source/quarchpy.utilities.html +20 -19
  137. quarchpy/docs/_build/html/source/readme.html +20 -19
  138. quarchpy/fio/FIO_interface.py +255 -1
  139. quarchpy/fio/FIO_interface.py.bak +317 -0
  140. quarchpy/fio/__pycache__/FIO_interface.cpython-313.pyc +0 -0
  141. quarchpy/fio/__pycache__/__init__.cpython-313.pyc +0 -0
  142. quarchpy/fio/__pycache__/fioDiskFinder.cpython-313.pyc +0 -0
  143. quarchpy/iometer/__pycache__/__init__.cpython-313.pyc +0 -0
  144. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-313.pyc +0 -0
  145. quarchpy/iometer/__pycache__/iometerFuncs.cpython-313.pyc +0 -0
  146. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-313.pyc +0 -0
  147. quarchpy/qis/__pycache__/__init__.cpython-313.pyc +0 -0
  148. quarchpy/qis/__pycache__/qisFuncs.cpython-313.pyc +0 -0
  149. quarchpy/qps/__pycache__/__init__.cpython-313.pyc +0 -0
  150. quarchpy/qps/__pycache__/qpsFuncs.cpython-313.pyc +0 -0
  151. quarchpy/qps/qpsFuncs.py +1 -1
  152. quarchpy/user_interface/__pycache__/__init__.cpython-313.pyc +0 -0
  153. quarchpy/user_interface/__pycache__/user_interface.cpython-313.pyc +0 -0
  154. quarchpy/utilities/__pycache__/TestCenter.cpython-313.pyc +0 -0
  155. quarchpy/utilities/__pycache__/TimeValue.cpython-313.pyc +0 -0
  156. quarchpy/utilities/__pycache__/Version.cpython-313.pyc +0 -0
  157. quarchpy/utilities/__pycache__/__init__.cpython-313.pyc +0 -0
  158. {quarchpy-2.2.5.dist-info → quarchpy-2.2.7.dev1.dist-info}/METADATA +29 -3
  159. {quarchpy-2.2.5.dist-info → quarchpy-2.2.7.dev1.dist-info}/RECORD +161 -104
  160. {quarchpy-2.2.5.dist-info → quarchpy-2.2.7.dev1.dist-info}/WHEEL +1 -1
  161. quarchpy/__pycache__/__init__.cpython-311.pyc +0 -0
  162. quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
  163. quarchpy/__pycache__/connection.cpython-311.pyc +0 -0
  164. quarchpy/__pycache__/run.cpython-311.pyc +0 -0
  165. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/jmdns-3.5.9.jar +0 -0
  166. {quarchpy-2.2.5.dist-info → quarchpy-2.2.7.dev1.dist-info}/top_level.txt +0 -0
@@ -14,6 +14,20 @@ Change Log
14
14
  ----------
15
15
 
16
16
 
17
+ 2.2.6
18
+ -----
19
+ - New QPS 1.45 and QIS 1.47
20
+
21
+ 2.2.5
22
+ -----
23
+ - Minor Bug fix and removal of redundant jar
24
+ 2.2.4
25
+ -----
26
+ - Update to Java libraries to run QPS
27
+ - Removal of depracated libs saveing space
28
+ 2.2.3
29
+ -----
30
+ - Minor bug fix
17
31
  2.2.2
18
32
  -----
19
33
  - New QPS 1.44 and QIS 1.46
@@ -1,5 +1,3 @@
1
- @import url("basic.css");
2
-
3
1
  /* -- page layout ----------------------------------------------------------- */
4
2
 
5
3
  body {
@@ -69,6 +67,11 @@ div.relations {
69
67
  }
70
68
 
71
69
 
70
+ div.sphinxsidebar {
71
+ max-height: 100%;
72
+ overflow-y: auto;
73
+ }
74
+
72
75
  div.sphinxsidebar a {
73
76
  color: #444;
74
77
  text-decoration: none;
@@ -155,6 +158,14 @@ div.sphinxsidebar input {
155
158
  font-size: 1em;
156
159
  }
157
160
 
161
+ div.sphinxsidebar #searchbox {
162
+ margin: 1em 0;
163
+ }
164
+
165
+ div.sphinxsidebar .search > div {
166
+ display: table-cell;
167
+ }
168
+
158
169
  div.sphinxsidebar hr {
159
170
  border: none;
160
171
  height: 1px;
@@ -250,10 +261,6 @@ div.admonition p.last {
250
261
  margin-bottom: 0;
251
262
  }
252
263
 
253
- div.highlight {
254
- background-color: #fff;
255
- }
256
-
257
264
  dt:target, .highlight {
258
265
  background: #FAF3E8;
259
266
  }
@@ -441,7 +448,7 @@ ul, ol {
441
448
  }
442
449
 
443
450
  pre {
444
- background: #EEE;
451
+ background: unset;
445
452
  padding: 7px 30px;
446
453
  margin: 15px 0px;
447
454
  line-height: 1.3em;
@@ -472,15 +479,15 @@ a.reference {
472
479
  border-bottom: 1px dotted #004B6B;
473
480
  }
474
481
 
482
+ a.reference:hover {
483
+ border-bottom: 1px solid #6D4100;
484
+ }
485
+
475
486
  /* Don't put an underline on images */
476
487
  a.image-reference, a.image-reference:hover {
477
488
  border-bottom: none;
478
489
  }
479
490
 
480
- a.reference:hover {
481
- border-bottom: 1px solid #6D4100;
482
- }
483
-
484
491
  a.footnote-reference {
485
492
  text-decoration: none;
486
493
  font-size: 0.7em;
@@ -496,68 +503,7 @@ a:hover tt, a:hover code {
496
503
  background: #EEE;
497
504
  }
498
505
 
499
-
500
- @media screen and (max-width: 870px) {
501
-
502
- div.sphinxsidebar {
503
- display: none;
504
- }
505
-
506
- div.document {
507
- width: 100%;
508
-
509
- }
510
-
511
- div.documentwrapper {
512
- margin-left: 0;
513
- margin-top: 0;
514
- margin-right: 0;
515
- margin-bottom: 0;
516
- }
517
-
518
- div.bodywrapper {
519
- margin-top: 0;
520
- margin-right: 0;
521
- margin-bottom: 0;
522
- margin-left: 0;
523
- }
524
-
525
- ul {
526
- margin-left: 0;
527
- }
528
-
529
- li > ul {
530
- /* Matches the 30px from the "ul, ol" selector above */
531
- margin-left: 30px;
532
- }
533
-
534
- .document {
535
- width: auto;
536
- }
537
-
538
- .footer {
539
- width: auto;
540
- }
541
-
542
- .bodywrapper {
543
- margin: 0;
544
- }
545
-
546
- .footer {
547
- width: auto;
548
- }
549
-
550
- .github {
551
- display: none;
552
- }
553
-
554
-
555
-
556
- }
557
-
558
-
559
-
560
- @media screen and (max-width: 875px) {
506
+ @media screen and (max-width: 940px) {
561
507
 
562
508
  body {
563
509
  margin: 0;
@@ -567,12 +513,16 @@ a:hover tt, a:hover code {
567
513
  div.documentwrapper {
568
514
  float: none;
569
515
  background: #fff;
516
+ margin-left: 0;
517
+ margin-top: 0;
518
+ margin-right: 0;
519
+ margin-bottom: 0;
570
520
  }
571
521
 
572
522
  div.sphinxsidebar {
573
523
  display: block;
574
524
  float: none;
575
- width: 102.5%;
525
+ width: unset;
576
526
  margin: 50px -30px -20px -30px;
577
527
  padding: 10px 20px;
578
528
  background: #333;
@@ -607,8 +557,14 @@ a:hover tt, a:hover code {
607
557
 
608
558
  div.body {
609
559
  min-height: 0;
560
+ min-width: auto; /* fixes width on small screens, breaks .hll */
610
561
  padding: 0;
611
562
  }
563
+
564
+ .hll {
565
+ /* "fixes" the breakage */
566
+ width: max-content;
567
+ }
612
568
 
613
569
  .rtd_doc_footer {
614
570
  display: none;
@@ -622,13 +578,18 @@ a:hover tt, a:hover code {
622
578
  width: auto;
623
579
  }
624
580
 
625
- .footer {
626
- width: auto;
627
- }
628
-
629
581
  .github {
630
582
  display: none;
631
583
  }
584
+
585
+ ul {
586
+ margin-left: 0;
587
+ }
588
+
589
+ li > ul {
590
+ /* Matches the 30px from the "ul, ol" selector above */
591
+ margin-left: 30px;
592
+ }
632
593
  }
633
594
 
634
595
 
@@ -638,15 +599,7 @@ a:hover tt, a:hover code {
638
599
  display: none!important;
639
600
  }
640
601
 
641
- /* Make nested-list/multi-paragraph items look better in Releases changelog
642
- * pages. Without this, docutils' magical list fuckery causes inconsistent
643
- * formatting between different release sub-lists.
644
- */
645
- div#changelog > div.section > ul > li > p:only-child {
646
- margin-bottom: 0;
647
- }
648
-
649
- /* Hide fugly table cell borders in ..bibliography:: directive output */
602
+ /* Hide ugly table cell borders in ..bibliography:: directive output */
650
603
  table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
651
604
  border: none;
652
605
  /* Below needed in some edge cases; if not applied, bottom shadows appear */
@@ -700,4 +653,11 @@ nav#breadcrumbs li+li:before {
700
653
  div.related {
701
654
  display: none;
702
655
  }
656
+ }
657
+
658
+ img.github {
659
+ position: absolute;
660
+ top: 0;
661
+ border: 0;
662
+ right: 0;
703
663
  }
@@ -1,12 +1,5 @@
1
1
  /*
2
- * basic.css
3
- * ~~~~~~~~~
4
- *
5
2
  * Sphinx stylesheet -- basic theme.
6
- *
7
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
8
- * :license: BSD, see LICENSE for details.
9
- *
10
3
  */
11
4
 
12
5
  /* -- main layout ----------------------------------------------------------- */
@@ -115,15 +108,11 @@ img {
115
108
  /* -- search page ----------------------------------------------------------- */
116
109
 
117
110
  ul.search {
118
- margin: 10px 0 0 20px;
119
- padding: 0;
111
+ margin-top: 10px;
120
112
  }
121
113
 
122
114
  ul.search li {
123
- padding: 5px 0 5px 20px;
124
- background-image: url(file.png);
125
- background-repeat: no-repeat;
126
- background-position: 0 7px;
115
+ padding: 5px 0;
127
116
  }
128
117
 
129
118
  ul.search li a {
@@ -222,7 +211,7 @@ table.modindextable td {
222
211
  /* -- general body styles --------------------------------------------------- */
223
212
 
224
213
  div.body {
225
- min-width: 360px;
214
+ min-width: inherit;
226
215
  max-width: 800px;
227
216
  }
228
217
 
@@ -1,12 +1,5 @@
1
1
  /*
2
- * doctools.js
3
- * ~~~~~~~~~~~
4
- *
5
2
  * Base JavaScript utilities for all Sphinx HTML documentation.
6
- *
7
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
8
- * :license: BSD, see LICENSE for details.
9
- *
10
3
  */
11
4
  "use strict";
12
5
 
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 250 250" fill="#fff">
2
+ <path d="M0 0l115 115h15l12 27 108 108V0z" fill="#151513"/>
3
+ <path d="M128 109c-15-9-9-19-9-19 3-7 2-11 2-11-1-7 3-2 3-2 4 5 2 11 2 11-3 10 5 15 9 16"/>
4
+ <path d="M115 115s4 2 5 0l14-14c3-2 6-3 8-3-8-11-15-24 2-41 5-5 10-7 16-7 1-2 3-7 12-11 0 0 5 3 7 16 4 2 8 5 12 9s7 8 9 12c14 3 17 7 17 7-4 8-9 11-11 11 0 6-2 11-7 16-16 16-30 10-41 2 0 3-1 7-5 11l-12 11c-1 1 1 5 1 5z"/>
5
+ </svg>
@@ -1,19 +1,12 @@
1
1
  /*
2
- * language_data.js
3
- * ~~~~~~~~~~~~~~~~
4
- *
5
2
  * This script contains the language-specific data used by searchtools.js,
6
3
  * namely the list of stopwords, stemmer, scorer and splitter.
7
- *
8
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
9
- * :license: BSD, see LICENSE for details.
10
- *
11
4
  */
12
5
 
13
6
  var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
14
7
 
15
8
 
16
- /* Non-minified version is copied as a separate JS file, is available */
9
+ /* Non-minified version is copied as a separate JS file, if available */
17
10
 
18
11
  /**
19
12
  * Porter Stemmer
@@ -22,6 +22,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left:
22
22
  .highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
23
23
  .highlight .gd { color: #a40000 } /* Generic.Deleted */
24
24
  .highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
25
+ .highlight .ges { color: #000000 } /* Generic.EmphStrong */
25
26
  .highlight .gr { color: #ef2929 } /* Generic.Error */
26
27
  .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
27
28
  .highlight .gi { color: #00A000 } /* Generic.Inserted */
@@ -55,7 +56,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left:
55
56
  .highlight .nv { color: #000000 } /* Name.Variable */
56
57
  .highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
57
58
  .highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */
58
- .highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
59
+ .highlight .w { color: #f8f8f8 } /* Text.Whitespace */
59
60
  .highlight .mb { color: #990000 } /* Literal.Number.Bin */
60
61
  .highlight .mf { color: #990000 } /* Literal.Number.Float */
61
62
  .highlight .mh { color: #990000 } /* Literal.Number.Hex */
@@ -1,12 +1,5 @@
1
1
  /*
2
- * searchtools.js
3
- * ~~~~~~~~~~~~~~~~
4
- *
5
2
  * Sphinx JavaScript utilities for the full-text search.
6
- *
7
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
8
- * :license: BSD, see LICENSE for details.
9
- *
10
3
  */
11
4
  "use strict";
12
5
 
@@ -20,7 +13,7 @@ if (typeof Scorer === "undefined") {
20
13
  // and returns the new score.
21
14
  /*
22
15
  score: result => {
23
- const [docname, title, anchor, descr, score, filename] = result
16
+ const [docname, title, anchor, descr, score, filename, kind] = result
24
17
  return score
25
18
  },
26
19
  */
@@ -47,6 +40,14 @@ if (typeof Scorer === "undefined") {
47
40
  };
48
41
  }
49
42
 
43
+ // Global search result kind enum, used by themes to style search results.
44
+ class SearchResultKind {
45
+ static get index() { return "index"; }
46
+ static get object() { return "object"; }
47
+ static get text() { return "text"; }
48
+ static get title() { return "title"; }
49
+ }
50
+
50
51
  const _removeChildren = (element) => {
51
52
  while (element && element.lastChild) element.removeChild(element.lastChild);
52
53
  };
@@ -64,9 +65,13 @@ const _displayItem = (item, searchTerms, highlightTerms) => {
64
65
  const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
65
66
  const contentRoot = document.documentElement.dataset.content_root;
66
67
 
67
- const [docName, title, anchor, descr, score, _filename] = item;
68
+ const [docName, title, anchor, descr, score, _filename, kind] = item;
68
69
 
69
70
  let listItem = document.createElement("li");
71
+ // Add a class representing the item's type:
72
+ // can be used by a theme's CSS selector for styling
73
+ // See SearchResultKind for the class names.
74
+ listItem.classList.add(`kind-${kind}`);
70
75
  let requestUrl;
71
76
  let linkUrl;
72
77
  if (docBuilder === "dirhtml") {
@@ -99,7 +104,7 @@ const _displayItem = (item, searchTerms, highlightTerms) => {
99
104
  .then((data) => {
100
105
  if (data)
101
106
  listItem.appendChild(
102
- Search.makeSearchSummary(data, searchTerms)
107
+ Search.makeSearchSummary(data, searchTerms, anchor)
103
108
  );
104
109
  // highlight search terms in the summary
105
110
  if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
@@ -115,9 +120,11 @@ const _finishSearch = (resultCount) => {
115
120
  "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
116
121
  );
117
122
  else
118
- Search.status.innerText = _(
119
- `Search finished, found ${resultCount} page(s) matching the search query.`
120
- );
123
+ Search.status.innerText = Documentation.ngettext(
124
+ "Search finished, found one page matching the search query.",
125
+ "Search finished, found ${resultCount} pages matching the search query.",
126
+ resultCount,
127
+ ).replace('${resultCount}', resultCount);
121
128
  };
122
129
  const _displayNextItem = (
123
130
  results,
@@ -137,6 +144,22 @@ const _displayNextItem = (
137
144
  // search finished, update title and status message
138
145
  else _finishSearch(resultCount);
139
146
  };
147
+ // Helper function used by query() to order search results.
148
+ // Each input is an array of [docname, title, anchor, descr, score, filename, kind].
149
+ // Order the results by score (in opposite order of appearance, since the
150
+ // `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.
151
+ const _orderResultsByScoreThenName = (a, b) => {
152
+ const leftScore = a[4];
153
+ const rightScore = b[4];
154
+ if (leftScore === rightScore) {
155
+ // same score: sort alphabetically
156
+ const leftTitle = a[1].toLowerCase();
157
+ const rightTitle = b[1].toLowerCase();
158
+ if (leftTitle === rightTitle) return 0;
159
+ return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
160
+ }
161
+ return leftScore > rightScore ? 1 : -1;
162
+ };
140
163
 
141
164
  /**
142
165
  * Default splitQuery function. Can be overridden in ``sphinx.search`` with a
@@ -160,13 +183,26 @@ const Search = {
160
183
  _queued_query: null,
161
184
  _pulse_status: -1,
162
185
 
163
- htmlToText: (htmlString) => {
186
+ htmlToText: (htmlString, anchor) => {
164
187
  const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
165
- htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
188
+ for (const removalQuery of [".headerlink", "script", "style"]) {
189
+ htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
190
+ }
191
+ if (anchor) {
192
+ const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`);
193
+ if (anchorContent) return anchorContent.textContent;
194
+
195
+ console.warn(
196
+ `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`
197
+ );
198
+ }
199
+
200
+ // if anchor not specified or not found, fall back to main content
166
201
  const docContent = htmlElement.querySelector('[role="main"]');
167
- if (docContent !== undefined) return docContent.textContent;
202
+ if (docContent) return docContent.textContent;
203
+
168
204
  console.warn(
169
- "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
205
+ "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template."
170
206
  );
171
207
  return "";
172
208
  },
@@ -219,6 +255,7 @@ const Search = {
219
255
  searchSummary.classList.add("search-summary");
220
256
  searchSummary.innerText = "";
221
257
  const searchList = document.createElement("ul");
258
+ searchList.setAttribute("role", "list");
222
259
  searchList.classList.add("search");
223
260
 
224
261
  const out = document.getElementById("search-results");
@@ -239,16 +276,7 @@ const Search = {
239
276
  else Search.deferQuery(query);
240
277
  },
241
278
 
242
- /**
243
- * execute search (requires search index to be loaded)
244
- */
245
- query: (query) => {
246
- const filenames = Search._index.filenames;
247
- const docNames = Search._index.docnames;
248
- const titles = Search._index.titles;
249
- const allTitles = Search._index.alltitles;
250
- const indexEntries = Search._index.indexentries;
251
-
279
+ _parseQuery: (query) => {
252
280
  // stem the search terms and add them to the correct list
253
281
  const stemmer = new Stemmer();
254
282
  const searchTerms = new Set();
@@ -284,22 +312,40 @@ const Search = {
284
312
  // console.info("required: ", [...searchTerms]);
285
313
  // console.info("excluded: ", [...excludedTerms]);
286
314
 
287
- // array of [docname, title, anchor, descr, score, filename]
288
- let results = [];
315
+ return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];
316
+ },
317
+
318
+ /**
319
+ * execute search (requires search index to be loaded)
320
+ */
321
+ _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => {
322
+ const filenames = Search._index.filenames;
323
+ const docNames = Search._index.docnames;
324
+ const titles = Search._index.titles;
325
+ const allTitles = Search._index.alltitles;
326
+ const indexEntries = Search._index.indexentries;
327
+
328
+ // Collect multiple result groups to be sorted separately and then ordered.
329
+ // Each is an array of [docname, title, anchor, descr, score, filename, kind].
330
+ const normalResults = [];
331
+ const nonMainIndexResults = [];
332
+
289
333
  _removeChildren(document.getElementById("search-progress"));
290
334
 
291
- const queryLower = query.toLowerCase();
335
+ const queryLower = query.toLowerCase().trim();
292
336
  for (const [title, foundTitles] of Object.entries(allTitles)) {
293
- if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
337
+ if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
294
338
  for (const [file, id] of foundTitles) {
295
- let score = Math.round(100 * queryLower.length / title.length)
296
- results.push([
339
+ const score = Math.round(Scorer.title * queryLower.length / title.length);
340
+ const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
341
+ normalResults.push([
297
342
  docNames[file],
298
343
  titles[file] !== title ? `${titles[file]} > ${title}` : title,
299
344
  id !== null ? "#" + id : "",
300
345
  null,
301
- score,
346
+ score + boost,
302
347
  filenames[file],
348
+ SearchResultKind.title,
303
349
  ]);
304
350
  }
305
351
  }
@@ -308,46 +354,48 @@ const Search = {
308
354
  // search for explicit entries in index directives
309
355
  for (const [entry, foundEntries] of Object.entries(indexEntries)) {
310
356
  if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
311
- for (const [file, id] of foundEntries) {
312
- let score = Math.round(100 * queryLower.length / entry.length)
313
- results.push([
357
+ for (const [file, id, isMain] of foundEntries) {
358
+ const score = Math.round(100 * queryLower.length / entry.length);
359
+ const result = [
314
360
  docNames[file],
315
361
  titles[file],
316
362
  id ? "#" + id : "",
317
363
  null,
318
364
  score,
319
365
  filenames[file],
320
- ]);
366
+ SearchResultKind.index,
367
+ ];
368
+ if (isMain) {
369
+ normalResults.push(result);
370
+ } else {
371
+ nonMainIndexResults.push(result);
372
+ }
321
373
  }
322
374
  }
323
375
  }
324
376
 
325
377
  // lookup as object
326
378
  objectTerms.forEach((term) =>
327
- results.push(...Search.performObjectSearch(term, objectTerms))
379
+ normalResults.push(...Search.performObjectSearch(term, objectTerms))
328
380
  );
329
381
 
330
382
  // lookup as search terms in fulltext
331
- results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
383
+ normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms));
332
384
 
333
385
  // let the scorer override scores with a custom scoring function
334
- if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
335
-
336
- // now sort the results by score (in opposite order of appearance, since the
337
- // display function below uses pop() to retrieve items) and then
338
- // alphabetically
339
- results.sort((a, b) => {
340
- const leftScore = a[4];
341
- const rightScore = b[4];
342
- if (leftScore === rightScore) {
343
- // same score: sort alphabetically
344
- const leftTitle = a[1].toLowerCase();
345
- const rightTitle = b[1].toLowerCase();
346
- if (leftTitle === rightTitle) return 0;
347
- return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
348
- }
349
- return leftScore > rightScore ? 1 : -1;
350
- });
386
+ if (Scorer.score) {
387
+ normalResults.forEach((item) => (item[4] = Scorer.score(item)));
388
+ nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));
389
+ }
390
+
391
+ // Sort each group of results by score and then alphabetically by name.
392
+ normalResults.sort(_orderResultsByScoreThenName);
393
+ nonMainIndexResults.sort(_orderResultsByScoreThenName);
394
+
395
+ // Combine the result groups in (reverse) order.
396
+ // Non-main index entries are typically arbitrary cross-references,
397
+ // so display them after other results.
398
+ let results = [...nonMainIndexResults, ...normalResults];
351
399
 
352
400
  // remove duplicate search results
353
401
  // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
@@ -361,7 +409,12 @@ const Search = {
361
409
  return acc;
362
410
  }, []);
363
411
 
364
- results = results.reverse();
412
+ return results.reverse();
413
+ },
414
+
415
+ query: (query) => {
416
+ const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query);
417
+ const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms);
365
418
 
366
419
  // for debugging
367
420
  //Search.lastresults = results.slice(); // a copy
@@ -432,6 +485,7 @@ const Search = {
432
485
  descr,
433
486
  score,
434
487
  filenames[match[0]],
488
+ SearchResultKind.object,
435
489
  ]);
436
490
  };
437
491
  Object.keys(objects).forEach((prefix) =>
@@ -466,14 +520,18 @@ const Search = {
466
520
  // add support for partial matches
467
521
  if (word.length > 2) {
468
522
  const escapedWord = _escapeRegExp(word);
469
- Object.keys(terms).forEach((term) => {
470
- if (term.match(escapedWord) && !terms[word])
471
- arr.push({ files: terms[term], score: Scorer.partialTerm });
472
- });
473
- Object.keys(titleTerms).forEach((term) => {
474
- if (term.match(escapedWord) && !titleTerms[word])
475
- arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
476
- });
523
+ if (!terms.hasOwnProperty(word)) {
524
+ Object.keys(terms).forEach((term) => {
525
+ if (term.match(escapedWord))
526
+ arr.push({ files: terms[term], score: Scorer.partialTerm });
527
+ });
528
+ }
529
+ if (!titleTerms.hasOwnProperty(word)) {
530
+ Object.keys(titleTerms).forEach((term) => {
531
+ if (term.match(escapedWord))
532
+ arr.push({ files: titleTerms[term], score: Scorer.partialTitle });
533
+ });
534
+ }
477
535
  }
478
536
 
479
537
  // no match but word was a required one
@@ -496,9 +554,8 @@ const Search = {
496
554
 
497
555
  // create the mapping
498
556
  files.forEach((file) => {
499
- if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
500
- fileMap.get(file).push(word);
501
- else fileMap.set(file, [word]);
557
+ if (!fileMap.has(file)) fileMap.set(file, [word]);
558
+ else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word);
502
559
  });
503
560
  });
504
561
 
@@ -539,6 +596,7 @@ const Search = {
539
596
  null,
540
597
  score,
541
598
  filenames[file],
599
+ SearchResultKind.text,
542
600
  ]);
543
601
  }
544
602
  return results;
@@ -549,8 +607,8 @@ const Search = {
549
607
  * search summary for a given text. keywords is a list
550
608
  * of stemmed words.
551
609
  */
552
- makeSearchSummary: (htmlText, keywords) => {
553
- const text = Search.htmlToText(htmlText);
610
+ makeSearchSummary: (htmlText, keywords, anchor) => {
611
+ const text = Search.htmlToText(htmlText, anchor);
554
612
  if (text === "") return null;
555
613
 
556
614
  const textLower = text.toLowerCase();