Skip to main content

A Python refactoring CLI tool with structured edits and pattern transforms

Project description

emend

A Python refactoring CLI built on LibCST. The name means "to make corrections to a text" — which is what it does, but with AST-aware precision instead of find-and-replace.

Two complementary systems: structured edits use selectors like file.py::func[params][0] for precise changes to symbol metadata, and pattern transforms use capture variables like print($X)logger.info($X) for code-pattern search and replace.

Installation

Using uv with free-threaded Python (recommended for best performance)

uv tool install --python 3.14t emend

Python 3.13+ ships a free-threaded variant (3.13t, 3.14t) that removes the GIL. emend's Rust core (emend_core) is already GIL-free (built with #[pymodule(gil_used = false)]), so on free-threaded Python it can run parallel file scans with no lock contention — meaning search, lint, refs, and rename across large codebases are significantly faster.

The --python 3.14t flag tells uv to use the free-threaded interpreter. Use 3.13t if you prefer the stable free-threaded release:

uv tool install --python 3.13t emend   # free-threaded 3.13 (stable)
uv tool install --python 3.14t emend   # free-threaded 3.14 (latest)

Using uv (standard Python)

uv tool install emend

Using pip

pip install emend

Run emend --help to verify. Full documentation at lucaswiman.github.io/emend.

Usage

emend <command> [options]

Workflow

All mutating commands default to dry-run, showing a diff of proposed changes. Re-run with --apply to write them. You'll probably want to run a formatter (black/ruff/isort) afterward, since emend doesn't try to preserve exact formatting.

Selector Syntax

Three types of selectors:

Symbol Selectors

file.py::Class.method.nested   # Nested symbol path
file.py::func                  # Module-level symbol

Extended Selectors (with components)

file.py::func[params]           # Function parameters
file.py::func[params][ctx]      # Specific parameter (by name)
file.py::func[params][0]        # Specific parameter (by index)
file.py::func[returns]          # Return annotation
file.py::func[decorators]       # Decorator list
file.py::MyClass[bases]         # Base classes
file.py::func[body]             # Function body

Pseudo-class Selectors

file.py::func[params]:KEYWORD_ONLY       # Keyword-only parameter slot
file.py::func[params]:POSITIONAL_ONLY    # Positional-only parameter slot

Line Selectors

file.py:42                      # Single line
file.py:42-100                  # Line range

Wildcard Selectors

file.py::*[params]              # All function parameters
file.py::Test*[decorators]      # Test class parameters
file.py::*.*[returns]           # All method return types
file.py::Class.*[body]          # All method bodies in Class

Wildcards support glob patterns:

  • * - Match any symbol at this level
  • Test* - Match symbols starting with Test
  • *.* - Match any method in any class
  • Class.* - Match any method in Class

Selector Grammar (Lark)

start: selector

selector: file_path DOUBLE_COLON symbol_path? component*

file_path: PATH
symbol_path: symbol_segment ("." symbol_segment)*
symbol_segment: WILDCARD | IDENTIFIER
component: "[" COMPONENT_NAME "]" accessor? pseudo_class?
accessor: "[" (IDENTIFIER | INT) "]"
pseudo_class: PSEUDO_CLASS

COMPONENT_NAME: "params" | "returns" | "decorators" | "bases" | "body" | "imports"
DOUBLE_COLON: "::"
PATH: /[^:]+/
WILDCARD: "*" | /[a-zA-Z_*][a-zA-Z0-9_*]*/
IDENTIFIER: /[a-zA-Z_][a-zA-Z0-9_]*/
INT: /-?\d+/
PSEUDO_CLASS: /:KEYWORD_ONLY|:POSITIONAL_ONLY|:POSITIONAL_OR_KEYWORD/

Commands

Search & Read

search - Unified search with auto-detection

  • Pattern mode: emend search 'print($X)' file.py
  • Lookup mode: emend search file.py::func
  • Summary mode: emend search file.py (list symbols)
  • Filters: --kind, --name, --returns, --depth, --has-param, --output, --where, --imported-from, --scope-local
  • Output formats: code, location, selector, summary, metadata, json, count, summary::flat, code::dedent
  • Also available as: query, show, get, lookup, find for intuitive workflows

