py2ls 0.1.9.2__tar.gz → 0.1.9.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 (179) hide show
  1. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/PKG-INFO +1 -1
  2. py2ls-0.1.9.4/py2ls/.git/COMMIT_EDITMSG +1 -0
  3. py2ls-0.1.9.4/py2ls/.git/FETCH_HEAD +1 -0
  4. py2ls-0.1.9.4/py2ls/.git/index +0 -0
  5. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/logs/HEAD +1 -0
  6. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/logs/refs/heads/main +1 -0
  7. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/logs/refs/remotes/origin/HEAD +2 -0
  8. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/logs/refs/remotes/origin/main +1 -0
  9. py2ls-0.1.9.4/py2ls/.git/objects/12/c2808a1b3a4d0892a4154dfba1e2ae3770fa73 +0 -0
  10. py2ls-0.1.9.4/py2ls/.git/objects/1c/9314c5f69b9390068a2a8616875d974849d71f +0 -0
  11. py2ls-0.1.9.4/py2ls/.git/objects/2a/ae95d517d213b660bf4f65a4e0cfae7bb893eb +0 -0
  12. py2ls-0.1.9.4/py2ls/.git/objects/34/9e31b6a3634cea102ce5588b98c11cc1738605 +0 -0
  13. py2ls-0.1.9.4/py2ls/.git/objects/45/b1b6178bacbfc997811a998b5cc60c1ea7fac8 +0 -0
  14. py2ls-0.1.9.4/py2ls/.git/objects/57/63d0c52f5c9c69e89d514a1f96034947abe21a +0 -0
  15. py2ls-0.1.9.4/py2ls/.git/objects/59/380c4c26bdcd4d9b71ae3e2e35f05b3f26c5ab +0 -0
  16. py2ls-0.1.9.4/py2ls/.git/objects/66/6227eeeba24073e63811e89f1449f3d958f183 +0 -0
  17. py2ls-0.1.9.4/py2ls/.git/objects/66/c998778721d424bd0aae80602dabbffa93af2e +0 -0
  18. py2ls-0.1.9.4/py2ls/.git/objects/6d/c2cdf4a84e538e5d4777486aeff87e42f41799 +2 -0
  19. py2ls-0.1.9.4/py2ls/.git/objects/72/245a05b0966011cb381e6b32b0465000e969ab +0 -0
  20. py2ls-0.1.9.4/py2ls/.git/objects/72/e4179337639859678ddaecf38b16f33aaec8e1 +0 -0
  21. py2ls-0.1.9.4/py2ls/.git/objects/a1/906da89d1174f74867800c74c43af36253bd5e +0 -0
  22. py2ls-0.1.9.4/py2ls/.git/objects/d2/992df305f4b56a466a2f221aeb182ddd20f418 +0 -0
  23. py2ls-0.1.9.4/py2ls/.git/objects/dc/c2bdbafb3296e09d9ee4955cfa55d275825f94 +5 -0
  24. py2ls-0.1.9.4/py2ls/.git/objects/dc/cdbd4266765d840be2ae35ab1752a0fa312c16 +0 -0
  25. py2ls-0.1.9.4/py2ls/.git/objects/e2/f2f8f4c25e62a297fc55f36acc6b01cfbab76f +3 -0
  26. py2ls-0.1.9.4/py2ls/.git/objects/ea/3a18cc75e53792744ef754e05d3f4481768c13 +0 -0
  27. py2ls-0.1.9.4/py2ls/.git/objects/ec/40fd8bf8e4c342534a9fc020289e402ba6bc9d +0 -0
  28. py2ls-0.1.9.4/py2ls/.git/objects/f4/ba7f815b886797b73fede071d86e0c134d2bc7 +0 -0
  29. py2ls-0.1.9.4/py2ls/.git/objects/f6/44a8ff56fa035105fc517cbb1ac46c3d8e349a +0 -0
  30. py2ls-0.1.9.4/py2ls/.git/refs/heads/main +1 -0
  31. py2ls-0.1.9.4/py2ls/.git/refs/remotes/origin/main +1 -0
  32. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/netfinder.py +0 -8
  33. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/plot.py +188 -45
  34. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/stats.py +118 -97
  35. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/pyproject.toml +1 -1
  36. py2ls-0.1.9.2/py2ls/.git/COMMIT_EDITMSG +0 -1
  37. py2ls-0.1.9.2/py2ls/.git/FETCH_HEAD +0 -1
  38. py2ls-0.1.9.2/py2ls/.git/index +0 -0
  39. py2ls-0.1.9.2/py2ls/.git/refs/heads/main +0 -1
  40. py2ls-0.1.9.2/py2ls/.git/refs/remotes/origin/main +0 -1
  41. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/README.md +0 -0
  42. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.DS_Store +0 -0
  43. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/HEAD +0 -0
  44. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/config +0 -0
  45. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/description +0 -0
  46. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/applypatch-msg.sample +0 -0
  47. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/commit-msg.sample +0 -0
  48. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/fsmonitor-watchman.sample +0 -0
  49. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/post-update.sample +0 -0
  50. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/pre-applypatch.sample +0 -0
  51. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/pre-commit.sample +0 -0
  52. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/pre-merge-commit.sample +0 -0
  53. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/pre-push.sample +0 -0
  54. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/pre-rebase.sample +0 -0
  55. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/pre-receive.sample +0 -0
  56. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/prepare-commit-msg.sample +0 -0
  57. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/push-to-checkout.sample +0 -0
  58. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/hooks/update.sample +0 -0
  59. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/info/exclude +0 -0
  60. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1 +0 -0
  61. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34 +0 -0
  62. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/0b/409e1bc918277010f5679b402d1d1dda53e15c +0 -0
  63. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/14/449a0e6ba4ea2f1a73acf63ef91c9c6193f9ed +0 -0
  64. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/15/a8e468aacfcb440e090020f36d0b985d45da23 +0 -0
  65. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/1a/b4585881a6a42889f01aa0cfe25fd5acfaf46f +0 -0
  66. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8 +0 -0
  67. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/1d/fe9d9633b24ea560354f4f93d39c6e5f163ea0 +0 -0
  68. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/20/72c28e83f4347959d29f7b3a6c1fc3e4ee6b59 +0 -0
  69. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/24/6b368b986f758630c46dc02b7fa512b53422f7 +0 -0
  70. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46 +0 -0
  71. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/30/a2f8da47ee947811dc8d993f5a06a45de374f4 +0 -0
  72. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad +0 -0
  73. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971 +0 -0
  74. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/36/e56a361f526eafa59c5235a5c990bf288b5f9c +0 -0
  75. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/36/ef43e50009e59db11812c258846d9e38718173 +0 -0
  76. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/39/7ead045fbbcfb17c62019eb18fe21ed05dbee5 +0 -0
  77. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/3b/bd972aa7ad680858f8dfbd0f7fcd97756f0d6f +0 -0
  78. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/3c/bbe5f4173d165127b9ad96119f1ec24c306ffc +0 -0
  79. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9 +0 -0
  80. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/41/dcf4b3bf0460946b2da93776cf9e836d62178f +0 -0
  81. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/43/dbd49b2ee367c5434dd545e3b5795434f2ef0b +0 -0
  82. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/48/a88fc5806305d0bb0755ee6801161b79696972 +0 -0
  83. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042 +0 -0
  84. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6 +0 -0
  85. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/53/e0deb1cb4c2c606bced6e7f9a66b0fda60980d +0 -0
  86. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/56/e4e8b2d5545e0256090f45aa8fc42c5fe067d0 +0 -0
  87. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/57/bd1c0199483ab316235b094543b85edec6c35e +0 -0
  88. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2 +0 -0
  89. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/5a/192565abf89c9d765af846ce6d53a92b1ce7ad +0 -0
  90. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a +0 -0
  91. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99 +0 -0
  92. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/62/4488173ed2c8936fa5cea3cf5dd3f26a30b86e +0 -0
  93. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/62/7c81b23b4e56e87b042b650b0103653cc9e34a +0 -0
  94. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/62/d90ccf8cbefdc2e4fd475e7c6f4f76e9fdf801 +0 -0
  95. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/63/100154b27846e8010e55b6bf4b3d7762c14c5f +0 -0
  96. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/64/27a4edff08f93d98f511418423f09f2ab90bcd +0 -0
  97. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/68/6df3072c8b025fb18106ed2df505994ad062a9 +0 -0
  98. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/69/13c452ca319f7cbf6a0836dc10a5bb033c84e4 +0 -0
  99. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/6a/52e747a2b349b128d1490d9e896d2323818eb7 +0 -0
  100. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/6b/7fde264d93a7a0986d394c46c7650d0ce2ab92 +0 -0
  101. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/6c/cebb29b7f3f5b0c889f6dadbf9ff066554587d +0 -0
  102. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/6d/ee29dbdcc84edeeacede105110446f3ccac963 +0 -0
  103. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/71/36b2074a2754be8b58127d82250e5b37e3c373 +0 -0
  104. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/78/3d4167bc95c9d2175e0df03ef1c1c880ba75ab +0 -0
  105. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/79/7ae089b2212a937840e215276005ce76881307 +0 -0
  106. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/7e/5956c806b5edc344d46dab599dec337891ba1f +0 -0
  107. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/81/8f26b7bf042269729020cf944fc362d66ba27e +0 -0
  108. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/84/59071b722a255b774a80b27746033f8141ab39 +0 -0
  109. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/87/ef1fc3f7f1ddc4d0ab9b3e65381ce9f3388621 +0 -0
  110. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/8b/84f56978e1de8f2ae82abce5f8b3e182d365cd +0 -0
  111. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/8e/55a7d2b96184030211f20c9b9af201eefcac82 +0 -0
  112. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/91/c69ad88fe0ba94aa7859fb5f7edac5e6f1a3f7 +0 -0
  113. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/94/74152b4b463d70ae5ad07f0c658be3e296026b +0 -0
  114. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/97/1aef09ea939f46b60b9646f8d524c78a9220f4 +0 -0
  115. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/9d/0df52899fe95279059286d9c0ec42287edc168 +0 -0
  116. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/a1/5389729850729fc7bd78a54f26fce77f30be12 +0 -0
  117. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/a4/63fdd23e5efd713db8a71f316f3a1c7bd60916 +0 -0
  118. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/a5/ec8f74642fbba27f7ea78c53b372ae0c7dedce +0 -0
  119. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/a7/3e13eafee65c5b8d73ad2d3ea46d0eee82f0d3 +0 -0
  120. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/b0/56be4be89ba6b76949dd641df45bb7036050c8 +0 -0
  121. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/b0/9cd7856d58590578ee1a4f3ad45d1310a97f87 +0 -0
  122. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/b2/18e6a0f0f1c4df8cdefa9852058348abc713b7 +0 -0
  123. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/b5/61831c7dce8ea51e7ee6b6fa35745f14d8242d +0 -0
  124. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/b7/2c9e75ab7d0afe594664650aa8f6c772f5ac64 +0 -0
  125. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/bb/81ccc0513f18fc160b54a82861e9a80d23f4f6 +0 -0
  126. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/bb/934eb33bc1a8b85630bf680caffd99560c1b8f +0 -0
  127. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/bf/67907e337021ebff434e02b19b30a741c144af +0 -0
  128. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/c1/20fc812b9ad311c34a3608512d6a9d976bb48e +0 -0
  129. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/c4/cba65f1163661999ee4b8ed23342b63bc1300c +0 -0
  130. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/c6/7f17e5707313600efcb85e9a3fedea35dba591 +0 -0
  131. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/c6/f32aced880bd165a251cb52b26b0c1107e2141 +0 -0
  132. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/cd/822b3574a88ebdd1ed82fd6983f37e626d52b4 +0 -0
  133. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/cf/0c0d9c6fb09473aaeb7f7e2edbd770c3f2ef3d +0 -0
  134. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/d6/9ab1c4aadf279936dd778e8346ba60f74705b6 +0 -0
  135. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/d8/4688b54c0040a30976b3a6540bc47adf7ce680 +0 -0
  136. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/d9/005f2cc7fc4e65f14ed5518276007c08cf2fd0 +0 -0
  137. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/d9/c2403fd166ce791b4e9d0c6792ed8342c71fcd +0 -0
  138. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/d9/dfa5aee51e92a541b707e8e7baea6f06deff98 +0 -0
  139. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/db/141dbaa93594df2a8156182f361ee4db829359 +0 -0
  140. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/db/ffa8ea7bda721d0cee7b9e4ce5b2ef927733ff +0 -0
  141. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/dd/87fb5f606fe380d81e6fe3a2c98f9f99e3e09b +0 -0
  142. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/df/e0770424b2a19faf507a501ebfc23be8f54e7b +0 -0
  143. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/e3/1356f90ea6dd0577b5e0b40b206319adcbf085 +0 -0
  144. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/e3/5a4dafc50850cacac7bf76c56db2715cbda2c4 +0 -0
  145. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/e9/391ffe371f1cc43b42ef09b705d9c767c2e14f +0 -0
  146. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/f1/e50757fddc28b445545dc7e2759b54cdd0f42e +0 -0
  147. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/f4/b64d3107b39e3ad6f540c6607004ea34e6c024 +0 -0
  148. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/f7/c98ba5c2f903e603b1f5e63d49fbc8a43815cc +0 -0
  149. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/f9/045a08e96eb76848fc4d68e3e3e687cca39a2d +0 -0
  150. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/fa/147e6bb78a2e8db241d231295fd7f1ed061af8 +0 -0
  151. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/objects/fc/292e793ecfd42240ac43be407023bd731fa9e7 +0 -0
  152. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.git/refs/remotes/origin/HEAD +0 -0
  153. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.gitattributes +0 -0
  154. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/.gitignore +0 -0
  155. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/LICENSE +0 -0
  156. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/README.md +0 -0
  157. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/__init__.py +0 -0
  158. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/brain_atlas.py +0 -0
  159. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/chat.py +0 -0
  160. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/correlators.py +0 -0
  161. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/data/.DS_Store +0 -0
  162. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/data/db2ls_sql_chtsht.json +0 -0
  163. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/data/docs_links.json +0 -0
  164. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/data/lang_code_iso639.json +0 -0
  165. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/data/styles/style1.json +0 -0
  166. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/data/styles/style2.json +0 -0
  167. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/data/styles/style3.json +0 -0
  168. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/data/styles/style4.json +0 -0
  169. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/data/styles/style5.json +0 -0
  170. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/data/styles/style6.json +0 -0
  171. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/db2ls.py +0 -0
  172. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/doc.py +0 -0
  173. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/export_requirements.py +0 -0
  174. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/freqanalysis.py +0 -0
  175. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/ips.py +0 -0
  176. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/setuptools-70.1.0-py3-none-any.whl +0 -0
  177. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/sleep_events_detectors.py +0 -0
  178. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/translator.py +0 -0
  179. {py2ls-0.1.9.2 → py2ls-0.1.9.4}/py2ls/wb_detector.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: py2ls
