Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable Ruff rule family "N" and "S" #3892

Merged
merged 73 commits into from
Aug 7, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
c5f904c
enable ruff rule family N
DanielYang59 Jun 23, 2024
9e6aefb
fix NPY002 in code (tests to be fixed)
DanielYang59 Jun 23, 2024
6d7718a
fix NPY002 in tests
DanielYang59 Jun 23, 2024
e6b4414
replace random with np where np is imported
DanielYang59 Jun 23, 2024
5075261
fix miller index type
DanielYang59 Jun 23, 2024
560ef73
[Need Confirm] remove rnd seed and reduce distortion
DanielYang59 Jun 23, 2024
ccd484f
fix random seed
DanielYang59 Jun 23, 2024
e3cea79
correct replacement of randn with standard_normal
DanielYang59 Jun 23, 2024
39f6267
enable rule family S and format tweaks
DanielYang59 Jun 24, 2024
7f0ef83
suppress S501 error
DanielYang59 Jun 24, 2024
156bf36
suppress S105 errors
DanielYang59 Jun 24, 2024
62ede68
suppress S602
DanielYang59 Jun 24, 2024
af8af85
replace weak `sha1` hash with `sha256`
DanielYang59 Jun 24, 2024
0e19912
ignore S311 as pymatgen is not for cryptography
DanielYang59 Jun 24, 2024
e2e14d2
suppress S605 for trusted source
DanielYang59 Jun 24, 2024
26ccb85
NEED CONFIRM: fix S607 for the starting of a process with a partial e…
DanielYang59 Jun 24, 2024
33401d4
suppress S310 for trusted source
DanielYang59 Jun 24, 2024
ebb299f
suppress S608 for trusted source
DanielYang59 Jun 24, 2024
c52f162
NEED CONFIRMATION: rewrite subprocess without shell
DanielYang59 Jun 24, 2024
9d3c6da
suppress S301, but still enable it because pickle is known to have po…
DanielYang59 Jun 24, 2024
4947ff5
replace xml with defusedxml to fix S314
DanielYang59 Jun 24, 2024
8a75287
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Jun 25, 2024
a51d075
Revert "replace xml with defusedxml to fix S314"
DanielYang59 Jun 25, 2024
84e9cdd
ignore S314
DanielYang59 Jun 25, 2024
02a7979
suppress S607 in tasks.py
DanielYang59 Jun 25, 2024
abf9edd
Revert "NEED CONFIRM: fix S607 for the starting of a process with a p…
DanielYang59 Jun 26, 2024
7d09bdf
Fix DTZ003 deprecated datetime API
DanielYang59 Jun 26, 2024
8c8b3e7
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Jun 26, 2024
3cb9c71
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Jun 26, 2024
d366898
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Jul 1, 2024
ec5ea31
pre-commit auto-fixes
pre-commit-ci[bot] Jul 1, 2024
71b7af4
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Jul 3, 2024
e1b5db3
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Jul 12, 2024
732841d
update monty to fix datetime serialization
DanielYang59 Jul 13, 2024
67d1aa6
replace np.exceptions.RankWarning
DanielYang59 Jul 13, 2024
89e0d22
update monty in pyproject
DanielYang59 Jul 13, 2024
a4f2080
revert to np.RankWarning for now
DanielYang59 Jul 13, 2024
98f4501
revert accidental np.trapz change during merge
DanielYang59 Jul 13, 2024
f6a7275
pre-commit auto-fixes
pre-commit-ci[bot] Jul 13, 2024
2adac55
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Jul 15, 2024
21022c6
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Jul 17, 2024
9f3a8bc
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Jul 18, 2024
d75e0c5
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Jul 24, 2024
aa3d6cb
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Jul 28, 2024
134a11c
pre-commit auto-fixes
pre-commit-ci[bot] Jul 28, 2024
f82d0a3
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Aug 3, 2024
d0ef23d
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Aug 3, 2024
52e8735
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Aug 5, 2024
64a702a
suppress S202 for trusted source
DanielYang59 Aug 5, 2024
91b1ea6
ignore NPY201 for now
DanielYang59 Aug 5, 2024
5a923af
Revert "pre-commit auto-fixes"
DanielYang59 Aug 5, 2024
bc3caa9
pre-commit auto-fixes
pre-commit-ci[bot] Aug 5, 2024
57848ed
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Aug 5, 2024
94ca1fd
fix indentation
DanielYang59 Aug 5, 2024
638a75f
Revert "pre-commit auto-fixes"
DanielYang59 Aug 5, 2024
5723727
regenerate requirement.txt
DanielYang59 Aug 5, 2024
2cbff0b
fix indentation
DanielYang59 Aug 5, 2024
d65f4f4
rename single-letter p = subprocess.run
janosh Aug 5, 2024
de81808
replace stdlib random with numpy
DanielYang59 Aug 5, 2024
374f711
avoid assign single use rng
DanielYang59 Aug 5, 2024
2378f85
fix unit test
DanielYang59 Aug 5, 2024
0ffeac4
keep non-imperative
DanielYang59 Aug 5, 2024
fdf52f1
replace os.system with subprocess
DanielYang59 Aug 6, 2024
08ec70d
docstring and type tweaks for io.packmol
DanielYang59 Aug 6, 2024
69802bf
io.packmol format tweaks
DanielYang59 Aug 6, 2024
684520a
fix subprocess run usage for stdin file
DanielYang59 Aug 6, 2024
9370c6f
add return type in docstring
DanielYang59 Aug 6, 2024
d73aa3b
(feel free to revert) use list join over str concat
DanielYang59 Aug 6, 2024
2134e59
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Aug 6, 2024
bcf1c0b
Merge branch 'master' into enable-ruff-s-npy
DanielYang59 Aug 6, 2024
f84c906
use f-str
janosh Aug 7, 2024
701faac
map(str, box)
janosh Aug 7, 2024
33c1dcd
revert f-str
janosh Aug 7, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions dev_scripts/potcar_scrambler.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,20 +48,23 @@ def __init__(self, potcars: Potcar | PotcarSingle) -> None:
def _rand_float_from_str_with_prec(self, input_str: str, bloat: float = 1.5) -> float:
n_prec = len(input_str.split(".")[1])
bd = max(1, bloat * abs(float(input_str))) # ensure we don't get 0
return round(bd * np.random.rand(1)[0], n_prec)
rng = np.random.default_rng()
return round(bd * rng.random(), n_prec)

