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.
Files changed (36) hide show
  1. py2ls/.git/COMMIT_EDITMSG +1 -1
  2. py2ls/.git/FETCH_HEAD +1 -1
  3. py2ls/.git/index +0 -0
  4. py2ls/.git/logs/HEAD +1 -0
  5. py2ls/.git/logs/refs/heads/main +1 -0
  6. py2ls/.git/logs/refs/remotes/origin/HEAD +2 -0
  7. py2ls/.git/logs/refs/remotes/origin/main +1 -0
  8. py2ls/.git/objects/12/c2808a1b3a4d0892a4154dfba1e2ae3770fa73 +0 -0
  9. py2ls/.git/objects/1c/9314c5f69b9390068a2a8616875d974849d71f +0 -0
  10. py2ls/.git/objects/2a/ae95d517d213b660bf4f65a4e0cfae7bb893eb +0 -0
  11. py2ls/.git/objects/34/9e31b6a3634cea102ce5588b98c11cc1738605 +0 -0
  12. py2ls/.git/objects/45/b1b6178bacbfc997811a998b5cc60c1ea7fac8 +0 -0
  13. py2ls/.git/objects/57/63d0c52f5c9c69e89d514a1f96034947abe21a +0 -0
  14. py2ls/.git/objects/59/380c4c26bdcd4d9b71ae3e2e35f05b3f26c5ab +0 -0
  15. py2ls/.git/objects/66/6227eeeba24073e63811e89f1449f3d958f183 +0 -0
  16. py2ls/.git/objects/66/c998778721d424bd0aae80602dabbffa93af2e +0 -0
  17. py2ls/.git/objects/6d/c2cdf4a84e538e5d4777486aeff87e42f41799 +2 -0
  18. py2ls/.git/objects/72/245a05b0966011cb381e6b32b0465000e969ab +0 -0
  19. py2ls/.git/objects/72/e4179337639859678ddaecf38b16f33aaec8e1 +0 -0
  20. py2ls/.git/objects/a1/906da89d1174f74867800c74c43af36253bd5e +0 -0
  21. py2ls/.git/objects/d2/992df305f4b56a466a2f221aeb182ddd20f418 +0 -0
  22. py2ls/.git/objects/dc/c2bdbafb3296e09d9ee4955cfa55d275825f94 +5 -0
  23. py2ls/.git/objects/dc/cdbd4266765d840be2ae35ab1752a0fa312c16 +0 -0
  24. py2ls/.git/objects/e2/f2f8f4c25e62a297fc55f36acc6b01cfbab76f +3 -0
  25. py2ls/.git/objects/ea/3a18cc75e53792744ef754e05d3f4481768c13 +0 -0
  26. py2ls/.git/objects/ec/40fd8bf8e4c342534a9fc020289e402ba6bc9d +0 -0
  27. py2ls/.git/objects/f4/ba7f815b886797b73fede071d86e0c134d2bc7 +0 -0
  28. py2ls/.git/objects/f6/44a8ff56fa035105fc517cbb1ac46c3d8e349a +0 -0
  29. py2ls/.git/refs/heads/main +1 -1
  30. py2ls/.git/refs/remotes/origin/main +1 -1
  31. py2ls/netfinder.py +0 -8
  32. py2ls/plot.py +172 -96
  33. py2ls/stats.py +67 -47
  34. {py2ls-0.1.9.3.dist-info → py2ls-0.1.9.4.dist-info}/METADATA +1 -1
  35. {py2ls-0.1.9.3.dist-info → py2ls-0.1.9.4.dist-info}/RECORD +36 -15
  36. {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 ips
1
+ update
py2ls/.git/FETCH_HEAD CHANGED
@@ -1 +1 @@
1
- a15389729850729fc7bd78a54f26fce77f30be12 branch 'main' of https://github.com/Jianfengliu0413/py2ls
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
@@ -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
@@ -0,0 +1,2 @@
1
+ x��M
2
+ � F��� AǟQ(���KLtL���`�_7�@7��x|ik�v /�`���*9(.��#�����K���h�fMb���.I;"B N�- 猁�-�Kb�b������Yi-�.����UOe�y,��gJ[�K�`��ʫ�İ�f���3u_ �FS
@@ -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
@@ -0,0 +1,3 @@
1
+ xe��
2
+ �0 D;�+�
3
+ �� ����Y����@���x�q7�q{�/)���J�2be��uT[����d������<0~��I{���L�#�.�Z�8��<V�y�������:k
@@ -1 +1 @@
1
- a15389729850729fc7bd78a54f26fce77f30be12
1
+ 6dc2cdf4a84e538e5d4777486aeff87e42f41799
@@ -1 +1 @@
1
- a15389729850729fc7bd78a54f26fce77f30be12
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
- # figsets
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(data=df, dv=y, factor=hue)
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
- res = FuncMultiCmpt(data=df, dv=y, factor=x, **stats_param)
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
- res = FuncMultiCmpt(data=df, dv=y, factor=x)
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
- xticks = np.arange(1, data.shape[1] + 1).tolist()
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
- default_colors = get_color(len(xticks))
573
- legend_hue = None
574
- xangle = 0
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
- opt.setdefault("c", default_colors)
596
- # if len(opt["c"]) < data.shape[1]:
597
- # additional_colors = plt.cm.winter(
598
- # np.linspace(0, 1, data.shape[1] - len(opt["c"]))
599
- # )
600
- # opt["c"] = np.vstack([opt["c"], additional_colors[:, :3]])
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", opt["c"])
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", opt["c"])
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", opt["c"])
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", opt["c"])
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
- label_which = kwargs.get("label_which", "barplot")
736
- if "b" in label_which:
737
- legend_which = "b"
738
- elif "s" in label_which:
739
- legend_which = "s"
740
- elif "bx" in label_which:
741
- legend_which = "bx"
742
- elif "e" in label_which:
743
- legend_which = "e"
744
- elif "v" in label_which:
745
- legend_which = "v"
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 hue is None:
786
- display(res)
787
- add_asterisks(ax, res, xticks_x_loc, xticklabels)
788
- else: # hue is not None
789
- ihue = 1
790
- for i in df[x].unique().tolist():
791
- if hue and stats_param:
792
- if isinstance(stats_param, dict):
793
- if "factor" in stats_param.keys():
794
- res_tmp = FuncMultiCmpt(data=df, dv=y, **stats_param)
795
- else:
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, **stats_param
831
+ data=df[df[x] == i], dv=y, factor=hue
798
832
  )
799
- elif bool(stats_param):
800
- res_tmp = FuncMultiCmpt(data=df, dv=y, factor=hue)
801
- else:
802
- res_tmp = "did not work properly"
803
- xloc_curr = hue_len * (ihue - 1)
804
- add_asterisks(
805
- ax,
806
- res_tmp,
807
- xticks[xloc_curr : xloc_curr + hue_len],
808
- legend_hue,
809
- )
810
- ihue += 1
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
- pval_groups = res["res_tab"]["PR(>F)"].tolist()[0]
1664
- # print(f"p=:{pval_groups}")
1665
- # print(f"xticks:{xticks}")
1666
- # print(f"xticks_x_loc:{xticks_x_loc}")
1667
- if pval_groups <= 0.05:
1668
- A_list = res["res_posthoc"]["A"].tolist()
1669
- B_list = res["res_posthoc"]["B"].tolist()
1670
- xticklabels_array = np.array(xticklabels)
1671
- yscal_ = 0.99
1672
- for A, B, P in zip(
1673
- res["res_posthoc"]["A"].tolist(),
1674
- res["res_posthoc"]["B"].tolist(),
1675
- res["res_posthoc"]["p-unc"].tolist(),
1676
- ):
1677
- index_A = np.where(xticklabels_array == A)[0][0]
1678
- index_B = np.where(xticklabels_array == B)[0][0]
1679
- print(index_A, A, index_B, B, P)
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=xticks_x_loc[index_A],
1683
- x2=xticks_x_loc[index_B],
1684
- pval=P,
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.06, 0.06],
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
- plt.text(
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
- plt.text(
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
- plt.text(
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
- plt.text(
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
- plt.plot(
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
- plt.plot(
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
- plt.plot(
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
- plt.plot(
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
- plt.plot(
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
- plt.plot(
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
- plt.text(
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
- plt.text(
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, 5)},p={round(pval, 5)}"
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, 5)},p={round(pval, 5)}"
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, 5)},p={round(pval, 5)}"
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, 5)},p={round(pval, 5)}"
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, 5)},p={round(pval, 5)}"
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, 5)},p={round(pval, 5)}"
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, 5)},p={round(pval, 5)}"
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=5):
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], 5)},p={round(res_tab["p-unc"][0], 5)}'
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], 5)},p={round(res_tab["p-unc"][0], 5)}'
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("display.max_columns", None)
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
- # res_keys = list(output.keys())
621
- # display(res_keys)
622
- try:
623
- print("APA:")
624
- display(output["APA"])
625
- except:
626
- pass
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("results table:")
638
+ print("stats table:")
629
639
  display(output["res_tab"])
