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.14.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.14.0-cp314-cp314t-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

m4opt-2.14.0-cp314-cp314t-musllinux_1_2_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

m4opt-2.14.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

m4opt-2.14.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

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

m4opt-2.14.0-cp314-cp314t-macosx_15_0_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.14tmacOS 15.0+ x86-64

m4opt-2.14.0-cp314-cp314t-macosx_14_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.14tmacOS 14.0+ ARM64

m4opt-2.14.0-cp312-abi3-musllinux_1_2_x86_64.whl (1.3 MB view details)

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

m4opt-2.14.0-cp312-abi3-musllinux_1_2_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

m4opt-2.14.0-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

m4opt-2.14.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

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

m4opt-2.14.0-cp312-abi3-macosx_15_0_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.12+macOS 15.0+ x86-64

m4opt-2.14.0-cp312-abi3-macosx_14_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.12+macOS 14.0+ ARM64

File details

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

File metadata

  • Download URL: m4opt-2.14.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.14.0.tar.gz
Algorithm Hash digest
SHA256 741caa8e4638160fbb54de03bba714bff8f5896c3ef6c968f56db69e5a9df00b
MD5 0f0d907f792a23c36368c095af22c7c4
BLAKE2b-256 ccbb38ced4fa8d0adc39488656771b974b8ede71b0ac6f146548b612d800e47c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.14.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ac773ab354cc857116c776ad3ad09cbb63fc85f8ec3e618418a6435e1fd23f70
MD5 0fdbebb5688b150f29c57327d13c3058
BLAKE2b-256 b4299375c55a4492f8fa92de681529882dd54434c07dd1b4acc8c999478e60a6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.14.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f0264aae5791a089b0356555325f5e14aa7a7e4e8fa40f169d859105659a8a01
MD5 108d34415a3bb694543a28a0cd9d2baf
BLAKE2b-256 92325ea9ddf520c97daea0092b064209eae8cd47f3c7047b669894ae359f0f4f

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.14.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.14.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.14.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c34e240af45f569fb73bd5a00bc4246a906b08f32d5e534312bddb7aa0115a57
MD5 e4b190978b74c60062af2191cc0f6b9b
BLAKE2b-256 4625fdce5defd516fed1e50253a145e33250f75ad15b1b420668aa1a1eaa28cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.14.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_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.14.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for m4opt-2.14.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 24d27f0d387c454a064a339f6f42b0cc9fa1f33d27b6e1c4f4362ddd41460b59
MD5 aa13f93a812cb7207e6c09a913fb146f
BLAKE2b-256 567721f8d174dc309d12e101e309b6b255ee640f7ec86da47da4802e9da08ffa

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.14.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.14.0-cp314-cp314t-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.14.0-cp314-cp314t-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 44dc8eaab89ad540469f7d3f3800d78153988639a3cf58ba9dd58a54ec3bfd4e
MD5 c0a2eabb4fc34a95ae8a0e370645d3f3
BLAKE2b-256 b30a40e61ebe73568ae000ebb7a256fcc077d50894e193470a9841b8d9d3f7c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.14.0-cp314-cp314t-macosx_15_0_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.14.0-cp314-cp314t-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for m4opt-2.14.0-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c14e6bcd99e3d5f8e3f290805ede144ac3a94811db4b4cd0c7e56ac672d7bb40
MD5 7f2ece53f34e3f71ed4111aff24d6a53
BLAKE2b-256 70838ba6d4d0af3a1d2fb77fad28921ac60b3e4dda411e6907d2b71ab9c39a7b

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.14.0-cp314-cp314t-macosx_14_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.14.0-cp312-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.14.0-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c7f24343fc6b8c99a47997ec1c36af1c5528a7db97d8e273e920c8ca6768e91c
MD5 cf9bbe3839c1d6defa002d474664153a
BLAKE2b-256 17bdc5e8e78d90f84d7389ba0c7d09442e469ead0ba59900398727d30544a8f2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.14.0-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ccab225f6617a20d1b7b790a4a20b753f1f6e6ad99d142fd1e182b4fd35b9237
MD5 f7734203c98d8cc9761dd43dc16bf4d3
BLAKE2b-256 27228a718a758a548db199135179277c3e7485ee70a552e326f0b6ca4f6e7dd3

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.14.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.14.0-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.14.0-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d823e2730d669b63a90a3da83f5f686a8f7728fa9843c4e9d5168b9584db3f9f
MD5 13934b523a32d064ac106a4102cff2a6
BLAKE2b-256 72248a1fae150fba36aa1460274a4a2deedeeadcb39c881edaf093603f970163

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.14.0-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_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.14.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for m4opt-2.14.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b7d5736aeee0300e073721780d484e43162ff2ac66a17615b344125b7c843d58
MD5 365dd76702f82fb2727689eb95185187
BLAKE2b-256 66248b27d4c56ec494a6b58cdba77893f400fe3b6e02ba45eea2fa63c88b0310

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.14.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.14.0-cp312-abi3-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for m4opt-2.14.0-cp312-abi3-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 b87c2f98d79bc597d031119d5f8d8211cbff6483e747e515cef4665fe45b3c79
MD5 4148be90f8af31a25db5f7558fa89fd8
BLAKE2b-256 ee35af2f0f9de392b6a312f7a2bdaf14aeb626ceec3bdc608b382dc404e8a6bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.14.0-cp312-abi3-macosx_15_0_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.14.0-cp312-abi3-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for m4opt-2.14.0-cp312-abi3-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 caa1d497c0ed0e94f0490943365aaab72bff9de4910c6802bb0d03b9b4fd2d5b
MD5 21de300b23fdb910609f01f3eb7c23d5
BLAKE2b-256 72039efceed5a37963b49888d9a26d38737db9da0c3141d8a67776b05afd783b

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.14.0-cp312-abi3-macosx_14_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.

Release history Release notifications | RSS feed

2.15.0

13 files

This release

2.14.0 This release

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

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