Skip to main content

Multi-Mission Multi-Messenger Observation Planning Toolkit

Python Package Index status Powered by Astropy Badge Code coverage status Documentation Status Visualization of an example observing plan for UVEX generated M4OPT

M4OPT is an open-source toolkit for multi-facility scheduling of astrophysics observing campaigns. It focuses on extremely rapid follow-up of gravitational wave (GW) and neutrino events with heterogeneous networks of space and ground-based observatories.

M4OPT uses the versatile mathematical framework of mixed integer programming to model and solve complex observation scheduling problems. Although M4OPT is open source, for the largest problems it can leverage two industrial-strength commercial MIP solvers: CPLEX or Gurobi. Both solvers are available for free for academic users.

M4OPT is designed from the Astropy affiliated package template, and is meant to follow those standards, including interoperability with the Astropy ecosystem. It also complies with NASA Procedural Requirements (NPR) 7150 for Class C software and is suitable for non-safety-critical ground software applications for Class D NASA payloads.

Features

  • Global: jointly and globally solves the problems of tiling (the set of telescope boresight orientations and roll angles) and the scheduling (which tile is observed at what time), rather than solving each sub-problem one at a time

  • Optimal: generally solves all the way to optimality, rather than finding merely a “good enough” solution

  • Fast: solve an entire orbit in about 5 minutes

  • General: does not depend on heuristics of any kind

  • Flexible: problem is formulated in the versatile framework of mixed integer programming

License

This project is Copyright (c) M4OPT Developers and licensed under the terms of the BSD 3-Clause license. This package is based upon the Astropy package template which is licensed under the BSD 3-clause license. See the licenses folder for more information.

How to Cite

If you use M4OPT in your research, then please cite the following paper:

Singer, L. P., Criswell, A. W., Leggio, S. C., et al. Optimal Follow-up of Gravitational-wave Events with the UltraViolet EXplorer (UVEX). Publications of the Astronomical Society of the Pacific, 137(7):074501, July 2025. https://doi.org/10.1088/1538-3873/adcfc6.

Contributing

We love contributions! m4opt is open source, built on open source, and we’d love to have you hang out in our community.

Imposter syndrome disclaimer: We want your help. No, really.

There may be a little voice inside your head that is telling you that you’re not ready to be an open source contributor; that your skills aren’t nearly good enough to contribute. What could you possibly offer a project like this one?

We assure you - the little voice in your head is wrong. If you can write code at all, you can contribute code to open source. Contributing to open source projects is a fantastic way to advance one’s coding skills. Writing perfect code isn’t the measure of a good developer (that would disqualify all of us!); it’s trying to create something, making mistakes, and learning from those mistakes. That’s how we all improve, and we are happy to help others learn.

Being an open source contributor doesn’t just mean writing code, either. You can help out by writing documentation, tests, or even giving feedback about the project (and yes - that includes giving feedback about the contribution process). Some of these contributions may be the most valuable to the project as a whole, because you’re coming to the project with fresh eyes, so you can see the errors and assumptions that seasoned contributors have glossed over.

Note: This disclaimer was originally written by Adrienne Lowe for a PyCon talk, and was adapted by m4opt based on its use in the README file for the MetPy project.

Download files

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

Source Distribution

m4opt-2.9.1.tar.gz (1.3 MB view details)

Uploaded Source

Built Distributions

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

m4opt-2.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

m4opt-2.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

m4opt-2.9.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

m4opt-2.9.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

m4opt-2.9.1-cp314-cp314t-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

m4opt-2.9.1-cp314-cp314t-macosx_10_15_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

m4opt-2.9.1-cp312-abi3-musllinux_1_2_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ x86-64

m4opt-2.9.1-cp312-abi3-musllinux_1_2_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

m4opt-2.9.1-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

m4opt-2.9.1-cp312-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (1.0 MB view details)

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

m4opt-2.9.1-cp312-abi3-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

m4opt-2.9.1-cp312-abi3-macosx_10_13_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12+macOS 10.13+ x86-64

File details

Details for the file m4opt-2.9.1.tar.gz.

File metadata

  • Download URL: m4opt-2.9.1.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for m4opt-2.9.1.tar.gz
