valyte 0.1.8__py3-none-any.whl → 0.1.11__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.
valyte/ipr.py ADDED
@@ -0,0 +1,186 @@
1
+ """Inverse participation ratio (IPR) from VASP PROCAR."""
2
+
3
+ import os
4
+ import re
5
+ import numpy as np
6
+
7
+
8
+ def read_procar(filename="PROCAR"):
9
+ """Read PROCAR and extract atomic total projections."""
10
+ if not os.path.exists(filename):
11
+ raise FileNotFoundError(f"{filename} not found")
12
+
13
+ with open(filename, "r") as f:
14
+ lines = f.readlines()
15
+
16
+ header_line = next((l for l in lines if "k-points" in l), None)
17
+ if header_line is None:
18
+ raise ValueError("Could not find PROCAR header with k-points/bands/ions")
19
+
20
+ numbers = [int(x) for x in re.findall(r"\d+", header_line)]
21
+ if len(numbers) < 3:
22
+ raise ValueError("PROCAR header does not contain k-points, bands, and ions")
23
+
24
+ nkpts, nbands, natoms = numbers[0], numbers[1], numbers[2]
25
+
26
+ proj = [[[] for _ in range(nbands)] for _ in range(nkpts)]
27
+ energies = [[0.0 for _ in range(nbands)] for _ in range(nkpts)]
28
+
29
+ ik = -1
30
+ ib = -1
31
+
32
+ for raw in lines:
33
+ line = raw.strip()
34
+ if not line:
35
+ continue
36
+
37
+ if line.startswith("k-point"):
38
+ ik += 1
39
+ ib = -1
40
+ continue
41
+
42
+ if line.startswith("band"):
43
+ ib += 1
44
+ parts = line.split()
45
+ if len(parts) > 4:
46
+ energies[ik][ib] = float(parts[4])
47
+ continue
48
+
49
+ if line[0].isdigit() and ik >= 0 and ib >= 0:
50
+ parts = line.split()
51
+ proj[ik][ib].append(float(parts[-1]))
52
+
53
+ return proj, energies, nkpts, nbands, natoms
54
+
55
+
56
+ def compute_ipr_atomic(projections):
57
+ """Compute atomic IPR from atomic projections."""
58
+ projections = np.array(projections)
59
+ tot = projections.sum()
60
+ if tot < 1e-12:
61
+ return 0.0
62
+ weights = projections / tot
63
+ return np.sum(weights ** 2)
64
+
65
+
66
+ def analyze_bands(proj, energies, nkpts, band_indices, verbose=True):
67
+ """Compute k-averaged atomic IPR for selected bands."""
68
+ results = []
69
+
70
+ for iband in band_indices:
71
+ ipr_k = []
72
+ e_k = []
73
+
74
+ if verbose:
75
+ print(f"\nBand {iband}")
76
+
77
+ for ik in range(nkpts):
78
+ ipr = compute_ipr_atomic(proj[ik][iband - 1])
79
+ ipr_k.append(ipr)
80
+ e_k.append(energies[ik][iband - 1])
81
+
82
+ if verbose:
83
+ neff = (1 / ipr) if ipr > 0 else 0.0
84
+ print(
85
+ f" k-point {ik + 1:3d} "
86
+ f"E = {energies[ik][iband - 1]:8.4f} eV "
87
+ f"IPR = {ipr:8.4f} "
88
+ f"N_eff = {neff:8.2f}"
89
+ )
90
+
91
+ avg_ipr = float(np.mean(ipr_k)) if ipr_k else 0.0
92
+ avg_e = float(np.mean(e_k)) if e_k else 0.0
93
+ neff = (1 / avg_ipr) if avg_ipr > 0 else 0.0
94
+
95
+ if verbose:
96
+ print(" ------------------------------")
97
+ print(f" Avg IPR = {avg_ipr:.4f}")
98
+ print(f" N_eff = {neff:.2f}")
99
+
100
+ results.append((iband, avg_e, avg_ipr, neff))
101
+
102
+ return results
103
+
104
+
105
+ def save_results(results, filename="ipr_procar.dat"):
106
+ """Save IPR results to a file."""
107
+ with open(filename, "w") as f:
108
+ f.write("# Band Energy(eV) IPR N_eff\n")
109
+ for band, e, ipr, neff in results:
110
+ f.write(f"{band:5d} {e:10.6f} {ipr:8.4f} {neff:8.2f}\n")
111
+
112
+ print(f"\nResults written to {filename}")
113
+
114
+
115
+ def _parse_band_indices(text):
116
+ tokens = re.split(r"[\s,]+", text.strip())
117
+ indices = []
118
+ seen = set()
119
+
120
+ for token in tokens:
121
+ if not token:
122
+ continue
123
+ if "-" in token:
124
+ parts = token.split("-")
125
+ if len(parts) != 2:
126
+ continue
127
+ try:
128
+ start = int(parts[0])
129
+ end = int(parts[1])
130
+ except ValueError:
131
+ continue
132
+ if start > end:
133
+ start, end = end, start
134
+ for i in range(start, end + 1):
135
+ if i not in seen:
136
+ indices.append(i)
137
+ seen.add(i)
138
+ else:
139
+ try:
140
+ i = int(token)
141
+ except ValueError:
142
+ continue
143
+ if i not in seen:
144
+ indices.append(i)
145
+ seen.add(i)
146
+
147
+ return indices
148
+
149
+
150
+ def run_ipr_interactive():
151
+ """Interactive IPR workflow."""
152
+ procar_file = "PROCAR"
153
+
154
+ try:
155
+ proj, energies, nkpts, nbands, natoms = read_procar(procar_file)
156
+ except Exception as e:
157
+ print(f"Error: {e}")
158
+ return
159
+
160
+ print("PROCAR info")
161
+ print(f" k-points : {nkpts}")
162
+ print(f" bands : {nbands}")
163
+ print(f" atoms : {natoms}")
164
+
165
+ band_text = input("Band indices (e.g., 5 6 7 or 5-7): ").strip()
166
+ if not band_text:
167
+ print("No band indices provided.")
168
+ return
169
+
170
+ band_indices = _parse_band_indices(band_text)
171
+ if not band_indices:
172
+ print("No valid band indices found.")
173
+ return
174
+
175
+ filtered = [b for b in band_indices if 1 <= b <= nbands]
176
+ if not filtered:
177
+ print(f"No bands in range 1..{nbands}.")
178
+ return
179
+
180
+ if len(filtered) != len(band_indices):
181
+ print("Warning: some bands were out of range and were skipped.")
182
+
183
+ show_details = input("Show per-k-point values? [y/N]: ").strip().lower() == "y"
184
+
185
+ results = analyze_bands(proj, energies, nkpts, filtered, verbose=show_details)
186
+ save_results(results, "ipr_procar.dat")
valyte/kpoints.py CHANGED
@@ -1,96 +1,80 @@
1
- """
2
- Interactive K-Point Generation Module
3
- =====================================
4
-
5
- Handles interactive generation of KPOINTS files based on user input and structure.
6
- """
1
+ """Interactive KPOINTS generation."""
7
2
 