Edit & Transform

edit - Modify or remove existing symbol components

  • Replace: emend edit file.py::func[returns] "int" --apply
  • Insert: emend edit file.py::func[params] "new_param" --before ctx --apply
  • Remove: emend edit file.py::func[params][old_param] --rm --apply
  • Wildcards: emend edit 'file.py::*[decorators]' "@dataclass" --apply

add - Insert new items into list components (alternative to edit)

  • emend add file.py::func[params] "timeout: int = 30" --apply
  • emend add "file.py::func[params]:KEYWORD_ONLY" "debug: bool" --apply

replace - Replace pattern matches with pattern-based substitution

  • emend replace 'print($X)' 'logger.info($X)' file.py --apply
  • Scope: --where (syntax: 'def', 'class', 'MyClass.method', 'not ...')

Symbol Management

refs - Find all references to a symbol across the project

  • emend refs models.py::User
  • Filters: --writes-only, --reads-only, --calls-only
  • Output: --json for JSON output (default shows file:line)

rename - Rename a symbol or module across the project

  • Symbol: emend rename models.py::User --to Account --apply
  • Module: emend rename models.py --to accounts.py --apply
  • Filters: --docs, --no-hierarchy, --unsure

move - Move a symbol or module with automatic import updates

  • Symbol: emend move utils.py::parse_date helpers/dates.py --apply
  • Module: emend move utils.py helpers/utils.py --apply

copy-to - Copy a symbol to another file

  • emend copy-to workflow.py::Builder._build.helper tasks.py --dedent --apply

Utilities

batch - Apply multiple refactoring operations from YAML/JSON file

  • emend batch rules.json --apply

lint - Lint files using pattern rules from .emend/patterns.yaml

  • emend lint src/
  • emend lint src/ --fix to auto-fix issues
  • emend lint src/ --rule no-print to run a single rule
  • See Linting documentation for full details

deadcode - Find potentially dead (unreferenced) code

  • emend deadcode src/
  • emend deadcode . --kind function --json
  • emend deadcode src/ --exclude-references-from tests/

graph - Generate a call graph for functions in a file

  • emend graph src/module.py --format plain
  • Formats: plain, json, dot

Examples

Search & Read Examples

# Search by pattern (pattern mode)
emend search 'print($X)' src/
emend search 'assertEqual($A, $B)' tests/ --output count

# Search by symbol (lookup mode)
emend search file.py::func
emend search src/ --kind function --name test_*
emend search file.py --output json

# Extract function parameters
emend search api.py::handler[params]
emend search 'api.py::*[params]'  # Wildcard: all function params in file

# Get return types
emend search 'src/**/*.py::*[returns]' --output metadata

# List symbols in a module
emend search file.py                          # Tree view
emend search file.py --output summary::flat   # Flat list
emend search file.py --depth 2                # Limit nesting depth

Edit Examples

# Update return type
emend edit api.py::handler[returns] "Response" --apply

# Add parameter with default value
emend edit api.py::handler[params] "timeout: int = 30" --apply

# Add keyword-only parameter
emend edit "api.py::handler[params]:KEYWORD_ONLY" "debug: bool" --apply

# Insert parameter before specific param
emend edit api.py::handler[params] "ctx: Context" --before user_id --apply

# Remove a specific parameter
emend edit api.py::handler[params][deprecated_arg] --rm --apply

# Edit multiple symbols at once (wildcards)
emend edit 'file.py::*[decorators]' "@dataclass" --apply

Pattern Transform Examples

# Simple find and replace (dry-run by default)
emend replace 'print($X)' 'logger.info($X)' file.py

# Replace within a specific scope
emend replace 'old_var' 'new_var' api.py --where process --apply

# Replace with pattern capture
emend replace 'get_field($N)' 'field$N' api.py --where process --apply

# String content interpolation: ${X.content} strips quotes from a captured string literal
emend replace 'Union["$X", $Y]' '$X | $Y' src/ --apply

# Find all pattern matches
emend search 'print($X)' src/ --output location

# Multi-rule batch operations
emend batch rules.json --apply

Symbol Management Examples

# Find all references to a symbol
emend refs models.py::User --json
emend refs models.py::User --writes-only    # Only write references
emend refs models.py::User --calls-only     # Only function calls