630
640
  except:
631
641
  pass
632
642
  try:
633
- print("posthoc:")
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], 5)},p={round(res_tab["p-unc"][irow], 5)}'
696
- notes_APA.append([note_tmp])
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], 5)},p={round(res_tab["p-unc"][irow], 5)}'
700
- notes_APA.append([note_tmp])
701
- notes_APA.append(["NaN"])
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], 5)},p={round(res_tab["p-unc"][irow], 5)}'
705
- notes_APA.append([note_tmp])
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
  Metadata-Version: 2.1
2
2
  Name: py2ls
3
- Version: 0.1.9.3
3
+ Version: 0.1.9.4
4
4
  Summary: py(thon)2(too)ls
5
5
  Author: Jianfeng
6
6
  Author-email: Jianfeng.Liu0413@gmail.com
@@ -1,6 +1,6 @@
1
1
  py2ls/.DS_Store,sha256=l7m93mLt2ckidOORlgzbfdGcDJ5emCexs-GHEiKbEaQ,6148
2
- py2ls/.git/COMMIT_EDITMSG,sha256=EBFQ6F6FLLKqdBpaLROBL68CNyHmTvOC--uM_TlZ6KI,11
3
- py2ls/.git/FETCH_HEAD,sha256=ZYJf1HGynl3E4z5mK-iNYPEV63GUwDCoI31sbgjlgL0,100
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=XDvwp0KaZw_2pZgn1OPTmqBe78Abnq6O-xcw_aZuOB8,1855
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=0Al8yWeB2OiUKgtEdzKf8Kx9p8_1WI1Mx_X2DXQCbU0,3227
23
- py2ls/.git/logs/refs/heads/main,sha256=0Al8yWeB2OiUKgtEdzKf8Kx9p8_1WI1Mx_X2DXQCbU0,3227
24
- py2ls/.git/logs/refs/remotes/origin/HEAD,sha256=Ofz2UGxUefJXTI9_-ai1ypszAHLZDEmoOEgG0MK7dRk,23038
25
- py2ls/.git/logs/refs/remotes/origin/main,sha256=oKNSm-3X1G53hmgJH1DL6RHf4sTppI3Xe-ljAB2ETJA,2888
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=CSr78UjXX9GHyP0VKBW6on894mO_XNGeh-8R5NFTGqA,41
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=CSr78UjXX9GHyP0VKBW6on894mO_XNGeh-8R5NFTGqA,41
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=OMStrwMAASf1ajlyEfseoaEygo7G5WKBAFRE0LY15Lw,49477
145
- py2ls/plot.py,sha256=Z8Sd9sjOJrdYW84CLmVDactHSQY_9qJ0Dje3hKMybC4,66229
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=sR0exykzzT_NXkQr7YIazKhJg6AKmLS0N6jtzy07Lm0,47366
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.3.dist-info/METADATA,sha256=YkiP0cRJZqlWq9frWtnKdXQTePQy98rr7tqy3Gd706Y,20017
152
- py2ls-0.1.9.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
153
- py2ls-0.1.9.3.dist-info/RECORD,,
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,,