UnitMatchPy 2.1__tar.gz → 2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. UnitMatchPy-2.4/PKG-INFO +40 -0
  2. UnitMatchPy-2.4/README.md +31 -0
  3. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/GUI.py +6 -3
  4. UnitMatchPy-2.4/UnitMatchPy/GUI_icon.png +0 -0
  5. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/Overlord.py +0 -1
  6. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/Save_utils.py +6 -6
  7. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/assign_unique_id.py +1 -1
  8. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/default_params.py +1 -2
  9. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/metric_functions.py +34 -23
  10. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/utils.py +55 -3
  11. UnitMatchPy-2.4/UnitMatchPy.egg-info/PKG-INFO +40 -0
  12. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy.egg-info/SOURCES.txt +1 -0
  13. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/setup.py +1 -1
  14. UnitMatchPy-2.1/PKG-INFO +0 -38
  15. UnitMatchPy-2.1/README.md +0 -29
  16. UnitMatchPy-2.1/UnitMatchPy.egg-info/PKG-INFO +0 -38
  17. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/LICENSE +0 -0
  18. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/MANIFEST.in +0 -0
  19. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/Extract_raw_data.py +0 -0
  20. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/LICENSE +0 -0
  21. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/README.txt +0 -0
  22. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/awdark.tcl +0 -0
  23. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/awlight.tcl +0 -0
  24. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/awtemplate.tcl +0 -0
  25. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/awthemes.n7 +0 -0
  26. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/awthemes.tcl +0 -0
  27. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/awwinxpblue.tcl +0 -0
  28. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/colorutils.tcl +0 -0
  29. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/demoscaled.tcl +0 -0
  30. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/demoscaledb.tcl +0 -0
  31. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/demottk.tcl +0 -0
  32. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/README.txt +0 -0
  33. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/chevron/arrow-down-d.svg +0 -0
  34. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/chevron/arrow-down-n-base.svg +0 -0
  35. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/chevron/arrow-down-n.svg +0 -0
  36. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/chevron/arrow-down-sn.svg +0 -0
  37. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/chevron/arrow-left-n.svg +0 -0
  38. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/chevron/arrow-right-n.svg +0 -0
  39. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/chevron/arrow-right-sn.svg +0 -0
  40. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/chevron/arrow-up-d.svg +0 -0
  41. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/chevron/arrow-up-n.svg +0 -0
  42. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/open/arrow-down-n-base.svg +0 -0
  43. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/open/arrow-down-n.svg +0 -0
  44. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/open/arrow-down-sn.svg +0 -0
  45. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/open/arrow-left-n.svg +0 -0
  46. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/open/arrow-right-n.svg +0 -0
  47. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/open/arrow-right-sn.svg +0 -0
  48. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/open/arrow-up-n.svg +0 -0
  49. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid/arrow-down-n-base.svg +0 -0
  50. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid/arrow-down-n.svg +0 -0
  51. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid/arrow-down-sn.svg +0 -0
  52. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid/arrow-left-n.svg +0 -0
  53. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid/arrow-right-n.svg +0 -0
  54. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid/arrow-right-sn.svg +0 -0
  55. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid/arrow-up-n.svg +0 -0
  56. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid-bg/arrow-down-d.svg +0 -0
  57. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid-bg/arrow-down-n-base.svg +0 -0
  58. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid-bg/arrow-down-n.svg +0 -0
  59. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid-bg/arrow-left-d.svg +0 -0
  60. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid-bg/arrow-left-n.svg +0 -0
  61. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid-bg/arrow-right-d.svg +0 -0
  62. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid-bg/arrow-right-n.svg +0 -0
  63. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid-bg/arrow-up-d.svg +0 -0
  64. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid-bg/arrow-up-n.svg +0 -0
  65. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/arrow/solid-bg/settings.tcl +0 -0
  66. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-accent-gradient/button-a.svg +0 -0
  67. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-accent-gradient/button-d.svg +0 -0
  68. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-accent-gradient/button-n.svg +0 -0
  69. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-accent-gradient/button-p.svg +0 -0
  70. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-accent-gradient/settings.tcl +0 -0
  71. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-flat/button-a.svg +0 -0
  72. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-flat/button-af-base.svg +0 -0
  73. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-flat/button-af.svg +0 -0
  74. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-flat/button-d.svg +0 -0
  75. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-flat/button-f.svg +0 -0
  76. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-flat/button-n.svg +0 -0
  77. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-flat/button-p.svg +0 -0
  78. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-flat/settings.tcl +0 -0
  79. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-gradient/button-d.svg +0 -0
  80. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-gradient/button-n-base.svg +0 -0
  81. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-gradient/button-n.svg +0 -0
  82. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/button/roundedrect-gradient/settings.tcl +0 -0
  83. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check/cb-sa-base.svg +0 -0
  84. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check/cb-sa.svg +0 -0
  85. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check/cb-sd.svg +0 -0
  86. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check/cb-sn-base.svg +0 -0
  87. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check/cb-sn.svg +0 -0
  88. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check/cb-ua.svg +0 -0
  89. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check/cb-ud.svg +0 -0
  90. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check/cb-un.svg +0 -0
  91. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check-rev/cb-sa-base.svg +0 -0
  92. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check-rev/cb-sa.svg +0 -0
  93. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check-rev/cb-sd.svg +0 -0
  94. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check-rev/cb-sn-base.svg +0 -0
  95. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check-rev/cb-sn.svg +0 -0
  96. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check-rev/cb-ua.svg +0 -0
  97. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check-rev/cb-ud.svg +0 -0
  98. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-check-rev/cb-un.svg +0 -0
  99. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-square/cb-sa.svg +0 -0
  100. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-square/cb-sd.svg +0 -0
  101. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-square/cb-sn-base.svg +0 -0
  102. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-square/cb-sn.svg +0 -0
  103. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-square/cb-ua.svg +0 -0
  104. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-square/cb-ud.svg +0 -0
  105. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/roundedrect-square/cb-un.svg +0 -0
  106. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/square-check-gradient/cb-sd.svg +0 -0
  107. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/square-check-gradient/cb-sn-base.svg +0 -0
  108. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/square-check-gradient/cb-sn.svg +0 -0
  109. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/square-check-gradient/cb-ud.svg +0 -0
  110. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/square-check-gradient/cb-un.svg +0 -0
  111. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/square-x/cb-sd.svg +0 -0
  112. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/square-x/cb-sn-base.svg +0 -0
  113. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/square-x/cb-sn.svg +0 -0
  114. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/square-x/cb-ud.svg +0 -0
  115. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/checkbutton/square-x/cb-un.svg +0 -0
  116. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/rounded/combo-arrow-down-d.svg +0 -0
  117. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/rounded/combo-arrow-down-n-base.svg +0 -0
  118. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/rounded/combo-arrow-down-n.svg +0 -0
  119. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/rounded/combo-entry-a.svg +0 -0
  120. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/rounded/combo-entry-d.svg +0 -0
  121. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/rounded/combo-entry-f.svg +0 -0
  122. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/rounded/combo-entry-n-base.svg +0 -0
  123. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/rounded/combo-entry-n.svg +0 -0
  124. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/rounded/settings.tcl +0 -0
  125. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/solid-bg/combo-arrow-down-a.svg +0 -0
  126. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/solid-bg/combo-arrow-down-d-base.svg +0 -0
  127. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/solid-bg/combo-arrow-down-d.svg +0 -0
  128. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/solid-bg/combo-arrow-down-n-base.svg +0 -0
  129. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/solid-bg/combo-arrow-down-n.svg +0 -0
  130. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/combobox/solid-bg/settings.tcl +0 -0
  131. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/empty/empty/empty.svg +0 -0
  132. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/entry/roundedrect/entry-a.svg +0 -0
  133. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/entry/roundedrect/entry-d.svg +0 -0
  134. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/entry/roundedrect/entry-f.svg +0 -0
  135. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/entry/roundedrect/entry-n-base.svg +0 -0
  136. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/entry/roundedrect/entry-n.svg +0 -0
  137. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/entry/roundedrect/settings.tcl +0 -0
  138. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/labelframe/square/labelframe-d.svg +0 -0
  139. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/labelframe/square/labelframe-n.svg +0 -0
  140. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/menubutton/chevron/mb-arrow-down-a.svg +0 -0
  141. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/menubutton/chevron/mb-arrow-down-d.svg +0 -0
  142. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/menubutton/chevron/mb-arrow-down-n-base.svg +0 -0
  143. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/menubutton/chevron/mb-arrow-down-n.svg +0 -0
  144. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/menubutton/solid/mb-arrow-down-d-base.svg +0 -0
  145. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/menubutton/solid/mb-arrow-down-d.svg +0 -0
  146. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/menubutton/solid/mb-arrow-down-n-base.svg +0 -0
  147. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/menubutton/solid/mb-arrow-down-n.svg +0 -0
  148. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-dark/notebook-tab-a.svg +0 -0
  149. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-dark/notebook-tab-d.svg +0 -0
  150. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-dark/notebook-tab-h.svg +0 -0
  151. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-dark/notebook-tab-i-base.svg +0 -0
  152. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-dark/notebook-tab-i.svg +0 -0
  153. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-dark/settings.tcl +0 -0
  154. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-light/notebook-tab-a.svg +0 -0
  155. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-light/notebook-tab-d.svg +0 -0
  156. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-light/notebook-tab-h.svg +0 -0
  157. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-light/notebook-tab-i-base.svg +0 -0
  158. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-light/notebook-tab-i.svg +0 -0
  159. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-light/settings.tcl +0 -0
  160. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-light-accent/notebook-tab-a.svg +0 -0
  161. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-light-accent/notebook-tab-d.svg +0 -0
  162. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-light-accent/notebook-tab-h.svg +0 -0
  163. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-light-accent/notebook-tab-i-base.svg +0 -0
  164. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-light-accent/notebook-tab-i.svg +0 -0
  165. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/notebook/roundedtop-light-accent/settings.tcl +0 -0
  166. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect/settings.tcl +0 -0
  167. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect/slider-hd.svg +0 -0
  168. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect/slider-hn-base.svg +0 -0
  169. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect/slider-hn.svg +0 -0
  170. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect/slider-vd.svg +0 -0
  171. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect/slider-vn.svg +0 -0
  172. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect/trough-hd.svg +0 -0
  173. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect/trough-hn-base.svg +0 -0
  174. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect/trough-hn.svg +0 -0
  175. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect/trough-vd.svg +0 -0
  176. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect/trough-vn.svg +0 -0
  177. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-bord/settings.tcl +0 -0
  178. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-bord/slider-hd.svg +0 -0
  179. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-bord/slider-hn-base.svg +0 -0
  180. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-bord/slider-hn.svg +0 -0
  181. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-bord/slider-vd.svg +0 -0
  182. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-bord/slider-vn.svg +0 -0
  183. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-diag/diag-mask.svg +0 -0
  184. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-diag/settings.tcl +0 -0
  185. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-diag/slider-hd.svg +0 -0
  186. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-diag/slider-hn-base.svg +0 -0
  187. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-diag/slider-hn.svg +0 -0
  188. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-diag/slider-vd.svg +0 -0
  189. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-diag/slider-vn-base.svg +0 -0
  190. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rect-diag/slider-vn.svg +0 -0
  191. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rounded-line/settings.tcl +0 -0
  192. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rounded-line/slider-hd.svg +0 -0
  193. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rounded-line/slider-hn.svg +0 -0
  194. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rounded-line/slider-vd.svg +0 -0
  195. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rounded-line/slider-vn.svg +0 -0
  196. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rounded-line/trough-hd.svg +0 -0
  197. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rounded-line/trough-hn-base.svg +0 -0
  198. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rounded-line/trough-hn.svg +0 -0
  199. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rounded-line/trough-vd.svg +0 -0
  200. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rounded-line/trough-vn-base.svg +0 -0
  201. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/rounded-line/trough-vn.svg +0 -0
  202. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/progressbar/settings.tcl +0 -0
  203. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle/rb-sa.svg +0 -0
  204. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle/rb-sd.svg +0 -0
  205. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle/rb-sn-base.svg +0 -0
  206. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle/rb-sn.svg +0 -0
  207. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle/rb-ua.svg +0 -0
  208. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle/rb-ud.svg +0 -0
  209. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle/rb-un.svg +0 -0
  210. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-gradient/rb-sd.svg +0 -0
  211. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-gradient/rb-sn-base.svg +0 -0
  212. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-gradient/rb-sn.svg +0 -0
  213. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-gradient/rb-ud.svg +0 -0
  214. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-gradient/rb-un.svg +0 -0
  215. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-hlbg/rb-sa.svg +0 -0
  216. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-hlbg/rb-sd.svg +0 -0
  217. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-hlbg/rb-sn-base.svg +0 -0
  218. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-hlbg/rb-sn.svg +0 -0
  219. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-hlbg/rb-ua.svg +0 -0
  220. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-hlbg/rb-ud.svg +0 -0
  221. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-hlbg/rb-un.svg +0 -0
  222. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-rev/rb-sa.svg +0 -0
  223. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-rev/rb-sd.svg +0 -0
  224. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-rev/rb-sn-base.svg +0 -0
  225. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-rev/rb-sn.svg +0 -0
  226. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-rev/rb-ua.svg +0 -0
  227. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-rev/rb-ud.svg +0 -0
  228. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/circle-circle-rev/rb-un.svg +0 -0
  229. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/octagon-circle/rb-sd.svg +0 -0
  230. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/octagon-circle/rb-sn-base.svg +0 -0
  231. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/octagon-circle/rb-sn.svg +0 -0
  232. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/octagon-circle/rb-ud.svg +0 -0
  233. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/radiobutton/octagon-circle/rb-un.svg +0 -0
  234. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/circle/scale-ha.svg +0 -0
  235. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/circle/scale-hd.svg +0 -0
  236. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/circle/scale-hn.svg +0 -0
  237. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/circle-rev/scale-ha.svg +0 -0
  238. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/circle-rev/scale-hd.svg +0 -0
  239. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/circle-rev/scale-hn.svg +0 -0
  240. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-bord-grip/scale-hd.svg +0 -0
  241. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-bord-grip/scale-hn-base.svg +0 -0
  242. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-bord-grip/scale-hn.svg +0 -0
  243. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-bord-grip/scale-vd.svg +0 -0
  244. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-bord-grip/scale-vn.svg +0 -0
  245. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-narrow/scale-hd.svg +0 -0
  246. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-narrow/scale-hn-base.svg +0 -0
  247. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-narrow/scale-hn.svg +0 -0
  248. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-narrow/scale-trough-hd.svg +0 -0
  249. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-narrow/scale-trough-hn-base.svg +0 -0
  250. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-narrow/scale-trough-hn.svg +0 -0
  251. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-narrow/scale-trough-vd.svg +0 -0
  252. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-narrow/scale-trough-vn-base.svg +0 -0
  253. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-narrow/scale-trough-vn.svg +0 -0
  254. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-narrow/scale-vd.svg +0 -0
  255. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-narrow/scale-vn.svg +0 -0
  256. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scale/rect-narrow/settings.tcl +0 -0
  257. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scrollbar-grip/circle/sb-slider-h-grip-base.svg +0 -0
  258. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scrollbar-grip/circle/sb-slider-h-grip.svg +0 -0
  259. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scrollbar-grip/circle/sb-slider-v-grip-base.svg +0 -0
  260. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/scrollbar-grip/circle/sb-slider-v-grip.svg +0 -0
  261. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/sizegrip/circle/sizegrip-base.svg +0 -0
  262. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/sizegrip/circle/sizegrip.svg +0 -0
  263. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/chevron/tree-arrow-down-base.svg +0 -0
  264. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/chevron/tree-arrow-down-n.svg +0 -0
  265. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/chevron/tree-arrow-down-sn.svg +0 -0
  266. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/chevron/tree-arrow-right-n.svg +0 -0
  267. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/chevron/tree-arrow-right-sn.svg +0 -0
  268. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/open/tree-arrow-down-n-base.svg +0 -0
  269. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/open/tree-arrow-down-n.svg +0 -0
  270. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/open/tree-arrow-down-sn.svg +0 -0
  271. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/open/tree-arrow-right-n-base.svg +0 -0
  272. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/open/tree-arrow-right-n.svg +0 -0
  273. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/open/tree-arrow-right-sn.svg +0 -0
  274. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/plusminus-box/tree-arrow-down-n-base.svg +0 -0
  275. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/plusminus-box/tree-arrow-down-n.svg +0 -0
  276. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/plusminus-box/tree-arrow-down-sn.svg +0 -0
  277. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/plusminus-box/tree-arrow-right-n-base.svg +0 -0
  278. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/plusminus-box/tree-arrow-right-n.svg +0 -0
  279. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/plusminus-box/tree-arrow-right-sn.svg +0 -0
  280. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/solid/tree-arrow-down-n-base.svg +0 -0
  281. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/solid/tree-arrow-down-n.svg +0 -0
  282. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/solid/tree-arrow-down-sn.svg +0 -0
  283. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/solid/tree-arrow-right-n-base.svg +0 -0
  284. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/solid/tree-arrow-right-n.svg +0 -0
  285. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/i/awthemes/treeview/solid/tree-arrow-right-sn.svg +0 -0
  286. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/TkinterTheme/awthemes-10.4.0/pkgIndex.tcl +0 -0
  287. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/UM Logo.ico +0 -0
  288. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/UnitMatchPy.egg-info/PKG-INFO +0 -0
  289. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/UnitMatchPy.egg-info/SOURCES.txt +0 -0
  290. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/UnitMatchPy.egg-info/dependency_links.txt +0 -0
  291. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/UnitMatchPy.egg-info/requires.txt +0 -0
  292. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/UnitMatchPy.egg-info/top_level.txt +0 -0
  293. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__init__.py +0 -0
  294. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/AssignUniqueID.cpython-311.pyc +0 -0
  295. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/Bayes_fun.cpython-311.pyc +0 -0
  296. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/Bayes_fun.cpython-312.pyc +0 -0
  297. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/Extract_raw_data.cpython-311.pyc +0 -0
  298. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/Extract_raw_data.cpython-312.pyc +0 -0
  299. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/GUI.cpython-311.pyc +0 -0
  300. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/GUI.cpython-312.pyc +0 -0
  301. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/Metrics_fun.cpython-311.pyc +0 -0
  302. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/Metrics_fun.cpython-312.pyc +0 -0
  303. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/Overlord.cpython-311.pyc +0 -0
  304. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/Overlord.cpython-312.pyc +0 -0
  305. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/Param_fun.cpython-311.pyc +0 -0
  306. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/Param_fun.cpython-312.pyc +0 -0
  307. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/Save_utils.cpython-311.pyc +0 -0
  308. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/Save_utils.cpython-312.pyc +0 -0
  309. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/__init__.cpython-311.pyc +0 -0
  310. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/__init__.cpython-312.pyc +0 -0
  311. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/utils.cpython-311.pyc +0 -0
  312. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/__pycache__/utils.cpython-312.pyc +0 -0
  313. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/bayes_functions.py +0 -0
  314. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy/param_functions.py +0 -0
  315. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy.egg-info/dependency_links.txt +0 -0
  316. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy.egg-info/requires.txt +0 -0
  317. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/UnitMatchPy.egg-info/top_level.txt +0 -0
  318. {UnitMatchPy-2.1 → UnitMatchPy-2.4}/setup.cfg +0 -0