3
- Version: 0.1.9.2
3
+ Version: 0.1.9.4
4
4
  Summary: py(thon)2(too)ls
5
5
  Author: Jianfeng
6
6
  Author-email: Jianfeng.Liu0413@gmail.com
@@ -0,0 +1 @@
1
+ update
@@ -0,0 +1 @@
1
+ 6dc2cdf4a84e538e5d4777486aeff87e42f41799 branch 'main' of https://github.com/Jianfengliu0413/py2ls
Binary file
@@ -18,3 +18,4 @@ d84688b54c0040a30976b3a6540bc47adf7ce680 32fd627b62fad7cf3b2f9e34ab9777126a0987a
18
18
  32fd627b62fad7cf3b2f9e34ab9777126a0987ad 1c3f92adda34344bcbbbf9d409c79855ae2aaea8 Jianfeng <Jianfeng.Liu0413@gmail.com> 1720709655 +0200 commit: Delete dbhandler.py
19
19
  1c3f92adda34344bcbbbf9d409c79855ae2aaea8 bf67907e337021ebff434e02b19b30a741c144af Jianfeng <Jianfeng.Liu0413@gmail.com> 1720948339 +0200 commit: update
20
20
  bf67907e337021ebff434e02b19b30a741c144af a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng <Jianfeng.Liu0413@gmail.com> 1721137352 +0200 commit: update ips
