{ "info": { "author": "Mat\u011bj Laitl", "author_email": "matej@laitl.cz", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License (GPL)", "Operating System :: OS Independent", "Programming Language :: C++", "Programming Language :: Cython", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "======\nCeygen\n======\n\nAbout\n=====\n\nCeygen is a binary Python extension module for linear algebra with Cython_ `typed\nmemoryviews`_. Ceygen is built atop the `Eigen C++ library`_. Ceygen is **not** a Cython\nwrapper or an interface to Eigen!\n\nThe name Ceygen is a rather poor wordplay on Cython + Eigen; it has nothing to do\nwith software piracy. Ceygen is currently distributed under GNU GPL v2+ license. The\nauthors of Ceygen are however open to other licensing suggestions. (Do you want to use\nCeygen in e.g. a BSD-licensed project? Ask!)\n\nCython is being developed by Mat\u011bj Laitl with support from the `Institute of Information\nTheory and Automation, Academy of Sciences of the Czech Republic`_. Feel free to send me\na mail to matej at laitl dot cz.\n\n.. _Cython: http://cython.org/\n.. _`typed memoryviews`: http://docs.cython.org/src/userguide/memoryviews.html\n.. _`Eigen C++ library`: http://eigen.tuxfamily.org/\n.. _`Institute of Information Theory and Automation, Academy of Sciences of the Czech Republic`:\n http://www.utia.cas.cz/\n\nFeatures\n========\n\nCeygen...\n\n* **is fast** - Ceygen's primary raison d'\u00eatre is to provide overhead-free algebraic\n operations for Cython projects that work with `typed memoryviews`_ (especially\n small-sized). For every function there is a code-path where no Python function is\n called, no memory is allocated on heap and no data is copied.\n `Eigen itself performs rather well`_, too.\n* **is documented** - see `Documentation`_ or hop directly to `on-line docs`_.\n* **supports various data types** - Ceygen uses Cython `fused types`_ (a.k.a. wannabe\n templates) along with Eigen's template nature to support various data types without\n duplicating code. While just a few types are pre-defined (float, double, ...), adding\n a new type is a matter of adding 3 lines and rebuilding Ceygen.\n* **is extensively tested** - Ceygen's test suite validates every its public method,\n including errors raised on invalid input. Thanks to Travis CI, `every push is\n automatically tested`_ against **Python 2.6**, **2.7**, **3.2** and **3.3**.\n* **is multithreading-friendly** - Every Ceygen function doesn't acquire the GIL_\n unless it needs to create a Python object (always avoidable); all functions are\n declared nogil_ so that you can call them in prange_ blocks without losing parallelism.\n* **provides descriptive error messages** - Care is taken to propagate all errors\n properly (down from Eigen) so that you are not stuck debugging your program. Ceygen\n functions don't crash on invalid input but rather raise reasonable errors.\n* works well with NumPy_, but doesn't depend on it. You don't need NumPy to build or run\n Ceygen, but thanks to Cython, `Cython memoryviews and NumPy arrays`_ are fully\n interchangeable without copying the data (where it is possible). The test suite\n currently makes use of NumPy because of our laziness. :-)\n\n.. _`Eigen itself performs rather well`: http://eigen.tuxfamily.org/index.php?title=Benchmark\n.. _`on-line docs`: http://strohel.github.com/Ceygen-doc/\n.. _`fused types`: http://docs.cython.org/src/userguide/fusedtypes.html\n.. _`every push is automatically tested`: https://travis-ci.org/strohel/Ceygen\n.. _GIL: http://docs.python.org/glossary.html#term-global-interpreter-lock\n.. _nogil: http://docs.cython.org/src/userguide/external_C_code.html#declaring-a-function-as-callable-without-the-gil\n.. _prange: http://docs.cython.org/src/userguide/parallelism.html\n.. _NumPy: http://www.numpy.org/\n.. _`Cython memoryviews and NumPy arrays`: http://docs.cython.org/src/userguide/memoryviews.html#coercion-to-numpy\n\nOn the other hand, Ceygen...\n\n* **depends on Eigen build-time**. Ceygen expects *Eigen 3* headers to be installed under\n ``/usr/lib/eigen3`` when it is being built. Installing Eigen is a matter of unpacking\n it, because it is a pure template library defined solely in the headers. Ceygen doesn't\n reference Eigen at all at runtime because all code is complited in.\n* **still provides a very little subset of Eigen functionality**. We add new functions\n only as we need them in another projects, but we believe that the hard part is the\n infrastructure - implementing a new function should be rather straightforward (with\n decent Cython and C++ knowledge). We're very open to pull requests!\n (do include unit tests in them)\n* **needs recent Cython** (currently at least 0.19.1) to compile. If this is a problem,\n you can distribute .cpp files or final Python extension module instead.\n* **doesn't bring Eigen's elegance to Cython** - if you think of lazy evaluation and\n advanced expessions, stop dreaming. Ceygen will make your code faster, not nicer.\n `Array expessions`_ will help here.\n\n.. _`Array expessions`: https://github.com/cython/cython/pull/144\n\nA simple example to compute matrix product within a big matrix may look like\n\n>>> cdef double[:, :] big = np.array([[1., 2., 2., 0., 0., 0.],\n>>> [3., 4., 0., -2., 0., 0.]])\n>>> ceygen.core.dot_mm(big[:, 0:2], big[:, 2:4], big[:, 4:6])\n[[ 2. -4.]\n [ 6. -8.]]\n>>> big\n[[ 1. 2. 2. 0. 2. -4.]\n [ 3. 4. 0. -2. 6. -8.]],\n\nwhere the `dot_mm`_ call above doesn't copy any data, allocates no memory on heap, doesn't\nneed the GIL_ and uses vectorization (SSE, AltiVec...) to get the best out of your\nprocessor.\n\n.. _`dot_mm`: http://strohel.github.com/Ceygen-doc/core.html#ceygen.core.dot_mm\n\nObtaining\n=========\n\nCeygen development happens in `its github repository`_, ``git clone\ngit@github.com:strohel/Ceygen.git`` -ing is the preferred way to get it as you'll have\nthe latest & greatest version (which shouldn't break thanks to continuous integration).\nReleased versions are available from `Ceygen's PyPI page`_.\n\n.. _`its github repository`: https://github.com/strohel/Ceygen\n.. _`Ceygen's PyPI page`: http://pypi.python.org/pypi/Ceygen\n\nBuilding\n========\n\nCeygen uses standard Distutils to build, test and install itself, simply run:\n\n* ``python setup.py build`` to build Ceygen\n* ``python setup.py test`` to test it (inside build directory)\n* ``python setup.py install`` to install it\n* ``python setup.py clean`` to clean generated object, .cpp and .html files (perhaps to\n force recompilation)\n\nCommands can be combined, automatically call dependent commands and can take options,\nthe recommended combo to safely install Ceygen is therefore ``python setup.py -v test install``.\n\nBuilding Options\n----------------\n\nYou can set various build options as it is usual with distutils, see\n``python setup.py --help``. Notable is the `build_ext` command and its `--include-dirs`\n(standard) and following additional options (whose are Ceygen extensions):\n\n--include-dirs\n defaults to `/usr/include/eigen3` and must be specified if you've installed Eigen 3\n to a non-standard directory,\n\n--cflags\n defaults to `-O2 -march=native -fopenmp`. Please note that it is important to enable\n optimizations and generation of appropriate MMX/SSE/altivec-enabled code as the actual\n computation code from Eigen is built along with the boilerplate Ceygen code,\n\n--ldflags\n additional flags to pass to linker, defaults to `-fopenmp`. Use standard `--libraries`\n for specifying extra libraries to link against,\n\n--annotate\n pass `--annotate` to Cython to produce annotated HTML files during compiling. Only\n useful during Ceygen development.\n\nYou may want to remove `-fopenmp` from `cflags` and `ldflags` if you are already\nparallelising above Ceygen. The resulting command could look like ``python setup.py -v\nbuild_ext --include-dirs=/usr/local/include/eigen3 --cflags=\"-O3 -march=core2\" --ldflags=\ntest``. The same could be achieved by putting the options to a `setup.cfg` file::\n\n [build_ext]\n include_dirs = /usr/local/include/eigen3\n cflags = -O3 -march=core2\n ldflags =\n\nDocumentation\n=============\n\nCeygen documentation is maintained in reStructuredText_ format under ``doc/`` directory\nand can be exported into a variety of formats using Sphinx_ (version at least 1.0 needed).\nJust type ``make`` in that directory to see a list of supported formats and for example\n``make html`` to build HTML pages with the documentation.\n\nSee ``ChangeLog.rst`` file for changes between versions or `view it online`_.\n\n**On-line documentation** is available at http://strohel.github.com/Ceygen-doc/\n\n.. _reStructuredText: http://sphinx-doc.org/rest.html\n.. _Sphinx: http://sphinx-doc.org/\n.. _`view it online`: http://strohel.github.com/Ceygen-doc/ChangeLog.html\n\nBugs\n====\n\nPlease report any bugs you find and suggestions you may have to `Ceygen's github Issue\nTracker`_.\n\n.. _`Ceygen's github Issue Tracker`: https://github.com/strohel/Ceygen/issues", "description_content_type": null, "docs_url": null, "download_url": "http://pypi.python.org/pypi/Ceygen", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/strohel/Ceygen", "keywords": null, "license": "GNU GPL v2+", "maintainer": null, "maintainer_email": null, "name": "Ceygen", "package_url": "https://pypi.org/project/Ceygen/", "platform": "cross-platform", "project_url": "https://pypi.org/project/Ceygen/", "project_urls": { "Download": "http://pypi.python.org/pypi/Ceygen", "Homepage": "https://github.com/strohel/Ceygen" }, "release_url": "https://pypi.org/project/Ceygen/0.3/", "requires_dist": null, "requires_python": null, "summary": "Cython helper for linear algebra with typed memoryviews built atop the Eigen C++ library", "version": "0.3" }, "last_serial": 825527, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "2572b289c19e4991712db51438d4f1f3", "sha256": "fcffe108a79121a1cb968c67f855613679870a6a8ed61874b6889f9d0be9ac7a" }, "downloads": -1, "filename": "Ceygen-0.1.tar.gz", "has_sig": false, "md5_digest": "2572b289c19e4991712db51438d4f1f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24918, "upload_time": "2013-02-03T17:31:40", "url": "https://files.pythonhosted.org/packages/4c/0f/e321b3874cb8a408362649b40ef9ab10c672922536503b07e1d43aaef48e/Ceygen-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "3338b7aa85629e3b8c80a62560cf43f2", "sha256": "eea19f1752e71b62fac5dea41ee120e7d1716e7de76e6da9dbce06312451bc03" }, "downloads": -1, "filename": "Ceygen-0.2.tar.gz", "has_sig": false, "md5_digest": "3338b7aa85629e3b8c80a62560cf43f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33610, "upload_time": "2013-03-10T15:09:14", "url": "https://files.pythonhosted.org/packages/41/48/2c0eaea0713a36de711972a0d113eb0cf96239c0d32f2493385d3b22c952/Ceygen-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "17b2f77f77030925c533f89877fb8b86", "sha256": "a40e5c3b104544541ddec19c78b07afae7132c304a184cf1f1dc2351791984bb" }, "downloads": -1, "filename": "Ceygen-0.3.tar.gz", "has_sig": true, "md5_digest": "17b2f77f77030925c533f89877fb8b86", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37247, "upload_time": "2013-07-26T12:54:55", "url": "https://files.pythonhosted.org/packages/18/2c/73e6dc694887b1c795ac2b6cfe86b8c3b21a76a782096cadb75449739fb7/Ceygen-0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "17b2f77f77030925c533f89877fb8b86", "sha256": "a40e5c3b104544541ddec19c78b07afae7132c304a184cf1f1dc2351791984bb" }, "downloads": -1, "filename": "Ceygen-0.3.tar.gz", "has_sig": true, "md5_digest": "17b2f77f77030925c533f89877fb8b86", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37247, "upload_time": "2013-07-26T12:54:55", "url": "https://files.pythonhosted.org/packages/18/2c/73e6dc694887b1c795ac2b6cfe86b8c3b21a76a782096cadb75449739fb7/Ceygen-0.3.tar.gz" } ] }