py2ls 0.1.4.8__py3-none-any.whl → 0.1.5.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.
- py2ls/.git/COMMIT_EDITMSG +1 -1
- py2ls/.git/FETCH_HEAD +1 -1
- py2ls/.git/index +0 -0
- py2ls/.git/logs/HEAD +3 -0
- py2ls/.git/logs/refs/heads/main +3 -0
- py2ls/.git/logs/refs/remotes/origin/HEAD +5 -0
- py2ls/.git/logs/refs/remotes/origin/main +3 -0
- py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1 +0 -0
- py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34 +0 -0
- py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8 +2 -0
- py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad +0 -0
- py2ls/.git/objects/39/7ead045fbbcfb17c62019eb18fe21ed05dbee5 +0 -0
- py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042 +0 -0
- py2ls/.git/objects/62/4488173ed2c8936fa5cea3cf5dd3f26a30b86e +0 -0
- py2ls/.git/objects/6d/ee29dbdcc84edeeacede105110446f3ccac963 +0 -0
- py2ls/.git/objects/b7/2c9e75ab7d0afe594664650aa8f6c772f5ac64 +0 -0
- py2ls/.git/objects/bb/81ccc0513f18fc160b54a82861e9a80d23f4f6 +0 -0
- py2ls/.git/objects/cd/822b3574a88ebdd1ed82fd6983f37e626d52b4 +0 -0
- py2ls/.git/objects/d8/4688b54c0040a30976b3a6540bc47adf7ce680 +0 -0
- py2ls/.git/objects/f1/e50757fddc28b445545dc7e2759b54cdd0f42e +0 -0
- py2ls/.git/refs/heads/main +1 -1
- py2ls/.git/refs/remotes/origin/main +1 -1
- py2ls/__init__.py +2 -12
- py2ls/data/.DS_Store +0 -0
- py2ls/data/db2ls_sql_chtsht.json +39 -0
- py2ls/data/lang_code_iso639.json +97 -0
- py2ls/db2ls.py +356 -0
- py2ls/ips.py +160 -1190
- py2ls/stats.py +810 -0
- py2ls/stdshade.py +173 -0
- py2ls/translator.py +6 -99
- {py2ls-0.1.4.8.dist-info → py2ls-0.1.5.0.dist-info}/METADATA +1 -1
- {py2ls-0.1.4.8.dist-info → py2ls-0.1.5.0.dist-info}/RECORD +34 -16
- py2ls/dbhandler.py +0 -97
- {py2ls-0.1.4.8.dist-info → py2ls-0.1.5.0.dist-info}/WHEEL +0 -0
py2ls/stdshade.py
ADDED
@@ -0,0 +1,173 @@
|
|
1
|
+
from scipy.signal import savgol_filter
|
2
|
+
import numpy as np
|
3
|
+
import matplotlib.pyplot as plt
|
4
|
+
|
5
|
+
def stdshade(ax=None,*args, **kwargs):
|
6
|
+
|
7
|
+
def hue2rgb(hex_colors):
|
8
|
+
def hex_to_rgb(hex_color):
|
9
|
+
"""Converts a hexadecimal color code to RGB values."""
|
10
|
+
if hex_colors.startswith("#"):
|
11
|
+
hex_color = hex_color.lstrip("#")
|
12
|
+
return tuple(int(hex_color[i : i + 2], 16) / 255.0 for i in (0, 2, 4))
|
13
|
+
if isinstance(hex_colors, str):
|
14
|
+
return hex_to_rgb(hex_colors)
|
15
|
+
elif isinstance(hex_colors, (list)):
|
16
|
+
"""Converts a list of hexadecimal color codes to a list of RGB values."""
|
17
|
+
rgb_values = [hex_to_rgb(hex_color) for hex_color in hex_colors]
|
18
|
+
return rgb_values
|
19
|
+
if (
|
20
|
+
isinstance(ax, np.ndarray)
|
21
|
+
and ax.ndim == 2
|
22
|
+
and min(ax.shape) > 1
|
23
|
+
and max(ax.shape) > 1
|
24
|
+
):
|
25
|
+
y = ax
|
26
|
+
ax = plt.gca()
|
27
|
+
if ax is None:
|
28
|
+
ax = plt.gca()
|
29
|
+
alpha = 0.5
|
30
|
+
acolor = "k"
|
31
|
+
paraStdSem = "sem"
|
32
|
+
plotStyle = "-"
|
33
|
+
plotMarker = "none"
|
34
|
+
smth = 1
|
35
|
+
l_c_one = ["r", "g", "b", "m", "c", "y", "k", "w"]
|
36
|
+
l_style2 = ["--", "-."]
|
37
|
+
l_style1 = ["-", ":"]
|
38
|
+
l_mark = ["o", "+", "*", ".", "x", "_", "|", "s", "d", "^", "v", ">", "<", "p", "h"]
|
39
|
+
# Check each argument
|
40
|
+
for iarg in range(len(args)):
|
41
|
+
if (
|
42
|
+
isinstance(args[iarg], np.ndarray)
|
43
|
+
and args[iarg].ndim == 2
|
44
|
+
and min(args[iarg].shape) > 1
|
45
|
+
and max(args[iarg].shape) > 1
|
46
|
+
):
|
47
|
+
y = args[iarg]
|
48
|
+
# Except y, continuous data is 'F'
|
49
|
+
if (isinstance(args[iarg], np.ndarray) and args[iarg].ndim == 1) or isinstance(
|
50
|
+
args[iarg], range
|
51
|
+
):
|
52
|
+
x = args[iarg]
|
53
|
+
if isinstance(x, range):
|
54
|
+
x = np.arange(start=x.start, stop=x.stop, step=x.step)
|
55
|
+
# Only one number( 0~1), 'alpha' / color
|
56
|
+
if isinstance(args[iarg], (int, float)):
|
57
|
+
if np.size(args[iarg]) == 1 and 0 <= args[iarg] <= 1:
|
58
|
+
alpha = args[iarg]
|
59
|
+
if isinstance(args[iarg], (list, tuple)) and np.size(args[iarg]) == 3:
|
60
|
+
acolor = args[iarg]
|
61
|
+
acolor = tuple(acolor) if isinstance(acolor, list) else acolor
|
62
|
+
# Color / plotStyle /
|
63
|
+
if (
|
64
|
+
isinstance(args[iarg], str)
|
65
|
+
and len(args[iarg]) == 1
|
66
|
+
and args[iarg] in l_c_one
|
67
|
+
):
|
68
|
+
acolor = args[iarg]
|
69
|
+
else:
|
70
|
+
if isinstance(args[iarg], str):
|
71
|
+
if args[iarg] in ["sem", "std"]:
|
72
|
+
paraStdSem = args[iarg]
|
73
|
+
if args[iarg].startswith("#"):
|
74
|
+
acolor=hue2rgb(args[iarg])
|
75
|
+
if str2list(args[iarg])[0] in l_c_one:
|
76
|
+
if len(args[iarg]) == 3:
|
77
|
+
k = [i for i in str2list(args[iarg]) if i in l_c_one]
|
78
|
+
if k != []:
|
79
|
+
acolor = k[0]
|
80
|
+
st = [i for i in l_style2 if i in args[iarg]]
|
81
|
+
if st != []:
|
82
|
+
plotStyle = st[0]
|
83
|
+
elif len(args[iarg]) == 2:
|
84
|
+
k = [i for i in str2list(args[iarg]) if i in l_c_one]
|
85
|
+
if k != []:
|
86
|
+
acolor = k[0]
|
87
|
+
mk = [i for i in str2list(args[iarg]) if i in l_mark]
|
88
|
+
if mk != []:
|
89
|
+
plotMarker = mk[0]
|
90
|
+
st = [i for i in l_style1 if i in args[iarg]]
|
91
|
+
if st != []:
|
92
|
+
plotStyle = st[0]
|
93
|
+
if len(args[iarg]) == 1:
|
94
|
+
k = [i for i in str2list(args[iarg]) if i in l_c_one]
|
95
|
+
if k != []:
|
96
|
+
acolor = k[0]
|
97
|
+
mk = [i for i in str2list(args[iarg]) if i in l_mark]
|
98
|
+
if mk != []:
|
99
|
+
plotMarker = mk[0]
|
100
|
+
st = [i for i in l_style1 if i in args[iarg]]
|
101
|
+
if st != []:
|
102
|
+
plotStyle = st[0]
|
103
|
+
if len(args[iarg]) == 2:
|
104
|
+
st = [i for i in l_style2 if i in args[iarg]]
|
105
|
+
if st != []:
|
106
|
+
plotStyle = st[0]
|
107
|
+
# smth
|
108
|
+
if (
|
109
|
+
isinstance(args[iarg], (int, float))
|
110
|
+
and np.size(args[iarg]) == 1
|
111
|
+
and args[iarg] >= 1
|
112
|
+
):
|
113
|
+
smth = args[iarg]
|
114
|
+
|
115
|
+
if "x" not in locals() or x is None:
|
116
|
+
x = np.arange(1, y.shape[1] + 1)
|
117
|
+
elif len(x) < y.shape[1]:
|
118
|
+
y = y[:, x]
|
119
|
+
nRow = y.shape[0]
|
120
|
+
nCol = y.shape[1]
|
121
|
+
print(f"y was corrected, please confirm that {nRow} row, {nCol} col")
|
122
|
+
else:
|
123
|
+
x = np.arange(1, y.shape[1] + 1)
|
124
|
+
|
125
|
+
if x.shape[0] != 1:
|
126
|
+
x = x.T
|
127
|
+
yMean = np.nanmean(y, axis=0)
|
128
|
+
if smth > 1:
|
129
|
+
yMean = savgol_filter(np.nanmean(y, axis=0), smth, 1)
|
130
|
+
else:
|
131
|
+
yMean = np.nanmean(y, axis=0)
|
132
|
+
if paraStdSem == "sem":
|
133
|
+
if smth > 1:
|
134
|
+
wings = savgol_filter(np.nanstd(y, axis=0) / np.sqrt(y.shape[0]), smth, 1)
|
135
|
+
else:
|
136
|
+
wings = np.nanstd(y, axis=0) / np.sqrt(y.shape[0])
|
137
|
+
elif paraStdSem == "std":
|
138
|
+
if smth > 1:
|
139
|
+
wings = savgol_filter(np.nanstd(y, axis=0), smth, 1)
|
140
|
+
else:
|
141
|
+
wings = np.nanstd(y, axis=0)
|
142
|
+
|
143
|
+
fill_kws = kwargs.get('fill_kws', {})
|
144
|
+
line_kws = kwargs.get('line_kws', {})
|
145
|
+
fill = ax.fill_between(x, yMean + wings, yMean - wings, color=acolor, alpha=alpha, lw=0,**fill_kws)
|
146
|
+
if line_kws != {} and not any(key.lower() in ['lw', 'linewidth'] for key in line_kws.keys()):
|
147
|
+
line = ax.plot(x, yMean, color=acolor, lw=1.5, ls=plotStyle, marker=plotMarker, **line_kws)
|
148
|
+
else:
|
149
|
+
line = ax.plot(x, yMean, color=acolor, ls=plotStyle, marker=plotMarker, **line_kws)
|
150
|
+
return line[0], fill
|
151
|
+
# =============================================================================
|
152
|
+
# # for plot figures {Qiu et al.2023}
|
153
|
+
# =============================================================================
|
154
|
+
# =============================================================================
|
155
|
+
# plt.rcParams.update({'figure.max_open_warning': 0})
|
156
|
+
# # Output matplotlib figure to SVG with text as text, not curves
|
157
|
+
# plt.rcParams['svg.fonttype'] = 'none'
|
158
|
+
# plt.rcParams['pdf.fonttype'] = 42
|
159
|
+
#
|
160
|
+
# plt.rc('text', usetex=False)
|
161
|
+
# # plt.style.use('ggplot')
|
162
|
+
# plt.style.use('science')
|
163
|
+
# plt.rc('font', family='serif')
|
164
|
+
# plt.rcParams.update({
|
165
|
+
# "font.family": "serif", # specify font family here
|
166
|
+
# "font.serif": ["Arial"], # specify font here
|
167
|
+
# "font.size": 11})
|
168
|
+
# # plt.tight_layout()
|
169
|
+
# =============================================================================
|
170
|
+
# =============================================================================
|
171
|
+
# # axis spine
|
172
|
+
# # use it like: adjust_spines(ax, ['left', 'bottom'])
|
173
|
+
# =============================================================================
|
py2ls/translator.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import re
|
2
|
+
import json
|
2
3
|
import docx # pip install python-docx
|
3
4
|
from PyPDF2 import PdfReader
|
4
5
|
from langdetect import detect
|
@@ -58,105 +59,11 @@ def get_lang_code_iso639():
|
|
58
59
|
lang_code_iso639=dict([*zip(fullname,shortcut)])
|
59
60
|
return lang_code_iso639
|
60
61
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
'Afrikaans': 'af',
|
67
|
-
'Akan': 'ak',
|
68
|
-
'Albanian': 'sq',
|
69
|
-
'Amharic': 'am',
|
70
|
-
'Arabic': 'ar',
|
71
|
-
'Armenian': 'hy',
|
72
|
-
'Assamese': 'as',
|
73
|
-
# 'Avaric': 'av',
|
74
|
-
'Aymara': 'ay',
|
75
|
-
'Azerbaijani': 'az',
|
76
|
-
'Bashkir': 'ba',
|
77
|
-
'Basque': 'eu',
|
78
|
-
'Belarusian': 'be',
|
79
|
-
'Bislama': 'bi',
|
80
|
-
'Breton': 'br',
|
81
|
-
'Burmese': 'my',
|
82
|
-
'Catalan, Valencian': 'ca',
|
83
|
-
'Chamorro': 'ch',
|
84
|
-
'Chichewa, Chewa, Nyanja': 'ny',
|
85
|
-
'Chinese': 'zh',
|
86
|
-
'Corsican': 'co',
|
87
|
-
'Cree': 'cr',
|
88
|
-
'Croatian': 'hr',
|
89
|
-
'Danish': 'da',
|
90
|
-
'Dutch, Flemish': 'nl',
|
91
|
-
'Dzongkha': 'dz',
|
92
|
-
'English': 'en',
|
93
|
-
'Finnish': 'fi',
|
94
|
-
'French': 'fr',
|
95
|
-
'Galician': 'gl',
|
96
|
-
'Georgian': 'ka',
|
97
|
-
'German': 'de',
|
98
|
-
'Greek, Modern (1453–)': 'el',
|
99
|
-
'Gujarati': 'gu',
|
100
|
-
'Hausa': 'ha',
|
101
|
-
'Hebrew': 'he',
|
102
|
-
'Hindi': 'hi',
|
103
|
-
'Hungarian': 'hu',
|
104
|
-
'Icelandic': 'is',
|
105
|
-
'Italian': 'it',
|
106
|
-
'Kikuyu, Gikuyu': 'ki',
|
107
|
-
'Korean': 'ko',
|
108
|
-
'Kurdish': 'ku',
|
109
|
-
'Latin': 'la',
|
110
|
-
'Limburgan, Limburger, Limburgish': 'li',
|
111
|
-
'Luba-Katanga': 'lu',
|
112
|
-
'Macedonian': 'mk',
|
113
|
-
'Malay': 'ms',
|
114
|
-
'Nauru': 'na',
|
115
|
-
'North Ndebele': 'nd',
|
116
|
-
'Nepali': 'ne',
|
117
|
-
'Norwegian': 'no',
|
118
|
-
'Norwegian Nynorsk': 'nn',
|
119
|
-
'Sichuan Yi, Nuosu': 'ii',
|
120
|
-
'Occitan': 'oc',
|
121
|
-
'Ojibwa': 'oj',
|
122
|
-
'Oriya': 'or',
|
123
|
-
'Ossetian, Ossetic': 'os',
|
124
|
-
'Persian': 'fa',
|
125
|
-
'Punjabi, Panjabi': 'pa',
|
126
|
-
'Quechua': 'qu',
|
127
|
-
'Romanian, Moldavian, Moldovan': 'ro',
|
128
|
-
'Russian': 'ru',
|
129
|
-
'Samoan': 'sm',
|
130
|
-
'Sanskrit': 'sa',
|
131
|
-
'Serbian': 'sr',
|
132
|
-
'Shona': 'sn',
|
133
|
-
'Sinhala, Sinhalese': 'si',
|
134
|
-
'Slovenian': 'sl',
|
135
|
-
'Somali': 'so',
|
136
|
-
'Sundanese': 'su',
|
137
|
-
'Swahili': 'sw',
|
138
|
-
'Swati': 'ss',
|
139
|
-
'Tajik': 'tg',
|
140
|
-
'Tamil': 'ta',
|
141
|
-
'Telugu': 'te',
|
142
|
-
'Thai': 'th',
|
143
|
-
'Tibetan': 'bo',
|
144
|
-
'Tigrinya': 'ti',
|
145
|
-
'Tonga (Tonga Islands)': 'to',
|
146
|
-
'Tsonga': 'ts',
|
147
|
-
'Twi': 'tw',
|
148
|
-
'Ukrainian': 'uk',
|
149
|
-
'Urdu': 'ur',
|
150
|
-
'Uzbek': 'uz',
|
151
|
-
'Venda': 've',
|
152
|
-
'Vietnamese': 'vi',
|
153
|
-
'Volapük': 'vo',
|
154
|
-
'Welsh': 'cy',
|
155
|
-
'Wolof': 'wo',
|
156
|
-
'Xhosa': 'xh',
|
157
|
-
'Yiddish': 'yi',
|
158
|
-
'Yoruba': 'yo',
|
159
|
-
'Zulu': 'zu'}
|
62
|
+
def detect_lang(text, output='lang',verbose=True):
|
63
|
+
dir_curr_script=os.path.dirname(os.path.abspath(__file__))
|
64
|
+
dir_lang_code=dir_curr_script+"/data/lang_code_iso639.json"
|
65
|
+
with open(dir_lang_code, "r") as file:
|
66
|
+
lang_code_iso639 = json.load(file)
|
160
67
|
l_lang,l_code = [],[]
|
161
68
|
[[l_lang.append(v),l_code.append(k)] for v,k in lang_code_iso639.items()]
|
162
69
|
try:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
py2ls/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
2
|
-
py2ls/.git/COMMIT_EDITMSG,sha256=
|
3
|
-
py2ls/.git/FETCH_HEAD,sha256
|
2
|
+
py2ls/.git/COMMIT_EDITMSG,sha256=D-zrSGq7SOvKoes1LN7CjdO3CKzT1iov7qtEa1SfeKs,20
|
3
|
+
py2ls/.git/FETCH_HEAD,sha256=-VcbSEQggMjAywR171vGJ3V6maA_20WhC6AjtyZQOWg,100
|
4
4
|
py2ls/.git/HEAD,sha256=KNJb-Cr0wOK3L1CVmyvrhZ4-YLljCl6MYD2tTdsrboA,21
|
5
5
|
py2ls/.git/config,sha256=CL7WR7jU8VRchJwRooCBkXUMvuRoPdf3FWIBAOlap1c,378
|
6
6
|
py2ls/.git/description,sha256=ZzMxc0Ca26m45Twn1DDnOHqin5VHEZ9uOTBrScIXSjE,16
|
@@ -17,34 +17,41 @@ py2ls/.git/hooks/pre-receive.sample,sha256=pMPSuce7P9jRRBwxvU7nGlldZrRPz0ndsxAlI
|
|
17
17
|
py2ls/.git/hooks/prepare-commit-msg.sample,sha256=6d3KpBif3dJe2X_Ix4nsp7bKFjkLI5KuMnbwyOGqRhk,1492
|
18
18
|
py2ls/.git/hooks/push-to-checkout.sample,sha256=pT0HQXmLKHxt16-mSu5HPzBeZdP0lGO7nXQI7DsSv18,2783
|
19
19
|
py2ls/.git/hooks/update.sample,sha256=jV8vqD4QPPCLV-qmdSHfkZT0XL28s32lKtWGCXoU0QY,3650
|
20
|
-
py2ls/.git/index,sha256=
|
20
|
+
py2ls/.git/index,sha256=KnBXKHk0vrj4uZp4EYok6NChnC43qzhmQQ_3IQK9k2g,1391
|
21
21
|
py2ls/.git/info/exclude,sha256=ZnH-g7egfIky7okWTR8nk7IxgFjri5jcXAbuClo7DsE,240
|
22
|
-
py2ls/.git/logs/HEAD,sha256=
|
23
|
-
py2ls/.git/logs/refs/heads/main,sha256=
|
24
|
-
py2ls/.git/logs/refs/remotes/origin/HEAD,sha256=
|
25
|
-
py2ls/.git/logs/refs/remotes/origin/main,sha256=
|
22
|
+
py2ls/.git/logs/HEAD,sha256=KDy-71ywsGRlwiGKXUmYgZ-cS-GTBYMvaHQ8gM_T0JQ,2919
|
23
|
+
py2ls/.git/logs/refs/heads/main,sha256=KDy-71ywsGRlwiGKXUmYgZ-cS-GTBYMvaHQ8gM_T0JQ,2919
|
24
|
+
py2ls/.git/logs/refs/remotes/origin/HEAD,sha256=nd7egvRCnDKesgy_d766WNOlRDZae3agR_foSgGs1G0,6999
|
25
|
+
py2ls/.git/logs/refs/remotes/origin/main,sha256=cxI7Xz7qgDqX2lxmHw3FQkyfq8E4uvyefj2rxciWSQo,2584
|
26
|
+
py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1,sha256=hEQ8nqJnGsfFsuV5wc4cZas58rehXvT0v5ANx1zmMAY,584
|
27
|
+
py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34,sha256=NOyYvrJxATpK3aDdP1_stwkqOQRDwJn7DSy6isyKImE,925
|
26
28
|
py2ls/.git/objects/0b/409e1bc918277010f5679b402d1d1dda53e15c,sha256=y5S1XaGxJz1NXi-SPWjPC_NKIqqSbZv9oOg74MzBihY,156
|
27
29
|
py2ls/.git/objects/14/449a0e6ba4ea2f1a73acf63ef91c9c6193f9ed,sha256=PomZFmCUCQM1ii0wH-OJGSHLQCTqRtIwE5w3C0TtzSY,171
|
28
30
|
py2ls/.git/objects/15/a8e468aacfcb440e090020f36d0b985d45da23,sha256=xiRunMcN5I_B2hHgBUFupR-F0b8H_CQTmmAZG9XkZik,3215
|
29
31
|
py2ls/.git/objects/1a/b4585881a6a42889f01aa0cfe25fd5acfaf46f,sha256=iQsKMPNKUs4WQwhiLgXmG5V3xKyIgxmc13ZwbBATvhQ,165
|
32
|
+
py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8,sha256=DkqkGgVpp0Zdj20Cfr_ptCecgY-inluZoOabSa7S1Is,170
|
30
33
|
py2ls/.git/objects/1d/fe9d9633b24ea560354f4f93d39c6e5f163ea0,sha256=mV_84wLqIitnSYmzfrNpTzwVP9AmksiRI0Fjltwl0Pg,8872
|
31
34
|
py2ls/.git/objects/24/6b368b986f758630c46dc02b7fa512b53422f7,sha256=sw7ERFCFu7m6fnURAqQfQ4GWShaARr-Vc6GRnlOPkxU,8512
|
32
35
|
py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46,sha256=4ic5vOwEdfbGL8oARSVEeAnSoDs14-gggGZEL-61nYE,564
|
33
36
|
py2ls/.git/objects/30/a2f8da47ee947811dc8d993f5a06a45de374f4,sha256=u5W33_qNtTs1-U8Fardx-zB_udqKvuCm5kiw1mQGdsU,3218
|
37
|
+
py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad,sha256=_QlClFT2799H_igDlGPr6Uz3SqoPN5v-hehesdIj18U,164
|
34
38
|
py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971,sha256=X18sHo17gQTxusNptoILoWxSfU0ulrsZvbETlBtV5aY,2327
|
35
39
|
py2ls/.git/objects/36/e56a361f526eafa59c5235a5c990bf288b5f9c,sha256=7L1L-iqVvuufrlfEE2myD0-QnAPueFMySKetu08W-Pc,34216
|
36
40
|
py2ls/.git/objects/36/ef43e50009e59db11812c258846d9e38718173,sha256=0nwCwQSuQAdGyD2NfEK-_L12ydE9nGVKBXOfFq_Lndc,169
|
41
|
+
py2ls/.git/objects/39/7ead045fbbcfb17c62019eb18fe21ed05dbee5,sha256=3zM2AAtKWPfDVSy-prLogf1Z_RjkA6DwBBvN_M7pZqs,10409
|
37
42
|
py2ls/.git/objects/3b/bd972aa7ad680858f8dfbd0f7fcd97756f0d6f,sha256=MQWEzML3wbb4GixiHDCHrxgbXLQitrYDstT1plhmQSU,169
|
38
43
|
py2ls/.git/objects/3c/bbe5f4173d165127b9ad96119f1ec24c306ffc,sha256=S1BXemROYtzRaj5WXLPYnTmPTBQDKovMEN0GRLul-I4,33489
|
39
44
|
py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9,sha256=91oqbTWfUE1d_hT_1ptYmRUb5pOQ1X4oxQxpF6NXjKU,8501
|
40
45
|
py2ls/.git/objects/43/dbd49b2ee367c5434dd545e3b5795434f2ef0b,sha256=DAzt0dWp2KsuuImCKp7N9ia7KaCDNqwB-tYIx3Wf_c0,565
|
41
46
|
py2ls/.git/objects/48/a88fc5806305d0bb0755ee6801161b79696972,sha256=f3JStE39k_hPGE-WRwqZtDTjQkfOmBVb_6-ELBbScjI,203
|
47
|
+
py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042,sha256=QnSXlNWzKLoMzDHNAiwe06vqJEQj9xu0q-9PvCUbtbM,39680
|
42
48
|
py2ls/.git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6,sha256=p0M2WLqiTe6X2FI_k5Aj0IEsE85jqLa58sVdmV8x1vU,255
|
43
49
|
py2ls/.git/objects/53/e0deb1cb4c2c606bced6e7f9a66b0fda60980d,sha256=muq6m7_XRSFPzypW-m9mhpKfsomCr4s7GfkgM3gh2pc,482344
|
44
50
|
py2ls/.git/objects/56/e4e8b2d5545e0256090f45aa8fc42c5fe067d0,sha256=VsjKo1biAzCV-iIfwCDTPzyfP63K43hdZqJpDP70Iik,529
|
45
51
|
py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2,sha256=3Pf6NS8OTK4EdHZGVeJ421BtK7w4WJncQDBauZI_wW4,34
|
46
52
|
py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a,sha256=aJD9iF_LmYSrqDepXFBZKN1yMYbQczVkN_wnrDosBdI,5620
|
47
53
|
py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99,sha256=IQZi5MkbRu3ToRUPsRcXuh1Xa3pkAz_HDRCVhNL89ds,5753
|
54
|
+
py2ls/.git/objects/62/4488173ed2c8936fa5cea3cf5dd3f26a30b86e,sha256=gcoaeyK3Jo_yyqPclJ0jFA9wcsrVkD7tp4XvGDNGmpk,13225
|
48
55
|
py2ls/.git/objects/62/7c81b23b4e56e87b042b650b0103653cc9e34a,sha256=pv9wgBxnvJUFSrk9G7vApA6lnSykQSMJ4yXT7YnlSDU,167
|
49
56
|
py2ls/.git/objects/62/d90ccf8cbefdc2e4fd475e7c6f4f76e9fdf801,sha256=1L473QanNpnumCkE8tG6wtbvLqFtNeoagL9SJmasXNY,155
|
50
57
|
py2ls/.git/objects/64/27a4edff08f93d98f511418423f09f2ab90bcd,sha256=RyNngwk9fvdvvvywmNfllnim718fWNjVauH9U2y8Q2s,258
|
@@ -52,6 +59,7 @@ py2ls/.git/objects/69/13c452ca319f7cbf6a0836dc10a5bb033c84e4,sha256=NYLQQZTfd0ht
|
|
52
59
|
py2ls/.git/objects/6a/52e747a2b349b128d1490d9e896d2323818eb7,sha256=Qc_B3_xxlWmjooFu274r82b583uf_HpIpDBldr9fqVI,34966
|
53
60
|
py2ls/.git/objects/6b/7fde264d93a7a0986d394c46c7650d0ce2ab92,sha256=iIl0-RF0wd6BSEjzczgUyApxc899PbdTl04JbDn6_-Q,166
|
54
61
|
py2ls/.git/objects/6c/cebb29b7f3f5b0c889f6dadbf9ff066554587d,sha256=UylkFWAfhStNVQRQuC9CzpaWaT9uHCVs1mn7ecOma8I,609
|
62
|
+
py2ls/.git/objects/6d/ee29dbdcc84edeeacede105110446f3ccac963,sha256=-4Bi-tw0O-EbKxwJfMk_zHznNy0jvOK9G8hrXzz8AdA,9538
|
55
63
|
py2ls/.git/objects/71/36b2074a2754be8b58127d82250e5b37e3c373,sha256=cbVFQaBx0Q5QkZ1wQle-iIxNx14JxGSx3G8aQ7EbbAA,586
|
56
64
|
py2ls/.git/objects/78/3d4167bc95c9d2175e0df03ef1c1c880ba75ab,sha256=SK2QDjDBiDhVMG1I5p19g4RbEm2Rax7mYnxawmVZYxs,15523
|
57
65
|
py2ls/.git/objects/79/7ae089b2212a937840e215276005ce76881307,sha256=lQOKF2pb1JvipI3eT79X0-TuMGWsy1A-Yw4BCgKZNOM,33472
|
@@ -69,12 +77,16 @@ py2ls/.git/objects/b0/56be4be89ba6b76949dd641df45bb7036050c8,sha256=8Y7z30eNceBd
|
|
69
77
|
py2ls/.git/objects/b0/9cd7856d58590578ee1a4f3ad45d1310a97f87,sha256=82dx4hIdMpdcB64e5PU1s2gZFVkTvrj1cPwwJ_kasNU,4444
|
70
78
|
py2ls/.git/objects/b2/18e6a0f0f1c4df8cdefa9852058348abc713b7,sha256=hOQfdyzDZctjoge0-pAcEDel5XHVPNfOtrMNyFPUOIE,564
|
71
79
|
py2ls/.git/objects/b5/61831c7dce8ea51e7ee6b6fa35745f14d8242d,sha256=wUqxlKjLN1vOUj2tkYStado64QewdcF3CHlSICds1ik,34415
|
80
|
+
py2ls/.git/objects/b7/2c9e75ab7d0afe594664650aa8f6c772f5ac64,sha256=dyeWYp22wgZSCE7D3F43N76ehCDTsbMJcSMJRW3VbDI,65
|
81
|
+
py2ls/.git/objects/bb/81ccc0513f18fc160b54a82861e9a80d23f4f6,sha256=WrBnpacpm4kOcVCYoWgPO8MqOAi0ZeHaxekPT3DxpCk,587
|
72
82
|
py2ls/.git/objects/bb/934eb33bc1a8b85630bf680caffd99560c1b8f,sha256=ggehjexUsWlskHJvHxW7u6U0otB0OCItmIZdT9O-3OU,9670
|
73
83
|
py2ls/.git/objects/c1/20fc812b9ad311c34a3608512d6a9d976bb48e,sha256=q-WAKugB-_-g7w0Mlw6oyTBaXQ_Qd7BdLatrDiYN7Wc,156
|
74
84
|
py2ls/.git/objects/c4/cba65f1163661999ee4b8ed23342b63bc1300c,sha256=rwSdKt-C98nUQ_B-7imY4fYRYmn29MQc4SIu9wruHeo,566
|
75
85
|
py2ls/.git/objects/c6/7f17e5707313600efcb85e9a3fedea35dba591,sha256=TL7rDIWiaWlk8iIwqPst7St5Xr2otPs-vp17GPlET7o,565
|
86
|
+
py2ls/.git/objects/cd/822b3574a88ebdd1ed82fd6983f37e626d52b4,sha256=MJbPJ-8vpfVTUMhzyzTp5qGmZYgsgrG-7nwwzDdODlQ,617
|
76
87
|
py2ls/.git/objects/cf/0c0d9c6fb09473aaeb7f7e2edbd770c3f2ef3d,sha256=T_nV0GrgpVu3mOJ4fYcCW98oCunzgqy0DnSX0luy04Q,183
|
77
88
|
py2ls/.git/objects/d6/9ab1c4aadf279936dd778e8346ba60f74705b6,sha256=WcfdSMKqfiWT5TOWVUcDj0XDaD2hYxDnyIRNlYGutL8,34976
|
89
|
+
py2ls/.git/objects/d8/4688b54c0040a30976b3a6540bc47adf7ce680,sha256=1gJp1iTVAooc5PZZsiIj215-J1RtJ-_zy22_9jZ8jAY,160
|
78
90
|
py2ls/.git/objects/d9/005f2cc7fc4e65f14ed5518276007c08cf2fd0,sha256=IJIoz93V7pf9yx43U1JdN8gBq_LWtw8A9Z2YMPnq_B0,1450
|
79
91
|
py2ls/.git/objects/d9/c2403fd166ce791b4e9d0c6792ed8342c71fcd,sha256=uD7BsKdrmN-9FStTpwsRWh-XxVXeDsV4dGjFkaMIIs8,170
|
80
92
|
py2ls/.git/objects/d9/dfa5aee51e92a541b707e8e7baea6f06deff98,sha256=jMdhZ1i_L5q_UgjOtjLN15PCSCz3pE51FhD3z74ZUr8,163
|
@@ -84,28 +96,34 @@ py2ls/.git/objects/df/e0770424b2a19faf507a501ebfc23be8f54e7b,sha256=vCdlxwEidekh
|
|
84
96
|
py2ls/.git/objects/e3/1356f90ea6dd0577b5e0b40b206319adcbf085,sha256=I9_QNwmmtoqSwq29Ixdfv_PgF2x14u2M6sX1eQumwoY,161
|
85
97
|
py2ls/.git/objects/e3/5a4dafc50850cacac7bf76c56db2715cbda2c4,sha256=GAcBj3YSEbm6tm7fGD6al16uBo8LtEtjZ2Hi-UgIsUg,3290
|
86
98
|
py2ls/.git/objects/e9/391ffe371f1cc43b42ef09b705d9c767c2e14f,sha256=RWTy2n8L2XxZQknBFyPczA0Aa_4gSG_Ybcr8e8v4ccc,10264
|
99
|
+
py2ls/.git/objects/f1/e50757fddc28b445545dc7e2759b54cdd0f42e,sha256=2NG4lzk2IPOZfJ4tRHvxla63yQTcY_YTOprG1tzK-IY,40554
|
87
100
|
py2ls/.git/objects/f4/b64d3107b39e3ad6f540c6607004ea34e6c024,sha256=0egAtqc0x8hc7U1z91tIjcRhSd_BT2a_gxZxo_7NTJA,564
|
88
101
|
py2ls/.git/objects/f7/c98ba5c2f903e603b1f5e63d49fbc8a43815cc,sha256=tYbi3A7irrIPB_11bwItuof0Vc9a0MDuLFMNAzRsG3A,33467
|
89
102
|
py2ls/.git/objects/fa/147e6bb78a2e8db241d231295fd7f1ed061af8,sha256=G9pg5LXv7AdxnPIQsTm2AF3Un314dLRJQYwxmZem9rQ,574
|
90
103
|
py2ls/.git/objects/fc/292e793ecfd42240ac43be407023bd731fa9e7,sha256=hGIYoxKWNT3IPwk3DE4l3FLBbUYF-kXcHcx7KrH9uS0,1971
|
91
|
-
py2ls/.git/refs/heads/main,sha256=
|
104
|
+
py2ls/.git/refs/heads/main,sha256=k6rcF3ygBr7oPi2hdbKsSuf8k1tlLGgqVho63xNgiuY,41
|
92
105
|
py2ls/.git/refs/remotes/origin/HEAD,sha256=K7aiSqD8bEhBAPXVGim7rYQc0sdV9dk_qiBOXbtOsrQ,30
|
93
|
-
py2ls/.git/refs/remotes/origin/main,sha256=
|
106
|
+
py2ls/.git/refs/remotes/origin/main,sha256=k6rcF3ygBr7oPi2hdbKsSuf8k1tlLGgqVho63xNgiuY,41
|
94
107
|
py2ls/.gitattributes,sha256=Gh2-F2vCM7SZ01pX23UT8pQcmauXWfF3gwyRSb6ZAFs,66
|
95
108
|
py2ls/.gitignore,sha256=y7GvbD_zZkjPVVIue8AyiuFkDMuUbvMaV65Lgu89To8,2763
|
96
109
|
py2ls/LICENSE,sha256=UOZ1F5fFDe3XXvG4oNnkL1-Ecun7zpHzRxjp-XsMeAo,11324
|
97
110
|
py2ls/README.md,sha256=CwvJWAnSXnCnrVHlnEbrxxi6MbjbE_MT6DH2D53S818,11572
|
98
|
-
py2ls/__init__.py,sha256=
|
111
|
+
py2ls/__init__.py,sha256=R5OBEeK0uOULvUsY1YjIj-EAQKlVPW32uh_hQHuN5Bg,109
|
99
112
|
py2ls/brain_atlas.py,sha256=w1o5EelRjq89zuFJUNSz4Da8HnTCwAwDAZ4NU4a-bAY,5486
|
100
113
|
py2ls/correlators.py,sha256=RbOaJIPLCHJtUm5SFi_4dCJ7VFUPWR0PErfK3K26ad4,18243
|
101
|
-
py2ls/
|
114
|
+
py2ls/data/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
115
|
+
py2ls/data/db2ls_sql_chtsht.json,sha256=ls9d7Sm8TLeujanWHfHlWhU85Qz1KnAizO_9X3wUH7E,6933
|
116
|
+
py2ls/data/lang_code_iso639.json,sha256=qZiU7H2RLJjDMXK22C-jhwzLJCI5vKmampjB1ys4ek4,2157
|
117
|
+
py2ls/db2ls.py,sha256=MMfFX47aIPIyu7fU9aPvX9lbPRPYOpJ_VXwlnWk-8qo,13615
|
102
118
|
py2ls/freqanalysis.py,sha256=F4218VSPbgL5tnngh6xNCYuNnfR-F_QjECUUxrPYZss,32594
|
103
|
-
py2ls/ips.py,sha256=
|
119
|
+
py2ls/ips.py,sha256=6E_GBIyzMeWbdP3XoEQtyP3_IilDIFOylaxDuu4m3-4,95266
|
104
120
|
py2ls/netfinder.py,sha256=ZsLWGYMeRuGvxj2nqE0Z8ANoaVl18Necfw0HQfh2q7I,45548
|
105
121
|
py2ls/setuptools-70.1.0-py3-none-any.whl,sha256=2bi3cUVal8ip86s0SOvgspteEF8SKLukECi-EWmFomc,882588
|
106
122
|
py2ls/sleep_events_detectors.py,sha256=36MCuRrpurn0Uvzpo3p3b3_JlVsRNHSWCXbJxCGM3mg,51546
|
107
|
-
py2ls/
|
123
|
+
py2ls/stats.py,sha256=Wd9yCKQ_61QD29WMEgMuEcreFxF91NmlPW65iWT2B5w,39041
|
124
|
+
py2ls/stdshade.py,sha256=lK9H98oEVLV14cYfB4BHYT5ptAI4Oia87MF86FqbPOg,6987
|
125
|
+
py2ls/translator.py,sha256=6S7MmTZmjj8NljVmj0W5uEauu4ePxso3AMf2LvGVRQA,30516
|
108
126
|
py2ls/wb_detector.py,sha256=7y6TmBUj9exCZeIgBAJ_9hwuhkDh1x_-yg4dvNY1_GQ,6284
|
109
|
-
py2ls-0.1.
|
110
|
-
py2ls-0.1.
|
111
|
-
py2ls-0.1.
|
127
|
+
py2ls-0.1.5.0.dist-info/METADATA,sha256=oM0BHs6W_KAa52S4XXVGvrIxE3JBWqv5rMzNGtWhhzs,17943
|
128
|
+
py2ls-0.1.5.0.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
129
|
+
py2ls-0.1.5.0.dist-info/RECORD,,
|
py2ls/dbhandler.py
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
import sqlite3
|
2
|
-
import time
|
3
|
-
|
4
|
-
class dbhandler:
|
5
|
-
def __init__(self, db_path):
|
6
|
-
self.db_path = db_path
|
7
|
-
|
8
|
-
def execute_query(self, query, params=None, retries=2, delay=1):
|
9
|
-
for attempt in range(retries):
|
10
|
-
try:
|
11
|
-
conn = sqlite3.connect(self.db_path)
|
12
|
-
c = conn.cursor()
|
13
|
-
if params:
|
14
|
-
c.execute(query, params)
|
15
|
-
else:
|
16
|
-
c.execute(query)
|
17
|
-
conn.commit()
|
18
|
-
conn.close()
|
19
|
-
return
|
20
|
-
except sqlite3.OperationalError as e:
|
21
|
-
if "database is locked" in str(e) and attempt < retries - 1:
|
22
|
-
print(f"Database is locked, retrying in {delay} seconds...")
|
23
|
-
time.sleep(delay)
|
24
|
-
else:
|
25
|
-
print(f"Error executing query: {e}")
|
26
|
-
break
|
27
|
-
|
28
|
-
def create_table(self, table_definition):
|
29
|
-
self.execute_query(table_definition)
|
30
|
-
print(f"Table created with definition: {table_definition}")
|
31
|
-
|
32
|
-
def insert_data(self, table, columns, data):
|
33
|
-
placeholders = ', '.join(['?' for _ in data])
|
34
|
-
query = f"INSERT INTO {table} ({', '.join(columns)}) VALUES ({placeholders})"
|
35
|
-
self.execute_query(query, data)
|
36
|
-
print(f"Data inserted into {table}: {data}")
|
37
|
-
|
38
|
-
def select_data(self, table, columns='*', where_clause=None, where_params=None):
|
39
|
-
query = f"SELECT {', '.join(columns)} FROM {table}"
|
40
|
-
if where_clause:
|
41
|
-
query += f" WHERE {where_clause}"
|
42
|
-
try:
|
43
|
-
conn = sqlite3.connect(self.db_path)
|
44
|
-
c = conn.cursor()
|
45
|
-
if where_params:
|
46
|
-
c.execute(query, where_params)
|
47
|
-
else:
|
48
|
-
c.execute(query)
|
49
|
-
rows = c.fetchall()
|
50
|
-
conn.close()
|
51
|
-
return rows
|
52
|
-
except sqlite3.OperationalError as e:
|
53
|
-
print(f"Error selecting data: {e}")
|
54
|
-
return None
|
55
|
-
|
56
|
-
def update_data(self, table, updates, where_clause, where_params):
|
57
|
-
update_clause = ', '.join([f"{col} = ?" for col in updates.keys()])
|
58
|
-
params = list(updates.values()) + list(where_params)
|
59
|
-
query = f"UPDATE {table} SET {update_clause} WHERE {where_clause}"
|
60
|
-
self.execute_query(query, params)
|
61
|
-
print(f"Data updated in {table} where {where_clause}: {updates}")
|
62
|
-
|
63
|
-
def delete_data(self, table, where_clause, where_params):
|
64
|
-
query = f"DELETE FROM {table} WHERE {where_clause}"
|
65
|
-
self.execute_query(query, where_params)
|
66
|
-
print(f"Data deleted from {table} where {where_clause}")
|
67
|
-
|
68
|
-
# Example usage
|
69
|
-
if __name__ == "__main__":
|
70
|
-
db = dbhandler("/Users/macjianfeng/Dropbox/github/python/xample_dbhandler/data/example.db")
|
71
|
-
|
72
|
-
# Create table
|
73
|
-
create_table_sql = """CREATE TABLE IF NOT EXISTS tab (
|
74
|
-
row TEXT PRIMARY KEY,
|
75
|
-
content TEXT)"""
|
76
|
-
db.create_table(create_table_sql)
|
77
|
-
|
78
|
-
# Insert data
|
79
|
-
db.insert_data("tab", ["row", "content"], ["row1", "This is a row"])
|
80
|
-
|
81
|
-
# Select data
|
82
|
-
rows = db.select_data("tab")
|
83
|
-
print("Selected rows:", rows)
|
84
|
-
|
85
|
-
# Update data
|
86
|
-
db.update_data("tab", {"content": "Updated content"}, "row = ?", ["row1"])
|
87
|
-
|
88
|
-
# Select data again to see the update
|
89
|
-
rows = db.select_data("tab")
|
90
|
-
print("Selected rows after update:", rows)
|
91
|
-
|
92
|
-
# Delete data
|
93
|
-
db.delete_data("tab", "row = ?", ["row1"])
|
94
|
-
|
95
|
-
# Select data again to see the deletion
|
96
|
-
rows = db.select_data("tab")
|
97
|
-
print("Selected rows after deletion:", rows)
|
File without changes
|