Metadata-Version: 2.1
Name: py2ls
Version: 0.1.6.3
Summary: py(thon)2(too)ls
Author: Jianfeng
Author-email: Jianfeng.Liu0413@gmail.com
Requires-Python: >=3.10,<4.0
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Dist: Deprecated (>=1.2.14,<2.0.0)
Requires-Dist: Jinja2 (>=3.1.4,<4.0.0)
Requires-Dist: MarkupSafe (>=2.1.5,<3.0.0)
Requires-Dist: PyMatting (>=1.1.12,<2.0.0)
Requires-Dist: PyPDF2 (>=3.0.1,<4.0.0)
Requires-Dist: PySocks (>=1.7.1,<2.0.0)
Requires-Dist: PyYAML (>=6.0.1,<7.0.0)
Requires-Dist: Pygments (>=2.18.0,<3.0.0)
Requires-Dist: SciencePlots (>=2.1.1,<3.0.0)
Requires-Dist: appnope (>=0.1.4,<0.2.0)
Requires-Dist: appscript (>=1.2.5,<2.0.0)
Requires-Dist: asttokens (>=2.4.1,<3.0.0)
Requires-Dist: attrs (>=23.2.0,<24.0.0)
Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
Requires-Dist: certifi (>=2024.6.2,<2025.0.0)
Requires-Dist: chardet (>=3.0.4,<4.0.0)
Requires-Dist: charset-normalizer (>=3.3.2,<4.0.0)
Requires-Dist: click (>=8.1.7,<9.0.0)
Requires-Dist: colorcet (>=3.1.0,<4.0.0)
Requires-Dist: coloredlogs (>=15.0.1,<16.0.0)
Requires-Dist: comm (>=0.2.2,<0.3.0)
Requires-Dist: contourpy (>=1.2.1,<2.0.0)
Requires-Dist: cycler (>=0.12.1,<0.13.0)
Requires-Dist: debugpy (>=1.8.1,<2.0.0)
Requires-Dist: decorator (>=5.1.1,<6.0.0)
Requires-Dist: defusedxml (>=0.7.1,<0.8.0)
Requires-Dist: docx (>=0.2.4,<0.3.0)
Requires-Dist: docx2pdf (>=0.1.8,<0.2.0)
Requires-Dist: executing (>=2.0.1,<3.0.0)
Requires-Dist: fake-useragent (>=1.5.1,<2.0.0)
Requires-Dist: flatbuffers (>=24.3.25,<25.0.0)
Requires-Dist: fonttools (>=4.53.0,<5.0.0)
Requires-Dist: fpdf (>=1.7.2,<2.0.0)
Requires-Dist: googletrans (>=4.0.0rc1,<5.0.0)
Requires-Dist: h11 (>=0.9.0,<0.10.0)
Requires-Dist: h2 (>=3.2.0,<4.0.0)
Requires-Dist: hpack (>=3.0.0,<4.0.0)
Requires-Dist: hstspreload (>=2024.6.1,<2025.0.0)
Requires-Dist: httpcore (>=0.9.1,<0.10.0)
Requires-Dist: httpx (>=0.13.3,<0.14.0)
Requires-Dist: humanfriendly (>=10.0,<11.0)
Requires-Dist: hyperframe (>=5.2.0,<6.0.0)
Requires-Dist: idna (>=2.10,<3.0)
Requires-Dist: imageio (>=2.34.1,<3.0.0)
Requires-Dist: img2pdf (>=0.5.1,<0.6.0)
Requires-Dist: ipykernel (>=6.29.4,<7.0.0)
Requires-Dist: ipython (>=8.25.0,<9.0.0) ; python_version >= "3.9" and python_version < "4.0"
Requires-Dist: jedi (>=0.19.1,<0.20.0)
Requires-Dist: joblib (>=1.3.2,<2.0.0)
Requires-Dist: jsonschema (>=4.22.0,<5.0.0)
Requires-Dist: jsonschema-specifications (>=2023.12.1,<2024.0.0)
Requires-Dist: jupyter_client (>=8.6.2,<9.0.0)
Requires-Dist: jupyter_core (>=5.7.2,<6.0.0)
Requires-Dist: kiwisolver (>=1.4.5,<2.0.0)
Requires-Dist: langdetect (>=1.0.9,<2.0.0)
Requires-Dist: lazy_loader (>=0.4,<0.5)
Requires-Dist: libretranslatepy (>=2.1.1,<3.0.0)
Requires-Dist: llvmlite (>=0.42.0,<0.43.0)
Requires-Dist: lxml (>=4.9.4,<5.0.0)
Requires-Dist: matplotlib (>=3.8.4,<4.0.0)
Requires-Dist: matplotlib-inline (>=0.1.7,<0.2.0)
Requires-Dist: mne (>=1.6.0,<2.0.0)
Requires-Dist: mpmath (>=1.3.0,<2.0.0)
Requires-Dist: nest-asyncio (>=1.6.0,<2.0.0)
Requires-Dist: networkx (>=3.3,<4.0) ; python_version >= "3.10" and python_version < "4.0"
Requires-Dist: nltk (>=3.8.1,<4.0.0)
Requires-Dist: numba (>=0.59.1,<0.60.0)
Requires-Dist: numerizer (>=0.2.3,<0.3.0)
Requires-Dist: numpy (>=1.26.4,<2.0.0)
Requires-Dist: onnxruntime (>=1.18.0,<2.0.0)
Requires-Dist: opencv-contrib-python (>=4.9.0.80,<5.0.0.0)
Requires-Dist: opencv-python (>=4.9.0.80,<5.0.0.0)
Requires-Dist: opencv-python-headless (>=4.9.0.80,<5.0.0.0)
Requires-Dist: outcome (>=1.3.0.post0,<2.0.0)
Requires-Dist: packaging (>=24.1,<25.0)
Requires-Dist: pandas (>=2.2.2,<3.0.0)
Requires-Dist: pandas-flavor (>=0.6.0,<0.7.0)
Requires-Dist: parso (>=0.8.4,<0.9.0)
Requires-Dist: patsy (>=0.5.6,<0.6.0)
Requires-Dist: pdf2image (>=1.17.0,<2.0.0)
Requires-Dist: pdf2img (>=0.1.2,<0.2.0)
Requires-Dist: pexpect (>=4.9.0,<5.0.0)
Requires-Dist: pikepdf (>=9.0.0,<10.0.0)
Requires-Dist: pillow (>=10.3.0,<11.0.0)
Requires-Dist: pingouin (>=0.5.4,<0.6.0)
Requires-Dist: platformdirs (>=4.2.2,<5.0.0)
Requires-Dist: pooch (>=1.8.2,<2.0.0)
Requires-Dist: prompt_toolkit (>=3.0.47,<4.0.0)
Requires-Dist: protobuf (>=5.27.1,<6.0.0)
Requires-Dist: psutil (>=5.9.8,<6.0.0)
Requires-Dist: ptyprocess (>=0.7.0,<0.8.0)
Requires-Dist: pure-eval (>=0.2.2,<0.3.0)
Requires-Dist: pyparsing (>=3.1.2,<4.0.0)
Requires-Dist: python-box (>=7.2.0,<8.0.0)
Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
Requires-Dist: python-docx (>=1.1.0,<2.0.0)
Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
Requires-Dist: pytz (>=2024.1,<2025.0)
Requires-Dist: pyzmq (>=26.0.3,<27.0.0)
Requires-Dist: referencing (>=0.35.1,<0.36.0)
Requires-Dist: regex (>=2024.5.15,<2025.0.0)
Requires-Dist: rembg (>=2.0.56,<3.0.0) ; python_version >= "3.9" and python_version < "3.13"
Requires-Dist: requests (>=2.32.3,<3.0.0)
Requires-Dist: rfc3986 (>=1.5.0,<2.0.0)
Requires-Dist: rpds-py (>=0.18.1,<0.19.0)
Requires-Dist: scikit-image (>=0.23.2,<0.24.0) ; python_version >= "3.10" and python_version < "4.0"
Requires-Dist: scikit-learn (>=1.3.2,<2.0.0)
Requires-Dist: scipy (>=1.13.1,<2.0.0)
Requires-Dist: seaborn (>=0.13.2,<0.14.0)
Requires-Dist: selenium (>=4.21.0,<5.0.0)
Requires-Dist: six (>=1.16.0,<2.0.0)
Requires-Dist: sniffio (>=1.3.1,<2.0.0)
Requires-Dist: sortedcontainers (>=2.4.0,<3.0.0)
Requires-Dist: soupsieve (>=2.5,<3.0)
Requires-Dist: stack-data (>=0.6.3,<0.7.0)
Requires-Dist: statsmodels (>=0.14.1,<0.15.0)
Requires-Dist: stem (>=1.8.2,<2.0.0)
Requires-Dist: sympy (>=1.12.1,<2.0.0)
Requires-Dist: tabulate (>=0.9.0,<0.10.0)
Requires-Dist: threadpoolctl (>=3.5.0,<4.0.0)
Requires-Dist: tifffile (>=2024.5.22,<2025.0.0)
Requires-Dist: tornado (>=6.4.1,<7.0.0)
Requires-Dist: tqdm (>=4.66.4,<5.0.0)
Requires-Dist: traitlets (>=5.14.3,<6.0.0)
Requires-Dist: translate (>=3.6.1,<4.0.0)
Requires-Dist: trio (>=0.25.1,<0.26.0)
Requires-Dist: trio-websocket (>=0.11.1,<0.12.0)
Requires-Dist: typing_extensions (>=4.12.2,<5.0.0)
Requires-Dist: tzdata (>=2024.1,<2025.0)
Requires-Dist: urllib3 (>=2.2.1,<3.0.0)
Requires-Dist: wcwidth (>=0.2.13,<0.3.0)
Requires-Dist: webdriver-manager (>=4.0.1,<5.0.0)
Requires-Dist: wrapt (>=1.16.0,<2.0.0)
Requires-Dist: wsproto (>=1.2.0,<2.0.0)
Requires-Dist: xarray (>=2024.6.0,<2025.0.0)
Description-Content-Type: text/markdown

