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

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

m4opt-2.11.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.11.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.11.0-cp314-cp314t-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14tmacOS 10.15+ x86-64

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

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.12+macOS 11.0+ ARM64

m4opt-2.11.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.11.0.tar.gz.

File metadata

  • Download URL: m4opt-2.11.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.11.0.tar.gz
Algorithm Hash digest
SHA256 d2824ceef6355765e9e61e31b4573396300b6fed665ac12b16145b818f2b945c
MD5 94ed0b292588a22d0d382d920d6ef91d
BLAKE2b-256 cade1ac5cb17f15934181a5f3dd0d94835bda336ed3aa34e6ce9937be50e646f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3acc7cd9f888f47d51f078824c61a62202a9e80111631399a2aab9a7fd8564fd
MD5 64668e67d8aad9289d1699a536aa4266
BLAKE2b-256 fae42f7781a4310456f13467603f4d83cac34e3fa57c59c865fbb25a3ac898ac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.11.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a56215b0fba84da39d06b8158e8ec8b940374510d57053a963f394be632ec330
MD5 6c49f56bd6f8b9ba5781210de3cd65c3
BLAKE2b-256 78d379d4a8fc3d1a128953b932e59b683d4c7431455c1d4ec6a3b95e7bc45591

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.11.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ecb648d39fbbc4d387d83a32679cbdaaa7cce0ac986c9b398961eada134913ea
MD5 f5ffc647145cb4bba7a6fd4485d830a8
BLAKE2b-256 79a010e203903b392c746472bcf783c7631f3cc8da907070ec6ee522af0c7d49

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.11.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.11.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.11.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 c24c56477c743a0d827b35543262e547020a49795d91719d60cbc4a8b15b91b0
MD5 a252b955f790ad720fa4563ca385bf4f
BLAKE2b-256 1e5834787131e3f56466bef3920624c508b8a4e5b874b8b08afde09316eb14b9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.11.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e005f91da1ec899e4991cc841441d6bac790c69378c04a12c946c194a1ee7c76
MD5 8a11b3eaba5632b7e3c4cb4ef58ee16c
BLAKE2b-256 137748cb9faaecdcf9fe53e597280c776d9117ce751bb202b345fbc9a6ac9880

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.11.0-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 72f20f717c5446dff57852c4265350c6e5b1f1e279ed2013d48022aeadabde0c
MD5 088ba4cd9ac413edb1fc35d56ca79644
BLAKE2b-256 06053d5a38f081efe8c4a51ad8084c5759536c08dd18a63b388de7bcd5781116

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.11.0-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b6e9d631939c446e5caf228e379ce0b7af4118bbcbe77d608e92f98241770d52
MD5 2dd8f523e61d65b3a669cee66b629468
BLAKE2b-256 22a08f4b9b24740075358e2e1af525309155cbc22616a048a897159be7e9ee58

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.11.0-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5d12efe0c3c7fbe989971396665abe58b6fdd1c949209a541649ec8b9ef112b7
MD5 d3c57ec12f978995ab4421c8ee26f1ea
BLAKE2b-256 6a353cd0c6d10dcb5e94b03a752c46840600ae83cb97fb9be3876bed092adb9d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.11.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1aaca9ecd5eab03ca0a21ade6ca115de991dd55a60fa437d9a2b9067b8b02538
MD5 368e7ef190d1c27efb1b0115d701214b
BLAKE2b-256 35ef46913a985e48f76086a9ead1f93d6920630f704599ae6f045fa70181b0f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.11.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.11.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.11.0-cp312-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 1b2f20af205a1cc189f6cb54964a3b89a332aa7dec1f0773a07e9de555cadeb9
MD5 0a33f7268c7ecb56528d97e76554f963
BLAKE2b-256 cb27f9b0c6061483886ac11acbfed97256b330038360156b7bed6acc0532854a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.11.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a5808c7821877bd348739d099d6d872268a93b7e2c8ecceff148de9b0f64c661
MD5 1211dad3876657564e4ebf81e4d0c95f
BLAKE2b-256 62af0ae87d665bb2f9340b12d16e9c45e776aa39683ab461311314bcf12a5790

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.11.0-cp312-abi3-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 78ee63be06aaf97db2727c89e3c8ede8a318aec1e69bf61b569cb0c6925712fa
MD5 6ceb5959e4af696de5b96e1382484064
BLAKE2b-256 736cc87a44e8b24fae2c4d16c57593d1598f8cc68130b36cc8c2297045ec4129

See more details on using hashes here.

Provenance

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

This release

2.11.0 This release

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