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.0.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.0-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.0-cp314-cp314t-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

m4opt-2.9.0-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.0-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.0-cp314-cp314t-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14tmacOS 10.15+ x86-64

m4opt-2.9.0-cp312-abi3-musllinux_1_2_x86_64.whl (1.1 MB view details)

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

m4opt-2.9.0-cp312-abi3-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

m4opt-2.9.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.1 MB view details)

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

m4opt-2.9.0-cp312-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (1.1 MB view details)

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

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

Uploaded CPython 3.12+macOS 11.0+ ARM64

m4opt-2.9.0-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.0.tar.gz.

File metadata

  • Download URL: m4opt-2.9.0.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.0.tar.gz
Algorithm Hash digest
SHA256 75df6a5df157d086a37b2d371146caa833f6a28140affffb59cd8e10103973f4
MD5 89d1fa94274ad016d353af28eedcc444
BLAKE2b-256 5847a67acbb6e878db91ba80f23fc6c1876858de7ef21f27ae48338fc99a3f04

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0.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.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9815981a1d2093395df938bc06bf33cd1502921db64ecf748023a83627de3cf2
MD5 c9daf97e61473db087f76846d2dade90
BLAKE2b-256 e4a2db2f0ed32d0f452f7eda744cd0cc298e86932d7d29cec554d42a02d1a222

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0-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.0-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 265259db9b0daa58904bc7adec1968e4262b9ac462446f263287e3501db586b5
MD5 9bb1a37b6026bb07ed9e4628872753fb
BLAKE2b-256 7007f54cd6a349e4c8b4effcab5a8316414390893fe80ba8ea9b93d9fd989ae4

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0-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.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 aba0ea1c19dc91f1efe49f9bbc4c3e528dc6b839000663ee79727f8afbfa3380
MD5 c82bae03eefc851c6159ecd559f791cd
BLAKE2b-256 7427abf216615dc5d75dbbb1b3c9ee40be1d68042e62b30e8acc6c00f9b7aae5

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0-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.0-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.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 282d8e90902ffd0c940c7c8b1f92ffd81e4cf0b4212f36e0e74fbe47cad555fd
MD5 e793d196927155aa399ee15dd323bf4a
BLAKE2b-256 a66ca9698f84d80d64a3924abadac4093d6e89c35d4a39f23825e7bc68642811

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0-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.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0336ca3fd4027b9d8dabd504206cab353a8fa3aaab0a95ff84152eeab493e88f
MD5 0e19e38007dfb8669a37b645120411cb
BLAKE2b-256 480da1f918173695245af238cd36710de1b14668d830daacf44bc1ab21108391

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0-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.0-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.0-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 710dee44f35cb64472396b6b92408e3113f93d47b43c5476e16a960c983083c3
MD5 cf56cd79960766f7479c6dadaeb89072
BLAKE2b-256 742eae708bc84f78959cf733b271e8ea6b45a61e30f3eaf159b57260ec5c4b76

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0-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.0-cp312-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.0-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8d54f62b00e15f1d1bdc1f0b7970847cd0bffba865c3c85ecfaa5c5042cc8dae
MD5 c5ad995dd900abdd4f658f676c05fd88
BLAKE2b-256 13238de817cff3544ea071691dc9eced806650b762f8010ae9ebc314b36fdc3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0-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.0-cp312-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.0-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 fef205bf7135b4e957636d174914f5d8f0167ccba13831fbbe02109246960ec4
MD5 0140709386ae48c953c57e2f65a692b0
BLAKE2b-256 43f3497c0d9ae4da10a80ab5327478b8193822e5c124261c03c1f9b150440262

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0-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.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 feb6c59e8b428e0d5ddb3d89939e1484a85363a67bc4fb6c65b45d2a59026aea
MD5 26a0d86d1f64c6a92aab64dbe5950c59
BLAKE2b-256 c4f218e05524ca00443a5a16fc6032c0d82addfded3cbeb1e4946d5c897a9315

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0-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.0-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.0-cp312-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 ea9443fd7e452e0c93226f8c5bdd447cd19efc33c3a7f887a0501f81edadf5c5
MD5 679d2ff24dbdff3bc7c3df7ea0b2dc02
BLAKE2b-256 94daf5b01ff782200391afa55a5ed3a01c35c21082ababf491ede9951977ce5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0-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.0-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 32c75044e2c565cf002943549ab0811cd1e2f5cd6c1eb40cb595c2b910f2c465
MD5 66aae51c2090436bd3b72edb30433328
BLAKE2b-256 d15ab902dbf4ad06e6a16958dd681a46a87858c0d917010624e7abef26cdeb85

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0-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.0-cp312-abi3-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.9.0-cp312-abi3-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a0786ae5a716dbe9730297ca9eabb3451f88d7b3389b648ae98beb864d894534
MD5 9e175cc037c64cc0ac0e6b80e79d71f1
BLAKE2b-256 90f5d1fe3340744fcf00a4a3c31903c789082f66bed28b1fc8c2892f3a82dd08

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.9.0-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

2.9.1

13 files

This release

2.9.0 This release

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