# Install

```python
pip install py2ls
```



# ips

### listdir, basename, dirname, newfolder, finfo

e.g., 

```python
fpath = "....../"
ips.listdir(fpath, kind='pdf', sort_by="size", ascending=0, output = 'df')
```

it filters the ‘.pdf’ files, and sort by the (file-size/name, length of name, create_time, mod_time, last_open_time …) it returns a DataFrame or BoxList (setting by ‘output’)

```python
dir_data, dir_fig = newfolder(fpath, {'data', 'fig'}) # create folder
```

```python
finfo(fpath) # get info: size, creation time, mod time, parent_path, fname, kind...
```

```python
dir_lib(lib_of_interest) # get the fpath
```



### list_func/func_list (same)

list functions in a package

### fload, fsave, figsave

e.g., 

```python
fload(fpath, kind=None, **kwargs)
```

load file (docx, pdf, image, md, json,csv,txt, html, yaml, xml, xlsx…) or save file.

```python
# figsave, as used in matlab. 
figsave(dir_save, "fname.pdf", dpi=300)
```



### pdf2img, img2pdf, docx2pdf

extract images from a PDF, or merge images into a pdf file

```python
pdf2img(dir_pdf, dir_save=None, page=None, kind="png",verbose=True, **kws)
pdf2img(fpath, page=[None, None])  # means extract all pages
# processing page: 1
# processing page: 2
# processing page: 3
# processing page: 4
# processing page: 5

```

```python
img2pdf(dir_img, kind="jpeg",page=None, dir_save=None, page_size="a4", dpi=300)
```

```python
docx2pdf(dir_docx, dir_save) # convert docx to pdf
```

### paper_size

quickly get the size info

```python
paper_size('a4') # [210, 297]
paper_size('card') # [85.6, 53.98]
```



### str2num, num2str, str2list

```python
str2num(“123.345 dollers”,2)# => 123.35 (float) 
```

```python
str2list("abcd") # ['a','b','c','d']
```

```python
list2str(['a','b','c','d']) # 'abcd'
```

### ssplit, sreplace

```python
sreplace(text, dict_replace=None, robust=True)
```

```python
ssplit(text, by="space", verbose=False, **kws) # by = "word", "sentence", ", ","num_strings","digital".....,"length", "upper followed lower", "lower followed upper"
```

```python
text = "The most pronounced physiological changes in sleep occur in the brain.[10] The brain uses significantly less energy during sleep than it does when awake, especially during non-REM sleep. In areas with reduced activity, the brain restores its supply of adenosine triphosphate (ATP), the molecule used for short-term storage and transport of energy.[11] In quiet waking, the brain is responsible for 20% of the body's energy use, thus this reduction has a noticeable effect on overall energy consumption.[12]"
ssplit(text, by=["[10]", "[11]", "[12]"])
# ['The most pronounced physiological changes in sleep occur in the brain.',
# ' The brain uses significantly less energy during sleep than it does when awake, especially during non-REM sleep. In areas with reduced activity, the brain restores its supply of adenosine triphosphate (ATP), the molecule used for short-term storage and transport of energy.',
# " In quiet waking, the brain is responsible for 20% of the body's energy use, thus this reduction has a noticeable effect on overall energy consumption.",
 # '']
```

```python
ssplit(text[:30], by="len", length=5)
# ['The m', 'ost p', 'ronou', 'nced ', 'physi', 'ologi']
```

```python
ssplit(text, by="non_alphanumeric")
# ['The most pronounced physiological changes in sleep occur in the brain.[',
#  '10',
#  '] The brain uses significantly less energy during sleep than it does when awake, especially during non-REM sleep. In areas with reduced activity, the brain restores its supply of adenosine triphosphate (ATP), the molecule used for short-term storage and transport of energy.[',
#  '11',
#  '] In quiet waking, the brain is responsible for ',
#  '20',
#  "% of the body's energy use, thus this reduction has a noticeable effect on overall energy consumption.[",
#  '12',
#  ']']
```

```python
ssplit(text, by="sent")
#['The most pronounced physiological changes in sleep occur in the brain.',
 #'[10] The brain uses significantly less energy during sleep than it does when awake, especially during non-REM sleep.',
 #'In areas with reduced activity, the brain restores its supply of adenosine triphosphate (ATP), the molecule used for short-term storage and transport of energy.',
 #"[11] In quiet waking, the brain is responsible for 20% of the body's energy use, thus this reduction has a noticeable effect on overall energy consumption.",
 #'[12]']
```

```python
ssplit(text, by="lowup")
# ["The most pronounced physiological changes in sleep occur in the brain.[10] The brain uses significantly less energy during sleep than it does when awake, especially during non-REM sleep. In areas with reduced activity, the brain restores its supply of adenosine triphosphate (ATP), the molecule used for short-term storage and transport of energy.[11] In quiet waking, the brain is responsible for 20% of the body's energy use, thus this reduction has a noticeable effect on overall energy consumption.[12]"]

```

```python
sreplace(text, dict_replace=None, robust=True)
```

```python
text= 'The most pronounced physiological changes in sleep occur in the brain.[10] '
 'The brain uses significantly less energy during sleep than it does when '
 'awake, especially during non-REM sleep. In areas with reduced activity, the '
 'brain restores its supply of adenosine triphosphate (ATP), the molecule used '
 'for short-term storage and transport of energy.[11] In quiet waking, the '
 "brain is responsible for 20% of the body's energy use, thus this reduction "
 'has a noticeable effect on overall energy consumption.[12]'
sreplace(text)
"The most pronounced physiological changes in sleep occur in the brain"
sreplace(text,{"sleep":"wakewake"}) # sreplace(text,dict(sleep="wakewake"))
"The most pronounced physiological changes in wakewake occur in the brain."
```

### stats

#### **FuncCmpt** ( two groups cmp)

```python
FuncCmpt(X1, X2, pmc='auto', pair='unpaired')
e.g., 
X1 = [19, 22, 16, 29, 24]
X2 = [20, 11, 17, 12, 22]
p, res = FumcCmpt(X1,X2, pmc='pmc', pair = 'unpair')
# normally distributed
# normally distributed
# unpaired t text
# t(8) = 1.81117, p=0.1077
p,res = FuncCmpt(x1,x2, pmc='pmc',pair='pair')
# paired t test
# t(4)=1.55556,p=0.19479
```

#### FuncMultiCmpt ( multiple groups cmp)

```python
FuncMultiCmpt(pmc='pmc', pair='unpair', data=None, dv=None, factor=None,
                  ss_type=2, detailed=True, effsize='np2',
                  correction='auto', between=None, within=None,
                  subject=None, group=None
                  )
```

```python
df = pd.DataFrame({'score': [64, 66, 68, 75, 78, 94, 98, 79, 71, 80,
                             91, 92, 93, 90, 97, 94, 82, 88, 95, 96,
                             79, 78, 88, 94, 92, 85, 83, 85, 82, 81],
                   'group': np.repeat(['strat1', 'strat2', 'strat3'],repeats=10)})
res = FuncMultiCmpt(pmc='auto',pair='unpaired',data=df, dv='score', factor='group', group='group')
res["APA"] 
# ['group:F(2, 17)=9.71719,p=0.0016']
```

#### FuncStars

```python
FuncStars(ax,
              pval=None,
              Ylim=None,
              Xlim=None,
              symbol='*',
              yscale=0.95,
              x1=0,
              x2=1,
              alpha=0.05,
              fontsize=14,
              fontsize_note=6,
              rotation=0,
              fontname='Arial',
              values_below=None,
              linego=True,
              linestyle='-',
              linecolor='k',
              linewidth=.8,
              nsshow='off',
              symbolcolor='k',
              tailindicator=[0.06, 0.06],
              report=None,
              report_scale=-0.1,
              report_loc=None)



```

### plots

#### stdshade

```python
stdshade(ax=None,*args, **kwargs)
```

#### add_colorbar

```python
add_colorbar(im, width=None, pad=None, **kwargs)
```

#### get_color

```python
get_color(n=1, cmap='auto')
```

