Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Jun 2022 16:36:57 GMT
From:      Po-Chuan Hsieh <sunpoet@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 064d0418c84e - main - devel/py-pyina: Add py-pyina 0.2.5
Message-ID:  <202206211636.25LGavXu058797@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by sunpoet:

URL: https://cgit.FreeBSD.org/ports/commit/?id=064d0418c84e738b03505130a442bc75c0a8bcc4

commit 064d0418c84e738b03505130a442bc75c0a8bcc4
Author:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
AuthorDate: 2022-06-21 16:32:25 +0000
Commit:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
CommitDate: 2022-06-21 16:32:25 +0000

    devel/py-pyina: Add py-pyina 0.2.5
    
    The pyina package provides several basic tools to make MPI-based parallel
    computing more accessable to the end user. The goal of pyina is to allow the
    user to extend their own code to MPI-based parallel computing with minimal
    refactoring.
    
    WWW: https://github.com/uqfoundation/pyina
---
 devel/Makefile           |   1 +
 devel/py-pyina/1l        |  35 +++++
 devel/py-pyina/1q        |   5 +
 devel/py-pyina/1s        | 397 +++++++++++++++++++++++++++++++++++++++++++++++
 devel/py-pyina/1t        |   4 +
 devel/py-pyina/Makefile  |  26 ++++
 devel/py-pyina/distinfo  |   3 +
 devel/py-pyina/pkg-descr |   6 +
 8 files changed, 477 insertions(+)

diff --git a/devel/Makefile b/devel/Makefile
index f6a18e0fbf04..f8b223c58fa3 100644
--- a/devel/Makefile
+++ b/devel/Makefile
@@ -5082,6 +5082,7 @@
     SUBDIR += py-pyhashxx
     SUBDIR += py-pyhcl
     SUBDIR += py-pyicu
+    SUBDIR += py-pyina
     SUBDIR += py-pyinotify
     SUBDIR += py-pyinquirer
     SUBDIR += py-pyinstaller