@@ -0,0 +1,40 @@
1
+ Metadata-Version: 2.1
2
+ Name: UnitMatchPy
3
+ Version: 2.4
4
+ Author: Enny van Beest, Celian Bimbard and Sam Dodgson
5
+ Author-email: e.beest@ucl.ac.uk
6
+ Requires-Python: >=3.7
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+
10
+ # Unit Match - Python
11
+
12
+ ## Run UMPy
13
+
14
+ To run UMPy standard spike sorting data is needed; channel positions and 2 extracted raw waveforms for each unit. This can be calculated externally [BombCell](https://github.com/Julie-Fabre/bombcell) or using *extract_raw_demo.ipynb* to extract these waveforms from compressed data (.cbin and .ch) or raw data. There is also a [Spike Interface](https://spikeinterface.readthedocs.io/en/latest/) integrated notebook *UMPy_spike_interface_demo.ipynb* which uses spike interface to get this data.
15
+ Be careful not to mix and match the different ways of extracting raw waveforms, as there are difference between the methods.
16
+
17
+ There are to example notebooks for running UMPy *UMPy_example.ipynb* and *UMPy_example_detailed.ipynb*. These notebooks will guide you through running Unit Match all you need to supply is paths to the data. *UMPy_example.ipynb* is recommended to use first as it is simpler, however *UMPy_example_detailed.ipynb* may be useful in unique cases as it is more modular.
18
+
19
+ The GUI is a optional step to curated and investigate the information Unit Match has calculated; for efficient usage of the GUI please look at *GUI_Reference_Guide.md* in the Demo Notebooks folder.
20
+
21
+ ## Dependencies
22
+
23
+ This version relies on many core python packages: [numpy](https://numpy.org/), [scipy](https://scipy.org/), [JobLib](https://joblib.readthedocs.io/en/stable/), [pandas](https://pandas.pydata.org/), [tkinter](https://docs.python.org/3/library/tkinter.html) and [matplotlib](https://matplotlib.org/). All of these libaries come with a [Anaconda](https://www.anaconda.com/download/) version of python.
24
+ For extracting raw data, the library [mtscomp](https://github.com/int-brain-lab/mtscomp) is needed, and can be installed by `pip install mtscomp`.
25
+
26
+
27
+ ## Installation
28
+
29
+ After creating an python environment
30
+
31
+ ```
32
+ conda create --name UnitMatch python
33
+ conda activate UnitMatch
34
+ ```
35
+
36
+ You can install UnitMatchPy with pip. It will automatically install all the dependencies.
37
+
38
+ ```
39
+ pip install UnitMatchPy
40
+ ```
@@ -0,0 +1,31 @@
1
+ # Unit Match - Python
2
+
3
+ ## Run UMPy
4
+
5
+ To run UMPy standard spike sorting data is needed; channel positions and 2 extracted raw waveforms for each unit. This can be calculated externally [BombCell](https://github.com/Julie-Fabre/bombcell) or using *extract_raw_demo.ipynb* to extract these waveforms from compressed data (.cbin and .ch) or raw data. There is also a [Spike Interface](https://spikeinterface.readthedocs.io/en/latest/) integrated notebook *UMPy_spike_interface_demo.ipynb* which uses spike interface to get this data.
6
+ Be careful not to mix and match the different ways of extracting raw waveforms, as there are difference between the methods.
7
+
8
+ There are to example notebooks for running UMPy *UMPy_example.ipynb* and *UMPy_example_detailed.ipynb*. These notebooks will guide you through running Unit Match all you need to supply is paths to the data. *UMPy_example.ipynb* is recommended to use first as it is simpler, however *UMPy_example_detailed.ipynb* may be useful in unique cases as it is more modular.
9
+
10
+ The GUI is a optional step to curated and investigate the information Unit Match has calculated; for efficient usage of the GUI please look at *GUI_Reference_Guide.md* in the Demo Notebooks folder.
11
+
12
+ ## Dependencies
13
+
14
+ This version relies on many core python packages: [numpy](https://numpy.org/), [scipy](https://scipy.org/), [JobLib](https://joblib.readthedocs.io/en/stable/), [pandas](https://pandas.pydata.org/), [tkinter](https://docs.python.org/3/library/tkinter.html) and [matplotlib](https://matplotlib.org/). All of these libaries come with a [Anaconda](https://www.anaconda.com/download/) version of python.
15
+ For extracting raw data, the library [mtscomp](https://github.com/int-brain-lab/mtscomp) is needed, and can be installed by `pip install mtscomp`.
16
+
17
+
18
+ ## Installation
19
+
20
+ After creating an python environment
21
+
22
+ ```
23
+ conda create --name UnitMatch python
24
+ conda activate UnitMatch
25
+ ```
26
+
27
+ You can install UnitMatchPy with pip. It will automatically install all the dependencies.
28
+
29
+ ```
30
+ pip install UnitMatchPy
31
+ ```
@@ -55,14 +55,17 @@ def run_GUI():
55
55
  not_match = []
56
56
  root = Tk()
57
57
  # downloaded theme from https://sourceforge.net/projects/tcl-awthemes/
58
- theme_path = os.path.join(os.path.dirname(os.path.abspath(__file__)) , r'TkinterTheme\awthemes-10.4.0')
58
+ theme_path_rel = os.path.normpath(r'TkinterTheme\awthemes-10.4.0')
59
+ theme_path = os.path.join(os.path.dirname(os.path.abspath(__file__)) , theme_path_rel)
60
+
59
61
  root.tk.call('lappend', 'auto_path', theme_path)
60
62
  root.tk.call('package', 'require', 'awdark')
61
63
  s = ttk.Style(root)
62
64
  s.theme_use('awdark')
63
65
  root.title('UMPy - Manual Curation')
64
66
  #root.geometry('800x800')
65
- root.iconbitmap(os.path.join(os.path.dirname(os.path.abspath(__file__)) , r'UM Logo.ico'))
67
+ icon = PhotoImage(file = os.path.join(os.path.dirname(os.path.abspath(__file__)) , 'GUI_icon.png'))
68
+ root.iconphoto(False, icon)
66
69
  background = ttk.Frame(root)
67
70
  background.place(x=0, y=0, relwidth=1.0, relheight=1.0)
68
71
 
@@ -909,7 +912,7 @@ def add_original_ID(UnitA, UnitB):
909
912
  if original_id_label.winfo_exists():
910
913
  original_id_label.destroy()
911
914
 
912
- original_id_label = ttk.Label(root, text = f'The Original Unit IDs are:\nUnit A: {int(clus_info["original_id"][UnitA].squeeze())} Unit B: {int(clus_info["original_id"][UnitB].squeeze())}', borderwidth = 2 , relief= 'groove')
915
+ original_id_label = ttk.Label(root, text = f'The Original Unit IDs are:\nUnit A: {int(clus_info["original_ids"][UnitA].squeeze())} Unit B: {int(clus_info["original_ids"][UnitB].squeeze())}', borderwidth = 2 , relief= 'groove')
913
916
  original_id_label.grid( row = 0, column = 2, ipadx = 5, ipady = 5)
914
917
 
915
918
 
Binary file
@@ -124,7 +124,6 @@ def extract_metric_scores(extracted_wave_properties, session_switch, within_sess
124
124
  thrs_opt = mf.get_threshold(total_score, within_session, euclid_dist, param, is_first_pass = False)
125
125
  param['n_expected_matches'] = np.sum( (total_score > thrs_opt).astype(int))
126
126
  prior_match = 1 - ( param['n_expected_matches'] / len(include_these_pairs))
127
-
128
127
  thrs_opt = np.quantile(total_score[include_these_pairs_idx.astype(bool)], prior_match)
129
128
  candidate_pairs = total_score > thrs_opt
130
129
 
@@ -5,7 +5,7 @@ import numpy as np
5
5
 
6
6
  def make_match_table(scores_to_include, matches, output_prob, total_score, output_threshold, clus_info, param, UIDs = None, matches_curated = None):
7
7
  """
8
- Creates the match table showing information for every pair of units
8
+ Creates the match table showing information for every pair of units.
9
9
 
10
10
  Parameters
11
11
  ----------
@@ -46,8 +46,8 @@ def make_match_table(scores_to_include, matches, output_prob, total_score, outpu
46
46
  unit_a_list = xx.reshape(n_units*n_units)
47
47
  unit_b_list = yy.reshape(n_units*n_units)
48
48
 
49
- sessions_ids = clus_info['sessions_ids']
50
- xx, yy = np.meshgrid(sessions_ids, sessions_ids)
49
+ session_id = clus_info['session_id']
50
+ xx, yy = np.meshgrid(session_id, session_id)
51
51
  unit_a_session_list = xx.reshape(n_units*n_units) + 1 # Add one here so it counts from one not 0
52
52
  unit_b_session_list = yy.reshape(n_units*n_units) + 1
53
53
 
@@ -442,10 +442,10 @@ def save_prob_for_phy(probability, param, clus_info):
442
442
  session_output = probability[session_switch[sid]:session_switch[sid+1], session_switch[sid]:session_switch[sid+1]]
443
443
  #If Only good units where used add values know to a matrix of NaNs
444
444
  if session_switch[sid+1] - session_switch[sid] != n_units_per_session[sid]:
445
- all_good_units = clus_info['GoodUnits'][sid].squeeze().astype(int)
446
- for id, gid in enumerate(clus_info['GoodUnits'][sid].astype(int)):
445
+ all_good_units = clus_info['good_units'][sid].squeeze().astype(int)
446
+ for id, gid in enumerate(clus_info['good_units'][sid].astype(int)):
447
447
  matrix_prob[gid, all_good_units] = session_output[id,:]
448
448
  else:
449
449
  matrix_prob = session_output
450
450
 
451
- np.save(save_file_tmp, matrix_prob)
451
+ np.save(save_file_tmp, matrix_prob)
@@ -42,7 +42,7 @@ def assign_unique_id(output_prob_array, param, clus_info):
42
42
  List
43
43
  A list of arrays which gives each unit its group ID for each case
44
44
  """
45
- all_cluster_ids = clus_info['original_id'] # each units has unique ID
45
+ all_cluster_ids = clus_info['original_ids'] # each units has unique ID
46
46
 
47
47
  #create arrays for the unique ids
48
48
  unique_id_liberal = np.arange(all_cluster_ids.shape[0])
@@ -23,8 +23,7 @@ def get_default_param(param = None):
23
23
  'stepsz' : 0.01, # size of of a step in probability distributions
24
24
  'smooth_prob' : 9, # probability smoothing size
25
25
  'min_angle_dist' : 0.1, # smallest distance for and angle to be consider
26
- 'no_shanks' : 4, # No. probe shanks -default neuropixels 2
27
- 'shank_dist' : 175, # distance between shanks
26
+ 'min_new_shank_distance' : 100, #The smallest distance which separates 2 shanks
28
27
  'units_per_shank_thrs' : 15, # threshold for doing per shank drift correction
29
28
  'match_threshold' : 0.5 # probability threshold to consider as a match
30
29
  }
@@ -506,7 +506,6 @@ def drift_correction_basic(candidate_pairs, session_switch, avg_centroid, avg_wa
506
506
 
507
507
  drift = np.nanmedian( np.nanmean( avg_centroid[:, best_pairs[idx,0].squeeze(),:], axis = 2) - np.nanmean( avg_centroid[:,best_pairs[idx,1].squeeze(),:], axis = 2), axis = 1)
508
508
 
509
-
510
509
  ##need to add the drift to the location
511
510
  avg_waveform_per_tp[0,session_switch[1]:,:,:] += drift[0]
512
511
  avg_waveform_per_tp[1,session_switch[1]:,:,:] += drift[1]
@@ -547,7 +546,7 @@ def apply_drift_correction_basic(pairs, sid, session_switch, avg_centroid, avg_w
547
546
  ##need to add the drift to the location
548
547
  avg_waveform_per_tp[0,session_switch[sid+1]:session_switch[sid+2],:,:] += drift[0]
549
548
  avg_waveform_per_tp[1,session_switch[sid+1]:session_switch[sid+2],:,:] += drift[1]
550
- avg_waveform_per_tp[2,session_switch[sid+1]:session_switch[sid]+2,:,:] += drift[2]
549
+ avg_waveform_per_tp[2,session_switch[sid+1]:session_switch[sid+2],:,:] += drift[2]
551
550
 
552
551
  avg_centroid[0,session_switch[sid+1]:session_switch[sid+2],:] += drift[0]
553
552
  avg_centroid[1,session_switch[sid+1]:session_switch[sid+2],:] += drift[1]
@@ -555,7 +554,7 @@ def apply_drift_correction_basic(pairs, sid, session_switch, avg_centroid, avg_w
555
554
 
556
555
  return drift, avg_waveform_per_tp, avg_centroid
557
556
 
558
- def appply_drift_correction_per_shank(pairs, sid, session_switch, avg_centroid, avg_waveform_per_tp, param):
557
+ def apply_drift_correction_per_shank(pairs, sid, session_switch, avg_centroid, avg_waveform_per_tp, param):
559
558
  """
560
559
  This is the same as "basic" drift correction, however treats each shank separately, if there is enough units per shank
561
560
 
@@ -587,18 +586,23 @@ def appply_drift_correction_per_shank(pairs, sid, session_switch, avg_centroid,
587
586
 
588
587
  max_dist = 0
589
588
  min_dist = 0
590
- drift_per_shank = np.zeros([4,3])
589
+ drift_per_shank = np.zeros([n_shanks,3])
591
590
 
592
591
  for i in range(n_shanks):
593
- max_dist += shank_dist
592
+ max_dist += shank_dist #beginning of loop shift maximum distance
594
593
 
595
- #test to see if a centroid is within the area of that shank
594
+ #get which shank each unit is on
596
595
  correct_shank_a = np.logical_and(centroid_a[1,:] < max_dist, centroid_a[1,:] > min_dist)
597
596
  correct_shank_b = np.logical_and(centroid_b[1,:] < max_dist, centroid_b[1,:] > min_dist)
598
597
 
599
598
  if np.all(correct_shank_a == correct_shank_b) != True:
600
599
  print(f'These pairs may be bad {np.argwhere(correct_shank_a != correct_shank_b)}')
600
+ #delete pairs which are on different shanks ##sam's fix
601
+ bad_idxs = np.argwhere(correct_shank_a != correct_shank_b)
602
+ correct_shank_a = np.delete(correct_shank_a, bad_idxs)
603
+ correct_shank_b = np.delete(correct_shank_b, bad_idxs)
601
604
 
605
+
602
606
  drifts = centroid_a[:,correct_shank_a] - centroid_b[:,correct_shank_b]
603
607
  drift = np.nanmedian(drifts, axis = 1)
604
608
  drift_per_shank[i,:] = drift
@@ -694,25 +698,31 @@ def test_matches_per_shank(pairs, avg_centroid, sid, param):
694
698
  n_shanks = param['no_shanks']
695
699
  shank_dist = param['shank_dist']
696
700
 
697
- for i in range(n_shanks):
698
- max_dist += shank_dist
701
+ if n_shanks != 1:
702
+ for i in range(n_shanks):
703
+ max_dist += shank_dist
699
704
 
700
- correct_shank_a = np.logical_and(centroid_a[1,:] < max_dist, centroid_a[1,:] > min_dist)
701
- correct_shank_b = np.logical_and(centroid_b[1,:] < max_dist, centroid_b[1,:] > min_dist)
705
+ correct_shank_a = np.logical_and(centroid_a[1,:] < max_dist, centroid_a[1,:] > min_dist)
706
+ correct_shank_b = np.logical_and(centroid_b[1,:] < max_dist, centroid_b[1,:] > min_dist)
702
707
 
703
- if np.all(correct_shank_a == correct_shank_b) != True:
704
- print(f'These pairs may be bad {np.argwhere(correct_shank_a != correct_shank_b)}')
705
-
706
- shank_id_tmp[correct_shank_a] = i
708
+ if np.all(correct_shank_a == correct_shank_b) != True:
709
+ print(f'These pairs may be bad {np.argwhere(correct_shank_a != correct_shank_b)}')
710
+ #delete pairs which are one different shanks
711
+ bad_idxs = np.argwhere(correct_shank_a != correct_shank_b)
712
+ correct_shank_a = np.delete(correct_shank_a, bad_idxs)
713
+ correct_shank_b = np.delete(correct_shank_b, bad_idxs)
714
+
715
+ shank_id_tmp[correct_shank_a] = i
707
716
 
708
- min_dist += shank_dist
717
+ min_dist += shank_dist
709
718
 
710
- __, counts = np.unique(shank_id_tmp, return_counts=True)
719
+ __, counts = np.unique(shank_id_tmp, return_counts=True)
711
720
 
712
- if np.any(counts < units_per_shank_thrs):
721
+ if np.any(counts < units_per_shank_thrs):
722
+ do_per_shank_correction = False
723
+ print(f'Session pair {sid+1}/{sid+2} has {counts} matches per shank, which is below threshold to do per shank drift correction')
724
+ else:
713
725
  do_per_shank_correction = False
714
- print(f'Session pair {sid+1}/{sid+2} has {counts} matches per shank, which is below threshold to do per shank drift correction')
715
-
716
726
  return do_per_shank_correction
717
727
 
718
728
 
@@ -765,13 +775,14 @@ def drift_n_sessions(candidate_pairs, session_switch, avg_centroid, avg_waveform
765
775
 
766
776
  #Test to see if there are enough matches to do drift correction per shank
767
777
  if test_matches_per_shank(pairs, avg_centroid, did, param) == True and best_drift == True:
768
- drifts = np.zeros( (n_sessions - 1, param['no_shanks'], 3))
769
- drifts[did,:,:], avg_waveform_per_tp, avg_centroid = appply_drift_correction_per_shank(pairs, did, session_switch, avg_centroid, avg_waveform_per_tp, param)
778
+ drifts = np.zeros( (n_sessions - 1, param['no_shanks'], 3))
779
+ drifts[did,:,:], avg_waveform_per_tp, avg_centroid = apply_drift_correction_per_shank(pairs, did, session_switch, avg_centroid, avg_waveform_per_tp, param)
770
780
  print(f'Done drift correction per shank for session pair {did+1} and {did+2}')
771
- else:
781
+ elif len(pairs)>0: #if there exist pairs across sessions:
772
782
  drifts = np.zeros( (n_sessions - 1, 3))
773
783
  drifts[did,:], avg_waveform_per_tp, avg_centroid = apply_drift_correction_basic(pairs, did, session_switch, avg_centroid, avg_waveform_per_tp)
774
-
784
+ elif len(pairs)==0:
785
+ print('No pairs across sessions to perform drift correction.')
775
786
  return drifts, avg_centroid, avg_waveform_per_tp
776
787
 
777
788
 
@@ -124,19 +124,23 @@ def load_good_waveforms(wave_paths, unit_label_paths, param, good_units_only = T
124
124
 
125
125
  good_units = []
126
126
  n_units_per_session_all = []
127
+ all_units = []
127
128
 
128
129
  for i in range(len(unit_label_paths)):
129
130
  #see if bombcell unit labels
130
131
  if os.path.split(unit_label_paths[0])[1] == 'cluster_bc_unitType.tsv':
131
132
  unit_label = load_tsv(unit_label_paths[i])
132
133
  tmp_idx = np.array([s for s in unit_label if 'GOOD' in s or 'NON-SOMA GOOD' in s])[:,0].astype(np.int32)
134
+ tmp_idx = tmp_idx[:, np.newaxis] # keep the array shape consitant between different methodss
133
135
  else:
134
136
  unit_label = load_tsv(unit_label_paths[i])
135
137
  tmp_idx = np.argwhere(unit_label[:,1] == 'good')
136
138
 
139
+
137
140
  n_units_per_session_all.append(unit_label.shape[0])
138
141
  good_unit_idx = unit_label[tmp_idx, 0]
139
142
  good_units.append(good_unit_idx)
143
+ all_units.append(unit_label[:,0]) #get all the unit labels
140
144
 
141
145
  waveforms = []
142
146
  if good_units_only:
@@ -160,16 +164,17 @@ def load_good_waveforms(wave_paths, unit_label_paths, param, good_units_only = T
160
164
  else:
161
165
  for ls in range(len(wave_paths)):
162
166
  #load in the first good unit, to get the shape of each waveform
163
- p_file = os.path.join(wave_paths[ls],f'Unit{int(good_units[ls][0].squeeze())}_RawSpikes.npy')
167
+ p_file = os.path.join(wave_paths[ls],f'Unit{int(all_units[ls][0])}_RawSpikes.npy')
164
168
  tmp = np.load(p_file)
165
169
  tmp_waveform = np.zeros( (len(os.listdir(wave_paths[ls])), tmp.shape[0], tmp.shape[1], tmp.shape[2]))
166
170
 
167
171
  for i in range(len(os.listdir(wave_paths[ls]))):
168
172
  #loads in all GoodUnits for that session
169
- p_file_good = os.path.join(wave_paths[ls], f'Unit{int(good_units[ls][0].squeeze())}_RawSpikes.npy')
173
+ p_file_good = os.path.join(wave_paths[ls], f'Unit{int(all_units[ls][i])}_RawSpikes.npy')
170
174
  tmp_waveform[i] = np.load(p_file_good)
171
175
  #adds that session to the list
172
176
  waveforms.append(tmp_waveform)
177
+ print(f'UnitMatch is treating all the units as good and including all units from {wave_paths[ls]}, we recommended using curated data!')
173
178
 
174
179
  del tmp_waveform
175
180
  del tmp
@@ -228,6 +233,7 @@ def get_good_units(unit_label_paths, good = True):
228
233
  tmp_idx = np.array([s for s in unit_label if 'GOOD' in s or 'NON-SOMA GOOD' in s])[:,0].astype(np.int32)
229
234
  else:
230
235
  tmp_idx = unit_label[:,0].astype(np.int32)
236
+ tmp_idx = tmp_idx[:, np.newaxis] # keep the array shape consitant between different methodss
231
237
  else:
232
238
  unit_label = load_tsv(unit_label_paths[i])
233
239
  if good == True:
@@ -602,4 +608,50 @@ def paths_from_KS(KS_dirs):
602
608
  else:
603
609
  raise Exception('Could not find RawWaveforms folder')
604
610
 
605
- return wave_paths, unit_label_paths, channel_pos
611
+ return wave_paths, unit_label_paths, channel_pos
612
+
613
+ def get_probe_geometry(channel_pos, param, verbose = False):
614
+ """
615
+ From the channel positions, estimate the number of shanks and there spacing used to
616
+ identify a unit to a probe.
617
+ needmin_new_shank_distance from param.
618
+
619
+ Parameters
620
+ ----------
621
+ channel_pos : ndarray
622
+ The channel positions of a session
623
+ param : dict
624
+ The param dict
625
+ verbose : bool, optional
626
+ If True will print the calculated results, by default False
627
+
628
+ Returns
629
+ -------
630
+ param
631
+ The param dictionary updated with the calculated params
632
+ """
633
+ min_new_shank_distance = param['min_new_shank_distance']
634
+ x_val = np.unique(channel_pos[:,0])
635
+ x_val = np.sort(x_val) #make sure they are in ascending order
636
+ x_spacing = np.diff(x_val)
637
+ too_close = np.argwhere(x_spacing < min_new_shank_distance)
638
+
639
+ #remove when shanks are two close
640
+ x_val = np.delete(x_val, too_close + 1)
641
+
642
+ n_shanks = x_val.size
643
+ if n_shanks == 1:
644
+ shank_spacing = 100 #make it cover the full possible range
645
+ else:
646
+ shank_spacing = np.abs(np.diff(x_val))[0]
647
+
648
+ #NOTE this shank_dist is the distance within a centroid would be assigned to a shank!
649
+ shank_dist = shank_spacing * 0.9 #the area from the start which is assigned to each probe
650
+ #e.g 0 -> 0.9to shank 1, 0.9-1.8 to shank 2...
651
+ #NOTE current shank identification doesn't work for 9+ shanks
652
+
653
+ param['no_shanks'] = n_shanks
654
+ param['shank_dist'] = shank_dist
655
+ if verbose == True:
656
+ print(f'We have found {n_shanks} with spacing ~ {shank_spacing}')
657
+ return param
@@ -0,0 +1,40 @@
1
+ Metadata-Version: 2.1
2
+ Name: UnitMatchPy
3
+ Version: 2.4
4
+ Author: Enny van Beest, Celian Bimbard and Sam Dodgson
5
+ Author-email: e.beest@ucl.ac.uk
6
+ Requires-Python: >=3.7
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+
10
+ # Unit Match - Python
11
+
12
+ ## Run UMPy
13
+
14
+ To run UMPy standard spike sorting data is needed; channel positions and 2 extracted raw waveforms for each unit. This can be calculated externally [BombCell](https://github.com/Julie-Fabre/bombcell) or using *extract_raw_demo.ipynb* to extract these waveforms from compressed data (.cbin and .ch) or raw data. There is also a [Spike Interface](https://spikeinterface.readthedocs.io/en/latest/) integrated notebook *UMPy_spike_interface_demo.ipynb* which uses spike interface to get this data.
15
+ Be careful not to mix and match the different ways of extracting raw waveforms, as there are difference between the methods.
16
+
17
+ There are to example notebooks for running UMPy *UMPy_example.ipynb* and *UMPy_example_detailed.ipynb*. These notebooks will guide you through running Unit Match all you need to supply is paths to the data. *UMPy_example.ipynb* is recommended to use first as it is simpler, however *UMPy_example_detailed.ipynb* may be useful in unique cases as it is more modular.
18
+
19
+ The GUI is a optional step to curated and investigate the information Unit Match has calculated; for efficient usage of the GUI please look at *GUI_Reference_Guide.md* in the Demo Notebooks folder.
20
+
21
+ ## Dependencies
22
+
23
+ This version relies on many core python packages: [numpy](https://numpy.org/), [scipy](https://scipy.org/), [JobLib](https://joblib.readthedocs.io/en/stable/), [pandas](https://pandas.pydata.org/), [tkinter](https://docs.python.org/3/library/tkinter.html) and [matplotlib](https://matplotlib.org/). All of these libaries come with a [Anaconda](https://www.anaconda.com/download/) version of python.
24
+ For extracting raw data, the library [mtscomp](https://github.com/int-brain-lab/mtscomp) is needed, and can be installed by `pip install mtscomp`.
25
+
26
+
27
+ ## Installation
28
+
29
+ After creating an python environment
30
+
31
+ ```
32
+ conda create --name UnitMatch python
33
+ conda activate UnitMatch
34
+ ```
35
+
36
+ You can install UnitMatchPy with pip. It will automatically install all the dependencies.
37
+
38
+ ```
39
+ pip install UnitMatchPy
40
+ ```
@@ -4,6 +4,7 @@ README.md
4
4
  setup.py
5
5
  UnitMatchPy/Extract_raw_data.py
6
6
  UnitMatchPy/GUI.py
7
+ UnitMatchPy/GUI_icon.png
7
8
  UnitMatchPy/Overlord.py
8
9
  UnitMatchPy/Save_utils.py
9
10
  UnitMatchPy/UM Logo.ico
@@ -5,7 +5,7 @@ with open('README.md', 'r') as f:
5
5
 
6
6
  setup(
7
7
  name="UnitMatchPy",
8
- version="2.1",
8
+ version="2.4",
9
9
  descriptin="Description of the package",
10
10
  author="Enny van Beest, Celian Bimbard and Sam Dodgson",
11
11
  author_email="e.beest@ucl.ac.uk",
UnitMatchPy-2.1/PKG-INFO DELETED
@@ -1,38 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: UnitMatchPy
3
- Version: 2.1
4
- Author: Enny van Beest, Celian Bimbard and Sam Dodgson
5
- Author-email: e.beest@ucl.ac.uk
6
- Requires-Python: >=3.7
7
- Description-Content-Type: text/markdown
8
- License-File: LICENSE
9
-
10
- # Unit Match - Python
11
-
12
- ## Run UMPy
13
-
14
- To run UMPy standard spike sorting data is needed; channel positions and 2 extractracted raw waveforms for each unit. This can be calculated exteranlly [BombCell](https://github.com/Julie-Fabre/bombcell) or using *ExtractRawDataDemo.ipynb* to extract these waveforms from compressed data (.cbin and .ch) or raw data. There is also a [Spike Interface](https://spikeinterface.readthedocs.io/en/latest/) intergrated notebook *UMPy_spike_interface_demo.ipynb* which uses spike interface to get this data.
15
- Be careful not to mix and match the different ways of exrtacting raw waveforms, as there are difference between the methods.
16
-
17
- There are to example notebooks for running UMPy *UMPyExample.ipynb* and *UMPyExampleBrief.ipynb*. These notebooks will guide you throuh running Unit Match all you need to supply is paths to the data. *UMPyExampleBried.ipynb* is reccomened to use first as it is simpler, however *UMPyExample.ipynb* may be useful in unique cases as it is more modular.
18
-
19
- The GUI is a optional step to curated and investigate the infomation Unit Match has calculated; for efficent usage of the GUI please look at *GUI_Reference_Guide.md* in the Demo Notebooks folder.
20
- ## Dependencies
21
- This version relies on many core python packages [numpy](https://numpy.org/), [scipy](https://scipy.org/), [JobLib](https://joblib.readthedocs.io/en/stable/), [pandas](https://pandas.pydata.org/), [tkinter](https://docs.python.org/3/library/tkinter.html) and [matplotlib](https://matplotlib.org/). All of these libaries come with a [Anaconda](https://www.anaconda.com/download/) version of python.
22
- For extracting raw data the library [mtscomp](https://github.com/int-brain-lab/mtscomp) is needed, this can be installed by `pip install mtscomp`.
23
-
24
-
25
- ## Installation
26
-
27
- After creating an python environment
28
-
29
- ```
30
- conda create --name UnitMatch python
31
- conda activate UnitMatch
32
- ```
33
-
34
- You can install UnitMatchPy with pip. It will automatically install all the dependency.
35
-
36
- ```
37
- pip install UnitMatchPy
38
- ```
UnitMatchPy-2.1/README.md DELETED
@@ -1,29 +0,0 @@
1
- # Unit Match - Python
2
-
3
- ## Run UMPy
4
-
5
- To run UMPy standard spike sorting data is needed; channel positions and 2 extractracted raw waveforms for each unit. This can be calculated exteranlly [BombCell](https://github.com/Julie-Fabre/bombcell) or using *ExtractRawDataDemo.ipynb* to extract these waveforms from compressed data (.cbin and .ch) or raw data. There is also a [Spike Interface](https://spikeinterface.readthedocs.io/en/latest/) intergrated notebook *UMPy_spike_interface_demo.ipynb* which uses spike interface to get this data.
6
- Be careful not to mix and match the different ways of exrtacting raw waveforms, as there are difference between the methods.
7
-
8
- There are to example notebooks for running UMPy *UMPyExample.ipynb* and *UMPyExampleBrief.ipynb*. These notebooks will guide you throuh running Unit Match all you need to supply is paths to the data. *UMPyExampleBried.ipynb* is reccomened to use first as it is simpler, however *UMPyExample.ipynb* may be useful in unique cases as it is more modular.
9
-
10
- The GUI is a optional step to curated and investigate the infomation Unit Match has calculated; for efficent usage of the GUI please look at *GUI_Reference_Guide.md* in the Demo Notebooks folder.
11
- ## Dependencies
12
- This version relies on many core python packages [numpy](https://numpy.org/), [scipy](https://scipy.org/), [JobLib](https://joblib.readthedocs.io/en/stable/), [pandas](https://pandas.pydata.org/), [tkinter](https://docs.python.org/3/library/tkinter.html) and [matplotlib](https://matplotlib.org/). All of these libaries come with a [Anaconda](https://www.anaconda.com/download/) version of python.
13
- For extracting raw data the library [mtscomp](https://github.com/int-brain-lab/mtscomp) is needed, this can be installed by `pip install mtscomp`.
14
-
15
-
16
- ## Installation
17
-
18
- After creating an python environment
19
-
20
- ```
21
- conda create --name UnitMatch python
22
- conda activate UnitMatch
23
- ```
24
-
25
- You can install UnitMatchPy with pip. It will automatically install all the dependency.
26
-
27
- ```
28
- pip install UnitMatchPy
29
- ```
@@ -1,38 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: UnitMatchPy
3
- Version: 2.1
4
- Author: Enny van Beest, Celian Bimbard and Sam Dodgson
5
- Author-email: e.beest@ucl.ac.uk
6
- Requires-Python: >=3.7
7
- Description-Content-Type: text/markdown
8
- License-File: LICENSE
9
-
10
- # Unit Match - Python
11
-
12
- ## Run UMPy
13
-
14
- To run UMPy standard spike sorting data is needed; channel positions and 2 extractracted raw waveforms for each unit. This can be calculated exteranlly [BombCell](https://github.com/Julie-Fabre/bombcell) or using *ExtractRawDataDemo.ipynb* to extract these waveforms from compressed data (.cbin and .ch) or raw data. There is also a [Spike Interface](https://spikeinterface.readthedocs.io/en/latest/) intergrated notebook *UMPy_spike_interface_demo.ipynb* which uses spike interface to get this data.
15
- Be careful not to mix and match the different ways of exrtacting raw waveforms, as there are difference between the methods.
16
-
17
- There are to example notebooks for running UMPy *UMPyExample.ipynb* and *UMPyExampleBrief.ipynb*. These notebooks will guide you throuh running Unit Match all you need to supply is paths to the data. *UMPyExampleBried.ipynb* is reccomened to use first as it is simpler, however *UMPyExample.ipynb* may be useful in unique cases as it is more modular.
18
-
19
- The GUI is a optional step to curated and investigate the infomation Unit Match has calculated; for efficent usage of the GUI please look at *GUI_Reference_Guide.md* in the Demo Notebooks folder.
20
- ## Dependencies
21
- This version relies on many core python packages [numpy](https://numpy.org/), [scipy](https://scipy.org/), [JobLib](https://joblib.readthedocs.io/en/stable/), [pandas](https://pandas.pydata.org/), [tkinter](https://docs.python.org/3/library/tkinter.html) and [matplotlib](https://matplotlib.org/). All of these libaries come with a [Anaconda](https://www.anaconda.com/download/) version of python.
22
- For extracting raw data the library [mtscomp](https://github.com/int-brain-lab/mtscomp) is needed, this can be installed by `pip install mtscomp`.
23
-
24
-
25
- ## Installation
26
-
27
- After creating an python environment
28
-
29
- ```
30
- conda create --name UnitMatch python
31
- conda activate UnitMatch
32
- ```
33
-
34
- You can install UnitMatchPy with pip. It will automatically install all the dependency.
35
-
36
- ```
37
- pip install UnitMatchPy
38
- ```
File without changes
File without changes