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-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

maniverse-2.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

maniverse-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

maniverse-2.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

maniverse-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

maniverse-2.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

maniverse-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

maniverse-2.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

maniverse-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

maniverse-2.0.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

File details

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

File metadata

File hashes

Hashes for maniverse-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d868aba0b189c8e36f71c5004e89ca954a642ebd2a7ec337cd51c264508c3f88
MD5 e5035fe16bb5213fcd3742742bb83a75
BLAKE2b-256 1d9ad2a727df31139648fab1431fc740dbce2b9c3a5c7b5b8e13802be1d80501

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e45a5f7b9a9e87a7e9f16f9d93367650e0f181a649fb508d1ef04a6a2802b756
MD5 ae4e23b9e47e91c0389417788dbdbfe3
BLAKE2b-256 84adf2bc00186e93dc527415322d5eb57d75e0c8e6fcb3d4a4c0088a5f7345c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e5fc9ccd75c2a6ccfc54d04f1b011dd6bf4ddf0751a65e5d661cde05cc54cb02
MD5 d3b416b247b852880a27e916d7261c2e
BLAKE2b-256 4cb4e22a8189e15fd447c9a459ef5fd57a30ef8440b1a76f9553d96ee93c2b0e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 220f59639b0169f90bfd195c5d156023c8f4f02f746b0c943695b50142f299ad
MD5 c1c5c27a09fe25fd08f6b486900c73a4
BLAKE2b-256 09fb875dd7e5ec7e22a3cf63cfeb46193bf76f475a2ce0816d6c257bc827739f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 65f0019459336a21458f4c71b26fe39ddf91e32fda041e9385925d4f6315cd0b
MD5 8dafc280d2fb1151dd8983219a869707
BLAKE2b-256 253a3698e6f3d99d548d03996e9d4006d65ce2fb31584aaffcb512cd80c6e25a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f3e50a2937994184976dd243e1658ab47657fb4b01648a8a0d885d6bfa54d10f
MD5 92dc62b1cfb61057b43a09d329820290
BLAKE2b-256 47897a09d74c2171e8fe08451b7a6c6b3d5e1b45a19aa9f5c22486666eca1c36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a4f8e6e6c7f517f6d467a39dd6d016e54cfa92d458c60c5b2551c8e36811b7c0
MD5 f4aaa760aaf14183ad7847755a59700e
BLAKE2b-256 a0fa7d8869d3cfd60c7c351141ca59b133e7d96dc53ca642d7f06151a70ae6b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 38be1dac88fe39f6e97fdf3a33102e07a415cb4c5e7abb88983629c4d299e471
MD5 40fca44d12188c56cc04b7de97626ad3
BLAKE2b-256 04f63ffa26d8754d0253b2f987e02313282ad34cb248a269f88e40e74f6db8de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bfae1cb704dabf5553b0ef3a3d278c89e22f6b6f6f5ccedd2d52924ddbe05a23
MD5 3f14575771433b2383c74beac7ca901f
BLAKE2b-256 942cbdc810454793a89e382784a9586f57aa64e18e614ecb8353867bfa67d365

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.0.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a3d79bd651fde2dc6071beec005e572c53e8804283e403b350303312210e51d7
MD5 99ffeafa1c8bcd23c74ddcd3d36e0c95
BLAKE2b-256 f6daea3307fafbb082071c0c3d69a397e2c603528429bf8451baacadade85e5d

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