### Install openreview-downloader Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Install the package using pip. This is the first step before using the CLI. ```bash pip install openreview_downloader ``` -------------------------------- ### Install openreview-downloader Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Install the tool using pip. For development, install from source with development dependencies. ```bash pip install openreview_downloader ``` ```bash pip install -e '.[dev]' ``` -------------------------------- ### Install development dependencies and run tests Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Installs the package in editable mode with development dependencies and discovers and runs unit tests. ```bash pip install -e '.[dev]' python -m unittest discover -s tests # Expected output: # .... # ---------------------------------------------------------------------- # Ran 4 tests in 0.003s # OK ``` -------------------------------- ### Install Development Dependencies Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Install the project in editable mode with all development dependencies included. This is necessary for contributing to the project. ```bash pip install -e '.[dev]' ``` -------------------------------- ### CLI Usage Examples Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Examples of using the `ordl` command-line tool to download accepted papers with specific criteria, including regex matching, case sensitivity, and JSONL output format. ```APIDOC ## CLI Usage Examples ### Require both a regex AND a text term ```bash ordl accepted --list --regex 'protein(s)?' --grep graph \ --venue-id NeurIPS.cc/2025/Conference ``` ### Case-sensitive regex download ```bash ordl accepted --regex 'GPT-[0-9]+' --case-sensitive \ --venue-id NeurIPS.cc/2025/Conference ``` ### `--format jsonl` — Machine-readable JSONL output When `--list` is active, `--format jsonl` emits a summary line followed by one JSON object per paper on stdout. Progress and status messages go to stderr so stdout can be piped cleanly. ```bash ordl accepted --list --search diffusion --head 2 \ --format jsonl --venue-id NeurIPS.cc/2025/Conference \ > papers.jsonl # stdout (papers.jsonl): # {"decisions": ["accepted"], "head": 2, "matched_papers": 710, # "shown_papers": 2, "type": "summary", "venue_id": "NeurIPS.cc/2025/Conference"} # {"authors": "Jiyao Zhang, ...", "decision": "accepted", "id": "CB8jwNE2vV", # "match_count": 1, # "matches": [{"count": 1, "field": "abstract", "query": "diffusion", # "snippet": "...occupancy-[diffusion] model..."}], # "number": 29119, # "pdf_path": "downloads/neurips2025/accepted/29119_CADGrasp_...pdf", # "title": "CADGrasp: ...", "type": "paper", # "venue": "NeurIPS 2025 poster", "venueid": "NeurIPS.cc/2025/Conference"} # Pipe into jq for lightweight post-processing ordl accepted --list --format jsonl --venue-id ICLR.cc/2025/Conference \ 2>/dev/null | jq 'select(.type=="paper") | .title' ``` ### Other conferences The `--venue-id` flag accepts any OpenReview venue identifier. ```bash # ICLR 2025 orals only ordl oral --venue-id ICLR.cc/2025/Conference # ICML 2025 oral + spotlight ordl oral,spotlight --venue-id ICML.cc/2025/Conference # Info for ICLR ordl --info --venue-id ICLR.cc/2025/Conference ``` ``` -------------------------------- ### JSON Lines Output Example Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Example of JSON Lines output, which includes a summary line followed by individual paper records. Each paper record contains stable fields for easy parsing. ```json {"decisions": ["accepted"], "head": 2, "matched_papers": 710, "shown_papers": 2, "type": "summary", "venue_id": "NeurIPS.cc/2025/Conference"} {"authors": "Jiyao Zhang, Zhiyuan Ma, Tianhao Wu, Zeyuan Chen, Hao Dong", "decision": "accepted", "id": "CB8jwNE2vV", "match_count": 1, "matches": [{"count": 1, "field": "abstract", "query": "diffusion", "snippet": "... high-dimensional representation, we introduce an occupancy-[diffusion] model with voxel-level conditional guidance and force closu..."}], "number": 29119, "pdf_path": "downloads/neurips2025/accepted/29119_CADGrasp_Learning_Contact_and_Collision_Aware_General_Dexterous_Grasping_in_Cluttered_Scenes.pdf", "title": "CADGrasp: Learning Contact and Collision Aware General Dexterous Grasping in Cluttered Scenes", "type": "paper", "venue": "NeurIPS 2025 poster", "venueid": "NeurIPS.cc/2025/Conference"} ``` -------------------------------- ### Get Decision Counts Without Downloading Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Fetch and display the counts of papers for each decision category without downloading any PDFs. Useful for getting an overview of submissions. ```bash ordl --info --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Create an OpenReview client Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Use `build_client()` to create an `OpenReviewClient`. It can be anonymous or authenticated by setting `OPENREVIEW_USERNAME` and `OPENREVIEW_PASSWORD` environment variables. ```python import os from openreview_downloader.cli import build_client # Anonymous client (sufficient for public venues) client = build_client() # Authenticated client (set env vars before calling) os.environ["OPENREVIEW_USERNAME"] = "user@example.com" os.environ["OPENREVIEW_PASSWORD"] = "s3cr3t" client = build_client() ``` -------------------------------- ### Python API: build_client() Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Creates an authenticated OpenReview client. It can read credentials from environment variables `OPENREVIEW_USERNAME` and `OPENREVIEW_PASSWORD` for authenticated access. ```APIDOC ## Python API All CLI logic is importable from `openreview_downloader.cli`. Below are the key public functions. ### `build_client()` — Create an authenticated OpenReview client Returns an `openreview.api.OpenReviewClient` pointed at `api2.openreview.net`. Reads optional credentials from environment variables `OPENREVIEW_USERNAME` and `OPENREVIEW_PASSWORD`. ```python import os from openreview_downloader.cli import build_client # Anonymous client (sufficient for public venues) client = build_client() # Authenticated client (set env vars before calling) os.environ["OPENREVIEW_USERNAME"] = "user@example.com" os.environ["OPENREVIEW_PASSWORD"] = "s3cr3t" client = build_client() ``` ``` -------------------------------- ### Run Unit Tests Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Execute the project's unit tests using the unittest module. Ensure all tests pass to verify code integrity. ```bash python -m unittest discover -s tests ``` -------------------------------- ### List First N Papers (Default to Accepted) Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md If no decision is specified when using the --list flag, the CLI defaults to listing accepted papers. This command shows the first 20 accepted papers. ```bash ordl --head 20 --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Search Accepted Papers by Regex Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Preview accepted papers matching a regex pattern. This allows for more complex matching criteria than simple text search. Use `--list` to preview without downloading. ```bash ordl accepted --list --regex 'diffusion|transformer' --head 2 --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Download Papers Matching Text Search Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Download papers that match a text search query. This command reruns the same query as the preview command but without the `--list` flag, initiating the download. ```bash ordl accepted --search diffusion --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Download Limited Number of Papers Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Download only the first N matching papers for a given search query. Useful for testing or downloading a small subset. ```bash ordl accepted --search diffusion --head 10 --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Python API: fetch_notes() Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Fetches raw submission notes (accepted and rejected) from the OpenReview API for a given venue. ```APIDOC ### `fetch_notes(client, venue_id, need_rejected)` — Fetch raw submission notes Returns `(accepted_notes, rejected_notes)` lists from the OpenReview API. ```python from openreview_downloader.cli import build_client, fetch_notes client = build_client() venue_id = "NeurIPS.cc/2025/Conference" accepted, rejected = fetch_notes(client, venue_id, need_rejected=True) print(f"Accepted: {len(accepted)}, Rejected: {len(rejected)}") # Accepted: 5286, Rejected: 254 ``` ``` -------------------------------- ### split_existing(selected, skip_existing) Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Separates a list of selected items into those that need to be downloaded and those that already exist. If `skip_existing` is True, items already present on disk are excluded from the download queue. ```APIDOC ## split_existing(selected, skip_existing) ### Description Separate new vs. already-downloaded files. Returns `(to_download, existing_count)`. When `skip_existing=True`, files already on disk are omitted from the download queue. ### Parameters - **selected** (list): A list of selected items, typically from `collect_selected`. - **skip_existing** (bool): If True, files that already exist on disk will be excluded from the `to_download` list. ### Returns A tuple containing: - **to_download** (list): A list of items that need to be downloaded. - **existing_count** (int): The number of items that already exist on disk. ``` -------------------------------- ### Download papers from specific conferences and decisions Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Use the `--venue-id` flag to specify conferences and comma-separated values for decisions like `oral` or `spotlight`. ```bash # ICLR 2025 orals only ordl oral --venue-id ICLR.cc/2025/Conference # ICML 2025 oral + spotlight ordl oral,spotlight --venue-id ICML.cc/2025/Conference # Info for ICLR ordl --info --venue-id ICLR.cc/2025/Conference ``` -------------------------------- ### Download accepted papers with case-sensitive regex Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Perform a case-sensitive regex search for accepted papers using the `--regex` and `--case-sensitive` flags. Specify the venue with `--venue-id`. ```bash ordl accepted --regex 'GPT-[0-9]+' --case-sensitive \ --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Search Accepted Papers by Text Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Preview accepted papers matching a text query. Use `--list` to preview without downloading. The `--head` option limits the number of results shown. ```bash ordl accepted --list --search diffusion --head 2 --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Derive output directory from venue ID Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Generates a standardized directory path for downloads based on the conference venue ID. ```python from openreview_downloader.cli import conference_dir print(conference_dir("NeurIPS.cc/2025/Conference")) # downloads/neurips2025 print(conference_dir("ICLR.cc/2024/Conference")) # downloads/iclr2024 ``` -------------------------------- ### List Accepted and Rejected Papers Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md List both accepted and rejected papers for a venue without downloading. This provides a comprehensive list of all submissions. ```bash ordl all --list --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### List First N Accepted Papers Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md List only the first specified number of accepted papers. This is useful for quickly previewing a small subset of the results. ```bash ordl accepted --list --head 3 --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### List papers without downloading Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Prints a formatted list of matching papers to standard output. Can be combined with filters like --head, --search, and --regex. Omitting DECISIONS defaults to 'accepted' and enables --list. ```bash # List first 3 accepted papers ordl accepted --list --head 3 --venue-id NeurIPS.cc/2025/Conference ``` ```bash # Omit DECISIONS to default to accepted and auto-enable --list ordl --head 20 --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Download NeurIPS Oral and Spotlight Papers Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Download papers from multiple decision categories (oral and spotlight) for a given venue. ```bash ordl oral,spotlight --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Build a download list for selected papers Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Use `collect_selected` to generate a list of papers matching specific decisions. It returns tuples containing the note, category, and desired download path, deduplicating by note ID. ```python from pathlib import Path from openreview_downloader.cli import ( build_client, fetch_notes, collect_selected ) client = build_client() venue_id = "NeurIPS.cc/2025/Conference" accepted, rejected = fetch_notes(client, venue_id, need_rejected=False) selected = collect_selected( accepted=accepted, rejected=rejected, venue_id=venue_id, decisions=["oral", "spotlight"], base_dir=Path("downloads/neurips2025"), ) for note, category, path in selected[:3]: print(f"[{category}] {path.name}") # [oral] 27970_Deep_Compositional_Phase_Diffusion.pdf # [spotlight] 28003_Some_Spotlight_Paper.pdf ``` -------------------------------- ### Download ICML 2025 Oral and Spotlight Papers Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Download papers that received either an 'oral' or 'spotlight' decision for ICML 2025. Multiple decisions can be specified as a comma-separated list. ```bash ordl oral,spotlight --venue-id ICML.cc/2025/Conference ``` -------------------------------- ### Fetch raw submission notes Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt The `fetch_notes` function retrieves accepted and rejected paper notes from the OpenReview API for a given venue. Set `need_rejected=True` to also fetch rejected papers. ```python from openreview_downloader.cli import build_client, fetch_notes client = build_client() venue_id = "NeurIPS.cc/2025/Conference" accepted, rejected = fetch_notes(client, venue_id, need_rejected=True) print(f"Accepted: {len(accepted)}, Rejected: {len(rejected)}") # Accepted: 5286, Rejected: 254 ``` -------------------------------- ### Separate existing files from download queue Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Determines which files need to be downloaded by checking for their existence on disk. Returns the count of files to download and the count of already existing files. ```python from pathlib import Path import tempfile from openreview_downloader.cli import split_existing from types import SimpleNamespace with tempfile.TemporaryDirectory() as tmp: existing_path = Path(tmp) / "accepted" / "paper.pdf" existing_path.parent.mkdir() existing_path.write_bytes(b"%PDF-1.4") note = SimpleNamespace(id="note-1", number=1, content={}) selected = [(note, "accepted", existing_path, None)] to_download, already_present = split_existing(selected, skip_existing=True) print(f"To download: {len(to_download)}, Already present: {already_present}") # To download: 0, Already present: 1 ``` -------------------------------- ### List Accepted Papers Without Downloading Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md List all accepted papers for a venue without downloading the PDF files. This command shows paper details and their intended save path. ```bash ordl accepted --list --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Filter accepted papers by regex and text term Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Use the `--regex` and `--grep` flags to filter accepted papers based on regular expressions and text terms. Specify the venue using `--venue-id`. ```bash ordl accepted --list --regex 'protein(s)?' --grep graph \ --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### JSON Lines Output for Automation Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md For scripts, agents, and crawlbots, use JSON Lines output (`--format jsonl`) while listing papers. This format is convenient for programmatic processing. ```bash ordl accepted --list --search diffusion --head 2 --format jsonl --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Download papers by decision category Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Downloads PDFs for specified decision categories (e.g., oral, spotlight, accepted). Skips existing files by default. Can customize output directory and force re-fetching. ```bash # Download all NeurIPS 2025 oral presentations ordl oral --venue-id NeurIPS.cc/2025/Conference ``` ```bash # Download both oral and spotlight papers ordl oral,spotlight --venue-id NeurIPS.cc/2025/Conference ``` ```bash # Download every accepted paper ordl accepted --venue-id NeurIPS.cc/2025/Conference ``` ```bash # Download accepted + rejected (shorthand "all") ordl all --venue-id NeurIPS.cc/2025/Conference ``` ```bash # Download to a custom directory, always re-fetching existing files ordl accepted --venue-id ICLR.cc/2025/Conference \ --out-dir /data/iclr2025 \ --no-skip-existing ``` -------------------------------- ### Download ICLR 2025 Orals Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Download papers with the 'oral' decision for a specific venue. Change the `--venue-id` to target different conferences. ```bash ordl oral --venue-id ICLR.cc/2025/Conference ``` -------------------------------- ### Download All Accepted NeurIPS Papers Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Download all papers that were accepted, regardless of their presentation type. ```bash ordl accepted --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Download papers in JSONL format Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Use `--format jsonl` to output paper data in JSON Lines format. This is useful for machine-readable processing. Progress messages are sent to stderr. ```bash ordl accepted --list --search diffusion --head 2 \ --format jsonl --venue-id NeurIPS.cc/2025/Conference \ > papers.jsonl ``` -------------------------------- ### Download All ICLR 2025 Accepted Papers Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Download all papers that were accepted for ICLR 2025, regardless of their presentation format. This command fetches all papers with the 'accepted' decision. ```bash ordl accepted --venue-id ICLR.cc/2025/Conference ``` -------------------------------- ### Download NeurIPS Oral Papers Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Download all oral presentation papers for a specific venue. The files are saved in a structured directory. ```bash ordl oral --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Compile regex patterns for filtering Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Compiles a list of string patterns into regex objects. Raises an error for invalid patterns. Case sensitivity can be controlled. ```python from openreview_downloader.cli import compile_regexes patterns = compile_regexes( ["diffusion|transformer", r"GPT-\d+"], case_sensitive=False, ) # [re.compile('diffusion|transformer', re.IGNORECASE), # re.compile('GPT-\d+', re.IGNORECASE)] print(patterns) ``` -------------------------------- ### conference_dir(venue_id) Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Derives a standardized output directory path from a given venue ID. This function helps in organizing downloaded papers by creating a consistent directory structure. ```APIDOC ## conference_dir(venue_id) ### Description Derive output directory from venue ID. Returns a `Path` like `downloads/neurips2025` derived from the venue ID. ### Parameters - **venue_id** (str): The venue identifier string (e.g., "NeurIPS.cc/2025/Conference"). ### Returns A `Path` object representing the output directory for the conference. ``` -------------------------------- ### Text search across paper metadata Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Searches papers case-insensitively over title, authors, abstract, keywords, decision, venue, id, and paper number. Repeat the flag for AND logic. Use --grep as an alias. ```bash # List accepted papers mentioning "diffusion" (preview only) ordl accepted --list --search diffusion --head 2 \ --venue-id NeurIPS.cc/2025/Conference ``` ```bash # Require both "diffusion" AND "protein" to match ordl accepted --list --grep diffusion --grep protein \ --venue-id NeurIPS.cc/2025/Conference ``` ```bash # Download all matches (remove --list) ordl accepted --search diffusion \ --venue-id NeurIPS.cc/2025/Conference ``` ```bash # Download only the first 10 matches ordl accepted --search diffusion --head 10 \ --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Process JSONL output with jq Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Pipe the JSONL output to `jq` for filtering and extracting specific fields, such as paper titles. Redirect stderr to `/dev/null` to clean up stdout. ```bash # stdout (papers.jsonl): # {"decisions": ["accepted"], "head": 2, "matched_papers": 710, # "shown_papers": 2, "type": "summary", "venue_id": "NeurIPS.cc/2025/Conference"} # {"authors": "Jiyao Zhang, ...", "decision": "accepted", "id": "CB8jwNE2vV", # "match_count": 1, # "matches": [{"count": 1, "field": "abstract", "query": "diffusion", # "snippet": "...occupancy-[diffusion] model..."}], # "number": 29119, # "pdf_path": "downloads/neurips2025/accepted/29119_CADGrasp_...pdf", # "title": "CADGrasp: ...", "type": "paper", # "venue": "NeurIPS 2025 poster", "venueid": "NeurIPS.cc/2025/Conference"} # Pipe into jq for lightweight post-processing ordl accepted --list --format jsonl --venue-id ICLR.cc/2025/Conference \ 2>/dev/null | jq 'select(.type=="paper") | .title' ``` -------------------------------- ### Filter selected papers with search/regex criteria Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Applies search and regex filters to collected papers. Ensure 'args' namespace includes 'search_terms' and 'regexes'. ```python import argparse from pathlib import Path from openreview_downloader.cli import ( build_client, fetch_notes, collect_selected, filter_selected, compile_regexes ) client = build_client() venue_id = "NeurIPS.cc/2025/Conference" accepted, _ = fetch_notes(client, venue_id, need_rejected=False) selected = collect_selected(accepted, [], venue_id, ["accepted"], Path("downloads/neurips2025")) args = argparse.Namespace( venue_id=venue_id, decisions=["accepted"], search_terms=["diffusion"], regexes=compile_regexes(["protein(s)?"], case_sensitive=False), case_sensitive=False, head=None, format="text", list=True, ) matched = filter_selected(selected, args) print(f"Papers matching 'diffusion' AND /protein(s)?/: {len(matched)}") for note, cat, path, info in matched[:2]: print(f" {note.number} hits={info['hit_count']} – {path.name}") ``` -------------------------------- ### Python API: collect_selected() Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Builds a list of papers matching specific decisions, returning a tuple of the note, its category, and the intended download path. ```APIDOC ### `collect_selected(accepted, rejected, venue_id, decisions, base_dir)` — Build a download list Returns `[(note, category, path), ...]` — one entry per paper matching the requested decisions. Deduplicates by note ID. ```python from pathlib import Path from openreview_downloader.cli import ( build_client, fetch_notes, collect_selected ) client = build_client() venue_id = "NeurIPS.cc/2025/Conference" accepted, rejected = fetch_notes(client, venue_id, need_rejected=False) selected = collect_selected( accepted=accepted, rejected=rejected, venue_id=venue_id, decisions=["oral", "spotlight"], base_dir=Path("downloads/neurips2025"), ) for note, category, path in selected[:3]: print(f"[{category}] {path.name}") # [oral] 27970_Deep_Compositional_Phase_Diffusion.pdf # [spotlight] 28003_Some_Spotlight_Paper.pdf ``` ``` -------------------------------- ### Regular-expression search for papers Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Searches paper metadata using Python regex syntax. Repeat the flag for multiple required patterns. Use --case-sensitive for exact matching. ```bash # List papers matching either "diffusion" or "transformer" ordl accepted --list --regex 'diffusion|transformer' --head 2 \ --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### Parse and validate decision strings Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Converts a comma-separated string of decisions into an ordered, unique list. Handles the 'all' token. ```python from openreview_downloader.cli import parse_decisions print(parse_decisions("oral,all,accepted")) # ['oral', 'accepted', 'rejected'] print(parse_decisions("spotlight,rejected")) # ['spotlight', 'rejected'] ``` -------------------------------- ### Search with Multiple Text Criteria Source: https://github.com/mireklzicar/openreview_downloader/blob/main/README.md Require multiple terms or patterns by repeating the `--grep` (or `--search`) flag. This ensures that all specified terms are present in the matched papers. ```bash ordl accepted --list --grep diffusion --grep protein --venue-id NeurIPS.cc/2025/Conference ``` -------------------------------- ### compile_regexes(patterns, case_sensitive) Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Compiles a list of regex patterns into `re.Pattern` objects. This function is useful for preparing search patterns that can be efficiently applied to filter data. ```APIDOC ## compile_regexes(patterns, case_sensitive) ### Description Compile regex patterns into `re.Pattern` objects. Raises `argparse.ArgumentTypeError` on invalid patterns. ### Parameters - **patterns** (list[str]): A list of regex pattern strings to compile. - **case_sensitive** (bool): If True, the regex matching will be case-sensitive. If False, it will be case-insensitive. ### Returns A list of compiled `re.Pattern` objects. ``` -------------------------------- ### Python API: decision_counts() Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Counts papers based on their decisions (oral, spotlight, accepted, rejected) from provided lists of accepted and rejected notes. ```APIDOC ### `decision_counts(accepted, rejected, venue_id)` — Count papers per decision Returns a dict with keys `oral`, `spotlight`, `accepted`, `rejected`. ```python from openreview_downloader.cli import ( build_client, fetch_notes, decision_counts ) client = build_client() venue_id = "ICLR.cc/2025/Conference" accepted, rejected = fetch_notes(client, venue_id, need_rejected=True) counts = decision_counts(accepted, rejected, venue_id) # {'oral': 103, 'spotlight': 322, 'accepted': 1734, 'rejected': 4812} print(counts) ``` ``` -------------------------------- ### filter_selected(selected, args) Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Applies search and regex filters to a list of selected papers. It takes the output from `collect_selected` and a parsed `args` namespace to return only the papers that match the specified criteria, along with per-paper match metadata. ```APIDOC ## filter_selected(selected, args) ### Description Takes the output of `collect_selected` plus a parsed `args` namespace and returns `[(note, category, path, match_info), ...]` with only matching papers, including per-paper match metadata. ### Parameters - **selected**: The output from `collect_selected`. - **args**: A parsed `argparse.Namespace` object containing filtering criteria such as `search_terms` and `regexes`. ### Returns A list of tuples, where each tuple contains `(note, category, path, match_info)` for the matching papers. ``` -------------------------------- ### parse_decisions(raw) Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt Parses a raw string of comma-separated decisions into an ordered, deduplicated list. It also handles the special token 'all' by expanding it to include both 'accepted' and 'rejected' decisions. ```APIDOC ## parse_decisions(raw) ### Description Parse and validate decision strings. Converts a comma-separated decision string into an ordered, deduplicated list. Expands the `all` token into `["accepted", "rejected"]`. ### Parameters - **raw** (str): A comma-separated string of decisions (e.g., "oral,all,accepted"). ### Returns An ordered, deduplicated list of decision strings. ``` -------------------------------- ### Count papers per decision Source: https://context7.com/mireklzicar/openreview_downloader/llms.txt The `decision_counts` function calculates the number of papers for each decision category (oral, spotlight, accepted, rejected) given lists of accepted and rejected notes. ```python from openreview_downloader.cli import ( build_client, fetch_notes, decision_counts ) client = build_client() venue_id = "ICLR.cc/2025/Conference" accepted, rejected = fetch_notes(client, venue_id, need_rejected=True) counts = decision_counts(accepted, rejected, venue_id) # {'oral': 103, 'spotlight': 322, 'accepted': 1734, 'rejected': 4812} print(counts) ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.