py2ls 0.1.6.3__tar.gz → 0.1.6.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 (146) hide show
  1. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/PKG-INFO +1 -1
  2. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/__init__.py +2 -1
  3. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/plot.py +191 -71
  4. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/pyproject.toml +1 -1
  5. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/README.md +0 -0
  6. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.DS_Store +0 -0
  7. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/COMMIT_EDITMSG +0 -0
  8. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/FETCH_HEAD +0 -0
  9. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/HEAD +0 -0
  10. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/config +0 -0
  11. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/description +0 -0
  12. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/applypatch-msg.sample +0 -0
  13. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/commit-msg.sample +0 -0
  14. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/fsmonitor-watchman.sample +0 -0
  15. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/post-update.sample +0 -0
  16. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/pre-applypatch.sample +0 -0
  17. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/pre-commit.sample +0 -0
  18. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/pre-merge-commit.sample +0 -0
  19. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/pre-push.sample +0 -0
  20. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/pre-rebase.sample +0 -0
  21. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/pre-receive.sample +0 -0
  22. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/prepare-commit-msg.sample +0 -0
  23. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/push-to-checkout.sample +0 -0
  24. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/hooks/update.sample +0 -0
  25. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/index +0 -0
  26. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/info/exclude +0 -0
  27. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/logs/HEAD +0 -0
  28. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/logs/refs/heads/main +0 -0
  29. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/logs/refs/remotes/origin/HEAD +0 -0
  30. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/logs/refs/remotes/origin/main +0 -0
  31. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1 +0 -0
  32. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34 +0 -0
  33. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/0b/409e1bc918277010f5679b402d1d1dda53e15c +0 -0
  34. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/14/449a0e6ba4ea2f1a73acf63ef91c9c6193f9ed +0 -0
  35. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/15/a8e468aacfcb440e090020f36d0b985d45da23 +0 -0
  36. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/1a/b4585881a6a42889f01aa0cfe25fd5acfaf46f +0 -0
  37. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8 +0 -0
  38. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/1d/fe9d9633b24ea560354f4f93d39c6e5f163ea0 +0 -0
  39. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/20/72c28e83f4347959d29f7b3a6c1fc3e4ee6b59 +0 -0
  40. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/24/6b368b986f758630c46dc02b7fa512b53422f7 +0 -0
  41. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46 +0 -0
  42. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/30/a2f8da47ee947811dc8d993f5a06a45de374f4 +0 -0
  43. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad +0 -0
  44. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971 +0 -0
  45. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/36/e56a361f526eafa59c5235a5c990bf288b5f9c +0 -0
  46. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/36/ef43e50009e59db11812c258846d9e38718173 +0 -0
  47. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/39/7ead045fbbcfb17c62019eb18fe21ed05dbee5 +0 -0
  48. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/3b/bd972aa7ad680858f8dfbd0f7fcd97756f0d6f +0 -0
  49. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/3c/bbe5f4173d165127b9ad96119f1ec24c306ffc +0 -0
  50. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9 +0 -0
  51. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/41/dcf4b3bf0460946b2da93776cf9e836d62178f +0 -0
  52. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/43/dbd49b2ee367c5434dd545e3b5795434f2ef0b +0 -0
  53. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/48/a88fc5806305d0bb0755ee6801161b79696972 +0 -0
  54. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042 +0 -0
  55. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6 +0 -0
  56. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/53/e0deb1cb4c2c606bced6e7f9a66b0fda60980d +0 -0
  57. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/56/e4e8b2d5545e0256090f45aa8fc42c5fe067d0 +0 -0
  58. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/57/bd1c0199483ab316235b094543b85edec6c35e +0 -0
  59. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2 +0 -0
  60. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/5a/192565abf89c9d765af846ce6d53a92b1ce7ad +0 -0
  61. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a +0 -0
  62. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99 +0 -0
  63. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/62/4488173ed2c8936fa5cea3cf5dd3f26a30b86e +0 -0
  64. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/62/7c81b23b4e56e87b042b650b0103653cc9e34a +0 -0
  65. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/62/d90ccf8cbefdc2e4fd475e7c6f4f76e9fdf801 +0 -0
  66. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/63/100154b27846e8010e55b6bf4b3d7762c14c5f +0 -0
  67. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/64/27a4edff08f93d98f511418423f09f2ab90bcd +0 -0
  68. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/68/6df3072c8b025fb18106ed2df505994ad062a9 +0 -0
  69. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/69/13c452ca319f7cbf6a0836dc10a5bb033c84e4 +0 -0
  70. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/6a/52e747a2b349b128d1490d9e896d2323818eb7 +0 -0
  71. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/6b/7fde264d93a7a0986d394c46c7650d0ce2ab92 +0 -0
  72. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/6c/cebb29b7f3f5b0c889f6dadbf9ff066554587d +0 -0
  73. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/6d/ee29dbdcc84edeeacede105110446f3ccac963 +0 -0
  74. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/71/36b2074a2754be8b58127d82250e5b37e3c373 +0 -0
  75. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/78/3d4167bc95c9d2175e0df03ef1c1c880ba75ab +0 -0
  76. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/79/7ae089b2212a937840e215276005ce76881307 +0 -0
  77. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/7e/5956c806b5edc344d46dab599dec337891ba1f +0 -0
  78. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/81/8f26b7bf042269729020cf944fc362d66ba27e +0 -0
  79. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/84/59071b722a255b774a80b27746033f8141ab39 +0 -0
  80. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/87/ef1fc3f7f1ddc4d0ab9b3e65381ce9f3388621 +0 -0
  81. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/8b/84f56978e1de8f2ae82abce5f8b3e182d365cd +0 -0
  82. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/8e/55a7d2b96184030211f20c9b9af201eefcac82 +0 -0
  83. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/91/c69ad88fe0ba94aa7859fb5f7edac5e6f1a3f7 +0 -0
  84. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/94/74152b4b463d70ae5ad07f0c658be3e296026b +0 -0
  85. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/97/1aef09ea939f46b60b9646f8d524c78a9220f4 +0 -0
  86. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/9d/0df52899fe95279059286d9c0ec42287edc168 +0 -0
  87. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/a1/5389729850729fc7bd78a54f26fce77f30be12 +0 -0
  88. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/a4/63fdd23e5efd713db8a71f316f3a1c7bd60916 +0 -0
  89. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/a5/ec8f74642fbba27f7ea78c53b372ae0c7dedce +0 -0
  90. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/a7/3e13eafee65c5b8d73ad2d3ea46d0eee82f0d3 +0 -0
  91. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/b0/56be4be89ba6b76949dd641df45bb7036050c8 +0 -0
  92. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/b0/9cd7856d58590578ee1a4f3ad45d1310a97f87 +0 -0
  93. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/b2/18e6a0f0f1c4df8cdefa9852058348abc713b7 +0 -0
  94. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/b5/61831c7dce8ea51e7ee6b6fa35745f14d8242d +0 -0
  95. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/b7/2c9e75ab7d0afe594664650aa8f6c772f5ac64 +0 -0
  96. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/bb/81ccc0513f18fc160b54a82861e9a80d23f4f6 +0 -0
  97. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/bb/934eb33bc1a8b85630bf680caffd99560c1b8f +0 -0
  98. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/bf/67907e337021ebff434e02b19b30a741c144af +0 -0
  99. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/c1/20fc812b9ad311c34a3608512d6a9d976bb48e +0 -0
  100. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/c4/cba65f1163661999ee4b8ed23342b63bc1300c +0 -0
  101. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/c6/7f17e5707313600efcb85e9a3fedea35dba591 +0 -0
  102. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/c6/f32aced880bd165a251cb52b26b0c1107e2141 +0 -0
  103. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/cd/822b3574a88ebdd1ed82fd6983f37e626d52b4 +0 -0
  104. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/cf/0c0d9c6fb09473aaeb7f7e2edbd770c3f2ef3d +0 -0
  105. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/d6/9ab1c4aadf279936dd778e8346ba60f74705b6 +0 -0
  106. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/d8/4688b54c0040a30976b3a6540bc47adf7ce680 +0 -0
  107. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/d9/005f2cc7fc4e65f14ed5518276007c08cf2fd0 +0 -0
  108. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/d9/c2403fd166ce791b4e9d0c6792ed8342c71fcd +0 -0
  109. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/d9/dfa5aee51e92a541b707e8e7baea6f06deff98 +0 -0
  110. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/db/141dbaa93594df2a8156182f361ee4db829359 +0 -0
  111. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/db/ffa8ea7bda721d0cee7b9e4ce5b2ef927733ff +0 -0
  112. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/dd/87fb5f606fe380d81e6fe3a2c98f9f99e3e09b +0 -0
  113. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/df/e0770424b2a19faf507a501ebfc23be8f54e7b +0 -0
  114. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/e3/1356f90ea6dd0577b5e0b40b206319adcbf085 +0 -0
  115. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/e3/5a4dafc50850cacac7bf76c56db2715cbda2c4 +0 -0
  116. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/e9/391ffe371f1cc43b42ef09b705d9c767c2e14f +0 -0
  117. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/f1/e50757fddc28b445545dc7e2759b54cdd0f42e +0 -0
  118. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/f4/b64d3107b39e3ad6f540c6607004ea34e6c024 +0 -0
  119. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/f7/c98ba5c2f903e603b1f5e63d49fbc8a43815cc +0 -0
  120. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/f9/045a08e96eb76848fc4d68e3e3e687cca39a2d +0 -0
  121. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/fa/147e6bb78a2e8db241d231295fd7f1ed061af8 +0 -0
  122. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/objects/fc/292e793ecfd42240ac43be407023bd731fa9e7 +0 -0
  123. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/refs/heads/main +0 -0
  124. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/refs/remotes/origin/HEAD +0 -0
  125. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.git/refs/remotes/origin/main +0 -0
  126. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.gitattributes +0 -0
  127. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/.gitignore +0 -0
  128. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/LICENSE +0 -0
  129. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/README.md +0 -0
  130. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/brain_atlas.py +0 -0
  131. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/chat.py +0 -0
  132. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/correlators.py +0 -0
  133. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/data/.DS_Store +0 -0
  134. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/data/db2ls_sql_chtsht.json +0 -0
  135. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/data/docs_links.json +0 -0
  136. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/data/lang_code_iso639.json +0 -0
  137. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/db2ls.py +0 -0
  138. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/doc.py +0 -0
  139. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/freqanalysis.py +0 -0
  140. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/ips.py +0 -0
  141. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/netfinder.py +0 -0
  142. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/setuptools-70.1.0-py3-none-any.whl +0 -0
  143. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/sleep_events_detectors.py +0 -0
  144. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/stats.py +0 -0
  145. {py2ls-0.1.6.3 → py2ls-0.1.6.4}/py2ls/translator.py +0 -0
  146. {py2ls-0.1.6.3 → py2ls-0.1.6.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.6.3
3
+ Version: 0.1.6.4
4
4
  Summary: py(thon)2(too)ls
5
5
  Author: Jianfeng
6
6
  Author-email: Jianfeng.Liu0413@gmail.com
@@ -2,5 +2,6 @@
2
2
  __init__ of the pyos module
3
3
  """
4
4
  from .ips import *
5
- from.translator import *
5
+ from .translator import *
6
6
  from .netfinder import *
7
+ from .plot import *
@@ -33,19 +33,34 @@ def catplot(data, *args, **kwargs):
33
33
  if not isinstance(opt_e['MarkerEdgeColor'],list):
34
34
  opt_e['MarkerEdgeColor']=[opt_e['MarkerEdgeColor']]
35
35
  for i, (x, y, err) in enumerate(zip(error_positions, data_m, errors)):
36
- ax.errorbar(x, y, yerr=err,
37
- fmt=opt_e['Marker'],
38
- ecolor=opt_e['LineColor'],
39
- elinewidth=opt_e['LineWidth'],
40
- lw=opt_e['LineWidth'],
41
- ls=opt_e['LineStyle'],
42
- capsize=opt_e['CapSize'],
43
- capthick=opt_e['CapLineWidth'],
44
- markersize=opt_e['MarkerSize'],
45
- mec=opt_e['MarkerEdgeColor'][i % len(opt_e['MarkerEdgeColor'])],
46
- mfc=opt_e['FaceColor'][i % len(opt_e['FaceColor'])],
47
- visible=opt_e['Visible']
48
- )
36
+ if opt_e['MarkerSize']=='auto':
37
+ ax.errorbar(x, y, yerr=err,
38
+ fmt=opt_e['Marker'],
39
+ ecolor=opt_e['LineColor'],
40
+ elinewidth=opt_e['LineWidth'],
41
+ lw=opt_e['LineWidth'],
42
+ ls=opt_e['LineStyle'],
43
+ capsize=opt_e['CapSize'],
44
+ capthick=opt_e['CapLineWidth'],
45
+ mec=opt_e['MarkerEdgeColor'][i % len(opt_e['MarkerEdgeColor'])],
46
+ mfc=opt_e['FaceColor'][i % len(opt_e['FaceColor'])],
47
+ visible=opt_e['Visible']
48
+ )
49
+ else:
50
+ ax.errorbar(x, y, yerr=err,
51
+ fmt=opt_e['Marker'],
52
+ ecolor=opt_e['LineColor'],
53
+ elinewidth=opt_e['LineWidth'],
54
+ lw=opt_e['LineWidth'],
55
+ ls=opt_e['LineStyle'],
56
+ capsize=opt_e['CapSize'],
57
+ capthick=opt_e['CapLineWidth'],
58
+ markersize=opt_e['MarkerSize'],
59
+ mec=opt_e['MarkerEdgeColor'][i % len(opt_e['MarkerEdgeColor'])],
60
+ mfc=opt_e['FaceColor'][i % len(opt_e['FaceColor'])],
61
+ visible=opt_e['Visible']
62
+ )
63
+
49
64
 
50
65
  def plot_scatter(data, opt_s, xloc, ax):
51
66
  scatter_positions = get_positions(xloc, opt_s['loc'], opt_s['x_width'], data.shape[0])
@@ -56,7 +71,9 @@ def catplot(data, *args, **kwargs):
56
71
  alpha=opt_s['FaceAlpha'],
57
72
  edgecolor=opt_s['MarkerEdgeColor'],
58
73
  s=opt_s['MarkerSize'],
59
- marker=opt_s['Marker']
74
+ marker=opt_s['Marker'],
75
+ linewidths=opt_s['LineWidth'],
76
+ cmap=opt_s['cmap']
60
77
  )
61
78
 
62
79
  def plot_boxplot(data, bx_opt, xloc,ax):
@@ -198,7 +215,30 @@ def catplot(data, *args, **kwargs):
198
215
  return np.tile(np.concatenate([xloc[:1] - x_width, xloc[1:-1], xloc[-1:] + x_width]),(n_row,1))
199
216
  else:
200
217
  return np.tile(xloc,(n_row,1))
218
+ def sort_catplot_layers(custom_order, full_order= ['b', 'bx', 'e', 'v', 's', 'l']):
219
+ """
220
+ sort layers
221
+ """
222
+ # Ensure custom_order is a list of strings
223
+ custom_order = [str(layer) for layer in custom_order]
224
+ j = 1
225
+ layers = list(range(len(full_order)))
226
+ for i in range(len(full_order)):
227
+ if full_order[i] not in custom_order:
228
+ layers[i] = i
229
+ else:
230
+ layers[i] = None
231
+ j = 0
232
+ for i in range(len(layers)):
233
+ if layers[i] is None:
234
+ full_order[i] = custom_order[j]
235
+ j += 1
236
+ return full_order
237
+ # # Example usage:
238
+ # custom_order = ['s', 'bx', 'e']
239
+ # full_order = sort_catplot_layers(custom_order)
201
240
 
241
+ # full_order
202
242
  opt = kwargs.get('opt',{})
203
243
  ax = kwargs.get('ax',None)
204
244
  if 'ax' not in locals() or ax is None:
@@ -223,26 +263,30 @@ def catplot(data, *args, **kwargs):
223
263
  opt['loc'].setdefault('xloc', np.arange(1, data.shape[1] + 1))
224
264
 
225
265
  # export setting
226
- opt.setdefault('export', False)
266
+ opt.setdefault('export', {})
227
267
  opt['export'].setdefault('path', None)
228
268
  print(opt['export'])
229
269
 
270
+ # opt.setdefault('layer', {})
271
+ opt.setdefault('layer', ['b', 'bx', 'e', 'v', 's', 'l'])
272
+
230
273
  opt.setdefault('b', {})
231
- opt['b'].setdefault('go', 0)
274
+ opt['b'].setdefault('go', 1)
275
+ opt['b'].setdefault('loc', 'c')
232
276
  opt['b'].setdefault('EdgeColor', 'k')
233
- opt['b'].setdefault('FaceAlpha', 1)
277
+ opt['b'].setdefault('FaceAlpha', 0.65)
234
278
  opt['b'].setdefault('EdgeAlpha', 1)
235
279
  opt['b'].setdefault('LineStyle', '-')
236
280
  opt['b'].setdefault('x_width', 0.5)
237
281
  opt['b'].setdefault('ShowBaseLine', 'off')
238
- opt['b'].setdefault('loc', 'c')
239
282
  opt['b'].setdefault('FaceColor', opt['c'])
240
283
 
241
284
  opt.setdefault('e', {})
242
285
  opt['e'].setdefault('go', 1)
286
+ opt['e'].setdefault('loc', 'l')
243
287
  opt['e'].setdefault('LineWidth', 1)
244
288
  opt['e'].setdefault('CapLineWidth', 1)
245
- opt['e'].setdefault('CapSize', opt['b']['x_width'] * 100 * 0.1)
289
+ opt['e'].setdefault('CapSize', 2)
246
290
  opt['e'].setdefault('Marker', 'none')
247
291
  opt['e'].setdefault('LineStyle', 'none')
248
292
  opt['e'].setdefault('LineColor', 'k')
@@ -253,63 +297,70 @@ def catplot(data, *args, **kwargs):
253
297
  opt['e'].setdefault('Visible', True)
254
298
  opt['e'].setdefault('Orientation', 'vertical')
255
299
  opt['e'].setdefault('error', 'sem')
256
- opt['e'].setdefault('loc', 'c')
257
300
  opt['e'].setdefault('x_width', opt['b']['x_width'] / 5)
258
301
  opt['e'].setdefault('cap_dir', 'b')
259
302
 
260
303
  opt.setdefault('s', {})
261
304
  opt['s'].setdefault('go', 1)
305
+ opt['s'].setdefault('loc', 'r')
306
+ opt['s'].setdefault('FaceColor', opt['c'])
307
+ opt['s'].setdefault('cmap', None)
308
+ opt['s'].setdefault('FaceAlpha', 1)
262
309
  opt['s'].setdefault('x_width', opt['b']['x_width'] / 5)
263
310
  opt['s'].setdefault('Marker', 'o')
264
- opt['s'].setdefault('MarkerSize', 6) # Set default size for markers
265
- opt['s'].setdefault('LineWidth', 1)
266
- opt['s'].setdefault('FaceColor', opt['c'])
267
- opt['s'].setdefault('FaceAlpha', 0.6)
268
- opt['s'].setdefault('loc', 'random')
269
- opt['s'].setdefault('MarkerEdgeColor', None)
270
-
311
+ opt['s'].setdefault('MarkerSize', 10)
312
+ opt['s'].setdefault('LineWidth', 0.5)
313
+ opt['s'].setdefault('MarkerEdgeColor', 'k')
314
+
315
+ opt.setdefault('l', {})
316
+ opt['l'].setdefault('go', 1)
317
+ opt['l'].setdefault('LineStyle', '-')
318
+ opt['l'].setdefault('LineColor', 'k')
319
+ opt['l'].setdefault('LineWidth', 0.5)
320
+ opt['l'].setdefault('LineAlpha', 0.5)
321
+
271
322
  opt.setdefault('bx', {})
272
323
  opt['bx'].setdefault('go', 0)
324
+ opt['bx'].setdefault('loc', 'r')
325
+ opt['bx'].setdefault('FaceColor', opt['c'])
273
326
  opt['bx'].setdefault('EdgeColor', 'k')
274
- opt['bx'].setdefault('FaceAlpha', 1)
327
+ opt['bx'].setdefault('FaceAlpha', 0.7)
275
328
  opt['bx'].setdefault('EdgeAlpha', 1)
276
329
  opt['bx'].setdefault('LineStyle', '-')
277
- opt['bx'].setdefault('x_width', 0.5)
330
+ opt['bx'].setdefault('x_width', 0.2)
278
331
  opt['bx'].setdefault('ShowBaseLine', 'off')
279
- opt['bx'].setdefault('loc', 'c')
280
- opt['bx'].setdefault('FaceColor', opt['c'])
281
332
  opt['bx'].setdefault('Notch', False)
282
- opt['bx'].setdefault('MedianStyle', 'line')
283
333
  opt['bx'].setdefault('Outliers', 'on')
284
334
  opt['bx'].setdefault('OutlierMarker', '+')
285
335
  opt['bx'].setdefault('OutlierColor', 'r')
286
336
  opt['bx'].setdefault('OutlierSize', 6)
287
- opt['bx'].setdefault('PlotStyle', 'traditional')
288
- opt['bx'].setdefault('FactorDirection', 'auto')
289
- opt['bx'].setdefault('Whisker', 1.5)
337
+ # opt['bx'].setdefault('PlotStyle', 'traditional')
338
+ # opt['bx'].setdefault('FactorDirection', 'auto')
339
+ opt['bx'].setdefault('Whisker', 0.5)
290
340
  opt['bx'].setdefault('Orientation', 'vertical')
291
- opt['bx'].setdefault('BoxLineWidth', 1.5)
341
+ opt['bx'].setdefault('BoxLineWidth', 0.5)
292
342
  opt['bx'].setdefault('FaceColor', 'k')
293
343
  opt['bx'].setdefault('WhiskerLineStyle', '-')
294
344
  opt['bx'].setdefault('WhiskerLineColor', 'k')
295
- opt['bx'].setdefault('WhiskerLineWidth', 1.5)
345
+ opt['bx'].setdefault('WhiskerLineWidth', 0.5)
296
346
  opt['bx'].setdefault('Caps', True)
297
347
  opt['bx'].setdefault('CapLineColor', 'k')
298
- opt['bx'].setdefault('CapLineWidth', 1.5)
299
- opt['bx'].setdefault('CapSize', 0.35)
348
+ opt['bx'].setdefault('CapLineWidth', 0.5)
349
+ opt['bx'].setdefault('CapSize', 0.2)
300
350
  opt['bx'].setdefault('MedianLineStyle', '-')
351
+ opt['bx'].setdefault('MedianStyle', 'line')
301
352
  opt['bx'].setdefault('MedianLineColor', 'k')
302
- opt['bx'].setdefault('MedianLineWidth', 1.5)
353
+ opt['bx'].setdefault('MedianLineWidth', 2)
303
354
  opt['bx'].setdefault('MedianLineTop', False)
304
355
  opt['bx'].setdefault('MeanLine', False)
305
356
  opt['bx'].setdefault('showmeans', opt['bx']['MeanLine'])
306
357
  opt['bx'].setdefault('MeanLineStyle', '-')
307
- opt['bx'].setdefault('MeanLineColor', 'b')
308
- opt['bx'].setdefault('MeanLineWidth', 1.5)
358
+ opt['bx'].setdefault('MeanLineColor', 'w')
359
+ opt['bx'].setdefault('MeanLineWidth', 2)
309
360
 
310
361
  # Violin plot options
311
362
  opt.setdefault('v', {})
312
- opt['v'].setdefault('go', 1)
363
+ opt['v'].setdefault('go', 0)
313
364
  opt['v'].setdefault('x_width', 0.3)
314
365
  opt['v'].setdefault('loc', 'r')
315
366
  opt['v'].setdefault('EdgeColor', 'none')
@@ -321,35 +372,35 @@ def catplot(data, *args, **kwargs):
321
372
  opt['v'].setdefault('NumPoints', 500)
322
373
  opt['v'].setdefault('BoundaryCorrection', 'reflection')
323
374
 
324
- # line plot options
325
- opt.setdefault('l', {})
326
- opt['l'].setdefault('go', 0)
327
- opt['l'].setdefault('LineStyle', '-')
328
- opt['l'].setdefault('LineColor', 'k')
329
- opt['l'].setdefault('LineWidth', 0.5)
330
- opt['l'].setdefault('LineAlpha', 0.5)
331
375
 
332
376
  data_m = np.nanmean(data, axis=0)
333
377
  nr, nc = data.shape
334
-
335
- xloc = opt['loc']['xloc']
336
-
337
- if opt['b']['go']:
338
- plot_bars(data_m, opt['b'], xloc, ax)
339
-
340
- if opt['e']['go']:
341
- plot_errors(data, data_m, opt['e'], xloc, ax)
342
-
343
- if opt['s']['go']:
344
- plot_scatter(data, opt['s'], xloc, ax)
345
-
346
- if opt['bx']['go']:
347
- plot_boxplot(data, opt['bx'], xloc, ax)
348
- if opt['v']['go']:
349
- plot_violin(data, opt['v'], xloc, ax)
350
- if opt['l']['go'] and opt['s']['go']:
351
- plot_lines(data, opt['l'], opt['s'], ax)
352
-
378
+
379
+ for key in kwargs.keys():
380
+ if key in opt:
381
+ if isinstance(kwargs[key], dict):
382
+ opt[key].update(kwargs[key])
383
+ else:
384
+ opt[key] = kwargs[key]
385
+ xloc = opt['loc']['xloc']
386
+ layers = sort_catplot_layers(opt['layer'])
387
+ for layer in layers:
388
+ if layer== 'b' and opt['b']['go']:
389
+ plot_bars(data_m, opt['b'], xloc, ax)
390
+ elif layer== 'e' and opt['e']['go']:
391
+ plot_errors(data, data_m, opt['e'], xloc, ax)
392
+ elif layer== 's' and opt['s']['go']:
393
+ plot_scatter(data, opt['s'], xloc, ax)
394
+ elif layer== 'bx' and opt['bx']['go']:
395
+ plot_boxplot(data, opt['bx'], xloc, ax)
396
+ elif layer== 'v' and opt['v']['go']:
397
+ plot_violin(data, opt['v'], xloc, ax)
398
+ elif all([layer== 'l',opt['l']['go'],opt['s']['go']]):
399
+ plot_lines(data, opt['l'], opt['s'], ax)
400
+ # figsets
401
+ kw_figsets=kwargs.get('figsets',None)
402
+ if kw_figsets is not None:
403
+ figsets(ax=ax,**kw_figsets)
353
404
  return ax
354
405
 
355
406
  # from py2ls.ips import get_color,figsets
@@ -1036,7 +1087,7 @@ def stdshade(ax=None,*args, **kwargs):
1036
1087
  # line_kws = kwargs.get('line_kws', {})
1037
1088
 
1038
1089
  # setting form kwargs
1039
- lw = kwargs.get('lw', 1.5)
1090
+ lw = kwargs.get('lw', 0.5)
1040
1091
  ls= kwargs.get('ls', plotStyle)
1041
1092
  marker=kwargs.get("marker",plotMarker)
1042
1093
  label=kwargs.get("label",None)
@@ -1075,6 +1126,12 @@ def stdshade(ax=None,*args, **kwargs):
1075
1126
 
1076
1127
  fill = ax.fill_between(x, yMean + wings, yMean - wings, **kws_fill)
1077
1128
  line = ax.plot(x, yMean, **kws_line)
1129
+
1130
+ # figsets
1131
+ kw_figsets=kwargs.get('figsets',None)
1132
+ if kw_figsets is not None:
1133
+ figsets(ax=ax,**kw_figsets)
1134
+
1078
1135
  return line[0], fill
1079
1136
 
1080
1137
 
@@ -1106,4 +1163,67 @@ plot.stdshade(data,
1106
1163
  plt.legend()
1107
1164
 
1108
1165
  """
1109
-
1166
+
1167
+
1168
+ def adjust_spines(ax=None, spines=['left', 'bottom'],distance=2):
1169
+ if ax is None:
1170
+ ax = plt.gca()
1171
+ for loc, spine in ax.spines.items():
1172
+ if loc in spines:
1173
+ spine.set_position(('outward', distance)) # outward by 2 points
1174
+ # spine.set_smart_bounds(True)
1175
+ else:
1176
+ spine.set_color('none') # don't draw spine
1177
+ # turn off ticks where there is no spine
1178
+ if 'left' in spines:
1179
+ ax.yaxis.set_ticks_position('left')
1180
+ else:
1181
+ ax.yaxis.set_ticks([])
1182
+ if 'bottom' in spines:
1183
+ ax.xaxis.set_ticks_position('bottom')
1184
+ else:
1185
+ # no xaxis ticks
1186
+ ax.xaxis.set_ticks([])
1187
+ # And then plot the data:
1188
+
1189
+ def add_colorbar(im, width=None, pad=None, **kwargs):
1190
+ # usage: add_colorbar(im, width=0.01, pad=0.005, label="PSD (dB)", shrink=0.8)
1191
+ l, b, w, h = im.axes.get_position().bounds # get boundaries
1192
+ width = width or 0.1 * w # get width of the colorbar
1193
+ pad = pad or width # get pad between im and cbar
1194
+ fig = im.axes.figure # get figure of image
1195
+ cax = fig.add_axes([l + w + pad, b, width, h]) # define cbar Axes
1196
+ return fig.colorbar(im, cax=cax, **kwargs) # draw cbar
1197
+
1198
+ def padcat(*args, fill_value=np.nan, axis=1):
1199
+ """
1200
+ Concatenate vectors with padding.
1201
+
1202
+ Parameters:
1203
+ *args : variable number of list or 1D arrays
1204
+ Input arrays to concatenate.
1205
+ fill_value : scalar, optional
1206
+ The value to use for padding the shorter lists (default is np.nan).
1207
+ axis : int, optional
1208
+ The axis along which to concatenate (0 for rows, 1 for columns, default is 0).
1209
+
1210
+ Returns:
1211
+ np.ndarray
1212
+ A 2D array with the input arrays concatenated along the specified axis, padded with fill_value where necessary.
1213
+ """
1214
+ if axis == 0:
1215
+ # Concatenate along rows
1216
+ max_len = max(len(lst) for lst in args)
1217
+ result = np.full((len(args), max_len), fill_value)
1218
+ for i, lst in enumerate(args):
1219
+ result[i, :len(lst)] = lst
1220
+ elif axis == 1:
1221
+ # Concatenate along columns
1222
+ max_len = max(len(lst) for lst in args)
1223
+ result = np.full((max_len, len(args)), fill_value)
1224
+ for i, lst in enumerate(args):
1225
+ result[:len(lst), i] = lst
1226
+ else:
1227
+ raise ValueError("axis must be 0 or 1")
1228
+
1229
+ return result
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "py2ls"
3
- version = "0.1.6.3"
3
+ version = "0.1.6.4"
4
4
  description = "py(thon)2(too)ls"
5
5
  authors = ["Jianfeng <Jianfeng.Liu0413@gmail.com>"]
6
6
  readme = "README.md"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes