ipyvasp 0.9.85__tar.gz → 0.9.86__tar.gz
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.
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/PKG-INFO +1 -1
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/__init__.py +1 -0
- ipyvasp-0.9.86/ipyvasp/_version.py +1 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/utils.py +34 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/widgets.py +4 -2
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp.egg-info/PKG-INFO +1 -1
- ipyvasp-0.9.85/ipyvasp/_version.py +0 -1
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/LICENSE +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/README.md +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/__main__.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/_enplots.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/_lattice.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/bsdos.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/cli.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/core/__init__.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/core/parser.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/core/plot_toolkit.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/core/serializer.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/core/spatial_toolkit.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/evals_dataframe.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/lattice.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/misc.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp/potential.py +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp.egg-info/SOURCES.txt +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp.egg-info/dependency_links.txt +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp.egg-info/entry_points.txt +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp.egg-info/requires.txt +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/ipyvasp.egg-info/top_level.txt +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/setup.cfg +0 -0
- {ipyvasp-0.9.85 → ipyvasp-0.9.86}/setup.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.9.86"
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
__all__ = [
|
|
2
2
|
"get_file_size",
|
|
3
|
+
"get_lines",
|
|
3
4
|
"set_dir",
|
|
4
5
|
"interpolate_data",
|
|
5
6
|
"rolling_mean",
|
|
@@ -10,6 +11,7 @@ __all__ = [
|
|
|
10
11
|
|
|
11
12
|
import re
|
|
12
13
|
import os
|
|
14
|
+
import io
|
|
13
15
|
from contextlib import contextmanager
|
|
14
16
|
from pathlib import Path
|
|
15
17
|
from inspect import signature, getdoc
|
|
@@ -33,6 +35,38 @@ def get_file_size(path: str):
|
|
|
33
35
|
size /= 1024.0
|
|
34
36
|
else:
|
|
35
37
|
return ""
|
|
38
|
+
|
|
39
|
+
def get_lines(f, indices):
|
|
40
|
+
"""Read lines by indexing from an opened file pointer `f`. Negative indexing is supported to read lines from end.
|
|
41
|
+
Returns a single str of line if one integer given, otherwise a list of lines.
|
|
42
|
+
This consumes a lot less memory then indexing over `f.readlines()[index]`.
|
|
43
|
+
|
|
44
|
+
>>> with open('some_file','r') as f:
|
|
45
|
+
>>> get_lines(f, -1) # last line
|
|
46
|
+
>>> get_lines(f, range(5)) # first 5 lines
|
|
47
|
+
>>> get_lines(f, range(-5,0)) # last 5 lines
|
|
48
|
+
"""
|
|
49
|
+
if not isinstance(f, io.TextIOWrapper):
|
|
50
|
+
raise TypeError(f"f should be file-like object. got {type(f)}")
|
|
51
|
+
|
|
52
|
+
return_line = False
|
|
53
|
+
if isinstance(indices, int):
|
|
54
|
+
indices = [indices]
|
|
55
|
+
return_line = True
|
|
56
|
+
|
|
57
|
+
if not isinstance(indices, (tuple,list, range)):
|
|
58
|
+
raise TypeError(f"indices should int/list/tuple/range, got {type(indices)}")
|
|
59
|
+
|
|
60
|
+
f.seek(0)
|
|
61
|
+
if min(indices) < 0:
|
|
62
|
+
if not hasattr(f, '_nlines'): # do this once, assuming file is not changed while reading
|
|
63
|
+
f._nlines = sum(1 for _ in enumerate(f))
|
|
64
|
+
f.seek(0)
|
|
65
|
+
|
|
66
|
+
indices = [i + (f._nlines if i < 0 else 0) for i in indices] # make all positive
|
|
67
|
+
|
|
68
|
+
lines = [l for i, l in enumerate(f) if i in indices]
|
|
69
|
+
return lines[0] if return_line else lines
|
|
36
70
|
|
|
37
71
|
|
|
38
72
|
def _sig_kwargs(from_func, skip_params=()):
|
|
@@ -447,8 +447,10 @@ class Files:
|
|
|
447
447
|
>>> import json
|
|
448
448
|
>>> import ipyvasp as ipv
|
|
449
449
|
>>> files = ipv.Files(...)
|
|
450
|
-
>>> files.mapf(lambda fp: json.load(fp),to_df=True)
|
|
451
|
-
>>> files.mapf(lambda fp:
|
|
450
|
+
>>> files.mapf(lambda fp: json.load(fp,cls=ipv.DecodeToNumpy),to_df=True) # or use ipv.load(path) in map
|
|
451
|
+
>>> files.mapf(lambda fp: ipv.get_lines(fp, range(5)) # read first five lines
|
|
452
|
+
>>> files.mapf(lambda fp: ipv.get_lines(fp, range(-5,0)) # read last five lines
|
|
453
|
+
>>> files.mapf(lambda fp: ipv.get_lines(fp, -1) # read last line
|
|
452
454
|
"""
|
|
453
455
|
if not mode in 'rb':
|
|
454
456
|
raise ValueError("Only 'r'/'rb' mode is allowed in this context!")
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.9.85"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|