Skip to main content

A smart, context-aware patch tool that applies diffs using fuzzy matching, ideal for AI-generated code.

Project description

Mpatch (Python)

PyPI version Python versions Type Hints License: MIT

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 mpatch repository 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():
# Updated comment
print("Hello")
 def main():
- print("Hello")
+ print("World")
❌ Failed
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED
def main():
# Updated comment
print("World")

✨ Features

  • 🧠 Fuzzy Matching: Resilient to stale context, whitespace changes, and minor code drift.
  • 🤖 Format Independent: Automatically recognizes Unified Diffs, Markdown code blocks (```diff), and Conflict Markers (<<<< ==== >>>>).
  • ✨ 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 (~patch to invert), rich error handling, and ships with comprehensive .pyi stubs.

📦 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}")

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)

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}")

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}")

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. 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']

🚨 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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mpatch-1.6.4.tar.gz (143.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

mpatch-1.6.4-cp313-cp313t-win_arm64.whl (317.1 kB view details)

Uploaded CPython 3.13tWindows ARM64

mpatch-1.6.4-cp313-cp313t-win_amd64.whl (343.5 kB view details)

Uploaded CPython 3.13tWindows x86-64

mpatch-1.6.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (447.8 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ x86-64

mpatch-1.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (415.9 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

mpatch-1.6.4-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.whl (449.5 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.5+ x86-64

mpatch-1.6.4-cp313-cp313t-macosx_11_0_arm64.whl (380.1 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

mpatch-1.6.4-cp313-cp313t-macosx_10_12_x86_64.whl (417.2 kB view details)

Uploaded CPython 3.13tmacOS 10.12+ x86-64

mpatch-1.6.4-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (776.4 kB view details)

Uploaded CPython 3.13tmacOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

mpatch-1.6.4-cp38-abi3-win_arm64.whl (318.7 kB view details)

Uploaded CPython 3.8+Windows ARM64

mpatch-1.6.4-cp38-abi3-win_amd64.whl (343.6 kB view details)

Uploaded CPython 3.8+Windows x86-64

mpatch-1.6.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (449.1 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

mpatch-1.6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (418.0 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

mpatch-1.6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl (450.3 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.5+ x86-64

mpatch-1.6.4-cp38-abi3-macosx_11_0_arm64.whl (386.4 kB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

mpatch-1.6.4-cp38-abi3-macosx_10_12_x86_64.whl (423.9 kB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

mpatch-1.6.4-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (788.8 kB view details)

Uploaded CPython 3.8+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file mpatch-1.6.4.tar.gz.

File metadata

  • Download URL: mpatch-1.6.4.tar.gz
  • Upload date:
  • Size: 143.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mpatch-1.6.4.tar.gz
Algorithm Hash digest
SHA256 eb2e4655a4ab3d18a462ec49c82eae9d9e08211553226ab7052dab530ab48c28
MD5 daf0a068ebfc037647fc50da864a0947
BLAKE2b-256 7726d940e5c8ed15af38bd7a88894c59b5fc953d2b58be7690df3b3dbe040972

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4.tar.gz:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp313-cp313t-win_arm64.whl.

File metadata

  • Download URL: mpatch-1.6.4-cp313-cp313t-win_arm64.whl
  • Upload date:
  • Size: 317.1 kB
  • Tags: CPython 3.13t, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mpatch-1.6.4-cp313-cp313t-win_arm64.whl
Algorithm Hash digest
SHA256 6cbaf8f757c45a7f79fd24a95676e2fca5a79d402ecf44e11e3224b238ff2778
MD5 874058f2747dc501ecf95f62a059a866
BLAKE2b-256 36351078465d9c0007c1a97765c6067b572a89bcbc8e7f5c25bb93a466cb56da

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp313-cp313t-win_arm64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp313-cp313t-win_amd64.whl.

File metadata

  • Download URL: mpatch-1.6.4-cp313-cp313t-win_amd64.whl
  • Upload date:
  • Size: 343.5 kB
  • Tags: CPython 3.13t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mpatch-1.6.4-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 16598393d51d1ea67155354ed26059e49bc5c2636d0f86fe3465a30f02d5aee6
MD5 196baf55c3d54f81e72befc21b9e3a46
BLAKE2b-256 78d1739c3ecad89f8b3ef71f74ef447dd9ac80558359ed06c567eba241d22c8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp313-cp313t-win_amd64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mpatch-1.6.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 21a4bbccb1ef94bfaf2f0f3d6ceff12335f5a1f7e788fe1ebd186ba0c70d1123
MD5 d86f760938136b7c1d5dd01dceaa70c4
BLAKE2b-256 3d078c0f70f3f89013d799b2cb4e381d94d20bf2b005717cc557755aa8f2db5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for mpatch-1.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e8419f6333cd079504f89f4cf7958425a9fe855a224bed2f3e0783f9ee21685e
MD5 fb60d1f2a4f9124d079c53fe3671a1e8
BLAKE2b-256 740533b30b9af69620f9ffc319b853e159506bddad2ba6aab45c2a8aafc2f219

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for mpatch-1.6.4-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 ac4ec3628f404c43948725a2a268fa971bd285aace341cb17e705747fdc316f1
MD5 f1a884e57093de5f0958f71abff83cbf
BLAKE2b-256 5f7a5648b37ae72d22159db9ef10d51e5704e4266dbeb9d538d99d9d3d640ca6

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp313-cp313t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mpatch-1.6.4-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a8c0f8e0424ec4d0c22c9aca4fce3898285f63ead376d624dc9243ef7704c9a1
MD5 c98b41358fad144ea78d92892ae3a36b
BLAKE2b-256 43f415f3c945efcd2a54d10aed881cbec1991bf9debfa19faaaad8646bb2e673

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp313-cp313t-macosx_11_0_arm64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp313-cp313t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for mpatch-1.6.4-cp313-cp313t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cc5f8b761e1771d957c4fcbbe6bc1d31748b7814b18670018b445480daaef9b8
MD5 66ffb00852f25051b3215ab1be262f6e
BLAKE2b-256 2869d09f181a5dd262cefbdbad8a244d621cba402fcb118f404cccfd877ff5f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp313-cp313t-macosx_10_12_x86_64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for mpatch-1.6.4-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 84f1894a9c9cbb24bd6f94a1fff8623cc948f250228524f96872115354925485
MD5 3e369f574412b4bf49a741bab194ce54
BLAKE2b-256 0c783af0adeec476966bca0b66df36415b229bbe64cd1224017c370751b6ae05

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp38-abi3-win_arm64.whl.

File metadata

  • Download URL: mpatch-1.6.4-cp38-abi3-win_arm64.whl
  • Upload date:
  • Size: 318.7 kB
  • Tags: CPython 3.8+, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mpatch-1.6.4-cp38-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 6d916c7140e73b913908932b217f555c15624d0e4a9468e78ef2e57c60dcd9d2
MD5 1d558a1f1f0d16bc89da48ea3c52ecaa
BLAKE2b-256 4225075ea1a84afae8536d4bb94a8f196047a2768f354733a1bfa661316d02fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp38-abi3-win_arm64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: mpatch-1.6.4-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 343.6 kB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mpatch-1.6.4-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f8d4da308925ae68057c53d5d771a18c233d0082dab467fea84dfc630b210152
MD5 02b6d4abe00d675d0dfc937654145afa
BLAKE2b-256 af875130e55735913c3ac8f7905dbc1140cb223c9e5e58d6fa8a0f902dd9453b

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp38-abi3-win_amd64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mpatch-1.6.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d5c3fe5c9405470dd6e0d2d8eb6238e15b1651d156d11599931e0b7965c345b0
MD5 f0707070d52b8dc473caa7c1f542c9c9
BLAKE2b-256 99826aa23b0cb6e64ba81e9a0ea12dd8857500b119964459c6b18a9b5dae9cdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for mpatch-1.6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cd66a3562424207297f993e74d03cf0fbd85abbc38f679f0843808aeeee9b896
MD5 4b1dbb01a199096d9fbefe769a6b52d8
BLAKE2b-256 e65e8c145c02b104138d31cefed1ee6f807a5c779f058b2604fc5373ce7f3f5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for mpatch-1.6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 5c82be10090759cece4c415581f11cf5b9f421b65ddbe4f839127934b1996e05
MD5 af155644d4975ff549bec7fc02e80b10
BLAKE2b-256 ec1f08b9120852e12b7b0b20d5726d955c5dd9e58f3e84a6b081b41565fd22bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mpatch-1.6.4-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bf919a3f2003d588f69f9f0a873305799a301f43b2ab718ce0c13286d907b4d7
MD5 3d07e66965c89150e14039af446b82b6
BLAKE2b-256 905a635870ce46fe2967c12883287ada8c5675e0cd453c6d893056cf81893db5

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp38-abi3-macosx_11_0_arm64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for mpatch-1.6.4-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3fe9e06ef3f4640005839efde91fe056cb432c267e22136441a16c869bae7ac8
MD5 2c4212fac7a48e126f10847e0f16ca65
BLAKE2b-256 44304ef4bded24f5f025d3f5392652b5e8868d7d14003650008b409f0d72b7f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp38-abi3-macosx_10_12_x86_64.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mpatch-1.6.4-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for mpatch-1.6.4-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 3781929529a1bd49e5d728ccdd18d2512db292e42f9f9b59ded7f22bf48fd5ca
MD5 79b8bdd71cf9145421328114b245b5d1
BLAKE2b-256 115f59534b3271028c72fd960022cf1ed063a4c663c97727e273dd42464b8a5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mpatch-1.6.4-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: pypi.yml on Romelium/mpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page