Skills Agentes

Polars Bio

Operaciones de intervalos genómicos y E/S de archivos de bioinformática de alto rendimiento sobre DataFrames de Polars: overlap, nearest, merge, coverage, complement, subtract para BED/VCF/BAM/GFF. Alternativa a bioframe.

Reemplaza a: bioframe (alternativa más rápida)

Solicitaread write edit bash
Estrellas
34.8k

en todo el repo

Actividad
57

0–100, la ruta de este skill

Actualizado
el mes pasado

último commit aquí

Commits
2

últimos 90 días

Contexto
3.8k tok

59 tok en reposo

Paquete
7 archivos

65 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add K-Dense-AI/scientific-agent-skills --skill polars-bio --agent claude-code

Se instala solo en este repositorio.

Qué hace

  • Ejecuta operaciones de aritmética de intervalos genómicos (overlap, nearest, merge, coverage, complement, subtract) sobre DataFrames de Polars.
  • Lee y escribe formatos de bioinformática: BED, VCF, BAM, CRAM, GFF/GTF, FASTA, FASTQ.
  • Soporta procesamiento streaming/out-of-core para genomas grandes y E/S en la nube (S3, GCS, Azure).
  • Expone una interfaz SQL sobre datos genómicos vía el motor DataFusion.

Úsalo cuando

  • Realizar operaciones de intervalos genómicos (overlap, nearest, merge, coverage, complement, subtract).
  • Leer o escribir archivos BED, VCF, BAM, CRAM, GFF/GTF, FASTA o FASTQ.
  • Procesar datasets genómicos grandes que no caben en memoria, o migrar desde bioframe.
  • Calcular profundidad de lectura/pileup a partir de archivos BAM/CRAM.

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Calcula el overlap entre estos dos archivos BED
    • Lee este VCF grande en streaming con polars-bio
    • Migra este pipeline de bioframe a polars-bio
    • Calcula la profundidad de lectura de este BAM

    SKILL.md

    En inglés

    polars-bio

    Overview

    polars-bio is a high-performance Python library for genomic interval operations and bioinformatics file I/O, built on Polars, Apache Arrow, and Apache DataFusion. It provides a familiar DataFrame-centric API for interval arithmetic (overlap, nearest, merge, coverage, complement, subtract) and reading/writing common bioinformatics formats (BED, VCF, BAM, CRAM, GFF/GTF, FASTA, FASTQ).

    Key value propositions:

    • 6-38x faster than bioframe on real-world genomic benchmarks
    • Streaming/out-of-core support for large genomes via DataFusion
    • Cloud-native file I/O (S3, GCS, Azure) with predicate pushdown
    • Two API styles: functional (pb.overlap(df1, df2)) and method-chaining (df1.lazy().pb.overlap(df2))
    • SQL interface for genomic data via DataFusion SQL engine

    When to Use This Skill

    Use this skill when:

    • Performing genomic interval operations (overlap, nearest, merge, coverage, complement, subtract)
    • Reading/writing bioinformatics file formats (BED, VCF, BAM, CRAM, GFF/GTF, FASTA, FASTQ)
    • Processing large genomic datasets that don't fit in memory (streaming mode)
    • Running SQL queries on genomic data files
    • Migrating from bioframe to a faster alternative
    • Computing read depth/pileup from BAM/CRAM files
    • Working with Polars DataFrames containing genomic intervals

    Quick Start

    Installation

    Requires Python 3.11–3.14 (see PyPI).

    uv pip install "polars-bio==0.31.0"
    

    For pandas compatibility (pandas ≥3.0):

    uv pip install "polars-bio[pandas]==0.31.0"
    

    Basic Overlap Example

    import polars as pl
    import polars_bio as pb
    
    # Create two interval DataFrames
    df1 = pl.DataFrame({
        "chrom": ["chr1", "chr1", "chr1"],
        "start": [1, 5, 22],
        "end":   [6, 9, 30],
    })
    
    df2 = pl.DataFrame({
        "chrom": ["chr1", "chr1"],
        "start": [3, 25],
        "end":   [8, 28],
    })
    
    # Functional API (returns LazyFrame by default)
    result = pb.overlap(df1, df2)
    result_df = result.collect()
    
    # Get a DataFrame directly
    result_df = pb.overlap(df1, df2, output_type="polars.DataFrame")
    
    # Method-chaining API (via .pb accessor on LazyFrame)
    result = df1.lazy().pb.overlap(df2)
    result_df = result.collect()
    

    Reading a BED File

    import polars_bio as pb
    
    # Eager read (loads entire file)
    df = pb.read_bed("regions.bed")
    
    # Lazy scan (streaming, for large files)
    lf = pb.scan_bed("regions.bed")
    result = lf.collect()
    

    Core Capabilities

    1. Genomic Interval Operations

    polars-bio provides 8 core interval operations for genomic range arithmetic. All operations accept Polars DataFrames with chrom, start, end columns (configurable). All operations return a LazyFrame by default (use output_type="polars.DataFrame" for eager results).

    Operations:

    • overlap / count_overlaps - Find or count overlapping intervals between two sets (overlap_output="left" returns df1-only hits since 0.30.0)
    • nearest - Find nearest intervals (with configurable k, overlap, distance params)
    • merge - Merge overlapping/bookended intervals within a set
    • cluster - Assign cluster IDs to overlapping intervals
    • coverage - Compute per-interval coverage counts (two-input operation)
    • complement - Find gaps between intervals within a genome
    • subtract - Remove portions of intervals that overlap another set

    Example:

    import polars_bio as pb
    
    # Find overlapping intervals (returns LazyFrame)
    result = pb.overlap(df1, df2, suffixes=("_1", "_2"))
    
    # Count overlaps per interval
    counts = pb.count_overlaps(df1, df2)
    
    # Merge overlapping intervals
    merged = pb.merge(df1)
    
    # Find nearest intervals
    nearest = pb.nearest(df1, df2)
    
    # Collect any LazyFrame result to DataFrame
    result_df = result.collect()
    

    Reference: See references/interval_operations.md for detailed documentation on all operations, parameters, output schemas, and performance considerations.

    2. Bioinformatics File I/O

    Read and write common bioinformatics formats with read_*, scan_*, write_*, and sink_* functions. Supports cloud storage (S3, GCS, Azure) and compression (GZIP, BGZF).

    Supported formats:

    • BED - Genomic intervals (read_bed, scan_bed, write_* via generic)
    • VCF - Genetic variants (read_vcf, scan_vcf, write_vcf, sink_vcf)
    • VCF Zarr - Analysis-ready Zarr stores (read_vcf_zarr, scan_vcf_zarr; local directory paths)
    • BAM - Aligned reads (read_bam, scan_bam, write_bam, sink_bam)
    • CRAM - Compressed alignments (read_cram, scan_cram, write_cram, sink_cram)
    • GFF - Gene annotations (read_gff, scan_gff)
    • GTF - Gene annotations (read_gtf, scan_gtf)
    • FASTA - Reference sequences (read_fasta, scan_fasta, write_fasta, sink_fasta)
    • FASTQ - Sequencing reads (read_fastq, scan_fastq, write_fastq, sink_fastq)
    • SAM - Text alignments (read_sam, scan_sam, write_sam, sink_sam)
    • Hi-C pairs - Chromatin contacts (read_pairs, scan_pairs)

    Example:

    import polars_bio as pb
    
    # Read VCF file
    variants = pb.read_vcf("samples.vcf.gz")
    
    # Lazy scan BAM file (streaming)
    alignments = pb.scan_bam("aligned.bam")
    
    # Read GFF annotations
    genes = pb.read_gff("annotations.gff3")
    
    # Cloud storage (individual params, not a dict)
    df = pb.read_bed("s3://bucket/regions.bed",
                     allow_anonymous=True)
    

    Reference: See references/file_io.md for per-format column schemas, parameters, cloud storage options, and compression support.

    3. SQL Data Processing

    Register bioinformatics files as tables and query them using DataFusion SQL. Combines the power of SQL with polars-bio's genomic-aware readers.

    import polars as pl
    import polars_bio as pb
    
    # Register files as SQL tables (path first, name= keyword)
    pb.register_vcf("samples.vcf.gz", name="variants")
    pb.register_bed("target_regions.bed", name="regions")
    
    # Query with SQL (returns LazyFrame)
    result = pb.sql("SELECT chrom, start, end, ref, alt FROM variants WHERE qual > 30")
    result_df = result.collect()
    
    # Register a Polars DataFrame as a SQL table
    pb.from_polars("my_intervals", df)
    result = pb.sql("SELECT * FROM my_intervals WHERE chrom = 'chr1'").collect()
    

    Reference: See references/sql_processing.md for register functions, SQL syntax, and examples.

    4. Pileup Operations

    Compute per-base read depth from BAM/CRAM files with CIGAR-aware depth calculation.

    import polars_bio as pb
    
    # Compute depth across a BAM file
    depth_lf = pb.depth("aligned.bam")
    depth_df = depth_lf.collect()
    
    # With quality filter
    depth_lf = pb.depth("aligned.bam", min_mapping_quality=20)
    

    Reference: See references/pileup_operations.md for parameters and integration patterns.

    Key Concepts

    Coordinate Systems

    polars-bio defaults to 1-based coordinates (genomic convention). This can be changed globally:

    import polars_bio as pb
    
    # Switch to 0-based half-open coordinates (default is 1-based / False)
    pb.set_option("datafusion.bio.coordinate_system_zero_based", True)
    
    # Switch back to 1-based (default)
    pb.set_option("datafusion.bio.coordinate_system_zero_based", False)
    

    I/O functions also accept use_zero_based to set coordinate metadata on the resulting DataFrame:

    # Read BED with explicit 0-based metadata
    df = pb.read_bed("regions.bed", use_zero_based=True)
    

    Important: BED files are always 0-based half-open in the file format. polars-bio handles the conversion automatically when reading BED files. Coordinate metadata is attached to DataFrames by I/O functions and propagated through operations.

    Two API Styles

    Functional API - standalone functions, explicit inputs:

    result = pb.overlap(df1, df2, suffixes=("_1", "_2"))
    merged = pb.merge(df)
    

    Method-chaining API - via .pb accessor on LazyFrames (not DataFrames):

    result = df1.lazy().pb.overlap(df2)
    merged = df.lazy().pb.merge()
    

    Important: The .pb accessor for interval operations is only available on LazyFrame. On DataFrame, .pb provides write operations only (write_bam, write_vcf, etc.).

    Method-chaining enables fluent pipelines:

    # Chain interval operations (note: overlap outputs suffixed columns,
    # so rename before merge which expects chrom/start/end)
    result = (
        df1.lazy()
        .pb.overlap(df2)
        .filter(pl.col("start_2") > 1000)
        .select(
            pl.col("chrom_1").alias("chrom"),
            pl.col("start_1").alias("start"),
            pl.col("end_1").alias("end"),
        )
        .pb.merge()
        .collect()
    )
    

    Probe-Build Architecture

    For two-input operations (overlap, nearest, count_overlaps, coverage), polars-bio uses a probe-build join strategy:

    • The first DataFrame is the probe (iterated over)
    • The second DataFrame is the build (indexed for lookup)

    For best performance, pass the larger DataFrame as the first argument (probe) and the smaller one as the second (build).

    Column Conventions

    By default, polars-bio expects columns named chrom, start, end. Custom column names can be specified via lists:

    result = pb.overlap(
        df1, df2,
        cols1=["chromosome", "begin", "finish"],
        cols2=["chr", "pos_start", "pos_end"],
    )
    

    Return Types and Collecting Results

    All interval operations and pb.sql() return a LazyFrame by default. Use .collect() to materialize results, or pass output_type="polars.DataFrame" for eager evaluation:

    # Lazy (default) - collect when needed
    result_lf = pb.overlap(df1, df2)
    result_df = result_lf.collect()
    
    # Eager - get DataFrame directly
    result_df = pb.overlap(df1, df2, output_type="polars.DataFrame")
    

    Streaming and Out-of-Core Processing

    For datasets larger than available RAM, use scan_* functions and streaming execution:

    # Scan files lazily
    lf = pb.scan_bed("large_intervals.bed")
    
    # Process with Polars streaming (requires polars ≥1.37, bundled with polars-bio)
    result = lf.collect(engine="streaming")
    

    DataFusion streaming is enabled by default for interval operations, processing data in batches without loading the full dataset into memory.

    Common Pitfalls

    1. .pb accessor on DataFrame vs LazyFrame: Interval operations (overlap, merge, etc.) are only on LazyFrame.pb. DataFrame.pb only has write methods. Use .lazy() to convert before chaining interval ops.

    2. LazyFrame returns: All interval operations and pb.sql() return LazyFrame by default. Don't forget .collect() or use output_type="polars.DataFrame".

    3. Column name mismatches: polars-bio expects chrom, start, end by default. Use cols1/cols2 parameters (as lists) if your columns have different names.

    4. Coordinate system metadata: Interval operations read coordinate metadata from I/O functions or DataFrame config_meta. For manually built DataFrames, set df.config_meta.set(coordinate_system_zero_based=True) (0-based) or False (1-based). If metadata is missing, polars-bio falls back to the global datafusion.bio.coordinate_system_zero_based setting (with a warning). Set pb.set_option("datafusion.bio.coordinate_system_check", True) to raise MissingCoordinateSystemError instead. Mismatched systems between inputs raise CoordinateSystemMismatchError.

    5. Probe-build order matters: For overlap, nearest, and coverage, the first DataFrame is probed against the second. Swapping arguments changes which intervals appear in the left vs right output columns, and can affect performance.

    6. INT32 position limit: Genomic positions are stored as 32-bit integers, limiting coordinates to ~2.1 billion. This is sufficient for all known genomes but may be an issue with custom coordinate spaces.

    7. BAM index requirements: read_bam and scan_bam require a .bai index file alongside the BAM. Create one with samtools index if missing.

    8. Parallel execution disabled by default: DataFusion parallelism defaults to 1 partition. Enable for large datasets:

      pb.set_option("datafusion.execution.target_partitions", 8)
      
    9. CRAM has separate functions: Use read_cram/scan_cram/register_cram for CRAM files (not read_bam). CRAM functions require a reference_path parameter.

    Best Practices

    1. Use scan_* for large files: Prefer scan_bed, scan_vcf, etc. over read_* for files larger than available RAM. Scan functions enable streaming and predicate pushdown.

    2. Configure parallelism for large datasets:

      import os
      pb.set_option("datafusion.execution.target_partitions", os.cpu_count())
      
    3. Use BGZF compression: BGZF-compressed files (.bed.gz, .vcf.gz) support parallel block decompression, significantly faster than plain GZIP.

    4. Select columns early: When only specific columns are needed, select them early to reduce memory usage:

      df = pb.read_vcf("large.vcf.gz").select("chrom", "start", "end", "ref", "alt")
      
    5. Use cloud paths directly: Pass S3/GCS/Azure URIs directly to read/scan/register functions instead of downloading files first. Authenticated access uses your cloud SDK credentials (AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY, GOOGLE_APPLICATION_CREDENTIALS, Azure defaults) only when those cloud paths are accessed:

      df = pb.read_bed("s3://my-bucket/regions.bed", allow_anonymous=True)
      
    6. Prefer functional API for single operations, method-chaining for pipelines: Use pb.overlap() for one-off operations and .lazy().pb.overlap() when building multi-step pipelines.

    Resources

    references/

    Detailed documentation for each major capability:

    • interval_operations.md - All 8 interval operations with parameters, examples, output schemas, and performance tips. Core reference for genomic range arithmetic.

    • file_io.md - Supported formats table, per-format column schemas, cloud storage configuration, compression support, and common parameters.

    • sql_processing.md - Register functions, DataFusion SQL syntax, combining SQL with interval operations, and example queries.

    • pileup_operations.md - Per-base read depth computation from BAM/CRAM files, parameters, and integration with interval operations.

    • configuration.md - Global settings (parallelism, coordinate systems, streaming modes), logging, and metadata management.

    • bioframe_migration.md - Operation mapping table, API differences, performance comparison, migration code examples, and pandas compatibility mode.

    Reproducido de K-Dense-AI/scientific-agent-skills bajo licencia Apache-2.0. Leer esta página en markdown.

    Archivos

    7 archivos en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Requiere Python 3.11–3.14 y `uv pip install polars-bio`; la E/S en la nube usa las variables de entorno estándar de AWS/GCS/Azure.

    Detalles

    Creador
    K-Dense-AI
    Categoría
    Investigación
    Licencia
    Apache-2.0
    Recursos incluidos
    referencias
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de K-Dense-AI/scientific-agent-skills

    Este repo incluye 163 skills. Si instalas uno, normalmente ya tienes los demás.

    Gestión integral de citas académicas: busca en OpenAlex, PubMed y Google Scholar, extrae metadatos precisos, valida citas y genera entradas BibTeX correctamente formateadas.

    Costo de contexto al activarse
    3.7k tok
    Tamaño del paquete
    21 archivos
    Última actualización
    hace 28 días
    investigacion

    Realiza revisiones bibliográficas sistemáticas y completas usando varias bases académicas (PubMed, arXiv, bioRxiv, Semantic Scholar). Genera markdown y PDF con citas verificadas en varios estilos (APA, Nature, Vancouver).

    Costo de contexto al activarse
    3.2k tok
    Tamaño del paquete
    12 archivos
    Última actualización
    hace 15 días
    investigacion

    Crea decks de diapositivas y presentaciones para charlas de investigación: PowerPoint, presentaciones de conferencia, seminarios, defensas de tesis. Da estructura, plantillas, guía de tiempos y validación visual.

    Costo de contexto al activarse
    5.1k tok
    Tamaño del paquete
    24 archivos
    Última actualización
    hace 15 días
    documentos

    Crea infografías profesionales con Nano Banana Pro AI y refinamiento iterativo inteligente. Usa Gemini 3.6 Flash para revisar la calidad e integra investigación con Perplexity Sonar. Soporta 10 tipos, 8 estilos y paletas para daltonismo.

    Costo de contexto al activarse
    2.7k tok
    Tamaño del paquete
    8 archivos
    Última actualización
    hace 15 días
    diseno ui

    Crea pósteres de investigación profesionales en LaTeX con beamerposter, tikzposter o baposter, para conferencias y comunicación científica: layout, colores, columnas múltiples e integración de figuras.

    Costo de contexto al activarse
    3.9k tok
    Tamaño del paquete
    17 archivos
    Última actualización
    hace 15 días
    documentos

    Crea diagramas científicos de calidad de publicación con la IA Nano Banana 2 y refinamiento iterativo inteligente. Gemini 3.6 Flash revisa la calidad y solo regenera si está por debajo del umbral de tu tipo de documento.

    Costo de contexto al activarse
    4.1k tok
    Tamaño del paquete
    6 archivos
    Última actualización
    hace 15 días
    diseno ui

    Skills relacionados

    Astropy

    34.8k

    Librería Python central para astronomía y astrofísica: unidades/cantidades, coordenadas, E/S de FITS, tablas, sistemas de tiempo, WCS y cosmología, para implementar o depurar código con Astropy.

    Costo de contexto al activarse
    3.6k tok
    Tamaño del paquete
    8 archivos
    Última actualización
    el mes pasado
    investigacion

    Integración con el SDK de Python de Benchling y su API REST para entidades del registro, inventario, entradas del cuaderno electrónico (ELN), workflows, Benchling Apps y consultas al Data Warehouse.

    Costo de contexto al activarse
    1.9k tok
    Tamaño del paquete
    6 archivos
    Última actualización
    el mes pasado
    investigacion

    Busca papers científicos y obtiene datos experimentales estructurados extraídos de estudios a texto completo vía el servidor MCP de BGPT: más de 25 campos por paper (métodos, resultados, muestras, calidad, conclusiones).

    Costo de contexto al activarse
    713 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    investigacion