Algorithm Hash digest
SHA256 bf17fc0f86a31b21f626076f61d427c26ae5f3c78ec70f15c2fe17f8dbca7a84
MD5 2b68eb95f2bf502d2ff3fdeb74e059c5
BLAKE2b-256 dda385e0d842b8aff3c910199bea8ec42063bf7f28a3b7fc437d28ea51a1d701

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1.tar.gz:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m4opt-2.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4e2b16961259f0db0da0b35bf7746ad1e6b03b95441b445c5404bcea82f49899
MD5 50348f47c5bece84f05446179468db26
BLAKE2b-256 3fc9887ffb1ec756c4e0a17b7220c5132a39ae51eab32550c8a2c9f65321cfc0

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m4opt-2.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 772ff6c0fdb49ec89aa2f6459e2fdc0138fcd28070910f61ec768f07baa871ed
MD5 f2ff0526fb41de35e49ecfe0704501e4
BLAKE2b-256 8688782f8e2a439d8db6cdb483db286cab1381cec4e10e113fe753cf1ad47374

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m4opt-2.9.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b8835c237b10818bcbf2b69fa15a9e90400bcfbb11ea6effb877e5a512233070
MD5 58b9daff7ff9ce532f1788e70c8aeb36
BLAKE2b-256 efab83a61b7188f4fcee4205d911670bc6276fc56760f912a6d18e3d4321b91a

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m4opt-2.9.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 10aefdc7a805cb4a54557783dd197127959901487c4c05ea2acbebfa0211ef37
MD5 4417637413e0037be51f006e592e2ed9
BLAKE2b-256 f7d9cca599119a1167e66b5445fc0dd3aa9a5e9ea9da0400bad62f8d37416d77

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m4opt-2.9.1-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cdd400016b78f0d0f4f37f763af858b0610aa4be833db02fcc50034485d62c9c
MD5 ad682274805e66253dd62f7f5cb224ce
BLAKE2b-256 3696244cb4503e1dd146ccf01186df9b3f7e69d4a22fc68776d3b1b55f510abd

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m4opt-2.9.1-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.1-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 0828906a2338d1d9dc40ccf4a6e9a7599391889caf575859ac5fef8948d42d93
MD5 296f22a5efbf0da3e83bcea5d560aee8
BLAKE2b-256 a1d093d1f3ba64d3a8471b6d517bf9d1822b49633328de9a588446920503bace

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1-cp314-cp314t-macosx_10_15_x86_64.whl:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m4opt-2.9.1-cp312-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.1-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fb633ee3a4a303db80f0599d1f299cdd1821166245f2d460875d9f7145cfec43
MD5 fbbc918e72d25dcdcd9d2af206d12fd8
BLAKE2b-256 5bf15caca86372b1bbff61abfded2d96b5b8eb9b9a20fdaef06efbd6dfdd22f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1-cp312-abi3-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m4opt-2.9.1-cp312-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.1-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 12fd9372e4b2d1511056680465682bac2f9572a3089a61d73dd7d45ebe137bfa
MD5 4f7290c18fe0af2618d569625895835b
BLAKE2b-256 2f25a950d4050942c982391b6ae50dee4254a709109ccf0bea338f43e80eb4c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1-cp312-abi3-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m4opt-2.9.1-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.1-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7ae574e4412c5cc489b483309874d705f2f9d78320fe8e221b9c753c5b65c7fc
MD5 856bdd3ec231a731f3c9b264c2324dc4
BLAKE2b-256 34264f511b1e92b9aa5dad1cdf85a440107f581dc29fc8cb6a47d023fdf45606

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m4opt-2.9.1-cp312-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.1-cp312-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 a5038278d5185dd7836ee319fc1d201f622a7ca28bd26516dbac7518a94b8962
MD5 18562ec9d0159e929a1be7fe33ba5ef5
BLAKE2b-256 9126ad40607e95eb773b4e0f62734a8d1b408aded68edc5213f8285a841fe9ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1-cp312-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m4opt-2.9.1-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.1-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6df40c77b68430c2ce9fc323d2213e605012e52bc2ce96f42924e7b7c0ba462f
MD5 af13820d8549e7082a5fb77b23eabf7f
BLAKE2b-256 081bb3d02e0bad4881f4680f088541ece69fb9f84abab97f1fa25cfc2d282710

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1-cp312-abi3-macosx_11_0_arm64.whl:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m4opt-2.9.1-cp312-abi3-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.1-cp312-abi3-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 73442532c3bab4c6fdc5cd472a9669173db183c8ca337477296b549c21bf7a24
MD5 68acc79291ebbb62634ecbc9f54ca161
BLAKE2b-256 a6e35f24fd256a9e5437b76847a767355fa6adaba0f95e48e8247f9753773555

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.1-cp312-abi3-macosx_10_13_x86_64.whl:

Publisher: publish.yml on m4opt/m4opt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

2.15.0

13 files

2.14.0

13 files

2.13.0

13 files

2.12.0

13 files

2.11.0

13 files

2.10.0

13 files

This release

2.9.1 This release

13 files

2.9.0

13 files

2.8.1

2 files

2.8.0

2 files

2.6.0

2 files

2.5.0

2 files

2.4.0

2 files

2.3.1

2 files

2.3.0

2 files

2.2.1

2 files

2.2.0

2 files

2.1.0

2 files

2.0.1

2 files

2.0.0

2 files

1.0.0

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page