diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml index 6b76dae..7666224 100644 --- a/.github/workflows/CI.yaml +++ b/.github/workflows/CI.yaml @@ -21,16 +21,16 @@ jobs: strategy: fail-fast: false matrix: - os: [macOS-latest, ubuntu-latest] - python-version: ["3.8", "3.9"] + os: [macOS-latest, ubuntu-latest, macOS-13] + python-version: ["3.9", "3.10", "3.11", "3.12"] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 # Cache our conda packages. # More info: https://github.com/conda-incubator/setup-miniconda#caching-packages - name: Cache conda environment - uses: actions/cache@v2 + uses: actions/cache@v3 env: # Increase this value to reset cache if environment.yml has not changed CACHE_NUMBER: 0 @@ -41,15 +41,15 @@ jobs: # More info on options: https://github.com/conda-incubator/setup-miniconda - name: Set up Anaconda environment - uses: conda-incubator/setup-miniconda@v2 + uses: conda-incubator/setup-miniconda@v3 with: python-version: ${{ matrix.python-version }} environment-file: environment.yml - channels: psi4,conda-forge,defaults + channels: conda-forge,defaults activate-environment: mdsapt auto-update-conda: false auto-activate-base: false - use-only-tar-bz2: true # IMPORTANT: This needs to be set for caching to work properly! + #use-only-tar-bz2: true # IMPORTANT: This needs to be set for caching to work properly! # TODO: make pyright happier someday in the future # - name: Type-check @@ -83,8 +83,8 @@ jobs: strategy: fail-fast: true matrix: - os: [macOS-latest, ubuntu-latest] - python-version: [3.7, 3.8, 3.9] + os: [macOS-13, ubuntu-latest] + python-version: [3.9, 3.10, 3.11, 3.12] include: - os: macOS-latest output-folder: osx-64 @@ -116,7 +116,7 @@ jobs: activate-environment: mdsapt-build auto-update-conda: false auto-activate-base: false - use-only-tar-bz2: true # IMPORTANT: This needs to be set for caching to work properly! + #use-only-tar-bz2: true # IMPORTANT: This needs to be set for caching to work properly! - name: Build MDSAPT conda package # conda requires this special shell @@ -139,8 +139,8 @@ jobs: strategy: fail-fast: false matrix: - os: [macOS-latest, ubuntu-latest] - python-version: [3.7, 3.8, 3.9] + os: [macOS-latest, macOS-13, ubuntu-latest] + python-version: [3.9, 3.10, 3.11, 3.12] steps: - uses: actions/checkout@v2 diff --git a/README.md b/README.md index 4892732..1403195 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ MD-SAPT SAPT Calculations for MDAnalysis [//]: # (Badges) -[![GitHub Actions Build Status](https://github.com/alescoulie/MDSAPT/workflows/CI/badge.svg)](https://github.com/alescolie/MDSAPT/actions?query=workflow%3ACI) -[![codecov](https://codecov.io/gh/alescoulie/MDSAPT/branch/master/graph/badge.svg)](https://codecov.io/gh/alescoulie/MDSAPT/branch/master) +[![GitHub Actions Build Status](https://github.com/calpolyccg/MDSAPT/workflows/CI/badge.svg)](https://github.com/alescolie/MDSAPT/actions?query=workflow%3ACI) +[![codecov](https://codecov.io/gh/calpolyccg/MDSAPT/branch/master/graph/badge.svg)](https://codecov.io/gh/alescoulie/MDSAPT/branch/master) [![Documentation Status](https://readthedocs.org/projects/mdsapt/badge/?version=latest)](https://mdsapt.readthedocs.io/en/latest/?badge=latest) [![Launch binder demo](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/calpolyccg/MDSAPT_demo/master?labpath=MD-SAPT_demo.ipynb) diff --git a/flake.nix b/flake.nix index 0de6daa..7155bef 100644 --- a/flake.nix +++ b/flake.nix @@ -62,7 +62,7 @@ devEnv = pkgs.mkShell { propagatedBuildInputs = [ poetryEnv]; - buildInputs = with pkgs; [pkgs.qchem.psi4 pkgs.qchem.openmm pkgs.qchem.pdbfixer ]; + buildInputs = with pkgs; [pkgs.qchem.psi4 pkgs.qchem.openmm pkgs.qchem.pdbfixer pkgs.act ]; }; # DON'T FORGET TO PUT YOUR PACKAGE NAME HERE, REMOVING `throw` diff --git a/mdsapt/__init__.py b/mdsapt/__init__.py index 8ccb27f..0c96db4 100644 --- a/mdsapt/__init__.py +++ b/mdsapt/__init__.py @@ -1,5 +1,6 @@ # pylint: skip-file """An MDA-kit for calcuating quantum interactions in psi4.""" +from . import _version import logging from . import log @@ -34,5 +35,4 @@ def log_banner() -> None: logger = create_logger() log_banner() -from . import _version __version__ = _version.get_versions()['version'] diff --git a/mdsapt/_version.py b/mdsapt/_version.py index 25e5815..74d9c69 100644 --- a/mdsapt/_version.py +++ b/mdsapt/_version.py @@ -1,4 +1,3 @@ - # This file helps to compute a version number in source trees obtained from # git-archive tarball (such as those provided by githubs download-from-tag # feature). Distribution tarballs (built by setup.py sdist) and build @@ -19,6 +18,9 @@ from typing import Any, Callable, Dict, List, Optional, Tuple import functools +# pylint: disable=consider-using-f-string +# pylint: disable=invalid-name + def get_keywords() -> Dict[str, str]: """Get the keywords needed to look up the version information.""" @@ -162,7 +164,7 @@ def git_get_keywords(versionfile_abs: str) -> Dict[str, str]: # _version.py. keywords: Dict[str, str] = {} try: - with open(versionfile_abs, "r") as fobj: + with open(versionfile_abs, "r") as fobj: # pylint: disable=unspecified-encoding for line in fobj: if line.strip().startswith("git_refnames ="): mo = re.search(r'=\s*"(.*)"', line) diff --git a/mdsapt/cli.py b/mdsapt/cli.py index b58564c..1403be8 100644 --- a/mdsapt/cli.py +++ b/mdsapt/cli.py @@ -1,9 +1,9 @@ +# pylint: disable=missing-module-docstring import logging import os import sys import click -from mdsapt.config import RangeFrameSelection # Note that we do not import MDSAPT. This is a speed optimization; it is imported later. @@ -16,11 +16,13 @@ @click.group() def cli(): + # pylint: disable=line-too-long """ MDSAPT - Molecular Dynamics Symmetry-Adapted Perturbation Theory, by Alia Lescoulie, Astrid Yu, and Ashley Ringer McDonald. This command-line interface lets you easily do common MDSAPT-related tasks. """ + # pylint: disable=line-too-long @cli.command() @@ -43,17 +45,19 @@ def generate(filename: str, template: str, force: bool): """ Generate a template input file at filename. """ + # pylint: disable=fixme ensure_safe_to_overwrite(filename, force) # TODO: make a wizard for these templates template_path = os.path.join(_dir_path, 'data', f'{template}_template.yaml') - with open(template_path, 'r') as template: + with open(template_path, 'r', encoding='utf-8') as template: template_data = template.read() - with open(filename, 'w') as new_file: + with open(filename, 'w', encoding='utf-8') as new_file: new_file.write(template_data) - logger.info(f'Generated template input file {filename}') + logger.info('Generated template input file %s', filename) + # pylint: enable=fixme @cli.command() @@ -75,7 +79,7 @@ def run(in_file: str, out_file: str, force: bool): Run a SAPT calculation using the configuration in in_file. Outputs will be written to out_file. """ - import mdsapt + import mdsapt # pylint: disable=import-outside-toplevel ensure_safe_to_overwrite(out_file, force) diff --git a/mdsapt/config.py b/mdsapt/config.py index ea6acfa..4c53137 100644 --- a/mdsapt/config.py +++ b/mdsapt/config.py @@ -43,7 +43,8 @@ class Psi4Config(BaseModel): Attributes: method: The SAPT method to use. - NOTE: You can use any valid Psi4 method, but it might fail if you don't use a SAPT method. + NOTE: You can use any valid Psi4 method, but it might fail + if you don't use a SAPT method. basis: The basis to use. NOTE: We do not verify if this is a valid basis set or not. @@ -51,7 +52,8 @@ class Psi4Config(BaseModel): Whether to save the raw output of Psi4. May be useful for debugging. settings: Other Psi4 settings you would like to provide. These will be passed into - `psi4.set_options `_. + `psi4.set_options + `_. """ method: str @@ -97,10 +99,12 @@ class TopologySelection(BaseModel): Attributes: path: Where the topology file is located. topology_format: If specified, overrides the format to import with. - charge_overrides: An optional dictionary, where keys are atom numbers and values are their charges. + charge_overrides: An optional dictionary, where keys are atom numbers and + values are their charges. .. seealso:: - `List of topology formats that MDAnalysis supports `_ + `List of topology formats that MDAnalysis supports + `_ """ path: Path @@ -164,8 +168,14 @@ class TrajectoryAnalysisConfig(BaseModel): type: Literal['trajectory'] topology: TopologySelection trajectories: List[FilePath] - pairs: List[Tuple[Annotated[int, Field(strict=True, ge=0)], Annotated[int, Field(strict=True, ge=0)] - ]] + pairs: List[ + Tuple[ + Annotated[ + int, + Field(strict=True, ge=0)], + Annotated[int, Field(strict=True, ge=0)] + ] + ] frames: RangeFrameSelection output: str @@ -173,7 +183,10 @@ def create_universe(self, **universe_kwargs) -> mda.Universe: """ Loads a universe from the given topology and trajectory """ - return self.topology.create_universe([str(p) for p in self.trajectories], **universe_kwargs) + return self.topology.create_universe( + [str(p) for p in self.trajectories], + **universe_kwargs + ) def get_selections(self) -> Set[int]: """ @@ -209,6 +222,10 @@ def get_invalid_residue_selections(residues: Iterable[int], unv: mda.Universe) - def get_individual_topologies(sel: TopologyGroupSelection) -> List[TopologySelection]: + """ + Gets a list of :class:`mdsapt.config.TopolgoySelections` from a + :class:`mdsapt.config.TopologyGroupSelection` + """ if isinstance(sel, list): return sel @@ -257,12 +274,27 @@ class DockingAnalysisConfig(BaseModel): @model_validator(mode='after') def ensure_presence_of_args(self) -> 'DockingAnalysisConfig': - provided_args = (self.combined_topologies is not None, self.protein is not None, self.ligands is not None) + """ + Checks that arguments are correct + """ + provided_args = ( + self.combined_topologies is not None, + self.protein is not None, + self.ligands is not None + ) + if provided_args not in [(True, False, False), (False, True, True)]: - raise ValueError('Must provide `protein` and `ligands` keys, or only `combined_topologies`') + raise ValueError( + 'Must provide `protein` and `ligands` keys, or only `combined_topologies`' + ) + return self def build_ensemble(self) -> Ensemble: + """ + Creates an Ensemble containing the set of topologies used to analyze docking. + + """ return self._build_ensemble(combined_topologies=self.combined_topologies, protein=self.protein, ligands=self.ligands) @@ -275,7 +307,9 @@ def _build_ensemble( protein: Optional[TopologySelection], ligands: Optional[TopologyGroupSelection], ) -> Ensemble: - """Fails if the wrong types of arguments are provided.""" + """ + Fails if the wrong types of arguments are provided. + """ if combined_topologies is not None and (protein, ligands) == (None, None): return Ensemble.build_from_files( [top.path for top in get_individual_topologies(combined_topologies)] @@ -289,7 +323,9 @@ def _build_ensemble( ens = ens.merge(protein_mol) return ens - raise ValueError('Must provide `protein` and `ligands` keys, or only `combined_topologies`') + raise ValueError( + 'Must provide `protein` and `ligands` keys, or only `combined_topologies`' + ) def get_selections(self) -> Set[int]: """ diff --git a/mdsapt/repair.py b/mdsapt/repair.py index be7fa7e..4d5ce18 100644 --- a/mdsapt/repair.py +++ b/mdsapt/repair.py @@ -57,6 +57,9 @@ def get_spin_multiplicity(molecule: Chem.Mol) -> int: def is_amino(unv: mda.Universe, resid: int) -> bool: + """ + Checks resnames aganst list of anmino acids, returns boolean if its in the list. + """ std_resids: Set[str] = { 'ALA', 'ARG', @@ -80,7 +83,7 @@ def is_amino(unv: mda.Universe, resid: int) -> bool: 'VAL' } - resname_atr = unv._topology.resnames + resname_atr = unv._topology.resnames # pylint: disable=protected-access return resname_atr.values[resid - 1] in std_resids diff --git a/mdsapt/sapt.py b/mdsapt/sapt.py index 39b220e..ccd0142 100644 --- a/mdsapt/sapt.py +++ b/mdsapt/sapt.py @@ -206,6 +206,10 @@ class DockingSAPT: 'SAPT DISP ENERGY' ] + _res_dict: Dict[str, List[float]] + _key_names: Dict[str, str] + results: pd.DataFrame + def __init__(self, config: Config) -> None: """ Sets up ligand topology systems. @@ -247,7 +251,7 @@ def _single_system(self) -> None: coords = xyz_dict[pair[0]] + '\n--\n' + xyz_dict[pair[1]] + '\nunits angstrom' - logger.info(f'Starting SAPT for {pair}') + logger.info(f'Starting SAPT for {pair}') # pylint: disable=logging-fstring-interpolation if self._cfg.psi4.save_output: outfile = f'sapt_{self._key_names[self._key]}_{self._pair_names[pair]}.out' diff --git a/mdsapt/tests/test_config.py b/mdsapt/tests/test_config.py index 80b0084..ecd1191 100644 --- a/mdsapt/tests/test_config.py +++ b/mdsapt/tests/test_config.py @@ -5,7 +5,6 @@ from tempfile import mktemp from typing import Dict, Any -import pydantic import pytest from pydantic import ValidationError diff --git a/mdsapt/tests/test_sapt.py b/mdsapt/tests/test_sapt.py index bf993a5..2ce44a5 100644 --- a/mdsapt/tests/test_sapt.py +++ b/mdsapt/tests/test_sapt.py @@ -3,22 +3,22 @@ """ import os -import MDAnalysis from MDAnalysis.topology.guessers import guess_types -from ..config import Config, load_from_yaml_file +from ..config import load_from_yaml_file from ..sapt import TrajectorySAPT, DockingSAPT traj_settings = load_from_yaml_file( os.path.join(os.getcwd(), 'mdsapt', 'tests', 'testing_resources', 'test_input.yaml')) dock_settings = load_from_yaml_file( - os.path.join(os.getcwd(), 'mdsapt', 'tests', 'testing_resources', 'docking_in.yaml')) + os.path.join(os.getcwd(), 'mdsapt', 'tests', 'testing_resources', 'docking_in.yaml')) unv = traj_settings.analysis.create_universe() elements = guess_types(unv.atoms.names) unv.add_TopologyAttr('elements', elements) + class TestSAPT: """ Test object for SAPT analysis diff --git a/poetry.lock b/poetry.lock index f65c5bd..0d0a325 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "alabaster" version = "0.7.16" description = "A light, configurable Sphinx theme" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -16,7 +15,6 @@ files = [ name = "annotated-types" version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -28,7 +26,6 @@ files = [ name = "astroid" version = "3.2.2" description = "An abstract syntax tree for Python with inference support." -category = "main" optional = false python-versions = ">=3.8.0" files = [ @@ -41,25 +38,23 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] name = "autopep8" -version = "2.2.0" +version = "2.3.0" description = "A tool that automatically formats Python code to conform to the PEP 8 style guide" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "autopep8-2.2.0-py2.py3-none-any.whl", hash = "sha256:05418a981f038969d8bdcd5636bf15948db7555ae944b9f79b5a34b35f1370d4"}, - {file = "autopep8-2.2.0.tar.gz", hash = "sha256:d306a0581163ac29908280ad557773a95a9bede072c0fafed6f141f5311f43c1"}, + {file = "autopep8-2.3.0-py2.py3-none-any.whl", hash = "sha256:b716efa70cbafbf4a2c9c5ec1cabfa037a68f9e30b04c74ffa5864dd49b8f7d2"}, + {file = "autopep8-2.3.0.tar.gz", hash = "sha256:5cfe45eb3bef8662f6a3c7e28b7c0310c7310d340074b7f0f28f9810b44b7ef4"}, ] [package.dependencies] -pycodestyle = ">=2.11.0" +pycodestyle = ">=2.12.0" tomli = {version = "*", markers = "python_version < \"3.11\""} [[package]] name = "babel" version = "2.15.0" description = "Internationalization utilities" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -74,7 +69,6 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] name = "certifi" version = "2024.6.2" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -86,7 +80,6 @@ files = [ name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -186,7 +179,6 @@ files = [ name = "click" version = "8.1.7" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -201,7 +193,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -213,7 +204,6 @@ files = [ name = "contourpy" version = "1.2.1" description = "Python library for calculating contours of 2D quadrilateral grids" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -277,7 +267,6 @@ test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] name = "coverage" version = "7.5.3" description = "Code coverage measurement for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -345,7 +334,6 @@ toml = ["tomli"] name = "cycler" version = "0.12.1" description = "Composable style cycles" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -361,7 +349,6 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] name = "dill" version = "0.3.8" description = "serialize all of Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -377,7 +364,6 @@ profile = ["gprof2dot (>=2022.7.29)"] name = "docutils" version = "0.20.1" description = "Docutils -- Python Documentation Utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -389,7 +375,6 @@ files = [ name = "exceptiongroup" version = "1.2.1" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -404,7 +389,6 @@ test = ["pytest (>=6)"] name = "fasteners" version = "0.19" description = "A python package that provides useful locks" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -416,7 +400,6 @@ files = [ name = "fonttools" version = "4.53.0" description = "Tools to manipulate font files" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -482,7 +465,6 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] name = "griddataformats" version = "1.0.2" description = "Reading and writing of data on regular grids in Python" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -499,7 +481,6 @@ scipy = "*" name = "idna" version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -511,7 +492,6 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -521,29 +501,27 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.1.0" +version = "7.2.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, - {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, + {file = "importlib_metadata-7.2.0-py3-none-any.whl", hash = "sha256:04e4aad329b8b948a5711d394fa8759cb80f009225441b4f2a02bd4d8e5f426c"}, + {file = "importlib_metadata-7.2.0.tar.gz", hash = "sha256:3ff4519071ed42740522d494d04819b666541b9752c43012f85afb2cc220fcc6"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "importlib-resources" version = "6.4.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -562,7 +540,6 @@ testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "p name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -574,7 +551,6 @@ files = [ name = "isort" version = "5.13.2" description = "A Python utility / library to sort Python imports." -category = "main" optional = false python-versions = ">=3.8.0" files = [ @@ -589,7 +565,6 @@ colors = ["colorama (>=0.4.6)"] name = "jinja2" version = "3.1.4" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -607,7 +582,6 @@ i18n = ["Babel (>=2.7)"] name = "joblib" version = "1.4.2" description = "Lightweight pipelining with Python functions" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -619,7 +593,6 @@ files = [ name = "kiwisolver" version = "1.4.5" description = "A fast implementation of the Cassowary constraint solver" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -733,7 +706,6 @@ files = [ name = "markupsafe" version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -803,7 +775,6 @@ files = [ name = "matplotlib" version = "3.9.0" description = "Python plotting package" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -857,7 +828,6 @@ dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setupto name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -869,7 +839,6 @@ files = [ name = "mda-xdrlib" version = "0.2.0" description = "Stand-alone XDRLIB module (from cpython 3.10.8)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -884,7 +853,6 @@ testing = ["pytest"] name = "mdanalysis" version = "2.7.0" description = "An object-oriented toolkit to analyze molecular dynamics trajectories." -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -933,7 +901,6 @@ extra-formats = ["chemfiles (>=0.10)", "gsd (>3.0.0)", "h5py (>=2.10)", "netCDF4 name = "mmtf-python" version = "1.1.3" description = "A decoding libary for the PDB mmtf format" -category = "main" optional = false python-versions = "*" files = [ @@ -952,7 +919,6 @@ test = ["coverage"] name = "mrcfile" version = "1.5.0" description = "MRC file I/O library" -category = "main" optional = false python-versions = "*" files = [ @@ -967,7 +933,6 @@ numpy = ">=1.16.0" name = "msgpack" version = "1.0.8" description = "MessagePack serializer" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1033,7 +998,6 @@ files = [ name = "nodeenv" version = "1.9.1" description = "Node.js virtual environment builder" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -1045,7 +1009,6 @@ files = [ name = "numpy" version = "1.26.4" description = "Fundamental package for array computing in Python" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -1091,7 +1054,6 @@ files = [ name = "packaging" version = "24.1" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1103,7 +1065,6 @@ files = [ name = "pandas" version = "2.2.2" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -1141,8 +1102,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.22.4", markers = "python_version < \"3.11\""}, - {version = ">=1.23.2", markers = "python_version == \"3.11\""}, {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -1177,7 +1138,6 @@ xml = ["lxml (>=4.9.2)"] name = "pillow" version = "10.3.0" description = "Python Imaging Library (Fork)" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1264,7 +1224,6 @@ xmp = ["defusedxml"] name = "platformdirs" version = "4.2.2" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1281,7 +1240,6 @@ type = ["mypy (>=1.8)"] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1295,21 +1253,19 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pycodestyle" -version = "2.11.1" +version = "2.12.0" description = "Python style guide checker" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, - {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, + {file = "pycodestyle-2.12.0-py2.py3-none-any.whl", hash = "sha256:949a39f6b86c3e1515ba1787c2022131d165a8ad271b11370a8819aa070269e4"}, + {file = "pycodestyle-2.12.0.tar.gz", hash = "sha256:442f950141b4f43df752dd303511ffded3a04c2b6fb7f65980574f0c31e6e79c"}, ] [[package]] name = "pydantic" version = "2.7.4" description = "Data validation using Python type hints" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1329,7 +1285,6 @@ email = ["email-validator (>=2.0.0)"] name = "pydantic-core" version = "2.18.4" description = "Core functionality for Pydantic validation and serialization" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1421,7 +1376,6 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" name = "pygments" version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1436,7 +1390,6 @@ windows-terminal = ["colorama (>=0.4.6)"] name = "pylint" version = "3.2.3" description = "python code static checker" -category = "main" optional = false python-versions = ">=3.8.0" files = [ @@ -1449,8 +1402,8 @@ astroid = ">=3.2.2,<=3.3.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" @@ -1467,7 +1420,6 @@ testutils = ["gitpython (>3)"] name = "pyparsing" version = "3.1.2" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = false python-versions = ">=3.6.8" files = [ @@ -1480,14 +1432,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyright" -version = "1.1.367" +version = "1.1.368" description = "Command line wrapper for pyright" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.367-py3-none-any.whl", hash = "sha256:89de6502ae02f1552d0c4df4b46867887a419849f379db617695ef9308cf01eb"}, - {file = "pyright-1.1.367.tar.gz", hash = "sha256:b1e5522ceb246ee6bc293a43d6d0162719d6467c1f1e9b81cee741aa11cdacbd"}, + {file = "pyright-1.1.368-py3-none-any.whl", hash = "sha256:4a86e34b61c755b43b367af7fbf927fc6466fff6b81a9dcea07d42416c640af3"}, + {file = "pyright-1.1.368.tar.gz", hash = "sha256:9b2aa48142d9d9fc9a6aedff743c76873cc4e615f3297cdbf893d5793f75b306"}, ] [package.dependencies] @@ -1501,7 +1452,6 @@ dev = ["twine (>=3.4.1)"] name = "pytest" version = "8.2.2" description = "pytest: simple powerful testing with Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1524,7 +1474,6 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments name = "pytest-cov" version = "5.0.0" description = "Pytest plugin for measuring coverage." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1543,7 +1492,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] name = "python-dateutil" version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -1558,7 +1506,6 @@ six = ">=1.5" name = "pytz" version = "2024.1" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -1570,7 +1517,6 @@ files = [ name = "rdkit" version = "2023.9.6" description = "A collection of chemoinformatics and machine-learning software written in C++ and Python" -category = "main" optional = false python-versions = "*" files = [ @@ -1609,7 +1555,6 @@ Pillow = "*" name = "requests" version = "2.32.3" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1631,7 +1576,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "scipy" version = "1.13.1" description = "Fundamental algorithms for scientific computing in Python" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -1674,7 +1618,6 @@ test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "po name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -1686,7 +1629,6 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "main" optional = false python-versions = "*" files = [ @@ -1698,7 +1640,6 @@ files = [ name = "sphinx" version = "7.3.7" description = "Python documentation generator" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -1735,7 +1676,6 @@ test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=6.0)", "setuptools name = "sphinx-rtd-theme" version = "2.0.0" description = "Read the Docs theme for Sphinx" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1755,7 +1695,6 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] name = "sphinxcontrib-applehelp" version = "1.0.8" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -1772,7 +1711,6 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.6" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -1789,7 +1727,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.5" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -1806,7 +1743,6 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jquery" version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" -category = "main" optional = false python-versions = ">=2.7" files = [ @@ -1821,7 +1757,6 @@ Sphinx = ">=1.8" name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1836,7 +1771,6 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.7" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -1853,7 +1787,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.10" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -1870,7 +1803,6 @@ test = ["pytest"] name = "threadpoolctl" version = "3.5.0" description = "threadpoolctl" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1882,7 +1814,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1894,7 +1825,6 @@ files = [ name = "tomlkit" version = "0.12.5" description = "Style preserving TOML library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1906,7 +1836,6 @@ files = [ name = "tqdm" version = "4.66.4" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1927,7 +1856,6 @@ telegram = ["requests"] name = "typing-extensions" version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1939,7 +1867,6 @@ files = [ name = "tzdata" version = "2024.1" description = "Provider of IANA time zone data" -category = "main" optional = false python-versions = ">=2" files = [ @@ -1949,14 +1876,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.1" +version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, ] [package.extras] @@ -1969,7 +1895,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "zipp" version = "3.19.2" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1983,5 +1908,5 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" -python-versions = ">3.9 <=3.12" -content-hash = "de4abc3590ee6ed5010ba427f60d81657133ea3e48275e48370cc40f47d8bc64" +python-versions = "^3.9" +content-hash = "d5c6b0f166570820a27ebe0b2aa6690a12f291f5d7602522751e4f911bacbc7e" diff --git a/pyproject.toml b/pyproject.toml index a6b1dde..d4a1b93 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ license = "GPL-3.0" readme = "README.md" [tool.poetry.dependencies] -python = ">3.9 <=3.12" +python = "^3.9" #numpy = "1.26.1" mdanalysis = "^2.7" click = "^8.1.7"