py2ls 0.2.4.6__tar.gz → 0.2.4.7__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.
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/PKG-INFO +1 -1
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/bio.py +22 -5
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/ips.py +149 -60
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/plot.py +12 -32
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/pyproject.toml +1 -1
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/README.md +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.DS_Store +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/COMMIT_EDITMSG +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/FETCH_HEAD +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/HEAD +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/config +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/description +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/applypatch-msg.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/commit-msg.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/fsmonitor-watchman.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/post-update.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/pre-applypatch.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/pre-commit.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/pre-merge-commit.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/pre-push.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/pre-rebase.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/pre-receive.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/prepare-commit-msg.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/push-to-checkout.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/hooks/update.sample +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/index +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/info/exclude +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/logs/HEAD +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/logs/refs/heads/main +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/logs/refs/remotes/origin/HEAD +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/logs/refs/remotes/origin/main +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/0b/409e1bc918277010f5679b402d1d1dda53e15c +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/12/c2808a1b3a4d0892a4154dfba1e2ae3770fa73 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/14/449a0e6ba4ea2f1a73acf63ef91c9c6193f9ed +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/15/a8e468aacfcb440e090020f36d0b985d45da23 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/1a/b4585881a6a42889f01aa0cfe25fd5acfaf46f +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/1c/9314c5f69b9390068a2a8616875d974849d71f +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/1d/fe9d9633b24ea560354f4f93d39c6e5f163ea0 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/20/72c28e83f4347959d29f7b3a6c1fc3e4ee6b59 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/24/6b368b986f758630c46dc02b7fa512b53422f7 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/27/aa6074f652bc6f7078f8647489d9ee8e24f0e2 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/28/c2969d785c1b892c2a96b3f00eba63a59811b3 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/2a/ae95d517d213b660bf4f65a4e0cfae7bb893eb +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/2a/fdf45791a26d42ccead35ace76a8f0b2a56561 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/30/a2f8da47ee947811dc8d993f5a06a45de374f4 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/34/9e31b6a3634cea102ce5588b98c11cc1738605 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/34/b6f3a2ee84f39bed4eee57f2c0e0afb994feb1 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/35/1a5f491ab97eee9d1ee699478d75a8bb5d3dc2 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/36/e56a361f526eafa59c5235a5c990bf288b5f9c +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/36/ef43e50009e59db11812c258846d9e38718173 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/39/7ead045fbbcfb17c62019eb18fe21ed05dbee5 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/39/b13be65125556784e44c7a1d9821703c7ab67e +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/3b/507acc7f23391644cc0b824b1e79fd2677a362 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/3b/bd972aa7ad680858f8dfbd0f7fcd97756f0d6f +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/3c/bbe5f4173d165127b9ad96119f1ec24c306ffc +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/3d/9d10d27724657a436c65a6254bfd213d4b3562 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/41/dcf4b3bf0460946b2da93776cf9e836d62178f +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/43/dbd49b2ee367c5434dd545e3b5795434f2ef0b +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/45/b1b6178bacbfc997811a998b5cc60c1ea7fac8 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/47/6cbd5a7c5e35cddef2f8a38bdc4896d403b095 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/48/a88fc5806305d0bb0755ee6801161b79696972 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/53/e0deb1cb4c2c606bced6e7f9a66b0fda60980d +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/56/e4e8b2d5545e0256090f45aa8fc42c5fe067d0 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/57/63d0c52f5c9c69e89d514a1f96034947abe21a +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/57/bd1c0199483ab316235b094543b85edec6c35e +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/59/380c4c26bdcd4d9b71ae3e2e35f05b3f26c5ab +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/5a/192565abf89c9d765af846ce6d53a92b1ce7ad +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/62/4488173ed2c8936fa5cea3cf5dd3f26a30b86e +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/62/7c81b23b4e56e87b042b650b0103653cc9e34a +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/62/d90ccf8cbefdc2e4fd475e7c6f4f76e9fdf801 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/63/100154b27846e8010e55b6bf4b3d7762c14c5f +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/64/27a4edff08f93d98f511418423f09f2ab90bcd +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/66/6227eeeba24073e63811e89f1449f3d958f183 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/66/c998778721d424bd0aae80602dabbffa93af2e +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/68/6df3072c8b025fb18106ed2df505994ad062a9 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/69/13c452ca319f7cbf6a0836dc10a5bb033c84e4 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/6a/52e747a2b349b128d1490d9e896d2323818eb7 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/6b/7fde264d93a7a0986d394c46c7650d0ce2ab92 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/6c/cebb29b7f3f5b0c889f6dadbf9ff066554587d +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/6d/c2cdf4a84e538e5d4777486aeff87e42f41799 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/6d/ee29dbdcc84edeeacede105110446f3ccac963 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/71/36b2074a2754be8b58127d82250e5b37e3c373 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/72/245a05b0966011cb381e6b32b0465000e969ab +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/72/e4179337639859678ddaecf38b16f33aaec8e1 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/78/063f4c863fc371ec0313303c0a81283b35d9b6 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/78/3d4167bc95c9d2175e0df03ef1c1c880ba75ab +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/79/7ae089b2212a937840e215276005ce76881307 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/7e/5956c806b5edc344d46dab599dec337891ba1f +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/81/8f26b7bf042269729020cf944fc362d66ba27e +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/82/70b319ce4046854fbe7dc41054b6c2d112dab2 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/84/59071b722a255b774a80b27746033f8141ab39 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/85/aee46f478e9afdb84d50a05242c53b04ed2e21 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/86/e288b46f8fe179907e4413f665aeb5053fddb1 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/87/ef1fc3f7f1ddc4d0ab9b3e65381ce9f3388621 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/8b/84f56978e1de8f2ae82abce5f8b3e182d365cd +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/8e/55a7d2b96184030211f20c9b9af201eefcac82 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/91/c69ad88fe0ba94aa7859fb5f7edac5e6f1a3f7 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/94/74152b4b463d70ae5ad07f0c658be3e296026b +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/94/f7dbe88e80c4205a901b71eb8f181974376bba +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/97/1aef09ea939f46b60b9646f8d524c78a9220f4 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/9b/ec5ee2236ee2d5532c36bfd132e23c58fdb69c +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/9d/0df52899fe95279059286d9c0ec42287edc168 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/a1/5389729850729fc7bd78a54f26fce77f30be12 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/a1/906da89d1174f74867800c74c43af36253bd5e +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/a4/63fdd23e5efd713db8a71f316f3a1c7bd60916 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/a5/ec8f74642fbba27f7ea78c53b372ae0c7dedce +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/a7/3e13eafee65c5b8d73ad2d3ea46d0eee82f0d3 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/b0/56be4be89ba6b76949dd641df45bb7036050c8 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/b0/9cd7856d58590578ee1a4f3ad45d1310a97f87 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/b2/18e6a0f0f1c4df8cdefa9852058348abc713b7 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/b3/4f7f271c6d6105e35a6556ffda71d03afe8c96 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/b3/69579064bde9de9a19d114fc33e4e48cc8c0e4 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/b5/61831c7dce8ea51e7ee6b6fa35745f14d8242d +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/b7/2c9e75ab7d0afe594664650aa8f6c772f5ac64 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/bb/81ccc0513f18fc160b54a82861e9a80d23f4f6 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/bb/934eb33bc1a8b85630bf680caffd99560c1b8f +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/bf/67907e337021ebff434e02b19b30a741c144af +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/bf/b54d65922ce1dfda1aaa014913a54e7172d0bc +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/c1/20fc812b9ad311c34a3608512d6a9d976bb48e +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/c1/397c6ed72c4e20ef6b9ab83163e9a6baba5b45 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/c4/cba65f1163661999ee4b8ed23342b63bc1300c +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/c6/7f17e5707313600efcb85e9a3fedea35dba591 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/c6/f32aced880bd165a251cb52b26b0c1107e2141 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/cc/45df1d317a2eb63ff1ff3a5f3b4a9f98fd92b5 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/cd/822b3574a88ebdd1ed82fd6983f37e626d52b4 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/cf/0c0d9c6fb09473aaeb7f7e2edbd770c3f2ef3d +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/d2/992df305f4b56a466a2f221aeb182ddd20f418 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/d6/39e8af592cd75a318d8affddd1bcc70c2095f2 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/d6/9ab1c4aadf279936dd778e8346ba60f74705b6 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/d8/4688b54c0040a30976b3a6540bc47adf7ce680 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/d9/005f2cc7fc4e65f14ed5518276007c08cf2fd0 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/d9/c2403fd166ce791b4e9d0c6792ed8342c71fcd +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/d9/dfa5aee51e92a541b707e8e7baea6f06deff98 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/db/141dbaa93594df2a8156182f361ee4db829359 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/db/3f2cd643292057936230b95cf7ec3046affe11 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/db/ffa8ea7bda721d0cee7b9e4ce5b2ef927733ff +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/dc/c2bdbafb3296e09d9ee4955cfa55d275825f94 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/dc/cdbd4266765d840be2ae35ab1752a0fa312c16 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/dd/87fb5f606fe380d81e6fe3a2c98f9f99e3e09b +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/de/214c626ac2dd2685bfaa0bc0fc20f528d014d7 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/df/e0770424b2a19faf507a501ebfc23be8f54e7b +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/e2/f2f8f4c25e62a297fc55f36acc6b01cfbab76f +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/e3/1356f90ea6dd0577b5e0b40b206319adcbf085 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/e3/5a4dafc50850cacac7bf76c56db2715cbda2c4 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/e4/6c715352db9fe3c887a635f1916df4ca1f4ff9 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/e5/0580a0bd1e1b3d29f834382b80fceb61d5cf0c +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/e9/391ffe371f1cc43b42ef09b705d9c767c2e14f +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/ea/3a18cc75e53792744ef754e05d3f4481768c13 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/ec/40fd8bf8e4c342534a9fc020289e402ba6bc9d +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/ec/d980279432b13f0374b90ca439a6329cdece0f +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/ee/cee64eacaff022dcdc509c0c2b1da492f21060 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/f1/e50757fddc28b445545dc7e2759b54cdd0f42e +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/f4/b64d3107b39e3ad6f540c6607004ea34e6c024 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/f4/ba7f815b886797b73fede071d86e0c134d2bc7 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/f5/61c3c1bf1c9ea9c9d1f556a7be2869f71f3bdf +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/f6/44a8ff56fa035105fc517cbb1ac46c3d8e349a +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/f7/c98ba5c2f903e603b1f5e63d49fbc8a43815cc +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/f9/045a08e96eb76848fc4d68e3e3e687cca39a2d +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/fa/147e6bb78a2e8db241d231295fd7f1ed061af8 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/fc/292e793ecfd42240ac43be407023bd731fa9e7 +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/refs/heads/main +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/refs/remotes/origin/HEAD +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/refs/remotes/origin/main +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.gitattributes +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.gitignore +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/LICENSE +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/README.md +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/__init__.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/batman.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/brain_atlas.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/chat.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/correlators.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/.DS_Store +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/db2ls_sql_chtsht.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/docs_links.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/email/email_html_template.html +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/lang_code_iso639.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/mygenes_fields_241022.txt +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/sns_info.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/example/style1.pdf +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/example/style2.pdf +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/example/style3.pdf +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/example/style4.pdf +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/example/style5.pdf +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/example/style6.pdf +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/example/style7.pdf +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/example/style8.pdf +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/example/style9.pdf +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/style1.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/style10.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/style11.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/style12.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/style2.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/style3.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/style4.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/style5.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/style6.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/style7.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/style8.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/styles/style9.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/usages_pd copy.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/usages_pd.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/data/usages_sns.json +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/db2ls.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/doc.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/export_requirements.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/fetch_update.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/freqanalysis.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/ich2ls.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/ml2ls.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/mol.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/netfinder.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/ocr.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/setuptools-70.1.0-py3-none-any.whl +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/sleep_events_detectors.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/stats.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/translator.py +0 -0
- {py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/wb_detector.py +0 -0
@@ -166,9 +166,23 @@ def get_probe(
|
|
166
166
|
if platform_id is None:
|
167
167
|
df_meta = get_meta(geo=geo, dataset=dataset, verbose=False)
|
168
168
|
platform_id = df_meta["platform_id"].unique().tolist()
|
169
|
-
platform_id = platform_id[0] if len(platform_id) == 1 else platform_id
|
170
169
|
print(f"Platform: {platform_id}")
|
171
|
-
|
170
|
+
if len(platform_id) > 1:
|
171
|
+
df_probe= geo[dataset].gpls[platform_id[0]].table
|
172
|
+
# df_probe=pd.DataFrame()
|
173
|
+
# # Iterate over each platform ID and collect the probe tables
|
174
|
+
# for platform_id_ in platform_id:
|
175
|
+
# if platform_id_ in geo[dataset].gpls:
|
176
|
+
# df_probe_ = geo[dataset].gpls[platform_id_].table
|
177
|
+
# if not df_probe_.empty:
|
178
|
+
# df_probe=pd.concat([df_probe, df_probe_])
|
179
|
+
# else:
|
180
|
+
# print(f"Warning: Probe table for platform {platform_id_} is empty.")
|
181
|
+
# else:
|
182
|
+
# print(f"Warning: Platform ID {platform_id_} not found in dataset {dataset}.")
|
183
|
+
else:
|
184
|
+
df_probe= geo[dataset].gpls[platform_id[0]].table
|
185
|
+
|
172
186
|
if df_probe.empty:
|
173
187
|
print(
|
174
188
|
f"Warning: cannot find the probe info. 看一下是不是在单独的文件中包含了probe信息"
|
@@ -215,9 +229,12 @@ def get_data(geo: dict, dataset: str = "GSE25097", verbose=False):
|
|
215
229
|
df_expression = get_expression_data(geo, dataset=dataset)
|
216
230
|
if not df_expression.select_dtypes(include=["number"]).empty:
|
217
231
|
# 如果数据全部是counts类型的话, 则使用TMM进行normalize
|
218
|
-
if 'counts' in get_data_type(df_expression):
|
219
|
-
|
220
|
-
|
232
|
+
if 'counts' in get_data_type(df_expression):
|
233
|
+
try:
|
234
|
+
df_expression=counts2expression(df_expression.T).T
|
235
|
+
print(f"{dataset}'s type is raw read counts, nomalized(transformed) via 'TMM'")
|
236
|
+
except Exception as e:
|
237
|
+
print("raw counts data")
|
221
238
|
if any([df_probe.empty, df_expression.empty]):
|
222
239
|
print(
|
223
240
|
f"got empty values, check the probe info. 看一下是不是在单独的文件中包含了probe信息"
|
@@ -555,14 +555,28 @@ def shared(*args, strict=True, n_shared=2, verbose=True):
|
|
555
555
|
# Get elements that appear in at least n_shared lists
|
556
556
|
shared_elements = [item for item, count in element_count.items() if count >= n_shared]
|
557
557
|
|
558
|
-
shared_elements = flatten(shared_elements, verbose=verbose)
|
558
|
+
shared_elements = flatten(shared_elements, verbose=verbose)
|
559
559
|
if verbose:
|
560
560
|
elements2show = shared_elements if len(shared_elements)<10 else shared_elements[:5]
|
561
561
|
print(f"{' '*2}{len(shared_elements)} elements shared: {' '*2}{elements2show}")
|
562
562
|
print("********* checking shared elements *********")
|
563
563
|
return shared_elements
|
564
564
|
|
565
|
-
def
|
565
|
+
def not_shared(*args, strict=True, n_shared=2, verbose=False):
|
566
|
+
"""
|
567
|
+
To find the elements in list1 that are not shared with list2 while maintaining the original order of list1
|
568
|
+
usage:
|
569
|
+
list1 = [1, 8, 3, 3, 4, 5]
|
570
|
+
list2 = [4, 5, 6, 7, 8]
|
571
|
+
not_shared(list1,list2)# output [1,3]
|
572
|
+
"""
|
573
|
+
_common = shared(*args, strict=strict, n_shared=n_shared, verbose=verbose)
|
574
|
+
list1 = args[0]
|
575
|
+
_not_shared=[item for item in list1 if item not in _common]
|
576
|
+
return flatten(_not_shared, verbose=verbose)
|
577
|
+
|
578
|
+
|
579
|
+
def flatten(nested: Any, unique_list=True, verbose=False):
|
566
580
|
"""
|
567
581
|
Recursively flattens a nested structure (lists, tuples, dictionaries, sets) into a single list.
|
568
582
|
Parameters:
|
@@ -1560,13 +1574,26 @@ def unzip(dir_path, output_dir=None):
|
|
1560
1574
|
tar_ref.extractall(output_dir)
|
1561
1575
|
return output_dir
|
1562
1576
|
# Handle .gz files
|
1563
|
-
if dir_path.endswith(".gz"):
|
1577
|
+
if dir_path.endswith(".gz") or dir_path.endswith(".gzip"):
|
1564
1578
|
import gzip
|
1565
1579
|
|
1566
1580
|
output_file = os.path.splitext(dir_path)[0] # remove the .gz extension
|
1567
|
-
|
1568
|
-
with open(
|
1569
|
-
|
1581
|
+
try:
|
1582
|
+
with gzip.open(dir_path, "rb") as gz_file:
|
1583
|
+
with open(output_file, "wb") as out_file:
|
1584
|
+
shutil.copyfileobj(gz_file, out_file)
|
1585
|
+
print(f"unzipped '{dir_path}' to '{output_file}'")
|
1586
|
+
except FileNotFoundError:
|
1587
|
+
print(f"Error: The file '{dir_path}' was not found.")
|
1588
|
+
except PermissionError:
|
1589
|
+
print(f"Error: Permission denied when accessing '{dir_path}' or writing to '{output_file}'.")
|
1590
|
+
except Exception as e:
|
1591
|
+
try:
|
1592
|
+
import tarfile
|
1593
|
+
with tarfile.open(dir_path, 'r:gz') as tar:
|
1594
|
+
tar.extractall(path=output_file)
|
1595
|
+
except Exception as final_e:
|
1596
|
+
print(f"An final unexpected error occurred: {final_e}")
|
1570
1597
|
return output_file
|
1571
1598
|
|
1572
1599
|
# Handle .zip files
|
@@ -1648,9 +1675,12 @@ def is_df_abnormal(df: pd.DataFrame, verbose=False) -> bool:
|
|
1648
1675
|
False: normal
|
1649
1676
|
|
1650
1677
|
"""
|
1678
|
+
if not isinstance(df, pd.DataFrame):
|
1679
|
+
return False
|
1680
|
+
df.columns = df.columns.astype(str)# 把它变成str, 这样就可以进行counts运算了
|
1651
1681
|
# Initialize a list to hold messages about abnormalities
|
1652
1682
|
messages = []
|
1653
|
-
is_abnormal =
|
1683
|
+
is_abnormal = True
|
1654
1684
|
# Check the shape of the DataFrame
|
1655
1685
|
actual_shape = df.shape
|
1656
1686
|
messages.append(f"Shape of DataFrame: {actual_shape}")
|
@@ -1745,10 +1775,12 @@ def fload(fpath, kind=None, **kwargs):
|
|
1745
1775
|
content = file.read()
|
1746
1776
|
return content
|
1747
1777
|
|
1748
|
-
def load_html(fpath):
|
1749
|
-
|
1750
|
-
|
1751
|
-
|
1778
|
+
# def load_html(fpath):
|
1779
|
+
# with open(fpath, "r") as file:
|
1780
|
+
# content = file.read()
|
1781
|
+
# return content
|
1782
|
+
def load_html(fpath,**kwargs):
|
1783
|
+
return pd.read_html(fpath,**kwargs)
|
1752
1784
|
|
1753
1785
|
def load_json(fpath, **kwargs):
|
1754
1786
|
output=kwargs.pop("output","json")
|
@@ -1962,8 +1994,8 @@ def fload(fpath, kind=None, **kwargs):
|
|
1962
1994
|
# display(df.head(2))
|
1963
1995
|
# print(f"is_df_abnormal:{is_df_abnormal(df, verbose=0)}")
|
1964
1996
|
if not is_df_abnormal(df, verbose=0):
|
1965
|
-
display(df.head(2))
|
1966
|
-
print(f"shape: {df.shape}")
|
1997
|
+
display(df.head(2)) if isinstance(df, pd.DataFrame) else display("it is not a DataFrame")
|
1998
|
+
print(f"shape: {df.shape}") if isinstance(df, pd.DataFrame) else display("it is not a DataFrame")
|
1967
1999
|
return df
|
1968
2000
|
except EmptyDataError as e:
|
1969
2001
|
continue
|
@@ -1987,6 +2019,42 @@ def fload(fpath, kind=None, **kwargs):
|
|
1987
2019
|
pass
|
1988
2020
|
return df
|
1989
2021
|
|
2022
|
+
|
2023
|
+
def load_parquet(fpath, **kwargs):
|
2024
|
+
"""
|
2025
|
+
Load a Parquet file into a Pandas DataFrame with advanced options.
|
2026
|
+
|
2027
|
+
Parameters:
|
2028
|
+
- fpath (str): The file path to the Parquet file.
|
2029
|
+
- engine (str): The engine to use for reading the Parquet file (default is 'pyarrow').
|
2030
|
+
- columns (list): List of columns to load. If None, loads all columns.
|
2031
|
+
- verbose (bool): If True, prints additional information about the loading process.
|
2032
|
+
- filters (list): List of filter conditions for predicate pushdown.
|
2033
|
+
- **kwargs: Additional keyword arguments for `pd.read_parquet`.
|
2034
|
+
|
2035
|
+
Returns:
|
2036
|
+
- df (DataFrame): The loaded DataFrame.
|
2037
|
+
"""
|
2038
|
+
|
2039
|
+
engine = kwargs.get("engine", "pyarrow")
|
2040
|
+
verbose = kwargs.pop("verbose", False)
|
2041
|
+
|
2042
|
+
if verbose:
|
2043
|
+
use_pd("read_parquet", verbose=verbose)
|
2044
|
+
try:
|
2045
|
+
df = pd.read_parquet(fpath, engine=engine, **kwargs)
|
2046
|
+
if verbose:
|
2047
|
+
if 'columns' in kwargs:
|
2048
|
+
print(f"Loaded columns: {kwargs['columns']}")
|
2049
|
+
else:
|
2050
|
+
print("Loaded all columns.")
|
2051
|
+
print(f"shape: {df.shape}")
|
2052
|
+
except Exception as e:
|
2053
|
+
print(f"An error occurred while loading the Parquet file: {e}")
|
2054
|
+
df = None
|
2055
|
+
|
2056
|
+
return df
|
2057
|
+
|
1990
2058
|
def load_ipynb(fpath, **kwargs):
|
1991
2059
|
as_version = kwargs.get("as_version", 4)
|
1992
2060
|
with open(fpath, "r") as file:
|
@@ -2055,51 +2123,21 @@ def fload(fpath, kind=None, **kwargs):
|
|
2055
2123
|
kind = kind.lower()
|
2056
2124
|
kind = kind.lstrip(".").lower()
|
2057
2125
|
img_types = [
|
2058
|
-
"bmp",
|
2059
|
-
"
|
2060
|
-
"gif",
|
2061
|
-
"icns",
|
2062
|
-
"ico",
|
2063
|
-
"im",
|
2064
|
-
"jpg",
|
2065
|
-
"jpeg",
|
2066
|
-
"jpeg2000",
|
2067
|
-
"msp",
|
2068
|
-
"pcx",
|
2069
|
-
"png",
|
2070
|
-
"ppm",
|
2071
|
-
"sgi",
|
2072
|
-
"spider",
|
2073
|
-
"tga",
|
2074
|
-
"tiff",
|
2075
|
-
"tif",
|
2076
|
-
"webp",
|
2077
|
-
"json",
|
2126
|
+
"bmp","eps","gif","png","jpg","jpeg","jpeg2000","tiff","tif",
|
2127
|
+
"icns","ico","im","msp","pcx","ppm","sgi","spider","tga","webp",
|
2078
2128
|
]
|
2079
2129
|
doc_types = [
|
2080
|
-
"docx",
|
2081
|
-
"txt",
|
2082
|
-
"md",
|
2083
|
-
"
|
2084
|
-
"json",
|
2085
|
-
"yaml",
|
2086
|
-
"xml",
|
2087
|
-
"csv",
|
2088
|
-
"xlsx",
|
2089
|
-
"pdf",
|
2130
|
+
"docx","pdf",
|
2131
|
+
"txt","csv","xlsx","tsv","parquet","snappy",
|
2132
|
+
"md","html",
|
2133
|
+
"json","yaml","xml",
|
2090
2134
|
"ipynb",
|
2135
|
+
"mtx"
|
2091
2136
|
]
|
2092
2137
|
zip_types = [
|
2093
|
-
"gz",
|
2094
|
-
"
|
2095
|
-
"
|
2096
|
-
"tar",
|
2097
|
-
"tar.gz",
|
2098
|
-
"tar.bz2",
|
2099
|
-
"bz2",
|
2100
|
-
"xz",
|
2101
|
-
"rar",
|
2102
|
-
"tgz",
|
2138
|
+
"gz","zip","7z","rar","tgz",
|
2139
|
+
"tar","tar.gz","tar.bz2",
|
2140
|
+
"bz2","xz","gzip"
|
2103
2141
|
]
|
2104
2142
|
other_types = ["fcs"]
|
2105
2143
|
supported_types = [*doc_types, *img_types, *zip_types, *other_types]
|
@@ -2128,14 +2166,14 @@ def fload(fpath, kind=None, **kwargs):
|
|
2128
2166
|
elif kind == "txt" or kind == "md":
|
2129
2167
|
return load_txt_md(fpath)
|
2130
2168
|
elif kind == "html":
|
2131
|
-
return load_html(fpath)
|
2169
|
+
return load_html(fpath, **kwargs)
|
2132
2170
|
elif kind == "json":
|
2133
|
-
return load_json(fpath)
|
2171
|
+
return load_json(fpath, **kwargs)
|
2134
2172
|
elif kind == "yaml":
|
2135
2173
|
return load_yaml(fpath)
|
2136
2174
|
elif kind == "xml":
|
2137
2175
|
return load_xml(fpath)
|
2138
|
-
elif kind
|
2176
|
+
elif kind in ["csv","tsv"]:
|
2139
2177
|
content = load_csv(fpath, **kwargs)
|
2140
2178
|
return content
|
2141
2179
|
elif kind in ["ods", "ods", "odt"]:
|
@@ -2146,14 +2184,25 @@ def fload(fpath, kind=None, **kwargs):
|
|
2146
2184
|
engine = kwargs.get("engine", "xlrd")
|
2147
2185
|
kwargs.pop("engine", None)
|
2148
2186
|
content = load_excel(fpath, engine=engine, **kwargs)
|
2187
|
+
print(f"shape: {content.shape}")
|
2149
2188
|
display(content.head(3))
|
2150
2189
|
return content
|
2151
2190
|
elif kind == "xlsx":
|
2152
2191
|
content = load_excel(fpath, **kwargs)
|
2153
2192
|
display(content.head(3))
|
2193
|
+
print(f"shape: {content.shape}")
|
2194
|
+
return content
|
2195
|
+
elif kind=='mtx':
|
2196
|
+
from scipy.io import mmread
|
2197
|
+
dat_mtx=mmread(fpath)
|
2198
|
+
content=pd.DataFrame.sparse.from_spmatrix(dat_mtx,**kwargs)
|
2199
|
+
display(content.head(3))
|
2200
|
+
print(f"shape: {content.shape}")
|
2154
2201
|
return content
|
2155
2202
|
elif kind == "ipynb":
|
2156
2203
|
return load_ipynb(fpath, **kwargs)
|
2204
|
+
elif kind in ['parquet','snappy']:
|
2205
|
+
return load_parquet(fpath,**kwargs)
|
2157
2206
|
elif kind == "pdf":
|
2158
2207
|
# print('usage:load_pdf(fpath, page="all", verbose=False)')
|
2159
2208
|
return load_pdf(fpath, **kwargs)
|
@@ -2199,9 +2248,7 @@ def fload(fpath, kind=None, **kwargs):
|
|
2199
2248
|
return meta, data
|
2200
2249
|
|
2201
2250
|
else:
|
2202
|
-
|
2203
|
-
# content = load_csv(fpath, **kwargs)
|
2204
|
-
# except:
|
2251
|
+
print("direct reading...")
|
2205
2252
|
try:
|
2206
2253
|
try:
|
2207
2254
|
with open(fpath, "r", encoding="utf-8") as f:
|
@@ -2501,6 +2548,25 @@ def fsave(
|
|
2501
2548
|
tree = etree.ElementTree(root)
|
2502
2549
|
tree.write(fpath, pretty_print=True, xml_declaration=True, encoding="UTF-8")
|
2503
2550
|
|
2551
|
+
def save_parquet(fpath:str, data:pd.DataFrame, **kwargs):
|
2552
|
+
engine = kwargs.pop("engine","auto") # auto先试pyarrow, 不行就转为fastparquet, {‘auto’, ‘pyarrow’, ‘fastparquet’}
|
2553
|
+
compression=kwargs.pop("compression",None) # Use None for no compression. Supported options: ‘snappy’, ‘gzip’, ‘brotli’, ‘lz4’, ‘zstd’
|
2554
|
+
try:
|
2555
|
+
# Attempt to save with "pyarrow" if engine is set to "auto"
|
2556
|
+
data.to_parquet(fpath, engine=engine, compression=compression, **kwargs)
|
2557
|
+
print(f"DataFrame successfully saved to {fpath} with engine '{engine}' and {compression} compression.")
|
2558
|
+
except Exception as e:
|
2559
|
+
print(f"Error using with engine '{engine}' and {compression} compression: {e}")
|
2560
|
+
if "Sparse" in str(e):
|
2561
|
+
try:
|
2562
|
+
# Handle sparse data by converting columns to dense
|
2563
|
+
print("Attempting to convert sparse columns to dense format...")
|
2564
|
+
data = data.apply(lambda x: x.sparse.to_dense() if pd.api.types.is_sparse(x) else x)
|
2565
|
+
save_parquet(fpath, data=data,**kwargs)
|
2566
|
+
except Exception as last_e:
|
2567
|
+
print(f"After converted sparse columns to dense format, Error using with engine '{engine}' and {compression} compression: {last_e}")
|
2568
|
+
|
2569
|
+
|
2504
2570
|
if kind is None:
|
2505
2571
|
_, kind = os.path.splitext(fpath)
|
2506
2572
|
kind = kind.lower()
|
@@ -2546,6 +2612,15 @@ def fsave(
|
|
2546
2612
|
save_yaml(fpath, content, **kwargs)
|
2547
2613
|
elif kind == "ipynb":
|
2548
2614
|
save_ipynb(fpath, content, **kwargs)
|
2615
|
+
elif kind.lower() in ["parquet","pq","big","par"]:
|
2616
|
+
compression=kwargs.pop("compression",None) # Use None for no compression. Supported options: ‘snappy’, ‘gzip’, ‘brotli’, ‘lz4’, ‘zstd’
|
2617
|
+
# fix the fpath ends
|
2618
|
+
if not '.parquet' in fpath:
|
2619
|
+
fpath=fpath.replace(kind, 'parquet')
|
2620
|
+
if compression is not None:
|
2621
|
+
if not fpath.endswith(compression):
|
2622
|
+
fpath=fpath+f".{compression}"
|
2623
|
+
save_parquet(fpath=fpath, data=content,compression=compression,**kwargs)
|
2549
2624
|
else:
|
2550
2625
|
try:
|
2551
2626
|
netfinder.downloader(url=content, dir_save=dirname(fpath), kind=kind)
|
@@ -5518,7 +5593,21 @@ def df_reducer(
|
|
5518
5593
|
) -> pd.DataFrame:
|
5519
5594
|
"""
|
5520
5595
|
Reduces the dimensionality of the selected DataFrame using PCA or UMAP.
|
5521
|
-
|
5596
|
+
method:
|
5597
|
+
1. 'umap':
|
5598
|
+
- big dataset and global structure, often preferred in large-scale datasets for
|
5599
|
+
visualization and dimensionality reduction, balancing speed and quality of visualization.
|
5600
|
+
- t-SNE excels at preserving local structure (i.e., clusters), but it often loses global
|
5601
|
+
relationships, causing clusters to appear in arbitrary proximities to each other.
|
5602
|
+
2. 'pca':
|
5603
|
+
- t-SNE excels at preserving local structure (i.e., clusters), but it often loses global
|
5604
|
+
relationships, causing clusters to appear in arbitrary proximities to each other.
|
5605
|
+
- useful as a preprocessing step and in datasets where linear relationships dominate.
|
5606
|
+
3. 't-SNE':
|
5607
|
+
a. t-SNE excels at preserving local structure (i.e., clusters), but it often loses global
|
5608
|
+
relationships, causing clusters to appear in arbitrary proximities to each other.
|
5609
|
+
b. often preferred in large-scale datasets for visualization and dimensionality
|
5610
|
+
reduction, balancing speed and quality of visualization.
|
5522
5611
|
Parameters:
|
5523
5612
|
-----------
|
5524
5613
|
data : pd.DataFrame
|
@@ -2337,40 +2337,20 @@ def get_color(
|
|
2337
2337
|
if n == 1:
|
2338
2338
|
colorlist = ["#3A4453"]
|
2339
2339
|
elif n == 2:
|
2340
|
-
colorlist = ["#3A4453", "#
|
2340
|
+
colorlist = ["#3A4453", "#FBAF63"]
|
2341
2341
|
elif n == 3:
|
2342
|
-
colorlist = ["#3A4453", "#
|
2342
|
+
colorlist = ["#3A4453", "#FBAF63", "#299D8F"]
|
2343
2343
|
elif n == 4:
|
2344
|
-
|
2345
|
-
colorlist = ["#81C6BD", "#FBAF63", "#F2675B", "#72A1C9"]
|
2344
|
+
colorlist = ["#087cf7", "#FBAF63", "#3C898A","#FF2C00"]
|
2346
2345
|
elif n == 5:
|
2347
|
-
colorlist = [
|
2348
|
-
"#3A4453",
|
2349
|
-
"#427AB2",
|
2350
|
-
"#F09148",
|
2351
|
-
"#DBDB8D",
|
2352
|
-
"#C59D94",
|
2353
|
-
"#AFC7E8",
|
2354
|
-
]
|
2346
|
+
colorlist = ["#459AA9", "#B25E9D", "#4B8C3B","#EF8632","#FF2C00"]
|
2355
2347
|
elif n == 6:
|
2356
|
-
colorlist = [
|
2357
|
-
|
2358
|
-
|
2359
|
-
"#F09148",
|
2360
|
-
"#DBDB8D",
|
2361
|
-
"#C59D94",
|
2362
|
-
"#E53528",
|
2363
|
-
]
|
2348
|
+
colorlist = ["#459AA9", "#B25E9D", "#4B8C3B","#EF8632", "#24578E","#FF2C00"]
|
2349
|
+
elif n==7:
|
2350
|
+
colorlist = [ "#7F7F7F", "#459AA9", "#B25E9D", "#4B8C3B","#EF8632", "#24578E" "#FF2C00"]
|
2364
2351
|
else:
|
2365
|
-
colorlist = [
|
2366
|
-
|
2367
|
-
"#FF2C00",
|
2368
|
-
"#0C5DA5",
|
2369
|
-
"#845B97",
|
2370
|
-
"#58BBCC",
|
2371
|
-
"#FF9500",
|
2372
|
-
"#D57DBE",
|
2373
|
-
]
|
2352
|
+
colorlist = ['#FF7F0E','#2CA02C','#D62728','#9467BD','#E377C2','#7F7F7F','#7BB8CC','#06daf2']
|
2353
|
+
|
2374
2354
|
by = "start"
|
2375
2355
|
elif any(["cub" in cmap.lower(), "sns" in cmap.lower()]):
|
2376
2356
|
if kwargs:
|
@@ -3106,9 +3086,9 @@ def plotxy(
|
|
3106
3086
|
palette = kws_scatter.pop(
|
3107
3087
|
"palette",
|
3108
3088
|
(
|
3109
|
-
sns.color_palette("
|
3089
|
+
sns.color_palette("tab20", data[hue].nunique())
|
3110
3090
|
if hue is not None
|
3111
|
-
else sns.color_palette("
|
3091
|
+
else sns.color_palette("tab20")
|
3112
3092
|
),
|
3113
3093
|
)
|
3114
3094
|
s = kws_scatter.pop("s", 10)
|
@@ -3202,7 +3182,7 @@ def volcano(
|
|
3202
3182
|
top_genes=[5, 5], # [down-regulated, up-regulated]
|
3203
3183
|
thr_x=np.log2(1.5), # default: 0.585
|
3204
3184
|
thr_y=-np.log10(0.05),
|
3205
|
-
sort_xy="x", #'y'
|
3185
|
+
sort_xy="x", #'y', 'xy'
|
3206
3186
|
colors=("#00BFFF", "#9d9a9a", "#FF3030"),
|
3207
3187
|
s=20,
|
3208
3188
|
fill=True, # plot filled scatter
|
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
|
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/0b/409e1bc918277010f5679b402d1d1dda53e15c
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/12/c2808a1b3a4d0892a4154dfba1e2ae3770fa73
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/14/449a0e6ba4ea2f1a73acf63ef91c9c6193f9ed
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/15/a8e468aacfcb440e090020f36d0b985d45da23
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/1a/b4585881a6a42889f01aa0cfe25fd5acfaf46f
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/1c/9314c5f69b9390068a2a8616875d974849d71f
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/1d/fe9d9633b24ea560354f4f93d39c6e5f163ea0
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/20/72c28e83f4347959d29f7b3a6c1fc3e4ee6b59
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/24/6b368b986f758630c46dc02b7fa512b53422f7
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/27/aa6074f652bc6f7078f8647489d9ee8e24f0e2
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/28/c2969d785c1b892c2a96b3f00eba63a59811b3
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/2a/ae95d517d213b660bf4f65a4e0cfae7bb893eb
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/2a/fdf45791a26d42ccead35ace76a8f0b2a56561
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/30/a2f8da47ee947811dc8d993f5a06a45de374f4
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/34/9e31b6a3634cea102ce5588b98c11cc1738605
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/34/b6f3a2ee84f39bed4eee57f2c0e0afb994feb1
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/35/1a5f491ab97eee9d1ee699478d75a8bb5d3dc2
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/36/e56a361f526eafa59c5235a5c990bf288b5f9c
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/36/ef43e50009e59db11812c258846d9e38718173
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/39/7ead045fbbcfb17c62019eb18fe21ed05dbee5
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/39/b13be65125556784e44c7a1d9821703c7ab67e
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/3b/507acc7f23391644cc0b824b1e79fd2677a362
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/3b/bd972aa7ad680858f8dfbd0f7fcd97756f0d6f
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/3c/bbe5f4173d165127b9ad96119f1ec24c306ffc
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/3d/9d10d27724657a436c65a6254bfd213d4b3562
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/41/dcf4b3bf0460946b2da93776cf9e836d62178f
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/43/dbd49b2ee367c5434dd545e3b5795434f2ef0b
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/45/b1b6178bacbfc997811a998b5cc60c1ea7fac8
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/47/6cbd5a7c5e35cddef2f8a38bdc4896d403b095
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/48/a88fc5806305d0bb0755ee6801161b79696972
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/53/e0deb1cb4c2c606bced6e7f9a66b0fda60980d
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/56/e4e8b2d5545e0256090f45aa8fc42c5fe067d0
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/57/63d0c52f5c9c69e89d514a1f96034947abe21a
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/57/bd1c0199483ab316235b094543b85edec6c35e
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2
RENAMED
File without changes
|
{py2ls-0.2.4.6 → py2ls-0.2.4.7}/py2ls/.git/objects/59/380c4c26bdcd4d9b71ae3e2e35f05b3f26c5ab
RENAMED
File without changes
|