def _read_fortran_str_and_scramble(self, input_str: str, bloat: float = 1.5):
input_str = input_str.strip()

if input_str.lower() in {"t", "f", "true", "false"}:
return bool(np.random.randint(2))
rng = np.random.default_rng()
return rng.choice((True, False))

if input_str.upper() == input_str.lower() and input_str[0].isnumeric():
if "." in input_str:
return self._rand_float_from_str_with_prec(input_str, bloat=bloat)
integer = int(input_str)
fac = int(np.sign(integer)) # return int of same sign
return fac * np.random.randint(abs(max(1, int(np.ceil(bloat * integer)))))
rng = np.random.default_rng()
return fac * rng.integers(abs(max(1, int(np.ceil(bloat * integer)))))
try:
float(input_str)
return self._rand_float_from_str_with_prec(input_str, bloat=bloat)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -993,15 +993,17 @@ def setup_test_perfect_environment(
raise ValueError("Wrong mp_symbol to setup coordination geometry")
neighb_coords = []
_points = points if points is not None else cg.points
rng = np.random.default_rng()

if randomness:
rv = np.random.random_sample(3)
rv = rng.random(3)
while norm(rv) > 1.0:
rv = np.random.random_sample(3)
rv = rng.random(3)
coords = [np.zeros(3, float) + max_random_dist * rv]
for pp in _points:
rv = np.random.random_sample(3)
rv = rng.random(3)
while norm(rv) > 1.0:
rv = np.random.random_sample(3)
rv = rng.random(3)
neighb_coords.append(np.array(pp) + max_random_dist * rv)
else:
coords = [np.zeros(3, float)]
Expand All @@ -1016,7 +1018,7 @@ def setup_test_perfect_environment(

# Scaling the test environment
if random_scale == "RANDOM":
scale = 0.1 * np.random.random_sample() + 0.95
scale = 0.1 * rng.random() + 0.95
elif random_scale == "NONE":
scale = 1.0
else:
Expand All @@ -1026,9 +1028,9 @@ def setup_test_perfect_environment(

# Rotating the test environment
if random_rotation == "RANDOM":
uu = np.random.random_sample(3) + 0.1
uu = rng.random(3) + 0.1
uu = uu / norm(uu)
theta = np.pi * np.random.random_sample()
theta = np.pi * rng.random()
cos_theta = np.cos(theta)
sin_theta = np.sin(theta)
ux = uu[0]
Expand Down Expand Up @@ -1068,7 +1070,7 @@ def setup_test_perfect_environment(

# Translating the test environment
if random_translation == "RANDOM":
translation = 10.0 * (2.0 * np.random.random_sample(3) - 1.0)
translation = 10.0 * (2.0 * rng.random(3) - 1.0)
elif random_translation == "NONE":
translation = np.zeros(3, float)
else:
Expand Down Expand Up @@ -1112,8 +1114,9 @@ def setup_random_structure(self, coordination):
aa = 0.4
bb = -0.2
coords = []
rng = np.random.default_rng()
for _ in range(coordination + 1):
coords.append(aa * np.random.random_sample(3) + bb)
coords.append(aa * rng.random(3) + bb)
self.set_structure(
lattice=np.array(np.eye(3) * 10, float),
species=["Si"] * (coordination + 1),
Expand All @@ -1130,7 +1133,8 @@ def setup_random_indices_local_geometry(self, coordination):
"""
self.icentral_site = 0
self.indices = list(range(1, coordination + 1))
np.random.shuffle(self.indices)
rng = np.random.default_rng()
rng.shuffle(self.indices)

def setup_ordered_indices_local_geometry(self, coordination):
"""Set up ordered indices for the local geometry, for testing purposes
Expand Down Expand Up @@ -2049,8 +2053,9 @@ def coordination_geometry_symmetry_measures_fallback_random(
algos = []
perfect2local_maps = []
local2perfect_maps = []
rng = np.random.default_rng()
for idx in range(n_random):
perm = np.random.permutation(coordination_geometry.coordination_number)
perm = rng.permutation(coordination_geometry.coordination_number)
permutations.append(perm)
p2l = {}
l2p = {}
Expand Down
12 changes: 8 additions & 4 deletions pymatgen/analysis/piezo_sensitivity.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,8 @@ def get_rand_BEC(self, max_charge=1):
BEC = np.zeros((n_atoms, 3, 3))
for atom, ops in enumerate(self.BEC_operations):
if ops[0] == ops[1]:
temp_tensor = Tensor(np.random.rand(3, 3) - 0.5)
rng = np.random.default_rng()
temp_tensor = Tensor(rng.random((3, 3)) - 0.5)
temp_tensor = sum(temp_tensor.transform(symm_op) for symm_op in self.pointops[atom]) / len(
self.pointops[atom]
)
Expand Down Expand Up @@ -238,7 +239,8 @@ def get_rand_IST(self, max_force=1):
temp_tensor += op[1].transform_tensor(IST[op[0]])

if len(ops) == 0:
temp_tensor = Tensor(np.random.rand(3, 3, 3) - 0.5)
rng = np.random.default_rng()
temp_tensor = Tensor(rng.random((3, 3, 3)) - 0.5)
for dim in range(3):
temp_tensor[dim] = (temp_tensor[dim] + temp_tensor[dim].T) / 2
temp_tensor = sum(temp_tensor.transform(symm_op) for symm_op in self.pointops[atom]) / len(
Expand Down Expand Up @@ -385,7 +387,8 @@ def get_unstable_FCM(self, max_force=1):
].T
continue

temp_tensor = Tensor(np.random.rand(3, 3) - 0.5) * max_force
rng = np.random.default_rng()
temp_tensor = Tensor(rng.random((3, 3)) - 0.5) * max_force

temp_tensor_sum = sum(temp_tensor.transform(symm_op) for symm_op in self.sharedops[op[0]][op[1]])
temp_tensor_sum = temp_tensor_sum / (len(self.sharedops[op[0]][op[1]]))
Expand Down Expand Up @@ -484,9 +487,10 @@ def get_stable_FCM(self, fcm, fcmasum=10):

max_eig = np.max(-1 * eigs)
eig_sort = np.argsort(np.abs(eigs))
rng = np.random.default_rng()
for idx in range(3, len(eigs)):
if eigs[eig_sort[idx]] > 1e-6:
eigs[eig_sort[idx]] = -1 * max_eig * np.random.rand()
eigs[eig_sort[idx]] = -1 * max_eig * rng.random()
diag = np.real(np.eye(len(fcm)) * eigs)

fcm = np.real(np.matmul(np.matmul(vecs, diag), vecs.T))
Expand Down
6 changes: 3 additions & 3 deletions pymatgen/analysis/surface_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@

import copy
import itertools
import random
import warnings
from typing import TYPE_CHECKING

Expand Down Expand Up @@ -804,11 +803,12 @@ def color_palette_dict(self, alpha=0.35):
for hkl in self.all_slab_entries:
rgb_indices = [0, 1, 2]
color = [0, 0, 0, 1]
random.shuffle(rgb_indices)
rng = np.random.default_rng()
rng.shuffle(rgb_indices)
for idx, ind in enumerate(rgb_indices):
if idx == 2:
break
color[ind] = np.random.uniform(0, 1)
color[ind] = rng.uniform(0, 1)

# Get the clean (solid) colors first
clean_list = np.linspace(0, 1, len(self.all_slab_entries[hkl]))
Expand Down
14 changes: 8 additions & 6 deletions pymatgen/core/structure.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import json
import math
import os
import random
import re
import sys
import warnings
Expand Down Expand Up @@ -3642,11 +3641,12 @@ def get_boxed_structure(
):
box_center = [(i + 0.5) * a, (j + 0.5) * b, (k + 0.5) * c]
if random_rotation:
rng = np.random.default_rng()
while True:
op = SymmOp.from_origin_axis_angle(
(0, 0, 0),
axis=np.random.rand(3),
angle=random.uniform(-180, 180),
DanielYang59 marked this conversation as resolved.
Show resolved Hide resolved
axis=rng.random(3),
angle=rng.uniform(-180, 180),
)
rot_mat = op.rotation_matrix
new_coords = np.dot(rot_mat, centered_coords.T).T + box_center
Expand Down Expand Up @@ -4467,11 +4467,12 @@ def perturb(self, distance: float, min_distance: float | None = None) -> Self:

def get_rand_vec():
# Deal with zero vectors
vector = np.random.randn(3)
rng = np.random.default_rng()
vector = rng.random(3)
vnorm = np.linalg.norm(vector)
dist = distance
if isinstance(min_distance, (float, int)):
dist = np.random.uniform(min_distance, dist)
dist = rng.uniform(min_distance, dist)
return vector / vnorm * dist if vnorm != 0 else get_rand_vec()

for idx in range(len(self._sites)):
Expand Down Expand Up @@ -5018,7 +5019,8 @@ def perturb(self, distance: float) -> Self:

def get_rand_vec():
# Deal with zero vectors
vector = np.random.randn(3)
rng = np.random.default_rng()
vector = rng.random(3)
vnorm = np.linalg.norm(vector)
return vector / vnorm * distance if vnorm != 0 else get_rand_vec()

Expand Down
5 changes: 3 additions & 2 deletions pymatgen/io/lammps/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,10 @@ def _create(self, monomer: Molecule, mon_vector: ArrayLike) -> None:
def _next_move_direction(self) -> np.ndarray:
"""Pick a move at random from the list of moves."""
n_moves = len(self.moves)
move = np.random.randint(1, n_moves + 1)
rng = np.random.default_rng()
move = rng.integers(1, n_moves + 1)
while self.prev_move == (move + 3) % n_moves:
move = np.random.randint(1, n_moves + 1)
move = rng.integers(1, n_moves + 1)
self.prev_move = move
return np.array(self.moves[move])

Expand Down
7 changes: 4 additions & 3 deletions pymatgen/io/vasp/inputs.py
Original file line number Diff line number Diff line change
Expand Up @@ -659,7 +659,7 @@ def from_dict(cls, dct: dict) -> Self:
def set_temperature(self, temperature: float) -> None:
"""
Initialize the velocities based on Maxwell-Boltzmann distribution.
Removes linear, but not angular drift (same as VASP).
Remove linear, but not angular drift (same as VASP).

Scale the energies to the exact temperature (microcanonical ensemble)
Velocities are given in A/fs. This is the VASP default when
Expand All @@ -672,9 +672,10 @@ def set_temperature(self, temperature: float) -> None:
temperature (float): Temperature in Kelvin.
"""
# mean 0 variance 1
velocities = np.random.randn(len(self.structure), 3)
rng = np.random.default_rng()
velocities = rng.random((len(self.structure), 3))

# In AMU, (N,1) array
# In AMU, (N, 1) array
atomic_masses = np.array([site.specie.atomic_mass.to("kg") for site in self.structure])
dof = 3 * len(self.structure) - 3

Expand Down
6 changes: 4 additions & 2 deletions pymatgen/transformations/advanced_transformations.py
Original file line number Diff line number Diff line change
Expand Up @@ -1684,7 +1684,8 @@ def round_away_from_zero(x):
col_idx_to_fix = np.where(matches)[0]

# Break ties for the largest absolute magnitude
r_idx = np.random.randint(len(col_idx_to_fix))
rng = np.random.default_rng()
r_idx = rng.integers(len(col_idx_to_fix))
col_idx_to_fix = col_idx_to_fix[r_idx]

# Round the chosen element away from zero
Expand Down Expand Up @@ -2103,7 +2104,8 @@ def __init__(self, rattle_std: float, min_distance: float, seed: int | None = No
if not seed:
# if seed is None, use a random RandomState seed but make sure
# we store that the original seed was None
seed = np.random.randint(1, 1000000000)
rng = np.random.default_rng()
seed = rng.integers(1, 1000000000)

self.random_state = np.random.RandomState(seed)
self.kwargs = kwargs
Expand Down
1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,6 @@ ignore = [
"G", # validate logging format strings
"INP", # Ban PEP-420 implicit namespace packages
"N", # pep8-naming (many var/arg names are intended)
"NPY", # NumPy-specific rules (TODO: enable this)
"PTH", # Prefer pathlib over os.path
"S", # flake8-bandit (TODO: enable this)
"SLF", # Access "private" class members
Expand Down
Loading