# Rename a symbol project-wide
emend rename models.py::User --to Account --apply

# Move a symbol to another file (updates imports)
emend move utils.py::parse_date helpers/dates.py --apply

# Copy a symbol to another file
emend copy-to workflow.py::Builder._build.helper tasks.py --dedent --apply

# List symbols using search
emend search workflow.py --depth 3

Pattern Syntax

Patterns support metavariables for capturing:

# Single expression
emend find 'print($MSG)' src/

# Multiple arguments with capture
emend find 'func($A, $B)' src/

# Variable arguments
emend find 'func($...ARGS)' src/

# Type constraints
emend find 'range($N:int)' src/

# Anonymous metavariables
emend find 'func($_, $ARG)' src/

# Structural constraints (via --where)
emend find 'print($X)' src/ --where 'async def'
emend find 'await $X' src/ --where 'not if __debug__'

# Supported pattern types:
#   Literals: $X, $MSG:str, $N:int, 3.14
#   Calls: func($X), obj.method($A, $B)
#   Operations: $A + $B, $A and $B, not $X, $X[$Y]
#   Collections: ($A, $B), [$X, $Y], {$K: $V}
#   Control: return $X, assert $A == $B, raise $EXC

Pattern Grammar (Lark)

start: pattern

pattern: (code_chunk | metavar)+

metavar: DOLLAR (ELLIPSIS)? METAVAR_NAME TYPE_CONSTRAINT?
       | DOLLAR UNDERSCORE

DOLLAR: "$"
ELLIPSIS: "..."
UNDERSCORE: "_"
METAVAR_NAME: /[A-Z][A-Z0-9_]*/
TYPE_CONSTRAINT: /:!?(?:expr|stmt|identifier|int|str|float|call|attr|any)/
code_chunk: /[^$:]+/ | ":"

The code_chunk rule excludes colons (/[^$:]+/) to prevent consuming colons that are part of type constraints (e.g., $MSG:str). A standalone colon is matched by the alternative | ":" for patterns containing colons outside of type constraints.

Diff Patch Format

- pattern_to_find
+ replacement_pattern

- another_pattern
+ another_replacement

Lines prefixed with - are matched; corresponding + lines are the replacement. Blank lines separate rules.

Linting

emend includes a pattern-based linter. Define rules in .emend/patterns.yaml and check your code for violations:

# .emend/patterns.yaml
macros:
  print_call: "print($...ARGS)"

rules:
  no-print:
    find: "{print_call}"
    not-inside: "def test_*"
    message: "Use logger instead of print"
    replace: "logger.info($...ARGS)"

  no-open-without-encoding:
    find: "open($PATH)"
    message: "Specify encoding when calling open()"
    replace: "open($PATH, encoding='utf-8')"
# Check for violations
emend lint src/

# Auto-fix violations that have a replace rule
emend lint src/ --fix

# Run only a specific rule
emend lint src/ --rule no-print

Suppress violations inline with # noqa comments:

print("keep this")  # noqa
print("keep this")  # noqa: emend:no-print
print("keep this")  # noqa: E501, emend:no-print  # mixed with other linters

Dead code detection

emend includes a deadcode section in .emend/patterns.yaml to detect unreferenced symbols as part of linting:

# .emend/patterns.yaml
deadcode: true

# Or with options:
deadcode:
  enabled: true
  kind: function                          # Only functions (or "class")
  exclude-references-from: ["tests/"]     # Ignore refs from tests
  include-private: false                  # Skip _private symbols
  strings-count-as-references: true       # String literals count as refs
  message: "Symbol appears to be unused"
# Run as part of lint
emend lint src/

# Or use the standalone command
emend deadcode src/
emend deadcode src/ --exclude-references-from tests/ --json

Suppress false positives inline:

def my_entry_point():  # noqa: emend:deadcode
    ...

pre-commit integration

emend can run as a pre-commit hook. Add to your .pre-commit-config.yaml:

repos:
  - repo: https://github.com/lucaswiman/emend
    rev: v0.2.0  # replace with desired version tag
    hooks:
      - id: emend-lint

This runs emend lint on staged Python files using your .emend/patterns.yaml config.

