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

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14tmacOS 10.15+ x86-64

m4opt-2.10.0-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.10.0-cp312-abi3-musllinux_1_2_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

m4opt-2.10.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.10.0-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.10.0-cp312-abi3-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

m4opt-2.10.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.10.0.tar.gz.

File metadata

  • Download URL: m4opt-2.10.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.10.0.tar.gz
Algorithm Hash digest
SHA256 a19505d8765be4901109786f45ec32a2a0554b528e2975020d1d71c6a90c14fd
MD5 388f2dc1232947b0f650d4b1dc2946bb
BLAKE2b-256 bed0a8c5d5dbe6d452687016ca0cc71cf595394810e6c5eb18978d7868904962

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.10.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2a1a86f4c3119a021c05b265b6e2189e1b4322343f99a0697c8da6ac84a0d7e0
MD5 b5eccef69401f348e0fa4035e3b5568e
BLAKE2b-256 346e15c27a20bf52c58b4ba7a04166b32e3b3d51abf0e238be25e26434b54732

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.10.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a3ba9e800c50bb72a988f32d9fc84d475f1cd7dfe03380bbcca8e73f98d39678
MD5 5eaa0b1f221779a1589aedcd959fe00b
BLAKE2b-256 8134f49b78d8684a34eb9510d519b4abf01ab5d96d38a267def3aaa1ffb0b2c4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.10.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5ff4a98d07c853b97edb747ef490acc72e2ac360019c1b60d0b949cdf719ba21
MD5 d0e838d9e958c7e359e85b9291bed122
BLAKE2b-256 9e17a894ba1678fe372573222c0381ffe9a87b5477e64930f59a9fdbc4e1f338

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.10.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.10.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.10.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 aaee10ea3013a8a9b9cd03022871a3c9d147fc7dbac7e817f9ba9b21604d112c
MD5 7ef607bb2b592eb3f2878e29dd1cf170
BLAKE2b-256 6dae09d044de057507c83fdbe96c78b6c11a4e0329c431496e8664f2bd99904f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.10.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1bc30976b14fe132c46e244221698b5fb5b781bd0b3e3a9e3c5816fbd88b39c
MD5 eee2f99cb46160cb3ee16111159c2128
BLAKE2b-256 39215f3cb29fa81bef5ed1701bbb4bb8bfb0acd25d97af8dcaddc6d0a208974c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.10.0-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 0a20425938338a72fd6f286d6612b0d1ceac3d63ffaf0250019c0be2b1ddf9dd
MD5 97cf147380a771cb7ccfd8bdfb595c10
BLAKE2b-256 50ff6c16bf50204525d7031be9b5171e026a9fce51428f12e9f17eb101fb3376

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.10.0-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cedbe37227db5124c74a5fbd82d171383d74158c7f007cd4b9d971da6c535382
MD5 4d9c6c56c297f6f59e9a383ba318e6d6
BLAKE2b-256 753d1b392146e37ffb26f91cec4f0bbfff1a8aaab8ce14ad4477e9b1ecb56968

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.10.0-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e4f3a45ed3d8b0838aad4686c6c183f7d80cf839c8976e85a0078862188c8d0c
MD5 4f897816afae07ca435861440d54cfee
BLAKE2b-256 05a3b516f530a7a8f24df39f1f69528da6276cef30abdbc7de611881611eef10

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.10.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 074f06a1d883b5ce0236cac591d0f0eef963c56b6f9cb8dcaa13185cf570e006
MD5 9acabfcd299677a26174514709faced7
BLAKE2b-256 fe789922fc7cdb356f1a1135d4b4e2914037f84e19b3cf9c3352320762f5cea7

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.10.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.10.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.10.0-cp312-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 424cec2652ed2729ba031a8a9d18ab550137d30cf833d9e408b92731d40e4c9a
MD5 62a38b76410bbeadbcd68762e32a377d
BLAKE2b-256 b9128362661fb0bceeb01a314c8f4492769db6925922e6f16262b2373d4a3641

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.10.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 232ab0d33878aafa151214260d98bf180ebce62013de0fbb374c053b4b6a4fd1
MD5 7ea06355bbcd215f0facb676a934311a
BLAKE2b-256 96eb205d0e23a6ad2199f5ee8ea79e7c22d7b4a4d2793573dab75f11dccb2d41

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.10.0-cp312-abi3-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 29558f459fc452e663ae9e91837984a843c28f72593bb6f2215642405a4d5795
MD5 9a9efe2c29207c689dd42d363e6f7bfa
BLAKE2b-256 72186d9421c4c088412e828d0ecee683d5cb1a61c429ca166cf2f6933fa010b8

See more details on using hashes here.

Provenance

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

This release

2.10.0 This release

13 files

2.9.1

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