8
3
  import os
9
- import sys
10
4
  import numpy as np
11
5
  from pymatgen.core import Structure
12
6
  from pymatgen.io.vasp.inputs import Kpoints
7
+ from valyte.potcar import generate_potcar
8
+
13
9
 
14
10
  def generate_kpoints_interactive():
15
- """
16
- Interactively generates a KPOINTS file based on user input and POSCAR.
17
- """
18
- print("\n🔮 Valyte K-Point Generator")
19
-
20
- # Check for POSCAR
11
+ """Interactively generate a KPOINTS file based on POSCAR and user input."""
12
+ print("\nValyte K-Point Generator")
13
+
21
14
  poscar_path = "POSCAR"
22
15
  if not os.path.exists(poscar_path):
23
- # Try finding any POSCAR* file
24
- files = [f for f in os.listdir('.') if f.startswith('POSCAR')]
16
+ files = [f for f in os.listdir(".") if f.startswith("POSCAR")]
25
17
  if files:
26
18
  poscar_path = files[0]
27
- print(f" Found structure: {poscar_path}")
19
+ print(f"Found structure: {poscar_path}")
28
20
  else:
29
- print(" POSCAR file not found in current directory.")
21
+ print("Error: POSCAR file not found in current directory.")
30
22
  return
31
23
 
32
24
  try:
33
25
  structure = Structure.from_file(poscar_path)
34
26
  except Exception as e:
35
- print(f"Error reading structure: {e}")
27
+ print(f"Error reading structure: {e}")
36
28
  return
37
29
 
38
- # Scheme Selection
39
30
  print("\nSelect K-Mesh Scheme:")
40
31
  print(" 1. Monkhorst-Pack")
41
32
  print(" 2. Gamma (Default)")