To auto-fix violations, add args: ["--fix"] to the hook configuration.

Development

Installing from Source

Clone the repository and install for development:

git clone https://github.com/lucaswiman/emend
cd emend

# Using make (creates a 3.14t venv, compiles the Rust extension, installs dev deps)
make venv

# Or manually (requires maturin and a Rust toolchain):
uv venv .venv --python 3.14t
uv pip install maturin
.venv/bin/maturin develop -E dev

Running Tests

# Run all tests
make test

# Run specific test file
make test TESTS=tests/test_emend/test_add_parameter.py

# Run specific test
make test TESTS="tests/test_emend/test_add_parameter.py::test_add_parameter_with_default"

Project Structure

emend/
├── src/emend/
│   ├── cli.py                # CLI entry point, argument parsing
│   ├── transform.py          # Transform primitives (get/set/add/remove/find/replace)
│   ├── pattern.py            # Pattern parsing and compilation
│   ├── query.py              # Symbol querying with filters
│   ├── ast_commands.py       # AST-based command implementations
│   ├── ast_utils.py          # AST traversal utilities
│   ├── component_selector.py # Extended selector parsing
│   ├── lint.py               # Pattern-based linter engine
│   └── grammars/
│       ├── selector.lark     # Extended selector grammar
│       └── pattern.lark      # Pattern grammar
├── rust/                     # emend_core Rust extension (bundled in wheel)
│   ├── src/lib.rs            # PyO3 bindings, GIL-free module definition
│   └── Cargo.toml
├── tests/test_emend/         # Test suite
├── Makefile
└── pyproject.toml            # maturin build (bundles Rust + Python in one wheel)

License

MPL 2.0

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