diff --git a/devel/py-pyina/1l b/devel/py-pyina/1l
new file mode 100644
index 000000000000..5a80dd78c125
--- /dev/null
+++ b/devel/py-pyina/1l
@@ -0,0 +1,35 @@
+Copyright (c) 2004-2016 California Institute of Technology.
+Copyright (c) 2016-2021 The Uncertainty Quantification Foundation.
+All rights reserved.
+
+This software is available subject to the conditions and terms laid
+out below. By downloading and using this software you are agreeing
+to the following conditions.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met::
+
+    - Redistribution of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    - Redistribution in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentations and/or other materials provided with the distribution.
+
+    - Neither the names of the copyright holders nor the names of any of
+      the contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/devel/py-pyina/1q b/devel/py-pyina/1q
new file mode 100644
index 000000000000..9eefd6db79ea
--- /dev/null
+++ b/devel/py-pyina/1q
@@ -0,0 +1,5 @@
+numpy<1.20.0,>=1.0
+mpi4py!=3.0.2,>=1.3
+dill>=0.3.4
+pox>=0.3.0
+pathos>=0.2.8
diff --git a/devel/py-pyina/1s b/devel/py-pyina/1s
new file mode 100644
index 000000000000..e21226f4643d
--- /dev/null
+++ b/devel/py-pyina/1s
@@ -0,0 +1,397 @@
+#!/usr/bin/env python
+#
+# Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
+# Copyright (c) 1997-2016 California Institute of Technology.
+# Copyright (c) 2016-2021 The Uncertainty Quantification Foundation.
+# License: 3-clause BSD.  The full license text is available at:
+#  - https://github.com/uqfoundation/pyina/blob/master/LICENSE
+
+import os
+import sys
+# drop support for older python
+unsupported = None
+if sys.version_info < (2, 7):
+    unsupported = 'Versions of Python before 2.7 are not supported'
+elif (3, 0) <= sys.version_info < (3, 6):
+    unsupported = 'Versions of Python before 3.6 are not supported'
+if unsupported:
+    raise ValueError(unsupported)
+
+# set version numbers
+stable_version = '0.2.5'
+target_version = '0.2.5'
+is_release = stable_version == target_version
+
+# check if easy_install is available
+try:
+#   import __force_distutils__ #XXX: uncomment to force use of distutills
+    from setuptools import setup, dist
+    has_setuptools = True
+except ImportError:
+    from distutils.core import setup
+    has_setuptools = False
+
+# generate version number
+if os.path.exists('pyina/info.py'):
+    # is a source distribution, so use existing version
+    os.chdir('pyina')
+    with open('info.py','r') as f:
+        f.readline() # header
+        this_version = f.readline().split()[-1].strip("'")
+    os.chdir('..')
+elif stable_version == target_version:
+    # we are building a stable release
+    this_version = target_version
+else:
+    # we are building a distribution
+    this_version = target_version + '.dev0'
+    if is_release:
+      from datetime import date
+      today = "".join(date.isoformat(date.today()).split('-'))
+      this_version += "-" + today
+
+# get the license info
+with open('LICENSE') as file:
+    license_text = file.read()
+
+# generate the readme text
+long_description = \
+"""----------------------------------------------
+pyina: MPI parallel map and cluster scheduling
+----------------------------------------------
+
+About Pyina
+===========
+
+The ``pyina`` package provides several basic tools to make MPI-based
+parallel computing more accessable to the end user. The goal
+of ``pyina`` is to allow the user to extend their own code to MPI-based
+parallel computing with minimal refactoring.
+
+The central element of ``pyina`` is the parallel map algorithm.
+``pyina`` currently provides two strategies for executing the parallel-map,
+where a strategy is the algorithm for distributing the work list of
+jobs across the availble nodes.  These strategies can be used *"in-the-raw"*
+(i.e. directly) to provide the map algorithm to a user's own mpi-aware code.
+Further, in ``pyina.mpi`` ``pyina`` provides pipe and map implementations
+(known as *"easy map"*) that hide the MPI internals from the user. With the
+*"easy map"*, the user can launch their code in parallel batch mode -- using
+standard python and without ever having to write a line of MPI code.
+
+There are several ways that a user would typically launch their code in
+parallel -- directly with ``mpirun`` or ``mpiexec``, or through the use of a
+scheduler such as *torque* or *slurm*. ``pyina`` encapsulates several of these
+*"launchers"*, and provides a common interface to the different methods of
+launching a MPI job.
+
+``pyina`` is part of ``pathos``, a python framework for heterogeneous computing.
+``pyina`` is in active development, so any user feedback, bug reports, comments,
+or suggestions are highly appreciated.  A list of issues is located at https://github.com/uqfoundation/pyina/issues, with a legacy list maintained at https://uqfoundation.github.io/project/pathos/query.
+
+
+Major Features
+==============
+
+``pyina`` provides a highly configurable parallel map interface
+to running MPI jobs, with:
+
+    - a map interface that extends the python ``map`` standard
+    - the ability to submit batch jobs to a selection of schedulers
+    - the ability to customize node and process launch configurations
+    - the ability to launch parallel MPI jobs with standard python
+    - ease in selecting different strategies for processing a work list
+
+
+Current Release
+===============
+
+This documentation is for version ``pyina-%(thisver)s``.
+
+The latest released version of ``pyina`` is available at:
+
+    https://pypi.org/project/pyina
+
+``pyina`` is distributed under a 3-clause BSD license.
+
+    >>> import pyina
+    >>> pyina.license()
+
+
+Development Version
+===================
+
+You can get the latest development version with all the shiny new features at:
+
+    https://github.com/uqfoundation
+
+If you have a new contribution, please submit a pull request.
+
+
+Installation
+============
+
+``pyina`` is packaged to install from source, so you must
+download the tarball, unzip, and run the installer::
+
+    [download]
+    $ tar -xvzf pyina-%(relver)s.tar.gz
+    $ cd pyina-%(relver)s
+    $ python setup py build
+    $ python setup py install
+
+You will be warned of any missing dependencies and/or settings after
+you run the "build" step above. ``pyina`` depends on ``dill``, ``pox``, ``pathos``, and
+``mpi4py``, so you should install them first. A version of MPI must also be
+installed. Launchers in ``pyina`` that submit to a scheduler will throw errors
+if the underlying scheduler is not available, however a scheduler is not
+required for ``pyina`` to execute.
+
+Alternately, ``pyina`` can be installed with ``pip`` or ``easy_install``::
+
+    $ pip install pyina
+
+
+Requirements
+============
+
+``pyina`` requires:
+
+    - ``python``, **version == 2.7** or **version >= 3.6**, or ``pypy``
+    - ``numpy``, **version >= 1.0**
+    - ``mpi4py``, **version >= 1.3**
+    - ``dill``, **version >= 0.3.4**
+    - ``pox``, **version >= 0.3.0**
+    - ``pathos``, **version >= 0.2.8**
+
+Optional requirements:
+
+    - ``setuptools``, **version >= 0.6**
+    - ``mystic``, **version >= 0.3.7**
+
+
+More Information
+================
+
+Probably the best way to get started is to look at the documentation at
+http://pyina.rtfd.io. Also see ``pyina.examples`` and ``pyina.tests``
+for a set of scripts that demonstrate the configuration and launching of
+mpi-based parallel jobs using the *"easy map"* interface. Also see
+``pyina.examples_other`` for a set of scripts that test the more raw
+internals of ``pyina``. You can run the tests with ``python -m pyina.tests``.
+A script is included for querying, setting up, and tearing down an MPI
+environment, see ``python -m pyina`` for more information. The source code
+is generally well documented, so further questions may be resolved by
+inspecting the code itself. Please feel free to submit a ticket on github,
+or ask a question on stackoverflow (**@Mike McKerns**).
+If you would like to share how you use ``pyina`` in your work, please send
+an email (to **mmckerns at uqfoundation dot org**).
+
+Important classes and functions are found here:
+
+    - ``pyina.mpi``           [the map API definition]
+    - ``pyina.schedulers``    [all available schedulers] 
+    - ``pyina.launchers``     [all available launchers] 
+
+Mapping strategies are found here:
+
+    - ``pyina.mpi_scatter``   [the scatter-gather strategy]
+    - ``pyina.mpi_pool``      [the worker pool strategy]
+
+``pyina`` also provides a convience script that helps navigate the
+MPI environment. This script can be run from anywhere with::
+
+    $ mpi_world
+
+If may also be convienent to set a shell alias for the launch of 'raw'
+mpi-python jobs. Set something like the following (for bash)::
+
+    $ alias mpython1='mpiexec -np 1 `which python`'
+    $ alias mpython2='mpiexec -np 2 `which python`'
+    $ ...
+
+
+Citation
+========
+
+If you use ``pyina`` to do research that leads to publication, we ask that you
+acknowledge use of ``pyina`` by citing the following in your publication::
+
+    M.M. McKerns, L. Strand, T. Sullivan, A. Fang, M.A.G. Aivazis,
+    "Building a framework for predictive science", Proceedings of
+    the 10th Python in Science Conference, 2011;
+    http://arxiv.org/pdf/1202.1056
+
+    Michael McKerns and Michael Aivazis,
+    "pathos: a framework for heterogeneous computing", 2010- ;
+    https://uqfoundation.github.io/project/pathos
+
+Please see https://uqfoundation.github.io/project/pathos or
+http://arxiv.org/pdf/1202.1056 for further information.
+
+""" % {'relver' : stable_version, 'thisver' : this_version}
+
+# write readme file
+with open('README', 'w') as file:
+    file.write(long_description)
+
+# generate 'info' file contents
+def write_info_py(filename='pyina/info.py'):
+    contents = """# THIS FILE GENERATED FROM SETUP.PY
+this_version = '%(this_version)s'
+stable_version = '%(stable_version)s'
+readme = '''%(long_description)s'''
+license = '''%(license_text)s'''
+"""
+    with open(filename, 'w') as file:
+        file.write(contents % {'this_version' : this_version,
+                               'stable_version' : stable_version,
+                               'long_description' : long_description,
+                               'license_text' : license_text })
+    return
+
+# write info file
+write_info_py()
+
+# platform-specific instructions
+sdkroot_set = False
+from sys import platform
+if platform[:3] == 'win':
+    pass
+else: #platform = linux or mac
+     if platform[:6] == 'darwin':
+         # mpi4py has difficulty building on a Mac
+         # see special installation instructions here:
+         # http://mpi4py.scipy.org/docs/usrman/install.html
+         import os
+         try:
+             sdkroot = os.environ['SDKROOT']
+         except KeyError:
+             sdkroot = '/'
+             os.environ['SDKROOT'] = sdkroot
+             sdkroot_set = True
+         pass
+     pass
+
+# build the 'setup' call
+setup_code = """
+setup(name="pyina",
+    version='%s',
+    description="MPI parallel map and cluster scheduling",
+    long_description = '''%s''',
+    author = 'Mike McKerns',
+    maintainer = 'Mike McKerns',
+    license = '3-clause BSD',
+    platforms = ['Linux', 'Mac'],
+    url = 'https://github.com/uqfoundation/pyina',
+    download_url = 'https://github.com/uqfoundation/pyina/archive/master.zip',
+    classifiers = ['Development Status :: 5 - Production/Stable',
+                   'Intended Audience :: Developers',
+                   'Intended Audience :: Science/Research',
+                   'License :: OSI Approved :: BSD License',
+                   'Programming Language :: Python :: 2',
+                   'Programming Language :: Python :: 2.7',
+                   'Programming Language :: Python :: 3',
+                   'Programming Language :: Python :: 3.6',
+                   'Programming Language :: Python :: 3.7',
+                   'Programming Language :: Python :: 3.8',
+                   'Programming Language :: Python :: 3.9',
+                   'Topic :: Scientific/Engineering',
+                   'Topic :: Software Development'],
+
+    packages=['pyina','pyina.tests'],
+    package_dir={'pyina':'pyina','pyina.tests':'tests'},
+""" % (target_version, long_description)
+
+# add dependencies
+from sys import version_info
+sysversion = version_info[:2]
+try:
+    import ctypes # if using `pypy`, pythonapi is not found
+    IS_PYPY = not hasattr(ctypes, 'pythonapi')
+    IS_PYPY2 = IS_PYPY and sysversion < (3,0)
+except:
+    IS_PYPY = False
+    IS_PYPY2 = False
+if sysversion < (2,6) or sysversion == (3,0) or sysversion == (3,1):
+    numpy_version = '>=1.0, <1.8.0'
+elif sysversion == (2,6) or sysversion == (3,2) or sysversion == (3,3):
+    numpy_version = '>=1.0, <1.12.0'
+elif IS_PYPY2:
+    numpy_version = '>=1.0, <1.16.0'
+elif sysversion == (2,7) or sysversion == (3,4):
+    numpy_version = '>=1.0, <1.17.0'
+elif sysversion == (3,5):
+    numpy_version = '>=1.0, <1.19.0'
+elif sysversion == (3,6):# or IS_PYPY
+    numpy_version = '>=1.0, <1.20.0'
+else:
+    numpy_version = '>=1.0'
+dill_version = '>=0.3.4'
+pox_version = '>=0.3.0'
+pathos_version = '>=0.2.8'
+mpi4py_version = '>=1.3, !=3.0.2' # segfault 11 on MPI import
+pypar_version = '>=2.1.4'
+mystic_version = '>=0.3.7'
+# rtd fails for mpi4py, mock it instead
+on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
+if has_setuptools:
+    if on_rtd:
+        setup_code += """
+        zip_safe = False,
+        install_requires = ('numpy%s', 'dill%s', 'pox%s', 'pathos%s'),
+""" % (numpy_version, dill_version, pox_version, pathos_version)
+    else:
+        setup_code += """
+        zip_safe = False,
+        install_requires = ('numpy%s', 'mpi4py%s', 'dill%s', 'pox%s', 'pathos%s'),
+""" % (numpy_version, mpi4py_version, dill_version, pox_version, pathos_version)
+
+# add the scripts, and close 'setup' call
+setup_code += """
+    scripts=['scripts/ezpool','scripts/ezscatter','scripts/mpi_world'])
+"""
+
+# exec the 'setup' code
+exec(setup_code)
+
+# if dependencies are missing, print a warning
+try:
+    import numpy
+    import dill
+    import pox
+    import pathos
+    import mpi4py #XXX: throws an error even though ok?
+    #import pypar
+except ImportError:
+    print("\n***********************************************************")
+    print("WARNING: One of the following dependencies may be unresolved:")
+    print(("    numpy %s" % numpy_version))
+    print(("    dill %s" % dill_version))
+    print(("    pox %s" % pox_version))
+    print(("    pathos %s" % pathos_version))
+    print(("    mpi4py %s" % mpi4py_version))
+#   print("    pypar %s (optional)" % pypar_version)
+    print("***********************************************************\n")
+
+if sdkroot_set:
+    print("\n***********************************************************")
+    print("WARNING: One of following variables was set to a default:")
+    print(("    SDKROOT %s" % sdkroot))
+    print("***********************************************************\n")
+else:
+    pass
+
+try:
+    import mpi4py
+except ImportError:
+    print("""
+You may need to set the environment variable "SDKROOT",
+as shown in the instructions for installing ``mpi4py``:
+  http://mpi4py.scipy.org/docs/usrman/install.html
+""")
+
+
+if __name__=='__main__':
+    pass
+
+# End of file
diff --git a/devel/py-pyina/1t b/devel/py-pyina/1t
new file mode 100644
index 000000000000..8bfd5a12f85b
--- /dev/null
+++ b/devel/py-pyina/1t
@@ -0,0 +1,4 @@
+[egg_info]
+tag_build = 
+tag_date = 0
+
diff --git a/devel/py-pyina/Makefile b/devel/py-pyina/Makefile
new file mode 100644
index 000000000000..e15d6a07b297
--- /dev/null
+++ b/devel/py-pyina/Makefile
@@ -0,0 +1,26 @@
+# Created by: Po-Chuan Hsieh <sunpoet@FreeBSD.org>
+
+PORTNAME=	pyina
+PORTVERSION=	0.2.5
+CATEGORIES=	devel python
+MASTER_SITES=	CHEESESHOP
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER=	sunpoet@FreeBSD.org
+COMMENT=	MPI parallel map and cluster scheduling
+
+LICENSE=	BSD3CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dill>=0.3.4:devel/py-dill@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}mpi4py>=1.3:net/py-mpi4py@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}numpy>=1.0,1:math/py-numpy@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pathos>=0.2.8:devel/py-pathos@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pox>=0.3.0:devel/py-pox@${PY_FLAVOR}
+
+USES=		python:3.7+ zip
+USE_PYTHON=	autoplist concurrent distutils
+
+NO_ARCH=	yes
+
+.include <bsd.port.mk>
diff --git a/devel/py-pyina/distinfo b/devel/py-pyina/distinfo
new file mode 100644
index 000000000000..63b73c959dbf
--- /dev/null
+++ b/devel/py-pyina/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1655561120
+SHA256 (pyina-0.2.5.zip) = 4fd1a9ed7000bbe209b50621f862d43f13f1dfac65fa270ce0c1c8c8c067e23a
+SIZE (pyina-0.2.5.zip) = 164742
diff --git a/devel/py-pyina/pkg-descr b/devel/py-pyina/pkg-descr
new file mode 100644
index 000000000000..74cb7f126106
--- /dev/null
+++ b/devel/py-pyina/pkg-descr
@@ -0,0 +1,6 @@
+The pyina package provides several basic tools to make MPI-based parallel
+computing more accessable to the end user. The goal of pyina is to allow the
+user to extend their own code to MPI-based parallel computing with minimal
+refactoring.
+
+WWW: https://github.com/uqfoundation/pyina



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202206211636.25LGavXu058797>