42
-
33
+
43
34
  choice = input(" > ").strip()
44
-
45
- if choice == '1':
46
- scheme = 'MP'
47
- else:
48
- scheme = 'Gamma'
35
+ scheme = "MP" if choice == "1" else "Gamma"
49
36
 
50
- # K-Spacing Input
51
37
  print("\nEnter K-Spacing (units of 2π/Å):")
52
- print(" (Typical values: 0.03 - 0.04)")
53
-
38
+ print(" Typical values: 0.03 - 0.04")
39
+
54
40
  try:
55
41
  kspacing_str = input(" > ").strip()
56
- if not kspacing_str:
57
- kspacing = 0.04 # Default
58
- else:
59
- kspacing = float(kspacing_str)
42
+ kspacing = float(kspacing_str) if kspacing_str else 0.04
60
43
  except ValueError:
61
- print(" Invalid number. Exiting.")
44
+ print("Error: invalid number.")
62
45
  return
63
46
 
64
47
  if kspacing <= 0:
65
- print("ℹ️ Using Gamma-Only (1 1 1)")
48
+ print("Using Gamma-only grid (1 1 1)")
66
49
  kpts = Kpoints.gamma_automatic((1, 1, 1))
67
50
  grid = (1, 1, 1)
68
51
  else:
69
- # Calculate grid based on spacing
70
- # Formula: N = |b| / (spacing * 2*pi)
71
- # pymatgen reciprocal lattice lengths include the 2*pi factor.
72
-
73
52
  recip_lattice = structure.lattice.reciprocal_lattice
74
53
  b_lengths = recip_lattice.abc
75
-
76
- # We multiply spacing by 2*pi because the input is a coefficient of 2*pi/A?
77
- # Or rather, standard convention (like VASP KSPACING) often implies 2*pi is involved in the density.
78
- # Empirically: N = |b| / (input * 2*pi) matches expected results.
79
- grid = [max(1, int(l / (kspacing * 2 * np.pi) + 0.5)) for l in b_lengths]
80
-
81
- # Create Kpoints object
82
- if scheme == 'MP':
54
+
55
+ # KSPACING-style estimate: N = |b| / kspacing
56
+ grid = [max(1, int(l / kspacing + 0.5)) for l in b_lengths]
57
+
58
+ if scheme == "MP":
83
59
  kpts = Kpoints.monkhorst_automatic(grid)
84
60
  else:
85
61
  kpts = Kpoints.gamma_automatic(grid)
86
62
 
87
- # Print Summary
88
- print("\n📊 Summary")
63
+ print("\nSummary")
89
64
  print(f" Structure: {structure.formula}")
90
65
  print(f" Lattice: a={structure.lattice.a:.2f}, b={structure.lattice.b:.2f}, c={structure.lattice.c:.2f} Å")
91
66
  print(f" K-Mesh: {grid[0]} x {grid[1]} x {grid[2]} ({scheme})")
92
67
 
93
- # Write KPOINTS
94
68
  output_file = "KPOINTS"
95
69
  kpts.write_file(output_file)
96
- print(f"\n✅ Generated {output_file}!")
70
+ print(f"\nGenerated {output_file}.")
71
+
72
+ potcar_file = "POTCAR"
73
+ if not os.path.exists(potcar_file):
74
+ try:
75
+ print("\nPOTCAR not found. Generating default POTCAR (PBE)...")
76
+ generate_potcar(poscar_path=poscar_path, functional="PBE", output=potcar_file)
77
+ except Exception as e:
78
+ print(f"Warning: could not generate POTCAR: {e}")
79
+ else:
80
+ print("POTCAR already exists; skipping generation.")
valyte/potcar.py ADDED
@@ -0,0 +1,36 @@
1
+ import os
2
+ from pymatgen.core import Structure
3
+ from pymatgen.io.vasp.inputs import Potcar
4
+
5
+
6
+ def _ordered_symbols(structure):
7
+ symbols = []
8
+ seen = set()
9
+ for site in structure:
10
+ sym = site.specie.symbol if hasattr(site.specie, "symbol") else str(site.specie)
11
+ if sym not in seen:
12
+ symbols.append(sym)
13
+ seen.add(sym)
14
+ return symbols
15
+
16
+
17
+ def generate_potcar(poscar_path="POSCAR", functional="PBE", output="POTCAR"):
18
+ """Generate a POTCAR based on species in a POSCAR."""
19
+ if not os.path.exists(poscar_path):
20
+ raise FileNotFoundError(f"Input file '{poscar_path}' not found.")
21
+
22
+ structure = Structure.from_file(poscar_path)
23
+ species = _ordered_symbols(structure)
24
+
25
+ print(f"Reading structure from {poscar_path}...")
26
+ print(f"Detected species: {species}")
27
+
28
+ try:
29
+ potcar = Potcar(species, functional=functional)
30
+ except OSError as e:
31
+ print(f"Could not find POTCARs for functional '{functional}'.")
32
+ print("Ensure PMG_VASP_PSP_DIR is set in ~/.pmgrc.yaml")
33
+ raise e
34
+
35
+ potcar.write_file(output)
36
+ print(f"Generated {output} using functional '{functional}'")
valyte/supercell.py CHANGED
@@ -1,35 +1,18 @@
1
- """
2
- Supercell generation module for Valyte.
3
- """
1
+ """Supercell generation."""
4
2
 