21
+ a15389729850729fc7bd78a54f26fce77f30be12 6dc2cdf4a84e538e5d4777486aeff87e42f41799 Jianfeng <Jianfeng.Liu0413@gmail.com> 1723527985 +0200 commit: update
@@ -18,3 +18,4 @@ d84688b54c0040a30976b3a6540bc47adf7ce680 32fd627b62fad7cf3b2f9e34ab9777126a0987a
18
18
  32fd627b62fad7cf3b2f9e34ab9777126a0987ad 1c3f92adda34344bcbbbf9d409c79855ae2aaea8 Jianfeng <Jianfeng.Liu0413@gmail.com> 1720709655 +0200 commit: Delete dbhandler.py
19
19
  1c3f92adda34344bcbbbf9d409c79855ae2aaea8 bf67907e337021ebff434e02b19b30a741c144af Jianfeng <Jianfeng.Liu0413@gmail.com> 1720948339 +0200 commit: update
20
20
  bf67907e337021ebff434e02b19b30a741c144af a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng <Jianfeng.Liu0413@gmail.com> 1721137352 +0200 commit: update ips
21
+ a15389729850729fc7bd78a54f26fce77f30be12 6dc2cdf4a84e538e5d4777486aeff87e42f41799 Jianfeng <Jianfeng.Liu0413@gmail.com> 1723527985 +0200 commit: update
@@ -135,3 +135,5 @@ a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be1
135
135
  a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng Liu <macjianfeng@JFLMBP.cin.medizin.uni-tuebingen.de> 1721322143 +0200 remote set-head
