Skip to main content

Extensible JSONL task editing library for code and formula inputs.

Project description

logicedit

logicedit processes JSON or JSONL task records, applies controlled line edits, runs edited variants through registered tools, evaluates tool outputs, and writes successful variants back as JSONL.

Features

  • Dataclass-based record models with extra_options for forward-compatible schema changes.
  • single_edit mode for independent edits from the original input.
  • cumulative_edit mode for greedy accepted edits applied on top of prior edits.
  • Tool registry with in-memory tools, Python-file adapters, and a built-in Z3 solver adapter.
  • Explicit required tool selection via tool.
  • Configurable label comparison strategies for label-preserving and label-variation workflows.
  • Minimal examples with a mock tool and mock editor.

Install

python3 -m pip install -e .[dev]

This installs the library dependencies, including z3-solver for the built-in Z3 backend.

TestPyPI Release Flow

Build and upload to TestPyPI first:

make publish-testpypi

Install the published package from TestPyPI:

make install-testpypi

If you prefer the raw commands:

python3 -m build
python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
python3 -m pip install \
  --index-url https://test.pypi.org/simple/ \
  --extra-index-url https://pypi.org/simple/ \
  logicedit

Run

python3 -m logicedit.cli \
  --input /path/to/tasks.jsonl \
  --output /path/to/successes.jsonl \
  --tool csp_solver.py \
  --edit-mode single_edit \
  --number-of-edits 3 \
  --label-variation \
  --single-edit-ids 0,2,4

number_of_edits accepts either a positive integer or "all".

  • In single_edit mode, the library evaluates independent edits from the original input and saves every successful independent edit. number_of_edits is ignored in this mode. Use --single-edit-ids or extra_options.selected_edit_ids to restrict which editable units are considered.
  • In cumulative_edit mode, number_of_edits controls how many accepted cumulative edits are saved. "all" means the runner walks the editable statements from first to last, tries the available operator edits for each statement against the label_variation condition, applies the first acceptable edit, and then moves to the next statement.
  • --tool is mandatory on the CLI. The library no longer defaults silently to csp_solver.
  • --no-label-variation is the default behavior: only save records whose tool output matches the original label.
  • --label-variation inverts that rule: only save records whose tool output differs from the original label.

Available tool families:

  • csp_solver.py or another Python tool file: uses the Python-file adapter. Point extra_options.tool_search_paths at the folder containing it. The adapter can call plain functions such as run(input_text) and also supports the CSP_Program class shape found in the source files.
  • z3_solver: uses the built-in vendored Z3 backend and Z3-specific operator edits in the # Constraints section: AND -> OR, XOR -> OR, OR -> XOR, and NOT removal.

The library only searches tool paths you provide or the input file directory added by the CLI.

Example Z3 run:

python3 -m logicedit.cli \
  --input /path/to/z3_tasks.jsonl \
  --output /path/to/z3_successes.jsonl \
  --tool z3_solver \
  --edit-mode cumulative_edit \
  --number-of-edits all

Example Record

{
  "id": "logical_deduction_0",
  "tool": "csp_solver.py",
  "input_type": "code",
  "edit_mode": "single_edit",
  "number_of_edits": 2,
  "label_variation": false,
  "expected_answer": "D",
  "logic_program": "Domain:\n...\nConstraints:\nThe blue book is to the right of the yellow book. ::: blue_book > yellow_book\n...\n\nQuery:\n..."
}

Example Z3 record:

{
  "id": "ar_lsat_0",
  "tool": "z3_solver",
  "input_type": "code",
  "edit_mode": "single_edit",
  "number_of_edits": 2,
  "label_variation": true,
  "expected_answer": "B",
  "logic_program": "# Declarations\n...\n\n# Constraints\nrule ::: A AND B\n...\n\n# Options\nQuestion ::: ...\n..."
}

Test

python3 -m pytest

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

logicedit-0.1.7.tar.gz (29.6 kB view details)

Uploaded Source

Built Distribution

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

logicedit-0.1.7-py3-none-any.whl (31.8 kB view details)

Uploaded Python 3

File details

Details for the file logicedit-0.1.7.tar.gz.

File metadata

  • Download URL: logicedit-0.1.7.tar.gz
  • Upload date:
  • Size: 29.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.3

File hashes

Hashes for logicedit-0.1.7.tar.gz
Algorithm Hash digest
SHA256 c4a2cb3b9d8d6ae3516f906f5fdc512febbd306e7f32c09ed9eac9c9c51ec776
MD5 dc41601c10327f61a021468830997ab2
BLAKE2b-256 4e6f75ba7e1faf111a872ef67345d40b257fb8f0b96197c62b70f5717e654cc2

See more details on using hashes here.

File details

Details for the file logicedit-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: logicedit-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 31.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.3

File hashes

Hashes for logicedit-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 cce2f1f8dff3a56e19ebdac7046e2c090529d0ee1dfa1622fc7330cf39a44432
MD5 bd88630aeb161c1c0394f96865fbc424
BLAKE2b-256 db138b3ef1dfce47426f08a7cb6761f50bac47a85857909e3e2ce35550b82251

See more details on using hashes here.

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