5
3
  import os
6
4
  from pymatgen.core import Structure
7
5
 
8
6
 
9
7
  def create_supercell(poscar_path="POSCAR", nx=1, ny=1, nz=1, output="POSCAR_supercell"):
10
- """
11
- Creates a supercell from a POSCAR file.
12
-
13
- Args:
14
- poscar_path (str): Path to input POSCAR file.
15
- nx (int): Supercell size in x direction.
16
- ny (int): Supercell size in y direction.
17
- nz (int): Supercell size in z direction.
18
- output (str): Output filename for the supercell POSCAR.
19
- """
20
-
8
+ """Create a supercell from a POSCAR file."""
21
9
  if not os.path.exists(poscar_path):
22
10
  raise FileNotFoundError(f"{poscar_path} not found")
23
-
24
- # Read structure
11
+
25
12
  structure = Structure.from_file(poscar_path)
26
-
27
- # Create supercell
28
13
  supercell = structure.copy()
29
14
  supercell.make_supercell([nx, ny, nz])
30
-
31
- # Write output
32
15
  supercell.to(filename=output, fmt="poscar")
33
-
16
+
34
17
  supercell_atoms = len(supercell)
35
- print(f"Supercell created: {output} ({supercell_atoms} atoms)")
18
+ print(f"Supercell created: {output} ({supercell_atoms} atoms)")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: valyte
3
- Version: 0.1.8
3
+ Version: 0.1.11
4
4
  Summary: A comprehensive CLI tool for VASP pre-processing (Supercells, K-points) and post-processing (DOS, Band Structure plotting)
5
5
  Home-page: https://github.com/nikyadav002/Valyte-Project
6
6
  Author: Nikhil
@@ -42,6 +42,7 @@ Requires-Dist: seekpath
42
42
  - VBM alignment to 0 eV.
43
43
  - Color-coded bands (Purple for VB, Teal for CB).
44
44
  - High-symmetry path labels from KPOINTS.
45
+ - **IPR Analysis**: Compute Inverse Participation Ratio from PROCAR to analyze wavefunction localization.
45
46
  - **Publication Quality**: Clean aesthetics, custom fonts (Arial, Helvetica, Times New Roman), high DPI output.
46
47
 
47
48
  ## Installation
@@ -113,6 +114,9 @@ valyte supercell 3 3 1 -i POSCAR_primitive -o POSCAR_3x3x1
113
114
 
114
115
  Automatically generate a KPOINTS file with high-symmetry paths for band structure calculations.
115
116
 
117
+ > [!TIP]
118
+ > **Smart K-Path Generation (New in v0.1.7+)**: Valyte now automatically determines the standard path (e.g., `\Gamma - Y - V` for Monoclinic cells) using the **Bradley-Cracknell** convention by default. This ensures clean, publication-ready labels without external dependencies.
119
+
116
120
  ```bash
117
121
  valyte band kpt-gen [options]
118
122
  ```
@@ -121,12 +125,20 @@ valyte band kpt-gen [options]
121
125
  - `-i`, `--input`: Input POSCAR file (default: `POSCAR`).
122
126
  - `-n`, `--npoints`: Points per segment (default: `40`).
123
127
  - `-o`, `--output`: Output filename (default: `KPOINTS`).
128
+ - `--mode`: Path convention. Options: `bradcrack` (Default), `seekpath`, `latimer_munro`, `setyawan_curtarolo`.
124
129
 
125
130
  **Example:**
