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 levelTest*- Match symbols starting with Test*.*- Match any method in any classClass.*- 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,findfor 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" --applyemend 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:
--jsonfor 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/ --fixto auto-fix issuesemend lint src/ --rule no-printto run a single rule- See Linting documentation for full details
deadcode - Find potentially dead (unreferenced) code
emend deadcode src/emend deadcode . --kind function --jsonemend 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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file emend-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: emend-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 705.3 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
410d6383e11b25db7686ae71f2f334d01d89fef050254da9d0f41f4f7e95c143
|
|
| MD5 |
5a18a52ab85738b40685256cf2452c09
|
|
| BLAKE2b-256 |
ba6f94641fa966d388b10c809b612516c0f0c6227da4af9084cad11a3939470a
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
410d6383e11b25db7686ae71f2f334d01d89fef050254da9d0f41f4f7e95c143 - Sigstore transparency entry: 1004519603
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: emend-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 667.3 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09fda4f15e4dbb91c435bb5275146dcda54563984f9651792d6cc45d446b1ad9
|
|
| MD5 |
327e82a837423f2921f6a423a4985dcd
|
|
| BLAKE2b-256 |
bfa669c79106534b6ddefd1f619349b62693b7b3909fdcb1ef66174207bfce6f
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
09fda4f15e4dbb91c435bb5275146dcda54563984f9651792d6cc45d446b1ad9 - Sigstore transparency entry: 1004519535
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: emend-0.2.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 504.1 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47febd132101769a679687bc277985a6bdb9ff94063b70253677a1bde831fbef
|
|
| MD5 |
ea611430ba05b44723580a66c111dae9
|
|
| BLAKE2b-256 |
2810f8dded2227a4f58942ef8fba07d89f9adfb6a5eb20536b820f7eab92674f
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp312-cp312-win_amd64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp312-cp312-win_amd64.whl -
Subject digest:
47febd132101769a679687bc277985a6bdb9ff94063b70253677a1bde831fbef - Sigstore transparency entry: 1004519576
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: emend-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 705.7 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
34782e9e5ff6531a3a3609984e84a73a902b7b92b0cbef35a90e89bf865776cf
|
|
| MD5 |
f3cac0098d51d7973e4be2bd870e872f
|
|
| BLAKE2b-256 |
895d61d3ea262680b428d77f1faf3fca7c4651454689b4717114ee8238bf33a0
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
34782e9e5ff6531a3a3609984e84a73a902b7b92b0cbef35a90e89bf865776cf - Sigstore transparency entry: 1004519566
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: emend-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 667.4 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd170c367f3dc1287f33e1e4260da0e3db8015fe9b2395ca767686e7a82f433f
|
|
| MD5 |
951de24cbe4fa4efce5928dd0a2817ea
|
|
| BLAKE2b-256 |
52828e3d74fd91a1abb5875051e21a899a87aa1d7f0bd9d20bd7383fd6630812
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
cd170c367f3dc1287f33e1e4260da0e3db8015fe9b2395ca767686e7a82f433f - Sigstore transparency entry: 1004519593
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: emend-0.2.1-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 618.8 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78b9f11d087cf39cd4040c9baa6905443d44738063ca3b9640f19fe9f5248784
|
|
| MD5 |
d291d46e6671cf2b7f0677b954ec7c38
|
|
| BLAKE2b-256 |
98033ee8f12124e396e9b77c993d1033c839f365fd815d355e1b06b8f0c7bb02
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
78b9f11d087cf39cd4040c9baa6905443d44738063ca3b9640f19fe9f5248784 - Sigstore transparency entry: 1004519642
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: emend-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 631.0 kB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8dcad08ffccbc4ecaeab6f12066219a527a40dd03647ee381718d05f7973c8aa
|
|
| MD5 |
d9e003bfd9c9eb8764f588fba3f84165
|
|
| BLAKE2b-256 |
c8e5ecd4501d70df7891a6aa0920f674beff001c46b07febf83f7f5c65a9003c
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl -
Subject digest:
8dcad08ffccbc4ecaeab6f12066219a527a40dd03647ee381718d05f7973c8aa - Sigstore transparency entry: 1004519628
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: emend-0.2.1-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 505.3 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7eb7b1e58986127b8404c444312e29416001ccb0b1396964272d080eca04a85c
|
|
| MD5 |
08a1be88ab6bd6e8adcc791eeff5a9cb
|
|
| BLAKE2b-256 |
338d3ffac1e8513ee4f0d658db549aedb094870f6aa898e6e5e73cc3b4077e86
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp311-cp311-win_amd64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp311-cp311-win_amd64.whl -
Subject digest:
7eb7b1e58986127b8404c444312e29416001ccb0b1396964272d080eca04a85c - Sigstore transparency entry: 1004519607
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: emend-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 706.4 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4d676f04d2207ddaef28c95c16afb0b2aa033df84ae4434a140867c45d7f7f6
|
|
| MD5 |
1eaf08aceabb2a93c534689309a61546
|
|
| BLAKE2b-256 |
1b7c0c771401726074ed08bbb49378d7162aaf3cc1b890d9ef25d81b1f56cc20
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
d4d676f04d2207ddaef28c95c16afb0b2aa033df84ae4434a140867c45d7f7f6 - Sigstore transparency entry: 1004519595
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: emend-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 668.1 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f7dc715dc25737e985e8169bf49e544a4b2c65ee9c73fb1fac77cba8c413e04
|
|
| MD5 |
ef8cc253f0c8974269e8c53bb0a8f747
|
|
| BLAKE2b-256 |
cf368bf306681a1658f55c01504a797da73837a275aee0f01080cfcb2e5e78ae
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
9f7dc715dc25737e985e8169bf49e544a4b2c65ee9c73fb1fac77cba8c413e04 - Sigstore transparency entry: 1004519561
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: emend-0.2.1-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 620.9 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
88b4f5eae36ee56dd574211ef9692ea830d5e6047380ecc60642174ef83d5775
|
|
| MD5 |
bcb3c86d3b9c801345ef735725eb9762
|
|
| BLAKE2b-256 |
5a1d046cd368931bb6be5cecad771609368518b081c52468212a4609a7bc5ce6
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
88b4f5eae36ee56dd574211ef9692ea830d5e6047380ecc60642174ef83d5775 - Sigstore transparency entry: 1004519637
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl.
File metadata
- Download URL: emend-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl
- Upload date:
- Size: 632.3 kB
- Tags: CPython 3.11, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39c06d5cd64295086eeefdf8850e135dae9279969e76863ead480e608206e644
|
|
| MD5 |
7c312730c80999296bad42069edd9242
|
|
| BLAKE2b-256 |
5bf84e1809f143fe656d64e158c0a2f393254ce043d2ba6588992de6d20c5776
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl -
Subject digest:
39c06d5cd64295086eeefdf8850e135dae9279969e76863ead480e608206e644 - Sigstore transparency entry: 1004519555
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: emend-0.2.1-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 505.2 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e8679ff52aa3ce2d4c551fbd11814819fd5f89aa51b0cd65cea20e27423cd61
|
|
| MD5 |
42998f48c5cb5a078e16b5a355928894
|
|
| BLAKE2b-256 |
c8d5ce3fa89d0f3cc95a5f5819aa1240425983e5bf7a1550bd870d5ec6832c1e
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp310-cp310-win_amd64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp310-cp310-win_amd64.whl -
Subject digest:
2e8679ff52aa3ce2d4c551fbd11814819fd5f89aa51b0cd65cea20e27423cd61 - Sigstore transparency entry: 1004519646
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: emend-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 706.0 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7b098f16612203c3365c248996c6af19a2d8eca8a9fd008272ff4f959f0b953
|
|
| MD5 |
8cc7f24dd6b3eae48f197f91b5bba50d
|
|
| BLAKE2b-256 |
d222a3365bb29ee6cdcb354255a4a5167419cfe508a25e6a10b126f307bb1d89
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
f7b098f16612203c3365c248996c6af19a2d8eca8a9fd008272ff4f959f0b953 - Sigstore transparency entry: 1004519551
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: emend-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 668.0 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f64a1e4d3b6895d05d9378c195958f09bc3be2658e0e5ada2cc3d4011209f2df
|
|
| MD5 |
2fca1f560aeb1ca8bba188af4c6ce314
|
|
| BLAKE2b-256 |
6a3c5596922f89bb89cb71e6b5c6adb52fc3eff5bccefa6994198881b5f4b2ef
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
f64a1e4d3b6895d05d9378c195958f09bc3be2658e0e5ada2cc3d4011209f2df - Sigstore transparency entry: 1004519610
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: emend-0.2.1-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 621.0 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9f18d9243240a64fd7111654d501a9f4791765a494566ea2de234486b047549
|
|
| MD5 |
d86275c0ea5b727f39dbbf3bba7a08ef
|
|
| BLAKE2b-256 |
d750d5adf7a24eb69d4a15df2315f3a97f43da04b60536ad315ae73c72f26e27
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp310-cp310-macosx_11_0_arm64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp310-cp310-macosx_11_0_arm64.whl -
Subject digest:
a9f18d9243240a64fd7111654d501a9f4791765a494566ea2de234486b047549 - Sigstore transparency entry: 1004519588
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type:
File details
Details for the file emend-0.2.1-cp310-cp310-macosx_10_12_x86_64.whl.
File metadata
- Download URL: emend-0.2.1-cp310-cp310-macosx_10_12_x86_64.whl
- Upload date:
- Size: 632.9 kB
- Tags: CPython 3.10, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9194b58a2676bccff01ddb1eb0957d5f3c32a7cfbe910a9b8f39689fc2df9c2
|
|
| MD5 |
45f96fbd7b39f5243e546e77c0ceac75
|
|
| BLAKE2b-256 |
cd08f74297dbac1d40ee7e005a8ac0dada0f3a32916563e51806af20eb5be853
|
Provenance
The following attestation bundles were made for emend-0.2.1-cp310-cp310-macosx_10_12_x86_64.whl:
Publisher:
wheels.yml on lucaswiman/emend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emend-0.2.1-cp310-cp310-macosx_10_12_x86_64.whl -
Subject digest:
c9194b58a2676bccff01ddb1eb0957d5f3c32a7cfbe910a9b8f39689fc2df9c2 - Sigstore transparency entry: 1004519581
- Sigstore integration time:
-
Permalink:
lucaswiman/emend@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/lucaswiman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@2356c59fa657de0ad9ca6efceb50cd130fc3cc8d -
Trigger Event:
release
-
Statement type: