Mpatch (Python)
mpatch is a blazing-fast, context-aware patching library made with Rust. It applies diffs using fuzzy matching, making it the perfect tool for processing patches generated by LLMs (ChatGPT, Claude, Gemini, etc.) that often hallucinate line numbers or drift in context.
Standard patch or git apply fails if the target file has been modified even slightly. mpatch looks for the surrounding lines, dynamically adjusts indentation, and applies the change safely.
🦀 Looking for the CLI tool or Rust library? This is the documentation for the Python bindings. Check out the main
mpatchrepository and CLI documentation.
💡 The Problem vs. The Solution
When an AI tries to edit a file that has been modified locally since the AI last saw it, standard tools fail.
| Original File | AI-Generated Patch | Standard patch |
mpatch |
|---|---|---|---|
def main(): |
def main(): |
❌ Failed |
def main(): |
✨ Features
- 🧠 Fuzzy Matching: Resilient to stale context, whitespace changes, and minor code drift.
- 🔒 Atomic (All-or-Nothing) Mode: Pass
atomic=Trueto only write changes to disk if all patches and hunks succeed cleanly. - 🤖 Format Independent: Automatically recognizes Unified Diffs, Markdown code blocks (
```diff), Aider Search/Replace blocks (<<<<<<< ORIGINAL=======>>>>>>> UPDATEDand variants), and Conflict Markers (<<<<====>>>>). - 🔍 Wildcard & Ellipsis Support: Supports
...and comment-wrapped ellipsis lines (e.g.// ... existing code ...) in search/replace blocks, preserving unchanged code gaps. - 🔀 Three-Way Line Merge: Built-in line-level 3-way merge via
mpatch.merge_three_waywith Diff3 conflict markers. - 💡 Sub-Line Word Diffs: Highlighting word-level additions/deletions via
mpatch.format_inline_diff. - ✨ Smart Indentation: Automatically translates tabs/spaces and aligns injected code to match the target file perfectly.
- 🛡️ Secure: Built-in protection against directory traversal attacks (e.g.,
--- a/../../../etc/passwd). - ⚡ Blazing Fast & Concurrent: Written in Rust. It heavily optimizes the diffing algorithms and releases the GIL during patching, allowing true multithreading in Python.
- 🐍 Pythonic & Typed: Supports slice indexing, unaries (
~patchto invert), rich error handling, and ships with comprehensive.pyistubs.
📦 Installation
Install directly from PyPI (pre-compiled wheels are provided for macOS, Linux, and Windows):
pip install mpatch
🚀 Quick Start
The simplest way to use mpatch is the high-level patch_content function. It takes a diff (even one wrapped in Markdown) and applies it to a string.
import mpatch
original_code = """\
def greet():
print("Hello, old friend")
"""
# Input can be a raw diff, or a diff wrapped in Markdown (common chat output)
diff = """\
Here is the fix:
```diff
--- a/greet.py
+++ b/greet.py
@@ -1,2 +1,2 @@
def greet():
- print("Hello, old friend")
+ print("Hello, new world!")
```
"""
# Apply the patch in-memory!
new_code = mpatch.patch_content(diff, original=original_code)
print(new_code)
# Output:
# def greet():
# print("Hello, new world!")
🛠️ Advanced API Tour
For tool builders and Agent frameworks, mpatch provides a rich Object-Oriented API for parsing, inspecting, and applying patches.
1. Parsing Diffs
You can parse a diff string into a list of Patch objects. mpatch automatically detects the format.
import mpatch
patches = mpatch.parse_auto(diff_string)
for patch in patches:
print(f"Target file: {patch.file_path}")
print(f"Number of hunks: {len(patch)}")
if patch.is_creation:
print("This patch creates a new file.")
2. Inspecting Hunks
Patches are composed of Hunk objects. You can slice, index, and inspect the exact lines added or removed.
patch = mpatch.parse_auto(diff_string)[0]
for i, hunk in enumerate(patch):
print(f"Hunk {i + 1} changes:")
print(f" Removed: {hunk.removed_lines}")
print(f" Added: {hunk.added_lines}")
print(f" Required match span: {hunk.required_match_span} lines")
To parse a diff that is expected to contain exactly one patch:
try:
patch = mpatch.parse_single_patch(single_diff_str)
print(f"Parsed single patch targeting: {patch.file_path}")
except mpatch.ParseError as e:
print(f"Expected single patch, but failed: {e}")
3. Applying to the Filesystem (Batch Processing)
Apply patches directly to a directory on disk. mpatch handles file reading, writing, creation, and deletion automatically.
from pathlib import Path
import mpatch
diff = """... your diff here ..."""
target_directory = Path("./my_project")
# Apply all patches in a diff directly to the filesystem
success = mpatch.apply_directory(diff, target_directory)
# Or ensure all-or-nothing atomicity (no disk changes if any hunk fails):
success = mpatch.apply_directory(diff, target_directory, atomic=True)
if success:
print("All files updated successfully!")
For granular control over multiple patches, use apply_patches_to_dir:
patches = mpatch.parse_auto(diff)
batch_result = mpatch.apply_patches_to_dir(patches, target_directory)
if not batch_result.all_succeeded:
# Inspect hard failures (e.g., IO errors, Permission denied, Path traversal)
for path, error_msg in batch_result.hard_failures:
print(f"Critical error on {path}: {error_msg}")
if batch_result.has_failures:
print("One or more patches or hunks failed to apply cleanly.")
# Dedicated atomic function also available: mpatch.apply_patches_to_dir_atomic(...)
4. Detailed Reporting & Error Handling
When applying a specific Patch, you receive a rich PatchResult or InMemoryResult detailing exactly what happened to every hunk.
patch = mpatch.parse_auto(diff)[0]
result = patch.apply_to_file("./my_project")
if result.report.has_failures:
print(f"Patch partially failed. {result.report.failure_count} hunks failed.")
for failure in result.report.failures:
print(f"Hunk {failure.hunk_index} failed due to: {failure.error_type}")
# If it was a fuzzy match that didn't meet the threshold:
if failure.error_type == "FuzzyMatchBelowThreshold":
print(f"Best score was {failure.best_score}, needed {failure.threshold}")
if (
failure.location_start is not None
and failure.location_length is not None
):
print(
f"Near-miss candidate located at lines {failure.location_start + 1}..{failure.location_start + failure.location_length}"
)
5. Dry Runs & Fuzz Factor
Want to see what would happen without modifying your files? Use dry_run=True. You can also tweak the fuzz_factor (0.0 to 1.0, default is 0.7).
result = patch.apply_to_file(
"./my_project",
fuzz_factor=0.5, # Lower is more lenient, higher is stricter (0.0 is exact match only)
dry_run=True, # Generate a diff without writing to disk
)
if result.diff:
print("Proposed changes:")
print(result.diff)
6. Reversing Patches
You can reverse a patch (swap additions and deletions) easily using Python's bitwise NOT operator (~) or the invert() method.
patch = mpatch.parse_auto(diff)[0]
# Invert the patch
reversed_patch = ~patch
# Apply the reversed patch to undo changes
reversed_patch.apply_to_file("./my_project")
7. Deduplicating and Merging Patches
Consolidate multiple patches or blocks targeting the same file into unified Patch objects:
import mpatch
# Combine all patches targeting the same file path
consolidated = mpatch.merge_patches(patches)
# Or merge an individual patch into another:
patch1.merge(patch2)
8. Creating Diffs Programmatically
Need to generate a unified diff between two strings? You can generate the raw string representation or get a Patch object directly.
old_text = "apple\nbanana\npineapple\n"
new_text = "apple\norange\npineapple\n"
# 1. Generate a raw unified diff string
diff_str = mpatch.create_unified_diff("fruits.txt", old_text, new_text)
print(diff_str)
# --- a/fruits.txt
# +++ b/fruits.txt
# @@ -1,3 +1,3 @@
# apple
# -banana
# +orange
# pineapple
# 2. Generate a Patch object directly for programmatic manipulation
patch = mpatch.Patch.from_texts("fruits.txt", old_text, new_text)
print(patch[0].removed_lines) # ['banana']
9. Aider Search/Replace Blocks with Wildcards
Apply Aider-style search/replace blocks directly. The parser automatically detects file paths and supports wildcard ellipsis lines (...) to preserve intermediate code gaps.
import mpatch
original_code = """\
def process_data(data):
validate(data)
# Step 1: Normalize
normalized = [x.strip() for x in data]
# Step 2: Transform
transformed = [x.upper() for x in normalized]
# Step 3: Output
return transformed
"""
diff = """\
process.py
<<<<<<< SEARCH
def process_data(data):
...
# Step 2: Transform
transformed = [x.upper() for x in normalized]
=======
def process_data(data):
...
# Step 2: Transform
transformed = [x.lower() for x in normalized]
>>>>>>> REPLACE
"""
result = mpatch.patch_content(diff, original=original_code)
# Normalization and output steps are preserved; Step 2 is updated!
10. Three-Way Line Merging
Perform line-level 3-way merges between an ancestor (base), local code (ours), and incoming changes (theirs):
import mpatch
base = "Apples\nBananas\nCherries\nDates\n"
ours = "Apples\nBlueberries\nCherries\nDates\n"
theirs = "Apples\nBananas\nCherries\nDragonfruit\n"
merged, is_conflicted = mpatch.merge_three_way(base, ours, theirs)
assert not is_conflicted
print(merged)
# Apples
# Blueberries
# Cherries
# Dragonfruit
# If there is a conflict, standard Diff3 markers are inserted:
conflict_merged, is_conflicted = mpatch.merge_three_way(
"val = 1\n",
"val = 2\n",
"val = 3\n",
labels=("base", "ours", "theirs"),
)
assert is_conflicted
print(conflict_merged)
# <<<<<<< ours
# val = 2
# ||||||| base
# val = 1
# =======
# val = 3
# >>>>>>> theirs
11. Sub-Line Word Diff Visualization
Format near-miss comparisons or word-level diffs with highlighted changes:
import mpatch
expected = ["def calculate(val: int, factor: float = 1.0) -> float:"]
actual = ["def calculate(val: int, factor: float = 2.5) -> float:"]
diff_view = mpatch.format_inline_diff(expected, actual)
print(diff_view)
12. Format Detection
Inspect the format of an incoming patch string before processing:
import mpatch
fmt = mpatch.detect_patch(diff_string)
# Returns: 'Markdown', 'Unified', 'Aider', 'Conflict', or 'Unknown'
13. Path Validation & Missing Target Suggestions
Suggest close matching files in the target directory when a patch specifies an unknown or misspelled file path:
import mpatch
from pathlib import Path
# Suggest close matches in ./src for a misspelled filename:
suggestions = mpatch.suggest_close_file_paths("calculate.rs", Path("./src"), limit=3)
for candidate in suggestions:
print(f"Did you mean: {candidate}?")
# Validate that a target path remains safely inside the base directory:
safe_path = mpatch.ensure_path_is_safe("./src", "utils/helpers.py")
14. Wildcard Ellipsis & Path Utilities
Check for wildcard ellipsis lines or extract file paths from conversational prose:
import mpatch
# Ellipsis checking:
assert mpatch.is_ellipsis_line("// ... existing code ...") is True
assert mpatch.is_ellipsis_line("const copy = [...items];") is False
# Conversational path extraction:
path = mpatch.extract_file_path_from_line("In `src/server.ts`, replace the handler:")
assert path is not None and path.as_posix() == "src/server.ts"
assert mpatch.is_plausible_file_path("src/server.ts") is True
🚨 Exceptions
mpatch provides specific Python exceptions so you can handle failures gracefully:
mpatch.MpatchError: Base exception for all mpatch errors.mpatch.ParseError: Raised when the diff format is malformed or invalid.mpatch.ApplyError: Raised during strict patch application when a hunk fails.mpatch.PathTraversalError: Raised when a patch attempts to modify files outside the target directory (e.g.,../../../etc/passwd).
try:
mpatch.apply_patch_to_file(malicious_patch, "./src")
except mpatch.PathTraversalError as e:
print(f"Security blocked path traversal: {e}")
📄 License
This project is licensed under the MIT License.
Metadata
Release files for mpatch 1.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mpatch-1.7.0.tar.gz | 288.6 kB | Details |
Built distributions (wheels)
Total release size: 17.2 MB
Release files / mpatch-1.7.0.tar.gz
| Download URL | mpatch-1.7.0.tar.gz |
|---|---|
| Size | 288.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
063c5e7da6d02be408e9bb8d61c969597ff29fa75d8720e1c9b5c4a8eff344a9
|
|
BLAKE2b-256 checksum How to use checksums |
5ac0f1f20424dc1e27d3ee3733afb4a2b3ad0c1fb12b8a556aa20572c5b8a866
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp314-cp314t-win_arm64.whl
| Download URL | mpatch-1.7.0-cp314-cp314t-win_arm64.whl |
|---|---|
| Size | 691.1 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows ARM64 |
|
SHA-256 checksum How to use checksums |
4b6f612ed81ffea0b1fd40c7183652cb304a58087c750a51aa4a211e2ea3585a
|
|
BLAKE2b-256 checksum How to use checksums |
d02aee8fbefdfd4cd243806f0e1eacb743945a522cd07d4dca1417ef4c59d9dd
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp314-cp314t-win_amd64.whl
| Download URL | mpatch-1.7.0-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 748.0 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
54a4e9ea8377a6bf6e7fa805cc1389a2fa172c826f72bc31aa47118199998fd6
|
|
BLAKE2b-256 checksum How to use checksums |
98fdd4061395b321ff657fbd006c794dd57b0c9cf586d9ab12fa7bc80348d9f7
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp314-cp314t-musllinux_1_2_x86_64.whl
| Download URL | mpatch-1.7.0-cp314-cp314t-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
bab28147b454a4f2ad924ff0f0e605eb562ee1885359b5cab403e0f8e9b43a3e
|
|
BLAKE2b-256 checksum How to use checksums |
d737cf7a3e20c8ae57b11de07df1ff413f35dcfc49d065c68bc8dfeba484681e
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp314-cp314t-musllinux_1_2_aarch64.whl
| Download URL | mpatch-1.7.0-cp314-cp314t-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 983.1 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
10b34e97820a08920c4c7e91ec06485e1fabc334bb408f53f896d1d79cf5f59b
|
|
BLAKE2b-256 checksum How to use checksums |
84e9dd1be5ca44201b35e9814531c9db846f1de2a09add475ed0dd92fd70ae87
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | mpatch-1.7.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 893.7 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
a31154c34e8903ea2548881f6884a62dbb9d9fd77697f8d0c0c8cb37a230c217
|
|
BLAKE2b-256 checksum How to use checksums |
b7e8399b535d7dd9d74fd15b12bf8d6ef97eb5e5d655f913b9741a2188c4bfb6
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | mpatch-1.7.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 804.9 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
8835532ab4233d2692b01f1db0f7fde0f4a138af75f404b62c09f2feda56b692
|
|
BLAKE2b-256 checksum How to use checksums |
3c7e2805e0f51963b8fe106c66f10b7ce2603b500c9378ab9f4d5a1930762568
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | mpatch-1.7.0-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 756.5 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0339019793503f547dd4ce0c70fb2037e798528ffed54f0debd73f2e3505c843
|
|
BLAKE2b-256 checksum How to use checksums |
83979b714887f962add277a1f7382e6fbd14fe53616300252500397ab791f2e2
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp314-cp314t-macosx_10_12_x86_64.whl
| Download URL | mpatch-1.7.0-cp314-cp314t-macosx_10_12_x86_64.whl |
|---|---|
| Size | 850.8 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
7a76a3a4a5d0d14c6ee3d4bbb0a110feca87df61a2dd78478104b9a8bd5ebbc4
|
|
BLAKE2b-256 checksum How to use checksums |
2d005b8b428346effaa0d2494d2b838379e0b9cd0aeb792a35b12276946e5e82
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | mpatch-1.7.0-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3339b3e7d17512dd6884fefba2f4b4c824ffc45a273e56f818b7a7ddcfa17c2c
|
|
BLAKE2b-256 checksum How to use checksums |
b4aecc672aec9b6c6779c199d258e65a9e4fb43cc96c0d0f0f8cbc704f6e644b
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp38-abi3-win_arm64.whl
| Download URL | mpatch-1.7.0-cp38-abi3-win_arm64.whl |
|---|---|
| Size | 698.3 kB |
| Tags | CPython 3.8 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
1b06481d4ce836694d9777089a4f67b7e459248633ba16f4469926e608b40130
|
|
BLAKE2b-256 checksum How to use checksums |
93f3d8200be70241aad0f3374903ecf5ca1b968443128f3d5bf0f6cad9d2defb
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp38-abi3-win_amd64.whl
| Download URL | mpatch-1.7.0-cp38-abi3-win_amd64.whl |
|---|---|
| Size | 752.7 kB |
| Tags | CPython 3.8 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1bc959b2402936f1cfdd5a7d5b1817b1e96ad7b9708794b57080c5b7de67312c
|
|
BLAKE2b-256 checksum How to use checksums |
544df18986c59116d38662b8d4a8c0752d79acfcdf3b91ce8ccf2d3365acc8a0
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp38-abi3-musllinux_1_2_x86_64.whl
| Download URL | mpatch-1.7.0-cp38-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.8 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
3210dc701345a9a59b5c53e8e447e3c961953dd64a870cd34dca03eb86d6b3f1
|
|
BLAKE2b-256 checksum How to use checksums |
1dd4c20e336849cfbb3a16317f4e1662b4ce4b88f43eeb98465a863204b60422
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp38-abi3-musllinux_1_2_aarch64.whl
| Download URL | mpatch-1.7.0-cp38-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 990.1 kB |
| Tags | CPython 3.8 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
9739983a2c89b5b964d11bc761427af49aecd500e312822bb127dbda00f4a859
|
|
BLAKE2b-256 checksum How to use checksums |
64ae58273dab957aa9f53a56a9114010040317dd5c1088ec926c6541608a2a80
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | mpatch-1.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 900.9 kB |
| Tags | CPython 3.8 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
195c5a4d4eb761b21a41546a5d4c290917ea4c8865926d8b7b59b81a27345292
|
|
BLAKE2b-256 checksum How to use checksums |
05b47bf5015ed92eea9652a2a1c8fc6086d4339cf2cdca709f153562295b391e
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | mpatch-1.7.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 811.6 kB |
| Tags | CPython 3.8 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
3554e99cb777d29dc571d738fe9dc69a49d5de21ce6cc69ca845f969e4a2d8d6
|
|
BLAKE2b-256 checksum How to use checksums |
16cfee873a1f8ee22dc0fb3f44120624d6e980544eab008eaa4c4e7e35f2cae3
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp38-abi3-macosx_11_0_arm64.whl
| Download URL | mpatch-1.7.0-cp38-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 763.2 kB |
| Tags | CPython 3.8 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b45bd8c9ea5d49f80651f6acfcb30c56c5ec08dea56733552b4a5cff5dcbd3fd
|
|
BLAKE2b-256 checksum How to use checksums |
64ef7c87d871be5c33e397d9bae18f476e5e6b7d0fa9a16d5eda1bcc2f9fda9d
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp38-abi3-macosx_10_12_x86_64.whl
| Download URL | mpatch-1.7.0-cp38-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 858.8 kB |
| Tags | CPython 3.8 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
be6bfbf512df8408773d834b711ec5ba7ff714b06f379ac8c995311b5441bf85
|
|
BLAKE2b-256 checksum How to use checksums |
d6f8b94c4ff48315b126af9293950023e5c078ed0a305279e7d1ec65ba75a3ac
|
| 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 12, 2026.
Transparency logRelease files / mpatch-1.7.0-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | mpatch-1.7.0-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.8 abi3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
fc6800225509c8bb8cb5181bd72f6991bfae10e6262865104369671112cf66b7
|
|
BLAKE2b-256 checksum How to use checksums |
a4c9abd13d9c100c0c4f9def888daa83feb83d4b632a10f99cd38569dcb98e6d
|
| 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 12, 2026.
Transparency log