126
131
  ```bash
127
- valyte band kpt-gen -n 60 -i POSCAR_relaxed -o KPOINTS_band
132
+ # Default (Smart/BradCrack)
133
+ valyte band kpt-gen -n 60
134
+
135
+ # Explicitly use Seekpath convention
136
+ valyte band kpt-gen --mode seekpath
128
137
  ```
129
138
 
139
+ > [!IMPORTANT]
140
+ > The command will generate a **`POSCAR_standard`** file. You **MUST** use this structure for your band structure calculation (i.e., `cp POSCAR_standard POSCAR`) because the K-path corresponds to this specific orientation. Using your original POSCAR may result in incorrect paths.
141
+
130
142
  ### 🕸️ Generate K-Points (Interactive)
131
143
 
132
144
  Generate a `KPOINTS` file for SCF calculations interactively.
@@ -141,6 +153,38 @@ This command will prompt you for:
141
153
 
142
154
  It automatically calculates the optimal grid based on your `POSCAR` structure.
143
155
 
156
+ ---
157
+
158
+ ### 🧪 Generate POTCAR
159
+
160
+ Generate a `POTCAR` file based on the species in your `POSCAR`.
161
+
162
+ ```bash
163
+ valyte potcar [options]
164
+ ```
165
+
166
+ **Options:**
167
+ - `-i`, `--input`: Input POSCAR file (default: `POSCAR`).
168
+ - `-o`, `--output`: Output filename (default: `POTCAR`).
169
+ - `--functional`: Functional to use (default: `PBE`). Options include `PBE`, `PBE_52`, `PBE_54`, `LDA`, etc.
170
+
171
+ **Example:**
172
+ ```bash
173
+ # Generate POTCAR using default PBE functional
174
+ valyte potcar
175
+
176
+ # Use a specific functional
177
+ valyte potcar --functional PBE_54
178
+
179
+ # Specify input and output files
180
+ valyte potcar -i POSCAR_relaxed -o POTCAR_new
181
+ ```
182
+
183
+ > [!IMPORTANT]
184
+ > **Pymatgen Configuration Required**: This command requires Pymatgen to be configured with your VASP pseudopotential directory. Set `PMG_VASP_PSP_DIR` in your `~/.pmgrc.yaml` file. See the [Pymatgen documentation](https://pymatgen.org/installation.html#potcar-setup) for setup instructions.
185
+
186
+ ---
187
+
144
188
  #### 2. Plot Band Structure
145
189
 
146
190
  Plot the electronic band structure from `vasprun.xml`.
@@ -205,4 +249,30 @@ valyte dos -e Fe "Fe(d)"
205
249
  valyte dos ./vasp_data --xlim -5 5 -o my_dos.png
206
250
  ```
207
251
 
252
+ ---
253
+
254
+ ### 📐 Compute IPR (Inverse Participation Ratio)
255
+
256
+ Compute the Inverse Participation Ratio (IPR) from VASP `PROCAR` to analyze wavefunction localization.
257
+
258
+ ```bash
259
+ valyte ipr
260
+ ```
261
+
262
+ This interactive command will:
263
+ 1. Read the `PROCAR` file from the current directory.
264
+ 2. Display the number of k-points, bands, and atoms.
265
+ 3. Prompt you for **band indices** to analyze (e.g., `5 6 7` or `5-7`).
266
+ 4. Optionally show per-k-point IPR values.
267
+ 5. Save results to `ipr_procar.dat`.
268
+
269
+ **Output Columns:**
270
+ - **Band**: Band index.
271
+ - **Energy**: Average energy (eV) across k-points.
272
+ - **IPR**: Inverse Participation Ratio (higher = more localized).
273
+ - **N_eff**: Effective number of atoms (1/IPR).
274
+
275
+ > [!TIP]
276
+ > Use IPR to identify localized defect states. A state localized on a single atom has IPR ≈ 1.0 and N_eff ≈ 1. Delocalized band states have small IPR and large N_eff.
277
+
208
278
  </details>
@@ -0,0 +1,19 @@
1
+ valyte/Logo.png,sha256=HSZQsjsCj4y_8zeXE1kR1W7deb-6gXheEnmcLcSKUxw,4327936
2
+ valyte/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ valyte/band.py,sha256=ckwLeIvU1goyxRYusWl-yqdZRZDmYBVOF3fhwGzEEAg,8738
4
+ valyte/band_plot.py,sha256=XTx6zFrLaTo_GYYvANulMl_0eFSQCyRqJCPfYJffXdg,2869
5
+ valyte/cli.py,sha256=xmGEOOfOQOsOzJ_dhzMDOSfuimL_1X--nlmBiQ_WG9Q,8816
6
+ valyte/dos_plot.py,sha256=iMjvSevX61PqmOOye7uNirj2bh9uFdlgZZXfCK1oGWo,10771
7
+ valyte/ipr.py,sha256=cT6G10Zt__TRSx-Vt7HiCPRVC8uTz5JNWzQN-2J7df0,5316
8
+ valyte/kpoints.py,sha256=Qh80UmEwt3OssPoEwN8PaVc9E7KG_W-vR0_kP7IzoZ0,2632
9
+ valyte/potcar.py,sha256=7JRo1Tkz1M6kqVYKbAYkkPVlt1gqeqjMKkpFWWzXdTk,1160
10
+ valyte/supercell.py,sha256=5qeeeJN81LAGdzdgEtYIMy8-g4T4xKRm_cxbsVuVBQA,595
11
+ valyte/valyte_band.png,sha256=1Bh-x7qvl1j4D9HGGbQK8OlMUrTU1mhU_kMILUsNiD8,246677
12
+ valyte/valyte_dos.png,sha256=ViE4CycCSqFi_ZtUhA7oGI1nTyt0mHoYI6yg5-Et35k,182523
13
+ valyte/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ valyte/data/bradcrack.json,sha256=Jpaf7giqp99BAhFdLv9pRFsx_m-ooQaQpOrPDusuZX4,22614
15
+ valyte-0.1.11.dist-info/METADATA,sha256=PpUiK7lOajinqNTEtpNrzYjS0-5ARSk07hTDv-bLL2s,8160
16
+ valyte-0.1.11.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
17
+ valyte-0.1.11.dist-info/entry_points.txt,sha256=Ny3Z5rh3Ia7lEKoMDDZOm4_jS-Zde3qFHv8f1GLUdxk,43
18
+ valyte-0.1.11.dist-info/top_level.txt,sha256=72-UqyU15JSWDjtBQf6cY0_UBqz0EU2FoVeXjd1JZ5M,7
19
+ valyte-0.1.11.dist-info/RECORD,,
@@ -1,17 +0,0 @@
1
- valyte/Logo.png,sha256=HSZQsjsCj4y_8zeXE1kR1W7deb-6gXheEnmcLcSKUxw,4327936
2
- valyte/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- valyte/band.py,sha256=fRum_BwgSqsN_lJsHFc7AhhVD5y4T5Sq7JJNhvB8J8w,11732
4
- valyte/band_plot.py,sha256=2jP6fEh8qDYHXxDAs4S69xDcxrzWbYcjOAWiGHwjyF4,4766
5
- valyte/cli.py,sha256=5lqDQTPMJTS_-u19l7MZG6GYwhFQQ0BgEJ0T13LxCtQ,9153
6
- valyte/dos_plot.py,sha256=PWlUSlF887-s2SXuHEjMiGLdo4_5419SVwVn1xTYvQQ,18972
7
- valyte/kpoints.py,sha256=_LISADqe11NBlv8LMjMkF5rWrREHB3aU5-nHvqxj3jk,3055
8
- valyte/supercell.py,sha256=w6Ik_krXoshgliJDiyjoIZXuifzN0ydi6VSmpzutm9Y,996
9
- valyte/valyte_band.png,sha256=1Bh-x7qvl1j4D9HGGbQK8OlMUrTU1mhU_kMILUsNiD8,246677
10
- valyte/valyte_dos.png,sha256=ViE4CycCSqFi_ZtUhA7oGI1nTyt0mHoYI6yg5-Et35k,182523
11
- valyte/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- valyte/data/bradcrack.json,sha256=Jpaf7giqp99BAhFdLv9pRFsx_m-ooQaQpOrPDusuZX4,22614
13
- valyte-0.1.8.dist-info/METADATA,sha256=QpGEeHAEwcOeT7cmW9xv4uvxByeS0jYwJeaCwX5WGlc,5506
14
- valyte-0.1.8.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
15
- valyte-0.1.8.dist-info/entry_points.txt,sha256=Ny3Z5rh3Ia7lEKoMDDZOm4_jS-Zde3qFHv8f1GLUdxk,43
16
- valyte-0.1.8.dist-info/top_level.txt,sha256=72-UqyU15JSWDjtBQf6cY0_UBqz0EU2FoVeXjd1JZ5M,7
17
- valyte-0.1.8.dist-info/RECORD,,