bibtex-parser 0.2.0

BibTeX parser with Rust and Python APIs
Documentation
from __future__ import annotations

import argparse
import statistics
import time
from pathlib import Path

import citerra


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("path", nargs="?", default="tests/fixtures/tugboat.bib")
    parser.add_argument("--iterations", type=int, default=20)
    parser.add_argument("--tolerant", action="store_true")
    args = parser.parse_args()

    text = Path(args.path).read_text()
    measurements = []
    for _ in range(args.iterations):
        start = time.perf_counter()
        document = citerra.parse(text, tolerant=args.tolerant)
        elapsed = time.perf_counter() - start
        measurements.append(len(text) / elapsed / 1_000_000_000)
        assert len(document.entries) > 0

    print(f"path={args.path}")
    print(f"bytes={len(text)}")
    print(f"iterations={args.iterations}")
    print(f"median_gb_s={statistics.median(measurements):.3f}")
    print(f"max_gb_s={max(measurements):.3f}")


if __name__ == "__main__":
    main()