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.13.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.13.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.13.0-cp314-cp314t-musllinux_1_2_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

m4opt-2.13.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.13.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.13.0-cp314-cp314t-macosx_15_0_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.14tmacOS 15.0+ x86-64

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

Uploaded CPython 3.14tmacOS 14.0+ ARM64

m4opt-2.13.0-cp312-abi3-musllinux_1_2_x86_64.whl (1.2 MB view details)

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

m4opt-2.13.0-cp312-abi3-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

m4opt-2.13.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.13.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.13.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.13.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.13.0.tar.gz.

File metadata

  • Download URL: m4opt-2.13.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.13.0.tar.gz
Algorithm Hash digest
SHA256 99bbae2dc564556397badfe9be33ab831cf510c8b6cb6cfd9904ff9b7bf08b8d
MD5 9d0b453890074e243b6b75831843a6d2
BLAKE2b-256 100044c3fa327faf2bb0783acfac8732bc5cf8e0df182920bb6932564a40b0c9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.13.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 34904b92e2f3a773aee9048ce2c7f2b4a6f2947668bc064454d768c5f9101583
MD5 c03f02c26a1e3ddbafb32adefab2cbcc
BLAKE2b-256 374d633e15aed9c8a14a6107c410d1f6cbbea977d84646bc0818d1837f4370da

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.13.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 2c66ed1607235d85bd1e74760971965c5c3ce31abd63ea21306fd8dab4ebd11d
MD5 f548ca8258ebbca99d28e28da1b04940
BLAKE2b-256 0d5d0acc3e261fcfa493c2872251ed94e938d37e8ac75f6caf7d8200cd47f5e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.13.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.13.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.13.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7c7d9adc01bc8430a63c690cb8c95ad994cc7eabbbb9555041842476dabbd22e
MD5 f59068db624df27c8d783f02ec2d724b
BLAKE2b-256 920a63a351e2aac2e8078946675610d1431302bd9020875bbe3ff909e5d848bb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.13.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8710766756db636d3a8de7263ddbf564ebdeb39f6c60219075446794dcac4f50
MD5 c1a291ab3af25880c86f5ee69c32eb2b
BLAKE2b-256 e435f26d44b2533902129d0dfe1f3bdf3f3a6acf0b6ee88160b4aba82594a0c9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.13.0-cp314-cp314t-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 f003d03e3ac1566b4de675253baf771922e48c1a6c2d636e191749cb05af54ca
MD5 0004fe1896c762129422ce82b2c8c85f
BLAKE2b-256 ebf33dd636f56cdea96c414c4f6ee13e091574c0f503c48fe823dc8397ee7a0b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.13.0-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 666e864753d647cb0024d87958020c5e105d0ba9cf90238a6a799ba81443e356
MD5 f62d1de038e3ec407a19ea3350ca99b8
BLAKE2b-256 1b1106f25f7d4dadfaf14c145981998cfeaec8fe20d12eba49dc619bf2f04d69

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.13.0-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cc93cfd7f799617a6c50f7511f75b5ed61730f74af113fbfa72845a1c842ec9f
MD5 379febfa370a9859cc29a45ff2a02067
BLAKE2b-256 13752a9329c38836fe052cfed43b70bb012520b67bd413e93a2e8047b0d047dc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.13.0-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7265cd82822e759d6dd0be8642f89bc01ef8cb29d44a40abbacbb118b45ee2eb
MD5 c4fcd8240711abd93754abc20a640584
BLAKE2b-256 b556b2b96b580b8096b95f001fe35357ad8362d991d7b450821d6714e99c2800

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.13.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.13.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.13.0-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d1c6a3196e17a29559beefc92cc970018475cfc1fe9b54d0e014a4a1a50afc14
MD5 89e04a1f7177e8f3e4a5a41eed2f23c3
BLAKE2b-256 20eb5898376a65f4839798bfb5977151f93fdfc8ec32f436ac4fe3c40ea27815

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.13.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3ab1da071df912230e7e1ec33a523f7d62b67c2d0e0e13ec4c2540ee66df0e93
MD5 2756e1dc7a7bbb2ed55f26835da4150f
BLAKE2b-256 67035434b91efa15787bf0d00aac36f63d797cdeebf28af6bdbeb2b3629fca9b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.13.0-cp312-abi3-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 4077a1c07b6c439dd185fa30d0490e4dc11a22777834677c747e0ecb5cd6182f
MD5 32c6d8cbda61edc87e22a57e43e5c73d
BLAKE2b-256 3f044296bd17c2a16e92383cc3aa27c84998b5166d7560140e3f94bfc3bb72d8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.13.0-cp312-abi3-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 4a2f2aef6ba1c744a66c4230414b71a530ecabf65ffef2ab839e7638884d0846
MD5 2f399b438b6972433f31bdb852e95228
BLAKE2b-256 e029ea3cdcae77a846ff4549f46c8a9d8e140fee022fcf23690ea888f6a5e2d2

See more details on using hashes here.

Provenance

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

2.14.0

13 files

This release

2.13.0 This release

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