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.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-2.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-2.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-2.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-2.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-2.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-2.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-2.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-2.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-2.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-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for maniverse-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 44b43393631673e43795627f26ebdd9a52df810df4320aacc547aca531b89a4e
MD5 a35b270cf1dfe363a917b3ab400cb8b9
BLAKE2b-256 3d224a5ea17cf20120575cbcd3ba8ee56c00694c37c12a116a687db48b171bdc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9bd6798a0084840cc3ac80afcfb88da84d991ce867e9ff496cf878cc01c2675b
MD5 6543eeaf9da4eeafa5802c72dfa51709
BLAKE2b-256 8088f2e9f78426bb555f5026ab49377e579550494e3a885599a4835a88cddad2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ea84b31b7e3a1a379951af705b7417a4f08955384b01cb811e721924f059afdf
MD5 c703887acd324be8bde9f51f5845d49a
BLAKE2b-256 aa548cf4a68361347807d93d031987c28142f2b513acae84aa21825318104c64

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 91616707f009315803dbf48a8aa0afb2b8b581b8a0c1919d65081bcc18912509
MD5 f4568d16ff8ba4c40914e523573ffcb9
BLAKE2b-256 38e8892948fe4b9dc320ee71fb1b791f671fe325e29b00f07af8a84a482629f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 972f5483cccb056e3d9757ce966dacb6f5d27464a181e9d1e66ab29515ed8757
MD5 86917952f6bafddb79865ee22b400e2e
BLAKE2b-256 340ec3c495507a0acfb28c6f3d1473ced566d0df15a179ae0dd9f925eef1a7a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f03f6c315af5f60ffa0bf179e05e4f23330462e1dad6b1f76dcdce52dcb1cfcd
MD5 2a1494b7370f70bde21855d2a66edc50
BLAKE2b-256 c538a9948c20e19f85b145f15ecf796f6179b01d9af64628d939b8168c2ebe2e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.1.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e4574ba205811fc13d9cd722cd3faba17d7edbe394846300e4d08c2f04fe422f
MD5 5479809ac66e48be55ac9c20ed56fb30
BLAKE2b-256 fbdab3ba6ce3130b92f02aab93fd4a552258ceed0ec4b06fe8483438e401fb3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1d56e15e7e4788f6b863c257fafd8d23d63ce909f4cf36195ebba9f3d69979e3
MD5 0484569f61fe93466e3dd7220852b88f
BLAKE2b-256 3883b8d83408413527311c4836d5d4f3d744df5a87905f733be225ffa5d1a4f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.1.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 28e03acb9272a8f55297933d064aa0ba57fb5e044fc1cb9bd3f09f298b453629
MD5 252331879dafed03c05f687c4ae54e96
BLAKE2b-256 4d81dbb125113f270efdc9a982bb2f82f4b0b7255b4d75819dafb431feb5224c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maniverse-2.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 55aaf1cea9c094c505d9746f35202ac7aa975f4c87fa01ad62ea050b6a9c14bf
MD5 ab69a5682e0810c3af114a98436308c7
BLAKE2b-256 350f9efda263c4f095baff8bdc1b534ad3ffc8f96bb3def7b51aa3962023e757

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