From c5a828fd7960abdcfa0f613f00aa2abde20a90a9 Mon Sep 17 00:00:00 2001 From: Eric Berquist Date: Sat, 2 Mar 2024 22:51:17 -0500 Subject: [PATCH 1/4] (temporary) fixes for enabling default ruff lints --- pymolresponse/__init__.py | 2 +- pymolresponse/ao2mo.py | 8 ++++-- pymolresponse/interfaces/psi4/integrals.py | 1 - pymolresponse/properties/ecd.py | 2 +- pymolresponse/properties/magnetic.py | 26 +++++++++---------- pymolresponse/solvers.py | 12 ++++----- pymolresponse/tests/properties/test_ecd.py | 4 +-- .../tests/properties/test_quadratic.py | 8 +++--- .../tests/pyscf/test_integrals_pyscf.py | 2 +- pymolresponse/tests/test_calculators.py | 3 +-- .../tests/test_molecular_property.py | 16 ++++++------ pymolresponse/tests/test_runners.py | 1 - pymolresponse/tests/test_solvers.py | 4 +-- .../tests/test_uhf_partial_mo_trafo.py | 2 +- pyproject.toml | 1 - 15 files changed, 46 insertions(+), 46 deletions(-) diff --git a/pymolresponse/__init__.py b/pymolresponse/__init__.py index b5370e9..c6a1a68 100644 --- a/pymolresponse/__init__.py +++ b/pymolresponse/__init__.py @@ -1,3 +1,3 @@ """Molecular frequency-dependent response properties for arbitrary operators""" -from ._version import __version__ +from ._version import __version__ # noqa: F401 diff --git a/pymolresponse/ao2mo.py b/pymolresponse/ao2mo.py index 7dbed5c..382242c 100644 --- a/pymolresponse/ao2mo.py +++ b/pymolresponse/ao2mo.py @@ -18,7 +18,7 @@ def __init__( C: np.ndarray, occupations: Sequence[int], verbose: int = 1, - I: Optional[np.ndarray] = None, + I: Optional[np.ndarray] = None, # noqa: E741 ) -> None: self.C = fix_mocoeffs_shape(C) self.occupations = occupations @@ -31,7 +31,11 @@ def __init__( @staticmethod def transform( - I: np.ndarray, C1: np.ndarray, C2: np.ndarray, C3: np.ndarray, C4: np.ndarray + I: np.ndarray, # noqa: E741 + C1: np.ndarray, + C2: np.ndarray, + C3: np.ndarray, + C4: np.ndarray, # noqa: E741 ) -> np.ndarray: """ Transforms the 4-index ERI I with the 4 transformation matrices C1 to C4. diff --git a/pymolresponse/interfaces/psi4/integrals.py b/pymolresponse/interfaces/psi4/integrals.py index 1d0dda6..dad0c61 100644 --- a/pymolresponse/interfaces/psi4/integrals.py +++ b/pymolresponse/interfaces/psi4/integrals.py @@ -1,4 +1,3 @@ -from enum import Enum, auto, unique from typing import Optional, Tuple import numpy as np diff --git a/pymolresponse/properties/ecd.py b/pymolresponse/properties/ecd.py index 0c8a5c0..d89ccf8 100644 --- a/pymolresponse/properties/ecd.py +++ b/pymolresponse/properties/ecd.py @@ -189,7 +189,7 @@ def print_results_orca(self) -> str: tmom_angmom = op_angmom.transition_moments if self.do_dipvel: op_dipvel = self.driver.solver.operators[2] - rotstrvel = self.rotational_strengths_dipvel + rotstrvel = self.rotational_strengths_dipvel # noqa: F841 etoscsvel = op_dipvel.total_oscillator_strengths tmom_dipvel = op_dipvel.transition_moments t2_dipvel = np.asarray( diff --git a/pymolresponse/properties/magnetic.py b/pymolresponse/properties/magnetic.py index 560d075..eea119f 100644 --- a/pymolresponse/properties/magnetic.py +++ b/pymolresponse/properties/magnetic.py @@ -55,7 +55,7 @@ def form_operators(self) -> None: def form_results(self) -> None: assert len(self.driver.results) == 1 - operator_angmom = self.driver.solver.operators[0] + operator_angmom = self.driver.solver.operators[0] # noqa: F841 self.magnetizability = (1 / 4) * self.driver.results[0] # print('paramagnetic part of magnetic susceptibility/magnetizability, no GIAO, Cartesian origin') # print(self.magnetizability) @@ -151,7 +151,7 @@ def form_operators(self) -> None: self.driver.add_operator(operator_spinorb_eff) def form_results(self) -> None: - operator_angmom = self.driver.solver.operators[0] + operator_angmom = self.driver.solver.operators[0] # noqa: F841 # angmom_grad_alph = operator_angmom.mo_integrals_ai_supervector_alph # print(angmom_grad_alph[0, :, 0]) # angmom_resp_alph = operator_angmom.rspvecs_alph[0] @@ -160,29 +160,29 @@ def form_results(self) -> None: # print(np.linalg.norm(angmom_resp_alph[0, :, 0])) # print(angmom_resp_beta.shape) # print(np.linalg.norm(angmom_resp_beta[0, :, 0])) - operator_spinorb = self.driver.solver.operators[1] - operator_spinorb_eff = self.driver.solver.operators[2] + operator_spinorb = self.driver.solver.operators[1] # noqa: F841 + operator_spinorb_eff = self.driver.solver.operators[2] # noqa: F841 - np_formatter = {"float_kind": lambda x: "{:14.8f}".format(x)} + np_formatter = {"float_kind": lambda x: "{:14.8f}".format(x)} # noqa: F841 # np.set_printoptions(linewidth=200, formatter=np_formatter) assert len(self.driver.results) == 1 results = self.driver.results[0] assert results.shape == (9, 9) - block_1 = results[0:3, 0:3] # angmom/angmom + block_1 = results[0:3, 0:3] # angmom/angmom # noqa: F841 block_2 = results[0:3, 3:6] # angmom/spinorb block_3 = results[0:3, 6:9] # angmom/spinorb_eff - block_4 = results[3:6, 0:3] # spinorb/angmom - block_5 = results[3:6, 3:6] # spinorb/spinorb - block_6 = results[3:6, 6:9] # spinorb/spinorb_eff - block_7 = results[6:9, 0:3] # spinorb_eff/angmom - block_8 = results[6:9, 3:6] # spinorb_eff/spinorb - block_9 = results[6:9, 6:9] # spinorb_eff/spinorb_eff + block_4 = results[3:6, 0:3] # spinorb/angmom # noqa: F841 + block_5 = results[3:6, 3:6] # spinorb/spinorb # noqa: F841 + block_6 = results[3:6, 6:9] # spinorb/spinorb_eff # noqa: F841 + block_7 = results[6:9, 0:3] # spinorb_eff/angmom # noqa: F841 + block_8 = results[6:9, 3:6] # spinorb_eff/spinorb # noqa: F841 + block_9 = results[6:9, 6:9] # spinorb_eff/spinorb_eff # noqa: F841 nalph, nbeta = self.program_obj.nelec exact_spin = 0.5 * (nalph - nbeta) res_1 = block_2 / exact_spin res_2 = (block_3 - block_2) / exact_spin - res = res_1 + res_2 + res = res_1 + res_2 # noqa: F841 # principal values are sqrt(eigvals(g.T * g) prin_1 = np.sqrt(np.linalg.eigvals(np.dot(res_1.T, res_1))) diff --git a/pymolresponse/solvers.py b/pymolresponse/solvers.py index 38ebfaa..2d80f50 100644 --- a/pymolresponse/solvers.py +++ b/pymolresponse/solvers.py @@ -740,7 +740,7 @@ def form_explicit_hessian(self, hamiltonian: Hamiltonian, spin: Spin, frequency: nocc_alph, nvirt_alph, nocc_beta, nvirt_beta = self.occupations nov_alph = nocc_alph * nvirt_alph - nov_beta = nocc_beta * nvirt_beta + nov_beta = nocc_beta * nvirt_beta # noqa: F841 if not self.is_uhf: # Set up "function pointers". @@ -793,7 +793,7 @@ def form_explicit_hessian(self, hamiltonian: Hamiltonian, spin: Spin, frequency: def diagonalize_explicit_hessian(self) -> None: nocc_alph, nvirt_alph, nocc_beta, nvirt_beta = self.occupations nov_alph = nocc_alph * nvirt_alph - nov_beta = nocc_beta * nvirt_beta + nov_beta = nocc_beta * nvirt_beta # noqa: F841 if not self.is_uhf: eigvals, eigvecs = sp.linalg.eig(self.explicit_hessian) # Sort from lowest to highest eigenvalue (excitation @@ -842,8 +842,8 @@ def form_explicit_hessian(self, hamiltonian: Hamiltonian, spin: Spin, frequency: assert isinstance(frequency, (float, type(None))) nocc_alph, nvirt_alph, nocc_beta, nvirt_beta = self.occupations - nov_alph = nocc_alph * nvirt_alph - nov_beta = nocc_beta * nvirt_beta + nov_alph = nocc_alph * nvirt_alph # noqa: F841 + nov_beta = nocc_beta * nvirt_beta # noqa: F841 if not self.is_uhf: # Set up "function pointers". @@ -876,8 +876,8 @@ def form_explicit_hessian(self, hamiltonian: Hamiltonian, spin: Spin, frequency: def diagonalize_explicit_hessian(self) -> None: nocc_alph, nvirt_alph, nocc_beta, nvirt_beta = self.occupations - nov_alph = nocc_alph * nvirt_alph - nov_beta = nocc_beta * nvirt_beta + nov_alph = nocc_alph * nvirt_alph # noqa: F841 + nov_beta = nocc_beta * nvirt_beta # noqa: F841 if not self.is_uhf: eigvals, eigvecs = sp.linalg.eig(self.explicit_hessian) # Sort from lowest to highest eigenvalue (excitation diff --git a/pymolresponse/tests/properties/test_ecd.py b/pymolresponse/tests/properties/test_ecd.py index 4f8f1f5..ff98ed6 100644 --- a/pymolresponse/tests/properties/test_ecd.py +++ b/pymolresponse/tests/properties/test_ecd.py @@ -291,8 +291,8 @@ def test_ECD_RPA_singlet_BC2H4_cation_HF_STO3G() -> None: # TODO print("TODO dipole (velocity) oscillator strengths") - ref_etoscsvel = np.array(ref["etoscsvel"]) - res_etoscsvel = ecd_dipvel_rpa.driver.solver.operators[2].total_oscillator_strengths[:nroots] + ref_etoscsvel = np.array(ref["etoscsvel"]) # noqa: F841 + res_etoscsvel = ecd_dipvel_rpa.driver.solver.operators[2].total_oscillator_strengths[:nroots] # noqa: F841 # print('ref, res') # for refval, resval in zip(ref_etoscsvel, res_etoscsvel): # print(refval, resval) diff --git a/pymolresponse/tests/properties/test_quadratic.py b/pymolresponse/tests/properties/test_quadratic.py index 50e01b0..ad2e5e3 100644 --- a/pymolresponse/tests/properties/test_quadratic.py +++ b/pymolresponse/tests/properties/test_quadratic.py @@ -675,8 +675,8 @@ def test_first_hyperpolarizability_eope_rhf_wigner_explicit(): [-1.11067586, -3.00950655, 1.66112712], ] ) - ref_avgs = np.array([6.34718216, -7.81453502, 4.39980948]) - ref_avg = 10.98690140 + ref_avgs = np.array([6.34718216, -7.81453502, 4.39980948]) # noqa: F841 + ref_avg = 10.98690140 # noqa: F841 # TODO was 4.0e-5 thresh = 4.01e-5 @@ -879,8 +879,8 @@ def test_first_hyperpolarizability_or_rhf_wigner_explicit(): [-1.10887175, -3.00950655, 1.65659586], ] ) - ref_avgs = np.array([6.34331713, -7.81628395, 4.40251201]) - ref_avg = 10.98699590 + ref_avgs = np.array([6.34331713, -7.81628395, 4.40251201]) # noqa: F841 + ref_avg = 10.98699590 # noqa: F841 # TODO was 4.0e-5 thresh = 4.01e-5 diff --git a/pymolresponse/tests/pyscf/test_integrals_pyscf.py b/pymolresponse/tests/pyscf/test_integrals_pyscf.py index 7838d27..0ae1c8f 100644 --- a/pymolresponse/tests/pyscf/test_integrals_pyscf.py +++ b/pymolresponse/tests/pyscf/test_integrals_pyscf.py @@ -19,6 +19,6 @@ def test_integrals_pyscf(): def test_jk_pyscf(): mol = molecules.molecule_water_sto3g() mol.build() - jk_generator = integrals.JKPyscf(mol) + jk_generator = integrals.JKPyscf(mol) # noqa: F841 # print(jk_generator.compute_from_mocoeffs()) diff --git a/pymolresponse/tests/test_calculators.py b/pymolresponse/tests/test_calculators.py index f2d5dff..f8baaab 100644 --- a/pymolresponse/tests/test_calculators.py +++ b/pymolresponse/tests/test_calculators.py @@ -1,5 +1,4 @@ from pathlib import Path -from typing import Optional import numpy as np from cclib.io import ccopen @@ -15,7 +14,7 @@ try: from daltools import mol as dalmol from daltools import sirifc -except: +except ImportError: pass diff --git a/pymolresponse/tests/test_molecular_property.py b/pymolresponse/tests/test_molecular_property.py index c8d8406..c602bc5 100644 --- a/pymolresponse/tests/test_molecular_property.py +++ b/pymolresponse/tests/test_molecular_property.py @@ -28,10 +28,10 @@ def test_molecular_property() -> None: @pytest.mark.skip() def test_response_property() -> None: - pyscfmol = None - mocoeffs = np.zeros((1, 2, 2)) - moenergies = np.zeros((1, 2, 2)) - occupations = [0 for _ in range(4)] + pyscfmol = None # noqa: F841 + mocoeffs = np.zeros((1, 2, 2)) # noqa: F841 + moenergies = np.zeros((1, 2, 2)) # noqa: F841 + occupations = [0 for _ in range(4)] # noqa: F841 # TODO Turns out invoking the solver does a lot automatically... # cls = molecular_property.ResponseProperty(pyscfmol, mocoeffs, moenergies, occupations) # try: @@ -48,10 +48,10 @@ def test_response_property() -> None: @pytest.mark.skip() def test_transition_property() -> None: - pyscfmol = None - mocoeffs = np.zeros((1, 2, 2)) - moenergies = np.zeros((1, 2, 2)) - occupations = [0 for _ in range(4)] + pyscfmol = None # noqa: F841 + mocoeffs = np.zeros((1, 2, 2)) # noqa: F841 + moenergies = np.zeros((1, 2, 2)) # noqa: F841 + occupations = [0 for _ in range(4)] # noqa: F841 # TODO Turns out invoking the solver does a lot automatically... # cls = molecular_property.TransitionProperty(pyscfmol, mocoeffs, moenergies, occupations) # try: diff --git a/pymolresponse/tests/test_runners.py b/pymolresponse/tests/test_runners.py index c3c0a18..aa00d46 100644 --- a/pymolresponse/tests/test_runners.py +++ b/pymolresponse/tests/test_runners.py @@ -1,7 +1,6 @@ from pathlib import Path from typing import Union -from pymolresponse import utils from pymolresponse.data import REFDIR from pymolresponse.interfaces.dalton.utils import dalton_label_to_operator from pymolresponse.operators import Operator diff --git a/pymolresponse/tests/test_solvers.py b/pymolresponse/tests/test_solvers.py index 3714f87..0e1bea0 100644 --- a/pymolresponse/tests/test_solvers.py +++ b/pymolresponse/tests/test_solvers.py @@ -94,7 +94,7 @@ def test_final_result_rhf_h2o_sto3g_rpa_singlet_iter() -> None: ref_polarizability.form_operators() ref_polarizability.run(hamiltonian=Hamiltonian.RPA, spin=Spin.singlet) ref_polarizability.form_results() - ref_operator = ref_polarizability.driver.solver.operators[0] + ref_operator = ref_polarizability.driver.solver.operators[0] # noqa: F841 res_polarizability = electric.Polarizability( Program.Psi4, mol, @@ -109,7 +109,7 @@ def test_final_result_rhf_h2o_sto3g_rpa_singlet_iter() -> None: res_polarizability.form_operators() res_polarizability.run(hamiltonian=Hamiltonian.RPA, spin=Spin.singlet) res_polarizability.form_results() - res_operator = res_polarizability.driver.solver.operators[0] + res_operator = res_polarizability.driver.solver.operators[0] # noqa: F841 np.testing.assert_allclose( ref_polarizability.polarizabilities, diff --git a/pymolresponse/tests/test_uhf_partial_mo_trafo.py b/pymolresponse/tests/test_uhf_partial_mo_trafo.py index 6dc7fdf..a641f80 100644 --- a/pymolresponse/tests/test_uhf_partial_mo_trafo.py +++ b/pymolresponse/tests/test_uhf_partial_mo_trafo.py @@ -28,7 +28,7 @@ def test_explicit_uhf_outside_solver() -> None: norb = C_a.shape[1] nocc_a, nocc_b = mol.nelec nvirt_a, nvirt_b = norb - nocc_a, norb - nocc_b - occupations = [nocc_a, nvirt_a, nocc_b, nvirt_b] + occupations = [nocc_a, nvirt_a, nocc_b, nvirt_b] # noqa: F841 C_occ_alph = C_a[:, :nocc_a] C_virt_alph = C_a[:, nocc_a:] diff --git a/pyproject.toml b/pyproject.toml index e64fa7b..5e1689e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -84,7 +84,6 @@ line-length = 100 skip-magic-trailing-comma = true [tool.ruff.lint] -select = [] [tool.ruff.lint.isort] lines-after-imports = 2 From ff88b78d775a29e718465ea0437e64ea89814f33 Mon Sep 17 00:00:00 2001 From: Eric Berquist Date: Sat, 2 Mar 2024 22:58:49 -0500 Subject: [PATCH 2/4] remove unused pylint config --- .pylintrc | 560 ------------------------------------------------------ 1 file changed, 560 deletions(-) delete mode 100644 .pylintrc diff --git a/.pylintrc b/.pylintrc deleted file mode 100644 index d2be7da..0000000 --- a/.pylintrc +++ /dev/null @@ -1,560 +0,0 @@ -[MASTER] - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. -extension-pkg-allow-list= - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. (This is an alternative name to extension-pkg-allow-list -# for backward compatibility.) -extension-pkg-whitelist= - -# Return non-zero exit code if any of these messages/categories are detected, -# even if score is above --fail-under value. Syntax same as enable. Messages -# specified are enabled, while categories only check already-enabled messages. -fail-on= - -# Specify a score threshold to be exceeded before program exits with error. -fail-under=10.0 - -# Files or directories to be skipped. They should be base names, not paths. -ignore=CVS - -# Add files or directories matching the regex patterns to the ignore-list. The -# regex matches against paths. -ignore-paths= - -# Files or directories matching the regex patterns are skipped. The regex -# matches against base names, not paths. -ignore-patterns= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the -# number of processors available to use. -jobs=1 - -# Control the amount of potential inferred values when inferring a single -# object. This can help the performance when dealing with large functions or -# complex, nested conditions. -limit-inference-results=100 - -# List of plugins (as comma separated values of python module names) to load, -# usually to register additional checkers. -load-plugins= - -# Pickle collected data for later comparisons. -persistent=yes - -# Min Python version to use for version dependend checks. Will default to the -# version used to run pylint. -py-version=3.9 - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=yes - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. -confidence= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once). You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use "--disable=all --enable=classes -# --disable=W". -disable=raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - useless-suppression, - deprecated-pragma, - use-symbolic-message-instead - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -enable=c-extension-no-member - - -[REPORTS] - -# Python expression which should return a score less than or equal to 10. You -# have access to the variables 'error', 'warning', 'refactor', and 'convention' -# which contain the number of messages in each category, as well as 'statement' -# which is the total number of statements analyzed. This score is used by the -# global evaluation report (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details. -#msg-template= - -# Set the output format. Available formats are text, parseable, colorized, json -# and msvs (visual studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - -# Complete name of functions that never returns. When checking for -# inconsistent-return-statements if a never returning function is called then -# it will be considered as an explicit return statement and no message will be -# printed. -never-returning-functions=sys.exit,argparse.parse_error - - -[BASIC] - -# Naming style matching correct argument names. -argument-naming-style=snake_case - -# Regular expression matching correct argument names. Overrides argument- -# naming-style. -#argument-rgx= - -# Naming style matching correct attribute names. -attr-naming-style=snake_case - -# Regular expression matching correct attribute names. Overrides attr-naming- -# style. -#attr-rgx= - -# Bad variable names which should always be refused, separated by a comma. -bad-names=foo, - bar, - baz, - toto, - tutu, - tata - -# Bad variable names regexes, separated by a comma. If names match any regex, -# they will always be refused -bad-names-rgxs= - -# Naming style matching correct class attribute names. -class-attribute-naming-style=any - -# Regular expression matching correct class attribute names. Overrides class- -# attribute-naming-style. -#class-attribute-rgx= - -# Naming style matching correct class constant names. -class-const-naming-style=UPPER_CASE - -# Regular expression matching correct class constant names. Overrides class- -# const-naming-style. -#class-const-rgx= - -# Naming style matching correct class names. -class-naming-style=PascalCase - -# Regular expression matching correct class names. Overrides class-naming- -# style. -#class-rgx= - -# Naming style matching correct constant names. -const-naming-style=UPPER_CASE - -# Regular expression matching correct constant names. Overrides const-naming- -# style. -#const-rgx= - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - -# Naming style matching correct function names. -function-naming-style=snake_case - -# Regular expression matching correct function names. Overrides function- -# naming-style. -#function-rgx= - -# Good variable names which should always be accepted, separated by a comma. -good-names=i, - j, - k, - ex, - Run, - _ - -# Good variable names regexes, separated by a comma. If names match any regex, -# they will always be accepted -good-names-rgxs= - -# Include a hint for the correct naming format with invalid-name. -include-naming-hint=no - -# Naming style matching correct inline iteration names. -inlinevar-naming-style=any - -# Regular expression matching correct inline iteration names. Overrides -# inlinevar-naming-style. -#inlinevar-rgx= - -# Naming style matching correct method names. -method-naming-style=snake_case - -# Regular expression matching correct method names. Overrides method-naming- -# style. -#method-rgx= - -# Naming style matching correct module names. -module-naming-style=snake_case - -# Regular expression matching correct module names. Overrides module-naming- -# style. -#module-rgx= - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# List of decorators that produce properties, such as abc.abstractproperty. Add -# to this list to register other decorators that produce valid properties. -# These decorators are taken in consideration only for invalid-name. -property-classes=abc.abstractproperty - -# Naming style matching correct variable names. -variable-naming-style=snake_case - -# Regular expression matching correct variable names. Overrides variable- -# naming-style. -#variable-rgx= - - -[STRING] - -# This flag controls whether inconsistent-quotes generates a warning when the -# character used as a quote delimiter is used inconsistently within a module. -check-quote-consistency=no - -# This flag controls whether the implicit-str-concat should generate a warning -# on implicit string concatenation in sequences defined over several lines. -check-str-concat-over-line-jumps=no - - -[SIMILARITIES] - -# Comments are removed from the similarity computation -ignore-comments=yes - -# Docstrings are removed from the similarity computation -ignore-docstrings=yes - -# Imports are removed from the similarity computation -ignore-imports=no - -# Signatures are removed from the similarity computation -ignore-signatures=no - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - -[LOGGING] - -# The type of string formatting that logging methods do. `old` means using % -# formatting, `new` is for `{}` formatting. -logging-format-style=old - -# Logging modules to check that the string format arguments are in logging -# function parameter format. -logging-modules=logging - - -[FORMAT] - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=100 - -# Maximum number of lines in a module. -max-module-lines=1000 - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME, - XXX, - TODO - -# Regular expression of note tags to take in consideration. -#notes-rgx= - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -additional-builtins= - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of names allowed to shadow builtins -allowed-redefined-builtins= - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_, - _cb - -# A regular expression matching the name of dummy variables (i.e. expected to -# not be used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: none. To make it work, -# install the 'python-enchant' package. -spelling-dict= - -# List of comma separated words that should be considered directives if they -# appear and the beginning of a comment and should not be checked. -spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains the private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to the private dictionary (see the -# --spelling-private-dict-file option) instead of raising a message. -spelling-store-unknown-words=no - - -[TYPECHECK] - -# List of decorators that produce context managers, such as -# contextlib.contextmanager. Add to this list to register other decorators that -# produce valid context managers. -contextmanager-decorators=contextlib.contextmanager - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# This flag controls whether pylint should warn about no-member and similar -# checks whenever an opaque object is returned when inferring. The inference -# can return multiple potential results while evaluating a Python object, but -# some branches might not be evaluated, which results in partial inference. In -# that case, it might be useful to still emit no-member and other checks for -# the rest of the inferred objects. -ignore-on-opaque-inference=yes - -# List of class names for which member attributes should not be checked (useful -# for classes with dynamically set attributes). This supports the use of -# qualified names. -ignored-classes=optparse.Values,thread._local,_thread._local - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis). It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules= - -# Show a hint with possible names when a member name was not found. The aspect -# of finding the hint is based on edit distance. -missing-member-hint=yes - -# The minimum edit distance a name should have in order to be considered a -# similar match for a missing member name. -missing-member-hint-distance=1 - -# The total number of similar names that should be taken in consideration when -# showing a hint for a missing member. -missing-member-max-choices=1 - -# List of decorators that change the signature of a decorated function. -signature-mutators= - - -[DESIGN] - -# List of qualified class names to ignore when counting class parents (see -# R0901) -ignored-parents= - -# Maximum number of arguments for function / method. -max-args=5 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Maximum number of boolean expressions in an if statement (see R0916). -max-bool-expr=5 - -# Maximum number of branch for function / method body. -max-branches=12 - -# Maximum number of locals for function / method body. -max-locals=15 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - -# Maximum number of return / yield for function / method body. -max-returns=6 - -# Maximum number of statements in function / method body. -max-statements=50 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - - -[CLASSES] - -# Warn about protected attribute access inside special methods -check-protected-access-in-special-methods=no - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp, - __post_init__ - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=cls - - -[IMPORTS] - -# List of modules that can be imported at any level, not just the top level -# one. -allow-any-import-level= - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - -# Deprecated modules which should not be used, separated by a comma. -deprecated-modules= - -# Output a graph (.gv or any supported image format) of external dependencies -# to the given file (report RP0402 must not be disabled). -ext-import-graph= - -# Output a graph (.gv or any supported image format) of all (i.e. internal and -# external) dependencies to the given file (report RP0402 must not be -# disabled). -import-graph= - -# Output a graph (.gv or any supported image format) of internal dependencies -# to the given file (report RP0402 must not be disabled). -int-import-graph= - -# Force import order to recognize a module as part of the standard -# compatibility libraries. -known-standard-library= - -# Force import order to recognize a module as part of a third party library. -known-third-party=enchant - -# Couples of modules and preferred modules, separated by a comma. -preferred-modules= - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception From 6acf4183dbb5cd7ab8f3f742dfbd473a23adc18e Mon Sep 17 00:00:00 2001 From: Eric Berquist Date: Sun, 3 Mar 2024 12:25:31 -0500 Subject: [PATCH 3/4] update mypy config but still don't enable --- .pre-commit-config.yaml | 3 ++- pymolresponse/cphf.py | 8 ++++---- pyproject.toml | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5f0b07d..125e846 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -56,7 +56,7 @@ repos: # additional_dependencies: # - toml # - repo: https://github.com/pre-commit/mirrors-mypy - # rev: "v1.3.0" + # rev: "v1.8.0" # hooks: # - id: mypy # args: [] @@ -64,6 +64,7 @@ repos: # - attrs # - numpy # - types-pyyaml + # - versioningit - repo: https://github.com/adrienverge/yamllint rev: "v1.35.1" hooks: diff --git a/pymolresponse/cphf.py b/pymolresponse/cphf.py index d5fdbad..95bca0d 100644 --- a/pymolresponse/cphf.py +++ b/pymolresponse/cphf.py @@ -122,9 +122,9 @@ def form_uncoupled_results(self) -> None: row_starts = [] col_starts = [] row_start = 0 - for iop1, op1 in enumerate(self.solver.operators): + for op1 in self.solver.operators: col_start = 0 - for iop2, op2 in enumerate(self.solver.operators): + for op2 in self.solver.operators: result_block = 0.0 result_block_alph = form_results( op1.mo_integrals_ai_supervector_alph, @@ -214,9 +214,9 @@ def form_results(self) -> None: row_starts = [] col_starts = [] row_start = 0 - for iop1, op1 in enumerate(self.solver.operators): + for op1 in self.solver.operators: col_start = 0 - for iop2, op2 in enumerate(self.solver.operators): + for op2 in self.solver.operators: result_block = 0.0 result_block_alph = form_results( op1.mo_integrals_ai_supervector_alph, op2.rspvecs_alph[f] diff --git a/pyproject.toml b/pyproject.toml index 5e1689e..909dc03 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -72,8 +72,8 @@ warn_unused_configs = true module = [ "psi4", "pyscf", - "pytest", "scipy", + "scipy.constants" ] ignore_missing_imports = true From f2b01f4e45bac1d67a93dd459a564ab5a05fb337 Mon Sep 17 00:00:00 2001 From: Eric Berquist Date: Thu, 7 Mar 2024 00:01:46 -0500 Subject: [PATCH 4/4] mypy fixes --- pymolresponse/cphf.py | 4 ++-- pymolresponse/integrals.py | 2 +- pymolresponse/td.py | 2 +- pymolresponse/utils.py | 3 +-- pyproject.toml | 1 + 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pymolresponse/cphf.py b/pymolresponse/cphf.py index 95bca0d..1c61e82 100644 --- a/pymolresponse/cphf.py +++ b/pymolresponse/cphf.py @@ -1,7 +1,7 @@ """Driver for solving the coupled perturbed Hartree-Fock (CPHF) equations.""" from abc import ABC, abstractmethod -from typing import Optional, Sequence +from typing import List, Optional, Sequence import numpy as np @@ -16,7 +16,7 @@ def __init__(self, solver: Solver) -> None: assert isinstance(solver, Solver) self.solver = solver - self.results = [] + self.results: List[np.ndarray] = [] @abstractmethod def run(self, hamiltonian: Hamiltonian, spin: Spin, program: Program, program_obj) -> None: diff --git a/pymolresponse/integrals.py b/pymolresponse/integrals.py index 3988bce..821d88c 100644 --- a/pymolresponse/integrals.py +++ b/pymolresponse/integrals.py @@ -217,7 +217,7 @@ def _form_rhs_geometric(C: np.ndarray, occupations, natoms, MO, mints): if __name__ == "__main__": dalton_integrals = parse_aoproper("r_lih_hf_sto-3g/dalton_response_rpa_singlet/AOPROPER") - from pymolresponse.utils import dalton_label_to_operator + from pymolresponse.interfaces.dalton.utils import dalton_label_to_operator labels = dalton_integrals.keys() for label in labels: diff --git a/pymolresponse/td.py b/pymolresponse/td.py index 3754c93..3034e02 100644 --- a/pymolresponse/td.py +++ b/pymolresponse/td.py @@ -70,7 +70,7 @@ def form_results(self) -> None: def print_results(self) -> None: energies = self.solver.eigvals.real - for idx in len(energies): + for idx in range(len(energies)): print("=" * 78) print(f" State: {idx + 1}") print(f" Excitation energy [a.u.]: {energies[idx]}") diff --git a/pymolresponse/utils.py b/pymolresponse/utils.py index f4636bb..35736a0 100644 --- a/pymolresponse/utils.py +++ b/pymolresponse/utils.py @@ -2,7 +2,6 @@ from itertools import accumulate from pathlib import Path -from sys import exit from typing import List, Tuple, Union import numpy as np @@ -350,7 +349,7 @@ def flip_triangle_sign(A: np.ndarray, triangle: str = "lower") -> np.ndarray: elif triangle == "upper": indices = np.triu_indices(dim) else: - exit(1) + raise ValueError("argument to triangle must be 'upper' or 'lower'") B = A.copy() B[indices] *= -1.0 return B diff --git a/pyproject.toml b/pyproject.toml index 909dc03..c39e333 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,6 +70,7 @@ warn_unused_configs = true [[tool.mypy.overrides]] module = [ + "periodictable", "psi4", "pyscf", "scipy",