```python
get_color(12)
# ['#474747',
#  '#FF2C00',
#  '#0C5DA5',
#  '#845B97',
#  '#58BBCC',
#  '#FF9500',
#  '#D57DBE',
#  '#474747',
#  '#FF2C00',
#  '#0C5DA5',
#  '#845B97',
#  '#58BBCC']
```

```python
get_color(5, cmap="jet") # ['#000080', '#000084', '#000089', '#00008d', '#000092']
get_color(5,cmap="rainbow") #['#8000ff', '#7e03ff', '#7c06ff', '#7a09ff', '#780dff']
```

#### img appearance

#### imgsets

```python
imgsets(
    img,
    sets=None,
    show=True,
    show_axis=False,
    size=None,
    dpi=100,
    figsize=None,
    auto=False,
    filter_kws=None,
)
```

```python
img = imgsets(
    fpath,
    sets={"rota": -5, "sharp": 10},
    dpi=200,
    # show_axis=True,
)
figsave(dir_save, "test1_sharp.pdf")


img2 = imgsets(
    fpath,
    sets={"rota": -5, "crop": [100, 100, 300, 400], "sharp": 10},
    dpi=200,
    filter_kws={
        "sharpen": 10,
    },
    # show_axis=True,
)
figsave(dir_save, "test2_crop.pdf")
```

```python
fload(dir_img)
```

![image-20240613233304196](./README.assets/image-20240613233304196.png)

```python
imgsets(img, sets={"color": 1.5}, show=0)
```

![image-20240613233356996](./README.assets/image-20240613233356996.png)

```python
imgsets(img, sets={"pad": (300, 300), "bgcolor": (73, 162, 127)}, show=0)
```

![image-20240613233423144](./README.assets/image-20240613233423144.png)

```python
imgsets(
    img,
    sets={"contrast": 1.3, "color": 1.5, "pad": (300, 300)},
    show=0,
    filter_kws=dict(sh=1050, EDG=10, gaus=5),
)
```

![image-20240613233503718](./README.assets/image-20240613233503718.png)

```python
imgsets(
    img,
    sets={"color": 10.5},
    show=0,
    filter_kws=dict(EDGE_ENHANCE=50, EDGE_NHANCEmore=50),
)
```

![image-20240613233525291](./README.assets/image-20240613233525291.png)

```python
imgsets(
    img,
    sets=dict(contr=1.5, rm="default"),
    show=0,
    # filter_kws=dict(sharp=1),
)
```

![image-20240613233554225](./README.assets/image-20240613233554225.png)

```python
imgsets(
    img,
    sets=dict(contr=0, rm="default"),
    show=0,
    filter_kws=dict(sharp=1),
)
```

![image-20240613233611627](./README.assets/image-20240613233611627.png)

#### figsets

```python
figsets(*args)
```

```python
cm = 1 / 2.54
# plt.style.use("paper")
plt.figure(figsize=[8 * cm, 5 * cm])
for i in range(2, 4):
    plt.plot(x, y * i, ls="-")
figsets(
    plt.gca(),
    {
        "xlabel": f"time([{x[0]}:{x[-1]}])",
        "ylabel": "Amplitude (signals)",
        # "titel": "paper",
        "xlim": [0, 600],
        "xtick": np.arange(0, 620, 150),
        "xlabel": "test xticklabel",
        # "ylim": [-2.5, 2.5],
        "sp": "go",
        # "style": "paper",
        "box": ":",
        "grid": "on",
        "minorticks": "on",
        "ticks": {"c": "k"},
    },
)
figsets('style','paper')
```

```python
cm = 1/2.54  # centimeters in inches
fig, ax = plt.subplots(1, 1, figsize=(7*cm, 5*cm))
x = np.linspace(0, 2 * np.pi, 50) * 100
y = np.sin(x)
c=get_color(7)

for i in range(2,7):
    plt.plot(x, y*i,c=c[i])
figsets(
    ax,
    {
        "xlim": [0, 450],
        # "ylim": [-1.5, 1.5],
        "xlabel": "2222",
        # "style":"paper",
        "yticks": np.arange(-5,5, 2),
        "ylabel": "ylabelsssss",
        "xtkbel": range(0, 800, 100),
        # "spine": 5,
        "suptitle": "supertitle",
        # "minorticks": "y",
        # "ticksloc":"lt",
        # "ticks": {"direction": "out",'c':'b'},
        "rotation":45,
        # 'box':"lt",
        # "labellocation":'r',
        # "ax_color":'b',
        # 'grid':{"which":'minor','lw':1,"ls":'-.','c':'b','al':0.3},
    },
)
```


