py2ls 0.1.0__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.
Files changed (64) hide show
  1. py2ls/.git/COMMIT_EDITMSG +1 -0
  2. py2ls/.git/FETCH_HEAD +1 -0
  3. py2ls/.git/HEAD +1 -0
  4. py2ls/.git/config +15 -0
  5. py2ls/.git/description +1 -0
  6. py2ls/.git/hooks/applypatch-msg.sample +15 -0
  7. py2ls/.git/hooks/commit-msg.sample +24 -0
  8. py2ls/.git/hooks/fsmonitor-watchman.sample +174 -0
  9. py2ls/.git/hooks/post-update.sample +8 -0
  10. py2ls/.git/hooks/pre-applypatch.sample +14 -0
  11. py2ls/.git/hooks/pre-commit.sample +49 -0
  12. py2ls/.git/hooks/pre-merge-commit.sample +13 -0
  13. py2ls/.git/hooks/pre-push.sample +53 -0
  14. py2ls/.git/hooks/pre-rebase.sample +169 -0
  15. py2ls/.git/hooks/pre-receive.sample +24 -0
  16. py2ls/.git/hooks/prepare-commit-msg.sample +42 -0
  17. py2ls/.git/hooks/push-to-checkout.sample +78 -0
  18. py2ls/.git/hooks/update.sample +128 -0
  19. py2ls/.git/index +0 -0
  20. py2ls/.git/info/exclude +6 -0
  21. py2ls/.git/logs/HEAD +1 -0
  22. py2ls/.git/logs/refs/heads/main +1 -0
  23. py2ls/.git/logs/refs/remotes/origin/HEAD +1 -0
  24. py2ls/.git/logs/refs/remotes/origin/main +1 -0
  25. py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46 +0 -0
  26. py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971 +0 -0
  27. py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9 +0 -0
  28. py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2 +0 -0
  29. py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a +0 -0
  30. py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99 +0 -0
  31. py2ls/.git/objects/69/13c452ca319f7cbf6a0836dc10a5bb033c84e4 +0 -0
  32. py2ls/.git/objects/78/3d4167bc95c9d2175e0df03ef1c1c880ba75ab +0 -0
  33. py2ls/.git/objects/79/7ae089b2212a937840e215276005ce76881307 +0 -0
  34. py2ls/.git/objects/7e/5956c806b5edc344d46dab599dec337891ba1f +1 -0
  35. py2ls/.git/objects/8e/55a7d2b96184030211f20c9b9af201eefcac82 +0 -0
  36. py2ls/.git/objects/91/c69ad88fe0ba94aa7859fb5f7edac5e6f1a3f7 +0 -0
  37. py2ls/.git/objects/b0/56be4be89ba6b76949dd641df45bb7036050c8 +0 -0
  38. py2ls/.git/objects/b0/9cd7856d58590578ee1a4f3ad45d1310a97f87 +0 -0
  39. py2ls/.git/objects/d9/005f2cc7fc4e65f14ed5518276007c08cf2fd0 +0 -0
  40. py2ls/.git/objects/df/e0770424b2a19faf507a501ebfc23be8f54e7b +0 -0
  41. py2ls/.git/objects/e9/391ffe371f1cc43b42ef09b705d9c767c2e14f +0 -0
  42. py2ls/.git/objects/fc/292e793ecfd42240ac43be407023bd731fa9e7 +0 -0
  43. py2ls/.git/refs/heads/main +1 -0
  44. py2ls/.git/refs/remotes/origin/HEAD +1 -0
  45. py2ls/.git/refs/remotes/origin/main +1 -0
  46. py2ls/.gitattributes +2 -0
  47. py2ls/.gitignore +152 -0
  48. py2ls/LICENSE +201 -0
  49. py2ls/README.md +409 -0
  50. py2ls/__init__.py +17 -0
  51. py2ls/brain_atlas.py +145 -0
  52. py2ls/correlators.py +475 -0
  53. py2ls/dbhandler.py +97 -0
  54. py2ls/freqanalysis.py +800 -0
  55. py2ls/internet_finder.py +405 -0
  56. py2ls/ips.py +2844 -0
  57. py2ls/netfinder.py +780 -0
  58. py2ls/sleep_events_detectors.py +1350 -0
  59. py2ls/translator.py +686 -0
  60. py2ls/version.py +1 -0
  61. py2ls/wb_detector.py +169 -0
  62. py2ls-0.1.0.dist-info/METADATA +12 -0
  63. py2ls-0.1.0.dist-info/RECORD +64 -0
  64. py2ls-0.1.0.dist-info/WHEEL +4 -0