136
136
  a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng Liu <macjianfeng@JFLMBP.cin.medizin.uni-tuebingen.de> 1721324108 +0200 remote set-head
137
137
  a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng Liu <macjianfeng@JFLMBP.cin.medizin.uni-tuebingen.de> 1721326072 +0200 remote set-head
138
+ a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng Liu <macjianfeng@jflmbp.speedport.ip> 1723527981 +0200 remote set-head
139
+ 6dc2cdf4a84e538e5d4777486aeff87e42f41799 6dc2cdf4a84e538e5d4777486aeff87e42f41799 Jianfeng Liu <macjianfeng@jflmbp.speedport.ip> 1723527990 +0200 remote set-head
@@ -17,3 +17,4 @@ d84688b54c0040a30976b3a6540bc47adf7ce680 32fd627b62fad7cf3b2f9e34ab9777126a0987a
17
17
  32fd627b62fad7cf3b2f9e34ab9777126a0987ad 1c3f92adda34344bcbbbf9d409c79855ae2aaea8 Jianfeng <Jianfeng.Liu0413@gmail.com> 1720709657 +0200 update by push
18
18
  1c3f92adda34344bcbbbf9d409c79855ae2aaea8 bf67907e337021ebff434e02b19b30a741c144af Jianfeng <Jianfeng.Liu0413@gmail.com> 1720948342 +0200 update by push
19
19
  bf67907e337021ebff434e02b19b30a741c144af a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng <Jianfeng.Liu0413@gmail.com> 1721137354 +0200 update by push
