chore: auto-commit (26 archivos)

- python/functions/bigquery/bq_auth.md
- python/functions/bigquery/bq_load_from_file.md
- python/functions/bigquery/bq_load_from_gcs.md
- python/functions/bigquery/client.py
- python/functions/bigquery/queries.py
- python/functions/datascience/__init__.py
- python/functions/datascience/decode_qr_image.py
- python/functions/datascience/load_bq_table_to_duckdb.md
- python/functions/datascience/load_bq_table_to_duckdb.py
- python/functions/pipelines/profile_bq_table.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-02 19:00:13 +02:00
parent 2ebc9efeb2
commit 5a4f82cf76
26 changed files with 2573 additions and 94 deletions
@@ -23,15 +23,20 @@ from __future__ import annotations
import sys
import cv2
import numpy as np
# OpenCV (cv2) se importa de forma perezosa dentro de las funciones que lo usan:
# un import a nivel de módulo rompería `import datascience` en entornos sin
# opencv instalado (p. ej. venvs de analysis que solo usan las funciones de
# series temporales o perfilado del paquete).
# --------------------------------------------------------------------------------------------
# Detectores. Cada uno se normaliza a una función run(img) -> list[str] que nunca lanza.
# --------------------------------------------------------------------------------------------
def _make_opencv_runner(detector):
"""Envuelve un cv2.QRCodeDetector(Aruco) en run(img) -> list[str]."""
import cv2
def run(img):
out: list[str] = []
@@ -89,6 +94,8 @@ def _make_pyzbar_runner(zbar_decode):
def _build_detectors(debug=False):
"""Construye la lista de (nombre, runner) de detectores disponibles, en orden de preferencia."""
import cv2
detectors = []
# OpenCV Aruco (preferido): no requiere libs de sistema ni descarga de modelos.
@@ -135,6 +142,8 @@ def _build_detectors(debug=False):
# --------------------------------------------------------------------------------------------
def _load_bgr(image_path):
"""Carga la imagen como BGR (uint8). Devuelve None si no se puede leer."""
import cv2
bgr = cv2.imread(image_path, cv2.IMREAD_COLOR)
if bgr is not None:
return bgr
@@ -150,6 +159,8 @@ def _load_bgr(image_path):
def _build_variants(image_path, upscale):
"""Genera (nombre, ndarray) de variantes preprocesadas, en orden de prioridad."""
import cv2
bgr = _load_bgr(image_path)
if bgr is None:
return []