emend-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (705.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

emend-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (667.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

emend-0.2.0-cp312-cp312-win_amd64.whl (504.3 kB view details)

Uploaded CPython 3.12Windows x86-64

emend-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (705.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

emend-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (667.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

emend-0.2.0-cp312-cp312-macosx_11_0_arm64.whl (619.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

emend-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl (631.1 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

emend-0.2.0-cp311-cp311-win_amd64.whl (505.5 kB view details)

Uploaded CPython 3.11Windows x86-64

emend-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (706.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

emend-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (668.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

emend-0.2.0-cp311-cp311-macosx_11_0_arm64.whl (621.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

emend-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl (632.4 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

emend-0.2.0-cp310-cp310-win_amd64.whl (505.5 kB view details)

Uploaded CPython 3.10Windows x86-64

emend-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (706.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

emend-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (668.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

emend-0.2.0-cp310-cp310-macosx_11_0_arm64.whl (621.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

emend-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl (633.0 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

Details for the file emend-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 14866f53e997b3a8f5536e8f56c7b249bcf54f4aa2a6cf6c5343123c4cf5be80
MD5 8885761de1ebe1906918e44a40a36a82
BLAKE2b-256 f2f6064f66138914a80d1e8a0f6aee24cf33f286769425a72d9e5a22680b493b

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 49af9d706767606ee5deef9072797077742926ae4a0646af43f35ee3f1ff978e
MD5 dd37f0c49e1a16e5ceb0f80de2ab081c
BLAKE2b-256 dcdf24b901e3730a9b891b32cd623c85ac125a141fe042fa96770ebec6bbb374

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: emend-0.2.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 504.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for emend-0.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 026c16a4cfcab3ec4e25f4b13557775e69d2230e7c9b1f6f86e0779ce897104b
MD5 b5d0d644f174f5708581232c73e0d53f
BLAKE2b-256 cdd4bd0685b6617f99ed6aca6befa360a8192bc129ca7184f991108e06455c02

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp312-cp312-win_amd64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fe8d8a52dc3a9b127ce4886fdf57e705c020de5daaf13e836dc79826781cce68
MD5 de0f013f10f2835f24c198a02d4eebfa
BLAKE2b-256 289f2d89d96ade7137ee2a4b993e30c8c8346a7ccb07738e2720297890b42c4f

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4fb67832f056cb68234606b126f4761624417ad178a57e66f0dc15bb81619add
MD5 ff40b2da5cd78ca60589fe6901c0043a
BLAKE2b-256 58f8c64440c7c6b61267513798fba4d3b3bb3ac93991dd63247183ac5268ab6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8e8497ca0946fe6f919555244ef5a5b078ac018c703749da3c643e7b98aa5d67
MD5 91f8677039513e02d67cc95b26ddb627
BLAKE2b-256 d4c02f2a3fd46f9666ba5c212d0e617bc3831090213f7baead4df0ea1eaa24f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e243ea80c30ee1469d13cb415a632f6da998c0a6eef898138a4380617f4ed54a
MD5 6a53109bef1a48e5d20d8534cf6ffd97
BLAKE2b-256 7775e01c1361b5e8f6bdb7e28f6246a10f677988e0d1cfbb4f9a23f20f65fa9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: emend-0.2.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 505.5 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for emend-0.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e37000449c53e0dc3990f763f4b08284b2e7bd9e3fb4e59d8e52ec2903da3fa9
MD5 5312768d195e1dbe3aa2bb93fbe5f68e
BLAKE2b-256 64d0967d313bf5915323a2549705a42bd2476a5ece6795ce68519f7e4d8947fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp311-cp311-win_amd64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bd500e42962056efd4894f39d241381a7c7391ca92f49ee0c3a914a844184903
MD5 d163370e80ce2a5a139711c43cf66348
BLAKE2b-256 cec7c7fd399688b9ba1322fdffb28f88811d9e8918fbfe31d925fdc1fd07cb7a

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8bbf6fb3a56b62f6b1a4308088cbab3ebec506a24d5e078dd91264c445c1af12
MD5 9eca8028f5312aae4e2ad5ed37a2575f
BLAKE2b-256 adc6d7f7e08038d02c5881d970303fd9163409849c18ee6c7cffac55bdbaaac1

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 010050e4a0d3b33400f696fbd29bc4999fae93054923309cc3d2ff3967eb4dda
MD5 2bbff6d9473a2760d778f95f78a30eb6
BLAKE2b-256 18e8121a5115078b13e617e1b792813086acc6efaeffe2316465552d041fd30a

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fa2d8a4cc0ff59f6b988d9a59ab63e628dd7aebd8f77f2b87303d7ce4169a657
MD5 22d44a62b65585eb9503364fd35bbf84
BLAKE2b-256 33bee6022bab445dfdf13e09a816f9b88ca556aaf07af79d9bcde6cf5192b28d

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: emend-0.2.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 505.5 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for emend-0.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 cfaa4acd942a0a7fa56ee149c96af14a720f3ade5ec7629f8ecfc070e3033a7f
MD5 0b66d5d87b3a576ad89c9122cd492f94
BLAKE2b-256 936f3ecadb14af414c43343a34b10a087565d9e17f737bf0c456e612cda64b7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp310-cp310-win_amd64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f7bde7a8f25ef0e69c4dcb47e2bc37d0d34db7408474f67dd5c11230ebac648a
MD5 c6de2fac42d14a32886a6d2491c9b39c
BLAKE2b-256 12849492b885f8b22bfcc697b009bc054511f817b111542e4b29cca446b07e64

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6bb1cb62064e37f8c0514616ad1bb0ce5a24aa6e3b6117204e1a55e0e961aae4
MD5 e28b6fe7d413313f6ded4d7be92cbc66
BLAKE2b-256 86544e7a6896581f15d0cc5e470edc56db23fd48a0ab3e7ef2a9b53db98a5dcf

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7dd32032097ac9384e6e96d3dd856b8d0dd13e2842a4a7c6adf199d7e007780d
MD5 b3911e399f473853b3722cf02a91ef84
BLAKE2b-256 d4879a8f462951ff1ceccbff5b573cebba7f104c93dfe043078881bcf265caf2

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: wheels.yml on lucaswiman/emend

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

File details

Details for the file emend-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for emend-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 98ca1af92d805be79d65249e38a9052705be86a7babfc89b3af45295de813a43
MD5 946553957c3a1fe63560a5daeb3e177b
BLAKE2b-256 6bac06d74714d515b54e72dc58df8edd59ca0e46fce62954f28792b3c549b806

See more details on using hashes here.

Provenance

The following attestation bundles were made for emend-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl:

Publisher: wheels.yml on lucaswiman/emend

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