20
+ a15389729850729fc7bd78a54f26fce77f30be12 6dc2cdf4a84e538e5d4777486aeff87e42f41799 Jianfeng <Jianfeng.Liu0413@gmail.com> 1723527989 +0200 update by push
@@ -0,0 +1,2 @@
1
+ x��M
2
+ � F��� AǟQ(���KLtL���`�_7�@7��x|ik�v /�`���*9(.��#�����K���h�fMb���.I;"B N�- 猁�-�Kb�b������Yi-�.����UOe�y,��gJ[�K�`��ʫ�İ�f���3u_ �FS
@@ -0,0 +1,5 @@
1
+ x�VQo�6 �s~ᢐ��Ρ�^�y����ð= ��pl:QkK�$7���������Ö�ؔD�#�}��;���dg���ݪ������e�0ڧ��������B�&��ժ������wqcJȣ���[we� Kՠگ�����z/��߭͋?hEw�[G)9�ھ�|S�F�-+m���/����K)4����
2
+ ��=*�J`Η���iA#[ZW5TZ=!����~��� �hPը*�.[�
3
+ +(4Jv�}�d�:N�K2�trB�9�J��J�����Y?���|#��d*=v@�B�w�@��'���Y82��x��̄�d�lE�ݼ����"i��z�ַ��Q
4
+ ���<"�������@��|±�?��.��R��m�.m�ax���l�M�QEC9��Sܐŧ"~��9E�iTe�!窷��S�':fJ�d^���?n����:f"L݂{4M��o��/^�!�2B
5
+ �?�짲m��0�{k��D��)�D԰��Ю���t�K��# �v�8g ��WA~�m��r�ڰ��1i�E���<nd����}���Ae��W�#�Iǩ�b
@@ -0,0 +1,3 @@
1
+ xe��
2
+ �0 D;�+�
3
+ �� ����Y����@���x�q7�q{�/)���J�2be��uT[����d������<0~��I{���L�#�.�Z�8��<V�y�������:k
@@ -0,0 +1 @@
1
+ 6dc2cdf4a84e538e5d4777486aeff87e42f41799
@@ -0,0 +1 @@
1
+ 6dc2cdf4a84e538e5d4777486aeff87e42f41799
@@ -126,10 +126,8 @@ def extract_text_from_content(
126
126
  search_kwargs["class"] = what
127
127
  if "attrs" in kwargs:
128
128
  result_set = content.find_all(where, **search_kwargs)
129
- print(f"attrs =>{search_kwargs}")
130
129
  else:
131
130
  result_set = content.find_all(where, attrs=dict(**search_kwargs))
132
- print(f"{search_kwargs}")
133
131
 
134
132
  if not result_set:
135
133
  print("Failed: check the 'attrs' setting: attrs={'id':'xample'}")
@@ -594,7 +592,6 @@ def downloader(
594
592
  kind[i] = "." + kind[i]
595
593
  file_links_all = []
596
594
  for kind_ in kind:
597
- print(kind_)
598
595
  if isinstance(contains, str):
599
596
  contains = [contains]
600
597
  if isinstance(url, str):
@@ -709,7 +706,6 @@ def find_img(url, driver="request", dir_save="images", rm_folder=False, verbose=
709
706
  if rm_folder:
710
707
  ips.rm_folder(dir_save)
711
708
  content_type, content = fetch_all(url, driver=driver)
712
- print(content_type)
713
709
  if "html" in content_type.lower():
714
710
  # Create the directory if it doesn't exist
715
711
  os.makedirs(dir_save, exist_ok=True)
@@ -913,7 +909,6 @@ def fetch(
913
909
  output="text",
914
910
  **kws,
915
911
  ):
916
- print(f"output is {output}")
917
912
  if "xt" in output.lower():
918
913
  for attempt in range(retry):
919
914
  if verbose and attempt == 0:
@@ -973,7 +968,6 @@ def fetch(
973
968
  try:
974
969
  content_type, content = fetch_all(url, parser="html.parser", driver=driver)
975
970
  search_kwargs = {**kws}
976
- print(search_kwargs)
977
971
  if "class_" in search_kwargs:
978
972
  search_kwargs["class"] = search_kwargs["class_"]
979
973
  del search_kwargs["class_"]
@@ -981,10 +975,8 @@ def fetch(
981
975
  search_kwargs["class"] = what
982
976
  if "attrs" in kws:
983
977
  result_set = content.find_all(where, **search_kwargs)
984
- print(f"attrs =>{search_kwargs}")
985
978
  else:
986
979
  result_set = content.find_all(where, attrs=dict(**search_kwargs))
987
- print(f"{search_kwargs}")
988
980
  return result_set
989
981
  except:
990
982
  print("got nothing")
@@ -467,9 +467,12 @@ def catplot(data, *args, **kwargs):
467
467
  # custom_order = ['s', 'bx', 'e']
468
468
  # full_order = sort_catplot_layers(custom_order)
469
469
 
470
+ ax = kwargs.get("ax", None)
470
471
  col = kwargs.get("col", None)
471
472
  if not col:
472
- # figsets
473
+ if "ax" not in locals() or ax is None:
474
+ ax = plt.gca()
475
+
473
476
  kw_figsets = kwargs.get("figsets", None)
474
477
  # check the data type
475
478
  if isinstance(data, pd.DataFrame):
@@ -478,6 +481,7 @@ def catplot(data, *args, **kwargs):
478
481
  y = kwargs.get("y", None)
479
482
  hue = kwargs.get("hue", None)
480
483
  data = df2array(data=data, x=x, y=y, hue=hue)
484
+ y_max_loc = np.max(data, axis=0)
481
485
  xticklabels = []
482
486
  if hue is not None:
483
487
  # for i in df[x].unique().tolist():
@@ -496,8 +500,9 @@ def catplot(data, *args, **kwargs):
496
500
  # ! stats info
497
501
  stats_param = kwargs.get("stats", False)
498
502
  res = pd.DataFrame() # Initialize an empty DataFrame to store results
503
+ ihue = 1
499
504
  for i in df[x].unique().tolist():
500
- print(i)
505
+ print(i) # to indicate which 'x'
501
506
  if hue and stats_param:
502
507
  if isinstance(stats_param, dict):
503
508
  if "factor" in stats_param.keys():
@@ -507,15 +512,17 @@ def catplot(data, *args, **kwargs):
507
512
  data=df[df[x] == i], dv=y, factor=hue, **stats_param
508
513
  )
509
514
  elif bool(stats_param):
510
- res_tmp = FuncMultiCmpt(data=df, dv=y, factor=hue)
515
+ res_tmp = FuncMultiCmpt(
516
+ data=df[df[x] == i], dv=y, factor=hue
517
+ )
511
518
  else:
512
519
  res_tmp = "did not work properly"
513
520
  display_output(res_tmp)
514
- res_tmp = [{"x": i, **res_tmp}]
515
521
  res = pd.concat(
516
- [res, pd.DataFrame([res_tmp])], ignore_index=True
522
+ [res, pd.DataFrame([res_tmp])], ignore_index=True, axis=0
517
523
  )
518
- display_output(res)
524
+ ihue += 1
525
+
519
526
  else:
520
527
  # ! stats info
521
528
  stats_param = kwargs.get("stats", False)
@@ -529,9 +536,22 @@ def catplot(data, *args, **kwargs):
529
536
  res = None
530
537
  if x and stats_param:
531
538
  if isinstance(stats_param, dict):
532
- res = FuncMultiCmpt(data=df, dv=y, factor=x, **stats_param)
539
+ if len(xticklabels) > 2:
540
+ res = FuncMultiCmpt(data=df, dv=y, factor=x, **stats_param)
541
+ else:
542
+ res = FuncCmpt(
543
+ x1=df.loc[df[x] == xticklabels[0], y].tolist(),
544
+ x2=df.loc[df[x] == xticklabels[1], y].tolist(),
545
+ **stats_param,
546
+ )
533
547
  elif bool(stats_param):
534
- res = FuncMultiCmpt(data=df, dv=y, factor=x)
548
+ if len(xticklabels) > 2:
549
+ res = FuncMultiCmpt(data=df, dv=y, factor=x)
550
+ else:
551
+ res = FuncCmpt(
552
+ x1=df.loc[df[x] == xticklabels[0], y].tolist(),
553
+ x2=df.loc[df[x] == xticklabels[1], y].tolist(),
554
+ )
535
555
  else:
536
556
  res = "did not work properly"
537
557
  display_output(res)
@@ -556,11 +576,28 @@ def catplot(data, *args, **kwargs):
556
576
  "xangle": xangle,
557
577
  }
558
578
  else:
559
- xticks = np.arange(1, data.shape[1] + 1).tolist()
579
+ if isinstance(data, np.ndarray):
580
+ df = array2df(data)
581
+ x = "group"
582
+ y = "value"
583
+ xticklabels = []
584
+ stats_param = kwargs.get("stats", False)
585
+ for i in df[x].unique().tolist():
586
+ xticklabels.append(i)
587
+ xticks = np.arange(1, len(xticklabels) + 1).tolist()
588
+ xticks_x_loc = np.arange(1, len(xticklabels) + 1).tolist()
589
+ legend_hue = xticklabels
590
+ default_colors = get_color(len(xticklabels))
560
591
  default_x_width = 0.5
561
- default_colors = get_color(len(xticks))
562
- legend_hue = None
563
- xangle = 0
592
+ res = None
593
+ if x and stats_param:
594
+ if isinstance(stats_param, dict):
595
+ res = FuncMultiCmpt(data=df, dv=y, factor=x, **stats_param)
596
+ elif bool(stats_param):
597
+ res = FuncMultiCmpt(data=df, dv=y, factor=x)
598
+ else:
599
+ res = "did not work properly"
600
+ display_output(res)
564
601
 
565
602
  # full_order
566
603
  opt = kwargs.get("opt", {})
@@ -580,15 +617,13 @@ def catplot(data, *args, **kwargs):
580
617
  opt.update(style_load)
581
618
  except:
582
619
  print(f"cannot find the style'{style_name}'")
583
- ax = kwargs.get("ax", None)
584
- if "ax" not in locals() or ax is None:
585
- ax = plt.gca()
586
- opt.setdefault("c", default_colors)
587
- # if len(opt["c"]) < data.shape[1]:
588
- # additional_colors = plt.cm.winter(
589
- # np.linspace(0, 1, data.shape[1] - len(opt["c"]))
590
- # )
591
- # opt["c"] = np.vstack([opt["c"], additional_colors[:, :3]])
620
+
621
+ color_custom = kwargs.get("c", default_colors)
622
+ if not isinstance(color_custom, list):
623
+ color_custom = list(color_custom)
624
+ # if len(color_custom) < data.shape[1]:
625
+ # color_custom.extend(get_color(data.shape[1]-len(color_custom),cmap='tab20'))
626
+ opt.setdefault("c", color_custom)
592
627
 
593
628
  opt.setdefault("loc", {})
594
629
  opt["loc"].setdefault("go", 0)
@@ -597,15 +632,12 @@ def catplot(data, *args, **kwargs):
597
632
  # export setting
598
633
  opt.setdefault("style", {})
599
634
  opt["style"].setdefault("export", None)
600
- print(opt["style"])
601
-
602
- # opt.setdefault('layer', {})
603
635
  opt.setdefault("layer", ["b", "bx", "e", "v", "s", "l"])
604
636
 
605
637
  opt.setdefault("b", {})
606
638
  opt["b"].setdefault("go", 1)
607
639
  opt["b"].setdefault("loc", "c")
608
- opt["b"].setdefault("FaceColor", opt["c"])
640
+ opt["b"].setdefault("FaceColor", color_custom)
609
641
  opt["b"].setdefault("FaceAlpha", 1)
610
642
  opt["b"].setdefault("EdgeColor", "k")
611
643
  opt["b"].setdefault("EdgeAlpha", 1)
@@ -626,7 +658,7 @@ def catplot(data, *args, **kwargs):
626
658
  opt["e"].setdefault("LineColor", "k")
627
659
  opt["e"].setdefault("LineJoin", "round")
628
660
  opt["e"].setdefault("MarkerSize", "auto")
629
- opt["e"].setdefault("FaceColor", opt["c"])
661
+ opt["e"].setdefault("FaceColor", color_custom)
630
662
  opt["e"].setdefault("MarkerEdgeColor", "none")
631
663
  opt["e"].setdefault("Visible", True)
632
664
  opt["e"].setdefault("Orientation", "vertical")
@@ -656,7 +688,7 @@ def catplot(data, *args, **kwargs):
656
688
  opt.setdefault("bx", {})
657
689
  opt["bx"].setdefault("go", 0)
658
690
  opt["bx"].setdefault("loc", "r")
659
- opt["bx"].setdefault("FaceColor", opt["c"])
691
+ opt["bx"].setdefault("FaceColor", color_custom)
660
692
  opt["bx"].setdefault("EdgeColor", "k")
661
693
  opt["bx"].setdefault("FaceAlpha", 0.85)
662
694
  opt["bx"].setdefault("EdgeAlpha", 1)
@@ -700,7 +732,7 @@ def catplot(data, *args, **kwargs):
700
732
  opt["v"].setdefault("x_width", 0.3)
701
733
  opt["v"].setdefault("loc", "r")
702
734
  opt["v"].setdefault("EdgeColor", "none")
703
- opt["v"].setdefault("FaceColor", opt["c"])
735
+ opt["v"].setdefault("FaceColor", color_custom)
704
736
  opt["v"].setdefault("FaceAlpha", 0.3)
705
737
  opt["v"].setdefault("BandWidth", "scott")
706
738
  opt["v"].setdefault("Function", "pdf")
@@ -723,17 +755,18 @@ def catplot(data, *args, **kwargs):
723
755
  xloc = opt["loc"]["xloc"]
724
756
  layers = sort_catplot_layers(opt["layer"])
725
757
 
726
- label_which = kwargs.get("label_which", "barplot")
727
- if "b" in label_which:
728
- legend_which = "b"
729
- elif "s" in label_which:
730
- legend_which = "s"
731
- elif "bx" in label_which:
732
- legend_which = "bx"
733
- elif "e" in label_which:
734
- legend_which = "e"
735
- elif "v" in label_which:
736
- legend_which = "v"
758
+ label = kwargs.get("label", "bar")
759
+ if label:
760
+ if "b" in label:
761
+ legend_which = "b"
762
+ elif "s" in label:
763
+ legend_which = "s"
764
+ elif "bx" in label:
765
+ legend_which = "bx"
766
+ elif "e" in label:
767
+ legend_which = "e"
768
+ elif "v" in label:
769
+ legend_which = "v"
737
770
  else:
738
771
  legend_which = None
739
772
  for layer in layers:
@@ -770,6 +803,63 @@ def catplot(data, *args, **kwargs):
770
803
  show_legend = kwargs.get("show_legend", True)
771
804
  if show_legend:
772
805
  ax.legend()
806
+ # ! add asterisks in the plot
807
+ if stats_param:
808
+ if len(xticklabels) >= 1:
809
+ if hue is None:
810
+ add_asterisks(
811
+ ax, res, xticks_x_loc, xticklabels, y_loc=np.max(data)
812
+ )
813
+ else: # hue is not None
814
+ ihue = 1
815
+ for i in df[x].unique().tolist():
816
+ if stats_param:
817
+ if isinstance(stats_param, dict):
818
+ if "factor" in stats_param.keys():
819
+ res_tmp = FuncMultiCmpt(
820
+ data=df, dv=y, **stats_param
821
+ )
822
+ else:
823
+ res_tmp = FuncMultiCmpt(
824
+ data=df[df[x] == i],
825
+ dv=y,
826
+ factor=hue,
827
+ **stats_param,
828
+ )
829
+ elif bool(stats_param):
830
+ res_tmp = FuncMultiCmpt(
831
+ data=df[df[x] == i], dv=y, factor=hue
832
+ )
833
+ else:
834
+ res_tmp = "did not work properly"
835
+ xloc_curr = hue_len * (ihue - 1)
836
+
837
+ add_asterisks(
838
+ ax,
839
+ res_tmp,
840
+ xticks[xloc_curr : xloc_curr + hue_len],
841
+ legend_hue,
842
+ y_loc=np.max(data),
843
+ )
844
+ ihue += 1
845
+ else: # 240814: still has some bugs
846
+ if isinstance(res, dict):
847
+ tab_res = pd.DataFrame(res[1], index=[0])
848
+ x1 = df.loc[df[x] == xticklabels[0], y].tolist()
849
+ x2 = df.loc[df[x] == xticklabels[1], y].tolist()
850
+ tab_res[f"{xticklabels[0]}(mean±sem)"] = [str_mean_sem(x1)]
851
+ tab_res[f"{xticklabels[1]}(mean±sem)"] = [str_mean_sem(x2)]
852
+ add_asterisks(
853
+ ax, res[1], xticks_x_loc, xticklabels, y_loc=np.max([x1, x2])
854
+ )
855
+ elif isinstance(res, pd.DataFrame):
856
+ display(res)
857
+ print("still has some bugs")
858
+ x1 = df.loc[df[x] == xticklabels[0], y].tolist()
859
+ x2 = df.loc[df[x] == xticklabels[1], y].tolist()
860
+ add_asterisks(
861
+ ax, res, xticks_x_loc, xticklabels, y_loc=np.max([x1, x2])
862
+ )
773
863
 
774
864
  style_export = kwargs.get("style_export", None)
775
865
  if style_export and (style_export != style_use):
@@ -806,6 +896,11 @@ def get_cmap():
806
896
 
807
897
 
808
898
  def read_mplstyle(style_file):
899
+ """
900
+ example usage:
901
+ style_file = "/ std-colors.mplstyle"
902
+ style_dict = read_mplstyle(style_file)
903
+ """
809
904
  # Load the style file
810
905
  plt.style.use(style_file)
811
906
 
@@ -820,11 +915,6 @@ def read_mplstyle(style_file):
820
915
  return style_dict
821
916
 
822
917
 
823
- # #example usage:
824
- # style_file = "/ std-colors.mplstyle"
825
- # style_dict = read_mplstyle(style_file)
826
-
827
-
828
918
  def figsets(*args, **kwargs):
829
919
  """
830
920
  usage:
@@ -900,7 +990,6 @@ def figsets(*args, **kwargs):
900
990
  def set_step_1(ax, key, value):
901
991
  if ("fo" in key) and (("size" in key) or ("sz" in key)):
902
992
  fontsize = value
903
- print(fontsize)
904
993
  plt.rcParams.update({"font.size": fontsize})
905
994
  # style
906
995
  if "st" in key.lower() or "th" in key.lower():
@@ -1146,6 +1235,10 @@ def figsets(*args, **kwargs):
1146
1235
  if legend_kws:
1147
1236
  # https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html
1148
1237
  ax.legend(**legend_kws)
1238
+ else:
1239
+ legend = ax.get_legend()
1240
+ if legend is not None:
1241
+ legend.remove()
1149
1242
 
1150
1243
  for arg in args:
1151
1244
  if isinstance(arg, matplotlib.axes._axes.Axes):
@@ -1620,3 +1713,53 @@ def remove_colors_in_dict(
1620
1713
  if "loc" in data:
1621
1714
  del data["loc"]
1622
1715
  return data
1716
+
1717
+
1718
+ def add_asterisks(ax, res, xticks_x_loc, xticklabels, **kwargs_funcstars):
1719
+ if len(xticklabels) > 2:
1720
+ if isinstance(res, dict):
1721
+ pval_groups = res["res_tab"]["p-unc"].tolist()[0]
1722
+ else:
1723
+ pval_groups = res["res_tab"]["PR(>F)"].tolist()[0]
1724
+ if pval_groups <= 0.05:
1725
+ A_list = res["res_posthoc"]["A"].tolist()
1726
+ B_list = res["res_posthoc"]["B"].tolist()
1727
+ xticklabels_array = np.array(xticklabels)
1728
+ yscal_ = 0.99
1729
+ for A, B, P in zip(
1730
+ res["res_posthoc"]["A"].tolist(),
1731
+ res["res_posthoc"]["B"].tolist(),
1732
+ res["res_posthoc"]["p-unc"].tolist(),
1733
+ ):
1734
+ index_A = np.where(xticklabels_array == A)[0][0]
1735
+ index_B = np.where(xticklabels_array == B)[0][0]
1736
+ FuncStars(
1737
+ ax=ax,
1738
+ x1=xticks_x_loc[index_A],
1739
+ x2=xticks_x_loc[index_B],
1740
+ pval=P,
1741
+ yscale=yscal_,
1742
+ **kwargs_funcstars,
1743
+ )
1744
+ if P <= 0.05:
1745
+ yscal_ -= 0.075
1746
+ else:
1747
+ if isinstance(res, tuple):
1748
+ res = res[1]
1749
+ pval_groups = res["pval"]
1750
+ FuncStars(
1751
+ ax=ax,
1752
+ x1=1,
1753
+ x2=2,
1754
+ pval=pval_groups,
1755
+ **kwargs_funcstars,
1756
+ )
1757
+ else:
1758
+ pval_groups = res["pval"]
1759
+ FuncStars(
1760
+ ax=ax,
1761
+ x1=1,
1762
+ x2=2,
1763
+ pval=pval_groups,
1764
+ **kwargs_funcstars,
1765
+ )