py2ls/version.py ADDED
@@ -0,0 +1 @@
1
+ version = "0.0.1"
py2ls/wb_detector.py ADDED
@@ -0,0 +1,169 @@
1
+ # Author: Jianfeng Liu (andyandhope@gmail.com)
2
+ # This script contains functions for detecting white balance bands in images and calculating the area under the curve for each band.
3
+
4
+ import numpy as np
5
+ import pandas as pd
6
+ import matplotlib.pyplot as plt
7
+ from scipy.signal import find_peaks
8
+ from scipy.integrate import simps
9
+ import cv2
10
+ import os
11
+ from PIL import Image
12
+
13
+ def find_pks(data_valid, n_bands, idx_corr=0, threshold=np.arange(0.8, 1, 0.01)):
14
+ # This function finds peaks in the data_valid array based on specified parameters.
15
+ # It adjusts the threshold until it finds the desired number of peaks.
16
+
17
+ # Find initial peaks using a peak finding function (not provided)
18
+ pks_pre, _ = find_peaks(data_valid)
19
+
20
+ # Iterate through different threshold values
21
+ for thr in threshold:
22
+ # Calculate distance between peaks based on threshold
23
+ distance = ((pks_pre[-1] - pks_pre[0]) // n_bands) * thr
24
+
25
+ # Find peaks using adjusted threshold and other parameters
26
+ peaks, _ = find_peaks(
27
+ (np.max(data_valid) - data_valid),
28
+ distance=distance,
29
+ height=(np.max(data_valid) - np.min(data_valid)) * 0.1,
30
+ )
31
+
32
+ # Check if the number of found peaks matches the expected number of bands
33
+ if peaks.shape[0] == (n_bands - 1):
34
+ break
35
+
36
+ # If the threshold reaches its last value and the desired number of peaks is not found, print a message
37
+ if thr == threshold[-1]:
38
+ print("did not find the perfect threshold")
39
+
40
+ # Adjust the peaks indices to reflect their position in the original data
41
+ peaks += idx_valid[0][0]
42
+
43
+ # Print information about found peaks, threshold, and distance
44
+ print(f"peaks={peaks}\npeaks_shape={len(peaks)}\nthr={thr}\ndistance={distance}")
45
+
46
+ # Return the peaks indices
47
+ return peaks
48
+
49
+
50
+ def cal_area(data, peaks, idx_valid_bands, x_range):
51
+ # This function calculates the area under the curve between adjacent peaks for each band.
52
+ area_values = []
53
+ for iband in idx_valid_bands:
54
+ if iband + 1 >= len(peaks):
55
+ break
56
+ # Define the x and y values within the band
57
+ x_band = x_range[peaks[iband] : peaks[iband + 1]]
58
+ y_band = data[peaks[iband] : peaks[iband + 1]]
59
+ # Integrate the y-values within the band to find the area
60
+ area = simps(y_band, x_band)
61
+ area_values.append(area)
62
+ return area_values
63
+
64
+ def check_load_img(dir_data):
65
+ if isinstance(dir_data,str):
66
+ rgb_image = cv2.imread(dir_data)
67
+ data = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2GRAY)
68
+ elif isinstance(dir_data, Image.Image):
69
+ # convert it
70
+ rgb_image = np.array(dir_data)
71
+ data = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2BGR)
72
+ else:
73
+ raise TypeError(f"{dir_data} is neither a directory nor a PIL.Image.Image instance.")
74
+ return data
75
+
76
+ def detect_wb_bands(dir_data, n_bands=24, weight=0.25, outlier=None):
77
+ # This function detects the white balance bands in an image.
78
+ """ param:
79
+ dir_data, [path]
80
+ n_bands [int], default 24 lanes. how many bands
81
+ weight=0.25, [float], 0.01 means keep more light bands, 0.5 remove
82
+ light band. the greater, the less sensitivity
83
+ outlier=None, [list], e.g., [0,3] means the 1st and 4th bands will
84
+ be removed, will not taken into account
85
+ """
86
+ # Load the image and convert it to grayscale
87
+ data = check_load_img(dir_data)
88
+
89
+ # Determine the bit depth of the image
90
+ if data.dtype == np.uint16:
91
+ bit_depth = 16
92
+ elif data.dtype == np.uint8:
93
+ bit_depth = 8
94
+ print(f"bit_depth:{bit_depth}")
95
+
96
+ # Invert the grayscale image
97
+ data_ivrt = 2**bit_depth - data
98
+ data_cum = np.sum(data_ivrt, axis=0)
99
+ x_range = np.arange(data.shape[1]) # Generate x-axis values
100
+
101
+ # Identify baseline and normalize cumulative intensity values
102
+ bsln = np.min(data_cum)
103
+ data_cum_bsln = data_cum - bsln
104
+ data_valid = np.zeros((data_cum_bsln.shape)) # Initialize valid data array
105
+ idx_valid = np.where(data_cum_bsln > np.max(data_cum_bsln) * weight)[
106
+ 0
107
+ ] # Determine valid indices
108
+ data_valid[idx_valid] = data_cum_bsln[idx_valid] # Assign valid data values
109
+
110
+ threshold = np.arange(0.5, 1, 0.01) # Define threshold range
111
+ for thr in threshold:
112
+ # Calculate distance between peaks based on threshold
113
+ distance = ((idx_valid[-1] - idx_valid[0]) // n_bands) * thr
114
+
115
+ # Find peaks using adjusted threshold
116
+ peaks, _ = find_peaks(
117
+ (np.max(data_valid) - data_valid),
118
+ distance=distance,
119
+ )
120
+
121
+ # Check if the number of found peaks matches the expected number of bands
122
+ if peaks.shape[0] == (n_bands - 1):
123
+ break
124
+
125
+ # If the threshold reaches its last value and the desired number of peaks is not found, print a message
126
+ if thr == threshold[-1]:
127
+ print("did not find the perfect threshold")
128
+
129
+ # Adjust the peaks indices to include the start and end of the data
130
+ peaks_tail = [idx_valid[0]]
131
+ for i in peaks:
132
+ peaks_tail.append(i)
133
+ peaks_tail.append(idx_valid[-1])
134
+
135
+ # Handle outlier bands if specified
136
+ if outlier is None:
137
+ idx_valid_bands = np.arange(n_bands)
138
+ else:
139
+ idx_valid_bands = np.delete(np.arange(n_bands), outlier)
140
+
141
+ # Calculate area under the curve for each band
142
+ area_values = cal_area(data_valid, peaks_tail, idx_valid_bands, x_range)
143
+
144
+ # Plot the detected bands on the image
145
+ fig, axs = plt.subplots(1, 1)
146
+ axs.imshow(data_ivrt)
147
+ axs.set_ylim([0, data.shape[0]])
148
+ axr = axs.twinx()
149
+ ylim_ = axr.get_ylim()
150
+ for iband in idx_valid_bands:
151
+ axr.fill_between(
152
+ x_range[peaks_tail[iband] : peaks_tail[iband + 1]],
153
+ 0,
154
+ data_cum_bsln[peaks_tail[iband] : peaks_tail[iband + 1]],
155
+ alpha=0.5,
156
+ )
157
+ axr.text(
158
+ peaks_tail[iband],
159
+ np.min(ylim_) - (np.max(ylim_) - np.min(ylim_)) * 0.05,
160
+ str(iband + 1),
161
+ )
162
+
163
+ axs.set_title("WB raw image")
164
+ axs.set_ylabel("Height pixels")
165
+ axs.set_xlabel("Width pixels")
166
+ axr.set_ylabel("Integrated intensity")
167
+
168
+ # Return area values and the plotted figure
169
+ return area_values, fig
@@ -0,0 +1,12 @@
1
+ Metadata-Version: 2.1
2
+ Name: py2ls
3
+ Version: 0.1.0
4
+ Summary:
5
+ Author: Jianfeng
6
+ Author-email: Jianfeng.Liu0413@gmail.com
7
+ Requires-Python: >=3.12,<4.0
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.12
10
+ Description-Content-Type: text/markdown
11
+
12
+
@@ -0,0 +1,64 @@
1
+ py2ls/.git/COMMIT_EDITMSG,sha256=EZlkQViEF6J68QzXxear21cPGLHAAEj7OaLgd1J5c2w,15
2
+ py2ls/.git/FETCH_HEAD,sha256=GW4RIooDnHicCnDuRlc37IaJnJNpdCkBud1P9ZR6KPY,100
3
+ py2ls/.git/HEAD,sha256=KNJb-Cr0wOK3L1CVmyvrhZ4-YLljCl6MYD2tTdsrboA,21
4
+ py2ls/.git/config,sha256=XswTg1Ts7_7IBDlKHh4OF_0Tq7v4wW7BXb6xSVInSec,345
5
+ py2ls/.git/description,sha256=ZzMxc0Ca26m45Twn1DDnOHqin5VHEZ9uOTBrScIXSjE,16
6
+ py2ls/.git/hooks/applypatch-msg.sample,sha256=AiNJeguLAzqlijpSG4YphpOGz3qw4vEBlj0yiqYhk_c,478
7
+ py2ls/.git/hooks/commit-msg.sample,sha256=H3TV6SkpebVz69WXQdRsuT_zkazdCD00C5Q3B1PZJDc,896
8
+ py2ls/.git/hooks/fsmonitor-watchman.sample,sha256=4FSZZOk4l7UZvY4zPAN-Uf_w-IuhPghqMxWSv4AfodA,4726
9
+ py2ls/.git/hooks/post-update.sample,sha256=gXZa8trvMjBh3LxeYfwWSBy3SzusmtihdLGGUjWG9sU,189
10
+ py2ls/.git/hooks/pre-applypatch.sample,sha256=4VxbRp6j4KaVvqbyyCvPjmKCEHSTnd2Ft34AB_8WVHU,424
11
+ py2ls/.git/hooks/pre-commit.sample,sha256=-a99lesSMezy66l3D-36jUeXoSsC1yQOmNVoIBJRJEo,1643
12
+ py2ls/.git/hooks/pre-merge-commit.sample,sha256=04JacDN5QOu9ClwHKYThMkWSDN-ImL0iXI0npt_Jy1M,416
13
+ py2ls/.git/hooks/pre-push.sample,sha256=7M6cfgTT9d2ditqBdT3R1UmpY0smdwBCtY3aACF9CGo,1374
14
+ py2ls/.git/hooks/pre-rebase.sample,sha256=T-vOhneQBSM4B29OZsxH77FIedGAl9HWHIJhhZ6qp7M,4898
15
+ py2ls/.git/hooks/pre-receive.sample,sha256=pMPSuce7P9jRRBwxvU7nGlldZrRPz0ndsxAlIyAWmYk,544
16
+ py2ls/.git/hooks/prepare-commit-msg.sample,sha256=6d3KpBif3dJe2X_Ix4nsp7bKFjkLI5KuMnbwyOGqRhk,1492
17
+ py2ls/.git/hooks/push-to-checkout.sample,sha256=pT0HQXmLKHxt16-mSu5HPzBeZdP0lGO7nXQI7DsSv18,2783
18
+ py2ls/.git/hooks/update.sample,sha256=jV8vqD4QPPCLV-qmdSHfkZT0XL28s32lKtWGCXoU0QY,3650
19
+ py2ls/.git/index,sha256=UiAHONBax9obxHeBw2XnO3CA5lQhLSiwBPj8Ovw0Ah0,1338
20
+ py2ls/.git/info/exclude,sha256=ZnH-g7egfIky7okWTR8nk7IxgFjri5jcXAbuClo7DsE,240
21
+ py2ls/.git/logs/HEAD,sha256=LmciHIgChKHvNdm7QcAGSSuJwCsh4x0R5qVCOKqs9Ow,170
22
+ py2ls/.git/logs/refs/heads/main,sha256=LmciHIgChKHvNdm7QcAGSSuJwCsh4x0R5qVCOKqs9Ow,170
23
+ py2ls/.git/logs/refs/remotes/origin/HEAD,sha256=CDj-_Vd1xu0AY9atNFqscjp8cDKa4GNMxJVinI1v3_Q,162
24
+ py2ls/.git/logs/refs/remotes/origin/main,sha256=gj8FTeA4KEjnjDE5H16EdDZm_Myl0IREl_iqX54-GqY,152
25
+ py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46,sha256=4ic5vOwEdfbGL8oARSVEeAnSoDs14-gggGZEL-61nYE,564
26
+ py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971,sha256=X18sHo17gQTxusNptoILoWxSfU0ulrsZvbETlBtV5aY,2327
27
+ py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9,sha256=91oqbTWfUE1d_hT_1ptYmRUb5pOQ1X4oxQxpF6NXjKU,8501
28
+ py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2,sha256=3Pf6NS8OTK4EdHZGVeJ421BtK7w4WJncQDBauZI_wW4,34
29
+ py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a,sha256=aJD9iF_LmYSrqDepXFBZKN1yMYbQczVkN_wnrDosBdI,5620
30
+ py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99,sha256=IQZi5MkbRu3ToRUPsRcXuh1Xa3pkAz_HDRCVhNL89ds,5753
31
+ py2ls/.git/objects/69/13c452ca319f7cbf6a0836dc10a5bb033c84e4,sha256=NYLQQZTfd0htZst42ALS2dmryv1q_l1N19ZfHEbz_38,3193
32
+ py2ls/.git/objects/78/3d4167bc95c9d2175e0df03ef1c1c880ba75ab,sha256=SK2QDjDBiDhVMG1I5p19g4RbEm2Rax7mYnxawmVZYxs,15523
33
+ py2ls/.git/objects/79/7ae089b2212a937840e215276005ce76881307,sha256=lQOKF2pb1JvipI3eT79X0-TuMGWsy1A-Yw4BCgKZNOM,33472
34
+ py2ls/.git/objects/7e/5956c806b5edc344d46dab599dec337891ba1f,sha256=sfqJBiSNj-gyJo4D7xkmRAo76mC2ztjqeZZsl4ifULA,162
35
+ py2ls/.git/objects/8e/55a7d2b96184030211f20c9b9af201eefcac82,sha256=yW-jVYeCTWR-nX3JJgA1g9YLPjzNsKlDmEOH290Ywx0,1221
36
+ py2ls/.git/objects/91/c69ad88fe0ba94aa7859fb5f7edac5e6f1a3f7,sha256=Kk2MWCO1OcShYuABGzp2O9LiWGDfDkcZtd0oy4nY6RU,9529
37
+ py2ls/.git/objects/b0/56be4be89ba6b76949dd641df45bb7036050c8,sha256=8Y7z30eNceBd5QIx09QfMp5cYBbrgUllmats0kvJEJ4,132
38
+ py2ls/.git/objects/b0/9cd7856d58590578ee1a4f3ad45d1310a97f87,sha256=82dx4hIdMpdcB64e5PU1s2gZFVkTvrj1cPwwJ_kasNU,4444
39
+ py2ls/.git/objects/d9/005f2cc7fc4e65f14ed5518276007c08cf2fd0,sha256=IJIoz93V7pf9yx43U1JdN8gBq_LWtw8A9Z2YMPnq_B0,1450
40
+ py2ls/.git/objects/df/e0770424b2a19faf507a501ebfc23be8f54e7b,sha256=vCdlxwEidekh8i-5TVMVgSLGk9DPZCZAbWqvGYSKQ9c,76
41
+ py2ls/.git/objects/e9/391ffe371f1cc43b42ef09b705d9c767c2e14f,sha256=RWTy2n8L2XxZQknBFyPczA0Aa_4gSG_Ybcr8e8v4ccc,10264
42
+ py2ls/.git/objects/fc/292e793ecfd42240ac43be407023bd731fa9e7,sha256=hGIYoxKWNT3IPwk3DE4l3FLBbUYF-kXcHcx7KrH9uS0,1971
43
+ py2ls/.git/refs/heads/main,sha256=uKGNQVhljreyO2Y49vGbb1FAz1yOtOwulP83EwO84I0,41
44
+ py2ls/.git/refs/remotes/origin/HEAD,sha256=K7aiSqD8bEhBAPXVGim7rYQc0sdV9dk_qiBOXbtOsrQ,30
45
+ py2ls/.git/refs/remotes/origin/main,sha256=uKGNQVhljreyO2Y49vGbb1FAz1yOtOwulP83EwO84I0,41
46
+ py2ls/.gitattributes,sha256=Gh2-F2vCM7SZ01pX23UT8pQcmauXWfF3gwyRSb6ZAFs,66
47
+ py2ls/.gitignore,sha256=y7GvbD_zZkjPVVIue8AyiuFkDMuUbvMaV65Lgu89To8,2763
48
+ py2ls/LICENSE,sha256=UOZ1F5fFDe3XXvG4oNnkL1-Ecun7zpHzRxjp-XsMeAo,11324
49
+ py2ls/README.md,sha256=uc1-9UZhOWvFQSamsVqhnD1vR4T_50zOiVDbz-tuubo,9726
50
+ py2ls/__init__.py,sha256=k05sUEKwWnAaOAn4VKCiPopcWrbmLLsZOuAt7vmUKWc,260
51
+ py2ls/brain_atlas.py,sha256=w1o5EelRjq89zuFJUNSz4Da8HnTCwAwDAZ4NU4a-bAY,5486
52
+ py2ls/correlators.py,sha256=RbOaJIPLCHJtUm5SFi_4dCJ7VFUPWR0PErfK3K26ad4,18243
53
+ py2ls/dbhandler.py,sha256=i9dNrpHyx0oIaFieHI4X4tsrCdN-aFxudPTDOgy9Ppo,3574
54
+ py2ls/freqanalysis.py,sha256=F4218VSPbgL5tnngh6xNCYuNnfR-F_QjECUUxrPYZss,32594
55
+ py2ls/internet_finder.py,sha256=I-jPepbBhpDaOAsD2MqbKMe1CBN8w1PYo0CjNFkaeeU,19149
56
+ py2ls/ips.py,sha256=E5u8kBybs2DnHzBTj_lQy8taNRiQpAY1uRRV4dy3Owg,119286
57
+ py2ls/netfinder.py,sha256=Woilmx31B1Uh3we19WLVa63ptw2YU4Z99KUqlq90eAY,29774
58
+ py2ls/sleep_events_detectors.py,sha256=36MCuRrpurn0Uvzpo3p3b3_JlVsRNHSWCXbJxCGM3mg,51546
59
+ py2ls/translator.py,sha256=QfDUO0-pXHGMBFZBefiBHzOrC93-__N5sUQY_VP4wes,29734
60
+ py2ls/version.py,sha256=CactNZqrHHYTPrkHKccy2WKXmaiUdtTgPqSjFyVXnJk,18
61
+ py2ls/wb_detector.py,sha256=7y6TmBUj9exCZeIgBAJ_9hwuhkDh1x_-yg4dvNY1_GQ,6284
62
+ py2ls-0.1.0.dist-info/METADATA,sha256=75PMsOFYdSIj5l3VAyw-KsuK3ZBPWhxJrAL8kAgouJ0,287
63
+ py2ls-0.1.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
64
+ py2ls-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: poetry-core 1.9.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any