diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index a4358296..474c25f5 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -16,7 +16,7 @@ Primary outcomes: reproducible structured feature/value extraction and structure - Linting/Formatting: Ruff (configured in `pyproject.toml`). Line length 79 (72 for docstrings). Ruff also runs format check. - Testing: Pytest (unit/integration separation), Coverage (HTML + XML). Rust uses Cargo tests + Clippy + fmt. - CI: GitHub Actions workflows for Python (`ci-python.yml`), Rust (`ci-rust.yml`), docs, PyPI publishing. -- Docs: Sphinx with `pydata-sphinx-theme`. Build via Pixi task `python-doc` or Makefile (`make html`). Fail on warnings. +- Docs: Sphinx with `pydata-sphinx-theme`. Build via Pixi task `python-docs` or Makefile (`make html`). Fail on warnings. - Crawling/Search: Playwright + supplemental packages (rebrowser-playwright, camoufox, crawl4ai, tavily, ddgs, etc.). - LLM Providers: OpenAI (core), Anthropic optional (`anthropic` extras). Configurable via API key environment variables. @@ -59,7 +59,7 @@ pixi run -e rdev cargo check --workspace --locked pixi run -e rdev tests-r # Build docs -pixi run -e pdoc python-doc +pixi run -e pdoc python-docs # Demo (requires OPENAI_API_KEY) pixi run openai-solar-demo diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 14bf6fc1..5fa3fa09 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -42,7 +42,7 @@ jobs: environments: pdoc - name: Build Docs - run: pixi run -e pdoc python-doc # This errors on warnings + run: pixi run -e pdoc python-docs # This errors on warnings - name: deploy uses: peaceiris/actions-gh-pages@v4.0.0 diff --git a/docs/Makefile b/docs/Makefile index f6d72492..8801acba 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -6,20 +6,22 @@ SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = source BUILDDIR = _build +CLEAN_TARGETS = $(BUILDDIR) $(SOURCEDIR)/_autosummary # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -.PHONY: help Makefile +.PHONY: help Makefile clean # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - rm -rf _build - rm -rf source/_autosummary @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) +clean: + rm -rf $(CLEAN_TARGETS) + github: html -git branch -D gh-pages -git push origin --delete gh-pages diff --git a/docs/source/dev/README.rst b/docs/source/dev/README.rst index fa047306..5806a5c0 100644 --- a/docs/source/dev/README.rst +++ b/docs/source/dev/README.rst @@ -211,7 +211,7 @@ To check your docstring additions/updates, you can build a local version of the .. code-block:: shell - pixi r -e pdoc python-doc + pixi r -e pdoc python-docs After running this command, simply open ``docs/_build/html/index.html`` using your favorite browser, e.g.: diff --git a/docs/source/glossary.rst b/docs/source/glossary.rst new file mode 100644 index 00000000..a48df201 --- /dev/null +++ b/docs/source/glossary.rst @@ -0,0 +1,144 @@ +.. _glossary: + +Glossary +======== + +.. glossary:: + :sorted: + + INFRA-COMPASS + End-to-end pipeline that discovers, parses, and validates energy + infrastructure ordinances with LLM tooling. + + LLM + Large Language Model that interprets ordinance text, classifies + features, and answers structured extraction questions. + + OCR + Optical Character Recognition stage powered by ``pytesseract`` + that converts scanned ordinance PDFs into searchable text. + + Pixi + Environment manager used to install dependencies, run tasks, and + maintain reproducible shells for COMPASS. + + Playwright + Browser automation framework used to crawl web portals and + download ordinance documents reliably. + + analysis run + Complete invocation of ``compass process`` that ingests a + configuration file, processes jurisdictions, and writes results to + the run directory. + + clean directory + Intermediate folder storing cleaned ordinance text used for LLM + prompting during feature extraction. + + clean text file + Plain-text excerpt derived from ordinance documents that isolates + relevant sections for prompts and validation. + + compass process + CLI command that executes the end-to-end pipeline using the inputs + defined in the configuration file. + + configuration file + JSON or JSON5 document that declares inputs, model assignments, + concurrency, and output directories for a run. + + decision tree prompt + Structured prompt template that guides the LLM through branching + questions to extract quantitative and qualitative ordinance data. + + decision tree + Hierarchical rubric of questions and outcomes that organizes how + ordinance features are extracted and validated. + + extraction pipeline + Crawlers, parsers, and feature detectors that transform raw + ordinance text into structured records. + + jurisdiction + County or municipality defined in the jurisdiction CSV that + frames the geographic scope of an analysis run. + + jurisdiction CSV + Input spreadsheet whose ``County`` and ``State`` columns list the + locations processed in a run. + + location + Combination of county and state identifiers that maps to one row + in the jurisdiction CSV and produces a single output bundle. + + location file log + Per-location structured log that aggregates runtime diagnostics + and JSON exception summaries. + + location manifest + JSON metadata file emitted per location summarizing source + documents, extraction status, and validation outcomes. + + log directory + Folder defined by ``log_dir`` that stores run-level logs, prompt + archives, and timing summaries. + + llm cost tracker + Runtime utility that multiplies token usage by configured pricing + to report estimated spend per model. + + llm service + Abstraction over providers such as OpenAI or Azure OpenAI that + enforces authentication, rate limits, and retry policies. + + llm service rate limit + Configuration value that caps tokens per minute for a model to + avoid provider throttling. + + llm task + Logical label assigned to prompt templates that maps to a specific + model entry within the configuration. + + ordinance + Legal text that governs energy infrastructure within a + jurisdiction and feeds the extraction workflows. + + ordinance document + Source PDF or HTML retrieved during crawling that contains the + legal language for the targeted technology. + + ordinance file directory + Folder defined by ``ordinance_file_dir`` that caches downloaded + ordinance PDFs and HTML files. + + out directory + Root folder defined by ``out_dir`` where structured results, + cleaned text, and logs for each run are written. + + ``pytesseract`` + Python wrapper for the Tesseract OCR engine used to enable text + extraction from scanned ordinance documents. + + rate limiter + Token-based throttle that keeps LLM requests within provider + quotas while maximizing throughput. + + structured record + Tabular representation of ordinance features, thresholds, and + metadata exported for downstream analysis. + + technology + ``tech`` configuration key that defines the target infrastructure + domain, such as solar or wind. + + text splitter + Utility that chunks ordinance text into overlapping segments sized + for LLM context windows. + + validation pipeline + Post-processing stage that verifies extracted features, resolves + conflicts, and confirms location metadata. + + web search + Search-and-crawl phase that discovers ordinance links using + providers such as Tavily, DuckDuckGo Search, or custom engines. diff --git a/docs/source/index.rst b/docs/source/index.rst index bdbaf96a..2ab619a7 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -8,6 +8,7 @@ CLI reference <_cli/cli> Validation Development + Glossary INFRA-COMPASS documentation @@ -20,3 +21,5 @@ What is INFRA-COMPASS? .. include:: ../../README.rst :start-after: inclusion-intro :end-before: Installing INFRA-COMPASS + +:ref:`genindex` | :ref:`modindex` | :ref:`glossary` diff --git a/pixi.lock b/pixi.lock index aa293b57..a5fb10b3 100644 --- a/pixi.lock +++ b/pixi.lock @@ -3544,11 +3544,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/66/da/412cc1711b6c77b7ca852f48b93bae5d8722cdabe86e9427ea2e204dfefd/h5pyd-0.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/a1/d44fa38306ffa34a7e1af09632b158e13ec89670ce491f8a15af3ebcb4e4/jinja2_time-0.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/e0/2e60a0c09235fd7b55297390c557923f3c35a9cf001914222c26a7857d2b/litellm-1.80.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/e6/a170e6ae3492d8e334a6ce9e39668f2b8d0cb0a158804460b5d851315230/maxminddb-3.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b5/0e/0898bc80431eb17e7d0744321fab1ba1e39fae0ba2c9e8634c042feb31f5/nrel_elm-0.0.34-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl @@ -4053,11 +4051,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/c2/fc6375d07ea3962df7afad7d863fe4bde18bb88530678c20d4c90c18de1d/h5py-3.15.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/66/da/412cc1711b6c77b7ca852f48b93bae5d8722cdabe86e9427ea2e204dfefd/h5pyd-0.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/a1/d44fa38306ffa34a7e1af09632b158e13ec89670ce491f8a15af3ebcb4e4/jinja2_time-0.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/e0/2e60a0c09235fd7b55297390c557923f3c35a9cf001914222c26a7857d2b/litellm-1.80.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/3d/c22a117c1c6ca42a62be9473f12d113e2eab72ac28c032a290d0fbbd488e/maxminddb-3.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/b5/0e/0898bc80431eb17e7d0744321fab1ba1e39fae0ba2c9e8634c042feb31f5/nrel_elm-0.0.34-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl @@ -4513,11 +4509,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/88/b3/40207e0192415cbff7ea1d37b9f24b33f6d38a5a2f5d18a678de78f967ae/h5py-3.15.1-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/66/da/412cc1711b6c77b7ca852f48b93bae5d8722cdabe86e9427ea2e204dfefd/h5pyd-0.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/a1/d44fa38306ffa34a7e1af09632b158e13ec89670ce491f8a15af3ebcb4e4/jinja2_time-0.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/e0/2e60a0c09235fd7b55297390c557923f3c35a9cf001914222c26a7857d2b/litellm-1.80.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/c8/76b3c0ea1f180209496cb401892a4ad197ee23ac1f370da578fffa466418/maxminddb-3.0.0-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b5/0e/0898bc80431eb17e7d0744321fab1ba1e39fae0ba2c9e8634c042feb31f5/nrel_elm-0.0.34-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl @@ -4973,11 +4967,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/31/96/ba99a003c763998035b0de4c299598125df5fc6c9ccf834f152ddd60e0fb/h5py-3.15.1-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/66/da/412cc1711b6c77b7ca852f48b93bae5d8722cdabe86e9427ea2e204dfefd/h5pyd-0.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/a1/d44fa38306ffa34a7e1af09632b158e13ec89670ce491f8a15af3ebcb4e4/jinja2_time-0.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/e0/2e60a0c09235fd7b55297390c557923f3c35a9cf001914222c26a7857d2b/litellm-1.80.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/96/b2d5ab37458ec892d7d52b6a9e6aa9992354d61df20b9978bae60e35d17a/maxminddb-3.0.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b5/0e/0898bc80431eb17e7d0744321fab1ba1e39fae0ba2c9e8634c042feb31f5/nrel_elm-0.0.34-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl @@ -5425,11 +5417,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/66/da/412cc1711b6c77b7ca852f48b93bae5d8722cdabe86e9427ea2e204dfefd/h5pyd-0.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/a1/d44fa38306ffa34a7e1af09632b158e13ec89670ce491f8a15af3ebcb4e4/jinja2_time-0.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/e0/2e60a0c09235fd7b55297390c557923f3c35a9cf001914222c26a7857d2b/litellm-1.80.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4b/19/a498bf14a86e98475d4ca994988e8f072dccfd407d026403ad95725321de/maxminddb-3.0.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b5/0e/0898bc80431eb17e7d0744321fab1ba1e39fae0ba2c9e8634c042feb31f5/nrel_elm-0.0.34-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl @@ -5476,7 +5466,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda @@ -5756,11 +5745,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/66/da/412cc1711b6c77b7ca852f48b93bae5d8722cdabe86e9427ea2e204dfefd/h5pyd-0.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/a1/d44fa38306ffa34a7e1af09632b158e13ec89670ce491f8a15af3ebcb4e4/jinja2_time-0.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/e0/2e60a0c09235fd7b55297390c557923f3c35a9cf001914222c26a7857d2b/litellm-1.80.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/e6/a170e6ae3492d8e334a6ce9e39668f2b8d0cb0a158804460b5d851315230/maxminddb-3.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b5/0e/0898bc80431eb17e7d0744321fab1ba1e39fae0ba2c9e8634c042feb31f5/nrel_elm-0.0.34-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl @@ -5800,7 +5787,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda @@ -6121,11 +6107,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/c2/fc6375d07ea3962df7afad7d863fe4bde18bb88530678c20d4c90c18de1d/h5py-3.15.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/66/da/412cc1711b6c77b7ca852f48b93bae5d8722cdabe86e9427ea2e204dfefd/h5pyd-0.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/a1/d44fa38306ffa34a7e1af09632b158e13ec89670ce491f8a15af3ebcb4e4/jinja2_time-0.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/e0/2e60a0c09235fd7b55297390c557923f3c35a9cf001914222c26a7857d2b/litellm-1.80.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/3d/c22a117c1c6ca42a62be9473f12d113e2eab72ac28c032a290d0fbbd488e/maxminddb-3.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/b5/0e/0898bc80431eb17e7d0744321fab1ba1e39fae0ba2c9e8634c042feb31f5/nrel_elm-0.0.34-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl @@ -6165,7 +6149,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda @@ -6439,11 +6422,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/88/b3/40207e0192415cbff7ea1d37b9f24b33f6d38a5a2f5d18a678de78f967ae/h5py-3.15.1-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/66/da/412cc1711b6c77b7ca852f48b93bae5d8722cdabe86e9427ea2e204dfefd/h5pyd-0.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/a1/d44fa38306ffa34a7e1af09632b158e13ec89670ce491f8a15af3ebcb4e4/jinja2_time-0.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/e0/2e60a0c09235fd7b55297390c557923f3c35a9cf001914222c26a7857d2b/litellm-1.80.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/c8/76b3c0ea1f180209496cb401892a4ad197ee23ac1f370da578fffa466418/maxminddb-3.0.0-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b5/0e/0898bc80431eb17e7d0744321fab1ba1e39fae0ba2c9e8634c042feb31f5/nrel_elm-0.0.34-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl @@ -6483,7 +6464,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda @@ -6757,11 +6737,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/31/96/ba99a003c763998035b0de4c299598125df5fc6c9ccf834f152ddd60e0fb/h5py-3.15.1-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/66/da/412cc1711b6c77b7ca852f48b93bae5d8722cdabe86e9427ea2e204dfefd/h5pyd-0.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/a1/d44fa38306ffa34a7e1af09632b158e13ec89670ce491f8a15af3ebcb4e4/jinja2_time-0.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/e0/2e60a0c09235fd7b55297390c557923f3c35a9cf001914222c26a7857d2b/litellm-1.80.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/96/b2d5ab37458ec892d7d52b6a9e6aa9992354d61df20b9978bae60e35d17a/maxminddb-3.0.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b5/0e/0898bc80431eb17e7d0744321fab1ba1e39fae0ba2c9e8634c042feb31f5/nrel_elm-0.0.34-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl @@ -6801,7 +6779,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda @@ -7065,11 +7042,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/66/da/412cc1711b6c77b7ca852f48b93bae5d8722cdabe86e9427ea2e204dfefd/h5pyd-0.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/a1/d44fa38306ffa34a7e1af09632b158e13ec89670ce491f8a15af3ebcb4e4/jinja2_time-0.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/e0/2e60a0c09235fd7b55297390c557923f3c35a9cf001914222c26a7857d2b/litellm-1.80.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4b/19/a498bf14a86e98475d4ca994988e8f072dccfd407d026403ad95725321de/maxminddb-3.0.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b5/0e/0898bc80431eb17e7d0744321fab1ba1e39fae0ba2c9e8634c042feb31f5/nrel_elm-0.0.34-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl @@ -16907,13 +16882,6 @@ packages: - pkg:pypi/jinja2?source=hash-mapping size: 112714 timestamp: 1741263433881 -- pypi: https://files.pythonhosted.org/packages/6a/a1/d44fa38306ffa34a7e1af09632b158e13ec89670ce491f8a15af3ebcb4e4/jinja2_time-0.2.0-py2.py3-none-any.whl - name: jinja2-time - version: 0.2.0 - sha256: d3eab6605e3ec8b7a0863df09cc1d23714908fa61aa6986a845c20ba488b4efa - requires_dist: - - jinja2 - - arrow - pypi: https://files.pythonhosted.org/packages/06/4d/125c5c1537c7d8ee73ad3d530a442d6c619714b95027143f1b61c0b4dfe0/jiter-0.12.0-cp313-cp313-macosx_11_0_arm64.whl name: jiter version: 0.12.0 @@ -22949,13 +22917,6 @@ packages: purls: [] size: 165589 timestamp: 1753889311940 -- pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - name: make - version: 0.1.6.post2 - sha256: 307991f0d24668b7785a9abade301ba6c2d004460e90c59baf19b47c16b8ed39 - requires_dist: - - jinja2 - - jinja2-time - conda: https://conda.anaconda.org/conda-forge/linux-64/make-4.4.1-hb9d3cd8_2.conda sha256: d652c7bd4d3b6f82b0f6d063b0d8df6f54cc47531092d7ff008e780f3261bdda md5: 33405d2a66b1411db9f7242c8b97c9e7 @@ -24207,8 +24168,8 @@ packages: timestamp: 1733408419340 - pypi: ./ name: nrel-compass - version: 0.11.3.dev23+g58a0f80.d20251203 - sha256: 511ee903cbb92d94df0de75d2bc4cdf106f5bc652ae4c1b159f0867658a8238a + version: 0.11.3.dev36+g76b68a4.d20251204 + sha256: 0d699c7c18d19f723c8949efea1f0fd60a6564efc71938718076fd4e3fd1b32d requires_dist: - click>=8.1.7,<9 - html5lib>=1.1,<2 @@ -24238,13 +24199,12 @@ packages: - pytest-xdist>=3.6.1,<4 ; extra == 'test' - snakeviz>=2.2.2,<3 ; extra == 'test' - tox>=4.23.2,<5 ; extra == 'test' - - ghp-import>=2.1 ; extra == 'doc' - - make>=0.1 ; extra == 'doc' + - ghp-import>=2.1.0,<3 ; extra == 'doc' - pydata-sphinx-theme>=0.16.1,<0.17 ; extra == 'doc' - - sphinx-click>=5.1 ; extra == 'doc' + - sphinx-click>=6.1.0,<7 ; extra == 'doc' - sphinx-copybutton>=0.5 ; extra == 'doc' - sphinx-tabs>=3.4 ; extra == 'doc' - - sphinxcontrib-mermaid>=1.0.0 ; extra == 'doc' + - sphinxcontrib-mermaid>=1.2.3,<2 ; extra == 'doc' - anthropic>=0.40.0,<0.41 ; extra == 'anthropic' - botocore>=1.35.72,<2 ; extra == 'anthropic' - boto3>=1.35.71,<2 ; extra == 'anthropic' diff --git a/pyproject.toml b/pyproject.toml index 7264ffaa..3694d65b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,13 +70,12 @@ test = [ "tox>=4.23.2,<5", ] doc = [ - "ghp-import>=2.1", - "make>=0.1", + "ghp-import>=2.1.0,<3", "pydata-sphinx-theme>=0.16.1,<0.17", - "sphinx-click>=5.1", + "sphinx-click>=6.1.0,<7", "sphinx-copybutton>=0.5", "sphinx-tabs>=3.4", - "sphinxcontrib-mermaid>=1.0.0", + "sphinxcontrib-mermaid>=1.2.3,<2", ] anthropic = [ "anthropic>=0.40.0,<0.41", @@ -133,7 +132,7 @@ tests-u = "pytest --durations=20 -rapP -vv --cov=compass --cov-report=html --cov tests-i = "pytest --durations=20 -rapP -vv --cov=compass --cov-report=html --cov-branch --cov-report=xml:coverage.xml --cov-fail-under=15 tests/python/integration" [tool.pixi.feature.python-doc.tasks] -python-doc = { cmd = "make html", cwd = "docs", env = { SPHINXOPTS = "--fail-on-warning --keep-going --nitpicky" }} +python-docs = { cmd = "make clean html", cwd = "docs", env = { SPHINXOPTS = "--fail-on-warning --keep-going --nitpicky" }} [tool.pixi.feature.python-build.tasks] build-wheels = { cmd = "uv build --sdist --wheel --out-dir dist/ ." } @@ -240,10 +239,10 @@ tox = ">=4.23.2,<5" ghp-import = ">=2.1.0,<3" make = ">=4.4.1,<5" pydata-sphinx-theme = ">=0.16.1,<0.17" -sphinx-click = ">=6.0.0,<7" +sphinx-click = ">=6.1.0,<7" sphinx-copybutton = ">=0.5.2,<0.6" sphinx-tabs = ">=3.4.1,<4" -sphinxcontrib-mermaid = ">=1.0.0,<2" +sphinxcontrib-mermaid = ">=1.2.3,<2" [tool.pixi.feature.python-anthropic.dependencies] anthropic = ">=0.40.0,<0.41"