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.12.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.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

m4opt-2.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

m4opt-2.12.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.12.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.12.0-cp314-cp314t-macosx_15_0_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14tmacOS 15.0+ x86-64

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

Uploaded CPython 3.14tmacOS 14.0+ ARM64

m4opt-2.12.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.12.0-cp312-abi3-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

m4opt-2.12.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.12.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.12.0-cp312-abi3-macosx_15_0_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12+macOS 15.0+ x86-64

m4opt-2.12.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.12.0.tar.gz.

File metadata

  • Download URL: m4opt-2.12.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.12.0.tar.gz
Algorithm Hash digest
SHA256 0ea4a544419a5600fafb7a770786a415d43446d2ab1c53309600c5342188dbd1
MD5 79b6eb0aeea81d12553897559cccc005
BLAKE2b-256 cb6e93dd7031d8a354bf6849ad0fa1c44a0851c85c226c54d4fd544a44faf1a7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0a0933da5473de759db2d715699a0366eca6f97b5bd79a33d1f913a59a98fb98
MD5 f71cf0e363a10ade597c6b1c864467db
BLAKE2b-256 82a6044930793a165c40926c0939e8c7f4fd4c20bd5dad2a6a6c2e18a65548af

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 06f5329b215bbcd0f411a6d70dfdc7b92a4cab6fb3dd67a63d65987db2ca49d9
MD5 36b8228aeaf93e616baa4d72c0ff531f
BLAKE2b-256 467afc51ae68677a45b1225a45bee5020fc497669cd85fb5103df6f46d766cb0

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.12.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.12.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.12.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 40ede5ad41fc13b2b3df2585a2fb2cca1077f4ca99fdb95f167ab47cb85b5f86
MD5 7d6b42e54df9e741e85cdd1a8565e1a0
BLAKE2b-256 9c05fc5115c494b4e74543d71ed602c42a250312e8712afda3f7d194ba2a7e4a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.12.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a7d4acc3ae8f2b8ff7458f6ceb00e63c234734bde0842f6e5b949fde7f7925f9
MD5 2c846c541be0494955a2e88fce600bf0
BLAKE2b-256 46d0f89c0ee7c36f2e92f8be8faa85e063abfba8932ed8b7afe39b2665e1468f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.12.0-cp314-cp314t-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 de3d582a0dcb93cb1e43797c8508ac84509a364e895a479978974c5b087c0315
MD5 679ff50da961dd3e8ba86f5ca083a88a
BLAKE2b-256 7082f9ab8feb8f96e0105b640e7e424e12e8ef9959bbb1d3b715c99dbfaeb5ca

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.12.0-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a619c70d1a662b11c056b144b149695191d6e1732e28c5e0a18bdd325538254f
MD5 1a02668081f36336a538721a3388c756
BLAKE2b-256 38e88a972e39b2a48e530a692bbfbb721567317fe3e1b1d81473e9e2a13e0846

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.12.0-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c4252a393e94feaa9bdfd3797b9ffec9829d89fa2dd0eeb55a87f437fb706c94
MD5 2919d3faa4184411e982eab1b94f847e
BLAKE2b-256 d40cfa6cdeac6b562a018c73c5e392eb6a287050f99b3560b88c338a4c37f6cf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.12.0-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 47550a332c17d9c6896257312f3004f5c81015fd92c4af043f3850faa131ffa9
MD5 0dea637ef52a6ea9fa206a0a05f5c328
BLAKE2b-256 1de33b0092698c8362acc4950dab946a9178fdc150ec1254435919afa72a5548

See more details on using hashes here.

Provenance

The following attestation bundles were made for m4opt-2.12.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.12.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.12.0-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 729c30cc72df5ea33f3b1df005fe868c2d92aada7c8d5dfa0a095b357cc0aae2
MD5 1196fbe08e0777a1e5ac3cfd5d3575c7
BLAKE2b-256 640df689661d408fa7cb7ee0250f06022f257f9763d5c3ad9a8f57887ac73cac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.12.0-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ecb1dd615f05b85939b7794da329fd27aaecbfc840e476314d0015cf2b398ea0
MD5 976143c6f8d65990e944f6160d5cc84b
BLAKE2b-256 f3d5db44ec1c56c7100f4ec047377587e07654b8bb9a24402631a70c63ca02ba

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.12.0-cp312-abi3-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 0554c7760381d27d67f56e6572562060a0761892a067902eb0630d7d161d225c
MD5 da2c0d4fce695bb25a3fbb6d881cb1d5
BLAKE2b-256 cea1645293754c0fac2f177d2ffa83cbebda1e021cb864bf581c38aaa6047f1b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for m4opt-2.12.0-cp312-abi3-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c03d301b17c6c18813e0f201ac7b99e6440799c3f3de3245c227ceb44bea556c
MD5 ba1ee8366e1355146d2a8f400bd26c0f
BLAKE2b-256 b06fff44ab579f162fb7fd9fa1a848af694cb26cf0d501e96c3a7713e4e0fdcc

See more details on using hashes here.

Provenance

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

2.13.0

13 files

This release

2.12.0 This release

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