Skip to main content

Numerical optimization on manifolds

Project description

Maniverse

Numerical optimization on manifolds

Overview

Maniverse is a library for optimization on manifolds (OOM).

What is Maniverse intended for?

I wrote Maniverse primarily for my quantum chemistry packages Chinium and Orbaplaw, which take care of some classic constraints in quantum chemistry via OOM. However, Maniverse is intended for more general use than merely quantum chemistry.

Why another library for OOM?

The two packages mentioned above are written in C++ and Python separately, so I hoped to have a single library for both C++ and Python. As far as I know, none of the existing libraries are 2-in-1.

How will Maniverse be maintained?

Optimization on manifolds has two aspects: the manifolds and the optimization algorithms. Therefore, this question should be divided into two: how will the two aspects be maintained separately?

For the manifolds, as a quantum chemist, I focused more on the Stiefel manifold and the Grassmann manifold (and their derivatives), so major emphasis will be laid on these two. However, users are welcomed to give advice on more manifolds to be supported. Additionally, Maniverse provides a base class Manifold from which users can derive their own manifold class.

For the optimization algorithms, the attention is paid to the second-order methods, because nearly all the functions to be optimized in quantum chemistry are smooth and well-behaved. These methods include Riemannian trust region method and Riemannian BFGS. I would like to keep track of the popular field of OOM and implement more efficient algorithms as they are being proposed, as long as they enhance the performance in my projects on quantum chemistry.

Are you an expert on OOM?

No. It has just occurred to me that OOM can be extremely powerful in some topics in quantum chemistry in middle 2024, so I set out to develop Maniverse. However, my knowledge in OOM is deficient, and I am still learning through textbooks, papers and discussions on webs. For helping make Maniverse real, I have a long namelist to thank. The good thing is that the current codes do work as they are expected, at least in my projects.

Prerequisites

  • A C++ compiler that supports C++17 standard
  • GNU make
  • Eigen3 >= 3.4.90
  • PyBind11 >= 2.13.6 (For interface to python)
  • Python3 with numpy (For interface to python)

Installation

Manual build

  • Downloading the latest stable release
$ wget https://github.com/FreemanTheMaverick/Maniverse/archive/refs/tags/v0.3.5.tar.gz
  • Edit the first few lines of /Maniverse/makefile for your own computer configuration, including
    • the commands that call the C++ compiler, the GNU make and ar
    • the option that indicates whether to build for C++ use or python use
    • the directories that contain the necessary libraries
  • make -j[N] and you will find the newly created directories /Maniverse/include and /Maniverse/lib.
  • Utilize Maniverse in your project
    • For C++,
      $ g++ test.cpp -isystem $(MANIVERSE)/include/ -L$(MANIVERSE)/lib/ -l:libmaniverse.a # Static linking
      $ g++ test.cpp -isystem $(MANIVERSE)/include/ -L$(MANIVERSE)/lib/ -lmaniverse # Shared linking
      
    • For Python,
      $ export PYTHONPATH=$PYTHONPATH:$(MANIVERSE)/lib/
      $ python
      >>> import Maniverse as mv
      

Pip (for Python only)

  • Installation with pip
pip install Maniverse

Usually pip installs packages to a lib/ directory that is already in $PYTHONPATH, so you do not need to set the environment variable for Maniverse.

  • Utilize Maniverse in your project
$ python
>>> import Maniverse as mv

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

maniverse-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

maniverse-1.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

maniverse-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

maniverse-1.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

maniverse-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

maniverse-1.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

maniverse-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

maniverse-1.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

maniverse-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

maniverse-1.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

File details

Details for the file maniverse-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for maniverse-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3cd6c1e642edf5e9e7584867eac5ed2ea346de264802a7b023a83efa87970534
MD5 f21af7e37692c4cbd49916e97e4363e2
BLAKE2b-256 eaef918091c2bc44a92dccbb5b1a5637d2a4e548f0333afd2fa6858098216514

See more details on using hashes here.

File details

Details for the file maniverse-1.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for maniverse-1.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b54f8001dca428b4f938d3ebf2c38e164b69c120098a54be7e432c0e91fb6423
MD5 970393ea996c4d6abdebc42f72102fc2
BLAKE2b-256 72c4a8a89275c18852db9c5e78427b45da79ffa600c7af90a4f9d0b098cff0c8

See more details on using hashes here.

File details

Details for the file maniverse-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for maniverse-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 60c660b2027b8b3765f2cbbbabaf1937fe26b5ac053b1a57747063a5de18f4b8
MD5 17a9484eaea14dcba21df34c596c7eff
BLAKE2b-256 08ed66416f18ba9edccb3b36bf77464bf5fc1b6b4575ffafcc5199ab785919ea

See more details on using hashes here.

File details

Details for the file maniverse-1.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for maniverse-1.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 25bf4e745d0de6e98375a74d7c3bf3c5ef7644116dba2b8909b4a3a23ccef29f
MD5 4c5700f6874bdf54c98bee658a4c9cc9
BLAKE2b-256 54284e2685084e531ef77cab8a7a88f75599840600aa50890fa540b3565982c4

See more details on using hashes here.

File details

Details for the file maniverse-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for maniverse-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6fa14753cb19d52b01f82b7affa524b4fb7289c76e0b86511e75fd4510af3cae
MD5 9b280c23d71a05b0842f23c51ad8f2f4
BLAKE2b-256 31bfb9c43adfb6f807bb7a466e6ca39dc432f9c6e65b70d11f977f8348d4f39b

See more details on using hashes here.

File details

Details for the file maniverse-1.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for maniverse-1.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 111820fbb37fe9845d96ccce3c2cc585182b0278cb67ec2ad16c4b594f082ef2
MD5 a63b8614565514344dfd9c60f7dddbdd
BLAKE2b-256 cfe2d82aad574bd8c30fdfedb2f308551b51098570c192072b0caa8ef6611740

See more details on using hashes here.

File details

Details for the file maniverse-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for maniverse-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 52a8ae2f56bcce98b81ff6ecdf62cda217af2ab3f7e9468c076ce7e96b27c3d3
MD5 9a8a8c40ccebab46a0ea3e82383b2de9
BLAKE2b-256 cf73ad5120ab4bd3ec4a680b30e0af4943abcba5315c87a93dea786fe69e0835

See more details on using hashes here.

File details

Details for the file maniverse-1.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for maniverse-1.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6619da27d79e376d09a587b9719a5a33db05552761f1fd278c16f84c222bf129
MD5 a27b680be4d51326a3e7101a356378ec
BLAKE2b-256 b3c38d1aca94d0fcbabddff7e38b26ffe9bc6686fe04d90de554734eaed0d47a

See more details on using hashes here.

File details

Details for the file maniverse-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for maniverse-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a00a4c25df1f86e4f8cd84ea0e504fc4f4eab02d8db6c28d1c2fff1ad48a510c
MD5 1f430420338414a487d042161ae25750
BLAKE2b-256 1567a86e50edebd267f0d33897debba5500cfea5bed1c398d81531bd3df6c02a

See more details on using hashes here.

File details

Details for the file maniverse-1.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for maniverse-1.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 69d96e0dac6a3c37dd078dd9d9ffd2b6e0bed9f4d6302f725ded5d7120f0e5cc
MD5 5343242d24ee6be1296173a80ebc494c
BLAKE2b-256 c7d9409d9fd52d89bd628cf18b56f13eff8df95f9e11cd7a3eebbbda1870852d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page