From f899a972f334048b3bdd970a5170162ce2a8429c Mon Sep 17 00:00:00 2001 From: Josh Mitchell Date: Tue, 31 May 2022 13:56:09 +1000 Subject: [PATCH 1/6] collections.MutableMapping -> collections.abc.MutableMapping to fix Python 3.10 --- chemper/chemper_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chemper/chemper_utils.py b/chemper/chemper_utils.py index e7aa1b8..a91a162 100644 --- a/chemper/chemper_utils.py +++ b/chemper/chemper_utils.py @@ -6,7 +6,7 @@ """ import os -import collections +from collections.abc import MutableMapping def get_data_path(relative_path, package='chemper'): """ @@ -120,7 +120,7 @@ def is_valid_smirks(smirks): """ -class TransformedDict(collections.MutableMapping): +class TransformedDict(MutableMapping): """A dictionary that applies an arbitrary key-altering function before accessing the keys""" From 2896044e53af2ae2ce5df289c5e0e7bc48af76a5 Mon Sep 17 00:00:00 2001 From: "Matthew W. Thompson" Date: Tue, 31 May 2022 07:23:24 -0500 Subject: [PATCH 2/6] Migrate from Travis CI to GitHub Actions --- .github/workflows/ci.yaml | 65 ++++++++++++++++++++++++++++++++++ .travis.yml => .travis.yml.bak | 0 2 files changed, 65 insertions(+) create mode 100644 .github/workflows/ci.yaml rename .travis.yml => .travis.yml.bak (100%) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..6ceca00 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,65 @@ +name: CI + +on: + push: + branches: + - "main" + - "master" + pull_request: + branches: + - "main" + - "master" + +defaults: + run: + shell: bash -l {0} + +jobs: + test: + name: ${{ matrix.os }}, 🐍=${{ matrix.python-version }}, OpenEye=${{ matrix.openeye }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [macOS-latest, ubuntu-latest] + openeye: ["false"] + python-version: ["3.8", "3.9", "3.10"] + + steps: + - uses: actions/checkout@v2 + + - uses: conda-incubator/setup-miniconda@v2 + with: + python-version: ${{ matrix.python-version }} + activate-environment: test + mamba-version: "*" + channels: conda-forge,defaults + channel-priority: true + environment-file: devtools/conda-envs/test_env_rdk.yaml + auto-activate-base: false + + - name: Additional info about the build + shell: bash + run: | + uname -a + df -h + ulimit -a + + - name: Environment Information + run: | + conda info + conda list + + - name: Install package + run: | + python setup.py develop --no-deps + + - name: Run tests + run: | + py.test -vv -s --nbval-lax --cov=chemper/ --cov-report=xml chemper/tests/ + + - name: Codecov + uses: codecov/codecov-action@v3 + with: + file: ./coverage.xml + fail_ci_if_error: false diff --git a/.travis.yml b/.travis.yml.bak similarity index 100% rename from .travis.yml rename to .travis.yml.bak From 24400dddb7b0582bba9287830b5a1993407fb78e Mon Sep 17 00:00:00 2001 From: "Matthew W. Thompson" Date: Tue, 31 May 2022 07:27:30 -0500 Subject: [PATCH 3/6] Add networkx to test environment --- .github/workflows/ci.yaml | 4 ++-- devtools/conda-envs/test_env_rdk.yaml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6ceca00..817dfcf 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -21,9 +21,9 @@ jobs: strategy: fail-fast: false matrix: - os: [macOS-latest, ubuntu-latest] + os: [ubuntu-latest] openeye: ["false"] - python-version: ["3.8", "3.9", "3.10"] + python-version: ["3.8"] steps: - uses: actions/checkout@v2 diff --git a/devtools/conda-envs/test_env_rdk.yaml b/devtools/conda-envs/test_env_rdk.yaml index 40a45f1..f611470 100644 --- a/devtools/conda-envs/test_env_rdk.yaml +++ b/devtools/conda-envs/test_env_rdk.yaml @@ -10,6 +10,7 @@ dependencies: - rdkit - numpy + - networkx # Testing - pytest From 3b0c43fe373a4500d07b12d13919cbc1fc86462c Mon Sep 17 00:00:00 2001 From: "Matthew W. Thompson" Date: Tue, 31 May 2022 07:33:02 -0500 Subject: [PATCH 4/6] Revert debug code --- .github/workflows/ci.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 817dfcf..6ceca00 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -21,9 +21,9 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest] + os: [macOS-latest, ubuntu-latest] openeye: ["false"] - python-version: ["3.8"] + python-version: ["3.8", "3.9", "3.10"] steps: - uses: actions/checkout@v2 From 592755ec26c6c0129f3daf8b5ab7a65fed0cec88 Mon Sep 17 00:00:00 2001 From: "Matthew W. Thompson" Date: Tue, 31 May 2022 10:43:23 -0500 Subject: [PATCH 5/6] Remove old scripts/tools --- .travis.yml.bak | 93 -------------------------- README.md | 4 -- appveyor.yml | 46 ------------- devtools/README.md | 15 ----- devtools/conda-recipe/bld.bat | 3 - devtools/conda-recipe/build.sh | 5 -- devtools/conda-recipe/meta.yaml | 29 -------- devtools/scripts/create_conda_env.py | 95 --------------------------- devtools/travis-ci/before_install.sh | 41 ------------ oe_license.txt.enc | Bin 6416 -> 0 bytes 10 files changed, 331 deletions(-) delete mode 100644 .travis.yml.bak delete mode 100644 appveyor.yml delete mode 100644 devtools/conda-recipe/bld.bat delete mode 100755 devtools/conda-recipe/build.sh delete mode 100644 devtools/conda-recipe/meta.yaml delete mode 100644 devtools/scripts/create_conda_env.py delete mode 100755 devtools/travis-ci/before_install.sh delete mode 100644 oe_license.txt.enc diff --git a/.travis.yml.bak b/.travis.yml.bak deleted file mode 100644 index 8ca1ccf..0000000 --- a/.travis.yml.bak +++ /dev/null @@ -1,93 +0,0 @@ -# After changing this file, check it on: -# http://lint.travis-ci.org/ - -language: python - -branches: - only: - - master - -matrix: - include: - # Test osx with RDK without OE - - os: osx - language: generic - python: 3.6 - env: PYTHON_VER=3.6 RDK=true OE=false - - # Test osx with OE and without RDK - - os: osx - language: generic - python: 3.6 - env: PYTHON_VER=3.6 RDK=false OE=true - - # test one python 3.7 per platform (RDK not OE due to conda) - - os: osx - language: generic - python: 3.7 - env: PYTHON_VER=3.7 RDK=true OE=false - - os: linux - language: generic - python: 3.7 - env: PYTHON_VER=3.7 RDK=true OE=false - - # Test linux with RDK without OE - - os: linux - python: 3.6 - sudo: required - env: PYTHON_VER=3.6 RDK=true OE=false - - # Test linux with OE and no RDK - - os: linux - sudo: required - python: 3.6 - env: PYTHON_VER=3.6 RDK=false OE=true - - # Test both OE and RDK installed - - os: linux - sudo: required - python: 3.6 - env: PYTHON_VER=3.6 RDK=true OE=true - -env: - global: - - ORGNAME="mobleylab" - - PACKAGENAME="chemper" - - OE_LICENSE="$HOME/oe_license.txt" - - -before_install: - # Additional info about the build - - uname -a - - df -h - - ulimit -a - - # Install the Python environment - - source devtools/travis-ci/before_install.sh - - python -V - - # Unpack encrypted OE license file - - if [ "$TRAVIS_SECURE_ENV_VARS" == true ]; then openssl aes-256-cbc -K $encrypted_627cdd279400_key -iv $encrypted_627cdd279400_iv -in oe_license.txt.enc -out $OE_LICENSE -d; fi - - if [ "$TRAVIS_SECURE_ENV_VARS" == false ]; then echo "OpenEye license will not be installed in forks."; fi - -install: - # Creates environment for the given python version - - if [[ "$OE" == true && "$RDK" == false ]]; then python devtools/scripts/create_conda_env.py -n=test -p=$PYTHON_VER devtools/conda-envs/test_env_oe.yaml ; fi - - if [[ "$OE" == false && "$RDK" == true ]]; then python devtools/scripts/create_conda_env.py -n=test -p=$PYTHON_VER devtools/conda-envs/test_env_rdk.yaml ; fi - - if [[ "$OE" == true && "$RDK" == true ]]; then python devtools/scripts/create_conda_env.py -n=test -p=$PYTHON_VER devtools/conda-envs/test_env_both.yaml ; fi - - conda activate test - - - conda build --python=$PYTHON_VER devtools/conda-recipe - - conda install --use-local chemper - - conda list - - if [[ "$OE" == true ]]; then python -c "import openeye; print(openeye.__version__)"; fi - -script: - - py.test -vv -s --nbval-lax --cov=chemper/ chemper/tests/ - -notifications: - email: false - -after_success: - - codecov - diff --git a/README.md b/README.md index cf835fd..3b8bae9 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,5 @@ # -[![Travis build](https://img.shields.io/travis/MobleyLab/chemper/master.svg?logo=linux&logoColor=white)](https://travis-ci.org/MobleyLab/chemper) -[![Travis build](https://img.shields.io/travis/MobleyLab/chemper/master.svg?logo=apple&logoColor=white)](https://travis-ci.org/MobleyLab/chemper) -[![AppVeyor build](https://img.shields.io/travis/MobleyLab/chemper/master.svg?logo=windows&logoColor=white)](https://ci.appveyor.com/project/bannanc/chemper) - [![Documentation Status](https://readthedocs.org/projects/chemper/badge/?version=latest)](http://chemper.readthedocs.io/en/latest/?badge=latest) [![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/MobleyLab/chemper.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/MobleyLab/chemper/context:python) [![codecov](https://codecov.io/gh/MobleyLab/chemper/branch/master/graph/badge.svg)](https://codecov.io/gh/MobleyLab/chemper) diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 84352cc..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,46 +0,0 @@ -environment: - - matrix: - # just try to make something work - - PYTHON: "C:\\Miniconda36-x64" - PYTHON_VERSION: "3.6" - PYTHON_ARCH: "64" - -install: - # Make sure pip is around - - python -m ensurepip - - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" - - # Add conda-forge channel - - conda config --add channels conda-forge - - - # Always run commands without asking - - conda config --set always_yes yes - - # Try to update conda first to avoid odd dependency clashes - - conda update --all - - conda install conda-build - - # Create test environment for package - # - if %OE% == true if %RDK% == false (python devtools\\scripts\\create_conda_env.py -n=test -p=%PYTHON_VERSION% devtools\\conda-envs\\test_env_oe.yaml) - # - python devtools\\scripts\\create_conda_env.py -n=test -p=%PYTHON_VERSION% devtools\\conda-envs\\test_env_both.yaml - - conda create -n test python=%PYTHON_VERSION% pip pytest pytest-cov - - # Activate the test environment - - activate test - - pip install codecov - - conda install -c rdkit rdkit - - # Build and install package - - conda build -- quiet python=%PYTHON_VERSION% devtools\\conda-recipe - - conda install --use-local chemper - - -build: false - -test_script: - - pytest -v --cov=chemper chemper\\tests - -on_success: - - codecov diff --git a/devtools/README.md b/devtools/README.md index 7c8ad65..353b11a 100644 --- a/devtools/README.md +++ b/devtools/README.md @@ -6,15 +6,6 @@ conda installation, and other development tools not directly related to the codi ## Manifest -### Continuous Integration - -You should test your code, but do not feel compelled to use these specific programs. You also may not need Unix and -Windows testing if you only plan to deploy on specific platforms. These are just to help you get started - -* `travis-ci`: Linux and OSX based testing through [Travis-CI](https://about.travis-ci.com/) - * `before_install.sh`: Pip/Miniconda pre-package installation script for Travis -* `appveyor`: Windows based testing through [AppVeyor](https://www.appveyor.com/) (there are no files directly related to this) - ### Conda Environment: This directory contains the files to setup the Conda environment for testing purposes @@ -22,12 +13,6 @@ This directory contains the files to setup the Conda environment for testing pur * `conda-envs`: directory containing the YAML file(s) which fully describe Conda Environments, their dependencies, and those dependency provenance's * `test_env.yaml`: Simple test environment file with base dependencies. Channels are not specified here and therefore respect global Conda configuration -### Additional Scripts: - -This directory contains OS agnostic helper scripts which don't fall in any of the previous categories -* `scripts` - * `create_conda_env.py`: Helper program for spinning up new conda environments based on a starter file with Python Version and Env. Name command-line options - ## How to contribute changes - Clone the repository if you have write access to the main repo, fork the repository if you are a collaborator. diff --git a/devtools/conda-recipe/bld.bat b/devtools/conda-recipe/bld.bat deleted file mode 100644 index b845298..0000000 --- a/devtools/conda-recipe/bld.bat +++ /dev/null @@ -1,3 +0,0 @@ -# Build the python package, don't let setuptools/pip try to get packages -pip install . --no-deps -if errorlevel 1 exit 1 diff --git a/devtools/conda-recipe/build.sh b/devtools/conda-recipe/build.sh deleted file mode 100755 index 0f9e25a..0000000 --- a/devtools/conda-recipe/build.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -# Build the python package, don't let setuptools/pip try to get packages -# $PYTHON setup.py develop --no-deps -pip install . --no-deps diff --git a/devtools/conda-recipe/meta.yaml b/devtools/conda-recipe/meta.yaml deleted file mode 100644 index 7fff013..0000000 --- a/devtools/conda-recipe/meta.yaml +++ /dev/null @@ -1,29 +0,0 @@ -package: - name: chemper - version: 0.0.0 - -source: - path: ../.. - -build: - number: 0 - -requirements: - host: - - python - - setuptools - - run: - - python - - numpy - - networkx - -test: - requires: - - pytest - imports: - - chemper - -about: - home: https://github.com/MobleyLab/chemper - license: MIT License diff --git a/devtools/scripts/create_conda_env.py b/devtools/scripts/create_conda_env.py deleted file mode 100644 index b51adc8..0000000 --- a/devtools/scripts/create_conda_env.py +++ /dev/null @@ -1,95 +0,0 @@ -import argparse -import os -import re -import glob -import shutil -import subprocess as sp -from tempfile import TemporaryDirectory -from contextlib import contextmanager -# YAML imports -try: - import yaml # PyYAML - loader = yaml.load -except ImportError: - try: - import ruamel_yaml as yaml # Ruamel YAML - except ImportError: - try: - # Load Ruamel YAML from the base conda environment - from importlib import util as import_util - CONDA_BIN = os.path.dirname(os.environ['CONDA_EXE']) - ruamel_yaml_path = glob.glob(os.path.join(CONDA_BIN, '..', - 'lib', 'python*.*', 'site-packages', - 'ruamel_yaml', '__init__.py'))[0] - # Based on importlib example, but only needs to load_module since its the whole package, not just - # a module - spec = import_util.spec_from_file_location('ruamel_yaml', ruamel_yaml_path) - yaml = spec.loader.load_module() - except (KeyError, ImportError, IndexError): - raise ImportError("No YAML parser could be found in this or the conda environment. " - "Could not find PyYAML or Ruamel YAML in the current environment, " - "AND could not find Ruamel YAML in the base conda environment through CONDA_EXE path. " - "Environment not created!") - loader = yaml.YAML(typ="safe").load # typ="safe" avoids odd typing on output - - -@contextmanager -def temp_cd(): - """Temporary CD Helper""" - cwd = os.getcwd() - with TemporaryDirectory() as td: - try: - os.chdir(td) - yield - finally: - os.chdir(cwd) - - -# Args -parser = argparse.ArgumentParser(description='Creates a conda environment from file for a given Python version.') -parser.add_argument('-n', '--name', type=str, - help='The name of the created Python environment') -parser.add_argument('-p', '--python', type=str, - help='The version of the created Python environment') -parser.add_argument('conda_file', - help='The file for the created Python environment') - -args = parser.parse_args() - -# Open the base file -with open(args.conda_file, "r") as handle: - yaml_script = loader(handle.read()) - -python_replacement_string = "python {}*".format(args.python) - -try: - for dep_index, dep_value in enumerate(yaml_script['dependencies']): - if re.match('python([ ><=*]+[0-9.*]*)?$', dep_value): # Match explicitly 'python' and its formats - yaml_script['dependencies'].pop(dep_index) - break # Making the assumption there is only one Python entry, also avoids need to enumerate in reverse -except (KeyError, TypeError): - # Case of no dependencies key, or dependencies: None - yaml_script['dependencies'] = [] -finally: - # Ensure the python version is added in. Even if the code does not need it, we assume the env does - yaml_script['dependencies'].insert(0, python_replacement_string) - -# Figure out conda path -if "CONDA_EXE" in os.environ: - conda_path = os.environ["CONDA_EXE"] -else: - conda_path = shutil.which("conda") -if conda_path is None: - raise RuntimeError("Could not find a conda binary in CONDA_EXE variable or in executable search path") - -print("CONDA ENV NAME {}".format(args.name)) -print("PYTHON VERSION {}".format(args.python)) -print("CONDA FILE NAME {}".format(args.conda_file)) -print("CONDA PATH {}".format(conda_path)) - -# Write to a temp directory which will always be cleaned up -with temp_cd(): - temp_file_name = "temp_script.yaml" - with open(temp_file_name, 'w') as f: - f.write(yaml.dump(yaml_script)) - sp.call("{} env create -n {} -f {}".format(conda_path, args.name, temp_file_name), shell=True) diff --git a/devtools/travis-ci/before_install.sh b/devtools/travis-ci/before_install.sh deleted file mode 100755 index b701fa1..0000000 --- a/devtools/travis-ci/before_install.sh +++ /dev/null @@ -1,41 +0,0 @@ -# Temporarily change directory to $HOME to install software -pushd . -cd $HOME -# Make sure some level of pip is installed -python -m ensurepip - -# Install Miniconda -if [ "$TRAVIS_OS_NAME" == "osx" ]; then - # Make OSX md5 mimic md5sum from linux, alias does not work - md5sum () { - command md5 -r "$@" - } - MINICONDA=Miniconda3-latest-MacOSX-x86_64.sh -else - MINICONDA=Miniconda3-latest-Linux-x86_64.sh -fi -MINICONDA_HOME=$HOME/miniconda -MINICONDA_MD5=$(wget -qO- https://repo.anaconda.com/miniconda/ | grep -A3 $MINICONDA | sed -n '4p' | sed -n 's/ *\(.*\)<\/td> */\1/p') -wget -q https://repo.anaconda.com/miniconda/$MINICONDA -if [[ $MINICONDA_MD5 != $(md5sum $MINICONDA | cut -d ' ' -f 1) ]]; then - echo "Miniconda MD5 mismatch" - exit 1 -fi -bash $MINICONDA -b -p $MINICONDA_HOME - -# Configure miniconda -export PIP_ARGS="-U" -# New to conda >=4.4 -echo ". $MINICONDA_HOME/etc/profile.d/conda.sh" >> ~/.bashrc # Source the profile.d file -echo "conda activate" >> ~/.bashrc # Activate conda -source ~/.bashrc # source file to get new commands -#export PATH=$MINICONDA_HOME/bin:$PATH # Old way, should not be needed anymore - -conda config --add channels conda-forge - -conda config --set always_yes yes -conda install conda conda-build jinja2 anaconda-client -conda update --quiet --all - -# Restore original directory -popd diff --git a/oe_license.txt.enc b/oe_license.txt.enc deleted file mode 100644 index 12335eb86612d535947508a89bcb962c7b01a883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6416 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 From e65216502f8df37d0fa9faf0e8011607a4458d21 Mon Sep 17 00:00:00 2001 From: "Matthew W. Thompson" Date: Tue, 31 May 2022 10:45:54 -0500 Subject: [PATCH 6/6] Update README with new installation instructions --- README.md | 48 +++++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 3b8bae9..e709e21 100644 --- a/README.md +++ b/README.md @@ -21,45 +21,41 @@ practical use in force field parameterization [2]. For a more extensive history and explanation, see our [preprint](http://doi.org/10.26434/chemrxiv.8304578.v1) [3]. -## Prerequisites - -We test with Python 3.6 and 3.7 and expect any version above 3.5 to behave well. +## Installation -This is a python tool kit with a few dependencies. We recommend installing -[miniconda](http://conda.pydata.org/miniconda.html). Then you can create an -environment with the following commands: +Chemper is available via `conda-forge`: -```bash -conda create -n [my env name] python=3.6 numpy networkx pytest -source activate [my env name] +```shell +conda install -c conda-forge chemper ``` This command will install all dependencies besides a toolkit for cheminformatics or storing of molecule -information. We seek to keep this tool independent of cheminformatics toolkit, but currently only support -[RDKit](http://www.rdkit.org/docs/index.html) and [OpenEye Toolkits](https://www.eyesopen.com/). -If you wish to add support please feel free to submit a pull request. -Make sure one of these tool kits is installed in your environment before installing chemper. - -#### RDKit environment +information. Also install [RDKit](http://www.rdkit.org/docs/Install.html) and/or +[OpenEye toolkits](https://docs.eyesopen.com/toolkits/python/quickstart-python/linuxosx.html) by +running: -Conda installation according to [RDKit documentation](http://www.rdkit.org/docs/Install.html): ```bash -conda install -c rdkit rdkit +conda install -c conda-forge rdkit ``` -#### OpenEye environment -Conda installation according to [OpenEye documentation](https://docs.eyesopen.com/toolkits/python/quickstart-python/linuxosx.html) +and/or + ```bash conda install -c openeye openeye-toolkits ``` -## Installation -Hopefully chemper will be conda installable in the near future, but for now the best option -is to download or clone this repository and then install `chemper` from inside the `chemper` directory with: -```bash -pip install -e . -``` +## Supported Python versions + +We test with whatever Python versions are found in `.github/workflows/ci.yaml`. Chemper may function +on some older and/or newer versions as well. + +## Supported chemiformatics toolkits + +We seek to keep this tool independent of cheminformatics toolkit, but currently only support +[RDKit](http://www.rdkit.org/docs/index.html) and [OpenEye Toolkits](https://www.eyesopen.com/). +If you wish to add support please feel free to submit a pull request. +Make sure one of these toolkits is installed in your environment before installing chemper. # Documentation @@ -151,6 +147,8 @@ for automated chemical perception. However, the API is still in flux and nothing This release matches the work published in our [preprint](http://doi.org/10.26434/chemrxiv.8304578.v1). While the code is stable and there are tests showing how it should work the science it represents is still in the early stages and big changes to the algorithms and API should be expected in future releases. +### Version 1.0.1 +This release includes non-behavior-breaking changes to support distribution on Python 3.10. ## Contributors