py2ls 0.2.5.12__py3-none-any.whl → 0.2.5.15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- py2ls/.DS_Store +0 -0
- py2ls/.git/index +0 -0
- py2ls/__init__.py +1 -5
- py2ls/ich2ls.py +1955 -296
- py2ls/ips.py +2782 -736
- py2ls/netfinder.py +12 -5
- py2ls/plot.py +13 -7
- py2ls/stats.py +1 -144
- {py2ls-0.2.5.12.dist-info → py2ls-0.2.5.15.dist-info}/METADATA +89 -232
- {py2ls-0.2.5.12.dist-info → py2ls-0.2.5.15.dist-info}/RECORD +11 -12
- {py2ls-0.2.5.12.dist-info → py2ls-0.2.5.15.dist-info}/WHEEL +1 -1
- py2ls/ips_lab.py +0 -17172
py2ls/netfinder.py
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
from bs4 import BeautifulSoup
|
1
|
+
from bs4 import BeautifulSoup, NavigableString
|
2
2
|
import scrapy
|
3
3
|
import requests
|
4
4
|
import os
|
5
|
+
import chardet
|
5
6
|
import pandas as pd
|
6
7
|
import logging
|
7
8
|
import json
|
@@ -116,8 +117,8 @@ def extract_text_from_content(
|
|
116
117
|
|
117
118
|
def extract_text(element):
|
118
119
|
texts = ""
|
119
|
-
if isinstance(element,
|
120
|
-
texts += element.strip()
|
120
|
+
if isinstance(element, NavigableString) and element.strip():
|
121
|
+
texts += element.strip() + " "
|
121
122
|
elif hasattr(element, "children"):
|
122
123
|
for child in element.children:
|
123
124
|
texts += extract_text(child)
|
@@ -172,6 +173,8 @@ def extract_text_from_content(
|
|
172
173
|
texts = ""
|
173
174
|
for tag in result_set:
|
174
175
|
texts = texts + " " + extract_text(tag) + " \n"
|
176
|
+
# texts = texts + " " + tag.get_text(" ", strip=True)+ " \n"
|
177
|
+
|
175
178
|
text_list = [tx.strip() for tx in texts.split(" \n") if tx.strip()]
|
176
179
|
return text_list
|
177
180
|
else:
|
@@ -816,9 +819,13 @@ def fetch_all(
|
|
816
819
|
)
|
817
820
|
if error:
|
818
821
|
return None, None
|
819
|
-
|
820
822
|
content_type = response.headers.get("content-type", "").split(";")[0].lower()
|
821
|
-
|
823
|
+
try:
|
824
|
+
detected = chardet.detect(response.content)
|
825
|
+
encoding = detected.get("encoding") or "utf-8"
|
826
|
+
content = response.content.decode(encoding, errors='replace')
|
827
|
+
except:
|
828
|
+
content = response.content.decode(response.encoding or 'utf-8', errors='replace')
|
822
829
|
|
823
830
|
return content_type, _parse_content(content, content_type, parser)
|
824
831
|
|
py2ls/plot.py
CHANGED
@@ -23,6 +23,7 @@ from .ips import (
|
|
23
23
|
get_df_format,
|
24
24
|
df_corr,
|
25
25
|
df_scaler,
|
26
|
+
df2array,array2df
|
26
27
|
)
|
27
28
|
import scipy.stats as scipy_stats
|
28
29
|
from .stats import *
|
@@ -1350,7 +1351,7 @@ def catplot(data, *args, **kwargs):
|
|
1350
1351
|
# # Example usage:
|
1351
1352
|
# custom_order = ['s', 'bx', 'e']
|
1352
1353
|
# full_order = sort_catplot_layers(custom_order)
|
1353
|
-
|
1354
|
+
data=data.copy()
|
1354
1355
|
ax = kwargs.get("ax", None)
|
1355
1356
|
col = kwargs.get("col", None)
|
1356
1357
|
report = kwargs.get("report", True)
|
@@ -1363,8 +1364,9 @@ def catplot(data, *args, **kwargs):
|
|
1363
1364
|
df = data.copy()
|
1364
1365
|
x = kwargs.get("x", None)
|
1365
1366
|
y = kwargs.get("y", None)
|
1366
|
-
hue = kwargs.get("hue", None)
|
1367
|
+
hue = kwargs.get("hue", None)
|
1367
1368
|
data = df2array(data=data, x=x, y=y, hue=hue)
|
1369
|
+
|
1368
1370
|
y_max_loc = np.max(data, axis=0)
|
1369
1371
|
xticklabels = []
|
1370
1372
|
if hue is not None:
|
@@ -1518,7 +1520,11 @@ def catplot(data, *args, **kwargs):
|
|
1518
1520
|
display_output(res)
|
1519
1521
|
|
1520
1522
|
# when the xticklabels are too long, rotate the labels a bit
|
1521
|
-
|
1523
|
+
try:
|
1524
|
+
xangle = 30 if max([len(i) for i in xticklabels]) > 50 else 0
|
1525
|
+
except:
|
1526
|
+
xangle = 0
|
1527
|
+
|
1522
1528
|
if kw_figsets is not None:
|
1523
1529
|
kw_figsets = {
|
1524
1530
|
"ylabel": y,
|
@@ -3259,13 +3265,13 @@ def plot_xy(
|
|
3259
3265
|
x=None,
|
3260
3266
|
y=None,
|
3261
3267
|
ax=None,
|
3262
|
-
|
3268
|
+
kind_: Union[str, list] = None, # Specify the kind of plot
|
3263
3269
|
verbose=False,
|
3264
3270
|
**kwargs,
|
3265
3271
|
):
|
3266
3272
|
# You can call the original plotxy function if needed
|
3267
3273
|
# or simply replicate the functionality here
|
3268
|
-
return plotxy(data, x, y, ax,
|
3274
|
+
return plotxy(data, x=x, y=y, ax=ax, kind_=kind_, verbose=verbose, **kwargs)
|
3269
3275
|
|
3270
3276
|
|
3271
3277
|
def plotxy(
|
@@ -3353,7 +3359,7 @@ def plotxy(
|
|
3353
3359
|
|
3354
3360
|
# ============ preprocess data ============
|
3355
3361
|
try:
|
3356
|
-
data = df_preprocessing_(data, kind=kind_[0])
|
3362
|
+
data = df_preprocessing_(data, kind=kind_[0])
|
3357
3363
|
if "variable" in data.columns and "value" in data.columns:
|
3358
3364
|
x, y = "variable", "value"
|
3359
3365
|
except Exception as e:
|
@@ -3903,7 +3909,7 @@ def df_preprocessing_(data, kind, verbose=False):
|
|
3903
3909
|
"pointplot", # Works well with wide format
|
3904
3910
|
"ellipse",
|
3905
3911
|
]
|
3906
|
-
|
3912
|
+
print(kind)
|
3907
3913
|
# Wide format (e.g., for heatmap and pairplot)
|
3908
3914
|
if kind in wide_kinds:
|
3909
3915
|
if df_format_ != "wide":
|
py2ls/stats.py
CHANGED
@@ -8,7 +8,7 @@ import matplotlib.pyplot as plt
|
|
8
8
|
import warnings
|
9
9
|
|
10
10
|
warnings.filterwarnings("ignore", category=RuntimeWarning)
|
11
|
-
|
11
|
+
from .ips import df2array
|
12
12
|
|
13
13
|
# FuncStars --v 0.1.1
|
14
14
|
def FuncStars(
|
@@ -902,148 +902,5 @@ def df_wide_long(df):
|
|
902
902
|
return "Long"
|
903
903
|
|
904
904
|
|
905
|
-
def sort_rows_move_nan(arr, sort=False):
|
906
|
-
# Handle edge cases where all values are NaN
|
907
|
-
if np.all(np.isnan(arr)):
|
908
|
-
return arr # Return unchanged if the entire array is NaN
|
909
|
-
|
910
|
-
if sort:
|
911
|
-
# Replace NaNs with a temporary large value for sorting
|
912
|
-
temp_value = (
|
913
|
-
np.nanmax(arr[np.isfinite(arr)]) + 1 if np.any(np.isfinite(arr)) else np.inf
|
914
|
-
)
|
915
|
-
arr_no_nan = np.where(np.isnan(arr), temp_value, arr)
|
916
|
-
|
917
|
-
# Sort each row
|
918
|
-
sorted_arr = np.sort(arr_no_nan, axis=1)
|
919
|
-
|
920
|
-
# Move NaNs to the end
|
921
|
-
result_arr = np.where(sorted_arr == temp_value, np.nan, sorted_arr)
|
922
|
-
else:
|
923
|
-
result_rows = []
|
924
|
-
for row in arr:
|
925
|
-
# Separate non-NaN and NaN values
|
926
|
-
non_nan_values = row[~np.isnan(row)]
|
927
|
-
nan_count = np.isnan(row).sum()
|
928
|
-
# Create a new row with non-NaN values followed by NaNs
|
929
|
-
new_row = np.concatenate([non_nan_values, [np.nan] * nan_count])
|
930
|
-
result_rows.append(new_row)
|
931
|
-
# Convert the list of rows back into a 2D NumPy array
|
932
|
-
result_arr = np.array(result_rows)
|
933
|
-
|
934
|
-
# Remove rows/columns that contain only NaNs
|
935
|
-
clean_arr = result_arr[~np.isnan(result_arr).all(axis=1)]
|
936
|
-
clean_arr_ = clean_arr[:, ~np.isnan(clean_arr).all(axis=0)]
|
937
|
-
|
938
|
-
return clean_arr_
|
939
|
-
|
940
|
-
|
941
|
-
def df2array(data: pd.DataFrame, x=None, y=None, hue=None, sort=False):
|
942
|
-
if hue is None:
|
943
|
-
a = []
|
944
|
-
if sort:
|
945
|
-
cat_x = np.sort(data[x].unique().tolist()).tolist()
|
946
|
-
else:
|
947
|
-
cat_x = data[x].unique().tolist()
|
948
|
-
for i, x_ in enumerate(cat_x):
|
949
|
-
new_ = data.loc[data[x] == x_, y].to_list()
|
950
|
-
a = padcat(a, new_, axis=0)
|
951
|
-
return sort_rows_move_nan(a).T
|
952
|
-
else:
|
953
|
-
a = []
|
954
|
-
if sort:
|
955
|
-
cat_x = np.sort(data[x].unique().tolist()).tolist()
|
956
|
-
cat_hue = np.sort(data[hue].unique().tolist()).tolist()
|
957
|
-
else:
|
958
|
-
cat_x = data[x].unique().tolist()
|
959
|
-
cat_hue = data[hue].unique().tolist()
|
960
|
-
for i, x_ in enumerate(cat_x):
|
961
|
-
for j, hue_ in enumerate(cat_hue):
|
962
|
-
new_ = data.loc[(data[x] == x_) & (data[hue] == hue_), y].to_list()
|
963
|
-
a = padcat(a, new_, axis=0)
|
964
|
-
return sort_rows_move_nan(a).T
|
965
|
-
|
966
|
-
|
967
|
-
def array2df(data: np.ndarray):
|
968
|
-
df = pd.DataFrame()
|
969
|
-
df["group"] = (
|
970
|
-
np.tile(
|
971
|
-
["group" + str(i) for i in range(1, data.shape[1] + 1)], [data.shape[0], 1]
|
972
|
-
)
|
973
|
-
.reshape(-1, 1, order="F")[:, 0]
|
974
|
-
.tolist()
|
975
|
-
)
|
976
|
-
df["value"] = data.reshape(-1, 1, order="F")
|
977
|
-
return df
|
978
|
-
|
979
|
-
|
980
|
-
def padcat(*args, fill_value=np.nan, axis=1, order="row"):
|
981
|
-
"""
|
982
|
-
Concatenate vectors with padding.
|
983
|
-
|
984
|
-
Parameters:
|
985
|
-
*args : variable number of list or 1D arrays
|
986
|
-
Input arrays to concatenate.
|
987
|
-
fill_value : scalar, optional
|
988
|
-
The value to use for padding the shorter lists (default is np.nan).
|
989
|
-
axis : int, optional
|
990
|
-
The axis along which to concatenate (0 for rows, 1 for columns, default is 1).
|
991
|
-
order : str, optional
|
992
|
-
The order for flattening when required: "row" or "column" (default is "row").
|
993
|
-
|
994
|
-
Returns:
|
995
|
-
np.ndarray
|
996
|
-
A 2D array with the input arrays concatenated along the specified axis,
|
997
|
-
padded with fill_value where necessary.
|
998
|
-
"""
|
999
|
-
# Set the order for processing
|
1000
|
-
if "ro" in order.lower():
|
1001
|
-
order = "C" # row-major order
|
1002
|
-
else:
|
1003
|
-
order = "F" # column-major order
|
1004
|
-
|
1005
|
-
# Process input arrays based on their dimensions
|
1006
|
-
processed_arrays = []
|
1007
|
-
for arg in args:
|
1008
|
-
arr = np.asarray(arg)
|
1009
|
-
if arr.ndim == 1:
|
1010
|
-
processed_arrays.append(arr) # Keep 1D arrays as is
|
1011
|
-
elif arr.ndim == 2:
|
1012
|
-
if axis == 0:
|
1013
|
-
# If concatenating along rows, split 2D arrays into 1D arrays row-wise
|
1014
|
-
processed_arrays.extend(arr)
|
1015
|
-
elif axis == 1:
|
1016
|
-
# If concatenating along columns, split 2D arrays into 1D arrays column-wise
|
1017
|
-
processed_arrays.extend(arr.T)
|
1018
|
-
else:
|
1019
|
-
raise ValueError("axis must be 0 or 1")
|
1020
|
-
else:
|
1021
|
-
raise ValueError("Input arrays must be 1D or 2D")
|
1022
|
-
|
1023
|
-
if axis == 0:
|
1024
|
-
# Concatenate along rows
|
1025
|
-
max_len = max(arr.size for arr in processed_arrays)
|
1026
|
-
result = np.full((len(processed_arrays), max_len), fill_value)
|
1027
|
-
for i, arr in enumerate(processed_arrays):
|
1028
|
-
result[i, : arr.size] = arr
|
1029
|
-
elif axis == 1:
|
1030
|
-
# Concatenate along columns
|
1031
|
-
max_len = max(arr.size for arr in processed_arrays)
|
1032
|
-
result = np.full((max_len, len(processed_arrays)), fill_value)
|
1033
|
-
for i, arr in enumerate(processed_arrays):
|
1034
|
-
result[: arr.size, i] = arr
|
1035
|
-
else:
|
1036
|
-
raise ValueError("axis must be 0 or 1")
|
1037
|
-
|
1038
|
-
return result
|
1039
905
|
|
1040
906
|
|
1041
|
-
# # Example usage:
|
1042
|
-
# a = [1, np.nan]
|
1043
|
-
# b = [1, 3, 4, np.nan, 2, np.nan]
|
1044
|
-
# c = [1, 2, 3, 4, 5, 6, 7, 8, 10]
|
1045
|
-
# d = padcat(a, b)
|
1046
|
-
# result1 = padcat(d, c)
|
1047
|
-
# result2 = padcat(a, b, c)
|
1048
|
-
# print("Result of padcat(d, c):\n", result1)
|
1049
|
-
# print("Result of padcat(a, b, c):\n", result2)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: py2ls
|
3
|
-
Version: 0.2.5.
|
3
|
+
Version: 0.2.5.15
|
4
4
|
Summary: py(thon)2(too)ls
|
5
5
|
Author: Jianfeng
|
6
6
|
Author-email: Jianfeng.Liu0413@gmail.com
|
@@ -14,239 +14,92 @@ Classifier: Programming Language :: Python :: 3.9
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.10
|
15
15
|
Classifier: Programming Language :: Python :: 3.11
|
16
16
|
Classifier: Programming Language :: Python :: 3.12
|
17
|
+
Provides-Extra: full
|
18
|
+
Provides-Extra: light
|
17
19
|
Provides-Extra: ml
|
18
20
|
Provides-Extra: neuroscience
|
19
|
-
Requires-Dist:
|
20
|
-
Requires-Dist:
|
21
|
-
Requires-Dist:
|
22
|
-
Requires-Dist:
|
23
|
-
Requires-Dist:
|
24
|
-
Requires-Dist:
|
25
|
-
Requires-Dist:
|
26
|
-
Requires-Dist:
|
27
|
-
Requires-Dist:
|
28
|
-
Requires-Dist:
|
29
|
-
Requires-Dist:
|
30
|
-
Requires-Dist:
|
31
|
-
Requires-Dist:
|
32
|
-
Requires-Dist:
|
33
|
-
Requires-Dist:
|
34
|
-
Requires-Dist:
|
35
|
-
Requires-Dist:
|
36
|
-
Requires-Dist:
|
37
|
-
Requires-Dist:
|
38
|
-
Requires-Dist:
|
39
|
-
Requires-Dist:
|
40
|
-
Requires-Dist:
|
41
|
-
Requires-Dist:
|
42
|
-
Requires-Dist:
|
43
|
-
Requires-Dist:
|
44
|
-
Requires-Dist:
|
45
|
-
Requires-Dist:
|
46
|
-
Requires-Dist:
|
47
|
-
Requires-Dist:
|
48
|
-
Requires-Dist:
|
49
|
-
Requires-Dist:
|
50
|
-
Requires-Dist:
|
51
|
-
Requires-Dist:
|
52
|
-
Requires-Dist:
|
53
|
-
Requires-Dist:
|
54
|
-
Requires-Dist:
|
55
|
-
Requires-Dist:
|
56
|
-
Requires-Dist:
|
57
|
-
Requires-Dist:
|
58
|
-
Requires-Dist:
|
59
|
-
Requires-Dist:
|
60
|
-
Requires-Dist:
|
61
|
-
Requires-Dist:
|
62
|
-
Requires-Dist:
|
63
|
-
Requires-Dist:
|
64
|
-
Requires-Dist:
|
65
|
-
Requires-Dist:
|
66
|
-
Requires-Dist:
|
67
|
-
Requires-Dist:
|
68
|
-
Requires-Dist:
|
69
|
-
Requires-Dist:
|
70
|
-
Requires-Dist:
|
71
|
-
Requires-Dist:
|
72
|
-
Requires-Dist:
|
73
|
-
Requires-Dist:
|
74
|
-
Requires-Dist:
|
75
|
-
Requires-Dist:
|
76
|
-
Requires-Dist:
|
77
|
-
Requires-Dist:
|
78
|
-
Requires-Dist:
|
79
|
-
Requires-Dist:
|
80
|
-
Requires-Dist:
|
81
|
-
Requires-Dist:
|
82
|
-
Requires-Dist:
|
83
|
-
Requires-Dist:
|
84
|
-
Requires-Dist:
|
85
|
-
Requires-Dist:
|
86
|
-
Requires-Dist:
|
87
|
-
Requires-Dist:
|
88
|
-
Requires-Dist:
|
89
|
-
Requires-Dist:
|
90
|
-
Requires-Dist:
|
91
|
-
Requires-Dist:
|
92
|
-
Requires-Dist:
|
93
|
-
Requires-Dist:
|
94
|
-
Requires-Dist:
|
95
|
-
Requires-Dist:
|
96
|
-
Requires-Dist:
|
97
|
-
Requires-Dist:
|
98
|
-
Requires-Dist:
|
99
|
-
Requires-Dist:
|
100
|
-
Requires-Dist:
|
101
|
-
Requires-Dist: jsonschema (>=4.17.3)
|
102
|
-
Requires-Dist: jsonschema-specifications (>=2023.12.1)
|
103
|
-
Requires-Dist: jupyter_client (>=8.6.2)
|
104
|
-
Requires-Dist: jupyter_core (>=5.7.2)
|
105
|
-
Requires-Dist: jupyterlab_pygments (>=0.3.0)
|
106
|
-
Requires-Dist: keyring (>=24.3.1)
|
107
|
-
Requires-Dist: kiwisolver (>=1.4.5)
|
108
|
-
Requires-Dist: langdetect (>=1.0.9)
|
109
|
-
Requires-Dist: lazy_loader (>=0.4)
|
110
|
-
Requires-Dist: libretranslatepy (>=2.1.1)
|
111
|
-
Requires-Dist: llvmlite (>=0.42.0)
|
112
|
-
Requires-Dist: locket (>=1.0.0)
|
113
|
-
Requires-Dist: lxml (>=4.9.4)
|
114
|
-
Requires-Dist: matplotlib (>=3.9.1)
|
115
|
-
Requires-Dist: matplotlib-inline (>=0.1.7)
|
116
|
-
Requires-Dist: mccabe (>=0.7.0)
|
117
|
-
Requires-Dist: memory-profiler (>=0.61.0)
|
118
|
-
Requires-Dist: mergedeep (>=1.3.4)
|
119
|
-
Requires-Dist: mistune (>=3.0.2)
|
120
|
-
Requires-Dist: mkdocs (>=1.6.0)
|
121
|
-
Requires-Dist: mkdocs-get-deps (>=0.2.0)
|
122
|
-
Requires-Dist: mne (>=1.7.1) ; extra == "neuroscience"
|
123
|
-
Requires-Dist: more-itertools (>=10.3.0)
|
124
|
-
Requires-Dist: mpmath (>=1.3.0)
|
125
|
-
Requires-Dist: msgpack (>=1.0.8)
|
126
|
-
Requires-Dist: msoffcrypto-tool (>=5.4.2)
|
127
|
-
Requires-Dist: mtscomp (>=1.0.2)
|
128
|
-
Requires-Dist: nbclient (>=0.10.0)
|
129
|
-
Requires-Dist: nbconvert (>=7.16.4)
|
130
|
-
Requires-Dist: nbformat (>=5.10.4)
|
131
|
-
Requires-Dist: neo (>=0.13.1) ; extra == "neuroscience"
|
132
|
-
Requires-Dist: nest-asyncio (>=1.6.0)
|
133
|
-
Requires-Dist: networkx (>=3.3)
|
134
|
-
Requires-Dist: nltk (>=3.8.1)
|
135
|
-
Requires-Dist: nuitka (>=2.5.9)
|
136
|
-
Requires-Dist: numba (>=0.59.1)
|
137
|
-
Requires-Dist: numcodecs (>=0.13.0)
|
138
|
-
Requires-Dist: numerizer (>=0.2.3)
|
139
|
-
Requires-Dist: numpy (>=1.26.4,<2.0.0)
|
140
|
-
Requires-Dist: onnxruntime (>=1.18.1)
|
141
|
-
Requires-Dist: opencv-contrib-python (>=4.10.0.84)
|
142
|
-
Requires-Dist: opencv-python (>=4.10.0.84)
|
143
|
-
Requires-Dist: opencv-python-headless (>=4.10.0.84)
|
144
|
-
Requires-Dist: openpyxl (>=3.1.5)
|
145
|
-
Requires-Dist: outcome (>=1.3.0.post0)
|
146
|
-
Requires-Dist: packaging (>=24.1)
|
147
|
-
Requires-Dist: pandas (>=2.2.2)
|
148
|
-
Requires-Dist: pandas-flavor (>=0.6.0)
|
149
|
-
Requires-Dist: pandocfilters (>=1.5.1)
|
150
|
-
Requires-Dist: parso (>=0.8.4)
|
151
|
-
Requires-Dist: partd (>=1.4.2)
|
152
|
-
Requires-Dist: pathspec (>=0.12.1)
|
153
|
-
Requires-Dist: patsy (>=0.5.6)
|
154
|
-
Requires-Dist: pdf2image (>=1.17.0)
|
155
|
-
Requires-Dist: pdf2img (>=0.1.2)
|
156
|
-
Requires-Dist: pexpect (>=4.9.0)
|
157
|
-
Requires-Dist: phonenumbers (>=8.13.51)
|
158
|
-
Requires-Dist: phylib (>=2.6.0)
|
159
|
-
Requires-Dist: pikepdf (>=9.1.0)
|
160
|
-
Requires-Dist: pillow (>=10.4.0)
|
161
|
-
Requires-Dist: pingouin (>=0.5.4)
|
162
|
-
Requires-Dist: pkginfo (>=1.11.1)
|
163
|
-
Requires-Dist: platformdirs (>=3.11.0)
|
164
|
-
Requires-Dist: plotly (>=5.23.0)
|
165
|
-
Requires-Dist: pluggy (>=1.5.0)
|
166
|
-
Requires-Dist: pooch (>=1.8.2)
|
167
|
-
Requires-Dist: probeinterface (>=0.2.23)
|
168
|
-
Requires-Dist: prompt_toolkit (>=3.0.47)
|
169
|
-
Requires-Dist: protobuf (>=5.27.2)
|
170
|
-
Requires-Dist: psutil (>=5.9.8)
|
171
|
-
Requires-Dist: ptyprocess (>=0.7.0)
|
172
|
-
Requires-Dist: pure_eval (>=0.2.3)
|
173
|
-
Requires-Dist: py-cpuinfo (>=9.0.0)
|
174
|
-
Requires-Dist: pycodestyle (>=2.12.0)
|
175
|
-
Requires-Dist: pycparser (>=2.22)
|
176
|
-
Requires-Dist: pyflakes (>=3.2.0)
|
177
|
-
Requires-Dist: pyparsing (>=3.1.2)
|
178
|
-
Requires-Dist: pyproject_hooks (>=1.1.0)
|
179
|
-
Requires-Dist: pyrsistent (>=0.20.0)
|
180
|
-
Requires-Dist: pytest (>=8.3.1)
|
181
|
-
Requires-Dist: pytest-cov (>=5.0.0)
|
182
|
-
Requires-Dist: pytest-qt (>=4.4.0)
|
183
|
-
Requires-Dist: python-box (>=7.2.0)
|
184
|
-
Requires-Dist: python-dateutil (>=2.9.0.post0)
|
185
|
-
Requires-Dist: python-docx (>=1.1.2)
|
186
|
-
Requires-Dist: python-dotenv (>=1.0.1)
|
187
|
-
Requires-Dist: python-pptx (>=0.6.23)
|
188
|
-
Requires-Dist: pytz (>=2024.1)
|
189
|
-
Requires-Dist: pyyaml_env_tag (>=0.1)
|
190
|
-
Requires-Dist: pyzmq (>=26.0.3)
|
191
|
-
Requires-Dist: qtconsole (>=5.5.2)
|
192
|
-
Requires-Dist: quantities (>=0.15.0)
|
193
|
-
Requires-Dist: rapidfuzz (>=3.9.5)
|
194
|
-
Requires-Dist: referencing (>=0.35.1)
|
195
|
-
Requires-Dist: regex (>=2024.5.15)
|
196
|
-
Requires-Dist: rembg (>=2.0.57)
|
197
|
-
Requires-Dist: requests (>=2.32.3)
|
198
|
-
Requires-Dist: requests-toolbelt (>=1.0.0)
|
199
|
-
Requires-Dist: responses (>=0.25.3)
|
200
|
-
Requires-Dist: rfc3986 (>=1.5.0)
|
201
|
-
Requires-Dist: rpds-py (>=0.18.1)
|
202
|
-
Requires-Dist: scikit-image (>=0.23.2)
|
203
|
-
Requires-Dist: scikit-learn (>=1.5.1) ; extra == "ml"
|
204
|
-
Requires-Dist: scipy (>=1.14.0)
|
205
|
-
Requires-Dist: scrapy (>=2.12.0)
|
206
|
-
Requires-Dist: seaborn (>=0.13.2)
|
207
|
-
Requires-Dist: selenium (>=4.23.1)
|
208
|
-
Requires-Dist: setuptools (>=70.3.0)
|
209
|
-
Requires-Dist: shellingham (>=1.5.4)
|
210
|
-
Requires-Dist: six (>=1.16.0)
|
211
|
-
Requires-Dist: skorch (>=1.0.0) ; extra == "ml"
|
212
|
-
Requires-Dist: sniffio (>=1.3.1)
|
213
|
-
Requires-Dist: sortedcontainers (>=2.4.0)
|
214
|
-
Requires-Dist: soupsieve (>=2.5)
|
215
|
-
Requires-Dist: stack-data (>=0.6.3)
|
216
|
-
Requires-Dist: statsmodels (>=0.14.2)
|
217
|
-
Requires-Dist: stem (>=1.8.2)
|
218
|
-
Requires-Dist: streamlit (>=1.41.0)
|
219
|
-
Requires-Dist: streamlit-autorefresh (>=1.0.1)
|
220
|
-
Requires-Dist: sympy (>=1.13.1)
|
221
|
-
Requires-Dist: tabulate (>=0.9.0)
|
222
|
-
Requires-Dist: tenacity (>=8.5.0)
|
223
|
-
Requires-Dist: threadpoolctl (>=3.5.0)
|
224
|
-
Requires-Dist: tifffile (>=2024.7.24)
|
225
|
-
Requires-Dist: tinycss2 (>=1.3.0)
|
226
|
-
Requires-Dist: tomlkit (>=0.13.0)
|
227
|
-
Requires-Dist: toolz (>=0.12.1)
|
228
|
-
Requires-Dist: torch (>=2.4.0) ; extra == "ml"
|
229
|
-
Requires-Dist: tornado (>=6.4.1)
|
230
|
-
Requires-Dist: tqdm (>=4.66.4)
|
231
|
-
Requires-Dist: traitlets (>=5.14.3)
|
232
|
-
Requires-Dist: translate (>=3.6.1)
|
233
|
-
Requires-Dist: trio (>=0.25.1)
|
234
|
-
Requires-Dist: trio-websocket (>=0.11.1)
|
235
|
-
Requires-Dist: trove-classifiers (>=2024.7.2)
|
236
|
-
Requires-Dist: typing_extensions (>=4.12.2)
|
237
|
-
Requires-Dist: tzdata (>=2024.1)
|
238
|
-
Requires-Dist: tzlocal (>=5.2)
|
239
|
-
Requires-Dist: urllib3 (>=2.2.2)
|
240
|
-
Requires-Dist: virtualenv (>=20.26.3)
|
241
|
-
Requires-Dist: watchdog (>=4.0.1)
|
242
|
-
Requires-Dist: wcwidth (>=0.2.13)
|
243
|
-
Requires-Dist: webdriver-manager (>=4.0.1)
|
244
|
-
Requires-Dist: webencodings (>=0.5.1)
|
245
|
-
Requires-Dist: websocket-client (>=1.8.0)
|
246
|
-
Requires-Dist: wrapt (>=1.16.0)
|
247
|
-
Requires-Dist: wsproto (>=1.2.0)
|
248
|
-
Requires-Dist: xarray (>=2024.6.0) ; extra == "ml"
|
249
|
-
Requires-Dist: zarr (>=2.17.2)
|
21
|
+
Requires-Dist: GEOparse (>=2.0.4) ; extra == "full"
|
22
|
+
Requires-Dist: Pillow (>=11.2.1) ; extra == "light"
|
23
|
+
Requires-Dist: PyPDF2 (>=3.0.1) ; extra == "light"
|
24
|
+
Requires-Dist: PyYAML (>=6.0.1) ; extra == "light"
|
25
|
+
Requires-Dist: SQLAlchemy (>=2.0.37) ; extra == "full"
|
26
|
+
Requires-Dist: adjustText (>=1.3.0) ; extra == "full"
|
27
|
+
Requires-Dist: autogluon (>=1.2) ; extra == "full" or extra == "ml"
|
28
|
+
Requires-Dist: beautifulsoup4 (>=4.12.3) ; extra == "light"
|
29
|
+
Requires-Dist: catboost (>=1.2.8) ; extra == "full" or extra == "ml"
|
30
|
+
Requires-Dist: category_encoders (>=2.8.1) ; extra == "full"
|
31
|
+
Requires-Dist: chardet (>=3.0.4) ; extra == "light"
|
32
|
+
Requires-Dist: cryptography (>=45.0.3) ; extra == "light"
|
33
|
+
Requires-Dist: cycler (>=0.12.1) ; extra == "light"
|
34
|
+
Requires-Dist: docx2pdf (>=0.1.8) ; extra == "full"
|
35
|
+
Requires-Dist: fake-useragent (>=1.5.1) ; extra == "light"
|
36
|
+
Requires-Dist: folium (>=0.19.6) ; extra == "full"
|
37
|
+
Requires-Dist: fpdf (>=1.7.2) ; extra == "light"
|
38
|
+
Requires-Dist: fuzzywuzzy (>=0.18.0) ; extra == "full"
|
39
|
+
Requires-Dist: geopy (>=2.4.1) ; extra == "full"
|
40
|
+
Requires-Dist: gseapy (>=1.1.8) ; extra == "full"
|
41
|
+
Requires-Dist: gtts (>=2.5.4) ; extra == "full"
|
42
|
+
Requires-Dist: hdbscan (>=0.8.40) ; extra == "full"
|
43
|
+
Requires-Dist: img2pdf (>=0.5.1) ; extra == "full"
|
44
|
+
Requires-Dist: ipython (>=8.26.0) ; extra == "light"
|
45
|
+
Requires-Dist: langdetect (>=1.0.9) ; extra == "full"
|
46
|
+
Requires-Dist: lightgbm (>=4.6.0) ; extra == "full" or extra == "ml"
|
47
|
+
Requires-Dist: lxml (>=5.3.0) ; extra == "light"
|
48
|
+
Requires-Dist: matplotlib (>=3.9.1) ; extra == "light"
|
49
|
+
Requires-Dist: matplotlib-venn (>=1.1.2) ; extra == "full"
|
50
|
+
Requires-Dist: msoffcrypto-tool (>=5.4.2) ; extra == "full"
|
51
|
+
Requires-Dist: networkx (>=3.3) ; extra == "light"
|
52
|
+
Requires-Dist: nltk (>=3.8.1) ; extra == "light"
|
53
|
+
Requires-Dist: numerizer (>=0.2.3) ; extra == "full"
|
54
|
+
Requires-Dist: numpy (>=1.26.4,<2.0.0) ; extra == "light"
|
55
|
+
Requires-Dist: opencv-python-headless (>=4.10.0.84) ; extra == "full"
|
56
|
+
Requires-Dist: openlocationcode (>=1.0.1) ; extra == "full"
|
57
|
+
Requires-Dist: openpyxl (>=3.1.5) ; extra == "light"
|
58
|
+
Requires-Dist: pandas (>=2.2.2) ; extra == "light"
|
59
|
+
Requires-Dist: pdf2image (>=1.17.0) ; extra == "full"
|
60
|
+
Requires-Dist: phonenumbers (>=8.13.51) ; extra == "full"
|
61
|
+
Requires-Dist: pingouin (>=0.5.4) ; extra == "full"
|
62
|
+
Requires-Dist: pixels2svg (>=0.2.2) ; extra == "full"
|
63
|
+
Requires-Dist: psutil (>=5.9.8) ; extra == "light"
|
64
|
+
Requires-Dist: py-cpuinfo (>=9.0.0) ; extra == "full"
|
65
|
+
Requires-Dist: py7zr (>=0.22.0) ; extra == "full"
|
66
|
+
Requires-Dist: pyautogui (>=0.9.54) ; extra == "full"
|
67
|
+
Requires-Dist: pycryptodome (>=3.23.0) ; extra == "full"
|
68
|
+
Requires-Dist: pydeck (>=0.9.1) ; extra == "full"
|
69
|
+
Requires-Dist: pyperclip (>=1.9.0) ; extra == "full"
|
70
|
+
Requires-Dist: pypinyin (>=0.54.0) ; extra == "full"
|
71
|
+
Requires-Dist: python-box (>=7.2.0) ; extra == "light"
|
72
|
+
Requires-Dist: python-dateutil (>=2.9.0.post0) ; extra == "light"
|
73
|
+
Requires-Dist: python-docx (>=1.1.2) ; extra == "light"
|
74
|
+
Requires-Dist: pytz (>=2024.1) ; extra == "light"
|
75
|
+
Requires-Dist: pyvis (>=0.3.2) ; extra == "full"
|
76
|
+
Requires-Dist: rarfile (>=4.2) ; extra == "full"
|
77
|
+
Requires-Dist: realesrgan (>=0.3.0) ; extra == "full"
|
78
|
+
Requires-Dist: regex (>=2024.5.15) ; extra == "light"
|
79
|
+
Requires-Dist: rembg (>=2.0.57) ; extra == "full"
|
80
|
+
Requires-Dist: requests (>=2.32.3) ; extra == "light"
|
81
|
+
Requires-Dist: schedule (>=1.2.2) ; extra == "full"
|
82
|
+
Requires-Dist: scikit-image (>=0.23.2) ; extra == "full"
|
83
|
+
Requires-Dist: scikit-learn (>=1.5.1) ; extra == "full" or extra == "ml"
|
84
|
+
Requires-Dist: scipy (>=1.14.0) ; extra == "light"
|
85
|
+
Requires-Dist: seaborn (>=0.13.2) ; extra == "full"
|
86
|
+
Requires-Dist: selenium (>=4.23.1) ; extra == "light"
|
87
|
+
Requires-Dist: skimpy (>=0.0.15) ; extra == "full"
|
88
|
+
Requires-Dist: skorch (>=1.0.0) ; extra == "full" or extra == "ml"
|
89
|
+
Requires-Dist: statsmodels (>=0.14.2) ; extra == "full"
|
90
|
+
Requires-Dist: streamlit (>=1.41.0) ; extra == "full"
|
91
|
+
Requires-Dist: streamlit-folium (>=0.25.0) ; extra == "full"
|
92
|
+
Requires-Dist: striprtf (>=0.0.29) ; extra == "full"
|
93
|
+
Requires-Dist: symspellpy (>=6.9.0) ; extra == "full"
|
94
|
+
Requires-Dist: tensorflow (>=2.19.0) ; extra == "full" or extra == "ml"
|
95
|
+
Requires-Dist: textblob (>=0.18.0.post0) ; extra == "full"
|
96
|
+
Requires-Dist: torch (>=2.4.0) ; extra == "full" or extra == "ml"
|
97
|
+
Requires-Dist: tqdm (>=4.66.4) ; extra == "light"
|
98
|
+
Requires-Dist: umap (>=0.1.1) ; extra == "full"
|
99
|
+
Requires-Dist: validators (>=0.35.0) ; extra == "full"
|
100
|
+
Requires-Dist: venn (>=0.1.3) ; extra == "full"
|
101
|
+
Requires-Dist: webdriver-manager (>=4.0.1) ; extra == "light"
|
102
|
+
Requires-Dist: xgboost (>=3.0.2) ; extra == "full" or extra == "ml"
|
250
103
|
Description-Content-Type: text/markdown
|
251
104
|
|
252
105
|
# Install
|
@@ -255,6 +108,10 @@ Description-Content-Type: text/markdown
|
|
255
108
|
pip install py2ls
|
256
109
|
```
|
257
110
|
|
111
|
+
- Minimal version: pip install py2ls
|
112
|
+
- Light version: pip install py2ls[light]
|
113
|
+
- Full version: pip install py2ls[full]
|
114
|
+
- Or any combination like pip install py2ls[full,ml]
|
258
115
|
|
259
116
|
|
260
117
|
# ips
|