Skip to content

Instantly share code, notes, and snippets.

@nlebovits
Last active June 19, 2026 11:01
Show Gist options
  • Select an option

  • Save nlebovits/fd3e5f9a0e5ea1eeb4c6313917fbbbbe to your computer and use it in GitHub Desktop.

Select an option

Save nlebovits/fd3e5f9a0e5ea1eeb4c6313917fbbbbe to your computer and use it in GitHub Desktop.
Argentina informal settlement population estimation — building footprints vs RENABAP official data
#!/usr/bin/env python3
"""
Argentina Informal Settlement Population Estimation — end-to-end.
Runs the full pipeline in one shot, with per-phase timing:
download -> geoparquet-io optimization -> spatial-join query -> export
Estimates household counts in informal settlements by joining satellite-derived
building footprints to official RENABAP settlement boundaries.
Logic: max(building_count × occupation_rate × 1.1, renabap_families) per settlement.
- 1.1 = RENABAP's families-per-dwelling multiplier (SISU 2023a pp. 14-15)
- Occupation rate discounts building counts only (familias_aproximadas is enumerated)
Includes sensitivity analysis across:
- Building size filters (none, ≥6m², ≥10m²)
- Occupation rates (85%, 90%, 95%, 100%)
- Population multipliers (2.8, 3.35)
Data sources:
- RENABAP boundaries: argentina.gob.ar GeoJSON (downloaded, then gpio-optimized)
- Buildings: Google/MS/OSM Open Buildings via VIDA on Source Cooperative
(downloaded, then gpio-optimized: bbox column + Hilbert order + ideal row groups)
- Urban areas: IGN Planta Urbana polygons (local file; see URBAN_AREAS_PATH)
Optimization rationale: the raw VIDA national file is not spatially organized for a
join like this. gpio re-writes it with a bbox column, Hilbert-curve row ordering, and
ideal row-group sizes so DuckDB can prune row groups during the spatial join.
Output:
- Per-settlement GeoJSON: ~/Documents/settlement_estimates.geojson
- Summary markdown: ~/Documents/settlement_analysis_summary.md
Run with: pixi run python estimate.py
"""
import time
from contextlib import contextmanager
from pathlib import Path
from datetime import datetime
import requests
import duckdb
import geoparquet_io as gpio
# --------------------------------------------------------------------------- #
# Paths
# --------------------------------------------------------------------------- #
DATA_DIR = Path(__file__).resolve().parent / "data"
DOWNLOADS = Path.home() / "Downloads"
# RENABAP: downloaded GeoJSON, then gpio-optimized parquet
RENABAP_GEOJSON = DATA_DIR / "renabap-2023-12-06.geojson"
RENABAP_PATH = DATA_DIR / "renabap.parquet"
# Buildings: raw VIDA national file (cached download), then gpio-optimized parquet
BUILDINGS_RAW = DOWNLOADS / "ARG.parquet"
BUILDINGS_PATH = DATA_DIR / "buildings_arg.parquet"
# Urban areas: local-only (no public URL wired). if-not-exists guard below.
URBAN_AREAS_PATH = DOWNLOADS / "areas_de_asentamientos_y_edificios_020105.parquet"
OUTPUT_GEOJSON = Path.home() / "Documents/settlement_estimates.geojson"
OUTPUT_MD = Path.home() / "Documents/settlement_analysis_summary.md"
# --------------------------------------------------------------------------- #
# Download sources
# --------------------------------------------------------------------------- #
RENABAP_URL = (
"https://www.argentina.gob.ar/sites/default/files/renabap-2023-12-06.geojson"
)
VIDA_URL = (
"https://data.source.coop/vida/google-microsoft-open-buildings/"
"geoparquet/by_country/country_iso=ARG/ARG.parquet"
)
# --------------------------------------------------------------------------- #
# Sensitivity analysis parameters
# --------------------------------------------------------------------------- #
BUILDING_SIZE_FILTERS = [
(None, "No filter"),
(6, "≥6 m²"),
(10, "≥10 m²"),
]
OCCUPATION_RATES = [0.85, 0.90, 0.95, 1.00]
POP_MULTIPLIERS = [2.8, 3.35]
# Argentina total population (2022 census)
ARGENTINA_POP = 46_700_000
# --------------------------------------------------------------------------- #
# Timing
# --------------------------------------------------------------------------- #
TIMINGS: dict[str, float] = {}
@contextmanager
def timed(label: str):
"""Time a pipeline phase, record it, and report start/finish."""
print(f"\n▶ {label} ...")
t0 = time.perf_counter()
yield
dt = time.perf_counter() - t0
TIMINGS[label] = dt
print(f"✓ {label} — {dt:,.1f}s")
def _fmt_bytes(n: int) -> str:
for unit in ("B", "KB", "MB", "GB", "TB"):
if n < 1024 or unit == "TB":
return f"{n:,.1f} {unit}"
n /= 1024
def _stream_download(url: str, dest: Path) -> None:
"""Stream a (possibly large) file to disk with light progress reporting."""
dest.parent.mkdir(parents=True, exist_ok=True)
tmp = dest.with_suffix(dest.suffix + ".part")
with requests.get(
url, headers={"User-Agent": "Mozilla/5.0"}, stream=True, timeout=300
) as r:
r.raise_for_status()
total = int(r.headers.get("content-length", 0))
done = 0
next_mark = 0.10
with open(tmp, "wb") as f:
for chunk in r.iter_content(chunk_size=8 * 1024 * 1024):
if not chunk:
continue
f.write(chunk)
done += len(chunk)
if total and done / total >= next_mark:
print(f" {done / total:5.0%} ({_fmt_bytes(done)})")
next_mark += 0.10
tmp.rename(dest)
print(f" saved {_fmt_bytes(dest.stat().st_size)} -> {dest}")
# --------------------------------------------------------------------------- #
# Phase 1+2: download + gpio optimization
# --------------------------------------------------------------------------- #
def prepare_renabap() -> None:
"""Download RENABAP GeoJSON (cached) and write an optimized GeoParquet."""
with timed("Download RENABAP boundaries"):
if RENABAP_GEOJSON.exists():
print(f" cached: {RENABAP_GEOJSON}")
else:
_stream_download(RENABAP_URL, RENABAP_GEOJSON)
with timed("Optimize RENABAP (gpio: bbox + Hilbert)"):
if RENABAP_PATH.exists():
print(f" cached: {RENABAP_PATH}")
else:
(
gpio.convert(str(RENABAP_GEOJSON))
.add_bbox()
.sort_hilbert()
.write(str(RENABAP_PATH), geoparquet_version="1.1", overwrite=True)
)
def prepare_buildings() -> None:
"""Download the national VIDA buildings file (cached) and gpio-optimize it."""
with timed("Download VIDA national buildings"):
if BUILDINGS_RAW.exists():
print(f" cached: {BUILDINGS_RAW} ({_fmt_bytes(BUILDINGS_RAW.stat().st_size)})")
else:
print(" not found locally — downloading from VIDA (Source Cooperative)")
_stream_download(VIDA_URL, BUILDINGS_RAW)
with timed("Optimize buildings (gpio: bbox + Hilbert + row groups)"):
if BUILDINGS_PATH.exists():
print(f" cached: {BUILDINGS_PATH}")
else:
(
gpio.read(str(BUILDINGS_RAW))
.add_bbox()
.sort_hilbert()
.write(str(BUILDINGS_PATH), geoparquet_version="1.1", overwrite=True)
)
def check_urban_areas() -> None:
"""Urban-areas layer has no wired download URL; guard for the local file."""
if not URBAN_AREAS_PATH.exists():
raise FileNotFoundError(
f"Urban-areas file not found: {URBAN_AREAS_PATH}\n"
"No public download URL is wired for this layer. Place the IGN "
"Planta Urbana parquet at the path above (or update URBAN_AREAS_PATH)."
)
print(f" urban areas: {URBAN_AREAS_PATH}")
# --------------------------------------------------------------------------- #
# Phase 3: spatial-join query + sensitivity analysis
# --------------------------------------------------------------------------- #
def run_analysis() -> dict:
"""Run the spatial joins, sensitivity sweep, and breakdowns. Returns results."""
con = duckdb.connect()
con.execute("INSTALL spatial; LOAD spatial;")
print(" spatial joins (settlements × urban areas × buildings)...")
# Step 1: Flag settlements that intersect urban areas
con.execute(f"""
CREATE TABLE settlements_with_urban AS
SELECT
s.id_renabap,
s.nombre_barrio as nombre,
s.provincia,
s.departamento,
s.localidad,
s.familias_aproximadas,
s.geometry,
CASE WHEN COUNT(u.geometry) > 0 THEN TRUE ELSE FALSE END as is_urban
FROM '{RENABAP_PATH}' s
LEFT JOIN '{URBAN_AREAS_PATH}' u
ON ST_Intersects(
ST_SetCRS(s.geometry, 'EPSG:4326'),
ST_SetCRS(u.geometry, 'EPSG:4326')
)
GROUP BY
s.id_renabap, s.nombre_barrio, s.provincia, s.departamento,
s.localidad, s.familias_aproximadas, s.geometry
""")
# Step 2: Spatial join with buildings (all buildings, no filter yet)
# We'll filter by size later for sensitivity analysis
con.execute(f"""
CREATE TABLE settlement_buildings_raw AS
SELECT
s.id_renabap,
s.nombre,
s.provincia,
s.departamento,
s.localidad,
s.familias_aproximadas,
s.geometry,
s.is_urban,
b.area_in_meters as building_area
FROM settlements_with_urban s
LEFT JOIN '{BUILDINGS_PATH}' b
ON ST_Intersects(
ST_SetCRS(b.geometry, 'EPSG:4326'),
ST_SetCRS(s.geometry, 'EPSG:4326')
)
""")
print(" sensitivity sweep across building-size filters...")
# Step 3: Build aggregated table for each size filter
# Logic: max(buildings, renabap_families) per settlement
sensitivity_results = []
for min_area, filter_label in BUILDING_SIZE_FILTERS:
area_filter = f"AND building_area >= {min_area}" if min_area else ""
# Aggregate building counts per settlement with this filter
con.execute(f"""
CREATE OR REPLACE TABLE settlement_buildings AS
SELECT
id_renabap,
nombre,
provincia,
departamento,
localidad,
familias_aproximadas,
geometry,
is_urban,
COUNT(building_area) as building_count
FROM settlement_buildings_raw
WHERE 1=1 {area_filter}
GROUP BY
id_renabap, nombre, provincia, departamento, localidad,
familias_aproximadas, geometry, is_urban
""")
# For each occupation rate and pop multiplier, calculate estimates
# estimated_families depends on occupation_rate, so computed per scenario
for occ_rate in OCCUPATION_RATES:
total_buildings = int(con.execute("SELECT SUM(building_count) FROM settlement_buildings").fetchone()[0])
renabap_households = int(con.execute("SELECT SUM(familias_aproximadas) FROM settlement_buildings").fetchone()[0])
# Apply methodology fix:
# - building_count * occ_rate * 1.1 (occupancy + families-per-dwelling multiplier)
# - familias_aproximadas unchanged (already enumerated families, no discount)
# - max() selects higher of the two per settlement
est_households = float(con.execute(f"""
SELECT SUM(
CASE
WHEN building_count * {occ_rate} * 1.1 > familias_aproximadas
THEN building_count * {occ_rate} * 1.1
ELSE familias_aproximadas
END
)
FROM settlement_buildings
""").fetchone()[0])
for pop_mult in POP_MULTIPLIERS:
est_pop = est_households * pop_mult
renabap_pop = renabap_households * pop_mult
sensitivity_results.append({
'size_filter': filter_label,
'min_area': min_area,
'occupation': occ_rate,
'pop_multiplier': pop_mult,
'total_buildings': total_buildings,
'est_households': int(est_households),
'renabap_households': renabap_households,
'est_population': int(est_pop),
'renabap_population': int(renabap_pop),
'pct_of_argentina': est_pop / ARGENTINA_POP * 100,
})
print(f" completed {len(sensitivity_results)} sensitivity scenarios")
# Step 4: Rebuild final table with no filter for exports and validation
con.execute(f"""
CREATE OR REPLACE TABLE settlement_buildings AS
SELECT
id_renabap,
nombre,
provincia,
departamento,
localidad,
familias_aproximadas,
geometry,
is_urban,
COUNT(building_area) as building_count
FROM settlement_buildings_raw
GROUP BY
id_renabap, nombre, provincia, departamento, localidad,
familias_aproximadas, geometry, is_urban
""")
# Apply 1.1 multiplier (baseline: 100% occupation for exports)
# DOUBLE because building_count * 1.1 is no longer whole-number
con.execute("""
ALTER TABLE settlement_buildings ADD COLUMN estimated_families DOUBLE;
UPDATE settlement_buildings
SET estimated_families = CASE
WHEN building_count * 1.1 > familias_aproximadas THEN building_count * 1.1
ELSE familias_aproximadas
END
""")
# Validation: % where buildings vs RENABAP was used, by urban intersection
# Uses multiplier-adjusted comparison (building_count * 1.1)
print(" source breakdown by urban intersection...")
validation_by_urban = con.execute("""
SELECT
is_urban,
COUNT(*) as n_settlements,
SUM(CASE WHEN building_count * 1.1 > familias_aproximadas THEN 1 ELSE 0 END) as used_buildings,
SUM(CASE WHEN building_count * 1.1 <= familias_aproximadas THEN 1 ELSE 0 END) as used_renabap,
ROUND(SUM(CASE WHEN building_count * 1.1 > familias_aproximadas THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) as pct_used_buildings,
ROUND(SUM(CASE WHEN building_count * 1.1 <= familias_aproximadas THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) as pct_used_renabap
FROM settlement_buildings
WHERE building_count > 0
GROUP BY is_urban
ORDER BY is_urban DESC
""").fetchdf()
print("\nSource breakdown by urban intersection:")
print(validation_by_urban.to_string(index=False))
# Aglomerado tier analysis
print("\n aglomerado tier breakdown...")
# Define conurbano partidos
CONURBANO_PARTIDOS = [
'La Matanza', 'Lomas de Zamora', 'Quilmes', 'Moreno', 'Merlo',
'General San Martín', 'Esteban Echeverría', 'Almirante Brown',
'Florencio Varela', 'Lanús', 'José C. Paz', 'Tigre', 'Avellaneda',
'San Miguel', 'Malvinas Argentinas', 'San Isidro', 'Berazategui',
'Hurlingham', 'Ituzaingó', 'Morón', 'Tres de Febrero', 'Vicente López',
'San Fernando', 'Pilar', 'Escobar', 'Presidente Perón', 'José M. Ezeiza'
]
con.execute(f"""
ALTER TABLE settlement_buildings ADD COLUMN aglomerado_tier VARCHAR;
UPDATE settlement_buildings
SET aglomerado_tier = CASE
WHEN provincia = 'Ciudad Autónoma de Buenos Aires' THEN 'CABA'
WHEN provincia = 'Buenos Aires' AND departamento IN ({','.join(f"'{p}'" for p in CONURBANO_PARTIDOS)})
THEN 'Conurbano-AMBA'
WHEN (provincia = 'Buenos Aires' AND departamento = 'La Plata')
OR (provincia = 'Buenos Aires' AND departamento = 'General Pueyrredón')
OR (provincia = 'Santa Fe' AND departamento = 'Rosario')
OR (provincia = 'Córdoba' AND departamento = 'Capital')
OR (provincia = 'Mendoza' AND departamento IN ('Capital', 'Godoy Cruz', 'Guaymallén', 'Las Heras', 'Maipú'))
OR (provincia = 'Tucumán' AND departamento = 'Capital')
THEN 'Other Gran Aglomerados'
ELSE 'Outside Aglomerados'
END
""")
by_aglomerado = con.execute("""
SELECT
aglomerado_tier,
COUNT(*) as n_settlements,
SUM(CASE WHEN familias_aproximadas > building_count * 1.1 THEN 1 ELSE 0 END) as renabap_higher,
SUM(CASE WHEN building_count * 1.1 > familias_aproximadas THEN 1 ELSE 0 END) as footprints_higher,
ROUND(MEDIAN(building_count * 1.1 / NULLIF(familias_aproximadas, 0)), 2) as median_ratio
FROM settlement_buildings
WHERE building_count > 0
GROUP BY aglomerado_tier
ORDER BY
CASE aglomerado_tier
WHEN 'CABA' THEN 1
WHEN 'Conurbano-AMBA' THEN 2
WHEN 'Other Gran Aglomerados' THEN 3
ELSE 4
END
""").fetchdf()
print("\nAglomerado tier breakdown:")
print(by_aglomerado.to_string(index=False))
# Conurbano partido breakdown (vertical density gradient)
print("\n conurbano partido breakdown...")
conurbano_partidos = con.execute(f"""
SELECT
departamento,
COUNT(*) as n_settlements,
SUM(CASE WHEN familias_aproximadas > building_count * 1.1 THEN 1 ELSE 0 END) as renabap_higher,
ROUND(SUM(CASE WHEN familias_aproximadas > building_count * 1.1 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) as pct_vertical
FROM settlement_buildings
WHERE building_count > 0
AND provincia = 'Buenos Aires'
AND departamento IN ({','.join(f"'{p}'" for p in CONURBANO_PARTIDOS)})
GROUP BY departamento
ORDER BY pct_vertical DESC
""").fetchdf()
print("\nConurbano vertical density by partido:")
print(conurbano_partidos.to_string(index=False))
# National totals (baseline: no filter, 100% occupation)
national = con.execute("""
SELECT
COUNT(*) as n_settlements,
SUM(familias_aproximadas) as total_renabap_families,
SUM(building_count) as total_buildings,
SUM(estimated_families) as total_estimated_families
FROM settlement_buildings
""").fetchone()
# By province (uses multiplier-adjusted comparison)
by_province = con.execute("""
SELECT
provincia,
COUNT(*) as n_settlements,
SUM(familias_aproximadas) as renabap_families,
SUM(building_count) as building_count,
SUM(estimated_families) as estimated_families,
SUM(CASE WHEN building_count * 1.1 > familias_aproximadas THEN 1 ELSE 0 END) as used_buildings,
SUM(CASE WHEN building_count * 1.1 <= familias_aproximadas THEN 1 ELSE 0 END) as used_renabap
FROM settlement_buildings
GROUP BY provincia
ORDER BY estimated_families DESC
""").fetchdf()
return {
"con": con,
"sensitivity_results": sensitivity_results,
"validation_by_urban": validation_by_urban,
"by_aglomerado": by_aglomerado,
"conurbano_partidos": conurbano_partidos,
"national": national,
"by_province": by_province,
}
# --------------------------------------------------------------------------- #
# Phase 4: export + summary
# --------------------------------------------------------------------------- #
def export_outputs(results: dict) -> None:
con = results["con"]
sensitivity_results = results["sensitivity_results"]
validation_by_urban = results["validation_by_urban"]
by_aglomerado = results["by_aglomerado"]
conurbano_partidos = results["conurbano_partidos"]
national = results["national"]
by_province = results["by_province"]
n_settlements, renabap_fam, total_bldg, est_fam = national
# Export per-settlement GeoJSON
print(f" writing {OUTPUT_GEOJSON}...")
OUTPUT_GEOJSON.parent.mkdir(parents=True, exist_ok=True)
con.execute(f"""
COPY (
SELECT
id_renabap,
nombre,
provincia,
departamento,
localidad,
is_urban,
familias_aproximadas as renabap_families,
building_count,
estimated_families,
CASE WHEN building_count * 1.1 > familias_aproximadas THEN 'buildings' ELSE 'renabap' END as estimate_source,
geometry
FROM settlement_buildings
ORDER BY provincia, departamento, nombre
) TO '{OUTPUT_GEOJSON}'
WITH (FORMAT GDAL, DRIVER 'GeoJSON')
""")
# Write markdown summary
print(f" writing {OUTPUT_MD}...")
with open(OUTPUT_MD, 'w') as f:
f.write("# Argentina Informal Settlement Population Estimates\n\n")
f.write(f"**Generated:** {datetime.now().strftime('%Y-%m-%d %H:%M')}\n\n")
f.write("---\n\n")
# Sensitivity Analysis Table (the main deliverable)
f.write("## Sensitivity Analysis\n\n")
f.write("Estimated households and population across building size filters, occupation rates, and population multipliers.\n\n")
f.write("| Size Filter | Occupation | Pop Mult | Buildings | Est. Households | Est. Population | % of Argentina |\n")
f.write("|-------------|------------|----------|-----------|-----------------|-----------------|----------------|\n")
for r in sensitivity_results:
f.write(f"| {r['size_filter']} | {r['occupation']:.0%} | {r['pop_multiplier']} | {r['total_buildings']:,} | {r['est_households']:,} | {r['est_population']:,} | {r['pct_of_argentina']:.2f}% |\n")
f.write("\n")
# Summary range
min_pop = min(r['est_population'] for r in sensitivity_results)
max_pop = max(r['est_population'] for r in sensitivity_results)
min_hh = min(r['est_households'] for r in sensitivity_results)
max_hh = max(r['est_households'] for r in sensitivity_results)
f.write(f"**Range:** {min_hh:,} – {max_hh:,} households | {min_pop:,} – {max_pop:,} population\n\n")
# Source breakdown by Urban Intersection
f.write("## Estimate Source by Urban Intersection\n\n")
f.write("Shows which source (buildings vs RENABAP) was used per settlement, split by urban area intersection.\n\n")
f.write("| Urban? | Settlements | Used Buildings | Used RENABAP | % Buildings | % RENABAP |\n")
f.write("|--------|-------------|----------------|--------------|-------------|----------|\n")
for _, row in validation_by_urban.iterrows():
urban_label = "Yes" if row['is_urban'] else "No"
f.write(f"| {urban_label} | {int(row['n_settlements']):,} | {int(row['used_buildings']):,} | {int(row['used_renabap']):,} | {row['pct_used_buildings']:.1f}% | {row['pct_used_renabap']:.1f}% |\n")
f.write("\n")
f.write("*Logic: max(building_count × occ_rate × 1.1, renabap_families) per settlement*\n\n")
# Aglomerado tier analysis
f.write("## Aglomerado Tier Analysis\n\n")
f.write("| Aglomerado Tier | N Settlements | RENABAP Higher | Footprints Higher | Median Ratio |\n")
f.write("|-----------------|---------------|----------------|-------------------|-------------|\n")
for _, row in by_aglomerado.iterrows():
f.write(f"| {row['aglomerado_tier']} | {int(row['n_settlements']):,} | {int(row['renabap_higher']):,} | {int(row['footprints_higher']):,} | {row['median_ratio']:.2f} |\n")
f.write("\n")
f.write("*Median ratio = footprints / RENABAP families. <1 means RENABAP captures more (vertical density).*\n\n")
# Conurbano vertical density gradient
f.write("## Conurbano Vertical Density Gradient\n\n")
f.write("Vertical density (RENABAP > footprints) concentrates in inner-ring partidos adjacent to CABA.\n\n")
# Split into inner ring (high vertical) and outer ring (low vertical)
inner_ring = conurbano_partidos[conurbano_partidos['pct_vertical'] >= 25].head(7)
outer_ring = conurbano_partidos[conurbano_partidos['pct_vertical'] < 10].head(4)
f.write("**Inner ring (adjacent to CABA):**\n\n")
f.write("| Partido | N | RENABAP Higher | % Vertical |\n")
f.write("|---------|---|----------------|------------|\n")
for _, row in inner_ring.iterrows():
f.write(f"| {row['departamento']} | {int(row['n_settlements'])} | {int(row['renabap_higher'])} | {row['pct_vertical']:.0f}% |\n")
f.write("\n")
f.write("**Outer ring:**\n\n")
f.write("| Partido | N | RENABAP Higher | % Vertical |\n")
f.write("|---------|---|----------------|------------|\n")
for _, row in outer_ring.iterrows():
f.write(f"| {row['departamento']} | {int(row['n_settlements'])} | {int(row['renabap_higher'])} | {row['pct_vertical']:.0f}% |\n")
f.write("\n")
f.write("*Clear gradient: vertical density decays with distance from CABA. Inner-ring partidos show 40-60% vertical (nearly CABA-like), outer ring drops to <10%.*\n\n")
# National summary (baseline scenario)
f.write("## Baseline National Summary\n\n")
f.write("*Baseline: No building filter, 100% occupation*\n\n")
f.write("| Metric | RENABAP Official | Building-Based Estimate | Difference |\n")
f.write("|--------|------------------|------------------------|------------|\n")
f.write(f"| Settlements | {n_settlements:,} | {n_settlements:,} | — |\n")
f.write(f"| Building Footprints | — | {int(total_bldg):,} | — |\n")
f.write(f"| Families/Households | {int(renabap_fam):,} | {int(est_fam):,} | +{int(est_fam - renabap_fam):,} (+{(est_fam/renabap_fam - 1)*100:.1f}%) |\n")
for mult in POP_MULTIPLIERS:
renabap_pop = renabap_fam * mult
est_pop = est_fam * mult
diff = est_pop - renabap_pop
pct_arg = est_pop / ARGENTINA_POP * 100
f.write(f"| Population (×{mult}) | {int(renabap_pop):,} | {int(est_pop):,} | +{int(diff):,} ({pct_arg:.1f}% of Argentina) |\n")
f.write("\n")
# Province breakdown
f.write("## Province Breakdown\n\n")
f.write("| Provincia | Settlements | RENABAP | Buildings | Est. Families | Used Bldg | Used RENABAP |\n")
f.write("|-----------|-------------|---------|-----------|---------------|-----------|-------------|\n")
for _, row in by_province.iterrows():
f.write(f"| {row['provincia']} | {int(row['n_settlements']):,} | {int(row['renabap_families']):,} | {int(row['building_count']):,} | {row['estimated_families']:,.1f} | {int(row['used_buildings']):,} | {int(row['used_renabap']):,} |\n")
f.write("\n")
# Methodology
f.write("## Methodology\n\n")
f.write("**Per-settlement logic:** `max(building_count × occupation_rate × 1.1, renabap_families)`\n\n")
f.write("- **1.1 multiplier**: RENABAP documents ~1.1 families per dwelling (SISU 2023a pp. 14-15)\n")
f.write("- **Occupation rate**: Applied only to building-derived counts, not RENABAP\n")
f.write("- `familias_aproximadas` is already enumerated families, needs no discount\n")
f.write("- If adjusted buildings > RENABAP → use building estimate (RENABAP undercounted)\n")
f.write("- If RENABAP > adjusted buildings → use RENABAP (vertical density / multi-family)\n\n")
# Data sources
f.write("## Data Sources\n\n")
f.write("- **RENABAP:** Argentina Ministry of Habitat, 2023 release\n")
f.write("- **Building Footprints:** Google/Microsoft/OSM Open Buildings (VIDA, Source Cooperative)\n")
f.write("- **Urban Areas:** IGN Planta Urbana polygons\n")
f.write("- **Population multipliers:** INDEC 2022 Census (2.8), Barrios-specific estimate (3.35)\n")
f.write("\n---\n")
f.write("\n*Analysis code: arg-informal-settlements-analysis*\n")
con.close()
# --------------------------------------------------------------------------- #
# Orchestration
# --------------------------------------------------------------------------- #
def main():
pipeline_start = time.perf_counter()
# Phase 1+2: download + optimize
prepare_renabap()
prepare_buildings()
with timed("Check urban-areas layer"):
check_urban_areas()
# Phase 3: query
with timed("Spatial-join query + sensitivity analysis"):
results = run_analysis()
# Phase 4: export
with timed("Export GeoJSON + markdown summary"):
export_outputs(results)
total = time.perf_counter() - pipeline_start
# Timing report
print("\n" + "=" * 60)
print("TIMING BREAKDOWN")
print("=" * 60)
width = max(len(k) for k in TIMINGS)
for label, dt in TIMINGS.items():
print(f" {label:<{width}} {dt:8,.1f}s ({dt / total:4.0%})")
print("-" * 60)
print(f" {'TOTAL':<{width}} {total:8,.1f}s")
print("=" * 60)
print(f"\nDone! Output files:")
print(f" - {OUTPUT_GEOJSON}")
print(f" - {OUTPUT_MD}")
if __name__ == "__main__":
main()
version: 6
environments:
default:
channels:
- url: https://conda.anaconda.org/conda-forge/
options:
pypi-prerelease-mode: if-necessary-or-explicit
packages:
linux-64:
- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.1-h2d2dd48_2.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h8b1a151_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.6.0-h9b893ba_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.12-h4bacb7b_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-hc87160b_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.15.2-he9ea9c5_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h6d69fc9_5.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.37.4-h4c8aef7_3.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.747-hc3785e1_3.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.16.2-h206d751_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.13.3-hed0cdb0_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.16.0-hdd73cc9_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.12.0-ha7a2c86_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.14.0-h52c5a47_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/duckdb-1.5.2-hfdaf410_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-23.0.1-ha7f89c6_9_cpu.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-23.0.1-h635bf11_9_cpu.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-23.0.1-h53684a4_9_cpu.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-23.0.1-h635bf11_9_cpu.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-23.0.1-hb4dd7c2_9_cpu.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-3.3.0-h25dbb67_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-3.3.0-hdbdcf42_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.78.1-h1d1128b_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.26.0-h9692893_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.26.0-ha770c72_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-23.0.1-h7376487_9_cpu.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.11.05-h0dc7533_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.22.0-h454ac66_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.3-hfe17d71_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py314hd4f4903_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.3.0-h21090e2_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-3.0.2-py314hd70f1f7_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-23.0.1-py314h061e8c0_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-23.0.1-py314h9de4539_0_cpu.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.4-hf9ea5aa_0_cp314t.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/python-duckdb-1.5.2-py314h3ce7e56_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314t.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.11.05-h5301d42_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda
packages:
- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda
build_number: 20
sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9
md5: a9f577daf3de00bca7c3c76c0ecbd1de
depends:
- __glibc >=2.17,<3.0.a0
- libgomp >=7.5.0
constrains:
- openmp_impl <0.0a0
license: BSD-3-Clause
license_family: BSD
size: 28948
timestamp: 1770939786096
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.1-h2d2dd48_2.conda
sha256: 292aa18fe6ab5351710e6416fbd683eaef3aa5b1b7396da9350ff08efc660e4f
md5: 675ea6d90900350b1dcfa8231a5ea2dd
depends:
- libgcc >=14
- __glibc >=2.17,<3.0.a0
- aws-c-common >=0.12.6,<0.12.7.0a0
- aws-c-sdkutils >=0.2.4,<0.2.5.0a0
- aws-c-cal >=0.9.13,<0.9.14.0a0
- aws-c-http >=0.10.12,<0.10.13.0a0
- aws-c-io >=0.26.3,<0.26.4.0a0
license: Apache-2.0
license_family: APACHE
size: 134426
timestamp: 1774274932726
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda
sha256: f21d648349a318f4ae457ea5403d542ba6c0e0343b8642038523dd612b2a5064
md5: 3c3d02681058c3d206b562b2e3bc337f
depends:
- __glibc >=2.17,<3.0.a0
- aws-c-common >=0.12.6,<0.12.7.0a0
- libgcc >=14
- openssl >=3.5.4,<4.0a0
license: Apache-2.0
license_family: Apache
size: 56230
timestamp: 1764593147526
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda
sha256: 926a5b9de0a586e88669d81de717c8dd3218c51ce55658e8a16af7e7fe87c833
md5: e36ad70a7e0b48f091ed6902f04c23b8
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
license: Apache-2.0
license_family: Apache
size: 239605
timestamp: 1763585595898
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h8b1a151_0.conda
sha256: 1838bdc077b77168416801f4715335b65e9223f83641a2c28644f8acd8f9db0e
md5: f16f498641c9e05b645fe65902df661a
depends:
- libgcc >=14
- __glibc >=2.17,<3.0.a0
- aws-c-common >=0.12.6,<0.12.7.0a0
license: Apache-2.0
license_family: APACHE
size: 22278
timestamp: 1767790836624
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.6.0-h9b893ba_1.conda
sha256: 4a1a060ab40cb4fa39d24418758ca9faa1f51df6918f05143118e79bb11b4350
md5: cd4946050ecfcb3c6fd09106ae6a261e
depends:
- libstdcxx >=14
- libgcc >=14
- __glibc >=2.17,<3.0.a0
- aws-c-io >=0.26.3,<0.26.4.0a0
- aws-checksums >=0.2.10,<0.2.11.0a0
- aws-c-common >=0.12.6,<0.12.7.0a0
license: Apache-2.0
license_family: APACHE
size: 58989
timestamp: 1774270004533
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.12-h4bacb7b_1.conda
sha256: c6f910d400ef9034493988e8cd37bd4712e42d85921122bcda4ba68d4614b131
md5: 7bc920933e5fb225aba86a788164a8f1
depends:
- libgcc >=14
- __glibc >=2.17,<3.0.a0
- aws-c-io >=0.26.3,<0.26.4.0a0
- aws-c-cal >=0.9.13,<0.9.14.0a0
- aws-c-compression >=0.3.2,<0.3.3.0a0
- aws-c-common >=0.12.6,<0.12.7.0a0
license: Apache-2.0
license_family: APACHE
size: 225868
timestamp: 1774270031584
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-hc87160b_0.conda
sha256: c66ebb7815949db72bab7c86bf477197e4bc6937c381cf32248bdd1ce496db00
md5: dde6a3e4fe6bb2ecd2a7050dd1e701fb
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- aws-c-cal >=0.9.13,<0.9.14.0a0
- s2n >=1.7.1,<1.7.2.0a0
- aws-c-common >=0.12.6,<0.12.7.0a0
license: Apache-2.0
license_family: APACHE
size: 181624
timestamp: 1773868304737
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.15.2-he9ea9c5_1.conda
sha256: 3fc68793c0ca2c36524ae67abac696ce6b066a8be6b2b980cbdc40ae1310041a
md5: 8e77514673f5773b40ff8953583938b6
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- aws-c-io >=0.26.3,<0.26.4.0a0
- aws-c-common >=0.12.6,<0.12.7.0a0
- aws-c-http >=0.10.12,<0.10.13.0a0
license: Apache-2.0
license_family: APACHE
size: 221711
timestamp: 1774275485771
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h6d69fc9_5.conda
sha256: c15869656f5fbebe27cc5aa58b23831f75d85502d324fedd7ee7e552c79b495d
md5: 4c5c16bf1133dcfe100f33dd4470998e
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- aws-c-io >=0.26.3,<0.26.4.0a0
- aws-checksums >=0.2.10,<0.2.11.0a0
- aws-c-common >=0.12.6,<0.12.7.0a0
- aws-c-http >=0.10.12,<0.10.13.0a0
- openssl >=3.5.5,<4.0a0
- aws-c-auth >=0.10.1,<0.10.2.0a0
- aws-c-cal >=0.9.13,<0.9.14.0a0
license: Apache-2.0
license_family: APACHE
size: 151340
timestamp: 1774282148690
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda
sha256: 9d62c5029f6f8219368a8665f0a549da572dc777f52413b7d75609cacdbc02cc
md5: c7e3e08b7b1b285524ab9d74162ce40b
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- aws-c-common >=0.12.6,<0.12.7.0a0
license: Apache-2.0
license_family: APACHE
size: 59383
timestamp: 1764610113765
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda
sha256: 09472dd5fa4473cffd44741ee4c1112f2c76d7168d1343de53c2ad283dc1efa6
md5: f8e1bcc5c7d839c5882e94498791be08
depends:
- libgcc >=14
- __glibc >=2.17,<3.0.a0
- aws-c-common >=0.12.6,<0.12.7.0a0
license: Apache-2.0
license_family: APACHE
size: 101435
timestamp: 1771063496927
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.37.4-h4c8aef7_3.conda
sha256: b82d0bc6d4b716347e1aefb0acc6e4bff04b3f807537ada9b458a7e467beb2a0
md5: 798a499cf76e530a992365d557ba5827
depends:
- libgcc >=14
- libstdcxx >=14
- __glibc >=2.17,<3.0.a0
- aws-c-event-stream >=0.6.0,<0.6.1.0a0
- aws-c-mqtt >=0.15.2,<0.15.3.0a0
- aws-c-common >=0.12.6,<0.12.7.0a0
- aws-c-s3 >=0.11.5,<0.11.6.0a0
- aws-c-http >=0.10.12,<0.10.13.0a0
- aws-c-io >=0.26.3,<0.26.4.0a0
- aws-c-auth >=0.10.1,<0.10.2.0a0
- aws-c-sdkutils >=0.2.4,<0.2.5.0a0
- aws-c-cal >=0.9.13,<0.9.14.0a0
license: Apache-2.0
license_family: APACHE
size: 410120
timestamp: 1774286908570
- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.747-hc3785e1_3.conda
sha256: 62b7e565852fa061a26281b2890e432853fabefa8ea3dc22d00d39295a030805
md5: cfffedbfd03d5a6bb74157c14b6f0cdf
depends:
- __glibc >=2.17,<3.0.a0
- libstdcxx >=14
- libgcc >=14
- aws-c-common >=0.12.6,<0.12.7.0a0
- libzlib >=1.3.1,<2.0a0
- aws-crt-cpp >=0.37.4,<0.37.5.0a0
- aws-c-event-stream >=0.6.0,<0.6.1.0a0
- libcurl >=8.19.0,<9.0a0
license: Apache-2.0
license_family: APACHE
size: 3624521
timestamp: 1773666645246
- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.16.2-h206d751_0.conda
sha256: 321d1070905e467b6bc6f5067b97c1868d7345c272add82b82e08a0224e326f0
md5: 5492abf806c45298ae642831c670bba0
depends:
- __glibc >=2.17,<3.0.a0
- libcurl >=8.18.0,<9.0a0
- libgcc >=14
- libstdcxx >=14
- openssl >=3.5.4,<4.0a0
license: MIT
license_family: MIT
size: 348729
timestamp: 1768837519361
- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.13.3-hed0cdb0_1.conda
sha256: 2beb6ae8406f946b8963a67e72fe74453e1411c5ae7e992978340de6c512d13c
md5: 68bfb556bdf56d56e9f38da696e752ca
depends:
- __glibc >=2.17,<3.0.a0
- azure-core-cpp >=1.16.2,<1.16.3.0a0
- libgcc >=14
- libstdcxx >=14
- openssl >=3.5.5,<4.0a0
license: MIT
license_family: MIT
size: 250511
timestamp: 1770344967948
- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.16.0-hdd73cc9_1.conda
sha256: cef75b91bdd5a65c560b501df78905437cc2090a64b4c5ecd7da9e08e9e9af7c
md5: 939d9ce324e51961c7c4c0046733dbb7
depends:
- __glibc >=2.17,<3.0.a0
- azure-core-cpp >=1.16.2,<1.16.3.0a0
- azure-storage-common-cpp >=12.12.0,<12.12.1.0a0
- libgcc >=14
- libstdcxx >=14
license: MIT
license_family: MIT
size: 579825
timestamp: 1770321459546
- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.12.0-ha7a2c86_1.conda
sha256: ef7d1cae36910b21385d0816f8524a84dee1513e0306927e41a6bd32b5b9a0d0
md5: 6400f73fe5ebe19fe7aca3616f1f1de7
depends:
- __glibc >=2.17,<3.0.a0
- azure-core-cpp >=1.16.2,<1.16.3.0a0
- libgcc >=14
- libstdcxx >=14
- libxml2
- libxml2-16 >=2.14.6
- openssl >=3.5.5,<4.0a0
license: MIT
license_family: MIT
size: 150405
timestamp: 1770240307002
- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.14.0-h52c5a47_1.conda
sha256: 55aa8ad5217d358e0ccf4a715bd1f9bafef3cd1c2ea4021f0e916f174c20f8e3
md5: 6d10339800840562b7dad7775f5d2c16
depends:
- __glibc >=2.17,<3.0.a0
- azure-core-cpp >=1.16.2,<1.16.3.0a0
- azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0
- azure-storage-common-cpp >=12.12.0,<12.12.1.0a0
- libgcc >=14
- libstdcxx >=14
license: MIT
license_family: MIT
size: 302524
timestamp: 1770384269834
- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda
sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6
md5: d2ffd7602c02f2b316fd921d39876885
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
license: bzip2-1.0.6
license_family: BSD
size: 260182
timestamp: 1771350215188
- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda
sha256: cc9accf72fa028d31c2a038460787751127317dcfa991f8d1f1babf216bb454e
md5: 920bb03579f15389b9e512095ad995b7
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
license: MIT
license_family: MIT
size: 207882
timestamp: 1765214722852
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc
md5: 4492fd26db29495f0ba23f146cd5638d
depends:
- __unix
license: ISC
size: 147413
timestamp: 1772006283803
- conda: https://conda.anaconda.org/conda-forge/noarch/duckdb-1.5.2-hfdaf410_0.conda
sha256: 49fc58e9d3770498a5af486007c393ca8320bb36796f9c85e9f342e3ad46ea67
md5: 66645b45ca91739d9476172cb2c40f26
depends:
- python-duckdb >=1.5.2,<1.5.3.0a0
license: MIT
license_family: MIT
size: 7883
timestamp: 1776091773337
- conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda
sha256: 6c33bf0c4d8f418546ba9c250db4e4221040936aef8956353bc764d4877bc39a
md5: d411fc29e338efb48c5fd4576d71d881
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=13
- libstdcxx >=13
license: BSD-3-Clause
license_family: BSD
size: 119654
timestamp: 1726600001928
- conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda
sha256: dc824dc1d0aa358e28da2ecbbb9f03d932d976c8dca11214aa1dcdfcbd054ba2
md5: ff862eebdfeb2fd048ae9dc92510baca
depends:
- gflags >=2.2.2,<2.3.0a0
- libgcc-ng >=12
- libstdcxx-ng >=12
license: BSD-3-Clause
license_family: BSD
size: 143452
timestamp: 1718284177264
- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda
sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a
md5: c80d8a3b84358cb967fa81e7075fbc8a
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- libstdcxx >=14
license: MIT
license_family: MIT
size: 12723451
timestamp: 1773822285671
- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda
sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4
md5: b38117a3c920364aff79f870c984b4a3
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=13
license: LGPL-2.1-or-later
size: 134088
timestamp: 1754905959823
- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda
sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25
md5: fb53fb07ce46a575c5d004bbc96032c2
depends:
- __glibc >=2.17,<3.0.a0
- keyutils >=1.6.3,<2.0a0
- libedit >=3.1.20250104,<3.2.0a0
- libedit >=3.1.20250104,<4.0a0
- libgcc >=14
- libstdcxx >=14
- openssl >=3.5.5,<4.0a0
license: MIT
license_family: MIT
size: 1386730
timestamp: 1769769569681
- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda
sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c
md5: 18335a698559cdbcd86150a48bf54ba6
depends:
- __glibc >=2.17,<3.0.a0
- zstd >=1.5.7,<1.6.0a0
constrains:
- binutils_impl_linux-64 2.45.1
license: GPL-3.0-only
license_family: GPL
size: 728002
timestamp: 1774197446916
- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda
sha256: a7a4481a4d217a3eadea0ec489826a69070fcc3153f00443aa491ed21527d239
md5: 6f7b4302263347698fd24565fbf11310
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- libstdcxx >=14
constrains:
- libabseil-static =20260107.1=cxx17*
- abseil-cpp =20260107.1
license: Apache-2.0
license_family: Apache
size: 1384817
timestamp: 1770863194876
- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-23.0.1-ha7f89c6_9_cpu.conda
build_number: 9
sha256: 227150d746680ddb0c1e8c346647d62f3e6b6fc43c22f87a330c616c9ef68d9d
md5: b94c6431eadc98b61f4b9c62a338b3c6
depends:
- __glibc >=2.17,<3.0.a0
- aws-crt-cpp >=0.37.4,<0.37.5.0a0
- aws-sdk-cpp >=1.11.747,<1.11.748.0a0
- azure-core-cpp >=1.16.2,<1.16.3.0a0
- azure-identity-cpp >=1.13.3,<1.13.4.0a0
- azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0
- azure-storage-files-datalake-cpp >=12.14.0,<12.14.1.0a0
- bzip2 >=1.0.8,<2.0a0
- glog >=0.7.1,<0.8.0a0
- libabseil * cxx17*
- libabseil >=20260107.1,<20260108.0a0
- libbrotlidec >=1.2.0,<1.3.0a0
- libbrotlienc >=1.2.0,<1.3.0a0
- libgcc >=14
- libgoogle-cloud >=3.3.0,<3.4.0a0
- libgoogle-cloud-storage >=3.3.0,<3.4.0a0
- libopentelemetry-cpp >=1.26.0,<1.27.0a0
- libprotobuf >=6.33.5,<6.33.6.0a0
- libstdcxx >=14
- libzlib >=1.3.2,<2.0a0
- lz4-c >=1.10.0,<1.11.0a0
- orc >=2.3.0,<2.3.1.0a0
- snappy >=1.2.2,<1.3.0a0
- zstd >=1.5.7,<1.6.0a0
constrains:
- arrow-cpp <0.0a0
- parquet-cpp <0.0a0
- apache-arrow-proc =*=cpu
license: Apache-2.0
license_family: APACHE
size: 6492912
timestamp: 1774232411616
- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-23.0.1-h635bf11_9_cpu.conda
build_number: 9
sha256: 42fb618f2402d14e96987d82f36453793ee7bae07c8dfa7fee54491bf1d163d9
md5: 84cdfd12ec9a363b400f7d3850838ea3
depends:
- __glibc >=2.17,<3.0.a0
- libarrow 23.0.1 ha7f89c6_9_cpu
- libarrow-compute 23.0.1 h53684a4_9_cpu
- libgcc >=14
- libstdcxx >=14
license: Apache-2.0
license_family: APACHE
size: 609325
timestamp: 1774232640179
- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-23.0.1-h53684a4_9_cpu.conda
build_number: 9
sha256: 6ce44b5992a855e2412d904181729272b4732e8ebd8283a20b5b0b93f91f48f3
md5: b3ba3597c481a636fc161185819cf6b1
depends:
- __glibc >=2.17,<3.0.a0
- libarrow 23.0.1 ha7f89c6_9_cpu
- libgcc >=14
- libre2-11 >=2025.11.5
- libstdcxx >=14
- libutf8proc >=2.11.3,<2.12.0a0
- re2
license: Apache-2.0
license_family: APACHE
size: 3003173
timestamp: 1774232490011
- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-23.0.1-h635bf11_9_cpu.conda
build_number: 9
sha256: cc3fb77d53f7e2db2cd35ffc1371d677d9e13682b7964e196cab533b319a85ea
md5: 9c5282b7aaf2261d3dbe5a61d24d5337
depends:
- __glibc >=2.17,<3.0.a0
- libarrow 23.0.1 ha7f89c6_9_cpu
- libarrow-acero 23.0.1 h635bf11_9_cpu
- libarrow-compute 23.0.1 h53684a4_9_cpu
- libgcc >=14
- libparquet 23.0.1 h7376487_9_cpu
- libstdcxx >=14
license: Apache-2.0
license_family: APACHE
size: 607738
timestamp: 1774232745741
- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-23.0.1-hb4dd7c2_9_cpu.conda
build_number: 9
sha256: 037f4befc2df64d9c7903eb7508c1495772f17b7a318b5a888aaddb6307b48a0
md5: d5338f154126253750e8ccc539386b92
depends:
- __glibc >=2.17,<3.0.a0
- libabseil * cxx17*
- libabseil >=20260107.1,<20260108.0a0
- libarrow 23.0.1 ha7f89c6_9_cpu
- libarrow-acero 23.0.1 h635bf11_9_cpu
- libarrow-dataset 23.0.1 h635bf11_9_cpu
- libgcc >=14
- libprotobuf >=6.33.5,<6.33.6.0a0
- libstdcxx >=14
license: Apache-2.0
license_family: APACHE
size: 518730
timestamp: 1774232781245
- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda
build_number: 6
sha256: 7bfe936dbb5db04820cf300a9cc1f5ee8d5302fc896c2d66e30f1ee2f20fbfd6
md5: 6d6d225559bfa6e2f3c90ee9c03d4e2e
depends:
- libopenblas >=0.3.32,<0.3.33.0a0
- libopenblas >=0.3.32,<1.0a0
constrains:
- blas 2.306 openblas
- liblapack 3.11.0 6*_openblas
- liblapacke 3.11.0 6*_openblas
- libcblas 3.11.0 6*_openblas
- mkl <2026
license: BSD-3-Clause
license_family: BSD
size: 18621
timestamp: 1774503034895
- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda
sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e
md5: 72c8fd1af66bd67bf580645b426513ed
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
license: MIT
license_family: MIT
size: 79965
timestamp: 1764017188531
- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda
sha256: 12fff21d38f98bc446d82baa890e01fd82e3b750378fedc720ff93522ffb752b
md5: 366b40a69f0ad6072561c1d09301c886
depends:
- __glibc >=2.17,<3.0.a0
- libbrotlicommon 1.2.0 hb03c661_1
- libgcc >=14
license: MIT
license_family: MIT
size: 34632
timestamp: 1764017199083
- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda
sha256: a0c15c79997820bbd3fbc8ecf146f4fe0eca36cc60b62b63ac6cf78857f1dd0d
md5: 4ffbb341c8b616aa2494b6afb26a0c5f
depends:
- __glibc >=2.17,<3.0.a0
- libbrotlicommon 1.2.0 hb03c661_1
- libgcc >=14
license: MIT
license_family: MIT
size: 298378
timestamp: 1764017210931
- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda
build_number: 6
sha256: 57edafa7796f6fa3ebbd5367692dd4c7f552be42109c2dd1a7c89b55089bf374
md5: 36ae340a916635b97ac8a0655ace2a35
depends:
- libblas 3.11.0 6_h4a7cf45_openblas
constrains:
- blas 2.306 openblas
- liblapack 3.11.0 6*_openblas
- liblapacke 3.11.0 6*_openblas
license: BSD-3-Clause
license_family: BSD
size: 18622
timestamp: 1774503050205
- conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2
sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5
md5: c965a5aa0d5c1c37ffc62dff36e28400
depends:
- libgcc-ng >=9.4.0
- libstdcxx-ng >=9.4.0
license: BSD-3-Clause
license_family: BSD
size: 20440
timestamp: 1633683576494
- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda
sha256: a0390fd0536ebcd2244e243f5f00ab8e76ab62ed9aa214cd54470fe7496620f4
md5: d50608c443a30c341c24277d28290f76
depends:
- __glibc >=2.17,<3.0.a0
- krb5 >=1.22.2,<1.23.0a0
- libgcc >=14
- libnghttp2 >=1.67.0,<2.0a0
- libssh2 >=1.11.1,<2.0a0
- libzlib >=1.3.1,<2.0a0
- openssl >=3.5.5,<4.0a0
- zstd >=1.5.7,<1.6.0a0
license: curl
license_family: MIT
size: 466704
timestamp: 1773218522665
- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda
sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724
md5: c277e0a4d549b03ac1e9d6cbbe3d017b
depends:
- ncurses
- __glibc >=2.17,<3.0.a0
- libgcc >=13
- ncurses >=6.5,<7.0a0
license: BSD-2-Clause
license_family: BSD
size: 134676
timestamp: 1738479519902
- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda
sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4
md5: 172bf1cd1ff8629f2b1179945ed45055
depends:
- libgcc-ng >=12
license: BSD-2-Clause
license_family: BSD
size: 112766
timestamp: 1702146165126
- conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda
sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131
md5: a1cfcc585f0c42bf8d5546bb1dfb668d
depends:
- libgcc-ng >=12
- openssl >=3.1.1,<4.0a0
license: BSD-3-Clause
license_family: BSD
size: 427426
timestamp: 1685725977222
- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda
sha256: e8c2b57f6aacabdf2f1b0924bd4831ce5071ba080baa4a9e8c0d720588b6794c
md5: 49f570f3bc4c874a06ea69b7225753af
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
constrains:
- expat 2.7.5.*
license: MIT
license_family: MIT
size: 76624
timestamp: 1774719175983
- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda
sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6
md5: a360c33a5abe61c07959e449fa1453eb
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
license: MIT
license_family: MIT
size: 58592
timestamp: 1769456073053
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda
sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5
md5: 0aa00f03f9e39fb9876085dee11a85d4
depends:
- __glibc >=2.17,<3.0.a0
- _openmp_mutex >=4.5
constrains:
- libgcc-ng ==15.2.0=*_18
- libgomp 15.2.0 he0feb66_18
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 1041788
timestamp: 1771378212382
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda
sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893
md5: d5e96b1ed75ca01906b3d2469b4ce493
depends:
- libgcc 15.2.0 he0feb66_18
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 27526
timestamp: 1771378224552
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda
sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee
md5: 9063115da5bc35fdc3e1002e69b9ef6e
depends:
- libgfortran5 15.2.0 h68bc16d_18
constrains:
- libgfortran-ng ==15.2.0=*_18
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 27523
timestamp: 1771378269450
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda
sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12
md5: 646855f357199a12f02a87382d429b75
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=15.2.0
constrains:
- libgfortran 15.2.0
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 2482475
timestamp: 1771378241063
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda
sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110
md5: 239c5e9546c38a1e884d69effcf4c882
depends:
- __glibc >=2.17,<3.0.a0
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 603262
timestamp: 1771378117851
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-3.3.0-h25dbb67_1.conda
sha256: 17ea802cef3942b0a850b8e33b03fc575f79734f3c829cdd6a4e56e2dae60791
md5: b2baa4ce6a9d9472aaa602b88f8d40ac
depends:
- __glibc >=2.17,<3.0.a0
- libabseil * cxx17*
- libabseil >=20260107.1,<20260108.0a0
- libcurl >=8.19.0,<9.0a0
- libgcc >=14
- libgrpc >=1.78.1,<1.79.0a0
- libopentelemetry-cpp >=1.26.0,<1.27.0a0
- libprotobuf >=6.33.5,<6.33.6.0a0
- libstdcxx >=14
- openssl >=3.5.5,<4.0a0
constrains:
- libgoogle-cloud 3.3.0 *_1
license: Apache-2.0
license_family: Apache
size: 2558266
timestamp: 1774212240265
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-3.3.0-hdbdcf42_1.conda
sha256: 838b6798962039e7f1ed97be85c3a36ceacfd4611bdf76e7cc0b6cd8741edf57
md5: da94b149c8eea6ceef10d9e408dcfeb3
depends:
- __glibc >=2.17,<3.0.a0
- libabseil
- libcrc32c >=1.1.2,<1.2.0a0
- libcurl
- libgcc >=14
- libgoogle-cloud 3.3.0 h25dbb67_1
- libstdcxx >=14
- libzlib >=1.3.2,<2.0a0
- openssl
license: Apache-2.0
license_family: Apache
size: 779217
timestamp: 1774212426084
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.78.1-h1d1128b_0.conda
sha256: 5bb935188999fd70f67996746fd2dca85ec6204289e11695c316772e19451eb8
md5: b5fb6d6c83f63d83ef2721dca6ff7091
depends:
- __glibc >=2.17,<3.0.a0
- c-ares >=1.34.6,<2.0a0
- libabseil * cxx17*
- libabseil >=20260107.1,<20260108.0a0
- libgcc >=14
- libprotobuf >=6.33.5,<6.33.6.0a0
- libre2-11 >=2025.11.5
- libstdcxx >=14
- libzlib >=1.3.1,<2.0a0
- openssl >=3.5.5,<4.0a0
- re2
constrains:
- grpc-cpp =1.78.1
license: Apache-2.0
license_family: APACHE
size: 7021360
timestamp: 1774020290672
- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda
sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f
md5: 915f5995e94f60e9a4826e0b0920ee88
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
license: LGPL-2.1-only
size: 790176
timestamp: 1754908768807
- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda
build_number: 6
sha256: 371f517eb7010b21c6cc882c7606daccebb943307cb9a3bf2c70456a5c024f7d
md5: 881d801569b201c2e753f03c84b85e15
depends:
- libblas 3.11.0 6_h4a7cf45_openblas
constrains:
- blas 2.306 openblas
- liblapacke 3.11.0 6*_openblas
- libcblas 3.11.0 6*_openblas
license: BSD-3-Clause
license_family: BSD
size: 18624
timestamp: 1774503065378
- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda
sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d
md5: b88d90cad08e6bc8ad540cb310a761fb
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
constrains:
- xz 5.8.3.*
license: 0BSD
size: 113478
timestamp: 1775825492909
- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda
sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843
md5: 2c21e66f50753a083cbe6b80f38268fa
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
license: BSD-2-Clause
license_family: BSD
size: 92400
timestamp: 1769482286018
- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda
sha256: 663444d77a42f2265f54fb8b48c5450bfff4388d9c0f8253dd7855f0d993153f
md5: 2a45e7f8af083626f009645a6481f12d
depends:
- __glibc >=2.17,<3.0.a0
- c-ares >=1.34.6,<2.0a0
- libev >=4.33,<4.34.0a0
- libev >=4.33,<5.0a0
- libgcc >=14
- libstdcxx >=14
- libzlib >=1.3.1,<2.0a0
- openssl >=3.5.5,<4.0a0
license: MIT
license_family: MIT
size: 663344
timestamp: 1773854035739
- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda
sha256: 6dc30b28f32737a1c52dada10c8f3a41bc9e021854215efca04a7f00487d09d9
md5: 89d61bc91d3f39fda0ca10fcd3c68594
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- libgfortran
- libgfortran5 >=14.3.0
constrains:
- openblas >=0.3.32,<0.3.33.0a0
license: BSD-3-Clause
license_family: BSD
size: 5928890
timestamp: 1774471724897
- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.26.0-h9692893_0.conda
sha256: 5126b75e7733de31e261aa275c0a1fd38b25fdfff23e7d7056ebd6ca76d11532
md5: c360be6f9e0947b64427603e91f9651f
depends:
- libabseil * cxx17*
- libabseil >=20260107.1,<20260108.0a0
- libcurl >=8.19.0,<9.0a0
- libgrpc >=1.78.0,<1.79.0a0
- libopentelemetry-cpp-headers 1.26.0 ha770c72_0
- libprotobuf >=6.33.5,<6.33.6.0a0
- libzlib >=1.3.1,<2.0a0
- nlohmann_json
- prometheus-cpp >=1.3.0,<1.4.0a0
constrains:
- cpp-opentelemetry-sdk =1.26.0
license: Apache-2.0
license_family: APACHE
size: 934274
timestamp: 1774001192674
- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.26.0-ha770c72_0.conda
sha256: fec2ba047f7000c213ca7ace5452435197c79fbcb1690da7ce85e99312245984
md5: cb93c6e226a7bed5557601846555153d
license: Apache-2.0
license_family: APACHE
size: 396403
timestamp: 1774001149705
- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-23.0.1-h7376487_9_cpu.conda
build_number: 9
sha256: 2ab9ac48c43b9800777c05b504337ef93597bf310ac8cff957796cc6776992a2
md5: 2dccf1b6cf9dba8857050740dbc0497e
depends:
- __glibc >=2.17,<3.0.a0
- libarrow 23.0.1 ha7f89c6_9_cpu
- libgcc >=14
- libstdcxx >=14
- libthrift >=0.22.0,<0.22.1.0a0
- openssl >=3.5.5,<4.0a0
license: Apache-2.0
license_family: APACHE
size: 1390169
timestamp: 1774232604005
- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda
sha256: afbf195443269ae10a940372c1d37cda749355d2bd96ef9587a962abd87f2429
md5: 11ac478fa72cf12c214199b8a96523f4
depends:
- __glibc >=2.17,<3.0.a0
- libabseil * cxx17*
- libabseil >=20260107.0,<20260108.0a0
- libgcc >=14
- libstdcxx >=14
- libzlib >=1.3.1,<2.0a0
license: BSD-3-Clause
license_family: BSD
size: 3638698
timestamp: 1769749419271
- conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.11.05-h0dc7533_1.conda
sha256: 138fc85321a8c0731c1715688b38e2be4fb71db349c9ab25f685315095ae70ff
md5: ced7f10b6cfb4389385556f47c0ad949
depends:
- __glibc >=2.17,<3.0.a0
- libabseil * cxx17*
- libabseil >=20260107.0,<20260108.0a0
- libgcc >=14
- libstdcxx >=14
constrains:
- re2 2025.11.05.*
license: BSD-3-Clause
license_family: BSD
size: 213122
timestamp: 1768190028309
- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda
sha256: ec37c79f737933bbac965f5dc0f08ef2790247129a84bb3114fad4900adce401
md5: 810d83373448da85c3f673fbcb7ad3a3
depends:
- __glibc >=2.17,<3.0.a0
- icu >=78.3,<79.0a0
- libgcc >=14
- libzlib >=1.3.2,<2.0a0
license: blessing
size: 958864
timestamp: 1775753750179
- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda
sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661
md5: eecce068c7e4eddeb169591baac20ac4
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=13
- libzlib >=1.3.1,<2.0a0
- openssl >=3.5.0,<4.0a0
license: BSD-3-Clause
license_family: BSD
size: 304790
timestamp: 1745608545575
- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda
sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e
md5: 1b08cd684f34175e4514474793d44bcb
depends:
- __glibc >=2.17,<3.0.a0
- libgcc 15.2.0 he0feb66_18
constrains:
- libstdcxx-ng ==15.2.0=*_18
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 5852330
timestamp: 1771378262446
- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda
sha256: 3c902ffd673cb3c6ddde624cdb80f870b6c835f8bf28384b0016e7d444dd0145
md5: 6235adb93d064ecdf3d44faee6f468de
depends:
- libstdcxx 15.2.0 h934c35e_18
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 27575
timestamp: 1771378314494
- conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.22.0-h454ac66_1.conda
sha256: 4888b9ea2593c36ca587a5ebe38d0a56a0e6d6a9e4bb7da7d9a326aaaca7c336
md5: 8ed82d90e6b1686f5e98f8b7825a15ef
depends:
- __glibc >=2.17,<3.0.a0
- libevent >=2.1.12,<2.1.13.0a0
- libgcc >=14
- libstdcxx >=14
- libzlib >=1.3.1,<2.0a0
- openssl >=3.5.1,<4.0a0
license: Apache-2.0
license_family: APACHE
size: 424208
timestamp: 1753277183984
- conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.3-hfe17d71_0.conda
sha256: ecbf4b7520296ed580498dc66a72508b8a79da5126e1d6dc650a7087171288f9
md5: 1247168fe4a0b8912e3336bccdbf98a5
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
license: MIT
license_family: MIT
size: 85969
timestamp: 1768735071295
- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda
sha256: bc1b08c92626c91500fd9f26f2c797f3eb153b627d53e9c13cd167f1e12b2829
md5: 38ffe67b78c9d4de527be8315e5ada2c
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
license: BSD-3-Clause
license_family: BSD
size: 40297
timestamp: 1775052476770
- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda
sha256: 275c324f87bda1a3b67d2f4fcc3555eeff9e228a37655aa001284a7ceb6b0392
md5: e49238a1609f9a4a844b09d9926f2c3d
depends:
- __glibc >=2.17,<3.0.a0
- icu >=78.2,<79.0a0
- libgcc >=14
- libiconv >=1.18,<2.0a0
- liblzma >=5.8.2,<6.0a0
- libxml2-16 2.15.2 hca6bf5a_0
- libzlib >=1.3.1,<2.0a0
license: MIT
license_family: MIT
size: 45968
timestamp: 1772704614539
- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda
sha256: 08d2b34b49bec9613784f868209bb7c3bb8840d6cf835ff692e036b09745188c
md5: f3bc152cb4f86babe30f3a4bf0dbef69
depends:
- __glibc >=2.17,<3.0.a0
- icu >=78.2,<79.0a0
- libgcc >=14
- libiconv >=1.18,<2.0a0
- liblzma >=5.8.2,<6.0a0
- libzlib >=1.3.1,<2.0a0
constrains:
- libxml2 2.15.2
license: MIT
license_family: MIT
size: 557492
timestamp: 1772704601644
- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda
sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9
md5: d87ff7921124eccd67248aa483c23fec
depends:
- __glibc >=2.17,<3.0.a0
constrains:
- zlib 1.3.2 *_2
license: Zlib
license_family: Other
size: 63629
timestamp: 1774072609062
- conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda
sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346
md5: 9de5350a85c4a20c685259b889aa6393
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=13
- libstdcxx >=13
license: BSD-2-Clause
license_family: BSD
size: 167055
timestamp: 1733741040117
- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda
sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586
md5: 47e340acb35de30501a76c7c799c41d7
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=13
license: X11 AND BSD-3-Clause
size: 891641
timestamp: 1738195959188
- conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda
sha256: fd2cbd8dfc006c72f45843672664a8e4b99b2f8137654eaae8c3d46dca776f63
md5: 16c2a0e9c4a166e53632cfca4f68d020
constrains:
- nlohmann_json-abi ==3.12.0
license: MIT
license_family: MIT
size: 136216
timestamp: 1758194284857
- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py314hd4f4903_0.conda
sha256: 80bdebe25269b3a0ea5e3eae2ef7159615d4aa3a74b2aa1b408f35b5812312b7
md5: ee2b2bb9e96a9cd64d68492842559adf
depends:
- python
- libstdcxx >=14
- libgcc >=14
- __glibc >=2.17,<3.0.a0
- python_abi 3.14.* *_cp314t
- libcblas >=3.9.0,<4.0a0
- libblas >=3.9.0,<4.0a0
- liblapack >=3.9.0,<4.0a0
constrains:
- numpy-base <0a0
license: BSD-3-Clause
license_family: BSD
size: 8972010
timestamp: 1773839212779
- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda
sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb
md5: da1b85b6a87e141f5140bb9924cecab0
depends:
- __glibc >=2.17,<3.0.a0
- ca-certificates
- libgcc >=14
license: Apache-2.0
license_family: Apache
size: 3167099
timestamp: 1775587756857
- conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.3.0-h21090e2_0.conda
sha256: a60c2578c8422e0c67206d269767feb4d3e627511558b6866e5daf2231d5214d
md5: 8027fce94fdfdf2e54f9d18cbae496df
depends:
- tzdata
- libstdcxx >=14
- libgcc >=14
- __glibc >=2.17,<3.0.a0
- lz4-c >=1.10.0,<1.11.0a0
- snappy >=1.2.2,<1.3.0a0
- libabseil >=20260107.1,<20260108.0a0
- libabseil * cxx17*
- libprotobuf >=6.33.5,<6.33.6.0a0
- zstd >=1.5.7,<1.6.0a0
- libzlib >=1.3.1,<2.0a0
license: Apache-2.0
license_family: APACHE
size: 1468651
timestamp: 1773230208923
- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-3.0.2-py314hd70f1f7_0.conda
sha256: 6f16837e4bbc6e8fbece05a262f86cf8f8ee61ac514c1444d4870cb4cc13ab77
md5: 4b1ab10ca0252d9dff2af572846894ca
depends:
- python
- numpy >=1.26.0
- python-dateutil >=2.8.2
- __glibc >=2.17,<3.0.a0
- libstdcxx >=14
- libgcc >=14
- python_abi 3.14.* *_cp314t
- numpy >=1.23,<3
constrains:
- adbc-driver-postgresql >=1.2.0
- adbc-driver-sqlite >=1.2.0
- beautifulsoup4 >=4.12.3
- blosc >=1.21.3
- bottleneck >=1.4.2
- fastparquet >=2024.11.0
- fsspec >=2024.10.0
- gcsfs >=2024.10.0
- html5lib >=1.1
- hypothesis >=6.116.0
- jinja2 >=3.1.5
- lxml >=5.3.0
- matplotlib >=3.9.3
- numba >=0.60.0
- numexpr >=2.10.2
- odfpy >=1.4.1
- openpyxl >=3.1.5
- psycopg2 >=2.9.10
- pyarrow >=13.0.0
- pyiceberg >=0.8.1
- pymysql >=1.1.1
- pyqt5 >=5.15.9
- pyreadstat >=1.2.8
- pytables >=3.10.1
- pytest >=8.3.4
- pytest-xdist >=3.6.1
- python-calamine >=0.3.0
- pytz >=2024.2
- pyxlsb >=1.0.10
- qtpy >=2.4.2
- scipy >=1.14.1
- s3fs >=2024.10.0
- sqlalchemy >=2.0.36
- tabulate >=0.9.0
- xarray >=2024.10.0
- xlrd >=2.0.1
- xlsxwriter >=3.2.0
- zstandard >=0.23.0
license: BSD-3-Clause
license_family: BSD
size: 15176289
timestamp: 1774916581995
- conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda
sha256: 013669433eb447548f21c3c6b16b2ed64356f726b5f77c1b39d5ba17a8a4b8bc
md5: a83f6a2fdc079e643237887a37460668
depends:
- __glibc >=2.17,<3.0.a0
- libcurl >=8.10.1,<9.0a0
- libgcc >=13
- libstdcxx >=13
- libzlib >=1.3.1,<2.0a0
- zlib
license: MIT
license_family: MIT
size: 199544
timestamp: 1730769112346
- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-23.0.1-py314h061e8c0_0.conda
sha256: 35e9865be71461d049a026735e6732493050ed66f945750cb0cd4106054d4d9f
md5: b881d61d7dcfe42a1e0e94586ef12a21
depends:
- libarrow-acero 23.0.1.*
- libarrow-dataset 23.0.1.*
- libarrow-substrait 23.0.1.*
- libparquet 23.0.1.*
- pyarrow-core 23.0.1 *_0_*
- python >=3.14,<3.15.0a0
- python_abi 3.14.* *_cp314t
license: Apache-2.0
license_family: APACHE
size: 28636
timestamp: 1771307347465
- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-23.0.1-py314h9de4539_0_cpu.conda
sha256: f62d9ae514f2e4e2b060e0279da28bbb4d38253b16c9d81059bfa6ef8024bec2
md5: c01f4b7872d5bdc588e25656a65e24bb
depends:
- __glibc >=2.17,<3.0.a0
- libarrow 23.0.1.* *cpu
- libarrow-compute 23.0.1.* *cpu
- libgcc >=14
- libstdcxx >=14
- libzlib >=1.3.1,<2.0a0
- python >=3.14,<3.15.0a0
- python_abi 3.14.* *_cp314t
constrains:
- apache-arrow-proc * cpu
- numpy >=1.23,<3
license: Apache-2.0
license_family: APACHE
size: 5356915
timestamp: 1771307292471
- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.4-hf9ea5aa_0_cp314t.conda
sha256: 60b64046b273c5ae1508d860bda2cb1c02c9af8d0973a9873ce416496132933d
md5: f9c864fd19f2e57a6624520c63262a16
depends:
- __glibc >=2.17,<3.0.a0
- bzip2 >=1.0.8,<2.0a0
- ld_impl_linux-64 >=2.36.1
- libexpat >=2.7.5,<3.0a0
- libffi >=3.5.2,<3.6.0a0
- libgcc >=14
- liblzma >=5.8.2,<6.0a0
- libmpdec >=4.0.0,<5.0a0
- libsqlite >=3.52.0,<4.0a0
- libuuid >=2.42,<3.0a0
- libzlib >=1.3.2,<2.0a0
- ncurses >=6.5,<7.0a0
- openssl >=3.5.6,<4.0a0
- python_abi 3.14.* *_cp314t
- readline >=8.3,<9.0a0
- tk >=8.6.13,<8.7.0a0
- tzdata
- zstd >=1.5.7,<1.6.0a0
track_features:
- py_freethreading
license: Python-2.0
size: 47768693
timestamp: 1775614324184
python_site_packages_path: lib/python3.14t/site-packages
- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664
md5: 5b8d21249ff20967101ffa321cab24e8
depends:
- python >=3.9
- six >=1.5
- python
license: Apache-2.0
license_family: APACHE
size: 233310
timestamp: 1751104122689
- conda: https://conda.anaconda.org/conda-forge/linux-64/python-duckdb-1.5.2-py314h3ce7e56_0.conda
sha256: f4bc8f166dc53523d0bb86cfcbf8166f3298163afcc7af5264561689c9271251
md5: 28f2ec1421356a449a4d57bbcf74fd81
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- libstdcxx >=14
- python >=3.14,<3.15.0a0
- python_abi 3.14.* *_cp314t
license: MIT
license_family: MIT
size: 17075120
timestamp: 1776091749532
- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314t.conda
build_number: 8
sha256: d9ed2538fba61265a330ee1b1afe99a4bb23ace706172b9464546c7e01259d63
md5: 3251796e09870c978e0f69fa05e38fb6
constrains:
- python 3.14.* *_cp314t
license: BSD-3-Clause
license_family: BSD
size: 7020
timestamp: 1752805919426
- conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.11.05-h5301d42_1.conda
sha256: 3fc684b81631348540e9a42f6768b871dfeab532d3f47d5c341f1f83e2a2b2b2
md5: 66a715bc01c77d43aca1f9fcb13dde3c
depends:
- libre2-11 2025.11.05 h0dc7533_1
license: BSD-3-Clause
license_family: BSD
size: 27469
timestamp: 1768190052132
- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda
sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002
md5: d7d95fc8287ea7bf33e0e7116d2b95ec
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- ncurses >=6.5,<7.0a0
license: GPL-3.0-only
license_family: GPL
size: 345073
timestamp: 1765813471974
- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda
sha256: dbbe4ab36b90427f12d69fc14a8b601b6bca4185c6c4dd67b8046a8da9daec03
md5: 9d978822b57bafe72ebd3f8b527bba71
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- openssl >=3.5.5,<4.0a0
license: Apache-2.0
license_family: Apache
size: 395083
timestamp: 1773251675551
- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d
md5: 3339e3b65d58accf4ca4fb8748ab16b3
depends:
- python >=3.9
- python
license: MIT
license_family: MIT
size: 18455
timestamp: 1753199211006
- conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda
sha256: 48f3f6a76c34b2cfe80de9ce7f2283ecb55d5ed47367ba91e8bb8104e12b8f11
md5: 98b6c9dc80eb87b2519b97bcf7e578dd
depends:
- libgcc >=14
- __glibc >=2.17,<3.0.a0
- libstdcxx >=14
- libgcc >=14
license: BSD-3-Clause
license_family: BSD
size: 45829
timestamp: 1762948049098
- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda
sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac
md5: cffd3bdd58090148f4cfcd831f4b26ab
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- libzlib >=1.3.1,<2.0a0
constrains:
- xorg-libx11 >=1.8.12,<2.0a0
license: TCL
license_family: BSD
size: 3301196
timestamp: 1769460227866
- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c
md5: ad659d0a2b3e47e38d829aa8cad2d610
license: LicenseRef-Public-Domain
size: 119135
timestamp: 1767016325805
- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda
sha256: 245c9ee8d688e23661b95e3c6dd7272ca936fabc03d423cdb3cdee1bbcf9f2f2
md5: c2a01a08fc991620a74b32420e97868a
depends:
- __glibc >=2.17,<3.0.a0
- libzlib 1.3.2 h25fd6f3_2
license: Zlib
license_family: Other
size: 95931
timestamp: 1774072620848
- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda
sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7
md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829
depends:
- __glibc >=2.17,<3.0.a0
- libzlib >=1.3.1,<2.0a0
license: BSD-3-Clause
license_family: BSD
size: 601375
timestamp: 1764777111296
[workspace]
authors = ["nlebovits <nissim.lebovits@vanderbilt.edu>"]
channels = ["conda-forge"]
name = "arg-informal-settlements-analysis"
platforms = ["linux-64"]
version = "0.1.0"
[tasks]
[dependencies]
duckdb = ">=1.5.2,<2"
pandas = ">=3.0.2,<4"
pyarrow = ">=23.0.1,<24"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment