py2ls 0.1.9.3__py3-none-any.whl → 0.1.9.4__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 +1 -0
- py2ls/.git/logs/refs/heads/main +1 -0
- py2ls/.git/logs/refs/remotes/origin/HEAD +2 -0
- py2ls/.git/logs/refs/remotes/origin/main +1 -0
- py2ls/.git/objects/12/c2808a1b3a4d0892a4154dfba1e2ae3770fa73 +0 -0
- py2ls/.git/objects/1c/9314c5f69b9390068a2a8616875d974849d71f +0 -0
- py2ls/.git/objects/2a/ae95d517d213b660bf4f65a4e0cfae7bb893eb +0 -0
- py2ls/.git/objects/34/9e31b6a3634cea102ce5588b98c11cc1738605 +0 -0
- py2ls/.git/objects/45/b1b6178bacbfc997811a998b5cc60c1ea7fac8 +0 -0
- py2ls/.git/objects/57/63d0c52f5c9c69e89d514a1f96034947abe21a +0 -0
- py2ls/.git/objects/59/380c4c26bdcd4d9b71ae3e2e35f05b3f26c5ab +0 -0
- py2ls/.git/objects/66/6227eeeba24073e63811e89f1449f3d958f183 +0 -0
- py2ls/.git/objects/66/c998778721d424bd0aae80602dabbffa93af2e +0 -0
- py2ls/.git/objects/6d/c2cdf4a84e538e5d4777486aeff87e42f41799 +2 -0
- py2ls/.git/objects/72/245a05b0966011cb381e6b32b0465000e969ab +0 -0
- py2ls/.git/objects/72/e4179337639859678ddaecf38b16f33aaec8e1 +0 -0
- py2ls/.git/objects/a1/906da89d1174f74867800c74c43af36253bd5e +0 -0
- py2ls/.git/objects/d2/992df305f4b56a466a2f221aeb182ddd20f418 +0 -0
- py2ls/.git/objects/dc/c2bdbafb3296e09d9ee4955cfa55d275825f94 +5 -0
- py2ls/.git/objects/dc/cdbd4266765d840be2ae35ab1752a0fa312c16 +0 -0
- py2ls/.git/objects/e2/f2f8f4c25e62a297fc55f36acc6b01cfbab76f +3 -0
- py2ls/.git/objects/ea/3a18cc75e53792744ef754e05d3f4481768c13 +0 -0
- py2ls/.git/objects/ec/40fd8bf8e4c342534a9fc020289e402ba6bc9d +0 -0
- py2ls/.git/objects/f4/ba7f815b886797b73fede071d86e0c134d2bc7 +0 -0
- py2ls/.git/objects/f6/44a8ff56fa035105fc517cbb1ac46c3d8e349a +0 -0
- py2ls/.git/refs/heads/main +1 -1
- py2ls/.git/refs/remotes/origin/main +1 -1
- py2ls/netfinder.py +0 -8
- py2ls/plot.py +172 -96
- py2ls/stats.py +67 -47
- {py2ls-0.1.9.3.dist-info → py2ls-0.1.9.4.dist-info}/METADATA +1 -1
- {py2ls-0.1.9.3.dist-info → py2ls-0.1.9.4.dist-info}/RECORD +36 -15
- {py2ls-0.1.9.3.dist-info → py2ls-0.1.9.4.dist-info}/WHEEL +0 -0
py2ls/.git/COMMIT_EDITMSG
CHANGED
@@ -1 +1 @@
|
|
1
|
-
update
|
1
|
+
update
|
py2ls/.git/FETCH_HEAD
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
6dc2cdf4a84e538e5d4777486aeff87e42f41799 branch 'main' of https://github.com/Jianfengliu0413/py2ls
|
py2ls/.git/index
CHANGED
Binary file
|
py2ls/.git/logs/HEAD
CHANGED
@@ -18,3 +18,4 @@ d84688b54c0040a30976b3a6540bc47adf7ce680 32fd627b62fad7cf3b2f9e34ab9777126a0987a
|
|
18
18
|
32fd627b62fad7cf3b2f9e34ab9777126a0987ad 1c3f92adda34344bcbbbf9d409c79855ae2aaea8 Jianfeng <Jianfeng.Liu0413@gmail.com> 1720709655 +0200 commit: Delete dbhandler.py
|
19
19
|
1c3f92adda34344bcbbbf9d409c79855ae2aaea8 bf67907e337021ebff434e02b19b30a741c144af Jianfeng <Jianfeng.Liu0413@gmail.com> 1720948339 +0200 commit: update
|
20
20
|
bf67907e337021ebff434e02b19b30a741c144af a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng <Jianfeng.Liu0413@gmail.com> 1721137352 +0200 commit: update ips
|
21
|
+
a15389729850729fc7bd78a54f26fce77f30be12 6dc2cdf4a84e538e5d4777486aeff87e42f41799 Jianfeng <Jianfeng.Liu0413@gmail.com> 1723527985 +0200 commit: update
|
py2ls/.git/logs/refs/heads/main
CHANGED
@@ -18,3 +18,4 @@ d84688b54c0040a30976b3a6540bc47adf7ce680 32fd627b62fad7cf3b2f9e34ab9777126a0987a
|
|
18
18
|
32fd627b62fad7cf3b2f9e34ab9777126a0987ad 1c3f92adda34344bcbbbf9d409c79855ae2aaea8 Jianfeng <Jianfeng.Liu0413@gmail.com> 1720709655 +0200 commit: Delete dbhandler.py
|
19
19
|
1c3f92adda34344bcbbbf9d409c79855ae2aaea8 bf67907e337021ebff434e02b19b30a741c144af Jianfeng <Jianfeng.Liu0413@gmail.com> 1720948339 +0200 commit: update
|
20
20
|
bf67907e337021ebff434e02b19b30a741c144af a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng <Jianfeng.Liu0413@gmail.com> 1721137352 +0200 commit: update ips
|
21
|
+
a15389729850729fc7bd78a54f26fce77f30be12 6dc2cdf4a84e538e5d4777486aeff87e42f41799 Jianfeng <Jianfeng.Liu0413@gmail.com> 1723527985 +0200 commit: update
|
@@ -135,3 +135,5 @@ a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be1
|
|
135
135
|
a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng Liu <macjianfeng@JFLMBP.cin.medizin.uni-tuebingen.de> 1721322143 +0200 remote set-head
|
136
136
|
a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng Liu <macjianfeng@JFLMBP.cin.medizin.uni-tuebingen.de> 1721324108 +0200 remote set-head
|
137
137
|
a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng Liu <macjianfeng@JFLMBP.cin.medizin.uni-tuebingen.de> 1721326072 +0200 remote set-head
|
138
|
+
a15389729850729fc7bd78a54f26fce77f30be12 a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng Liu <macjianfeng@jflmbp.speedport.ip> 1723527981 +0200 remote set-head
|
139
|
+
6dc2cdf4a84e538e5d4777486aeff87e42f41799 6dc2cdf4a84e538e5d4777486aeff87e42f41799 Jianfeng Liu <macjianfeng@jflmbp.speedport.ip> 1723527990 +0200 remote set-head
|
@@ -17,3 +17,4 @@ d84688b54c0040a30976b3a6540bc47adf7ce680 32fd627b62fad7cf3b2f9e34ab9777126a0987a
|
|
17
17
|
32fd627b62fad7cf3b2f9e34ab9777126a0987ad 1c3f92adda34344bcbbbf9d409c79855ae2aaea8 Jianfeng <Jianfeng.Liu0413@gmail.com> 1720709657 +0200 update by push
|
18
18
|
1c3f92adda34344bcbbbf9d409c79855ae2aaea8 bf67907e337021ebff434e02b19b30a741c144af Jianfeng <Jianfeng.Liu0413@gmail.com> 1720948342 +0200 update by push
|
19
19
|
bf67907e337021ebff434e02b19b30a741c144af a15389729850729fc7bd78a54f26fce77f30be12 Jianfeng <Jianfeng.Liu0413@gmail.com> 1721137354 +0200 update by push
|
20
|
+
a15389729850729fc7bd78a54f26fce77f30be12 6dc2cdf4a84e538e5d4777486aeff87e42f41799 Jianfeng <Jianfeng.Liu0413@gmail.com> 1723527989 +0200 update by push
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,5 @@
|
|
1
|
+
x�VQo�6�s~ᢐ��Ρ�^�y����ð=��pl:QkK�$7���������Ö�ؔD�#�}��;���dg���ݪ������e�0ڧ��������B�&��ժ������wqcJȣ���[we� Kՠگ�����z/��߭͋?hEw�[G)9�ھ�|S�F�-+m���/����K)4����
|
2
|
+
��=*�J`Η���iA#[ZW5TZ=!����~����hPը*�.[�
|
3
|
+
+(4Jv�}�d�:N�K2�trB�9�J��J�����Y?���|#��d*=v@�B�w�@��'���Y82��x��̄�d�lE�ݼ����"i��z�ַ��Q
|
4
|
+
���<"�������@��|±�?��.��R��m�.m�ax���l�M�QEC9��Sܐŧ"~��9E�iTe�!窷��S�':fJ�d^���?n����:f"L݂{4M��o��/^�!�2B
|
5
|
+
�?�짲m��0�{k��D��)�D��Ю���t�K��# �v�8g��WA~�m��r�ڰ��1i�E���<nd����}���Ae��W�#�Iǩ�b
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
py2ls/.git/refs/heads/main
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
6dc2cdf4a84e538e5d4777486aeff87e42f41799
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
6dc2cdf4a84e538e5d4777486aeff87e42f41799
|
py2ls/netfinder.py
CHANGED
@@ -126,10 +126,8 @@ def extract_text_from_content(
|
|
126
126
|
search_kwargs["class"] = what
|
127
127
|
if "attrs" in kwargs:
|
128
128
|
result_set = content.find_all(where, **search_kwargs)
|
129
|
-
print(f"attrs =>{search_kwargs}")
|
130
129
|
else:
|
131
130
|
result_set = content.find_all(where, attrs=dict(**search_kwargs))
|
132
|
-
print(f"{search_kwargs}")
|
133
131
|
|
134
132
|
if not result_set:
|
135
133
|
print("Failed: check the 'attrs' setting: attrs={'id':'xample'}")
|
@@ -594,7 +592,6 @@ def downloader(
|
|
594
592
|
kind[i] = "." + kind[i]
|
595
593
|
file_links_all = []
|
596
594
|
for kind_ in kind:
|
597
|
-
print(kind_)
|
598
595
|
if isinstance(contains, str):
|
599
596
|
contains = [contains]
|
600
597
|
if isinstance(url, str):
|
@@ -709,7 +706,6 @@ def find_img(url, driver="request", dir_save="images", rm_folder=False, verbose=
|
|
709
706
|
if rm_folder:
|
710
707
|
ips.rm_folder(dir_save)
|
711
708
|
content_type, content = fetch_all(url, driver=driver)
|
712
|
-
print(content_type)
|
713
709
|
if "html" in content_type.lower():
|
714
710
|
# Create the directory if it doesn't exist
|
715
711
|
os.makedirs(dir_save, exist_ok=True)
|
@@ -913,7 +909,6 @@ def fetch(
|
|
913
909
|
output="text",
|
914
910
|
**kws,
|
915
911
|
):
|
916
|
-
print(f"output is {output}")
|
917
912
|
if "xt" in output.lower():
|
918
913
|
for attempt in range(retry):
|
919
914
|
if verbose and attempt == 0:
|
@@ -973,7 +968,6 @@ def fetch(
|
|
973
968
|
try:
|
974
969
|
content_type, content = fetch_all(url, parser="html.parser", driver=driver)
|
975
970
|
search_kwargs = {**kws}
|
976
|
-
print(search_kwargs)
|
977
971
|
if "class_" in search_kwargs:
|
978
972
|
search_kwargs["class"] = search_kwargs["class_"]
|
979
973
|
del search_kwargs["class_"]
|
@@ -981,10 +975,8 @@ def fetch(
|
|
981
975
|
search_kwargs["class"] = what
|
982
976
|
if "attrs" in kws:
|
983
977
|
result_set = content.find_all(where, **search_kwargs)
|
984
|
-
print(f"attrs =>{search_kwargs}")
|
985
978
|
else:
|
986
979
|
result_set = content.find_all(where, attrs=dict(**search_kwargs))
|
987
|
-
print(f"{search_kwargs}")
|
988
980
|
return result_set
|
989
981
|
except:
|
990
982
|
print("got nothing")
|
py2ls/plot.py
CHANGED
@@ -468,11 +468,11 @@ def catplot(data, *args, **kwargs):
|
|
468
468
|
# full_order = sort_catplot_layers(custom_order)
|
469
469
|
|
470
470
|
ax = kwargs.get("ax", None)
|
471
|
-
if "ax" not in locals() or ax is None:
|
472
|
-
ax = plt.gca()
|
473
471
|
col = kwargs.get("col", None)
|
474
472
|
if not col:
|
475
|
-
|
473
|
+
if "ax" not in locals() or ax is None:
|
474
|
+
ax = plt.gca()
|
475
|
+
|
476
476
|
kw_figsets = kwargs.get("figsets", None)
|
477
477
|
# check the data type
|
478
478
|
if isinstance(data, pd.DataFrame):
|
@@ -481,6 +481,7 @@ def catplot(data, *args, **kwargs):
|
|
481
481
|
y = kwargs.get("y", None)
|
482
482
|
hue = kwargs.get("hue", None)
|
483
483
|
data = df2array(data=data, x=x, y=y, hue=hue)
|
484
|
+
y_max_loc = np.max(data, axis=0)
|
484
485
|
xticklabels = []
|
485
486
|
if hue is not None:
|
486
487
|
# for i in df[x].unique().tolist():
|
@@ -511,21 +512,16 @@ def catplot(data, *args, **kwargs):
|
|
511
512
|
data=df[df[x] == i], dv=y, factor=hue, **stats_param
|
512
513
|
)
|
513
514
|
elif bool(stats_param):
|
514
|
-
res_tmp = FuncMultiCmpt(
|
515
|
+
res_tmp = FuncMultiCmpt(
|
516
|
+
data=df[df[x] == i], dv=y, factor=hue
|
517
|
+
)
|
515
518
|
else:
|
516
519
|
res_tmp = "did not work properly"
|
517
520
|
display_output(res_tmp)
|
518
|
-
xloc_curr = hue_len * (ihue - 1)
|
519
|
-
# add_asterisks(ax,res_tmp,xticks[xloc_curr:xloc_curr+hue_len],legend_hue)
|
520
|
-
# res_tmp = [{"x": i, **res_tmp}]
|
521
|
-
# print("here")
|
522
|
-
# df_=pd.DataFrame([res_tmp])
|
523
|
-
# display(df_['pval'][0].tolist()[0])
|
524
521
|
res = pd.concat(
|
525
|
-
[res, pd.DataFrame([res_tmp])], ignore_index=True
|
522
|
+
[res, pd.DataFrame([res_tmp])], ignore_index=True, axis=0
|
526
523
|
)
|
527
524
|
ihue += 1
|
528
|
-
display_output(res)
|
529
525
|
|
530
526
|
else:
|
531
527
|
# ! stats info
|
@@ -540,9 +536,22 @@ def catplot(data, *args, **kwargs):
|
|
540
536
|
res = None
|
541
537
|
if x and stats_param:
|
542
538
|
if isinstance(stats_param, dict):
|
543
|
-
|
539
|
+
if len(xticklabels) > 2:
|
540
|
+
res = FuncMultiCmpt(data=df, dv=y, factor=x, **stats_param)
|
541
|
+
else:
|
542
|
+
res = FuncCmpt(
|
543
|
+
x1=df.loc[df[x] == xticklabels[0], y].tolist(),
|
544
|
+
x2=df.loc[df[x] == xticklabels[1], y].tolist(),
|
545
|
+
**stats_param,
|
546
|
+
)
|
544
547
|
elif bool(stats_param):
|
545
|
-
|
548
|
+
if len(xticklabels) > 2:
|
549
|
+
res = FuncMultiCmpt(data=df, dv=y, factor=x)
|
550
|
+
else:
|
551
|
+
res = FuncCmpt(
|
552
|
+
x1=df.loc[df[x] == xticklabels[0], y].tolist(),
|
553
|
+
x2=df.loc[df[x] == xticklabels[1], y].tolist(),
|
554
|
+
)
|
546
555
|
else:
|
547
556
|
res = "did not work properly"
|
548
557
|
display_output(res)
|
@@ -567,11 +576,28 @@ def catplot(data, *args, **kwargs):
|
|
567
576
|
"xangle": xangle,
|
568
577
|
}
|
569
578
|
else:
|
570
|
-
|
579
|
+
if isinstance(data, np.ndarray):
|
580
|
+
df = array2df(data)
|
581
|
+
x = "group"
|
582
|
+
y = "value"
|
583
|
+
xticklabels = []
|
584
|
+
stats_param = kwargs.get("stats", False)
|
585
|
+
for i in df[x].unique().tolist():
|
586
|
+
xticklabels.append(i)
|
587
|
+
xticks = np.arange(1, len(xticklabels) + 1).tolist()
|
588
|
+
xticks_x_loc = np.arange(1, len(xticklabels) + 1).tolist()
|
589
|
+
legend_hue = xticklabels
|
590
|
+
default_colors = get_color(len(xticklabels))
|
571
591
|
default_x_width = 0.5
|
572
|
-
|
573
|
-
|
574
|
-
|
592
|
+
res = None
|
593
|
+
if x and stats_param:
|
594
|
+
if isinstance(stats_param, dict):
|
595
|
+
res = FuncMultiCmpt(data=df, dv=y, factor=x, **stats_param)
|
596
|
+
elif bool(stats_param):
|
597
|
+
res = FuncMultiCmpt(data=df, dv=y, factor=x)
|
598
|
+
else:
|
599
|
+
res = "did not work properly"
|
600
|
+
display_output(res)
|
575
601
|
|
576
602
|
# full_order
|
577
603
|
opt = kwargs.get("opt", {})
|
@@ -592,12 +618,12 @@ def catplot(data, *args, **kwargs):
|
|
592
618
|
except:
|
593
619
|
print(f"cannot find the style'{style_name}'")
|
594
620
|
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
#
|
599
|
-
# )
|
600
|
-
|
621
|
+
color_custom = kwargs.get("c", default_colors)
|
622
|
+
if not isinstance(color_custom, list):
|
623
|
+
color_custom = list(color_custom)
|
624
|
+
# if len(color_custom) < data.shape[1]:
|
625
|
+
# color_custom.extend(get_color(data.shape[1]-len(color_custom),cmap='tab20'))
|
626
|
+
opt.setdefault("c", color_custom)
|
601
627
|
|
602
628
|
opt.setdefault("loc", {})
|
603
629
|
opt["loc"].setdefault("go", 0)
|
@@ -606,15 +632,12 @@ def catplot(data, *args, **kwargs):
|
|
606
632
|
# export setting
|
607
633
|
opt.setdefault("style", {})
|
608
634
|
opt["style"].setdefault("export", None)
|
609
|
-
print(opt["style"])
|
610
|
-
|
611
|
-
# opt.setdefault('layer', {})
|
612
635
|
opt.setdefault("layer", ["b", "bx", "e", "v", "s", "l"])
|
613
636
|
|
614
637
|
opt.setdefault("b", {})
|
615
638
|
opt["b"].setdefault("go", 1)
|
616
639
|
opt["b"].setdefault("loc", "c")
|
617
|
-
opt["b"].setdefault("FaceColor",
|
640
|
+
opt["b"].setdefault("FaceColor", color_custom)
|
618
641
|
opt["b"].setdefault("FaceAlpha", 1)
|
619
642
|
opt["b"].setdefault("EdgeColor", "k")
|
620
643
|
opt["b"].setdefault("EdgeAlpha", 1)
|
@@ -635,7 +658,7 @@ def catplot(data, *args, **kwargs):
|
|
635
658
|
opt["e"].setdefault("LineColor", "k")
|
636
659
|
opt["e"].setdefault("LineJoin", "round")
|
637
660
|
opt["e"].setdefault("MarkerSize", "auto")
|
638
|
-
opt["e"].setdefault("FaceColor",
|
661
|
+
opt["e"].setdefault("FaceColor", color_custom)
|
639
662
|
opt["e"].setdefault("MarkerEdgeColor", "none")
|
640
663
|
opt["e"].setdefault("Visible", True)
|
641
664
|
opt["e"].setdefault("Orientation", "vertical")
|
@@ -665,7 +688,7 @@ def catplot(data, *args, **kwargs):
|
|
665
688
|
opt.setdefault("bx", {})
|
666
689
|
opt["bx"].setdefault("go", 0)
|
667
690
|
opt["bx"].setdefault("loc", "r")
|
668
|
-
opt["bx"].setdefault("FaceColor",
|
691
|
+
opt["bx"].setdefault("FaceColor", color_custom)
|
669
692
|
opt["bx"].setdefault("EdgeColor", "k")
|
670
693
|
opt["bx"].setdefault("FaceAlpha", 0.85)
|
671
694
|
opt["bx"].setdefault("EdgeAlpha", 1)
|
@@ -709,7 +732,7 @@ def catplot(data, *args, **kwargs):
|
|
709
732
|
opt["v"].setdefault("x_width", 0.3)
|
710
733
|
opt["v"].setdefault("loc", "r")
|
711
734
|
opt["v"].setdefault("EdgeColor", "none")
|
712
|
-
opt["v"].setdefault("FaceColor",
|
735
|
+
opt["v"].setdefault("FaceColor", color_custom)
|
713
736
|
opt["v"].setdefault("FaceAlpha", 0.3)
|
714
737
|
opt["v"].setdefault("BandWidth", "scott")
|
715
738
|
opt["v"].setdefault("Function", "pdf")
|
@@ -732,17 +755,18 @@ def catplot(data, *args, **kwargs):
|
|
732
755
|
xloc = opt["loc"]["xloc"]
|
733
756
|
layers = sort_catplot_layers(opt["layer"])
|
734
757
|
|
735
|
-
|
736
|
-
if
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
758
|
+
label = kwargs.get("label", "bar")
|
759
|
+
if label:
|
760
|
+
if "b" in label:
|
761
|
+
legend_which = "b"
|
762
|
+
elif "s" in label:
|
763
|
+
legend_which = "s"
|
764
|
+
elif "bx" in label:
|
765
|
+
legend_which = "bx"
|
766
|
+
elif "e" in label:
|
767
|
+
legend_which = "e"
|
768
|
+
elif "v" in label:
|
769
|
+
legend_which = "v"
|
746
770
|
else:
|
747
771
|
legend_which = None
|
748
772
|
for layer in layers:
|
@@ -779,35 +803,64 @@ def catplot(data, *args, **kwargs):
|
|
779
803
|
show_legend = kwargs.get("show_legend", True)
|
780
804
|
if show_legend:
|
781
805
|
ax.legend()
|
782
|
-
|
783
806
|
# ! add asterisks in the plot
|
784
807
|
if stats_param:
|
785
|
-
if
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
808
|
+
if len(xticklabels) >= 1:
|
809
|
+
if hue is None:
|
810
|
+
add_asterisks(
|
811
|
+
ax, res, xticks_x_loc, xticklabels, y_loc=np.max(data)
|
812
|
+
)
|
813
|
+
else: # hue is not None
|
814
|
+
ihue = 1
|
815
|
+
for i in df[x].unique().tolist():
|
816
|
+
if stats_param:
|
817
|
+
if isinstance(stats_param, dict):
|
818
|
+
if "factor" in stats_param.keys():
|
819
|
+
res_tmp = FuncMultiCmpt(
|
820
|
+
data=df, dv=y, **stats_param
|
821
|
+
)
|
822
|
+
else:
|
823
|
+
res_tmp = FuncMultiCmpt(
|
824
|
+
data=df[df[x] == i],
|
825
|
+
dv=y,
|
826
|
+
factor=hue,
|
827
|
+
**stats_param,
|
828
|
+
)
|
829
|
+
elif bool(stats_param):
|
796
830
|
res_tmp = FuncMultiCmpt(
|
797
|
-
data=df[df[x] == i], dv=y, factor=hue
|
831
|
+
data=df[df[x] == i], dv=y, factor=hue
|
798
832
|
)
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
810
|
-
|
833
|
+
else:
|
834
|
+
res_tmp = "did not work properly"
|
835
|
+
xloc_curr = hue_len * (ihue - 1)
|
836
|
+
|
837
|
+
add_asterisks(
|
838
|
+
ax,
|
839
|
+
res_tmp,
|
840
|
+
xticks[xloc_curr : xloc_curr + hue_len],
|
841
|
+
legend_hue,
|
842
|
+
y_loc=np.max(data),
|
843
|
+
)
|
844
|
+
ihue += 1
|
845
|
+
else: # 240814: still has some bugs
|
846
|
+
if isinstance(res, dict):
|
847
|
+
tab_res = pd.DataFrame(res[1], index=[0])
|
848
|
+
x1 = df.loc[df[x] == xticklabels[0], y].tolist()
|
849
|
+
x2 = df.loc[df[x] == xticklabels[1], y].tolist()
|
850
|
+
tab_res[f"{xticklabels[0]}(mean±sem)"] = [str_mean_sem(x1)]
|
851
|
+
tab_res[f"{xticklabels[1]}(mean±sem)"] = [str_mean_sem(x2)]
|
852
|
+
add_asterisks(
|
853
|
+
ax, res[1], xticks_x_loc, xticklabels, y_loc=np.max([x1, x2])
|
854
|
+
)
|
855
|
+
elif isinstance(res, pd.DataFrame):
|
856
|
+
display(res)
|
857
|
+
print("still has some bugs")
|
858
|
+
x1 = df.loc[df[x] == xticklabels[0], y].tolist()
|
859
|
+
x2 = df.loc[df[x] == xticklabels[1], y].tolist()
|
860
|
+
add_asterisks(
|
861
|
+
ax, res, xticks_x_loc, xticklabels, y_loc=np.max([x1, x2])
|
862
|
+
)
|
863
|
+
|
811
864
|
style_export = kwargs.get("style_export", None)
|
812
865
|
if style_export and (style_export != style_use):
|
813
866
|
dir_curr_script = os.path.dirname(os.path.abspath(__file__))
|
@@ -843,6 +896,11 @@ def get_cmap():
|
|
843
896
|
|
844
897
|
|
845
898
|
def read_mplstyle(style_file):
|
899
|
+
"""
|
900
|
+
example usage:
|
901
|
+
style_file = "/ std-colors.mplstyle"
|
902
|
+
style_dict = read_mplstyle(style_file)
|
903
|
+
"""
|
846
904
|
# Load the style file
|
847
905
|
plt.style.use(style_file)
|
848
906
|
|
@@ -857,11 +915,6 @@ def read_mplstyle(style_file):
|
|
857
915
|
return style_dict
|
858
916
|
|
859
917
|
|
860
|
-
# #example usage:
|
861
|
-
# style_file = "/ std-colors.mplstyle"
|
862
|
-
# style_dict = read_mplstyle(style_file)
|
863
|
-
|
864
|
-
|
865
918
|
def figsets(*args, **kwargs):
|
866
919
|
"""
|
867
920
|
usage:
|
@@ -937,7 +990,6 @@ def figsets(*args, **kwargs):
|
|
937
990
|
def set_step_1(ax, key, value):
|
938
991
|
if ("fo" in key) and (("size" in key) or ("sz" in key)):
|
939
992
|
fontsize = value
|
940
|
-
print(fontsize)
|
941
993
|
plt.rcParams.update({"font.size": fontsize})
|
942
994
|
# style
|
943
995
|
if "st" in key.lower() or "th" in key.lower():
|
@@ -1183,6 +1235,10 @@ def figsets(*args, **kwargs):
|
|
1183
1235
|
if legend_kws:
|
1184
1236
|
# https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html
|
1185
1237
|
ax.legend(**legend_kws)
|
1238
|
+
else:
|
1239
|
+
legend = ax.get_legend()
|
1240
|
+
if legend is not None:
|
1241
|
+
legend.remove()
|
1186
1242
|
|
1187
1243
|
for arg in args:
|
1188
1244
|
if isinstance(arg, matplotlib.axes._axes.Axes):
|
@@ -1660,30 +1716,50 @@ def remove_colors_in_dict(
|
|
1660
1716
|
|
1661
1717
|
|
1662
1718
|
def add_asterisks(ax, res, xticks_x_loc, xticklabels, **kwargs_funcstars):
|
1663
|
-
|
1664
|
-
|
1665
|
-
|
1666
|
-
|
1667
|
-
|
1668
|
-
|
1669
|
-
|
1670
|
-
|
1671
|
-
|
1672
|
-
|
1673
|
-
|
1674
|
-
|
1675
|
-
|
1676
|
-
|
1677
|
-
|
1678
|
-
|
1679
|
-
|
1719
|
+
if len(xticklabels) > 2:
|
1720
|
+
if isinstance(res, dict):
|
1721
|
+
pval_groups = res["res_tab"]["p-unc"].tolist()[0]
|
1722
|
+
else:
|
1723
|
+
pval_groups = res["res_tab"]["PR(>F)"].tolist()[0]
|
1724
|
+
if pval_groups <= 0.05:
|
1725
|
+
A_list = res["res_posthoc"]["A"].tolist()
|
1726
|
+
B_list = res["res_posthoc"]["B"].tolist()
|
1727
|
+
xticklabels_array = np.array(xticklabels)
|
1728
|
+
yscal_ = 0.99
|
1729
|
+
for A, B, P in zip(
|
1730
|
+
res["res_posthoc"]["A"].tolist(),
|
1731
|
+
res["res_posthoc"]["B"].tolist(),
|
1732
|
+
res["res_posthoc"]["p-unc"].tolist(),
|
1733
|
+
):
|
1734
|
+
index_A = np.where(xticklabels_array == A)[0][0]
|
1735
|
+
index_B = np.where(xticklabels_array == B)[0][0]
|
1736
|
+
FuncStars(
|
1737
|
+
ax=ax,
|
1738
|
+
x1=xticks_x_loc[index_A],
|
1739
|
+
x2=xticks_x_loc[index_B],
|
1740
|
+
pval=P,
|
1741
|
+
yscale=yscal_,
|
1742
|
+
**kwargs_funcstars,
|
1743
|
+
)
|
1744
|
+
if P <= 0.05:
|
1745
|
+
yscal_ -= 0.075
|
1746
|
+
else:
|
1747
|
+
if isinstance(res, tuple):
|
1748
|
+
res = res[1]
|
1749
|
+
pval_groups = res["pval"]
|
1750
|
+
FuncStars(
|
1751
|
+
ax=ax,
|
1752
|
+
x1=1,
|
1753
|
+
x2=2,
|
1754
|
+
pval=pval_groups,
|
1755
|
+
**kwargs_funcstars,
|
1756
|
+
)
|
1757
|
+
else:
|
1758
|
+
pval_groups = res["pval"]
|
1680
1759
|
FuncStars(
|
1681
1760
|
ax=ax,
|
1682
|
-
x1=
|
1683
|
-
x2=
|
1684
|
-
pval=
|
1685
|
-
yscale=yscal_,
|
1761
|
+
x1=1,
|
1762
|
+
x2=2,
|
1763
|
+
pval=pval_groups,
|
1686
1764
|
**kwargs_funcstars,
|
1687
1765
|
)
|
1688
|
-
if P <= 0.05:
|
1689
|
-
yscal_ -= 0.1
|
py2ls/stats.py
CHANGED
@@ -12,7 +12,7 @@ warnings.filterwarnings("ignore", category=RuntimeWarning)
|
|
12
12
|
|
13
13
|
# FuncStars --v 0.1.1
|
14
14
|
def FuncStars(
|
15
|
-
ax,
|
15
|
+
ax=None,
|
16
16
|
pval=None,
|
17
17
|
ylim=None,
|
18
18
|
xlim=None,
|
@@ -33,7 +33,7 @@ def FuncStars(
|
|
33
33
|
linewidth=0.8,
|
34
34
|
nsshow="off",
|
35
35
|
symbolcolor="k",
|
36
|
-
tailindicator=[0.
|
36
|
+
tailindicator=[0.05, 0.05],
|
37
37
|
report=None,
|
38
38
|
report_scale=-0.1,
|
39
39
|
report_loc=None,
|
@@ -51,13 +51,16 @@ def FuncStars(
|
|
51
51
|
yscale = np.float64(yscale)
|
52
52
|
if y_loc is None:
|
53
53
|
y_loc = np.min(ylim) + yscale * (np.max(ylim) - np.min(ylim))
|
54
|
+
else:
|
55
|
+
y_loc=y_loc+(1-yscale) * np.abs(np.diff(ylim))+0.1 *y_loc
|
54
56
|
xcenter = np.mean([x1, x2])
|
57
|
+
|
55
58
|
# ns / *
|
56
59
|
if alpha < pval:
|
57
60
|
if nsshow == "on":
|
58
61
|
ns_str = f"p={round(pval, 3)}" if pval < 0.9 else "ns"
|
59
62
|
color = "m" if pval < 0.1 else "k"
|
60
|
-
|
63
|
+
ax.text(
|
61
64
|
xcenter,
|
62
65
|
y_loc,
|
63
66
|
ns_str,
|
@@ -70,34 +73,34 @@ def FuncStars(
|
|
70
73
|
# bbox=dict(facecolor=None, edgecolor=None, color=None, linewidth=None)
|
71
74
|
)
|
72
75
|
elif 0.01 < pval <= alpha:
|
73
|
-
|
76
|
+
ax.text(
|
74
77
|
xcenter,
|
75
78
|
y_loc,
|
76
79
|
symbol,
|
77
80
|
ha="center",
|
78
|
-
va="center_baseline",
|
81
|
+
va="top",#"center_baseline",
|
79
82
|
fontsize=fontsize,
|
80
83
|
fontname=fontname,
|
81
84
|
color=symbolcolor,
|
82
85
|
)
|
83
86
|
elif 0.001 < pval <= 0.01:
|
84
|
-
|
87
|
+
ax.text(
|
85
88
|
xcenter,
|
86
89
|
y_loc,
|
87
90
|
symbol * 2,
|
88
91
|
ha="center",
|
89
|
-
va="center_baseline",
|
92
|
+
va="top",#"center_baseline",
|
90
93
|
fontsize=fontsize,
|
91
94
|
fontname=fontname,
|
92
95
|
color=symbolcolor,
|
93
96
|
)
|
94
97
|
elif 0 < pval <= 0.001:
|
95
|
-
|
98
|
+
ax.text(
|
96
99
|
xcenter,
|
97
100
|
y_loc,
|
98
101
|
symbol * 3,
|
99
102
|
ha="center",
|
100
|
-
va="center_baseline",
|
103
|
+
va="top",#"center_baseline",
|
101
104
|
fontsize=fontsize,
|
102
105
|
fontname=fontname,
|
103
106
|
color=symbolcolor,
|
@@ -106,7 +109,7 @@ def FuncStars(
|
|
106
109
|
if linego and 0 < pval <= 0.05:
|
107
110
|
# horizontal line
|
108
111
|
if yscale <= 0.99:
|
109
|
-
|
112
|
+
ax.plot(
|
110
113
|
[x1 + np.abs(np.diff(xlim)) * 0.01, x2 - np.abs(np.diff(xlim)) * 0.01],
|
111
114
|
[
|
112
115
|
y_loc - np.abs(np.diff(ylim)) * 0.03,
|
@@ -117,7 +120,7 @@ def FuncStars(
|
|
117
120
|
linewidth=linewidth,
|
118
121
|
)
|
119
122
|
# vertical line
|
120
|
-
|
123
|
+
ax.plot(
|
121
124
|
[x1 + np.abs(np.diff(xlim)) * 0.01, x1 + np.abs(np.diff(xlim)) * 0.01],
|
122
125
|
[
|
123
126
|
y_loc - np.abs(np.diff(ylim)) * tailindicator[0],
|
@@ -127,7 +130,7 @@ def FuncStars(
|
|
127
130
|
color=linecolor,
|
128
131
|
linewidth=linewidth,
|
129
132
|
)
|
130
|
-
|
133
|
+
ax.plot(
|
131
134
|
[x2 - np.abs(np.diff(xlim)) * 0.01, x2 - np.abs(np.diff(xlim)) * 0.01],
|
132
135
|
[
|
133
136
|
y_loc - np.abs(np.diff(ylim)) * tailindicator[1],
|
@@ -138,7 +141,7 @@ def FuncStars(
|
|
138
141
|
linewidth=linewidth,
|
139
142
|
)
|
140
143
|
else:
|
141
|
-
|
144
|
+
ax.plot(
|
142
145
|
[x1 + np.abs(np.diff(xlim)) * 0.01, x2 - np.abs(np.diff(xlim)) * 0.01],
|
143
146
|
[
|
144
147
|
np.min(ylim)
|
@@ -153,7 +156,7 @@ def FuncStars(
|
|
153
156
|
linewidth=linewidth,
|
154
157
|
)
|
155
158
|
# vertical line
|
156
|
-
|
159
|
+
ax.plot(
|
157
160
|
[x1 + np.abs(np.diff(xlim)) * 0.01, x1 + np.abs(np.diff(xlim)) * 0.01],
|
158
161
|
[
|
159
162
|
np.min(ylim)
|
@@ -167,7 +170,7 @@ def FuncStars(
|
|
167
170
|
color=linecolor,
|
168
171
|
linewidth=linewidth,
|
169
172
|
)
|
170
|
-
|
173
|
+
ax.plot(
|
171
174
|
[x2 - np.abs(np.diff(xlim)) * 0.01, x2 - np.abs(np.diff(xlim)) * 0.01],
|
172
175
|
[
|
173
176
|
np.min(ylim)
|
@@ -182,7 +185,7 @@ def FuncStars(
|
|
182
185
|
linewidth=linewidth,
|
183
186
|
)
|
184
187
|
if values_below is not None:
|
185
|
-
|
188
|
+
ax.text(
|
186
189
|
xcenter,
|
187
190
|
y_loc * (-0.1),
|
188
191
|
values_below,
|
@@ -194,7 +197,7 @@ def FuncStars(
|
|
194
197
|
)
|
195
198
|
# report / comments
|
196
199
|
if report is not None:
|
197
|
-
|
200
|
+
ax.text(
|
198
201
|
xcenter,
|
199
202
|
report_loc,
|
200
203
|
report,
|
@@ -261,7 +264,7 @@ def FuncCmpt(x1, x2, pmc="auto", pair="unpaired", verbose=True):
|
|
261
264
|
x1, x2, center="median", proportiontocut=0.05
|
262
265
|
)
|
263
266
|
VarType = True if pval_lev > 0.05 and nX1 == nX2 else False
|
264
|
-
print(pair)
|
267
|
+
# print(pair)
|
265
268
|
if "np" in pair: # 'unpaired'
|
266
269
|
if VarType and Normality:
|
267
270
|
# The independent t-test requires that the dependent variable is approximately normally
|
@@ -278,7 +281,7 @@ def FuncCmpt(x1, x2, pmc="auto", pair="unpaired", verbose=True):
|
|
278
281
|
)
|
279
282
|
notes_stat = "unpaired t test"
|
280
283
|
notes_APA = (
|
281
|
-
f"t({nX1+nX2-2})={round(stat_value,
|
284
|
+
f"t({nX1+nX2-2})={round(stat_value,3)},p={round(pval,3)}"
|
282
285
|
)
|
283
286
|
else:
|
284
287
|
# If the Levene's Test for Equality of Variances is statistically significant,
|
@@ -297,7 +300,7 @@ def FuncCmpt(x1, x2, pmc="auto", pair="unpaired", verbose=True):
|
|
297
300
|
notes_stat = "Welchs t-test"
|
298
301
|
# note: APA FORMAT
|
299
302
|
notes_APA = (
|
300
|
-
f"t({nX1+nX2-2})={round(stat_value,
|
303
|
+
f"t({nX1+nX2-2})={round(stat_value,3)},p={round(pval,3)}"
|
301
304
|
)
|
302
305
|
elif "pa" in pair and "np" not in pair: # 'paired'
|
303
306
|
# the paired-samples t-test is considered “robust” in handling violations of normality
|
@@ -309,7 +312,7 @@ def FuncCmpt(x1, x2, pmc="auto", pair="unpaired", verbose=True):
|
|
309
312
|
notes_stat = "paired t test"
|
310
313
|
# note: APA FORMAT
|
311
314
|
notes_APA = (
|
312
|
-
f"t({sum([nX1-1])})={round(stat_value,
|
315
|
+
f"t({sum([nX1-1])})={round(stat_value,3)},p={round(pval,3)}"
|
313
316
|
)
|
314
317
|
elif cfg_pmc == "non-parametric":
|
315
318
|
if "np" in pair: # Perform Mann-Whitney
|
@@ -318,18 +321,18 @@ def FuncCmpt(x1, x2, pmc="auto", pair="unpaired", verbose=True):
|
|
318
321
|
)
|
319
322
|
notes_stat = "Mann-Whitney U"
|
320
323
|
if nX1 == nX2:
|
321
|
-
notes_APA = f"U(n={nX1})={round(stat_value,
|
324
|
+
notes_APA = f"U(n={nX1})={round(stat_value,3)},p={round(pval,3)}"
|
322
325
|
else:
|
323
|
-
notes_APA = f"U(n1={nX1},n2={nX2})={round(stat_value,
|
326
|
+
notes_APA = f"U(n1={nX1},n2={nX2})={round(stat_value,3)},p={round(pval,3)}"
|
324
327
|
elif "pa" in pair and "np" not in pair: # Wilcoxon signed-rank test
|
325
328
|
stat_value, pval = stats.wilcoxon(
|
326
329
|
x1, x2, method="exact", nan_policy="omit"
|
327
330
|
)
|
328
331
|
notes_stat = "Wilcoxon signed-rank"
|
329
332
|
if nX1 == nX2:
|
330
|
-
notes_APA = f"Z(n={nX1})={round(stat_value,
|
333
|
+
notes_APA = f"Z(n={nX1})={round(stat_value,3)},p={round(pval,3)}"
|
331
334
|
else:
|
332
|
-
notes_APA = f"Z(n1={nX1},n2={nX2})={round(stat_value,
|
335
|
+
notes_APA = f"Z(n1={nX1},n2={nX2})={round(stat_value,3)},p={round(pval,3)}"
|
333
336
|
|
334
337
|
# filling output
|
335
338
|
output["stat"] = stat_value
|
@@ -383,7 +386,7 @@ def FuncCmpt(x1, x2, pmc="auto", pair="unpaired", verbose=True):
|
|
383
386
|
# =============================================================================
|
384
387
|
|
385
388
|
|
386
|
-
def str_mean_sem(data: list, delimit=
|
389
|
+
def str_mean_sem(data: list, delimit=3):
|
387
390
|
mean_ = np.nanmean(data)
|
388
391
|
sem_ = np.nanstd(data, ddof=1) / np.sqrt(sum(~np.isnan(data)))
|
389
392
|
return str(round(mean_, delimit)) + "±" + str(round(sem_, delimit))
|
@@ -404,6 +407,7 @@ def FuncMultiCmpt(
|
|
404
407
|
subject=None,
|
405
408
|
group=None,
|
406
409
|
verbose=True,
|
410
|
+
post_hoc=False
|
407
411
|
):
|
408
412
|
if group is None:
|
409
413
|
group = factor
|
@@ -515,12 +519,12 @@ def FuncMultiCmpt(
|
|
515
519
|
if "np" in cfg_pair: # 'unpaired'
|
516
520
|
res_tab = run_kruskal(data, dv, factor)
|
517
521
|
notes_stat = f"Non-parametric Kruskal: {data[factor].nunique()} Way ANOVA"
|
518
|
-
notes_APA = f'H({res_tab.ddof1[0]},n={data.shape[0]})={round(res_tab.H[0],
|
522
|
+
notes_APA = f'H({res_tab.ddof1[0]},n={data.shape[0]})={round(res_tab.H[0],3)},p={round(res_tab["p-unc"][0],3)}'
|
519
523
|
|
520
524
|
elif "pa" in cfg_pair and "np" not in cfg_pair: # 'paired'
|
521
525
|
res_tab = run_friedman(data, dv, factor, subject, method="chisq")
|
522
526
|
notes_stat = f"Non-parametric {data[factor].nunique()} Way Friedman repeated measures ANOVA"
|
523
|
-
notes_APA = f'X^2({res_tab.ddof1[0]})={round(res_tab.Q[0],
|
527
|
+
notes_APA = f'X^2({res_tab.ddof1[0]})={round(res_tab.Q[0],3)},p={round(res_tab["p-unc"][0],3)}'
|
524
528
|
|
525
529
|
# =============================================================================
|
526
530
|
# # Post-hoc
|
@@ -535,7 +539,10 @@ def FuncMultiCmpt(
|
|
535
539
|
go_mix_between = None if ("pa" in cfg_pair) or ("np" not in cfg_pair) else factor
|
536
540
|
go_mix_within = within if ("mix" in cfg_pair) or ("both" in cfg_pair) else None
|
537
541
|
go_mix_within = factor if ("pa" in cfg_pair) or ("np" not in cfg_pair) else None
|
542
|
+
|
538
543
|
if res_tab["p-unc"][0] <= 0.05:
|
544
|
+
post_hoc=True
|
545
|
+
if post_hoc:
|
539
546
|
# Pairwise Comparisons
|
540
547
|
method_post_hoc = [
|
541
548
|
"bonf", # 'bonferroni', # : one-step correction
|
@@ -602,7 +609,10 @@ def FuncMultiCmpt(
|
|
602
609
|
# # filling output
|
603
610
|
# =============================================================================
|
604
611
|
|
605
|
-
pd.set_option(
|
612
|
+
pd.set_option('display.max_columns', None) # Show all columns
|
613
|
+
pd.set_option('display.max_colwidth', None) # No limit on column width
|
614
|
+
pd.set_option('display.expand_frame_repr', False) # Prevent line-wrapping
|
615
|
+
|
606
616
|
output["stat"] = notes_stat
|
607
617
|
# print(output['APA'])
|
608
618
|
output["APA"] = notes_APA
|
@@ -616,21 +626,21 @@ def FuncMultiCmpt(
|
|
616
626
|
def display_output(output: dict):
|
617
627
|
if isinstance(output, pd.DataFrame):
|
618
628
|
output = output.to_dict(orient="list")
|
619
|
-
# ['res_posthoc', 'stat', 'APA', 'pval', 'res_tab']
|
620
|
-
|
621
|
-
#
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
except:
|
626
|
-
|
629
|
+
# ['res_posthoc', 'stat', 'APA', 'pval', 'res_tab']
|
630
|
+
|
631
|
+
# ? show APA
|
632
|
+
# print(f"\n\ndisplay stat_output")
|
633
|
+
# try:
|
634
|
+
# print(f"APA: {output["APA"]}")
|
635
|
+
# except:
|
636
|
+
# pass
|
627
637
|
try:
|
628
|
-
print("
|
638
|
+
print("stats table: ⤵")
|
629
639
|
display(output["res_tab"])
|
630
640
|
except:
|
631
641
|
pass
|
632
642
|
try:
|
633
|
-
print("
|
643
|
+
print(f"APA ⤵\n{output["APA"][0]} ⤵\npost-hoc analysis ⤵")
|
634
644
|
display(output["res_posthoc"])
|
635
645
|
except:
|
636
646
|
pass
|
@@ -692,17 +702,17 @@ def extract_apa(res_tab):
|
|
692
702
|
notes_APA = []
|
693
703
|
if "ddof1" in res_tab:
|
694
704
|
for irow in range(res_tab.shape[0]):
|
695
|
-
note_tmp = f'{res_tab.Source[irow]}:F{round(res_tab.ddof1[irow]),round(res_tab.ddof2[irow])}={round(res_tab.F[irow],
|
696
|
-
notes_APA.append(
|
705
|
+
note_tmp = f'{res_tab.Source[irow]}:F{round(res_tab.ddof1[irow]),round(res_tab.ddof2[irow])}={round(res_tab.F[irow],3)},p={round(res_tab["p-unc"][irow],3)}'
|
706
|
+
notes_APA.append(note_tmp)
|
697
707
|
elif "DF" in res_tab:
|
698
708
|
for irow in range(res_tab.shape[0] - 1):
|
699
|
-
note_tmp = f'{res_tab.Source[irow]}:F{round(res_tab.DF[irow]),round(res_tab.DF[res_tab.shape[0]-1])}={round(res_tab.F[irow],
|
700
|
-
notes_APA.append(
|
701
|
-
notes_APA.append(
|
709
|
+
note_tmp = f'{res_tab.Source[irow]}:F{round(res_tab.DF[irow]),round(res_tab.DF[res_tab.shape[0]-1])}={round(res_tab.F[irow],3)},p={round(res_tab["p-unc"][irow],3)}'
|
710
|
+
notes_APA.append(note_tmp)
|
711
|
+
notes_APA.append(np.nan)
|
702
712
|
elif "DF1" in res_tab: # in 'mix' case
|
703
713
|
for irow in range(res_tab.shape[0]):
|
704
|
-
note_tmp = f'{res_tab.Source[irow]}:F{round(res_tab.DF1[irow]),round(res_tab.DF2[irow])}={round(res_tab.F[irow],
|
705
|
-
notes_APA.append(
|
714
|
+
note_tmp = f'{res_tab.Source[irow]}:F{round(res_tab.DF1[irow]),round(res_tab.DF2[irow])}={round(res_tab.F[irow],3)},p={round(res_tab["p-unc"][irow],3)}'
|
715
|
+
notes_APA.append(note_tmp)
|
706
716
|
return notes_APA
|
707
717
|
|
708
718
|
|
@@ -1131,7 +1141,17 @@ def df2array(data: pd.DataFrame, x, y, hue=None, sort=False):
|
|
1131
1141
|
a = padcat(a, new_, axis=0)
|
1132
1142
|
return sort_rows_move_nan(a).T
|
1133
1143
|
|
1134
|
-
|
1144
|
+
def array2df(data: np.ndarray):
|
1145
|
+
df = pd.DataFrame()
|
1146
|
+
df["group"] = (
|
1147
|
+
np.tile(
|
1148
|
+
["group" + str(i) for i in range(1, data.shape[1] + 1)], [data.shape[0], 1]
|
1149
|
+
)
|
1150
|
+
.reshape(-1, 1, order="F")[:, 0]
|
1151
|
+
.tolist()
|
1152
|
+
)
|
1153
|
+
df["value"] = data.reshape(-1, 1, order="F")
|
1154
|
+
return df
|
1135
1155
|
def padcat(*args, fill_value=np.nan, axis=1, order="row"):
|
1136
1156
|
"""
|
1137
1157
|
Concatenate vectors with padding.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
py2ls/.DS_Store,sha256=l7m93mLt2ckidOORlgzbfdGcDJ5emCexs-GHEiKbEaQ,6148
|
2
|
-
py2ls/.git/COMMIT_EDITMSG,sha256=
|
3
|
-
py2ls/.git/FETCH_HEAD,sha256=
|
2
|
+
py2ls/.git/COMMIT_EDITMSG,sha256=5xj-jWMbrdOc9m7gSn-UcsAQ9FMNvWSbLWSsrOUIO5w,7
|
3
|
+
py2ls/.git/FETCH_HEAD,sha256=6cJaQzb6VhkvNNm-KsABX6R28FNKZB8qMmqacDEP_dQ,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,25 +17,29 @@ 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=B5IywwCaOb2OVM4Y6a-PbFrE0dw5kWJNBmS_pt5rX64,2663
|
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=PxF4A3pZNQ0cmb9tDaWdAqUEQAjdzttQQPRzs_rZ2_Q,3379
|
23
|
+
py2ls/.git/logs/refs/heads/main,sha256=PxF4A3pZNQ0cmb9tDaWdAqUEQAjdzttQQPRzs_rZ2_Q,3379
|
24
|
+
py2ls/.git/logs/refs/remotes/origin/HEAD,sha256=VZ_d8iu4auJbbS2EiAF5JWG39Zwp02nsOZ9vTBrHyOw,23362
|
25
|
+
py2ls/.git/logs/refs/remotes/origin/main,sha256=X52i-ullLIOoYAPiBN7ngbschyk88soEX4fCNjw2fGk,3040
|
26
26
|
py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1,sha256=hEQ8nqJnGsfFsuV5wc4cZas58rehXvT0v5ANx1zmMAY,584
|
27
27
|
py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34,sha256=NOyYvrJxATpK3aDdP1_stwkqOQRDwJn7DSy6isyKImE,925
|
28
28
|
py2ls/.git/objects/0b/409e1bc918277010f5679b402d1d1dda53e15c,sha256=y5S1XaGxJz1NXi-SPWjPC_NKIqqSbZv9oOg74MzBihY,156
|
29
|
+
py2ls/.git/objects/12/c2808a1b3a4d0892a4154dfba1e2ae3770fa73,sha256=KCfdXBjfmuZQ992RB3GeaVtOeqfj-UnlTqHXywPgVP8,786
|
29
30
|
py2ls/.git/objects/14/449a0e6ba4ea2f1a73acf63ef91c9c6193f9ed,sha256=PomZFmCUCQM1ii0wH-OJGSHLQCTqRtIwE5w3C0TtzSY,171
|
30
31
|
py2ls/.git/objects/15/a8e468aacfcb440e090020f36d0b985d45da23,sha256=xiRunMcN5I_B2hHgBUFupR-F0b8H_CQTmmAZG9XkZik,3215
|
31
32
|
py2ls/.git/objects/1a/b4585881a6a42889f01aa0cfe25fd5acfaf46f,sha256=iQsKMPNKUs4WQwhiLgXmG5V3xKyIgxmc13ZwbBATvhQ,165
|
32
33
|
py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8,sha256=DkqkGgVpp0Zdj20Cfr_ptCecgY-inluZoOabSa7S1Is,170
|
34
|
+
py2ls/.git/objects/1c/9314c5f69b9390068a2a8616875d974849d71f,sha256=DD_vukOgPoVEIxtm13zC8HHqd2kfF6w4yiDRt-5TLBk,15678
|
33
35
|
py2ls/.git/objects/1d/fe9d9633b24ea560354f4f93d39c6e5f163ea0,sha256=mV_84wLqIitnSYmzfrNpTzwVP9AmksiRI0Fjltwl0Pg,8872
|
34
36
|
py2ls/.git/objects/20/72c28e83f4347959d29f7b3a6c1fc3e4ee6b59,sha256=85riTUsfNmOwOoolBNgC0HegJ6LajYl5vFDl_l3W19Y,9947
|
35
37
|
py2ls/.git/objects/24/6b368b986f758630c46dc02b7fa512b53422f7,sha256=sw7ERFCFu7m6fnURAqQfQ4GWShaARr-Vc6GRnlOPkxU,8512
|
36
38
|
py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46,sha256=4ic5vOwEdfbGL8oARSVEeAnSoDs14-gggGZEL-61nYE,564
|
39
|
+
py2ls/.git/objects/2a/ae95d517d213b660bf4f65a4e0cfae7bb893eb,sha256=V0MJF1QXVSLDntEWS1n3_lErS_faBLwlP67fXv_Bysk,776
|
37
40
|
py2ls/.git/objects/30/a2f8da47ee947811dc8d993f5a06a45de374f4,sha256=u5W33_qNtTs1-U8Fardx-zB_udqKvuCm5kiw1mQGdsU,3218
|
38
41
|
py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad,sha256=_QlClFT2799H_igDlGPr6Uz3SqoPN5v-hehesdIj18U,164
|
42
|
+
py2ls/.git/objects/34/9e31b6a3634cea102ce5588b98c11cc1738605,sha256=drNtu4yQrw0rWqk6SmHnsW0ZA3Jtvut8WG9S15gyTwk,1219
|
39
43
|
py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971,sha256=X18sHo17gQTxusNptoILoWxSfU0ulrsZvbETlBtV5aY,2327
|
40
44
|
py2ls/.git/objects/36/e56a361f526eafa59c5235a5c990bf288b5f9c,sha256=7L1L-iqVvuufrlfEE2myD0-QnAPueFMySKetu08W-Pc,34216
|
41
45
|
py2ls/.git/objects/36/ef43e50009e59db11812c258846d9e38718173,sha256=0nwCwQSuQAdGyD2NfEK-_L12ydE9nGVKBXOfFq_Lndc,169
|
@@ -45,13 +49,16 @@ py2ls/.git/objects/3c/bbe5f4173d165127b9ad96119f1ec24c306ffc,sha256=S1BXemROYtzR
|
|
45
49
|
py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9,sha256=91oqbTWfUE1d_hT_1ptYmRUb5pOQ1X4oxQxpF6NXjKU,8501
|
46
50
|
py2ls/.git/objects/41/dcf4b3bf0460946b2da93776cf9e836d62178f,sha256=jdsIHuNTgeely4JL072ktLgpDHB-97GDL7unti8TLrw,93
|
47
51
|
py2ls/.git/objects/43/dbd49b2ee367c5434dd545e3b5795434f2ef0b,sha256=DAzt0dWp2KsuuImCKp7N9ia7KaCDNqwB-tYIx3Wf_c0,565
|
52
|
+
py2ls/.git/objects/45/b1b6178bacbfc997811a998b5cc60c1ea7fac8,sha256=7Oea5ZA0nNs6-jQV0yCSr4ZSCcm7m_z3UYVLNmDBj2w,167
|
48
53
|
py2ls/.git/objects/48/a88fc5806305d0bb0755ee6801161b79696972,sha256=f3JStE39k_hPGE-WRwqZtDTjQkfOmBVb_6-ELBbScjI,203
|
49
54
|
py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042,sha256=QnSXlNWzKLoMzDHNAiwe06vqJEQj9xu0q-9PvCUbtbM,39680
|
50
55
|
py2ls/.git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6,sha256=p0M2WLqiTe6X2FI_k5Aj0IEsE85jqLa58sVdmV8x1vU,255
|
51
56
|
py2ls/.git/objects/53/e0deb1cb4c2c606bced6e7f9a66b0fda60980d,sha256=muq6m7_XRSFPzypW-m9mhpKfsomCr4s7GfkgM3gh2pc,482344
|
52
57
|
py2ls/.git/objects/56/e4e8b2d5545e0256090f45aa8fc42c5fe067d0,sha256=VsjKo1biAzCV-iIfwCDTPzyfP63K43hdZqJpDP70Iik,529
|
58
|
+
py2ls/.git/objects/57/63d0c52f5c9c69e89d514a1f96034947abe21a,sha256=paeSWaNvwGxgiAgIVnaubJ-HfOcdF02Z16CXV5JAra0,765
|
53
59
|
py2ls/.git/objects/57/bd1c0199483ab316235b094543b85edec6c35e,sha256=Kj4KKk20OkXuVwBUvNU0Pfd65tWhzpPly2eKy9fMqLs,6656
|
54
60
|
py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2,sha256=3Pf6NS8OTK4EdHZGVeJ421BtK7w4WJncQDBauZI_wW4,34
|
61
|
+
py2ls/.git/objects/59/380c4c26bdcd4d9b71ae3e2e35f05b3f26c5ab,sha256=rRWGHESg9_bbuU2TSBZQdnNG857XWmNeQRi3NM5w3MI,207
|
55
62
|
py2ls/.git/objects/5a/192565abf89c9d765af846ce6d53a92b1ce7ad,sha256=dQIPEX4XIxu728xyhDpZLTbx8Jb060sefP2MbdjaF38,2039
|
56
63
|
py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a,sha256=aJD9iF_LmYSrqDepXFBZKN1yMYbQczVkN_wnrDosBdI,5620
|
57
64
|
py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99,sha256=IQZi5MkbRu3ToRUPsRcXuh1Xa3pkAz_HDRCVhNL89ds,5753
|
@@ -60,13 +67,18 @@ py2ls/.git/objects/62/7c81b23b4e56e87b042b650b0103653cc9e34a,sha256=pv9wgBxnvJUF
|
|
60
67
|
py2ls/.git/objects/62/d90ccf8cbefdc2e4fd475e7c6f4f76e9fdf801,sha256=1L473QanNpnumCkE8tG6wtbvLqFtNeoagL9SJmasXNY,155
|
61
68
|
py2ls/.git/objects/63/100154b27846e8010e55b6bf4b3d7762c14c5f,sha256=PvZvwq6vF9B86JlC0w307d9jtFgzBSKYVT2CL3WyO6I,673
|
62
69
|
py2ls/.git/objects/64/27a4edff08f93d98f511418423f09f2ab90bcd,sha256=RyNngwk9fvdvvvywmNfllnim718fWNjVauH9U2y8Q2s,258
|
70
|
+
py2ls/.git/objects/66/6227eeeba24073e63811e89f1449f3d958f183,sha256=2572ZYxgtgCTb0-YSgg4uGdJK1FtRcrw_IMGkc2XIF0,16300
|
71
|
+
py2ls/.git/objects/66/c998778721d424bd0aae80602dabbffa93af2e,sha256=EBxxQDGdWJ_-SoTfES1Vsri0o5ocxpa2NhXtfltJ69A,776
|
63
72
|
py2ls/.git/objects/68/6df3072c8b025fb18106ed2df505994ad062a9,sha256=H8lEzgzSfk-ojjgXYAgIkLlSguSo-vnQHO9y4pb8Kzc,28575
|
64
73
|
py2ls/.git/objects/69/13c452ca319f7cbf6a0836dc10a5bb033c84e4,sha256=NYLQQZTfd0htZst42ALS2dmryv1q_l1N19ZfHEbz_38,3193
|
65
74
|
py2ls/.git/objects/6a/52e747a2b349b128d1490d9e896d2323818eb7,sha256=Qc_B3_xxlWmjooFu274r82b583uf_HpIpDBldr9fqVI,34966
|
66
75
|
py2ls/.git/objects/6b/7fde264d93a7a0986d394c46c7650d0ce2ab92,sha256=iIl0-RF0wd6BSEjzczgUyApxc899PbdTl04JbDn6_-Q,166
|
67
76
|
py2ls/.git/objects/6c/cebb29b7f3f5b0c889f6dadbf9ff066554587d,sha256=UylkFWAfhStNVQRQuC9CzpaWaT9uHCVs1mn7ecOma8I,609
|
77
|
+
py2ls/.git/objects/6d/c2cdf4a84e538e5d4777486aeff87e42f41799,sha256=42KVrSIdWJa1wDByhA3dZsTRsAO_u34yOR-C0hV9YUo,158
|
68
78
|
py2ls/.git/objects/6d/ee29dbdcc84edeeacede105110446f3ccac963,sha256=-4Bi-tw0O-EbKxwJfMk_zHznNy0jvOK9G8hrXzz8AdA,9538
|
69
79
|
py2ls/.git/objects/71/36b2074a2754be8b58127d82250e5b37e3c373,sha256=cbVFQaBx0Q5QkZ1wQle-iIxNx14JxGSx3G8aQ7EbbAA,586
|
80
|
+
py2ls/.git/objects/72/245a05b0966011cb381e6b32b0465000e969ab,sha256=Jph97UOQ6ZXwAEIZHkd037rPpoj_hbs74kMIj1nmIVc,14013
|
81
|
+
py2ls/.git/objects/72/e4179337639859678ddaecf38b16f33aaec8e1,sha256=bdgg9rmPgKP3UH1-QDqIrCgzmrFVRgdByrgYuQkzVJg,436
|
70
82
|
py2ls/.git/objects/78/3d4167bc95c9d2175e0df03ef1c1c880ba75ab,sha256=SK2QDjDBiDhVMG1I5p19g4RbEm2Rax7mYnxawmVZYxs,15523
|
71
83
|
py2ls/.git/objects/79/7ae089b2212a937840e215276005ce76881307,sha256=lQOKF2pb1JvipI3eT79X0-TuMGWsy1A-Yw4BCgKZNOM,33472
|
72
84
|
py2ls/.git/objects/7e/5956c806b5edc344d46dab599dec337891ba1f,sha256=sfqJBiSNj-gyJo4D7xkmRAo76mC2ztjqeZZsl4ifULA,162
|
@@ -80,6 +92,7 @@ py2ls/.git/objects/94/74152b4b463d70ae5ad07f0c658be3e296026b,sha256=jmA6qTuUVlds
|
|
80
92
|
py2ls/.git/objects/97/1aef09ea939f46b60b9646f8d524c78a9220f4,sha256=lWu9FuqxnDT-H_jZGYlA0Tbx6NdH7bScu5EVl3BoAxU,2532
|
81
93
|
py2ls/.git/objects/9d/0df52899fe95279059286d9c0ec42287edc168,sha256=67nV3TLo-fwe4lt0wwvxoDnVNHc1IpapRyAY2STP3iI,564
|
82
94
|
py2ls/.git/objects/a1/5389729850729fc7bd78a54f26fce77f30be12,sha256=iNB4jWPKwQfHJSwbGiXz7UgC5J-LbLZu19ylWNr2COs,159
|
95
|
+
py2ls/.git/objects/a1/906da89d1174f74867800c74c43af36253bd5e,sha256=vKUcX4zLVSvZ2Z_FXP-1czZF9MkVMsFidtg43CEhxkQ,780
|
83
96
|
py2ls/.git/objects/a4/63fdd23e5efd713db8a71f316f3a1c7bd60916,sha256=1D3vdbuPXEOyMwYX537RKT7CnjTFVpDhjjGY6Cf87vs,697
|
84
97
|
py2ls/.git/objects/a5/ec8f74642fbba27f7ea78c53b372ae0c7dedce,sha256=Sl17Ka_UfjSZyEVDLv3yz8TjXL3O1u3gqOn8sXFPvTM,565
|
85
98
|
py2ls/.git/objects/a7/3e13eafee65c5b8d73ad2d3ea46d0eee82f0d3,sha256=iv3uTzna5XBzTTwF5ZTOpdrCiv0wqz1fuDpZ-m8QO2I,565
|
@@ -97,6 +110,7 @@ py2ls/.git/objects/c6/7f17e5707313600efcb85e9a3fedea35dba591,sha256=TL7rDIWiaWlk
|
|
97
110
|
py2ls/.git/objects/c6/f32aced880bd165a251cb52b26b0c1107e2141,sha256=ybarsWjoo-JCb8gnxsG6VKt6Sal2VwQiOEZYxQl8DcE,29556
|
98
111
|
py2ls/.git/objects/cd/822b3574a88ebdd1ed82fd6983f37e626d52b4,sha256=MJbPJ-8vpfVTUMhzyzTp5qGmZYgsgrG-7nwwzDdODlQ,617
|
99
112
|
py2ls/.git/objects/cf/0c0d9c6fb09473aaeb7f7e2edbd770c3f2ef3d,sha256=T_nV0GrgpVu3mOJ4fYcCW98oCunzgqy0DnSX0luy04Q,183
|
113
|
+
py2ls/.git/objects/d2/992df305f4b56a466a2f221aeb182ddd20f418,sha256=6zInwArNx-uw1OzxOIhTAZiKpelI3cyhW7Z-dj-Ws2I,9546
|
100
114
|
py2ls/.git/objects/d6/9ab1c4aadf279936dd778e8346ba60f74705b6,sha256=WcfdSMKqfiWT5TOWVUcDj0XDaD2hYxDnyIRNlYGutL8,34976
|
101
115
|
py2ls/.git/objects/d8/4688b54c0040a30976b3a6540bc47adf7ce680,sha256=1gJp1iTVAooc5PZZsiIj215-J1RtJ-_zy22_9jZ8jAY,160
|
102
116
|
py2ls/.git/objects/d9/005f2cc7fc4e65f14ed5518276007c08cf2fd0,sha256=IJIoz93V7pf9yx43U1JdN8gBq_LWtw8A9Z2YMPnq_B0,1450
|
@@ -104,20 +118,27 @@ py2ls/.git/objects/d9/c2403fd166ce791b4e9d0c6792ed8342c71fcd,sha256=uD7BsKdrmN-9
|
|
104
118
|
py2ls/.git/objects/d9/dfa5aee51e92a541b707e8e7baea6f06deff98,sha256=jMdhZ1i_L5q_UgjOtjLN15PCSCz3pE51FhD3z74ZUr8,163
|
105
119
|
py2ls/.git/objects/db/141dbaa93594df2a8156182f361ee4db829359,sha256=TpKTLvbDc4Blzrp1Pq9JijqDROJyBJ7sCQQBmIuYKZo,845984
|
106
120
|
py2ls/.git/objects/db/ffa8ea7bda721d0cee7b9e4ce5b2ef927733ff,sha256=GhDkvP6JYV26qVg5ETPys1ZEnGlsct9hiXCc24Ky4Xg,565
|
121
|
+
py2ls/.git/objects/dc/c2bdbafb3296e09d9ee4955cfa55d275825f94,sha256=EwQROBwhbTP2VbODehfMwXhSoDC1LknvxBtDkCOCTco,988
|
122
|
+
py2ls/.git/objects/dc/cdbd4266765d840be2ae35ab1752a0fa312c16,sha256=ABBvXL3TWBRyx_q5XQLgg-k0EU2rvMKv3HIXpk73I8c,12583
|
107
123
|
py2ls/.git/objects/dd/87fb5f606fe380d81e6fe3a2c98f9f99e3e09b,sha256=gBHzzOxwRhDCCwm6WWSyN51RSENJhwEojekygZj8qsc,1424
|
108
124
|
py2ls/.git/objects/df/e0770424b2a19faf507a501ebfc23be8f54e7b,sha256=vCdlxwEidekh8i-5TVMVgSLGk9DPZCZAbWqvGYSKQ9c,76
|
125
|
+
py2ls/.git/objects/e2/f2f8f4c25e62a297fc55f36acc6b01cfbab76f,sha256=OnyaP4aCH8kHPj2ZcRsBnUQOGYLmX0OOG8uYtDClmB8,113
|
109
126
|
py2ls/.git/objects/e3/1356f90ea6dd0577b5e0b40b206319adcbf085,sha256=I9_QNwmmtoqSwq29Ixdfv_PgF2x14u2M6sX1eQumwoY,161
|
110
127
|
py2ls/.git/objects/e3/5a4dafc50850cacac7bf76c56db2715cbda2c4,sha256=GAcBj3YSEbm6tm7fGD6al16uBo8LtEtjZ2Hi-UgIsUg,3290
|
111
128
|
py2ls/.git/objects/e9/391ffe371f1cc43b42ef09b705d9c767c2e14f,sha256=RWTy2n8L2XxZQknBFyPczA0Aa_4gSG_Ybcr8e8v4ccc,10264
|
129
|
+
py2ls/.git/objects/ea/3a18cc75e53792744ef754e05d3f4481768c13,sha256=p-Ny3qYi1akV2i58-Fxr0c0c8lhaEVrbr6ek7-v21jM,9369
|
130
|
+
py2ls/.git/objects/ec/40fd8bf8e4c342534a9fc020289e402ba6bc9d,sha256=ptkoZH3jOT5PLgsYhxSutkPvtJ4TUlcD5H5JVJIu_AA,28992
|
112
131
|
py2ls/.git/objects/f1/e50757fddc28b445545dc7e2759b54cdd0f42e,sha256=2NG4lzk2IPOZfJ4tRHvxla63yQTcY_YTOprG1tzK-IY,40554
|
113
132
|
py2ls/.git/objects/f4/b64d3107b39e3ad6f540c6607004ea34e6c024,sha256=0egAtqc0x8hc7U1z91tIjcRhSd_BT2a_gxZxo_7NTJA,564
|
133
|
+
py2ls/.git/objects/f4/ba7f815b886797b73fede071d86e0c134d2bc7,sha256=UispRfx4EvDFujmyICYgMz4gZHqZhO_dbNfiL3MFTNw,332
|
134
|
+
py2ls/.git/objects/f6/44a8ff56fa035105fc517cbb1ac46c3d8e349a,sha256=a_5p_uf5YsJVFzXNWAAQptZr8l7rGNLLxasotb9q0OU,777
|
114
135
|
py2ls/.git/objects/f7/c98ba5c2f903e603b1f5e63d49fbc8a43815cc,sha256=tYbi3A7irrIPB_11bwItuof0Vc9a0MDuLFMNAzRsG3A,33467
|
115
136
|
py2ls/.git/objects/f9/045a08e96eb76848fc4d68e3e3e687cca39a2d,sha256=u29Cwu3SL3HlagZIal5ueGZ3miqgZAtuDbtP8-fUVvE,141
|
116
137
|
py2ls/.git/objects/fa/147e6bb78a2e8db241d231295fd7f1ed061af8,sha256=G9pg5LXv7AdxnPIQsTm2AF3Un314dLRJQYwxmZem9rQ,574
|
117
138
|
py2ls/.git/objects/fc/292e793ecfd42240ac43be407023bd731fa9e7,sha256=hGIYoxKWNT3IPwk3DE4l3FLBbUYF-kXcHcx7KrH9uS0,1971
|
118
|
-
py2ls/.git/refs/heads/main,sha256=
|
139
|
+
py2ls/.git/refs/heads/main,sha256=3R7BfzmwaGeSA28_orvfyaZoX75EId2y8ANpCMQo6TM,41
|
119
140
|
py2ls/.git/refs/remotes/origin/HEAD,sha256=K7aiSqD8bEhBAPXVGim7rYQc0sdV9dk_qiBOXbtOsrQ,30
|
120
|
-
py2ls/.git/refs/remotes/origin/main,sha256=
|
141
|
+
py2ls/.git/refs/remotes/origin/main,sha256=3R7BfzmwaGeSA28_orvfyaZoX75EId2y8ANpCMQo6TM,41
|
121
142
|
py2ls/.gitattributes,sha256=Gh2-F2vCM7SZ01pX23UT8pQcmauXWfF3gwyRSb6ZAFs,66
|
122
143
|
py2ls/.gitignore,sha256=y7GvbD_zZkjPVVIue8AyiuFkDMuUbvMaV65Lgu89To8,2763
|
123
144
|
py2ls/LICENSE,sha256=UOZ1F5fFDe3XXvG4oNnkL1-Ecun7zpHzRxjp-XsMeAo,11324
|
@@ -141,13 +162,13 @@ py2ls/doc.py,sha256=xN3g1OWfoaGUhikbJ0NqbN5eKy1VZVvWwRlhHMgyVEc,4243
|
|
141
162
|
py2ls/export_requirements.py,sha256=x2WgUF0jYKz9GfA1MVKN-MdsM-oQ8yUeC6Ua8oCymio,2325
|
142
163
|
py2ls/freqanalysis.py,sha256=F4218VSPbgL5tnngh6xNCYuNnfR-F_QjECUUxrPYZss,32594
|
143
164
|
py2ls/ips.py,sha256=N7MdOCgJXDQu73YkJQTtDN3RSntzXX7V0MOJ1NYBLEk,100572
|
144
|
-
py2ls/netfinder.py,sha256=
|
145
|
-
py2ls/plot.py,sha256=
|
165
|
+
py2ls/netfinder.py,sha256=KJIvg3JZSsy1dJZHNJvd9Y3oyYG0mbdTjtXimdRs8e8,49182
|
166
|
+
py2ls/plot.py,sha256=ytJf3sWUg-52n5A2RsKd9jfCw3f1sYLPIDc0eOvaQRg,69606
|
146
167
|
py2ls/setuptools-70.1.0-py3-none-any.whl,sha256=2bi3cUVal8ip86s0SOvgspteEF8SKLukECi-EWmFomc,882588
|
147
168
|
py2ls/sleep_events_detectors.py,sha256=bQA3HJqv5qnYKJJEIhCyhlDtkXQfIzqksnD0YRXso68,52145
|
148
|
-
py2ls/stats.py,sha256=
|
169
|
+
py2ls/stats.py,sha256=gPlnPkyLDZnBlWXZ4atCC5_Q0S1nbXwyxL7FGROLq5Q,48025
|
149
170
|
py2ls/translator.py,sha256=bc5FB-wqC4TtQz9gyCP1mE38HqNRJ_pmuRIgKnAlMzM,30581
|
150
171
|
py2ls/wb_detector.py,sha256=7y6TmBUj9exCZeIgBAJ_9hwuhkDh1x_-yg4dvNY1_GQ,6284
|
151
|
-
py2ls-0.1.9.
|
152
|
-
py2ls-0.1.9.
|
153
|
-
py2ls-0.1.9.
|
172
|
+
py2ls-0.1.9.4.dist-info/METADATA,sha256=-idfSTkT2AmukiwTq4TLQM2xEjZgnG5X9hhYW0xpfcg,20017
|
173
|
+
py2ls-0.1.9.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
174
|
+
py2ls-0.1.9.4.dist-info/RECORD,,
|
File without changes
|