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

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

m4opt-2.15.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.15.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.15.0-cp314-cp314t-macosx_15_0_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.14tmacOS 15.0+ x86-64

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

Uploaded CPython 3.14tmacOS 14.0+ ARM64

m4opt-2.15.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.15.0-cp312-abi3-musllinux_1_2_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

m4opt-2.15.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.15.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.15.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.15.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.15.0.tar.gz.

File metadata

  • Download URL: m4opt-2.15.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.15.0.tar.gz
Algorithm Hash digest
SHA256 40bd49d7497750befd4739f76b0eb679133a6a5eae9514993748271362d9c561
MD5 0a2d5518c3f7197277e50c0d438436d3
BLAKE2b-256 a2ad8bbc8722c7158d07394b1497fa2a7a68464593d824fc42fada454bfaa55c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 94f14e7111751760c72f53439c215d9926ae74b34b8f12ab821ce235d25567d6
MD5 06d4fa5226ed88dd35bba550153440f6
BLAKE2b-256 ad4a17bbe49b96b00791c49714a48c89e3d430eaefb071fc77903dfbf187309d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c4f8dc1b8891b235cd2f68dba2f2b81432c20d374b717ca2d3e0a195da461672
MD5 9701c1dd88411eaa13cd3c3bfc017c28
BLAKE2b-256 beb98cdf0cdc88761beb2187c71f129f13d4d7e9e530567182a165600d0d49c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.15.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.15.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.15.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8389eedb39b3c49fa4657264f4a4e2b8d512eefa648a073ff63e6c77652c8f93
MD5 a2376a241885a2c563d39847b08b1775
BLAKE2b-256 709421298d9688bb505281230bf84c4e40b9319e6bf4e59940cb4eeec9f7c112

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.15.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 43fc3277dfc76a433084646969b7077721124ca63b3763e91baa5ecec2fd6d30
MD5 0f96be90670fd8b9da4f63072ab50eb0
BLAKE2b-256 77e935975f0630ee26728dd358db4fdb5aeb292ac6e18d5417a94c2317d1f5c9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.15.0-cp314-cp314t-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 da1152afe9106c4f19bfde603b07d86fa03649231857b17b6b629b231e8bae75
MD5 7c05d8ea7c642f62fdf46030fbae9512
BLAKE2b-256 7d70610f25eadb00d830ce5f3bb26f7786f2ae8828927c3fc48c18eb0ebb6224

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.15.0-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 fcb5ac3e24285ba8c89724fd9677ea81fcc337908bb1136808b3aab461df1509
MD5 e355454bd3fa4178735b100f20421fc3
BLAKE2b-256 58cd82c84558e6a2dff876b6141ac8c9acfb4a169a32ece40aa95893ae171eac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.15.0-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 166f6a13e6f90c313f838d8b853f2bf6f3c4c0d5386e17df2ea406ad57dec757
MD5 e689ac2ccaa448f1621b9c8e3574329a
BLAKE2b-256 31bba5c09822edf1de66c91243750380a857b568c92315a8dc569b684130e329

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.15.0-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9b322592d8b4f0ab1df350cff308b45d05b48abdd4829d61e6e153152163e21c
MD5 8146901282870433bb7faca999932445
BLAKE2b-256 6c533bfaa40c4f7e0a3dd43971cd1d734dbd34a074942aa43d7747fe7d3008cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.15.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.15.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.15.0-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0e5489f91d0fd82ebcdb137b4dd12240b5507a365bc0a1c53a3182decd6dc183
MD5 9b82630a2141456de5dcc03c2063899b
BLAKE2b-256 f1d47c7f5ef6e5f3499143c3c2a2ce866b6ee78eba4b6736bce410377856c78d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.15.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 905f380d822b7ff894e61d0473bb175915319f88444860386fd33cb79cd07410
MD5 e06710c4b7b6e4769b298266f718cfae
BLAKE2b-256 f829ac0faa2d02421d185ac5779f01d850809dc7447f3ce8743bf7aaed04c272

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.15.0-cp312-abi3-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 9907f5f4eadb2225712c3ffd567a125998a4f2deea0b00a8e972da17bcd8eef6
MD5 7dd1567b54a1a2838c016492fa7b8df2
BLAKE2b-256 4ced34b28ba54da531bc153976f5f0a6a58d2bc0939f036bc599296ff62057c6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.15.0-cp312-abi3-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 15fc1a1a62a782ac0b624ac175ccc556baf421a2389ee05d809887cde393cf82
MD5 f92a9b5a766dd9d7e65c2e6af01cd0c8
BLAKE2b-256 a0cac407aa6b7c2ca53ef6f15203f0987f53ae6ad68ea722dd4670c4bc825d56

See more details on using hashes here.

Provenance

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

This release

2.15.0 This release

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

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