From 597409d2a942a4db64cd1954620a395fd8498a3f Mon Sep 17 00:00:00 2001 From: tjkessler Date: Tue, 1 Aug 2023 23:28:45 -0400 Subject: [PATCH 1/9] Remove cache --- alvadescpy/__pycache__/__init__.cpython-35.pyc | Bin 286 -> 0 bytes alvadescpy/__pycache__/functions.cpython-35.pyc | Bin 1139 -> 0 bytes alvadescpy/__pycache__/wrapper.cpython-35.pyc | Bin 5207 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 alvadescpy/__pycache__/__init__.cpython-35.pyc delete mode 100644 alvadescpy/__pycache__/functions.cpython-35.pyc delete mode 100644 alvadescpy/__pycache__/wrapper.cpython-35.pyc diff --git a/alvadescpy/__pycache__/__init__.cpython-35.pyc b/alvadescpy/__pycache__/__init__.cpython-35.pyc deleted file mode 100644 index 9ce713613564e9270f18dce06d343b90b31569f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmYjL&1%9x5T4BsNJWrh@dbK`hmiJIN-4BwDR>KkA($1HZnDels*P{dSMu7EZy-H6 zD_A6VP|T&uKn=nV#jl=X((J}vTxyqITcd3#;9eZHgGT1gZ>C@230 zt4+7`%5;w6Fd8CmB{?P#zkw3wF6sC2?WvkezcciSi*-%13L@`(_@lqT@Pq9uMAa#e WnA`p^cy3Lz(eg#Gj0;+0F&1a6j!WkN diff --git a/alvadescpy/__pycache__/functions.cpython-35.pyc b/alvadescpy/__pycache__/functions.cpython-35.pyc deleted file mode 100644 index c7f34c1215f35903851559abfa0dd7228819b814..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1139 zcma)5-D(su6h1Svf1O&XMG-HA+}VLe1n<@&mbQYh7U?d%SQd8ENw$V&XNDxRGSIvF z0KSH=;G^W$E8jr8@+8x4XTb}@j7NEm(r zAh!%)5Py3uYF$EKAY41I$s$*Tl1s7TSxj)Y4yDcbLQCVV{m`F|XX6?-fMi=j?)Xqni|DPM5ZC%kbKMakcy1PDcf$qCW z>(ui_qa-yX?Ng|+&xz2)L+NiI#G&KZcIVQ|ZCBKtQ$3tEV0y~Umt0-VMxU`zQ}+^%al}7Wo^@?4s_CN4QX}$Azbq>I? zfJf>f($i$yc1%@ZSCtdn`0kMvl?P=b9247e#ZfJ%&~oXhwr5>4y&I3SL3Z4A?_im; UQu4PhM;#;C4R^!6U@wY-zgNIFbpQYW diff --git a/alvadescpy/__pycache__/wrapper.cpython-35.pyc b/alvadescpy/__pycache__/wrapper.cpython-35.pyc deleted file mode 100644 index be6ebba649bffe10625456c53005d0f1c2f80309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5207 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 From 1c4c9af35f4361a2f77b5c3c5658db8bee03c224 Mon Sep 17 00:00:00 2001 From: tjkessler Date: Tue, 1 Aug 2023 23:29:19 -0400 Subject: [PATCH 2/9] removed ''test'' --- tests/test.py | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 tests/test.py diff --git a/tests/test.py b/tests/test.py deleted file mode 100644 index 37fb7d6..0000000 --- a/tests/test.py +++ /dev/null @@ -1,9 +0,0 @@ -from alvadescpy import smiles_to_descriptors - - -if __name__ == '__main__': - - print(smiles_to_descriptors('CCCOC', descriptors=['MW', 'AMW'], labels=True)) - res = smiles_to_descriptors(['CCCC', 'CCOCC', 'CCCCC'], descriptors='ALL', labels=True) - print(len(res)) - print(len(res[0])) From 86e779b2d4c2c886ea34b11cf9c2ce506e600f99 Mon Sep 17 00:00:00 2001 From: tjkessler Date: Tue, 1 Aug 2023 23:33:26 -0400 Subject: [PATCH 3/9] pycodestyle; remove unused imports --- alvadescpy/wrapper.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/alvadescpy/wrapper.py b/alvadescpy/wrapper.py index 6c12f88..b860749 100644 --- a/alvadescpy/wrapper.py +++ b/alvadescpy/wrapper.py @@ -9,11 +9,9 @@ # # stdlib. imports -from subprocess import check_output, PIPE, Popen, call -from csv import writer, QUOTE_ALL +from subprocess import PIPE, Popen from typing import TypeVar import platform -from os.path import realpath # path to alvaDesc command line interface executable CONFIG = { @@ -21,9 +19,11 @@ } plt = platform.system() if plt == 'Windows': - CONFIG['alvadesc_path'] = 'C:\\Program Files\\Alvascience\\alvaDesc\\alvaDescCLI.exe' + CONFIG['alvadesc_path'] = 'C:\\Program Files\\Alvascience\\alvaDesc\\\ + alvaDescCLI.exe' elif plt == 'Darwin': - CONFIG['alvadesc_path'] = '/Applications/alvaDesc.app/Contents/MacOS/alvaDescCLI' + CONFIG['alvadesc_path'] = '/Applications/alvaDesc.app/Contents/MacOS/\ + alvaDescCLI' elif plt == 'Linux': CONFIG['alvadesc_path'] = '/usr/bin/alvaDescCLI' else: @@ -54,12 +54,15 @@ def _sub_call(command: str) -> list: return p.communicate()[0].decode('utf-8') -def alvadesc(script: str=None, ismiles: str=None, input_file: str=None, - inputtype: str=None, descriptors: _DESC=None, labels: bool=False, - ecfp: bool=False, pfp: bool=False, fpsize: int=1024, fpmin: int=0, - fpmax: int=2, count: bool=True, bits: int=2, fpoptions: str=None, - maccsfp: bool=False, output: str=None, threads: int=None) -> list: - ''' alvadesc: calls alvaDesc's command line interface; supports all arguments +def alvadesc(script: str = None, ismiles: str = None, input_file: str = None, + inputtype: str = None, descriptors: _DESC = None, + labels: bool = False, ecfp: bool = False, pfp: bool = False, + fpsize: int = 1024, fpmin: int = 0, fpmax: int = 2, + count: bool = True, bits: int = 2, fpoptions: str = None, + maccsfp: bool = False, output: str = None, + threads: int = None) -> list: + ''' alvadesc: calls alvaDesc's command line interface; supports all + arguments Args: script (str): path to script file containing all available options; if From c08e49c16da5631e8a5ae1a1799046fc358082a6 Mon Sep 17 00:00:00 2001 From: tjkessler Date: Tue, 1 Aug 2023 23:38:50 -0400 Subject: [PATCH 4/9] More descriptive TypeVars --- alvadescpy/functions.py | 15 +++++++++------ alvadescpy/wrapper.py | 4 ++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/alvadescpy/functions.py b/alvadescpy/functions.py index e5e3332..aa8ccbb 100644 --- a/alvadescpy/functions.py +++ b/alvadescpy/functions.py @@ -15,12 +15,13 @@ from alvadescpy import alvadesc # custom argument and return variables -_DESC = TypeVar('_DESC', str, list) -_RET_VAL = TypeVar('_RET_VAL', dict, list) +str_or_list = TypeVar('str_or_list', str, list) +list_or_dict = TypeVar('list_or_dict', dict, list) -def smiles_to_descriptors(smiles: str, descriptors: _DESC='ALL', - labels: bool=True) -> _RET_VAL: +def smiles_to_descriptors(smiles: str_or_list, + descriptors: str_or_list = 'ALL', + labels: bool = True) -> list_or_dict: ''' smiles_to_descriptors: returns molecular descriptors for a given molecule (represented by its SMILES string) @@ -37,6 +38,8 @@ def smiles_to_descriptors(smiles: str, descriptors: _DESC='ALL', ''' if type(smiles) == list: - return [alvadesc(ismiles=smi, descriptors=descriptors, labels=labels)[0] - for smi in smiles] + return [ + alvadesc(ismiles=smi, descriptors=descriptors, labels=labels)[0] + for smi in smiles + ] return alvadesc(ismiles=smiles, descriptors=descriptors, labels=labels)[0] diff --git a/alvadescpy/wrapper.py b/alvadescpy/wrapper.py index b860749..0bce7d8 100644 --- a/alvadescpy/wrapper.py +++ b/alvadescpy/wrapper.py @@ -30,7 +30,7 @@ raise RuntimeError('Unknown/unsupported operating system: {}'.format(plt)) # custom argument variable (either str or list) -_DESC = TypeVar('_DESC', str, list) +str_or_list = TypeVar('str_or_list', str, list) def _sub_call(command: str) -> list: @@ -55,7 +55,7 @@ def _sub_call(command: str) -> list: def alvadesc(script: str = None, ismiles: str = None, input_file: str = None, - inputtype: str = None, descriptors: _DESC = None, + inputtype: str = None, descriptors: str_or_list = None, labels: bool = False, ecfp: bool = False, pfp: bool = False, fpsize: int = 1024, fpmin: int = 0, fpmax: int = 2, count: bool = True, bits: int = 2, fpoptions: str = None, From e41c6ea0a121f5cce069e633bb8c4590fcd2a3fe Mon Sep 17 00:00:00 2001 From: tjkessler Date: Tue, 1 Aug 2023 23:41:37 -0400 Subject: [PATCH 5/9] setup.py -> pyproject.toml --- pyproject.toml | 22 ++++++++++++++++++++++ setup.py | 14 -------------- 2 files changed, 22 insertions(+), 14 deletions(-) create mode 100644 pyproject.toml delete mode 100644 setup.py diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..aa12a29 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0"] +build-backend = "setuptools.build_meta" + +[project] +name = "alvadescpy" +version = "0.1.3" +authors = [ + { name="Travis Kessler", email="travis.j.kessler@gmail.com" }, +] +description = "Python wrapper for alvaDesc software" +readme = "README.md" +requires-python = ">=3.11" +classifiers = [ + "Programming Language :: Python :: 3.11", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", +] + +[project.urls] +"Homepage" = "https://github.com/ecrl/alvadescpy" +"Bug Tracker" = "https://github.com/ecrl/alvadescpy/issues" \ No newline at end of file diff --git a/setup.py b/setup.py deleted file mode 100644 index 6898ca7..0000000 --- a/setup.py +++ /dev/null @@ -1,14 +0,0 @@ -from setuptools import setup, find_packages - -setup( - name='alvadescpy', - version='0.1.2', - description='Python wrapper for alvaDesc software', - url='http://github.com/tjkessler/ecnet', - author='Travis Kessler', - author_email='travis.j.kessler@gmail.com,', - license='MIT', - packages=['alvadescpy'], - install_requires=[], - zip_safe=False -) From 8ee7ab89bd10af596796b2cf05287d09cbeb4577 Mon Sep 17 00:00:00 2001 From: tjkessler Date: Tue, 1 Aug 2023 23:42:12 -0400 Subject: [PATCH 6/9] Version now pulls from 'pkg_resources' --- alvadescpy/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/alvadescpy/__init__.py b/alvadescpy/__init__.py index da6901c..5044a72 100644 --- a/alvadescpy/__init__.py +++ b/alvadescpy/__init__.py @@ -1,4 +1,5 @@ from alvadescpy.wrapper import alvadesc from alvadescpy.functions import smiles_to_descriptors from alvadescpy.wrapper import CONFIG -__version__ = '0.1.2' +import pkg_resources +__version__ = pkg_resources.get_distribution('alvadescpy') From 6b94da91ab6cabf6cef97379addf8f96885de734 Mon Sep 17 00:00:00 2001 From: tjkessler Date: Tue, 1 Aug 2023 23:45:10 -0400 Subject: [PATCH 7/9] Add GitHub workflow for PyPI publishing --- .github/workflows/publish_to_pypi.yml | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .github/workflows/publish_to_pypi.yml diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml new file mode 100644 index 0000000..4495f7f --- /dev/null +++ b/.github/workflows/publish_to_pypi.yml @@ -0,0 +1,30 @@ +name: Upload new alvaDescPy version to PyPI + +on: + release: + types: [published] + +permissions: + contents: read + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up Python 3.11 + uses: actions/setup-python@v3 + with: + python-version: '3.11' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build + - name: Build package + run: python -m build + - name: Publish package to PyPI + uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file From b2c13b5d93a287eec89288ab1d83c8e7b97ad106 Mon Sep 17 00:00:00 2001 From: tjkessler Date: Tue, 1 Aug 2023 23:48:35 -0400 Subject: [PATCH 8/9] Fix to spacing --- alvadescpy/wrapper.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/alvadescpy/wrapper.py b/alvadescpy/wrapper.py index 0bce7d8..d837d41 100644 --- a/alvadescpy/wrapper.py +++ b/alvadescpy/wrapper.py @@ -20,10 +20,10 @@ plt = platform.system() if plt == 'Windows': CONFIG['alvadesc_path'] = 'C:\\Program Files\\Alvascience\\alvaDesc\\\ - alvaDescCLI.exe' +alvaDescCLI.exe' elif plt == 'Darwin': CONFIG['alvadesc_path'] = '/Applications/alvaDesc.app/Contents/MacOS/\ - alvaDescCLI' +alvaDescCLI' elif plt == 'Linux': CONFIG['alvadesc_path'] = '/usr/bin/alvaDescCLI' else: From 47a6102c117460a0c1b6a70d273189b925611066 Mon Sep 17 00:00:00 2001 From: tjkessler Date: Tue, 1 Aug 2023 23:52:40 -0400 Subject: [PATCH 9/9] Update install instructions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d520f04..ac15de1 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Installation via cloned repository: ``` $ git clone https://github.com/ecrl/alvadescpy $ cd alvadescpy -$ python setup.py install +$ pip install . ``` There are currently no additional dependencies for alvaDescPy, however it requires a valid, licensed installation of [alvaDesc](https://www.alvascience.com/alvadesc/).