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/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, str) and element.strip():
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
- content = response.content.decode(response.encoding or 'utf-8', errors='replace')
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
- xangle = 30 if max([len(i) for i in xticklabels]) > 50 else 0
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
- kind: Union[str, list] = None, # Specify the kind of plot
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, kind, verbose, **kwargs)
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.12
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: CacheControl (>=0.13.1)
20
- Requires-Dist: Cython (>=3.0.10)
21
- Requires-Dist: Deprecated (>=1.2.14)
22
- Requires-Dist: Jinja2 (>=3.1.4)
23
- Requires-Dist: Markdown (>=3.6)
24
- Requires-Dist: MarkupSafe (>=2.1.5)
25
- Requires-Dist: PyMatting (>=1.1.12)
26
- Requires-Dist: PyOpenGL (>=3.1.6)
27
- Requires-Dist: PyPDF2 (>=3.0.1)
28
- Requires-Dist: PyQt5 (>=5.15.0)
29
- Requires-Dist: PyQt5-Qt5 (>=5.15.0)
30
- Requires-Dist: PyQt5_sip (>=12.15.0)
31
- Requires-Dist: PyQtWebEngine (>=5.15.0)
32
- Requires-Dist: PyQtWebEngine-Qt5 (>=5.15.0)
33
- Requires-Dist: PySocks (>=1.7.1)
34
- Requires-Dist: PyYAML (>=6.0.1)
35
- Requires-Dist: Pygments (>=2.18.0)
36
- Requires-Dist: QtPy (>=2.4.1)
37
- Requires-Dist: SciencePlots (>=2.1.1)
38
- Requires-Dist: XlsxWriter (>=3.2.0)
39
- Requires-Dist: asciitree (>=0.3.3)
40
- Requires-Dist: asttokens (>=2.4.1)
41
- Requires-Dist: autogluon (>=1.2) ; extra == "ml"
42
- Requires-Dist: beautifulsoup4 (>=4.12.3)
43
- Requires-Dist: bleach (>=6.1.0)
44
- Requires-Dist: build (>=0.10.0)
45
- Requires-Dist: certifi (>=2024.6.2)
46
- Requires-Dist: cffi (>=1.16.0)
47
- Requires-Dist: chardet (>=3.0.4)
48
- Requires-Dist: charset-normalizer (>=3.3.2)
49
- Requires-Dist: cleo (>=2.1.0)
50
- Requires-Dist: click (>=8.1.7)
51
- Requires-Dist: cloudpickle (>=3.0.0)
52
- Requires-Dist: colorcet (>=3.1.0)
53
- Requires-Dist: coloredlogs (>=15.0.1)
54
- Requires-Dist: comm (>=0.2.2)
55
- Requires-Dist: contourpy (>=1.2.1)
56
- Requires-Dist: coverage (>=7.6.0)
57
- Requires-Dist: coveralls (>=4.0.1)
58
- Requires-Dist: crashtest (>=0.4.1)
59
- Requires-Dist: cycler (>=0.12.1)
60
- Requires-Dist: dask (>=2024.7.1)
61
- Requires-Dist: debugpy (>=1.8.2)
62
- Requires-Dist: decorator (>=5.1.1)
63
- Requires-Dist: defusedxml (>=0.7.1)
64
- Requires-Dist: distlib (>=0.3.8)
65
- Requires-Dist: docopt (>=0.6.2)
66
- Requires-Dist: docx (>=0.2.4)
67
- Requires-Dist: dulwich (>=0.21.7)
68
- Requires-Dist: executing (>=2.0.1)
69
- Requires-Dist: faiss-cpu (>=1.8.0.post1) ; extra == "ml"
70
- Requires-Dist: fake-useragent (>=1.5.1)
71
- Requires-Dist: fasteners (>=0.19)
72
- Requires-Dist: fastjsonschema (>=2.20.0)
73
- Requires-Dist: filelock (>=3.15.4)
74
- Requires-Dist: flake8 (>=7.1.0)
75
- Requires-Dist: flatbuffers (>=24.3.25)
76
- Requires-Dist: fonttools (>=4.53.1)
77
- Requires-Dist: fpdf (>=1.7.2)
78
- Requires-Dist: fsspec (>=2024.6.1)
79
- Requires-Dist: fuzzywuzzy (>=0.18.0)
80
- Requires-Dist: ghp-import (>=2.1.0)
81
- Requires-Dist: gluoncv (>=0.10.5) ; extra == "ml"
82
- Requires-Dist: googletrans (>=4.0.0rc1)
83
- Requires-Dist: h11 (>=0.9.0)
84
- Requires-Dist: h2 (>=3.2.0)
85
- Requires-Dist: h5py (>=3.11.0)
86
- Requires-Dist: hpack (>=3.0.0)
87
- Requires-Dist: hstspreload (>=2024.7.1)
88
- Requires-Dist: httpcore (>=0.9.0)
89
- Requires-Dist: httpx (>=0.13.3)
90
- Requires-Dist: humanfriendly (>=10.0)
91
- Requires-Dist: hyperframe (>=5.2.0)
92
- Requires-Dist: idna (>=2.10)
93
- Requires-Dist: imageio (>=2.34.2)
94
- Requires-Dist: img2pdf (>=0.5.1)
95
- Requires-Dist: iniconfig (>=2.0.0)
96
- Requires-Dist: installer (>=0.7.0)
97
- Requires-Dist: ipykernel (>=6.29.5)
98
- Requires-Dist: ipython (>=8.26.0)
99
- Requires-Dist: jedi (>=0.19.1)
100
- Requires-Dist: joblib (>=1.4.2)
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