{ "info": { "author": "Chris Sewell", "author_email": "chrisj_sewell@hotmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Environment :: Web Environment", "Intended Audience :: End Users/Desktop", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Scientific/Engineering :: Chemistry", "Topic :: Scientific/Engineering :: Physics", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "atomic-hpc\n==========\n\n[![travis](https://travis-ci.org/chrisjsewell/atomic-hpc.svg?branch=master)](https://travis-ci.org/chrisjsewell/atomic-hpc)\n[![coveralls](https://coveralls.io/repos/github/chrisjsewell/atomic-hpc/badge.svg?branch=master)](https://coveralls.io/github/chrisjsewell/atomic-hpc?branch=master)\n[![PyPI](https://img.shields.io/pypi/v/atomic-hpc.svg)](https://pypi.python.org/pypi/atomic-hpc/)\n\n\n\n**Project**: \n\nA package for running multiple executable scripts on both local and remote hosts, \nconfigured using a modern standard [YAML](https://en.wikipedia.org/wiki/YAML) file. \nThis package was designed, in particular, for job submission to High Performance Computing (HPC) clusters, such as the\n[Imperial HPC facility](https://www.imperial.ac.uk/admin-services/ict/self-service/research-support/hpc/).\nWorking examples can be found [here](https://github.com/chrisjsewell/atomic-hpc/tree/master/examples).\n\nInstallation\n------------\n\nIt is recommended to setup an [Anaconda](https://docs.continuum.io/anaconda/install/) environment. \nFor the Imperial HPC, run the following (as outlined on the [wiki](https://wiki.imperial.ac.uk/display/HPC/Python)):\n\n >> module load anaconda3/personal\n >> anaconda-setup\n\nThen install atomic-hpc simply by:\n\n >> pip install atomic-hpc\n\nMinimal Example\n---------------\n\n1. Write a yaml configuration file; each run must have a name and a unique id, \nthen attributes can be set in the (global) `defaults` section or per run (run attributes will overwrite defaults):\n\n**config.yaml**:\n\n```yaml\ndefaults:\n environment: unix\n\n process:\n unix:\n run:\n - echo \"hallo world\" > hallo.txt\n\n output:\n path: output\nruns:\n - id: 1\n name: test_local\n - id: 2\n name: test_other\n\n```\n\n2. Submit it with the command line app (use -h to see all options):\n\n >> run_config config.yaml\n\n3. The results will be available in the output path, with one folder per run:\n\n >> ls -R output\n output/1_test_local:\n config_1.yaml hallo.txt\n output/2_test_other:\n config_2.yaml hallo.txt\n\n\nMinimal Example (Remote and PBS)\n--------------------------------\n\nJobs can be submitted to remote hosts and, optionally, \n[PBS](https://en.wikipedia.org/wiki/Portable_Batch_System) type systems.\n\n**config_remote.yaml**\n\n```yaml\nruns:\n - id: 1\n name: test_qsub\n environment: qsub\n\n output:\n remote:\n hostname: login.cx1.hpc.imperial.ac.uk\n username: cjs14\n path: /work/cjs14/yaml_test\n\n process:\n qsub:\n cores_per_node: 16 \n nnodes: 1 \n walltime: 1:00:00\n queue: queue_name\n modules:\n - quantum-espresso\n - intel-suite\n - mpi\n run: \n - mpiexec pw.x -i script2.in > main.qe.scf.out \n```\n\nTo retrieve outputs from a remote host, once all processes have run:\n\n >> retrieve_config config_remote.yaml -o path/to/local/outputs\n\nInputs\n------\n\nInput files and scripts can be local or remote and will be copied to the output folder before the runs.\nVariables can also be set that will be replaced in the cmnd lines and script files if a corresponding `@v{var_id}`\nregex is found. Similarly entire file contents can be parsed to the script with the `@f{file_id}` regex:\n\n```\n>> cat path/to/script1.in\n@v{var1}\n@f{file1}\n>> cat path/to/file1\nThis is file 1\n```\n\n **config.yaml**:\n\n```yaml\ndefaults:\n description: quantum-espresso run\n environment: unix\n\n input:\n remote:\n hostname: login.cx1.hpc.imperial.ac.uk\n username: cjs14\n variables:\n var1:\n nprocs: 2\n files:\n file1: path/to/input.txt\n scripts:\n - path/to/script1.in\n\n process:\n unix:\n run:\n - mpirun -np @v{nprocs} pw.x -i script1.in > main.qe.scf.out\n\nruns:\n - id: 1\n name: run1\n input:\n variables:\n var1: value1\n - id: 2\n name: run2\n input:\n variables:\n var1: value2\n\n```\n\n**Run**:\n\n```console\n>> run_config config.yaml\n>> ls -R output\noutput/1_run1:\nconfig_1.yaml input.txt main.qe.scf.out script.in\noutput/2_run2:\nconfig_2.yaml input.txt main.qe.scf.out script.in\n>> cat output/1_run1/script.in\nvalue1\nThis is file 1\n```\n\nNote1: all relative paths are resolved relative to the execution directory, unless set with `run_config -b base/path/`.\n\nNote2: For the above example, if a script or cmndline has `@v{file1}` in it (rather than `@f{file1}`), \nthen this would be replaced with the file name (rather than its content), i.e. input.txt\n\nNote3: Within `qsub: run:`, the keyword `@{wrkpath}` will be replaced with the working folder path.\nThis is handy, for instance, to maintain a dynamic log file in the work path, while the program is running in a temporary folder, e,g,\n\n```yaml\nprocess:\n qsub:\n start_in_temp: true\n run:\n - my_program > @{wrkpath}/output.log\n```\n\nOutputs\n-------\n\nAs well as specifying the output path, post-process file removal and renaming can be configured:\n\n```yaml\nruns:\n - id: 1\n name: run1\n output:\n path: path/to/output\n remove:\n - tmp/\n rename:\n .other.out: .other.qe.json\n```\n\nFull Configuration Options\n--------------------------\n\n```yaml\nruns:\n description: quantum-espresso run\n environment: qsub\n input:\n path:\n scripts:\n - path/to/script1.in\n - path/to/script2.in\n files:\n file1: path/to/file1\n binaries:\n file2: path/to/file2\n variables:\n var1: overridevalue\n var2: value\n nprocs: 2\n remote:\n hostname: login.cx1.hpc.imperial.ac.uk\n port: 22\n username: cjs14\n password:\n pkey:\n key_filename:\n timeout:\n output:\n remote:\n hostname: login.cx1.hpc.imperial.ac.uk\n port: 22\n username: cjs14\n password:\n pkey:\n key_filename:\n timeout:\n path: path/to/top/level/output\n remove:\n # can also use wildcard characters *, ? and []\n - tmp/\n rename: \n # renames any segment of file names, i.e. file.other.out.txt -> file.other.qe.txt\n # searches for files (recursively) in all folders\n .other.out: .other.qe\n process:\n unix:\n run:\n - mpirun -np @v{nprocs} pw.x -i script1.in > main.qe.scf.out\n windows:\n run:\n - mpirun -np @v{nprocs} pw.x -i script1.in > main.qe.scf.out\n qsub:\n jobname:\n cores_per_node: 16\n nnodes: 1\n memory_per_node: 1gb\n tmpspace: 500gb # minimum free space required on the temporary directory\n walltime: 1:00:00\n queue: queue_name\n email: bob@hotmail.com # send email on job start/end\n # NB: the emailling feature has recently been disabled on the Imperial HPC\n modules:\n - module1\n - module2\n start_in_temp: true # if true cd to $TMPDIR and copy all files before running executables\n run:\n - mpiexec pw.x -i script2.in > main.qe.scf.out\n id: 1\n name: run1\n```\n\nSetting up an SSH Public and Private Keys\n-----------------------------------------\n\nRather than directly using a password to access the remote host, it is reccommended that a public key authentication \nbe used, as a more secure authentication method. There are numerous explanations on the internet \n(including [here](https://help.ubuntu.com/community/SSH/OpenSSH/Keys)) and below follows a short setup guide \n(taken from [here](https://wiki.ch.ic.ac.uk/wiki/index.php?title=Mod:Hunt_Research_Group/SSHkeyfile)):\n\nFirst open a shell on the computer you want to connect from. Enter cd ~/.ssh. \nIf an `ls` shows to files called 'id_rsa' and 'id_rsa.pub' you already have a key pair. \nIf not, enter `ssh-keygen` Here is what the result should look like:\n\n```\nheiko@clove:~/.ssh$ ssh-keygen \nGenerating public/private rsa key pair.\nEnter file in which to save the key (/Users/heiko/.ssh/id_rsa):\nEnter passphrase (empty for no passphrase): \nEnter same passphrase again: \nYour identification has been saved in id_rsa.\nYour public key has been saved in id_rsa.pub.\nThe key fingerprint is:\nf0:da:dc:77:cf:71:12:c8:50:dc:18:a9:8d:66:38:ae heiko@clove.ch.ic.ac.uk\nThe key's randomart image is:\n+--[ RSA 2048]----+\n| .o= |\n| .+ . |\n| . ..+ |\n| oo =o.. |\n| .S+ o . |\n| +.. . |\n| ..o . . o..|\n| E . . +o|\n| o|\n+-----------------+\n```\n\nYou should keep the standard directory and choose a suitably difficult passphrase.\n\nThe two file you just created are key and keyhole. The first file 'id_rsa' is the key. \nYou should not ever ever ever give it to anybody else or allow anyone to copy it. \nThe second file 'id_rsa.pub' the keyhole. It is public and you could give it to anyone. \nIn this case, give it to the hpc.\n\nIf you open 'id_rsa.pub' it should contain one line of, similar to:\n\n ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwRDgM+iQg7OaX/CFq1sZ9jl206nYIhW9SMBqsOIRvGM68/6o6uxZo/D4IlmQI9sAcU5FVNEt9dvDanRqUlC7ZtcOGOCqZsj1HTGD3LcOiPNHYPvi1auEwrXv1hDh4pmJwdgZCRnpewNl+I6RNBiZUyzLzp0/2eIyf4TqG1rpHRNjmtS9turANIv1GK1ONIO7RfVmmIk/jjTQJU9iJqje9ZSXTSm7rUG4W8q+mWcnACReVChc+9mVZDOb3gUZV1Vs8e7G36nj6XfHw51y1B1lrlnPQJ7U3JdqPz6AG3Je39cR1vnfALxBSpF5QbTHTJOX5ke+sNKo//kDyWWlfzz3rQ== heiko@clove.ch.ic.ac.uk\n\nNow log in to the HPC and open (or create) the file '~/.ssh/authorized_keys'. \nIn a new line at the end of this file, you should add a comment (starting with #) about where that keypair comes from\nand then in a second line you should copy and paste the complete contents of your 'id_rsa.pub' file.\n\n #MAC in the office\n ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwRDgM+iQg7OaX/CFq1sZ9jl206nYIhW9SMBqsOIRvGM68/6o6uxZo/D4IlmQI9sAcU5FVNEt9dvDanRqUlC7ZtcOGOCqZsj1HTGD3LcOiPNHYPvi1auEwrXv1hDh4pmJwdgZCRnpewNl+I6RNBiZUyzLzp0/2eIyf4TqG1rpHRNjmtS9turANIv1GK1ONIO7RfVmmIk/jjTQJU9iJqje9ZSXTSm7rUG4W8q+mWcnACReVChc+9mVZDOb3gUZV1Vs8e7G36nj6XfHw51y1B1lrlnPQJ7U3JdqPz6AG3Je39cR1vnfALxBSpF5QbTHTJOX5ke+sNKo//kDyWWlfzz3rQ== heiko@clove.ch.ic.ac.uk\n\nClose the 'authorized_keys' file and your connection to the HPC. Now connect again. \nYou will be asked for the passphrase for your keyfile. Enter it. \nYou should now be logged in to the HPC. If you are not asked for the passphrase but for the password of your account, \nthe Server does not accept your key pair. \n\nSo far, we have replaced entering the password for your account with entering the passphrase for your keypair. \nThis is where a so called SSH-agent comes handy. The agent will store your passphrases for you so you do not have \nto enter them anymore. Luckily MacOS has one build in, that should have popped up and asked you, whether you want the \nagent to take care of your passphrases. If you said 'YES', that was the very last time you ever heard or saw anything of \nit or your passphrase. Similar agents exist for more or less every OS. From now on you just have to \nenter hostname and username and you are logged in.\n\nNotes\n-----\n\nIf using special characters in strings (like \\*) be sure to wrap them in \"\" or use the > or | yaml components \n(see https://en.wikipedia.org/wiki/YAML#Basic_components)\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/chrisjsewell/atomic-hpc", "keywords": "yaml,hpc,configuration,ssh,sftp", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "atomic-hpc", "package_url": "https://pypi.org/project/atomic-hpc/", "platform": "", "project_url": "https://pypi.org/project/atomic-hpc/", "project_urls": { "Homepage": "https://github.com/chrisjsewell/atomic-hpc" }, "release_url": "https://pypi.org/project/atomic-hpc/0.4.0/", "requires_dist": [ "ruamel.yaml (>=0.15.3)", "jsonextended (>=0.5.6)", "jsonschema", "paramiko" ], "requires_python": "", "summary": "A package for running multiple executable scripts on both local and remote hosts, configured using a YAML file", "version": "0.4.0" }, "last_serial": 4876889, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "f601a79c287ba74af66fb672fdf68fe9", "sha256": "e40aa3895428012ff540afcb96c38f21327602409da6a00b650e22b29f4d2dc4" }, "downloads": -1, "filename": "atomic_hpc-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f601a79c287ba74af66fb672fdf68fe9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6822, "upload_time": "2017-08-24T09:28:57", "url": "https://files.pythonhosted.org/packages/3d/bb/27180f531ab96bd00b55009ce405c9c315975d91be75be592ea0d849b858/atomic_hpc-0.0.1-py2.py3-none-any.whl" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "cbef520a3b597feff1848092dbff6c37", "sha256": "b85bc9cb7a40ef110abf54ea4df5ab4da6a8d6ce03c760b1c4c17d33a2085dce" }, "downloads": -1, "filename": "atomic_hpc-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cbef520a3b597feff1848092dbff6c37", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6822, "upload_time": "2017-08-24T09:41:26", "url": "https://files.pythonhosted.org/packages/27/51/c5e4573f5eb7c0e9064652f6390a52a136ac278ac2b55f48f52b9318af30/atomic_hpc-0.0.2-py2.py3-none-any.whl" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "0e92e1dac9320d69808f4bafd24bab70", "sha256": "ff038caf6d1a65fa782a96da7e47c90b07da2c9cca66a812294e7c36b4ad03b8" }, "downloads": -1, "filename": "atomic_hpc-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0e92e1dac9320d69808f4bafd24bab70", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12069, "upload_time": "2017-09-03T15:28:59", "url": "https://files.pythonhosted.org/packages/e1/b4/7f5cfbe74194cd1897ad8829334e68b17c059651b844fe78cd9a91f23e6b/atomic_hpc-0.1.3-py2.py3-none-any.whl" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "e365bc736633d63179553f026d85b91d", "sha256": "9e8df4ca40d6a5a41bf378cde44806a6d8694ac002f0e4da0ea1e361d7baaa80" }, "downloads": -1, "filename": "atomic_hpc-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e365bc736633d63179553f026d85b91d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12671, "upload_time": "2017-09-04T19:28:19", "url": "https://files.pythonhosted.org/packages/b9/f4/22e2263a96aadc11814eafae2e09e3941d0c9ff3dad40695f70d5da5164f/atomic_hpc-0.1.4-py2.py3-none-any.whl" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "be034c80f3a619f97d9fd89948971da9", "sha256": "95ed60d9f3b2e3afe8973363bc0151266846e67c48dd4a1e9df8917fa2a06efe" }, "downloads": -1, "filename": "atomic_hpc-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "be034c80f3a619f97d9fd89948971da9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14821, "upload_time": "2017-09-05T18:15:25", "url": "https://files.pythonhosted.org/packages/17/d3/99e02e4c16d39188e68c97eb5c739ba510c7a5b41ab19a28002dd5ff0ec6/atomic_hpc-0.1.5-py2.py3-none-any.whl" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "8dca927ff8d173f7bea54565384a2aed", "sha256": "c6effde88bfd453f65de79be0443f547378164260ccc4a6402fe254e2adee45a" }, "downloads": -1, "filename": "atomic_hpc-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8dca927ff8d173f7bea54565384a2aed", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15167, "upload_time": "2017-09-23T13:53:28", "url": "https://files.pythonhosted.org/packages/a3/ae/b8d57b0aaca2985ee609b7aa1f30f1448c13cafa580ea78ae42facc1f812/atomic_hpc-0.1.7-py2.py3-none-any.whl" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "c2894724f56391725a38063b6941e6ab", "sha256": "a25a0837fad51b60143fdde023de19a939182af92e3f32aa160cb15ce749ac3b" }, "downloads": -1, "filename": "atomic_hpc-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c2894724f56391725a38063b6941e6ab", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15169, "upload_time": "2017-10-19T18:22:19", "url": "https://files.pythonhosted.org/packages/79/c3/84fba14381d6690e010162f4e60eda3598c4b677d053a7b691650edfa789/atomic_hpc-0.2.0-py2.py3-none-any.whl" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "705d513abe29545be6f87c2fd99e7047", "sha256": "59c2e938e3d11764c67bb44d0fbcff7fd91eb9e11915e92555cd67caf254cbe7" }, "downloads": -1, "filename": "atomic_hpc-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "705d513abe29545be6f87c2fd99e7047", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15235, "upload_time": "2017-10-26T05:54:00", "url": "https://files.pythonhosted.org/packages/70/39/415516898f2aa1d7da4f6fefb7e8c324b704172ede656cb2579de7b2ecb1/atomic_hpc-0.2.1-py2.py3-none-any.whl" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "ed895a7fe6503b610e685e1b2dc5620f", "sha256": "7b6180a0b98b71f722abcc4a10e98ea021375788fe6c1ff234f05ae51232beb7" }, "downloads": -1, "filename": "atomic_hpc-0.2.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ed895a7fe6503b610e685e1b2dc5620f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9781, "upload_time": "2018-04-25T01:33:38", "url": "https://files.pythonhosted.org/packages/3f/e7/c8e4eee3ce58179c59e4b921e3a9ccd350e0a33f63cdd0113f1d5518d407/atomic_hpc-0.2.5-py2.py3-none-any.whl" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "cf785ab115e1871d2414f71f71abedeb", "sha256": "48f9b432a07d7ac4d68fa5f4e03f914b805d160104b65f601c1ba8eaf59b255c" }, "downloads": -1, "filename": "atomic_hpc-0.2.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cf785ab115e1871d2414f71f71abedeb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10738, "upload_time": "2019-02-27T21:39:35", "url": "https://files.pythonhosted.org/packages/b4/88/9c83ffeecf635aed3600e5e93790c1cdb8ec7dc40d26be77b8d616aa35f6/atomic_hpc-0.2.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "73e90ec7a0c6fa4fd6b8be4c3c3a75df", "sha256": "7430c369c5469bd0f4b830057fc93f6116c2acb0c9bf5b318cc3044c4da8b008" }, "downloads": -1, "filename": "atomic-hpc-0.2.7.tar.gz", "has_sig": false, "md5_digest": "73e90ec7a0c6fa4fd6b8be4c3c3a75df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13379, "upload_time": "2019-02-27T21:39:36", "url": "https://files.pythonhosted.org/packages/d7/84/01c090807fb62af40ff2f7bea54d239f53f0ad38cb002043dea29b8cd989/atomic-hpc-0.2.7.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "3fb2f9577e61cc8549791ff697f30092", "sha256": "95d64126c7b981058dafa94e21f26a2d918764c89003dc9acf9a3f78f4d1c674" }, "downloads": -1, "filename": "atomic_hpc-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3fb2f9577e61cc8549791ff697f30092", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10738, "upload_time": "2019-02-27T21:55:03", "url": "https://files.pythonhosted.org/packages/b6/96/85021be8bbec92ef4724a9290bb53d1ac3d57b9202cbf65d5f5f09b302da/atomic_hpc-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08c74c2aa56bc4a0487edfdb8912f58e", "sha256": "bef5723a13bff412e28644146f86e0b359933d972d269c039978cca17092bfc6" }, "downloads": -1, "filename": "atomic-hpc-0.3.0.tar.gz", "has_sig": false, "md5_digest": "08c74c2aa56bc4a0487edfdb8912f58e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13380, "upload_time": "2019-02-27T21:55:04", "url": "https://files.pythonhosted.org/packages/b7/69/af6fcb20d2ca054eb96a74b6f3717800877107026813fef98686f6df084d/atomic-hpc-0.3.0.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "2005cf2fb8a62cc25ecc21e91639401d", "sha256": "30fd6db82ae30d495dd421b10290164ba5904fd53537e2be63de04b0bfc52f51" }, "downloads": -1, "filename": "atomic_hpc-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2005cf2fb8a62cc25ecc21e91639401d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10736, "upload_time": "2019-02-27T22:27:46", "url": "https://files.pythonhosted.org/packages/53/e2/447a4829bd27a3e287c69db64525532c55245618945acc05eef58dbe0e37/atomic_hpc-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49ba5ea9a2e2a386fbc57799e1e4c5df", "sha256": "fe394a118edd48f0edecae5b5dbd78259e20d931248d28c80f802165b687a24b" }, "downloads": -1, "filename": "atomic-hpc-0.3.2.tar.gz", "has_sig": false, "md5_digest": "49ba5ea9a2e2a386fbc57799e1e4c5df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13516, "upload_time": "2019-02-27T22:27:47", "url": "https://files.pythonhosted.org/packages/d3/d0/b54b9b4e1ab078a084eed40dbe85c2f3f5eafa4d9a08595e6435bc5e6ac4/atomic-hpc-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "7dfa2c70e10498ec83c2ef24bc14c54a", "sha256": "f39dcda382a55e6c1417d909ff59725864bf0e8088032935b5d03467d15bfbc2" }, "downloads": -1, "filename": "atomic_hpc-0.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7dfa2c70e10498ec83c2ef24bc14c54a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 47240, "upload_time": "2019-02-27T23:49:01", "url": "https://files.pythonhosted.org/packages/97/9f/e1f563c99d8d7e0cecec9af17f759e9105260e92fc1e5d9f0c0692d9176b/atomic_hpc-0.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "daad022a85b5b7e20b2429623466c392", "sha256": "491c4c21d41d1659dda982463c38efada47f5300b42725b1caee59b2f03eda79" }, "downloads": -1, "filename": "atomic-hpc-0.3.3.tar.gz", "has_sig": false, "md5_digest": "daad022a85b5b7e20b2429623466c392", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40394, "upload_time": "2019-02-27T23:49:02", "url": "https://files.pythonhosted.org/packages/5c/35/3b46b49cd8aedb4b1c47330bce01067a41dd72aaa79ce9f85dfa0d099bba/atomic-hpc-0.3.3.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "2a410665ca75e1ba313a48e0546277e7", "sha256": "64c393bf29262a4c6257a528fe02f9dc26dc0163d5f26066623f8682ebada813" }, "downloads": -1, "filename": "atomic_hpc-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2a410665ca75e1ba313a48e0546277e7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 48226, "upload_time": "2019-02-28T00:45:36", "url": "https://files.pythonhosted.org/packages/b6/a0/ba6b1e16ef8f0bae950a00cf44d7b96032547575abc5a5d2954bcaafd45a/atomic_hpc-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49293e43c9c1dd7a5b16b83eae3f5e06", "sha256": "3d216272985bc39058bdb2fb5d29ce98fe58bd83d20a916e4bef94a31235a588" }, "downloads": -1, "filename": "atomic-hpc-0.4.0.tar.gz", "has_sig": false, "md5_digest": "49293e43c9c1dd7a5b16b83eae3f5e06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40849, "upload_time": "2019-02-28T00:45:38", "url": "https://files.pythonhosted.org/packages/00/52/b99128dbd25339742b4144996f0a5d9a4664443a942a65a1e1f97428598b/atomic-hpc-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2a410665ca75e1ba313a48e0546277e7", "sha256": "64c393bf29262a4c6257a528fe02f9dc26dc0163d5f26066623f8682ebada813" }, "downloads": -1, "filename": "atomic_hpc-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2a410665ca75e1ba313a48e0546277e7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 48226, "upload_time": "2019-02-28T00:45:36", "url": "https://files.pythonhosted.org/packages/b6/a0/ba6b1e16ef8f0bae950a00cf44d7b96032547575abc5a5d2954bcaafd45a/atomic_hpc-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49293e43c9c1dd7a5b16b83eae3f5e06", "sha256": "3d216272985bc39058bdb2fb5d29ce98fe58bd83d20a916e4bef94a31235a588" }, "downloads": -1, "filename": "atomic-hpc-0.4.0.tar.gz", "has_sig": false, "md5_digest": "49293e43c9c1dd7a5b16b83eae3f5e06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40849, "upload_time": "2019-02-28T00:45:38", "url": "https://files.pythonhosted.org/packages/00/52/b99128dbd25339742b4144996f0a5d9a4664443a942a65a1e1f97428598b/atomic-hpc-0.4.0.tar.gz" } ] }