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.

Metadata

Release files for m4opt 3.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for m4opt 3.1.0
File Size Uploaded
m4opt-3.1.0.tar.gz 1.9 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for m4opt 3.1.0
File
m4opt-3.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details
m4opt-3.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 Details
m4opt-3.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
m4opt-3.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
m4opt-3.1.0-cp314-cp314t-macosx_15_0_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 15.0+ x86-64 Details
m4opt-3.1.0-cp314-cp314t-macosx_14_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 14.0+ ARM64 Details
m4opt-3.1.0-cp312-abi3-musllinux_1_2_x86_64.whl CPython 3.12 abi3 Linux musl 1.2+ x86-64 Details
m4opt-3.1.0-cp312-abi3-musllinux_1_2_aarch64.whl CPython 3.12 abi3 Linux musl 1.2+ ARM64 Details
m4opt-3.1.0-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
m4opt-3.1.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 abi3 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
m4opt-3.1.0-cp312-abi3-macosx_15_0_x86_64.whl CPython 3.12 abi3 macOS 15.0+ x86-64 Details
m4opt-3.1.0-cp312-abi3-macosx_14_0_arm64.whl CPython 3.12 abi3 macOS 14.0+ ARM64 Details

Total release size: 24.0 MB

Release files / m4opt-3.1.0.tar.gz

Download URL m4opt-3.1.0.tar.gz
Size 1.9 MB
Tags Source
SHA-256 checksum
How to use checksums
301f0dc3017655563e75102b14a09a6e9df5462d15b49dd0abce20772992deea
BLAKE2b-256 checksum
How to use checksums
d43c29791f7eb1eed85a4bca4a7705275d921afe6e904099e45a0fd94d7ab574
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / m4opt-3.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL m4opt-3.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 1.8 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
b16f46a81f5104615d414836038b6ec1cd304713fe013e052abac5459d9a3cb4
BLAKE2b-256 checksum
How to use checksums
a0aa5156dee92c26370aa43a0def62d2bd660769ccfce9e1a3a60871d410d70a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / m4opt-3.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl

Download URL m4opt-3.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Size 1.8 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
20ae2a79a4290fb78fd54150937144cd543171779f799e8adb5668aa4075b286
BLAKE2b-256 checksum
How to use checksums
dc5302786264a8ff9b0cc1effc3d18c9f6fa0cb84599cd1484843cb8abf0cc3f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / m4opt-3.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL m4opt-3.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.8 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3c43af7ebbcc3c1480c80a76abd0812c72147cc4bc2e685747fffdc10b7f7be3
BLAKE2b-256 checksum
How to use checksums
18d5a38eba649d98f5526780429575453ef50278ca4e3c61203abf33d9dbf0bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / m4opt-3.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL m4opt-3.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 1.8 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
74f3c97013e2e570082b6f7efc50ba55c0d5a06bcbf08febd4d91d0f7ab8e759
BLAKE2b-256 checksum
How to use checksums
c22d8ec36282f5c6c6b15d491159d19f053531d4ec5b1e92ce12ca30ce55cd03
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / m4opt-3.1.0-cp314-cp314t-macosx_15_0_x86_64.whl

Download URL m4opt-3.1.0-cp314-cp314t-macosx_15_0_x86_64.whl
Size 1.9 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 15.0+ x86-64
SHA-256 checksum
How to use checksums
e7bb4219132603e7273de0f24662caac04c2ef8132204cd3dd88b295ebdc39ea
BLAKE2b-256 checksum
How to use checksums
1735c907631c27fb4d708346a796d731d16b44a81b8a50d6ef37c1a51ff75527
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / m4opt-3.1.0-cp314-cp314t-macosx_14_0_arm64.whl

Download URL m4opt-3.1.0-cp314-cp314t-macosx_14_0_arm64.whl
Size 1.9 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
5588570b84c4d877988bb32d1954bbaff9ca8f5a53205b931c0db0c63e64e7a9
BLAKE2b-256 checksum
How to use checksums
e5a578ebc02a16a8e0d5e796e70f7fd1c9f1e5a031cc87920a3a4c06f8e36e1e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / m4opt-3.1.0-cp312-abi3-musllinux_1_2_x86_64.whl

Download URL m4opt-3.1.0-cp312-abi3-musllinux_1_2_x86_64.whl
Size 1.8 MB
Tags CPython 3.12 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
c6081550ca66120cc0f7b71c1212e20cf2155522adfc2aa17cd4215bdff8fc2f
BLAKE2b-256 checksum
How to use checksums
d5f0361132573b470aac14c54b4002223977d14294429f53cd444458360d7661
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / m4opt-3.1.0-cp312-abi3-musllinux_1_2_aarch64.whl

Download URL m4opt-3.1.0-cp312-abi3-musllinux_1_2_aarch64.whl
Size 1.8 MB
Tags CPython 3.12 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
11928ba7823211069ff2747536eb19d15af264c7e9a58a03124be4d4e5a45054
BLAKE2b-256 checksum
How to use checksums
59d1d92df7685058a7e457d2483e3cfb616f7ed277f860ec38cf308f42f34894
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / m4opt-3.1.0-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL m4opt-3.1.0-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.8 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
f90415d4149551334b544ea782bf8bfa02f1f62fae05983d7b944198b621b329
BLAKE2b-256 checksum
How to use checksums
6c612cf4afa66ca2861d40c386768ae3ade99e91324b9d11051f3fb541e180a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / m4opt-3.1.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL m4opt-3.1.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 1.8 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
cfc15c786460fb9f8b2d60300bb98fbb30cb4fb728b048da123b4b23cdc02b65
BLAKE2b-256 checksum
How to use checksums
0e31856dbf80f434be29e904d255bec7bfc304b0dacba1b299bda39879bf582a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / m4opt-3.1.0-cp312-abi3-macosx_15_0_x86_64.whl

Download URL m4opt-3.1.0-cp312-abi3-macosx_15_0_x86_64.whl
Size 1.9 MB
Tags CPython 3.12 abi3 macOS 15.0+ x86-64
SHA-256 checksum
How to use checksums
717ee0ab14d610c3833c6fa6dfcd98c18b3754768de75f0890e1c6c7670080e1
BLAKE2b-256 checksum
How to use checksums
d46f7a3c468d44305ef4dbcc38fc8d8ba29dc70868932671c5d500f773f06d9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / m4opt-3.1.0-cp312-abi3-macosx_14_0_arm64.whl

Download URL m4opt-3.1.0-cp312-abi3-macosx_14_0_arm64.whl
Size 1.9 MB
Tags CPython 3.12 abi3 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
874e7296a5c77b5549184511714468c1621b0d64b43107b471130dfbe8e29372
BLAKE2b-256 checksum
How to use checksums
d1cf9f8f1dc8fcbc19221da5050017f9f5ecd473d0a736548c060b469bf26510
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.1.0 This release

13 release files

3.0.0

13 release files

2.9.1

13 release files

2.9.0

13 release files

2.8.1

2 release files

2.8.0

2 release files

2.6.0

2 release files

2.5.0

2 release files

2.4.0

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.0.0

2 release files

0.1.1

2 release files

0.1.0

2 release 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