From 134935ff4bee28acf1b4673c04bbf82c83739e8a Mon Sep 17 00:00:00 2001 From: kbhakt Date: Sun, 15 Mar 2026 09:14:06 -0700 Subject: [PATCH 1/6] add initial scripts for haptic coin and tactile fsr sensor --- Demo/Sensors/README.md | 131 ++++ Demo/Sensors/ads1256.py | 263 ++++++++ Demo/Sensors/config.toml | 30 + Demo/Sensors/haptic_coin.py | 75 +++ Demo/Sensors/images/rpi5_pinout.jpg | Bin 0 -> 131630 bytes Demo/Sensors/tactile_sensing.py | 598 ++++++++++++++++++ .../Sensors/tactile_sensing_post_visualize.py | 116 ++++ pixi.toml | 10 + 8 files changed, 1223 insertions(+) create mode 100644 Demo/Sensors/README.md create mode 100644 Demo/Sensors/ads1256.py create mode 100644 Demo/Sensors/config.toml create mode 100644 Demo/Sensors/haptic_coin.py create mode 100644 Demo/Sensors/images/rpi5_pinout.jpg create mode 100644 Demo/Sensors/tactile_sensing.py create mode 100644 Demo/Sensors/tactile_sensing_post_visualize.py diff --git a/Demo/Sensors/README.md b/Demo/Sensors/README.md new file mode 100644 index 0000000..6ae5b71 --- /dev/null +++ b/Demo/Sensors/README.md @@ -0,0 +1,131 @@ +# AmazingHand — Sensors + +## Files + +| File | Description | +|---|---| +| `config.toml` | Shared config — GPIO pins, SPI settings, sensor channels, logging and visualisation defaults | +| `ads1256.py` | ADS1256 driver — 24-bit, 8-channel | +| `tactile_sensing.py` | `TactileSensor` wrapper — reads config.toml and drives the ADS1256 | +| `tactile_sensing_post_visualize.py` | Offline Bokeh visualisation of logged CSV data | +| `haptic_coin.py` | `HapticCoin` PWM class for the QYF-740 coin motor | + +--- + +## FSR Tactile Sensing (ADS1256) + +### Hardware + +- **ADC HAT**: [Waveshare High-Precision AD HAT](https://www.waveshare.com/wiki/High-Precision_AD_HAT) + - ADS1256: 24-bit, 8 single-ended channels, SPI +- **Sensors**: FSR (Force Sensitive Resistors) wired in a voltage-divider circuit with a fixed resistor (default 10 kΩ) to each ADC input channel. + +### SPI Wiring (BCM pin numbers, set in `config.toml`) + +| Signal | BCM | Pi header pin | +|---|---|---| +| MOSI (DIN) | GPIO 10 | Pin 19 | +| MISO (DOUT) | GPIO 9 | Pin 21 | +| SCLK | GPIO 11 | Pin 23 | +| CS | GPIO 22 | Pin 15 | +| RST | GPIO 18 | Pin 12 | +| DRDY | GPIO 17 | Pin 11 | + +Enable SPI on the Pi: +```bash +sudo raspi-config # Interface Options → SPI → Enable +``` + +### Install dependencies + +```bash +pixi install +``` + +To add a single package interactively: + +```bash +pixi add --pypi lgpio +``` + +### Run + +**GUI (default):** +```bash +pixi run python -m Demo.Sensors.tactile_sensing +``` + +**Terminal only (no GUI window):** +```bash +pixi run python -m Demo.Sensors.tactile_sensing --terminal +``` + +See all flags: +```bash +pixi run python -m Demo.Sensors.tactile_sensing --help +``` + +### Offline Visualization + +```bash +pixi run python Demo/Sensors/tactile_sensing_post_visualize.py +# or point at a specific file: +pixi run python Demo/Sensors/tactile_sensing_post_visualize.py --file Demo/Sensors/logs/tactile_20260101_120000.csv +``` + +CSV schema (long format — one row per channel per sample): + +``` +sensor_time, channel, raw, volts, force_norm +``` + +### Tuning `fsr_r_fixed` + +The `fsr_r_fixed` parameter (default 10 000 Ω) must match the resistor you place in series with each FSR to form the voltage divider. Larger values increase sensitivity at low force; smaller values increase the measurable force range. + +--- + +## Haptic Coin (QYF-740) + +### Pin conflict warning + +The ADS1256 tactile sensing stack claims the following BCM GPIO pins. **Do not assign the HapticCoin to any of these:** + +| BCM | Use | +|---|---| +| GPIO 8 | SPI0 CE0 (kernel) | +| GPIO 9 | SPI0 MISO | +| GPIO 10 | SPI0 MOSI | +| GPIO 11 | SPI0 SCLK | +| GPIO 17 | ADS1256 DRDY | +| GPIO 18 | ADS1256 RST | +| GPIO 22 | ADS1256 CS | +| GPIO 23 | ADS1256 CS_DAC | + +Safe choices for the PWM output include GPIO 12, 13 (hardware PWM), 24, 25, 26, 27, or 35. + +### Wiring — [RPi 5 pinout](https://vilros.com/pages/raspberry-pi-5-pinout) + +![Raspberry Pi 5 GPIO Pinout](images/rpi5_pinout.jpg) + +| Motor wire | Pi pin | +|---|---| +| GND | Pin 6 | +| VCC | Pin 2 (5 V) | +| PWM | Pin 35 (GPIO 19) | + +### Usage + +```python +from Demo.Sensors.haptic_coin import HapticCoin + +motor = HapticCoin(gpio_pin=19) +motor.vibrate_once(intensity=0.8, duration_s=0.5) +motor.cleanup() +``` + +Run the example test script as a module so relative imports resolve: + +```bash +pixi run python -m Demo.Sensors.haptic_test +``` diff --git a/Demo/Sensors/ads1256.py b/Demo/Sensors/ads1256.py new file mode 100644 index 0000000..d64d3ad --- /dev/null +++ b/Demo/Sensors/ads1256.py @@ -0,0 +1,263 @@ +""" +ADS1256 driver — 24-bit, 8-channel ADC (lgpio + spidev, no RPi.GPIO). + +Hardware pin and SPI settings are read from config.toml in the same directory. +""" + +import time +from pathlib import Path + +import lgpio +import spidev + +# --------------------------------------------------------------------------- +# Load hardware settings from config.toml +# --------------------------------------------------------------------------- +import tomllib + +_CONFIG_PATH = Path(__file__).parent / "config.toml" +with _CONFIG_PATH.open("rb") as _f: + _hw = tomllib.load(_f)["hardware"] + +_RST_PIN : int = _hw["rst_pin"] +_CS_PIN : int = _hw["cs_pin"] +_CS_DAC_PIN : int = _hw["cs_dac_pin"] +_DRDY_PIN : int = _hw["drdy_pin"] +_SPI_MAX_SPEED_HZ : int = _hw["spi_max_speed_hz"] +_SPI_MODE : int = _hw["spi_mode"] + +# --------------------------------------------------------------------------- +# Hardware handles +# --------------------------------------------------------------------------- +_SPI = spidev.SpiDev(0, 0) +_h: lgpio.lgpio | None = None + + +# --------------------------------------------------------------------------- +# Low-level GPIO / SPI helpers +# --------------------------------------------------------------------------- + +def _gpio_write(pin: int, value: int) -> None: + lgpio.gpio_write(_h, pin, value) + + +def _gpio_read(pin: int) -> int: + return lgpio.gpio_read(_h, pin) + + +def _delay_ms(ms: float) -> None: + time.sleep(ms / 1000.0) + + +def _spi_write(data: list[int]) -> None: + _SPI.writebytes(data) + + +def _spi_read(n: int) -> list[int]: + return _SPI.readbytes(n) + + +# --------------------------------------------------------------------------- +# Hardware lifecycle +# --------------------------------------------------------------------------- + +def _hw_init() -> None: + global _h + _h = lgpio.gpiochip_open(0) + lgpio.gpio_claim_output(_h, _RST_PIN) + lgpio.gpio_claim_output(_h, _CS_DAC_PIN) + lgpio.gpio_claim_output(_h, _CS_PIN) + lgpio.gpio_claim_input(_h, _DRDY_PIN) + _SPI.max_speed_hz = _SPI_MAX_SPEED_HZ + _SPI.mode = _SPI_MODE + + +def _hw_exit() -> None: + global _h + _SPI.close() + if _h is not None: + lgpio.gpiochip_close(_h) + _h = None + + +# --------------------------------------------------------------------------- +# ADS1256 register / command constants +# --------------------------------------------------------------------------- + +GAIN = { + "ADS1256_GAIN_1": 0, + "ADS1256_GAIN_2": 1, + "ADS1256_GAIN_4": 2, + "ADS1256_GAIN_8": 3, + "ADS1256_GAIN_16": 4, + "ADS1256_GAIN_32": 5, + "ADS1256_GAIN_64": 6, +} + +DRATE = { + "ADS1256_30000SPS": 0xF0, + "ADS1256_15000SPS": 0xE0, + "ADS1256_7500SPS": 0xD0, + "ADS1256_3750SPS": 0xC0, + "ADS1256_2000SPS": 0xB0, + "ADS1256_1000SPS": 0xA1, + "ADS1256_500SPS": 0x92, + "ADS1256_100SPS": 0x82, + "ADS1256_60SPS": 0x72, + "ADS1256_50SPS": 0x63, + "ADS1256_30SPS": 0x53, + "ADS1256_25SPS": 0x43, + "ADS1256_15SPS": 0x33, + "ADS1256_10SPS": 0x20, + "ADS1256_5SPS": 0x13, + "ADS1256_2d5SPS": 0x03, +} + +REG = { + "REG_STATUS": 0, + "REG_MUX": 1, + "REG_ADCON": 2, + "REG_DRATE": 3, + "REG_IO": 4, + "REG_OFC0": 5, + "REG_OFC1": 6, + "REG_OFC2": 7, + "REG_FSC0": 8, + "REG_FSC1": 9, + "REG_FSC2": 10, +} + +CMD = { + "CMD_WAKEUP": 0x00, + "CMD_RDATA": 0x01, + "CMD_RDATAC": 0x03, + "CMD_SDATAC": 0x0F, + "CMD_RREG": 0x10, + "CMD_WREG": 0x50, + "CMD_SELFCAL": 0xF0, + "CMD_SELFOCAL": 0xF1, + "CMD_SELFGCAL": 0xF2, + "CMD_SYSOCAL": 0xF3, + "CMD_SYSGCAL": 0xF4, + "CMD_SYNC": 0xFC, + "CMD_STANDBY": 0xFD, + "CMD_RESET": 0xFE, +} + +_STATUS_DRDY = 0x04 +ADC_MAX = 0x7FFFFF # 24-bit signed positive full-scale + +# ADS1256 internal Vref = 2.5 V; with PGA=1 full-scale input = ±2×Vref = ±5 V +REF_VOLTAGE = 2.5 + + +# --------------------------------------------------------------------------- +# Driver class +# --------------------------------------------------------------------------- + +class ADS1256: + """Low-level ADS1256 driver.""" + + def __init__(self): + self.rst_pin = _RST_PIN + self.cs_pin = _CS_PIN + self.drdy_pin = _DRDY_PIN + + # --- SPI / GPIO primitives --- + + def _write_cmd(self, cmd: int): + _gpio_write(self.cs_pin, 0) + _spi_write([cmd]) + _gpio_write(self.cs_pin, 1) + + def _write_reg(self, reg: int, data: int): + _gpio_write(self.cs_pin, 0) + _spi_write([CMD["CMD_WREG"] | reg, 0x00, data]) + _gpio_write(self.cs_pin, 1) + + def _read_reg(self, reg: int) -> int: + _gpio_write(self.cs_pin, 0) + _spi_write([CMD["CMD_RREG"] | reg, 0x00]) + data = _spi_read(1) + _gpio_write(self.cs_pin, 1) + return data[0] + + def _wait_drdy(self, timeout: int = 400_000): + for _ in range(timeout): + if _gpio_read(self.drdy_pin) == 0: + return + raise TimeoutError("ADS1256 DRDY timeout — check wiring / power") + + # --- Init helpers --- + + def _reset(self): + _gpio_write(self.rst_pin, 1) + _delay_ms(200) + _gpio_write(self.rst_pin, 0) + _delay_ms(200) + _gpio_write(self.rst_pin, 1) + + def _read_chip_id(self) -> int: + self._wait_drdy() + return self._read_reg(REG["REG_STATUS"]) >> 4 + + def _config_adc(self, gain: int, drate: int): + self._wait_drdy() + buf = [ + (0 << 3) | _STATUS_DRDY | (0 << 1), # STATUS + 0x08, # MUX default + (0 << 5) | (0 << 3) | gain, # ADCON + drate, # DRATE + ] + _gpio_write(self.cs_pin, 0) + _spi_write([CMD["CMD_WREG"] | 0, 0x03]) + _spi_write(buf) + _gpio_write(self.cs_pin, 1) + _delay_ms(1) + + def _set_channel(self, channel: int): + if channel > 7: + raise ValueError(f"ADS1256 single-ended channel must be 0–7, got {channel}") + self._write_reg(REG["REG_MUX"], (channel << 4) | 0x08) + + def _set_diff_channel(self, channel: int): + pairs = [(0, 1), (2, 3), (4, 5), (6, 7)] + if channel >= len(pairs): + raise ValueError(f"ADS1256 differential channel must be 0–3, got {channel}") + pos, neg = pairs[channel] + self._write_reg(REG["REG_MUX"], (pos << 4) | neg) + + def _read_adc_data(self) -> int: + self._wait_drdy() + _gpio_write(self.cs_pin, 0) + _spi_write([CMD["CMD_RDATA"]]) + buf = _spi_read(3) + _gpio_write(self.cs_pin, 1) + raw = ((buf[0] << 16) & 0xFF0000) | ((buf[1] << 8) & 0xFF00) | (buf[2] & 0xFF) + if raw & 0x800000: # two's-complement sign extension + raw -= 0x1000000 + return raw + + # --- Public API --- + + def init(self, gain_key: str = "ADS1256_GAIN_1", + drate_key: str = "ADS1256_30000SPS") -> None: + _hw_init() + self._reset() + chip_id = self._read_chip_id() + if chip_id != 3: + raise RuntimeError(f"ADS1256 chip ID mismatch: got {chip_id}, expected 3") + self._config_adc(GAIN[gain_key], DRATE[drate_key]) + + def get_channel_value(self, channel: int, diff: bool = False) -> int: + """Return signed 24-bit raw count for the given channel.""" + if diff: + self._set_diff_channel(channel) + else: + self._set_channel(channel) + self._write_cmd(CMD["CMD_SYNC"]) + self._write_cmd(CMD["CMD_WAKEUP"]) + return self._read_adc_data() + + def exit(self) -> None: + _hw_exit() diff --git a/Demo/Sensors/config.toml b/Demo/Sensors/config.toml new file mode 100644 index 0000000..ab9bbca --- /dev/null +++ b/Demo/Sensors/config.toml @@ -0,0 +1,30 @@ +# AmazingHand — Tactile Sensor Configuration + +[hardware] +# GPIO pin definitions (BCM numbering) — Waveshare HAT +rst_pin = 18 +cs_pin = 22 +cs_dac_pin = 23 +drdy_pin = 17 + +# SPI settings +# Max SPI clock = fCLKIN/4. Default CLKIN=7.68 MHz → ~1.92 MHz. +# 1 MHz is safe across cable lengths. +spi_max_speed_hz = 1_000_000 +spi_mode = 1 # CPOL=0, CPHA=1 (0b01) + +[sensor] +channels = [3, 4, 5, 6, 7] +channel_names = ["thumb", "index", "middle", "ring", "pinky"] +polling_hz = 100.0 +fsr_vcc = 5.0 +fsr_r_fixed = 10_000.0 +gain_key = "ADS1256_GAIN_1" +drate_key = "ADS1256_30000SPS" + +[logging] +log_dir = "Demo/Sensors/logs" + +[visualization] +plot_window_secs = 10.0 +voltage_ymax = 5.5 diff --git a/Demo/Sensors/haptic_coin.py b/Demo/Sensors/haptic_coin.py new file mode 100644 index 0000000..eb78923 --- /dev/null +++ b/Demo/Sensors/haptic_coin.py @@ -0,0 +1,75 @@ +from time import sleep + +from gpiozero import PWMLED +from loguru import logger + + +class HapticCoin: + """ + Controls a haptic coin motor (QYF-740) via PWM on a Raspberry Pi GPIO pin. + """ + + def __init__(self, gpio_pin: int = 19): + if gpio_pin is None: + logger.warning("GPIO pin not specified — HapticCoin will not function") + self.motor = None + return + self.gpio_pin = gpio_pin + self.motor = PWMLED(self.gpio_pin) + logger.info("HapticCoin initialised on GPIO pin {}", gpio_pin) + + def vibrate_once(self, intensity: float = 1.0, duration_s: float = 1.0): + """Vibrate at *intensity* (0.0–1.0) for *duration_s* seconds, then pause equally.""" + if self.motor is None: + return + logger.debug("vibrate_once intensity={} duration={}s", intensity, duration_s) + self.motor.value = intensity + sleep(duration_s) + self.motor.value = 0.0 + sleep(duration_s) + + def modulate_vibration(self, step: int = 5, delay_s: float = 0.05, pause_s: float = 1.0): + """ + Ramp intensity up and down continuously until KeyboardInterrupt. + + :param step: Duty-cycle increment in percent (1–100). + :param delay_s: Delay between steps (s). + :param pause_s: Pause between ramp cycles (s). + """ + if self.motor is None: + return + try: + while True: + logger.debug("Ramping up") + for duty in range(0, 101, step): + self.motor.value = duty / 100.0 + sleep(delay_s) + logger.debug("Ramping down") + for duty in range(100, -1, -step): + self.motor.value = duty / 100.0 + sleep(delay_s) + sleep(pause_s) + except KeyboardInterrupt: + logger.info("modulate_vibration stopped by user") + finally: + self.cleanup() + + def vibration_magnitude(self, intensity: float = 1.0, timing_interval_s: float = 1.0): + """Vibrate continuously at *intensity* until KeyboardInterrupt.""" + if self.motor is None: + return + try: + while True: + self.vibrate_once(intensity, timing_interval_s) + except KeyboardInterrupt: + logger.info("vibration_magnitude stopped by user") + finally: + self.cleanup() + + def cleanup(self): + """Turn off the motor and release GPIO resources.""" + if self.motor is None: + return + self.motor.off() + self.motor.close() + logger.info("HapticCoin GPIO released") diff --git a/Demo/Sensors/images/rpi5_pinout.jpg b/Demo/Sensors/images/rpi5_pinout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c2b2840036177cac134c6ae9b06faa4d754afd9 GIT binary patch literal 131630 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 literal 0 HcmV?d00001 diff --git a/Demo/Sensors/tactile_sensing.py b/Demo/Sensors/tactile_sensing.py new file mode 100644 index 0000000..2e8f95e --- /dev/null +++ b/Demo/Sensors/tactile_sensing.py @@ -0,0 +1,598 @@ +""" +tactile_sensing.py — Unified FSR tactile sensing interface + real-time logger. + +Includes: + - TactileSensor hardware driver (ADS1256 via ads1256.py) + - DataLogger auto-timestamped CSV output + - Real-time display: PyQtGraph GUI (default) or terminal-only (--terminal) + +Hardware config lives in config.toml; low-level driver lives in ads1256.py. +""" + +import argparse +import csv +import sys +import threading +import time +from collections import deque +from collections.abc import Callable +from dataclasses import dataclass +from datetime import datetime +from pathlib import Path + +from loguru import logger + +import Demo.Sensors.ads1256 as _ads1256_mod +from Demo.Sensors.ads1256 import ADS1256 + +# --------------------------------------------------------------------------- +# Load shared settings from config.toml +# --------------------------------------------------------------------------- +import tomllib + +_CONFIG_PATH = Path(__file__).parent / "config.toml" +with _CONFIG_PATH.open("rb") as _f: + _TOML = tomllib.load(_f) + +_SENSOR_CFG = _TOML["sensor"] +_LOG_CFG = _TOML["logging"] +_VIZ_CFG = _TOML["visualization"] + +# Paths resolved relative to this file's directory (Demo/Sensors/) +_SENSORS_DIR = Path(__file__).parent +_LOG_DIR = _SENSORS_DIR / _LOG_CFG["log_dir"] + + +# --------------------------------------------------------------------------- +# loguru — file + stderr (set up once at import time) +# --------------------------------------------------------------------------- +_LOG_DIR.mkdir(parents=True, exist_ok=True) +_log_file = _LOG_DIR / f"tactile_{datetime.now():%Y%m%d_%H%M%S}.log" +logger.remove() +logger.add( + sys.stderr, level="INFO", colorize=True, + format="{time:HH:mm:ss} | {level: <8} | {message}", +) +logger.add(_log_file, level="DEBUG", rotation="10 MB", + format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {message}") +logger.info("Log file: {}", _log_file) + + +# --------------------------------------------------------------------------- +# TactileReading +# --------------------------------------------------------------------------- + +@dataclass +class TactileReading: + sensor_time: float # seconds since sensor.start() + raw: dict[str, int] # signed raw ADC counts {name: int} + volts: dict[str, float] # voltage (V) {name: float} + force_norm: dict[str, float] # 0–1 normalised force {name: float} + + def as_rows(self) -> list[dict]: + """One dict per channel — long format for CSV / Bokeh.""" + return [ + { + "sensor_time": round(self.sensor_time, 6), + "channel": name, + "raw": self.raw[name], + "volts": round(self.volts[name], 6), + "force_norm": round(self.force_norm[name], 4), + } + for name in self.raw + ] + + +# --------------------------------------------------------------------------- +# TactileSensor +# --------------------------------------------------------------------------- + +class TactileSensor: + """ + Thread-safe tactile sensor interface for ADS1256. + + Parameters + ---------- + channels : list[int] + ADC input channels (0–7). + channel_names : list[str] | None + Human-readable labels aligned with *channels*. + gain_key : str | None + Key into the driver's GAIN dict. None → config.toml default. + drate_key : str | None + Key into the driver's DRATE dict. None → config.toml default. + ref_voltage : float | None + Override ADC reference voltage (V). None → chip default. + fsr_vcc : float + Supply voltage across the FSR divider (V). + fsr_r_fixed : float + Fixed resistor (Ω) in the FSR voltage-divider. 0 = no force calc. + polling_hz : float + Background polling rate. 0 = manual reads only. + on_reading : callable | None + Callback fn(reading: TactileReading) invoked from the polling thread. + """ + + _DEFAULTS = dict( + channels=_SENSOR_CFG["channels"], + gain_key=_SENSOR_CFG["gain_key"], + drate_key=_SENSOR_CFG["drate_key"], + ref_voltage=_ads1256_mod.REF_VOLTAGE, + adc_max=_ads1256_mod.ADC_MAX, + ) + + def __init__( + self, + channels: list[int] = None, + channel_names: list[str] = None, + gain_key: str = None, + drate_key: str = None, + ref_voltage: float = None, + fsr_vcc: float = _SENSOR_CFG["fsr_vcc"], + fsr_r_fixed: float = _SENSOR_CFG["fsr_r_fixed"], + polling_hz: float = _SENSOR_CFG["polling_hz"], + on_reading: Callable[[TactileReading], None] | None = None, + ): + defaults = self._DEFAULTS + self._channels = list(channels) if channels is not None else list(defaults["channels"]) + self._names = list(channel_names) if channel_names else [f"ch{c}" for c in self._channels] + if len(self._names) != len(self._channels): + raise ValueError("channel_names length must match channels length") + + self._gain_key = gain_key or defaults["gain_key"] + self._drate_key = drate_key or defaults["drate_key"] + self._ref_v = ref_voltage if ref_voltage is not None else defaults["ref_voltage"] + self._adc_max = defaults["adc_max"] + self._vcc = fsr_vcc + self._r_fixed = fsr_r_fixed + self._polling_hz = polling_hz + self._on_reading = on_reading + + self._adc: ADS1256 | None = None + self._lock = threading.Lock() + self._latest: TactileReading | None = None + self._t0: float = 0.0 + self._thread: threading.Thread | None = None + self._running = False + + logger.info( + "TactileSensor | channels={} names={} hz={}", + self._channels, self._names, polling_hz, + ) + + # ------------------------------------------------------------------ + # Public API + # ------------------------------------------------------------------ + + def start(self) -> None: + """Initialise hardware and start the background polling thread.""" + adc = ADS1256() + adc.init(self._gain_key, self._drate_key) + self._adc = adc + self._t0 = time.perf_counter() + + if self._polling_hz > 0: + self._running = True + self._thread = threading.Thread( + target=self._poll_loop, daemon=True, name="TactileSensor-poll" + ) + self._thread.start() + logger.info("ADS1256 ready, polling at {}Hz", self._polling_hz) + + def stop(self) -> None: + """Stop background thread and release hardware resources.""" + self._running = False + if self._thread and self._thread.is_alive(): + self._thread.join(timeout=2.0) + if self._adc is not None: + self._adc.exit() + logger.info("TactileSensor stopped") + + def read(self) -> TactileReading: + """ + Return a reading. If the poller is running, returns the latest cached + sample (zero latency). Otherwise acquires the ADC synchronously. + """ + if self._running and self._latest is not None: + with self._lock: + return self._latest + return self._acquire() + + @property + def latest(self) -> TactileReading | None: + with self._lock: + return self._latest + + @property + def channel_names(self) -> list[str]: + return list(self._names) + + def __enter__(self) -> "TactileSensor": + self.start() + return self + + def __exit__(self, *_) -> None: + self.stop() + + # ------------------------------------------------------------------ + # Internal + # ------------------------------------------------------------------ + + def _acquire(self) -> TactileReading: + if self._adc is None: + raise RuntimeError("Call start() before reading") + raw: dict[str, int] = {} + volts: dict[str, float] = {} + force: dict[str, float] = {} + for ch, name in zip(self._channels, self._names): + counts = self._adc.get_channel_value(ch) + v = counts / self._adc_max * self._ref_v + raw[name] = counts + volts[name] = round(v, 6) + force[name] = self._to_force_norm(v) + return TactileReading( + sensor_time=time.perf_counter() - self._t0, + raw=raw, + volts=volts, + force_norm=force, + ) + + def _to_force_norm(self, v: float) -> float: + """FSR resistor-divider: Vout = Vcc * R_fixed / (R_fsr + R_fixed).""" + if self._r_fixed <= 0 or v <= 0: + return 0.0 + try: + r_fsr = self._r_fixed * (self._vcc / v - 1.0) + if r_fsr <= 0: + return 1.0 + return float(min(1.0, (1.0 / r_fsr) / (1.0 / self._r_fixed))) + except ZeroDivisionError: + return 1.0 + + def _poll_loop(self) -> None: + interval = 1.0 / self._polling_hz + while self._running: + t0 = time.perf_counter() + try: + reading = self._acquire() + with self._lock: + self._latest = reading + if self._on_reading is not None: + self._on_reading(reading) + except Exception as exc: + logger.error("Poll error: {}", exc) + remaining = interval - (time.perf_counter() - t0) + if remaining > 0: + time.sleep(remaining) + + +# --------------------------------------------------------------------------- +# DataLogger +# --------------------------------------------------------------------------- + +class DataLogger: + """Writes one row per channel per sample (long format) for post-viz compatibility.""" + + FIELDNAMES = ["sensor_time", "channel", "raw", "volts", "force_norm"] + + def __init__(self, output_dir: Path): + output_dir.mkdir(parents=True, exist_ok=True) + fname = output_dir / f"tactile_{datetime.now():%Y%m%d_%H%M%S}.csv" + self._file = fname.open("w", newline="", buffering=1) # line-buffered + self._writer = csv.DictWriter(self._file, fieldnames=self.FIELDNAMES) + self._writer.writeheader() + self._row_count = 0 + logger.info("CSV logger opened: {}", fname) + + def write(self, reading: TactileReading) -> None: + for row in reading.as_rows(): + self._writer.writerow(row) + self._row_count += len(reading.raw) + + def close(self) -> None: + self._file.flush() + self._file.close() + logger.info("CSV logger closed — {} rows written", self._row_count) + + +# --------------------------------------------------------------------------- +# Terminal display +# --------------------------------------------------------------------------- + +class TerminalDisplay: + """ + Prints live readings to stdout in-place using carriage returns. + No GUI required — runs in the calling thread via a blocking loop. + """ + + def __init__(self, sensor: TactileSensor, csv_logger: DataLogger | None): + self._sensor = sensor + self._csv = csv_logger + self._sample_count = 0 + self._fps_t0 = time.perf_counter() + + def run(self) -> None: + """Block until KeyboardInterrupt, printing one line per reading.""" + names = self._sensor.channel_names + header = " ".join(f"{n:>8}" for n in names) + print(f"\n{'t (s)':>7} {header}") + print("-" * (9 + 11 * len(names))) + + try: + while True: + reading = self._sensor.read() + if reading is None: + time.sleep(0.01) + continue + + cols = " ".join( + f"{reading.volts[n]:5.3f}V/{reading.force_norm[n]:.2f}" + for n in names + ) + print(f"\r{reading.sensor_time:7.2f} {cols}", end="", flush=True) + + if self._csv is not None: + self._csv.write(reading) + + self._sample_count += 1 + elapsed = time.perf_counter() - self._fps_t0 + if elapsed >= 1.0: + rate = self._sample_count / elapsed + print(f" [{rate:.0f} Sa/s]", end="", flush=True) + self._sample_count = 0 + self._fps_t0 = time.perf_counter() + + time.sleep(0.02) # ~50 Hz terminal refresh + + except KeyboardInterrupt: + print() # newline after the last \r line + logger.info("Terminal display stopped by user") + + +# --------------------------------------------------------------------------- +# PyQtGraph GUI +# --------------------------------------------------------------------------- + +def _run_gui(sensor: TactileSensor, csv_logger: DataLogger | None, + polling_hz: float) -> None: + """Import PySide6 / pyqtgraph lazily so terminal mode works without them.""" + try: + from PySide6.QtCore import Qt, QTimer, Signal, QObject + from PySide6.QtGui import QColor, QFont + from PySide6.QtWidgets import ( + QApplication, QGridLayout, QHBoxLayout, + QLabel, QMainWindow, QPushButton, QVBoxLayout, QWidget, + ) + import pyqtgraph as pg + except ImportError as exc: + logger.error("GUI dependencies not available ({}). Use --terminal.", exc) + sys.exit(1) + + PLOT_WINDOW_SECS: float = _VIZ_CFG["plot_window_secs"] + VOLTAGE_YMAX: float = _VIZ_CFG["voltage_ymax"] + COLORS = [ + "#4FC3F7", "#81C784", "#FFB74D", "#F48FB1", + "#CE93D8", "#80DEEA", "#FFCC02", "#FF7043", + "#A5D6A7", "#90CAF9", + ] + + # --- Signal bridge (sensor callback → GUI thread) --- + class _SensorBridge(QObject): + new_reading = Signal(object) + + # --- Per-channel plot widget --- + class ChannelPlot(QWidget): + def __init__(self, name: str, color: str, max_points: int, parent=None): + super().__init__(parent) + self._times: deque[float] = deque(maxlen=max_points) + self._voltages: deque[float] = deque(maxlen=max_points) + + layout = QVBoxLayout(self) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(2) + + header = QHBoxLayout() + title = QLabel(name) + title.setFont(QFont("Monospace", 9, QFont.Bold)) + title.setStyleSheet(f"color: {color};") + self._volt_label = QLabel("-.-- V") + self._volt_label.setFont(QFont("Monospace", 9)) + self._force_label = QLabel("force: -.-") + self._force_label.setFont(QFont("Monospace", 9)) + header.addWidget(title) + header.addStretch() + header.addWidget(self._volt_label) + header.addWidget(self._force_label) + layout.addLayout(header) + + self._plot_widget = pg.PlotWidget(background="#1e1e1e") + self._plot_widget.setYRange(0, VOLTAGE_YMAX) + self._plot_widget.setMaximumHeight(120) + self._plot_widget.hideAxis("bottom") + self._plot_widget.getAxis("left").setStyle(tickFont=QFont("Monospace", 7)) + self._plot_widget.showGrid(x=False, y=True, alpha=0.2) + self._curve = self._plot_widget.plot(pen=pg.mkPen(color=color, width=1.5)) + layout.addWidget(self._plot_widget) + + self._plot_window = PLOT_WINDOW_SECS + + def update_data(self, t_rel: float, voltage: float, force: float) -> None: + self._times.append(t_rel) + self._voltages.append(voltage) + self._curve.setData(list(self._times), list(self._voltages)) + self._plot_widget.setXRange(t_rel - self._plot_window, t_rel, padding=0) + self._volt_label.setText(f"{voltage:5.3f} V") + self._force_label.setText(f"force: {force:.2f}") + + # --- Main window --- + class TactileGUI(QMainWindow): + def __init__(self): + super().__init__() + names = sensor.channel_names + max_pts = int(PLOT_WINDOW_SECS * polling_hz * 1.2) + self._t0 = time.perf_counter() + + self.setWindowTitle("AmazingHand — Tactile Sensor Monitor") + self.setStyleSheet("background-color: #121212; color: #e0e0e0;") + + central = QWidget() + self.setCentralWidget(central) + root = QVBoxLayout(central) + root.setSpacing(6) + root.setContentsMargins(8, 8, 8, 8) + + # Status bar + status_row = QHBoxLayout() + self._status_label = QLabel("Waiting for data…") + self._status_label.setFont(QFont("Monospace", 8)) + self._rate_label = QLabel("") + self._rate_label.setFont(QFont("Monospace", 8)) + self._csv_label = QLabel(f"CSV: {'ON' if csv_logger else 'OFF'}") + self._csv_label.setFont(QFont("Monospace", 8)) + self._csv_label.setStyleSheet( + "color: #81C784;" if csv_logger else "color: #888;" + ) + stop_btn = QPushButton("Stop") + stop_btn.clicked.connect(self.close) + stop_btn.setFixedWidth(60) + status_row.addWidget(self._status_label) + status_row.addStretch() + status_row.addWidget(self._csv_label) + status_row.addWidget(self._rate_label) + status_row.addWidget(stop_btn) + root.addLayout(status_row) + + # Channel plots (2-column grid) + grid = QGridLayout() + grid.setSpacing(6) + self._channel_plots: dict[str, ChannelPlot] = {} + for i, name in enumerate(names): + color = COLORS[i % len(COLORS)] + cp = ChannelPlot(name, color, max_pts) + self._channel_plots[name] = cp + row, col = divmod(i, 2) + grid.addWidget(cp, row, col) + root.addLayout(grid) + + self.resize(900, max(400, len(names) // 2 * 160 + 60)) + + # Wire sensor callback through a Qt signal (thread-safe) + self._bridge = _SensorBridge() + self._bridge.new_reading.connect(self._on_reading) + sensor._on_reading = self._bridge.new_reading.emit # type: ignore[assignment] + + self._sample_count = 0 + fps_timer = QTimer(self) + fps_timer.timeout.connect(self._update_fps) + fps_timer.start(1000) + + logger.info("GUI window created for channels: {}", names) + + def _on_reading(self, reading: TactileReading) -> None: + t_rel = time.perf_counter() - self._t0 + for name, cp in self._channel_plots.items(): + cp.update_data( + t_rel, + reading.volts.get(name, 0.0), + reading.force_norm.get(name, 0.0), + ) + if csv_logger is not None: + csv_logger.write(reading) + self._sample_count += 1 + self._status_label.setText( + f"t={t_rel:.1f}s sensor_t={reading.sensor_time:.3f}s" + ) + + def _update_fps(self) -> None: + self._rate_label.setText(f"{self._sample_count} Sa/s") + self._sample_count = 0 + + def closeEvent(self, event) -> None: + logger.info("Window closing — stopping sensor") + sensor.stop() + if csv_logger is not None: + csv_logger.close() + super().closeEvent(event) + + app = QApplication.instance() or QApplication(sys.argv) + app.setStyle("Fusion") + window = TactileGUI() + window.show() + exit_code = app.exec() + logger.info("Application exited with code {}", exit_code) + sys.exit(exit_code) + + +# --------------------------------------------------------------------------- +# CLI entry point +# --------------------------------------------------------------------------- + +def _parse_args() -> argparse.Namespace: + p = argparse.ArgumentParser( + description="Tactile sensor real-time logger — GUI (default) or terminal", + ) + p.add_argument( + "--channels", nargs="+", type=int, + default=_SENSOR_CFG["channels"], + help="ADS1256 channels to read (default from config.toml)", + ) + p.add_argument( + "--names", nargs="+", type=str, default=None, + help="Channel labels — must match --channels count", + ) + p.add_argument( + "--hz", type=float, default=_SENSOR_CFG["polling_hz"], + help="Sensor polling rate in Hz (default from config.toml)", + ) + p.add_argument( + "--csv-dir", type=Path, default=_LOG_DIR, + help="Directory for CSV output (default from config.toml)", + ) + p.add_argument( + "--no-csv", action="store_true", + help="Disable CSV logging", + ) + p.add_argument( + "--terminal", action="store_true", + help="Print readings to terminal only — no GUI window", + ) + return p.parse_args() + + +def main() -> None: + args = _parse_args() + + channel_names = args.names or _SENSOR_CFG["channel_names"] + if len(channel_names) != len(args.channels): + logger.error( + "--names count ({}) must match --channels count ({})", + len(channel_names), len(args.channels), + ) + sys.exit(1) + + sensor = TactileSensor( + channels=args.channels, + channel_names=channel_names, + polling_hz=args.hz, + ) + + csv_logger: DataLogger | None = None + if not args.no_csv: + csv_logger = DataLogger(args.csv_dir) + + sensor.start() + + if args.terminal: + display = TerminalDisplay(sensor, csv_logger) + try: + display.run() + finally: + sensor.stop() + if csv_logger is not None: + csv_logger.close() + else: + _run_gui(sensor, csv_logger, args.hz) + + +if __name__ == "__main__": + main() diff --git a/Demo/Sensors/tactile_sensing_post_visualize.py b/Demo/Sensors/tactile_sensing_post_visualize.py new file mode 100644 index 0000000..26fd177 --- /dev/null +++ b/Demo/Sensors/tactile_sensing_post_visualize.py @@ -0,0 +1,116 @@ +""" +tactile_sensing_post_visualize.py — Bokeh offline visualisation of logged tactile sensor data. + +Expected CSV schema (long format, one row per channel per sample): + sensor_time, channel, raw, volts, force_norm + +The default log directory is read from config.toml ([logging] log_dir), +resolved relative to this file's directory (Demo/Sensors/). +""" + +import argparse +from pathlib import Path + +import pandas as pd +from bokeh.layouts import gridplot +from bokeh.models import TabPanel, Tabs +from bokeh.palettes import Set2_8 +from bokeh.plotting import figure, show + +# --------------------------------------------------------------------------- +# Load config.toml — same file used by tactile_sensing.py +# --------------------------------------------------------------------------- +import tomllib + +_CONFIG_PATH = Path(__file__).parent / "config.toml" +with _CONFIG_PATH.open("rb") as _f: + _TOML = tomllib.load(_f) + +_SENSORS_DIR = Path(__file__).parent +_LOG_DIR = _SENSORS_DIR / _TOML["logging"]["log_dir"] + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def _find_latest_csv(log_dir: Path) -> Path: + csvs = sorted(log_dir.glob("tactile_*.csv")) + if not csvs: + raise FileNotFoundError(f"No tactile_*.csv files found in {log_dir}") + return csvs[-1] + + +def _customize_plot(fig) -> None: + fig.title.text_font_size = "16px" + fig.title.align = "center" + fig.xaxis.axis_label_text_font_size = "13px" + fig.yaxis.axis_label_text_font_size = "13px" + fig.legend.title = "Channels" + fig.legend.border_line_width = 2 + fig.legend.border_line_color = "black" + fig.legend.location = "top_right" + fig.legend.click_policy = "hide" + + +def build_tabs(data: pd.DataFrame) -> Tabs: + channels = sorted(data["channel"].unique(), key=lambda x: (x.isdigit(), x)) + color_map = {ch: Set2_8[i % len(Set2_8)] for i, ch in enumerate(channels)} + + def _make_fig(title, y_label): + return figure( + title=title, + x_axis_label="Sensor Time (s)", + y_axis_label=y_label, + width=900, height=400, + ) + + fig_volts = _make_fig("FSR Sensor Data — Voltage", "Voltage (V)") + fig_raw = _make_fig("FSR Sensor Data — Raw ADC Counts", "Raw") + fig_force = _make_fig("FSR Sensor Data — Normalised Force", "Force (0–1)") + + for ch in channels: + dfc = data[data["channel"] == ch] + color = color_map[ch] + label = str(ch) + fig_volts.line(dfc["sensor_time"], dfc["volts"], + line_width=2, color=color, legend_label=label) + fig_raw.line(dfc["sensor_time"], dfc["raw"], + line_width=2, color=color, legend_label=label) + fig_force.line(dfc["sensor_time"], dfc["force_norm"], + line_width=2, color=color, legend_label=label) + + for fig in (fig_volts, fig_raw, fig_force): + _customize_plot(fig) + + grid = gridplot([[fig_volts], [fig_raw], [fig_force]]) + return Tabs(tabs=[TabPanel(child=grid, title="FSR (all channels)")]) + + +# --------------------------------------------------------------------------- +# Entry point +# --------------------------------------------------------------------------- + +def main() -> None: + parser = argparse.ArgumentParser( + description="Visualise FSR tactile sensor CSV log", + ) + parser.add_argument( + "--file", type=Path, default=None, + help=f"Path to CSV file (default: latest in {_LOG_DIR})", + ) + args = parser.parse_args() + + file_path = args.file or _find_latest_csv(_LOG_DIR) + print(f"Loading: {file_path}") + + data = pd.read_csv(file_path).dropna().reset_index(drop=True) + data["sensor_time"] = data["sensor_time"] - data["sensor_time"].iloc[0] + data["channel"] = data["channel"].astype(str) + + tabs = build_tabs(data) + show(tabs) + + +if __name__ == "__main__": + main() diff --git a/pixi.toml b/pixi.toml index 70d8832..9502636 100644 --- a/pixi.toml +++ b/pixi.toml @@ -39,6 +39,16 @@ mujoco = ">=3.3.2" onshape-to-robot = ">=1.7.5" qpsolvers = { version = ">=4.7.1", extras = ["quadprog"] } pyserial = ">=3.5" +# Demo/Sensors — tactile sensing, haptic feedback, visualisation +lgpio = "*" +spidev = "*" +loguru = "*" +PySide6 = "*" +pyqtgraph = "*" +bokeh = "*" +pandas = "*" +gitpython = "*" +gpiozero = "*" [tasks] From 85a48f227f6b3f3e4b045a2f726c3c084a8afb6f Mon Sep 17 00:00:00 2001 From: Julia Jia Date: Wed, 18 Mar 2026 07:55:48 -0700 Subject: [PATCH 2/6] Resolve the pyside6 dependency --- docs/DEVELOPMENT.md | 21 +- pixi.lock | 4042 ++++++++++++++++++++++++++++++++++++++++++- pixi.toml | 3 +- 3 files changed, 4003 insertions(+), 63 deletions(-) diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 285e95a..45237f9 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -42,7 +42,26 @@ pixi run test-ahcontrol Windows only (Rust / test-ahcontrol): `pixi.toml` adds `vs2022_win-64` for win-64, which activates the MSVC toolchain (via vcvars64) when you run `pixi shell` or `pixi run`. You must have Visual Studio or Build Tools installed first (see Appendix). If you get a linker error (e.g. "extra operand", "link.exe not found"), install Build Tools per the Appendix, then run `pixi install` to refresh the environment. As a fallback, run `pixi run test-ahcontrol` from "x64 Native Tools Command Prompt for VS" (Start menu). ## Setup (Raspberry Pi) -Planned and upcoming. +Raspberry Pi support is experimental and focuses on the haptic/tactile demos. + +On Raspberry Pi OS (Debian-based), install system GPIO dependencies first: + +```bash +sudo apt-get update +sudo apt-get install liblgpio-dev +``` + +Then create the pixi environment from the repository root: + +```bash +pixi install +``` + +You can now run the haptic/tactile sensor test (from the repo root): + +```bash +pixi run python -m Demo.Sensors.haptic_test +``` ## Run Demos diff --git a/pixi.lock b/pixi.lock index cc64744..46832cc 100644 --- a/pixi.lock +++ b/pixi.lock @@ -10,50 +10,132 @@ environments: 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/alsa-lib-1.2.15.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he420e7e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.1.1-h6083320_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.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_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.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/libclang-cpp22.1-22.1.0-default_h99862b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.0-default_h746c552_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.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/libegl-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-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/libfreetype-2.14.2-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_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/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_118.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/libgl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.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/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.1-hf7376ad_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.3-h9abb657_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_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/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_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/libxslt-1.1.43-h711ed8c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.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/openldap-2.6.10-hbde042b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.10.2-py312h50ac2ff_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.12-hd63d673_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.2-h17e89b9_5.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/rust-1.93.1-h53717f1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-unknown-linux-gnu-1.93.1-h2c6d0dc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/swig-4.4.1-h7a96c5f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.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/wayland-1.24.0-hd6090a7_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/0b/bdf449df87be3f07b23091ceafee8c3ef569cf6d2fb7edec6e3b12b3faa4/bokeh-3.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/a6/ddd0f130e44a7593ac6c55aa93f6e256d2270fd88e9d1b64ab7f22ab8fde/colorzero-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/76/c4aa9e408dbacee3f4de8e6c5417e5f55de7e62fb5a50300e1233a2c9cb5/commentjson-0.9.0.tar.gz - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl @@ -68,7 +150,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/37/82dbef0f6342eb01f54bca073ac1498433d6ce71e50c3c3282b655733b31/fonttools-4.61.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/02/eb/6518a1b00488d48995034226846653c382d676cf5f04be62b3c3fae2c6a1/gpiozero-2.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl @@ -80,11 +165,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/53/6b/b381bda5850f5611822d791cd25dfe36efda2688a68c4dda0f8a92c36dec/jaxlib-0.9.1-cp312-cp312-manylinux_2_27_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/90/6d240beb0f24b74371762873e9b7f499f1e02166a2d9c5801f4dbf8fa12e/kiwisolver-1.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/34/b8/aa7d6cf2d5efdd2fcd85cf39b33584fe12a0f7086ed451176ceb7fb510eb/lark-parser-0.7.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/56/33/26ec2e8049eaa2f077bf23a12dc61ca559fbfa7bea0516bf263d657ae275/lgpio-0.2.2.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/6d/d56be57340baf2e6f6361386f4c21b8b5e001251c64af954787f8d01ec78/loop_rate_limiters-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3e/f3/c5195b1ae57ef85339fd7285dfb603b22c8b4e79114bae5f4f0fcf688677/matplotlib-3.10.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/73/07c6dcbb322f86e2b8526e0073456dbdd2813d5351f772f882123c985fda/mediapipe-0.10.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -92,6 +181,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/cb/28ce52eb94390dda42599c98ea0204d74799e4d8047a0eb559b6fd648056/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/8a/229e4db3692be55532e155e2ca6a1363752243ee79df0e7e22ba00f716cf/mujoco-3.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -100,6 +190,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ba/f6/3c645c21358079097201090de7c30d110f5ec3fa01008e3ee81b0a77a354/opencv_contrib_python-4.13.0.92-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fd/55/b3b49a1b97aabcfbbd6c7326df9cb0b6fa0c0aefa8e89d500939e04aa229/opencv_python-4.13.0.92-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3d/fe/89d77e424365280b79d99b3e1e7d606f5165af2f2ecfaf0c6d24c799d607/pandas-3.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ff/79/6df7b2ee763d619cda2fb4fea498e5f79d984dae304d45a8999b80d6cf5c/pillow-12.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl @@ -111,6 +202,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/36/4c242f81fdcbfa4fb62a5645f6af79191f4097a0577bd5460c24f19cc4ef/pyqtgraph-0.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl @@ -129,60 +221,146 @@ environments: - pypi: https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/0a/478e441fd049002cf308520c0d62dd8333e7c6cc8d997f0dda07b9fbcc46/sounddevice-0.5.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/87/039b6eeea781598015b538691bc174cc0bf77df9d4d2d3b8bf9245c0de8c/spidev-3.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/61/7a/f38385f1b2d5f54221baf1db3d6371dc6eef8041d95abff39576c694e9d9/transforms3d-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/a9/2735cc9dc39457c9cf64d1ce2ba5a9a8ecbb103d0fb64b052bf33ba3d669/uv-0.10.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/5c/2c189d18d495dd0fa3f27ccc60762bbc787eed95b9b0147266e72bb76585/xyzservices-2025.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.3-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cyrus-sasl-2.1.28-h6598af7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/double-conversion-3.4.0-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-hcedddb3_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-13.1.1-h1134a53_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp22.1-22.1.0-default_he95a3c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.0-default_h94a09a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h4f2b762_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.125-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.2-h8af1aa0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.2-hdae7a39_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_118.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.1-hfd2ba90_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h86ecc28_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libntlm-1.4-hf897c2e_1002.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopengl-1.7.0-hd24410f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.18-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.3-h7d4fc67_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.1-h3c6a4c8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.2-h79dcc73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.2-h825857f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxslt-1.1.43-h6700d25_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openldap-2.6.10-h2fb54aa_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.10.2-py312hfc1e6cc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.12-h91f4b29_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.10.2-h4f79d1e_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rust-1.93.1-h6cf38e9_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-unknown-linux-gnu-1.93.1-hbe8e118_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/swig-4.4.1-h512d76c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-aarch64-2.28-h585391f_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h4f8a99f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-cursor-0.1.6-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-image-0.4.0-h5c728e9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-keysyms-0.4.1-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-renderutil-0.3.10-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-wm-0.4.2-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.47-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcomposite-0.4.7-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcursor-1.2.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdamage-1.1.6-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.2-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.2-h57736b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.5-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxxf86vm-1.1.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/0b/bdf449df87be3f07b23091ceafee8c3ef569cf6d2fb7edec6e3b12b3faa4/bokeh-3.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/a6/ddd0f130e44a7593ac6c55aa93f6e256d2270fd88e9d1b64ab7f22ab8fde/colorzero-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/76/c4aa9e408dbacee3f4de8e6c5417e5f55de7e62fb5a50300e1233a2c9cb5/commentjson-0.9.0.tar.gz - pypi: https://files.pythonhosted.org/packages/d4/1c/a12359b9b2ca3a845e8f7f9ac08bdf776114eb931392fcad91743e2ea17b/contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/37/53/a18500f270342d66bf7e4d9f091114e31e5ee9e7375a5aba2e85a91e0044/cryptography-46.0.5-cp311-abi3-manylinux_2_28_aarch64.whl @@ -197,7 +375,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6c/44/f3aeac0fa98e7ad527f479e161aca6c3a1e47bb6996b053d45226fe37bf2/fonttools-4.61.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/b4/f7b6cc022dd7c68b6c702d19da5d591f978f89c958b9bd3090615db0c739/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/02/eb/6518a1b00488d48995034226846653c382d676cf5f04be62b3c3fae2c6a1/gpiozero-2.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl @@ -209,11 +390,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f8/b9/e0419783cbff9fa3bbc053dbe130f9051f60de4f424f650d70aae7f3bdf1/jaxlib-0.9.1-cp312-cp312-manylinux_2_27_aarch64.whl - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/42/f36816eaf465220f683fb711efdd1bbf7a7005a2473d0e4ed421389bd26c/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/34/b8/aa7d6cf2d5efdd2fcd85cf39b33584fe12a0f7086ed451176ceb7fb510eb/lark-parser-0.7.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/56/33/26ec2e8049eaa2f077bf23a12dc61ca559fbfa7bea0516bf263d657ae275/lgpio-0.2.2.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/6d/d56be57340baf2e6f6361386f4c21b8b5e001251c64af954787f8d01ec78/loop_rate_limiters-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/00/f9/7638f5cc82ec8a7aa005de48622eecc3ed7c9854b96ba15bd76b7fd27574/matplotlib-3.10.8-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/da/dfed8db260b3fbe4e24ac17dda32c55787643a656d8d4e78c55bc847efa8/mediapipe-0.10.14-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl @@ -221,6 +406,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/54/0f/428ef6881782e5ebb7eca459689448c0394fa0a80bea3aa9262cba5445ea/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/7b/c1612ec68d98e5f3dbc5b8a21ff5d40ab52409fcc89ea7afc8a197983297/mujoco-3.5.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/43/d2011a4f6c0272cb122eeff40062ee06bb2b6e57eabc3a5e057df0d582df/nh3-0.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/91/b97fdfd12dc75b02c44e26c6638241cc004d4079a0321a69c62f51470c4c/numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl @@ -229,6 +415,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f3/11/10c46e9527c4591d5264117debd8fe0e21bb23dbf378ce760add6b1e85b6/opencv_contrib_python-4.13.0.92-cp37-abi3-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/02/6d/7a9cc719b3eaf4377b9c2e3edeb7ed3a81de41f96421510c0a169ca3cfd4/opencv_python-4.13.0.92-cp37-abi3-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/39/327802e0b6d693182403c144edacbc27eb82907b57062f23ef5a4c4a5ea7/pandas-3.0.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/b2/8b/07587069c27be7535ac1fe33874e32de118fbd34e2a73b7f83436a88368c/pillow-12.1.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl @@ -240,6 +427,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/36/4c242f81fdcbfa4fb62a5645f6af79191f4097a0577bd5460c24f19cc4ef/pyqtgraph-0.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl @@ -258,43 +446,95 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/0a/478e441fd049002cf308520c0d62dd8333e7c6cc8d997f0dda07b9fbcc46/sounddevice-0.5.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/87/039b6eeea781598015b538691bc174cc0bf77df9d4d2d3b8bf9245c0de8c/spidev-3.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/34/01/74e034a30ef59afb4097ef8659515e96a39d910b712a89af76f5e4e1f93c/tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/61/7a/f38385f1b2d5f54221baf1db3d6371dc6eef8041d95abff39576c694e9d9/transforms3d-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/5f/5f204e9c3f04f5fc844d2f98d80a7de64b6b304af869644ab478d909f6ff/uv-0.10.7-py3-none-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/5c/2c189d18d495dd0fa3f27ccc60762bbc787eed95b9b0147266e72bb76585/xyzservices-2025.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.18.4-he0f2337_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cyrus-sasl-2.1.28-hb961e35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/double-conversion-3.4.0-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.17.1-h2b252f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.14-hec049ff_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-13.1.1-h3103d1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp19.1-19.1.7-default_hf3020a7_8.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang13-22.1.0-default_h13b06bd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.1-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.2-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.2-hdfa99f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.86.4-he378b5c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.2-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm19-19.1.7-h8e0c9ce_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm22-22.1.1-h89af1be_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libntlm-1.8-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.55-h132b30e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpq-18.3-hd341ff2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.2-h5ef1a60_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.2-h8d039ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxslt-1.1.43-hb2570ba_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openldap-2.6.10-hf7f56bc_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h81086ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyside6-6.10.2-py312h4aa7bac_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.12-h18782d2_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qt6-main-6.10.2-ha6d198a_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rust-1.93.1-h4ff7c5d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-apple-darwin-1.93.1-hf6ec828_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/swig-4.4.1-h4366dc5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/0b/bdf449df87be3f07b23091ceafee8c3ef569cf6d2fb7edec6e3b12b3faa4/bokeh-3.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/a6/ddd0f130e44a7593ac6c55aa93f6e256d2270fd88e9d1b64ab7f22ab8fde/colorzero-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/76/c4aa9e408dbacee3f4de8e6c5417e5f55de7e62fb5a50300e1233a2c9cb5/commentjson-0.9.0.tar.gz - pypi: https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl @@ -308,7 +548,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/16/7decaa24a1bd3a70c607b2e29f0adc6159f36a7e40eaba59846414765fd4/fonttools-4.61.1-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/02/eb/6518a1b00488d48995034226846653c382d676cf5f04be62b3c3fae2c6a1/gpiozero-2.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl @@ -319,11 +562,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/06/59b1da0a3b2450a4abbf66cbb3bbfe0b14f9723b1f8997c0178db3549e54/jaxlib-0.9.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/5a/51f5464373ce2aeb5194508298a508b6f21d3867f499556263c64c621914/kiwisolver-1.4.9-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/34/b8/aa7d6cf2d5efdd2fcd85cf39b33584fe12a0f7086ed451176ceb7fb510eb/lark-parser-0.7.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/56/33/26ec2e8049eaa2f077bf23a12dc61ca559fbfa7bea0516bf263d657ae275/lgpio-0.2.2.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/6d/d56be57340baf2e6f6361386f4c21b8b5e001251c64af954787f8d01ec78/loop_rate_limiters-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7e/65/07d5f5c7f7c994f12c768708bd2e17a4f01a2b0f44a1c9eccad872433e2e/matplotlib-3.10.8-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2d/df/be410905b9757de4b00891dd34236d96e6db150b624f28cc27cd90c74564/mediapipe-0.10.14-cp312-cp312-macosx_11_0_universal2.whl @@ -331,6 +578,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a8/b8/3c70881695e056f8a32f8b941126cf78775d9a4d7feba8abcb52cb7b04f2/ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/d4/d0032323f58a9b8080b8464c6aade8d5ac2e101dbed1de64a38b3913b446/mujoco-3.5.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1f/f8/55483431f2b2fd015ae6ed4fe62288823ce908437ed49db5a03d15151678/numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl @@ -339,6 +587,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/7e/4c/a45c96b9fe90b2c48ee604f5176eb7deb46ce7c2e87c8d819d2945dbcab6/opencv_contrib_python-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/fc/6f/5a28fef4c4a382be06afe3938c64cc168223016fa520c5abaf37e8862aa5/opencv_python-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7c/f1/e2567ffc8951ab371db2e40b2fe068e36b81d8cf3260f06ae508700e5504/pandas-3.0.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/d6/71/5026395b290ff404b836e636f51d7297e6c83beceaa87c592718747e670f/pillow-12.1.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl @@ -350,6 +599,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/36/4c242f81fdcbfa4fb62a5645f6af79191f4097a0577bd5460c24f19cc4ef/pyqtgraph-0.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl @@ -367,29 +617,71 @@ environments: - pypi: https://files.pythonhosted.org/packages/99/d8/e91cfb6fde9b37fb9884e0ed0b6becc9b2d98293e8c3255579999a8cc734/rustypot-1.4.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/f9/c037c35f6d0b6bc3bc7bfb314f1d6f1f9a341328ef47cd63fc4f850a7b27/sounddevice-0.5.5-py3-none-macosx_10_6_x86_64.macosx_10_6_universal2.whl + - pypi: https://files.pythonhosted.org/packages/67/87/039b6eeea781598015b538691bc174cc0bf77df9d4d2d3b8bf9245c0de8c/spidev-3.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/61/7a/f38385f1b2d5f54221baf1db3d6371dc6eef8041d95abff39576c694e9d9/transforms3d-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5e/15/8365dc2ded350a4ee5fcbbf9b15195cb2b45855114f2a154b5effb6fa791/uv-0.10.7-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/5c/2c189d18d495dd0fa3f27ccc60762bbc787eed95b9b0147266e72bb76585/xyzservices-2025.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/double-conversion-3.4.0-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.17.1-hd47e2ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.14-hac47afa_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-13.1.1-h5a1b470_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-22.1.0-default_ha2db4b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.2-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.2-hdbac1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.55-h7351971_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h3cfd58e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h779ef1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.43-h0fbe4c1_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyside6-6.10.2-py312ha7d0d2e_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.12-h0159041_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.10.2-h35725d6_5.conda - conda: https://conda.anaconda.org/conda-forge/win-64/rust-1.93.1-hf8d6059_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-pc-windows-msvc-1.93.1-h17fc481_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/swig-4.4.1-h9b0202b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda @@ -399,14 +691,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/vs2022_win-64-19.44.35207-ha74f236_34.conda - conda: https://conda.anaconda.org/conda-forge/noarch/vswhere-3.1.7-h40126e0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/0b/bdf449df87be3f07b23091ceafee8c3ef569cf6d2fb7edec6e3b12b3faa4/bokeh-3.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/a6/ddd0f130e44a7593ac6c55aa93f6e256d2270fd88e9d1b64ab7f22ab8fde/colorzero-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/76/c4aa9e408dbacee3f4de8e6c5417e5f55de7e62fb5a50300e1233a2c9cb5/commentjson-0.9.0.tar.gz - pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl @@ -420,7 +715,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/3b/a3e81b71aed5a688e89dfe0e2694b26b78c7d7f39a5ffd8a7d75f54a12a8/fonttools-4.61.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/e1/6d6816b296a529ac9b897ad228b1e084eb1f92319e96371880eebdc874a6/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/02/eb/6518a1b00488d48995034226846653c382d676cf5f04be62b3c3fae2c6a1/gpiozero-2.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl @@ -431,11 +729,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6c/e9/e4dc1f699b894651f3d3ed6622c3c113c21003c2ed832ab00ed62055062b/jaxlib-0.9.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/41/85d82b0291db7504da3c2defe35c9a8a5c9803a730f297bd823d11d5fb77/kiwisolver-1.4.9-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/34/b8/aa7d6cf2d5efdd2fcd85cf39b33584fe12a0f7086ed451176ceb7fb510eb/lark-parser-0.7.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/56/33/26ec2e8049eaa2f077bf23a12dc61ca559fbfa7bea0516bf263d657ae275/lgpio-0.2.2.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/6d/d56be57340baf2e6f6361386f4c21b8b5e001251c64af954787f8d01ec78/loop_rate_limiters-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/30/4e/c10f171b6e2f44d9e3a2b96efa38b1677439d79c99357600a62cc1e9594e/matplotlib-3.10.8-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f0/26/d228fe6e9f2060dde7f7db738968bcd603e9340f064351655b5b2652a664/mediapipe-0.10.14-cp312-cp312-win_amd64.whl @@ -443,6 +745,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f5/f0/0cfadd537c5470378b1b32bd859cf2824972174b51b873c9d95cfd7475a5/ml_dtypes-0.5.4-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/37/527d83610b878f27c01dd762e0e41aaa62f095c607f0500ac7f724a2c7a5/mujoco-3.5.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/0f/7ceaaeaacb40567071e94dbf2c9480c0ae453d5bb4f52bea3892c39dc83c/numpy-2.4.2-cp312-cp312-win_amd64.whl @@ -451,6 +754,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d9/98/a03f69ff6fb86a67d584ecc990d85a95e6930b96e3f39ad1f8e019cb8ada/opencv_contrib_python-4.13.0.92-cp37-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e9/a5/1be1516390333ff9be3a9cb648c9f33df79d5096e5884b5df71a588af463/opencv_python-4.13.0.92-cp37-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/08/67cc404b3a966b6df27b38370ddd96b3b023030b572283d035181854aac5/pandas-3.0.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3d/17/688626d192d7261bbbf98846fc98995726bddc2c945344b65bec3a29d731/pillow-12.1.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl @@ -462,6 +766,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/36/4c242f81fdcbfa4fb62a5645f6af79191f4097a0577bd5460c24f19cc4ef/pyqtgraph-0.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl @@ -480,13 +785,19 @@ environments: - pypi: https://files.pythonhosted.org/packages/11/cb/60e4be7b67dd8e0adfe73d0d30c11977ca1a2639ce0b852d880852cae4bc/rustypot-1.4.2-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/0e/002ed7c4c1c2ab69031f78989d3b789fee3a7fba9e586eb2b81688bf4961/sounddevice-0.5.5-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/67/87/039b6eeea781598015b538691bc174cc0bf77df9d4d2d3b8bf9245c0de8c/spidev-3.8.tar.gz + - pypi: https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/61/7a/f38385f1b2d5f54221baf1db3d6371dc6eef8041d95abff39576c694e9d9/transforms3d-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e3/1f/74f4d625db838f716a555908d41777b6357bacc141ddef117a01855e5ef9/uv-0.10.7-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/5c/2c189d18d495dd0fa3f27ccc60762bbc787eed95b9b0147266e72bb76585/xyzservices-2025.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda @@ -521,6 +832,27 @@ packages: version: 2.4.0 sha256: 88476fd881ca8aab94ffa78b7b6c632a782ab3ba1cd19c9bd423abc4fb4cd28d requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + sha256: d88aa7ae766cf584e180996e92fef2aa7d8e0a0a5ab1d4d49c32390c1b5fff31 + md5: dcdc58c15961dbf17a0621312b01f5cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-or-later + license_family: GPL + purls: [] + size: 584660 + timestamp: 1768327524772 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.3-he30d5cf_0.conda + sha256: ea2233e2db9908c2e5f29d3ca420a546b4583253f4f70abb5494cdd676866d42 + md5: 4a98cbc4ade694520227402ff8880630 + depends: + - libgcc >=14 + license: LGPL-2.1-or-later + license_family: GPL + purls: [] + size: 615729 + timestamp: 1768327548407 - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl name: attrs version: 25.4.0 @@ -550,6 +882,21 @@ packages: purls: [] size: 4741684 timestamp: 1770267224406 +- pypi: https://files.pythonhosted.org/packages/47/0b/bdf449df87be3f07b23091ceafee8c3ef569cf6d2fb7edec6e3b12b3faa4/bokeh-3.9.0-py3-none-any.whl + name: bokeh + version: 3.9.0 + sha256: b252bfb16a505f0e0c57d532d0df308ae1667235bafc622aa9441fe9e7c5ce4a + requires_dist: + - jinja2>=2.9 + - contourpy>=1.2 + - narwhals>=1.13 + - numpy>=1.16 + - packaging>=16.8 + - pillow>=7.1.0 + - pyyaml>=3.10 + - tornado>=6.2 ; sys_platform != 'emscripten' + - xyzservices>=2021.9.1 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl name: build version: 1.4.0 @@ -626,6 +973,100 @@ packages: purls: [] size: 147413 timestamp: 1772006283803 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + sha256: 06525fa0c4e4f56e771a3b986d0fdf0f0fc5a3270830ee47e127a5105bde1b9a + md5: bb6c4808bfa69d6f7f6b07e5846ced37 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libglib >=2.86.3,<3.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.46.4,<1.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + size: 989514 + timestamp: 1766415934926 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda + sha256: 675db823f3d6fb6bf747fab3b0170ba99b269a07cf6df1e49fff2f9972be9cd1 + md5: 043c13ed3a18396994be9b4fab6572ad + depends: + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libglib >=2.86.3,<3.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.46.4,<1.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + size: 927045 + timestamp: 1766416003626 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.18.4-he0f2337_1.conda + sha256: cde9b79ee206fe3ba6ca2dc5906593fb7a1350515f85b2a1135a4ce8ec1539e3 + md5: 36200ecfbbfbcb82063c87725434161f + depends: + - __osx >=11.0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libcxx >=19 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libglib >=2.86.3,<3.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.46.4,<1.0a0 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + size: 900035 + timestamp: 1766416416791 +- conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda + sha256: 9ee4ad706c5d3e1c6c469785d60e3c2b263eec569be0eac7be33fbaef978bccc + md5: 52ea1beba35b69852d210242dd20f97d + depends: + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libglib >=2.86.3,<3.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.46.4,<1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + size: 1537783 + timestamp: 1766416059188 - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl name: certifi version: 2026.2.25 @@ -689,6 +1130,17 @@ packages: version: 0.4.6 sha256: 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' +- pypi: https://files.pythonhosted.org/packages/7e/a6/ddd0f130e44a7593ac6c55aa93f6e256d2270fd88e9d1b64ab7f22ab8fde/colorzero-2.0-py2.py3-none-any.whl + name: colorzero + version: '2.0' + sha256: 0e60d743a6b8071498a56465f7719c96a5e92928f858bab1be2a0d606c9aa0f8 + requires_dist: + - setuptools + - pkginfo ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' - pypi: https://files.pythonhosted.org/packages/c0/76/c4aa9e408dbacee3f4de8e6c5417e5f55de7e62fb5a50300e1233a2c9cb5/commentjson-0.9.0.tar.gz name: commentjson version: 0.9.0 @@ -868,6 +1320,51 @@ packages: - pytest-cov ; extra == 'tests' - pytest-xdist ; extra == 'tests' requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + sha256: 7684da83306bb69686c0506fb09aa7074e1a55ade50c3a879e4e5df6eebb1009 + md5: af491aae930edc096b58466c51c4126c + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=13 + - libntlm >=1.8,<2.0a0 + - libstdcxx >=13 + - libxcrypt >=4.4.36 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause-Attribution + license_family: BSD + purls: [] + size: 210103 + timestamp: 1771943128249 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cyrus-sasl-2.1.28-h6598af7_1.conda + sha256: 0606296a3b0cc757229dd97db8c6dc0f77e54f975f89ae63c36fb01e2a2abe61 + md5: f4fbf4001970e3e58984281a12c99969 + depends: + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=13 + - libntlm + - libstdcxx >=13 + - libxcrypt >=4.4.36 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause-Attribution + license_family: BSD + purls: [] + size: 224450 + timestamp: 1771943147365 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cyrus-sasl-2.1.28-hb961e35_1.conda + sha256: 2bb1a8cfc2534b05718c21ffacd806c5c3d5289c9e8be12270d9fc5606c859bf + md5: 784c64a42b083798c5acd2373df5b825 + depends: + - __osx >=11.0 + - krb5 >=1.22.2,<1.23.0a0 + - libcxx >=19 + - libntlm >=1.8,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause-Attribution + license_family: BSD + purls: [] + size: 194397 + timestamp: 1771943557428 - pypi: https://files.pythonhosted.org/packages/2f/2a/b0a896f1aa8618fae09acf508f0bb0192022383dbf73bea76143345167c8/daqp-0.7.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl name: daqp version: 0.7.2 @@ -884,6 +1381,33 @@ packages: name: daqp version: 0.7.2 sha256: 49d66d0c92f309eda5acbbbb3b970f2ff90ec93e0f7450ced75fd2df83c12e3b +- conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + sha256: 8bb557af1b2b7983cf56292336a1a1853f26555d9c6cecf1e5b2b96838c9da87 + md5: ce96f2f470d39bd96ce03945af92e280 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - libglib >=2.86.2,<3.0a0 + - libexpat >=2.7.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + purls: [] + size: 447649 + timestamp: 1764536047944 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda + sha256: 3af801577431af47c0b72a82bb93c654f03072dece0a2a6f92df8a6802f52a22 + md5: a4b6b82427d15f0489cef0df2d82f926 + depends: + - libstdcxx >=14 + - libgcc >=14 + - libglib >=2.86.2,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - libexpat >=2.7.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + purls: [] + size: 480416 + timestamp: 1764536098891 - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl name: distlib version: 0.4.0 @@ -957,6 +1481,52 @@ packages: - dora-rs>=0.3.9 - uv requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda + sha256: 40cdd1b048444d3235069d75f9c8e1f286db567f6278a93b4f024e5642cfaecc + md5: dbe3ec0f120af456b3477743ffd99b74 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 71809 + timestamp: 1765193127016 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/double-conversion-3.4.0-hfae3067_0.conda + sha256: a636dfd17adc2a859cbdfce97e449e338b02a9f099c6dc0941c9f26bf448cca9 + md5: 9fd794eaf983eabf975ead524540b4be + depends: + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 71905 + timestamp: 1765194538141 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/double-conversion-3.4.0-hf6b4638_0.conda + sha256: 777f73f137c56f390e14d03bae9538f66e4b42025c5fe304531537aca9261060 + md5: 5c2db157899dc09a20dcc87638066120 + depends: + - __osx >=11.0 + - libcxx >=19 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 64561 + timestamp: 1773480255077 +- conda: https://conda.anaconda.org/conda-forge/win-64/double-conversion-3.4.0-hac47afa_0.conda + sha256: 09e30a170e0da3e9847d449b594b5e55e6ae2852edd3a3680e05753a5e015605 + md5: 3d3caf4ccc6415023640af4b1b33060a + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 70943 + timestamp: 1765193243911 - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl name: etils version: 1.13.0 @@ -1039,6 +1609,123 @@ packages: name: flatbuffers version: 25.12.19 sha256: 7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + md5: 0c96522c6bdaed4b1566d11387caaf45 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 397370 + timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + md5: 34893075a5c9e55cdafac56607368fc6 + license: OFL-1.1 + license_family: Other + purls: [] + size: 96530 + timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + md5: 4d59c254e01d9cde7957100457e2d5fb + license: OFL-1.1 + license_family: Other + purls: [] + size: 700814 + timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + md5: 49023d73832ef61042f6a237cb2687e7 + license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 + license_family: Other + purls: [] + size: 1620504 + timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda + sha256: aa4a44dba97151221100a637c7f4bde619567afade9c0265f8e1c8eed8d7bd8c + md5: 867127763fbe935bab59815b6e0b7b5c + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libuuid >=2.41.3,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 270705 + timestamp: 1771382710863 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda + sha256: 835aff8615dd8d8fff377679710ce81b8a2c47b6404e21a92fb349fda193a15c + md5: 0fed1ff55f4938a65907f3ecf62609db + depends: + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libuuid >=2.41.3,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 279044 + timestamp: 1771382728182 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.17.1-h2b252f5_0.conda + sha256: 851e9c778bfc54645dcab7038c0383445cbebf16f6bb2d3f62ce422b1605385a + md5: d06ae1a11b46cc4c74177ecd28de7c7a + depends: + - __osx >=11.0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 237308 + timestamp: 1771382999247 +- conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.17.1-hd47e2ca_0.conda + sha256: ff2db9d305711854de430f946dc59bd40167940a1de38db29c5a78659f219d9c + md5: a0b1b87e871011ca3b783bbf410bc39f + depends: + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 195332 + timestamp: 1771382820659 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + md5: fee5683a3f04bd15cbd8318b096a27ab + depends: + - fonts-conda-forge + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3667 + timestamp: 1566974674465 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 + md5: a7970cd949a077b7cb9696379d338681 + depends: + - font-ttf-ubuntu + - font-ttf-inconsolata + - font-ttf-dejavu-sans-mono + - font-ttf-source-code-pro + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4059 + timestamp: 1762351264405 - pypi: https://files.pythonhosted.org/packages/6c/44/f3aeac0fa98e7ad527f479e161aca6c3a1e47bb6996b053d45226fe37bf2/fonttools-4.61.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl name: fonttools version: 4.61.1 @@ -1317,6 +2004,35 @@ packages: purls: [] size: 73516504 timestamp: 1771378256368 +- pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + name: gitdb + version: 4.0.12 + sha256: 67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf + requires_dist: + - smmap>=3.0.1,<6 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl + name: gitpython + version: 3.1.46 + sha256: 79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058 + requires_dist: + - gitdb>=4.0.1,<5 + - typing-extensions>=3.10.0.2 ; python_full_version < '3.10' + - coverage[toml] ; extra == 'test' + - ddt>=1.1.1,!=1.4.3 ; extra == 'test' + - mock ; python_full_version < '3.8' and extra == 'test' + - mypy==1.18.2 ; python_full_version >= '3.9' and extra == 'test' + - pre-commit ; extra == 'test' + - pytest>=7.3.1 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-instafail ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-sugar ; extra == 'test' + - typing-extensions ; python_full_version < '3.11' and extra == 'test' + - sphinx>=7.1.2,<7.2 ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - sphinx-autodoc-typehints ; extra == 'doc' + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl name: glfw version: 2.10.0 @@ -1341,6 +2057,143 @@ packages: sha256: 27c9e9a2d5e1dc3c9e3996171d844d9df9a5a101e797cb94cce217b7afcf8fd9 requires_dist: - glfw-preview ; extra == 'preview' +- pypi: https://files.pythonhosted.org/packages/02/eb/6518a1b00488d48995034226846653c382d676cf5f04be62b3c3fae2c6a1/gpiozero-2.0.1-py3-none-any.whl + name: gpiozero + version: 2.0.1 + sha256: 8f621de357171d574c0b7ea0e358cb66e560818a47b0eeedf41ce1cdbd20c70b + requires_dist: + - colorzero + - importlib-metadata~=4.6 ; python_full_version < '3.10' + - importlib-resources~=5.0 ; python_full_version < '3.10' + - sphinx-rtd-theme>=1.0 ; extra == 'doc' + - sphinx>=4.0 ; extra == 'doc' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + sha256: 25ba37da5c39697a77fce2c9a15e48cf0a84f1464ad2aafbe53d8357a9f6cc8c + md5: 2cd94587f3a401ae05e03a6caf09539d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 99596 + timestamp: 1755102025473 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda + sha256: c9b1781fe329e0b77c5addd741e58600f50bef39321cae75eba72f2f381374b7 + md5: 4aa540e9541cc9d6581ab23ff2043f13 + depends: + - libgcc >=14 + - libstdcxx >=14 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 102400 + timestamp: 1755102000043 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.14-hec049ff_2.conda + sha256: c507ae9989dbea7024aa6feaebb16cbf271faac67ac3f0342ef1ab747c20475d + md5: 0fc46fee39e88bbcf5835f71a9d9a209 + depends: + - __osx >=11.0 + - libcxx >=19 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 81202 + timestamp: 1755102333712 +- conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.14-hac47afa_2.conda + sha256: 5f1714b07252f885a62521b625898326ade6ca25fbc20727cfe9a88f68a54bfd + md5: b785694dd3ec77a011ccf0c24725382b + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 96336 + timestamp: 1755102441729 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.1.1-h6083320_0.conda + sha256: cc536468a807a77bbfbbf392a21f205d4e1de1198be03f9359e52e01926d8597 + md5: 56d73078fe51aee26b7934cb1378d464 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.2,<79.0a0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3069804 + timestamp: 1773391781117 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-13.1.1-h1134a53_0.conda + sha256: 519585a32a9374d2ff0ca93139665e65061117b70156f6c94ce8bc5b5b47c687 + md5: 46a7a399537501c4501be18a9f871976 + depends: + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.2,<79.0a0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2669078 + timestamp: 1773396553668 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-13.1.1-h3103d1b_0.conda + sha256: fa61ebdcab0b9ca3a53c719b65af972cd2be57dea377e82e0a0ece9dcfe147db + md5: cfb229fdf2b19d1557c755cce8e183a8 + depends: + - __osx >=11.0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.2,<79.0a0 + - libcxx >=19 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libglib >=2.86.4,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1635918 + timestamp: 1773392848411 +- conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-13.1.1-h5a1b470_0.conda + sha256: 5a23aac569bd68ce13273be30bc08f044f6b1870ac0f6eee78855a369e2c14e8 + md5: 987061cd0ee71af3493e5dbc6cbde56b + depends: + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.2,<79.0a0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libglib >=2.86.4,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 1286958 + timestamp: 1773392007609 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda sha256: 142a722072fa96cf16ff98eaaf641f54ab84744af81754c292cb81e0881c0329 md5: 186a18e3ba246eccfc7cff00cd19a870 @@ -1374,6 +2227,17 @@ packages: purls: [] size: 12389400 timestamp: 1772209104304 +- conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + sha256: 1bda728d70a619731b278c859eda364146cb5b4b8c739a64da8128353d81d1c4 + md5: 0097b24800cb696915c3dbd1f5335d3f + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + purls: [] + size: 14954024 + timestamp: 1773822508646 - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl name: id version: 1.6.1 @@ -1576,6 +2440,14 @@ packages: - async-timeout ; python_full_version < '3.11' and extra == 'test' - trio ; extra == 'trio' requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + name: jinja2 + version: 3.1.6 + sha256: 85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 + requires_dist: + - markupsafe>=2.0 + - babel>=2.7 ; extra == 'i18n' + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda sha256: 41557eeadf641de6aeae49486cef30d02a6912d8da98585d687894afd65b356a md5: 86d9cba083cd041bfbf242a01a7a1999 @@ -1626,6 +2498,25 @@ packages: - types-pywin32 ; extra == 'type' - shtab>=1.1.0 ; extra == 'completion' requires_python: '>=3.9' +- 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 + purls: [] + size: 134088 + timestamp: 1754905959823 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda + sha256: 5ce830ca274b67de11a7075430a72020c1fb7d486161a82839be15c2b84e9988 + md5: e7df0aab10b9cbb73ab2a467ebfaf8c7 + depends: + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + size: 129048 + timestamp: 1754906002667 - pypi: https://files.pythonhosted.org/packages/12/42/f36816eaf465220f683fb711efdd1bbf7a7005a2473d0e4ed421389bd26c/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl name: kiwisolver version: 1.4.9 @@ -1646,6 +2537,64 @@ packages: version: 1.4.9 sha256: f68208a520c3d86ea51acf688a3e3002615a7f0238002cccc17affecc86a8a54 requires_python: '>=3.10' +- 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 + purls: [] + size: 1386730 + timestamp: 1769769569681 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda + sha256: b53999d888dda53c506b264e8c02b5f5c8e022c781eda0718f007339e6bc90ba + md5: d9ca108bd680ea86a963104b6b3e95ca + depends: + - 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 + purls: [] + size: 1517436 + timestamp: 1769773395215 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + sha256: c0a0bf028fe7f3defcdcaa464e536cf1b202d07451e18ad83fdd169d15bef6ed + md5: e446e1822f4da8e5080a9de93474184d + depends: + - __osx >=11.0 + - libcxx >=19 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1160828 + timestamp: 1769770119811 +- conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda + sha256: eb60f1ad8b597bcf95dee11bc11fe71a8325bc1204cf51d2bb1f2120ffd77761 + md5: 4432f52dc0c8eb6a7a6abc00a037d93c + depends: + - openssl >=3.5.5,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 751055 + timestamp: 1769769688841 - pypi: https://files.pythonhosted.org/packages/34/b8/aa7d6cf2d5efdd2fcd85cf39b33584fe12a0f7086ed451176ceb7fb510eb/lark-parser-0.7.8.tar.gz name: lark-parser version: 0.7.8 @@ -1675,16 +2624,450 @@ packages: purls: [] size: 875924 timestamp: 1770267209884 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 - md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 + md5: a752488c68f2e7c456bcbd8f16eec275 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - constrains: - - expat 2.7.4.* - license: MIT - license_family: MIT + - libstdcxx >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 261513 + timestamp: 1773113328888 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda + sha256: 8957fd460c1c132c8031f65fd5f56ec3807fd71b7cab2c5e2b0937b13404ab36 + md5: d13423b06447113a90b5b1366d4da171 + depends: + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 240444 + timestamp: 1773114901155 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + sha256: 66e5ffd301a44da696f3efc2f25d6d94f42a9adc0db06c44ad753ab844148c51 + md5: 095e5749868adab9cae42d4b460e5443 + depends: + - __osx >=11.0 + - libcxx >=19 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 164222 + timestamp: 1773114244984 +- conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda + sha256: 45df58fca800b552b17c3914cc9ab0d55a82c5172d72b5c44a59c710c06c5473 + md5: 54b231d595bc1ff9bff668dd443ee012 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 172395 + timestamp: 1773113455582 +- pypi: https://files.pythonhosted.org/packages/56/33/26ec2e8049eaa2f077bf23a12dc61ca559fbfa7bea0516bf263d657ae275/lgpio-0.2.2.0.tar.gz + name: lgpio + version: 0.2.2.0 + sha256: 11372e653b200f76a0b3ef8a23a0735c85ec678a9f8550b9893151ed0f863fff +- 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 + purls: [] + size: 79965 + timestamp: 1764017188531 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.2.0-he30d5cf_1.conda + sha256: 5fa8c163c8d776503aa68cdaf798ff9440c76a0a1c3ea84e0c43dbf1ece8af4d + md5: 8ec1d03f3000108899d1799d9964f281 + depends: + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 80030 + timestamp: 1764017273715 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + sha256: a7cb9e660531cf6fbd4148cff608c85738d0b76f0975c5fc3e7d5e92840b7229 + md5: 006e7ddd8a110771134fcc4e1e3a6ffa + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 79443 + timestamp: 1764017945924 +- conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda + sha256: 5097303c2fc8ebf9f9ea9731520aa5ce4847d0be41764edd7f6dee2100b82986 + md5: 444b0a45bbd1cb24f82eedb56721b9c4 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 82042 + timestamp: 1764017799966 +- 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 + purls: [] + size: 34632 + timestamp: 1764017199083 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda + sha256: 494365e8f58799ea95a6e82334ef696e9c2120aecd6626121694b30a15033301 + md5: 47e5b71b77bb8b47b4ecf9659492977f + depends: + - libbrotlicommon 1.2.0 he30d5cf_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 33166 + timestamp: 1764017282936 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + sha256: 2eae444039826db0454b19b52a3390f63bfe24f6b3e63089778dd5a5bf48b6bf + md5: 079e88933963f3f149054eec2c487bc2 + depends: + - __osx >=11.0 + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + size: 29452 + timestamp: 1764017979099 +- conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda + sha256: 3239ce545cf1c32af6fffb7fc7c75cb1ef5b6ea8221c66c85416bb2d46f5cccb + md5: 450e3ae947fc46b60f1d8f8f318b40d4 + depends: + - libbrotlicommon 1.2.0 hfd05255_1 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 34449 + timestamp: 1764017851337 +- 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 + purls: [] + size: 298378 + timestamp: 1764017210931 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda + sha256: f998c03257b9aa1f7464446af2cf424862f0e54258a2a588309853e45ae771df + md5: 6553a5d017fe14859ea8a4e6ea5def8f + depends: + - libbrotlicommon 1.2.0 he30d5cf_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 309304 + timestamp: 1764017292044 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + sha256: 01436c32bb41f9cb4bcf07dda647ce4e5deb8307abfc3abdc8da5317db8189d1 + md5: b2b7c8288ca1a2d71ff97a8e6a1e8883 + depends: + - __osx >=11.0 + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + size: 290754 + timestamp: 1764018009077 +- conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda + sha256: 3226df6b7df98734440739f75527d585d42ca2bfe912fbe8d1954c512f75341a + md5: ccd93cfa8e54fd9df4e83dbe55ff6e8c + depends: + - libbrotlicommon 1.2.0 hfd05255_1 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 252903 + timestamp: 1764017901735 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp19.1-19.1.7-default_hf3020a7_8.conda + sha256: f047f0d677bdccef02a844a50874baf9665551b2200e451e4c69b473ad499623 + md5: 445fc95210a8e15e8b5f9f93782e3f80 + depends: + - __osx >=11.0 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 14064507 + timestamp: 1772400067348 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.0-default_h99862b1_0.conda + sha256: 914da94dbf829192b2bb360a7684b32e46f047a57de96a2f5ab39a011aeae6ea + md5: d966a23335e090a5410cc4f0dec8d00a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libllvm22 >=22.1.0,<22.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 21661249 + timestamp: 1772101075353 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp22.1-22.1.0-default_he95a3c9_0.conda + sha256: 48f27a5ad4ea95de961131a282ba884305e309314b51abb61814856732b28461 + md5: 1519a50e2f4caca01098a33d39f45f5c + depends: + - libgcc >=14 + - libllvm22 >=22.1.0,<22.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 21293353 + timestamp: 1772101944548 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.0-default_h746c552_0.conda + sha256: 4a9dd814492a129f2ff40cd4ab0b942232c9e3c6dbc0d0aaf861f1f65e99cc7d + md5: 140459a7413d8f6884eb68205ce39a0d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libllvm22 >=22.1.0,<22.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 12817500 + timestamp: 1772101411287 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.0-default_h94a09a5_0.conda + sha256: 643c2fb49f91977348cd04589bf4fab3b3e1e096ee42f979255f2ff9749d31a6 + md5: 4e1023aa62d0919a4014954d57bcb786 + depends: + - libgcc >=14 + - libllvm22 >=22.1.0,<22.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 12619911 + timestamp: 1772102257387 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang13-22.1.0-default_h13b06bd_0.conda + sha256: 1f9195e2f9be884880b3d119be6eaea4b8f57d399b49e78a9718071ecee1cc29 + md5: 64ecee538edc16caf5717f3c2d6d8545 + depends: + - __osx >=11.0 + - libcxx >=22.1.0 + - libllvm22 >=22.1.0,<22.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 8934812 + timestamp: 1772098474633 +- conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-22.1.0-default_ha2db4b5_0.conda + sha256: c8e34362c6bf7305ef50f0de4e16292cd97e31650ab6465282eeeac62f0a05c4 + md5: 7ad437870ea7d487e1b0e663503b6b1d + depends: + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 30584641 + timestamp: 1772353741135 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + sha256: 205c4f19550f3647832ec44e35e6d93c8c206782bdd620c1d7cf66237580ff9c + md5: 49c553b47ff679a6a1e9fc80b9c5a2d4 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 4518030 + timestamp: 1770902209173 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h4f2b762_6.conda + sha256: 41b04f995c9f63af8c4065a35931e46cbc2fdd6b9bf7e4c19f90d53cbb2bc8e5 + md5: 67828c963b17db7dc989fe5d509ef04a + depends: + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 4553739 + timestamp: 1770903929794 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.1-h55c6f16_0.conda + sha256: 3c8142cdd3109c250a926c492ec45bc954697b288e5d1154ada95272ffa21be8 + md5: 7a290d944bc0c481a55baf33fa289deb + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 570281 + timestamp: 1773203613980 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 + md5: 6c77a605a7a689d17d4819c0f8ac9a00 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 73490 + timestamp: 1761979956660 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda + sha256: 48814b73bd462da6eed2e697e30c060ae16af21e9fbed30d64feaf0aad9da392 + md5: a9138815598fe6b91a1d6782ca657b0c + depends: + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 71117 + timestamp: 1761979776756 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + sha256: 5e0b6961be3304a5f027a8c00bd0967fc46ae162cffb7553ff45c70f51b8314c + md5: a6130c709305cd9828b4e1bd9ba0000c + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 55420 + timestamp: 1761980066242 +- conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda + sha256: 834e4881a18b690d5ec36f44852facd38e13afe599e369be62d29bd675f107ee + md5: e77030e67343e28b084fabd7db0ce43e + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 156818 + timestamp: 1761979842440 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda + sha256: c076a213bd3676cc1ef22eeff91588826273513ccc6040d9bea68bccdc849501 + md5: 9314bc5a1fe7d1044dc9dfd3ef400535 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpciaccess >=0.18,<0.19.0a0 + license: MIT + license_family: MIT + purls: [] + size: 310785 + timestamp: 1757212153962 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.125-he30d5cf_1.conda + sha256: 4e6cdb5dd37db794b88bec714b4418a0435b04d14e9f7afc8cc32f2a3ced12f2 + md5: 2079727b538f6dd16f3fa579d4c3c53f + depends: + - libgcc >=14 + - libpciaccess >=0.18,<0.19.0a0 + license: MIT + license_family: MIT + purls: [] + size: 344548 + timestamp: 1757212128414 +- 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 + purls: [] + size: 134676 + timestamp: 1738479519902 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda + sha256: c0b27546aa3a23d47919226b3a1635fccdb4f24b94e72e206a751b33f46fd8d6 + md5: fb640d776fc92b682a14e001980825b1 + depends: + - ncurses + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 148125 + timestamp: 1738479808948 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 + md5: 44083d2d2c2025afca315c7a172eab2b + depends: + - ncurses + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 107691 + timestamp: 1738479560845 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda + sha256: 7fd5408d359d05a969133e47af580183fbf38e2235b562193d427bb9dad79723 + md5: c151d5eb730e9b7480e6d48c0fc44048 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + license: LicenseRef-libglvnd + purls: [] + size: 44840 + timestamp: 1731330973553 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_2.conda + sha256: 8962abf38a58c235611ce356b9899f6caeb0352a8bce631b0bcc59352fda455e + md5: cf105bce884e4ef8c8ccdca9fe6695e7 + depends: + - libglvnd 1.7.0 hd24410f_2 + license: LicenseRef-libglvnd + purls: [] + size: 53551 + timestamp: 1731330990477 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 + md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.7.4.* + license: MIT + license_family: MIT purls: [] size: 76798 timestamp: 1771259418166 @@ -1769,6 +3152,97 @@ packages: purls: [] size: 45831 timestamp: 1769456418774 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda + sha256: 2e1bfe1e856eb707d258f669ef6851af583ceaffab5e64821b503b0f7cd09e9e + md5: 26c746d14402a3b6c684d045b23b9437 + depends: + - libfreetype6 >=2.14.2 + license: GPL-2.0-only OR FTL + purls: [] + size: 8035 + timestamp: 1772757210108 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.2-h8af1aa0_0.conda + sha256: 23cdb94528bb4328b6f7550906dee5080952354445d8bd96241fa7d059c4af95 + md5: 93bce8dee6a0a4906331db294ec250fe + depends: + - libfreetype6 >=2.14.2 + license: GPL-2.0-only OR FTL + purls: [] + size: 8108 + timestamp: 1772756012710 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.2-hce30654_0.conda + sha256: 6061ef5321b8e697d5577d8dfe7a4c75bfe3e706c956d0d84bfec6bea3ed9f77 + md5: a3a53232936b55ffea76806aefe19e8b + depends: + - libfreetype6 >=2.14.2 + license: GPL-2.0-only OR FTL + purls: [] + size: 8076 + timestamp: 1772756349852 +- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.2-h57928b3_0.conda + sha256: 427c3072b311e65bd3eae3fcb78f6847b15b2dbb173a8546424de56550b2abfb + md5: 153d52fd0e4ba2a5bd5bb4f4afa41417 + depends: + - libfreetype6 >=2.14.2 + license: GPL-2.0-only OR FTL + purls: [] + size: 8404 + timestamp: 1772756167212 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda + sha256: aba65b94bdbed52de17ec3d0c6f2ebac2ef77071ad22d6900d1614d0dd702a0c + md5: 8eaba3d1a4d7525c6814e861614457fd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - freetype >=2.14.2 + license: GPL-2.0-only OR FTL + purls: [] + size: 386316 + timestamp: 1772757193822 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.2-hdae7a39_0.conda + sha256: a2e9efb033f7519bbc0a54558d7c9bb96252adc22c6e09df2daee7615265fbb1 + md5: 69d1cdfdabb66464cbde17890e8be3b9 + depends: + - libgcc >=14 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - freetype >=2.14.2 + license: GPL-2.0-only OR FTL + purls: [] + size: 423372 + timestamp: 1772756012086 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.2-hdfa99f5_0.conda + sha256: 24dd0e0bee56e87935f885929f67659f1d3b8a01e7546568de2919cffd9e2e36 + md5: e726e134a392ae5d7bafa6cc4a3d5725 + depends: + - __osx >=11.0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - freetype >=2.14.2 + license: GPL-2.0-only OR FTL + purls: [] + size: 338032 + timestamp: 1772756347899 +- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.2-hdbac1cb_0.conda + sha256: 1e80e01e5662bd3a0c0e094fbeaec449dbb2288949ca55ca80345e7812904e67 + md5: c21a474a38982cdb56b3454cf4f78389 + depends: + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - freetype >=2.14.2 + license: GPL-2.0-only OR FTL + purls: [] + size: 340155 + timestamp: 1772756166648 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 md5: 0aa00f03f9e39fb9876085dee11a85d4 @@ -1836,24 +3310,313 @@ packages: purls: [] size: 27568 timestamp: 1771378136019 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 - md5: 239c5e9546c38a1e884d69effcf4c882 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda + sha256: dc2752241fa3d9e40ce552c1942d0a4b5eeb93740c9723873f6fcf8d39ef8d2d + md5: 928b8be80851f5d8ffb016f9c81dae7a depends: - __glibc >=2.17,<3.0.a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL + - libglvnd 1.7.0 ha4b6fd6_2 + - libglx 1.7.0 ha4b6fd6_2 + license: LicenseRef-libglvnd purls: [] - size: 603262 - timestamp: 1771378117851 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - sha256: fc716f11a6a8525e27a5d332ef6a689210b0d2a4dd1133edc0f530659aa9faa6 - md5: 4faa39bf919939602e594253bd673958 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL + size: 134712 + timestamp: 1731330998354 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_2.conda + sha256: 3e954380f16255d1c8ae5da3bd3044d3576a0e1ac2e3c3ff2fe8f2f1ad2e467a + md5: 0d00176464ebb25af83d40736a2cd3bb + depends: + - libglvnd 1.7.0 hd24410f_2 + - libglx 1.7.0 hd24410f_2 + license: LicenseRef-libglvnd + purls: [] + size: 145442 + timestamp: 1731331005019 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda + sha256: a27e44168a1240b15659888ce0d9b938ed4bdb49e9ea68a7c1ff27bcea8b55ce + md5: bb26456332b07f68bf3b7622ed71c0da + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - glib 2.86.4 *_1 + license: LGPL-2.1-or-later + purls: [] + size: 4398701 + timestamp: 1771863239578 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda + sha256: afc503dbd04a5bf2709aa9d8318a03a8c4edb389f661ff280c3494bfef4341ec + md5: 4ac4372fc4d7f20630a91314cdac8afd + depends: + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - glib 2.86.4 *_1 + license: LGPL-2.1-or-later + purls: [] + size: 4512186 + timestamp: 1771863220969 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.86.4-he378b5c_1.conda + sha256: a4254a241a96198e019ced2e0d2967e4c0ef64fac32077a45c065b32dc2b15d2 + md5: 673069f6725ed7b1073f9b96094294d1 + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - libiconv >=1.18,<2.0a0 + - libintl >=0.25.1,<1.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - glib 2.86.4 *_1 + license: LGPL-2.1-or-later + purls: [] + size: 4108927 + timestamp: 1771864169970 +- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_1.conda + sha256: f035fb25f8858f201e0055c719ef91022e9465cd51fe803304b781863286fb10 + md5: 0329a7e92c8c8b61fcaaf7ad44642a96 + depends: + - libffi >=3.5.2,<3.6.0a0 + - libiconv >=1.18,<2.0a0 + - libintl >=0.22.5,<1.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - glib 2.86.4 *_1 + license: LGPL-2.1-or-later + purls: [] + size: 4095369 + timestamp: 1771863229701 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda + sha256: 1175f8a7a0c68b7f81962699751bb6574e6f07db4c9f72825f978e3016f46850 + md5: 434ca7e50e40f4918ab701e3facd59a0 + depends: + - __glibc >=2.17,<3.0.a0 + license: LicenseRef-libglvnd + purls: [] + size: 132463 + timestamp: 1731330968309 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_2.conda + sha256: 57ec3898a923d4bcc064669e90e8abfc4d1d945a13639470ba5f3748bd3090da + md5: 9e115653741810778c9a915a2f8439e7 + license: LicenseRef-libglvnd + purls: [] + size: 152135 + timestamp: 1731330986070 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda + sha256: 2d35a679624a93ce5b3e9dd301fff92343db609b79f0363e6d0ceb3a6478bfa7 + md5: c8013e438185f33b13814c5c488acd5c + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + - xorg-libx11 >=1.8.10,<2.0a0 + license: LicenseRef-libglvnd + purls: [] + size: 75504 + timestamp: 1731330988898 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_2.conda + sha256: 6591af640cb05a399fab47646025f8b1e1a06a0d4bbb4d2e320d6629b47a1c61 + md5: 1d4269e233636148696a67e2d30dad2a + depends: + - libglvnd 1.7.0 hd24410f_2 + - xorg-libx11 >=1.8.9,<2.0a0 + license: LicenseRef-libglvnd + purls: [] + size: 77736 + timestamp: 1731330998960 +- 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 + purls: [] + size: 603262 + timestamp: 1771378117851 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda + sha256: fc716f11a6a8525e27a5d332ef6a689210b0d2a4dd1133edc0f530659aa9faa6 + md5: 4faa39bf919939602e594253bd673958 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL purls: [] size: 588060 timestamp: 1771378040807 +- 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 + purls: [] + size: 790176 + timestamp: 1754908768807 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda + sha256: 1473451cd282b48d24515795a595801c9b65b567fe399d7e12d50b2d6cdb04d9 + md5: 5a86bf847b9b926f3a4f203339748d78 + depends: + - libgcc >=14 + license: LGPL-2.1-only + purls: [] + size: 791226 + timestamp: 1754910975665 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + sha256: de0336e800b2af9a40bdd694b03870ac4a848161b35c8a2325704f123f185f03 + md5: 4d5a7445f0b25b6a3ddbb56e790f5251 + depends: + - __osx >=11.0 + license: LGPL-2.1-only + purls: [] + size: 750379 + timestamp: 1754909073836 +- conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + sha256: 0dcdb1a5f01863ac4e8ba006a8b0dc1a02d2221ec3319b5915a1863254d7efa7 + md5: 64571d1dd6cdcfa25d0664a5950fdaa2 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.1-only + purls: [] + size: 696926 + timestamp: 1754909290005 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda + sha256: 99d2cebcd8f84961b86784451b010f5f0a795ed1c08f1e7c76fbb3c22abf021a + md5: 5103f6a6b210a3912faf8d7db516918c + depends: + - __osx >=11.0 + - libiconv >=1.18,<2.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 90957 + timestamp: 1751558394144 +- conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda + sha256: c7e4600f28bcada8ea81456a6530c2329312519efcf0c886030ada38976b0511 + md5: 2cf0cf76cc15d360dfa2f17fd6cf9772 + depends: + - libiconv >=1.17,<2.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 95568 + timestamp: 1723629479451 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda + sha256: cc9aba923eea0af8e30e0f94f2ad7156e2984d80d1e8e7fe6be5a1f257f0eb32 + md5: 8397539e3a0bbd1695584fb4f927485a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 633710 + timestamp: 1762094827865 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda + sha256: 84064c7c53a64291a585d7215fe95ec42df74203a5bf7615d33d49a3b0f08bb6 + md5: 5109d7f837a3dfdf5c60f60e311b041f + depends: + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 691818 + timestamp: 1762094728337 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.2-hc919400_0.conda + sha256: 6c061c56058bb10374daaef50e81b39cf43e8aee21f0037022c0c39c4f31872f + md5: f0695fbecf1006f27f4395d64bd0c4b8 + depends: + - __osx >=11.0 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 551197 + timestamp: 1762095054358 +- conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda + sha256: 795e2d4feb2f7fc4a2c6e921871575feb32b8082b5760726791f080d1e2c2597 + md5: 56a686f92ac0273c0f6af58858a3f013 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 841783 + timestamp: 1762094814336 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm19-19.1.7-h8e0c9ce_2.conda + sha256: 46f8ff3d86438c0af1bebe0c18261ce5de9878d58b4fe399a3a125670e4f0af5 + md5: d1d9b233830f6631800acc1e081a9444 + depends: + - __osx >=11.0 + - libcxx >=19 + - libxml2 + - libxml2-16 >=2.14.5 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 26914852 + timestamp: 1757353228286 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.1-hf7376ad_0.conda + sha256: 1145f9e85f0fbbdba88f1da5c8c48672bee7702e2f40c563b2dd48350ab4d413 + md5: 97cc6dad22677304846a798c8a65064d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 44256563 + timestamp: 1773371774629 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.1-hfd2ba90_0.conda + sha256: 9b1634ce91d4d56d8a92996e65a2ef20fe0dd8afa88761bb361314748e439aab + md5: 9684eec87b0eb9c81c6b95dfcbe574a0 + depends: + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 43166469 + timestamp: 1773368435640 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm22-22.1.1-h89af1be_0.conda + sha256: a07056c4b52eca3d0cff01b127e9a071066257dc70bd1bbe60611ead7fec5e76 + md5: ead237a59f2abca6861c134a589c9e83 + depends: + - __osx >=11.0 + - libcxx >=19 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 30052340 + timestamp: 1773362324365 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb md5: c7c83eecbb72d88b940c249af56c8b17 @@ -1922,6 +3685,157 @@ packages: purls: [] size: 34831 timestamp: 1750274211 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + sha256: 3b3f19ced060013c2dd99d9d46403be6d319d4601814c772a3472fe2955612b0 + md5: 7c7927b404672409d9917d49bff5f2d6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + size: 33418 + timestamp: 1734670021371 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libntlm-1.4-hf897c2e_1002.tar.bz2 + sha256: 0e303d7a8845391bd1634efb65dc9d9b82b5608ebeb32fb77a56d1ed696d2eee + md5: 835c7c4137821de5c309f4266a51ba89 + depends: + - libgcc-ng >=9.3.0 + license: LGPL-2.1-or-later + purls: [] + size: 39449 + timestamp: 1609781865660 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libntlm-1.8-h5505292_0.conda + sha256: ea8c680924d957e12270dca549620327d5e986f23c4bd5f45627167ca6ef7a3b + md5: c90c1d3bd778f5ec0d4bb4ef36cbd5b6 + depends: + - __osx >=11.0 + license: LGPL-2.1-or-later + purls: [] + size: 31099 + timestamp: 1734670168822 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda + sha256: 215086c108d80349e96051ad14131b751d17af3ed2cb5a34edd62fa89bfe8ead + md5: 7df50d44d4a14d6c31a2c54f2cd92157 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + license: LicenseRef-libglvnd + purls: [] + size: 50757 + timestamp: 1731330993524 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopengl-1.7.0-hd24410f_2.conda + sha256: e359df399fb2f308774237384414e318fac8870c1bf6481bdc67ae16e0bd2a02 + md5: cf9d12bfab305e48d095a4c79002c922 + depends: + - libglvnd 1.7.0 hd24410f_2 + license: LicenseRef-libglvnd + purls: [] + size: 56355 + timestamp: 1731331001820 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda + sha256: 0bd91de9b447a2991e666f284ae8c722ffb1d84acb594dbd0c031bd656fa32b2 + md5: 70e3400cbbfa03e96dcde7fc13e38c7b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 28424 + timestamp: 1749901812541 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.18-h86ecc28_0.conda + sha256: 7641dfdfe9bda7069ae94379e9924892f0b6604c1a016a3f76b230433bb280f2 + md5: 5044e160c5306968d956c2a0a2a440d6 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 29512 + timestamp: 1749901899881 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda + sha256: 36ade759122cdf0f16e2a2562a19746d96cf9c863ffaa812f2f5071ebbe9c03c + md5: 5f13ffc7d30ffec87864e678df9957b4 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 317669 + timestamp: 1770691470744 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda + sha256: c7378c6b79de4d571d00ad1caf0a4c19d43c9c94077a761abb6ead44d891f907 + md5: be4088903b94ea297975689b3c3aeb27 + depends: + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 340156 + timestamp: 1770691477245 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.55-h132b30e_0.conda + sha256: 7a4fd29a6ee2d7f7a6e610754dfdf7410ed08f40d8d8b488a27bc0f9981d5abb + md5: 871dc88b0192ac49b6a5509932c31377 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 288950 + timestamp: 1770691485950 +- conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.55-h7351971_0.conda + sha256: db23f281fa80597a0dc0445b18318346862602d7081ed76244df8cc4418d6d68 + md5: 43f47a9151b9b8fc100aeefcf350d1a0 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 383155 + timestamp: 1770691504832 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.3-h9abb657_0.conda + sha256: c7e61b86c273ec1ce92c0e087d1a0f3ed3b9485507c6cd35e03bc63de1b6b03f + md5: 405ec206d230d9d37ad7c2636114cbf4 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.2,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - openldap >=2.6.10,<2.7.0a0 + - openssl >=3.5.5,<4.0a0 + license: PostgreSQL + purls: [] + size: 2865686 + timestamp: 1772136328077 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.3-h7d4fc67_0.conda + sha256: 878b5d316087a226eb235f0dd46e7de39941afe13c5d3c7f6a289e8853d45333 + md5: 7eb18b198b1d35da9352062c69c4ee64 + depends: + - icu >=78.2,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - openldap >=2.6.10,<2.7.0a0 + - openssl >=3.5.5,<4.0a0 + license: PostgreSQL + purls: [] + size: 2854221 + timestamp: 1772136342536 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpq-18.3-hd341ff2_0.conda + sha256: 625b59f5b3c750a2e4c5a0a4ade5b4f1c3d6b8d6a781797324344c03270a529a + md5: fc064efe5042bcaf994307822ccbb1f1 + depends: + - __osx >=11.0 + - icu >=78.2,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - openldap >=2.6.10,<2.7.0a0 + - openssl >=3.5.5,<4.0a0 + license: PostgreSQL + purls: [] + size: 2705141 + timestamp: 1772136813226 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_18.conda sha256: 0329e23d54a567c259adc962a62172eaa55e6ca33c105ef67b4f3cdb4ef70eaa md5: ff754fbe790d4e70cf38aea3668c3cb3 @@ -2035,6 +3949,75 @@ packages: purls: [] size: 17628403 timestamp: 1771378058765 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 + md5: cd5a90476766d53e901500df9215e927 + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libstdcxx >=14 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + size: 435273 + timestamp: 1762022005702 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda + sha256: 7ff79470db39e803e21b8185bc8f19c460666d5557b1378d1b1e857d929c6b39 + md5: 8c6fd84f9c87ac00636007c6131e457d + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libstdcxx >=14 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + size: 488407 + timestamp: 1762022048105 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + sha256: e9248077b3fa63db94caca42c8dbc6949c6f32f94d1cafad127f9005d9b1507f + md5: e2a72ab2fa54ecb6abab2b26cde93500 + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=19 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + size: 373892 + timestamp: 1762022345545 +- conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda + sha256: f1b8cccaaeea38a28b9cd496694b2e3d372bb5be0e9377c9e3d14b330d1cba8a + md5: 549845d5133100142452812feb9ba2e8 + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + size: 993166 + timestamp: 1762022118895 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee md5: db409b7c1720428638e7c0d509d3e1b5 @@ -2056,37 +4039,374 @@ packages: purls: [] size: 43453 timestamp: 1766271546875 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c - md5: 5aa797f8787fe7a17d1b0821485b5adc +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + sha256: a68280d57dfd29e3d53400409a39d67c4b9515097eba733aa6fe00c880620e2b + md5: 31ad065eda3c2d88f8215b1289df9c89 depends: - - libgcc-ng >=12 - license: LGPL-2.1-or-later + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + constrains: + - libvulkan-headers 1.4.341.0.* + license: Apache-2.0 + license_family: APACHE purls: [] - size: 100393 - timestamp: 1702724383534 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f - md5: b4df5d7d4b63579d081fd3a4cf99740e + size: 199795 + timestamp: 1770077125520 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda + sha256: 92a92589f4f787201bc5091990001f61515fa794fa4f0fb15f0ca50f3cc330cc + md5: 06bb91a87fb97ea09398d2e121e00c39 depends: - - libgcc-ng >=12 - license: LGPL-2.1-or-later + - libstdcxx >=14 + - libgcc >=14 + - xorg-libxrandr >=1.5.5,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + constrains: + - libvulkan-headers 1.4.341.0.* + license: Apache-2.0 + license_family: APACHE purls: [] - size: 114269 - timestamp: 1702724369203 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 - md5: edb0dca6bc32e4f4789199455a1dbeb8 + size: 217655 + timestamp: 1770077141862 +- conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda + sha256: 0f0965edca8b255187604fc7712c53fe9064b31a1845a7dfb2b63bf660de84a7 + md5: 804880b2674119b84277d6c16b01677d depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other + - libvulkan-headers 1.4.341.0.* + license: Apache-2.0 + license_family: APACHE purls: [] - size: 60963 - timestamp: 1727963148474 + size: 282251 + timestamp: 1770077165680 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + sha256: 3aed21ab28eddffdaf7f804f49be7a7d701e8f0e46c856d801270b470820a37b + md5: aea31d2e5b1091feca96fcfe945c3cf9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 429011 + timestamp: 1752159441324 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda + sha256: b03700a1f741554e8e5712f9b06dd67e76f5301292958cd3cb1ac8c6fdd9ed25 + md5: 24e92d0942c799db387f5c9d7b81f1af + depends: + - libgcc >=14 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 359496 + timestamp: 1752160685488 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + sha256: a4de3f371bb7ada325e1f27a4ef7bcc81b2b6a330e46fac9c2f78ac0755ea3dd + md5: e5e7d467f80da752be17796b87fe6385 + depends: + - __osx >=11.0 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 294974 + timestamp: 1752159906788 +- conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda + sha256: 7b6316abfea1007e100922760e9b8c820d6fc19df3f42fb5aca684cfacb31843 + md5: f9bbae5e2537e3b06e0f7310ba76c893 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 279176 + timestamp: 1752159543911 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 395888 + timestamp: 1727278577118 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + sha256: 461cab3d5650ac6db73a367de5c8eca50363966e862dcf60181d693236b1ae7b + md5: cd14ee5cca2464a425b1dbfc24d90db2 + depends: + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 397493 + timestamp: 1727280745441 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 114269 + timestamp: 1702724369203 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda + sha256: d2195b5fbcb0af1ff7b345efdf89290c279b8d1d74f325ae0ac98148c375863c + md5: 2bca1fbb221d9c3c8e3a155784bbc2e9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xkeyboard-config + - xorg-libxau >=1.0.12,<2.0a0 + license: MIT/X11 Derivative + license_family: MIT + purls: [] + size: 837922 + timestamp: 1764794163823 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.1-h3c6a4c8_0.conda + sha256: 37e4aa45b71c35095a01835bd42fa37c08218fec44eb2c6bf4b9e2826b0351d4 + md5: 22c1ce28d481e490f3635c1b6a2bb23f + depends: + - libgcc >=14 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xkeyboard-config + - xorg-libxau >=1.0.12,<2.0a0 + license: MIT/X11 Derivative + license_family: MIT + purls: [] + size: 863646 + timestamp: 1764794352540 +- 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 + purls: [] + size: 45968 + timestamp: 1772704614539 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.2-h825857f_0.conda + sha256: 3e51e1952cb60c8107094b6b78473d91ff49d428ad4bef6806124b383e8fe29c + md5: 19de96909ee1198e2853acd8aba89f6c + depends: + - icu >=78.2,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libxml2-16 2.15.2 h79dcc73_0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 47837 + timestamp: 1772704681112 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.2-h8d039ee_0.conda + sha256: 99cb32dd06a2e58c12981b71a84b052293f27b5ab042e3f21d895f5d7ee13eff + md5: e476ba84e57f2bd2004a27381812ad4e + depends: + - __osx >=11.0 + - icu >=78.2,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libxml2-16 2.15.2 h5ef1a60_0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 41206 + timestamp: 1772704982288 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h779ef1b_0.conda + sha256: 2131e25d4fb21be66d7ef685e1b2d66f04aa08e70b37322d557824389d0a4c2a + md5: be3843e412c9f9d697958aa68c72d09d + depends: + - icu >=78.2,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libxml2-16 2.15.2 h3cfd58e_0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 43866 + timestamp: 1772704745691 +- 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 + purls: [] + size: 557492 + timestamp: 1772704601644 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.2-h79dcc73_0.conda + sha256: da6b2ebbcecc158200d90be39514e4e902971628029b35b7f6ad57270659c5d9 + md5: e3ec9079759d35b875097d6a9a69e744 + depends: + - 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 + purls: [] + size: 598438 + timestamp: 1772704671710 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.2-h5ef1a60_0.conda + sha256: 6432259204e78c8a8a815afae987fbf60bd722605fe2c4b022e65196b17d4537 + md5: b284e2b02d53ef7981613839fb86beee + depends: + - __osx >=11.0 + - icu >=78.2,<79.0a0 + - 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 + purls: [] + size: 466220 + timestamp: 1772704950232 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h3cfd58e_0.conda + sha256: d6d792f8f1d6786b9144adfa62c33a04aeec3d76682351b353ca1224fc1a74f3 + md5: f6dd496a1f2b66951110a3a0817f699b + depends: + - icu >=78.2,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libxml2 2.15.2 + license: MIT + license_family: MIT + purls: [] + size: 520731 + timestamp: 1772704723763 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + sha256: 0694760a3e62bdc659d90a14ae9c6e132b525a7900e59785b18a08bb52a5d7e5 + md5: 87e6096ec6d542d1c1f8b33245fe8300 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: MIT + license_family: MIT + purls: [] + size: 245434 + timestamp: 1757963724977 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxslt-1.1.43-h6700d25_1.conda + sha256: 8a816572a4650149d28c0b8b44e294380de18787735d00c7cf5fad91dba8e286 + md5: 0f31501ccd51a40f0a91381080ae7368 + depends: + - libgcc >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: MIT + license_family: MIT + purls: [] + size: 253367 + timestamp: 1757964660396 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxslt-1.1.43-hb2570ba_1.conda + sha256: 7a4d0676ab1407fecb24d4ada7fe31a98c8889f61f04612ea533599c22b8c472 + md5: 90f7ed12bb3c164c758131b3d3c2ab0c + depends: + - __osx >=11.0 + - libxml2 + - libxml2-16 >=2.14.6 + license: MIT + license_family: MIT + purls: [] + size: 220345 + timestamp: 1757964000982 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.43-h0fbe4c1_1.conda + sha256: 13da38939c2c20e7112d683ab6c9f304bfaf06230a2c6a7cf00359da1a003ec7 + md5: 46034d9d983edc21e84c0b36f1b4ba61 + depends: + - libxml2 + - libxml2-16 >=2.14.6 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 420223 + timestamp: 1757963935611 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 md5: 08aad7cbe9f5a6b460d0976076b6ae64 @@ -2125,6 +4445,39 @@ packages: purls: [] size: 55476 timestamp: 1727963768015 +- pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl + name: loguru + version: 0.7.3 + sha256: 31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c + requires_dist: + - colorama>=0.3.4 ; sys_platform == 'win32' + - aiocontextvars>=0.2.0 ; python_full_version < '3.7' + - win32-setctime>=1.0.0 ; sys_platform == 'win32' + - pre-commit==4.0.1 ; python_full_version >= '3.9' and extra == 'dev' + - tox==3.27.1 ; python_full_version < '3.8' and extra == 'dev' + - tox==4.23.2 ; python_full_version >= '3.8' and extra == 'dev' + - pytest==6.1.2 ; python_full_version < '3.8' and extra == 'dev' + - pytest==8.3.2 ; python_full_version >= '3.8' and extra == 'dev' + - pytest-cov==2.12.1 ; python_full_version < '3.8' and extra == 'dev' + - pytest-cov==5.0.0 ; python_full_version == '3.8.*' and extra == 'dev' + - pytest-cov==6.0.0 ; python_full_version >= '3.9' and extra == 'dev' + - pytest-mypy-plugins==1.9.3 ; python_full_version >= '3.6' and python_full_version < '3.8' and extra == 'dev' + - pytest-mypy-plugins==3.1.0 ; python_full_version >= '3.8' and extra == 'dev' + - colorama==0.4.5 ; python_full_version < '3.8' and extra == 'dev' + - colorama==0.4.6 ; python_full_version >= '3.8' and extra == 'dev' + - freezegun==1.1.0 ; python_full_version < '3.8' and extra == 'dev' + - freezegun==1.5.0 ; python_full_version >= '3.8' and extra == 'dev' + - exceptiongroup==1.1.3 ; python_full_version >= '3.7' and python_full_version < '3.11' and extra == 'dev' + - mypy==0.910 ; python_full_version < '3.6' and extra == 'dev' + - mypy==0.971 ; python_full_version == '3.6.*' and extra == 'dev' + - mypy==1.4.1 ; python_full_version == '3.7.*' and extra == 'dev' + - mypy==1.13.0 ; python_full_version >= '3.8' and extra == 'dev' + - sphinx==8.1.3 ; python_full_version >= '3.11' and extra == 'dev' + - sphinx-rtd-theme==3.0.2 ; python_full_version >= '3.11' and extra == 'dev' + - myst-parser==4.0.0 ; python_full_version >= '3.11' and extra == 'dev' + - build==1.2.2 ; python_full_version >= '3.11' and extra == 'dev' + - twine==6.0.1 ; python_full_version >= '3.11' and extra == 'dev' + requires_python: '>=3.5,<4.0' - pypi: https://files.pythonhosted.org/packages/e2/6d/d56be57340baf2e6f6361386f4c21b8b5e001251c64af954787f8d01ec78/loop_rate_limiters-1.2.0-py3-none-any.whl name: loop-rate-limiters version: 1.2.0 @@ -2163,6 +4516,26 @@ packages: - pytest-regressions ; extra == 'testing' - requests ; extra == 'testing' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl + name: markupsafe + version: 3.0.3 + sha256: 3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: markupsafe + version: 3.0.3 + sha256: d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl + name: markupsafe + version: 3.0.3 + sha256: 1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl + name: markupsafe + version: 3.0.3 + sha256: 26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/00/f9/7638f5cc82ec8a7aa005de48622eecc3ed7c9854b96ba15bd76b7fd27574/matplotlib-3.10.8-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl name: matplotlib version: 3.10.8 @@ -2501,6 +4874,28 @@ packages: - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl + name: narwhals + version: 2.18.0 + sha256: 68378155ee706ac9c5b25868ef62ecddd62947b6df7801a0a156bc0a615d2d0d + requires_dist: + - cudf-cu12>=24.10.0 ; extra == 'cudf' + - dask[dataframe]>=2024.8 ; extra == 'dask' + - duckdb>=1.1 ; extra == 'duckdb' + - ibis-framework>=6.0.0 ; extra == 'ibis' + - packaging ; extra == 'ibis' + - pyarrow-hotfix ; extra == 'ibis' + - rich ; extra == 'ibis' + - modin ; extra == 'modin' + - pandas>=1.1.3 ; extra == 'pandas' + - polars>=0.20.4 ; extra == 'polars' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - pyspark>=3.5.0 ; extra == 'pyspark' + - pyspark[connect]>=3.5.0 ; extra == 'pyspark-connect' + - duckdb>=1.1 ; extra == 'sql' + - sqlparse ; extra == 'sql' + - sqlframe>=3.22.0,!=3.39.3 ; extra == 'sqlframe' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 md5: 47e340acb35de30501a76c7c799c41d7 @@ -2681,6 +5076,49 @@ packages: - numpy<2.0 ; python_full_version < '3.9' - numpy>=2 ; python_full_version >= '3.9' requires_python: '>=3.6' +- conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-hbde042b_1.conda + sha256: 2e185a3dc2bdc4525dd68559efa3f24fa9159a76c40473e320732b35115163b2 + md5: 3c40a106eadf7c14c6236ceddb267893 + depends: + - __glibc >=2.17,<3.0.a0 + - cyrus-sasl >=2.1.28,<3.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 + license: OLDAP-2.8 + license_family: BSD + purls: [] + size: 785570 + timestamp: 1771970256722 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openldap-2.6.10-h2fb54aa_1.conda + sha256: 32c9bd01e108a6983778c13b54ff6a99cb2eca188ce217db907819ec6d1d5db7 + md5: b761e5f1358577a16ca187c6116d9fcc + depends: + - cyrus-sasl >=2.1.28,<3.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 + license: OLDAP-2.8 + license_family: BSD + purls: [] + size: 907905 + timestamp: 1771970279050 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openldap-2.6.10-hf7f56bc_1.conda + sha256: e0b08e88f52391c829d347039c6152e3f39b8b0ca0baf85b42fa38e8edb2ff17 + md5: a9a018599629925fb1e597e5a730d2af + depends: + - __osx >=11.0 + - cyrus-sasl >=2.1.28,<3.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libcxx >=19 + - openssl >=3.5.5,<4.0a0 + license: OLDAP-2.8 + license_family: BSD + purls: [] + size: 843972 + timestamp: 1771970904727 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c md5: f61eb8cd60ff9057122a3d338b99c00f @@ -2745,6 +5183,417 @@ packages: - pkg:pypi/packaging?source=compressed-mapping size: 72010 timestamp: 1769093650580 +- pypi: https://files.pythonhosted.org/packages/3d/fe/89d77e424365280b79d99b3e1e7d606f5165af2f2ecfaf0c6d24c799d607/pandas-3.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: pandas + version: 3.0.1 + sha256: 532527a701281b9dd371e2f582ed9094f4c12dd9ffb82c0c54ee28d8ac9520c4 + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2024.2 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2024.2 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/75/08/67cc404b3a966b6df27b38370ddd96b3b023030b572283d035181854aac5/pandas-3.0.1-cp312-cp312-win_amd64.whl + name: pandas + version: 3.0.1 + sha256: 536232a5fe26dd989bd633e7a0c450705fdc86a207fec7254a55e9a22950fe43 + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2024.2 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2024.2 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/7c/f1/e2567ffc8951ab371db2e40b2fe068e36b81d8cf3260f06ae508700e5504/pandas-3.0.1-cp312-cp312-macosx_11_0_arm64.whl + name: pandas + version: 3.0.1 + sha256: 0ab749dfba921edf641d4036c4c21c0b3ea70fea478165cb98a998fb2a261955 + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2024.2 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2024.2 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/d7/39/327802e0b6d693182403c144edacbc27eb82907b57062f23ef5a4c4a5ea7/pandas-3.0.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl + name: pandas + version: 3.0.1 + sha256: b8e36891080b87823aff3640c78649b91b8ff6eea3c0d70aeabd72ea43ab069b + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2024.2 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2024.2 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff + md5: 7a3bff861a6583f1889021facefc08b1 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1222481 + timestamp: 1763655398280 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda + sha256: 04df2cee95feba440387f33f878e9f655521e69f4be33a0cd637f07d3d81f0f9 + md5: 1a30c42e32ca0ea216bd0bfe6f842f0b + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1166552 + timestamp: 1763655534263 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda + sha256: 5e2e443f796f2fd92adf7978286a525fb768c34e12b1ee9ded4000a41b2894ba + md5: 9b4190c4055435ca3502070186eba53a + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 850231 + timestamp: 1763655726735 +- conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda + sha256: 3e9e02174edf02cb4bcdd75668ad7b74b8061791a3bc8bdb8a52ae336761ba3e + md5: 77eaf2336f3ae749e712f63e36b0f0a1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 995992 + timestamp: 1763655708300 - pypi: https://files.pythonhosted.org/packages/3d/17/688626d192d7261bbbf98846fc98995726bddc2c945344b65bec3a29d731/pillow-12.1.1-cp312-cp312-win_amd64.whl name: pillow version: 12.1.1 @@ -2886,24 +5735,75 @@ packages: - pkg:pypi/pip?source=compressed-mapping size: 1181790 timestamp: 1770270305795 -- pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - name: platformdirs - version: 4.9.2 - sha256: 9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - name: pluggy - version: 1.6.0 - sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 - requires_dist: - - pre-commit ; extra == 'dev' - - tox ; extra == 'dev' - - pytest ; extra == 'testing' - - pytest-benchmark ; extra == 'testing' - - coverage ; extra == 'testing' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - name: pre-commit +- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + sha256: 43d37bc9ca3b257c5dd7bf76a8426addbdec381f6786ff441dc90b1a49143b6a + md5: c01af13bdc553d1a8fbfff6e8db075f0 + depends: + - libgcc >=14 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + purls: [] + size: 450960 + timestamp: 1754665235234 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda + sha256: e6b0846a998f2263629cfeac7bca73565c35af13251969f45d385db537a514e4 + md5: 1587081d537bd4ae77d1c0635d465ba5 + depends: + - libgcc >=14 + - libstdcxx >=14 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 357913 + timestamp: 1754665583353 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h81086ad_1.conda + sha256: 29c9b08a9b8b7810f9d4f159aecfd205fce051633169040005c0b7efad4bc718 + md5: 17c3d745db6ea72ae2fce17e7338547f + depends: + - __osx >=11.0 + - libcxx >=19 + license: MIT + license_family: MIT + purls: [] + size: 248045 + timestamp: 1754665282033 +- conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda + sha256: 246fce4706b3f8b247a7d6142ba8d732c95263d3c96e212b9d63d6a4ab4aff35 + md5: 08c8fa3b419df480d985e304f7884d35 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + size: 542795 + timestamp: 1754665193489 +- pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl + name: platformdirs + version: 4.9.2 + sha256: 9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + name: pluggy + version: 1.6.0 + sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + requires_dist: + - pre-commit ; extra == 'dev' + - tox ; extra == 'dev' + - pytest ; extra == 'testing' + - pytest-benchmark ; extra == 'testing' + - coverage ; extra == 'testing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl + name: pre-commit version: 4.5.1 sha256: 3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77 requires_dist: @@ -2933,6 +5833,27 @@ packages: version: 4.25.8 sha256: 83e6e54e93d2b696a92cad6e6efc924f3850f82b52e1563778dfab8b355101b0 requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8252 + timestamp: 1726802366959 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + sha256: 977dfb0cb3935d748521dd80262fe7169ab82920afd38ed14b7fee2ea5ec01ba + md5: bb5a90c93e3bac3d5690acf76b4a6386 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8342 + timestamp: 1726803319942 - pypi: https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl name: pyarrow version: 23.0.1 @@ -2982,12 +5903,112 @@ packages: version: 1.2.0 sha256: 9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913 requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/32/36/4c242f81fdcbfa4fb62a5645f6af79191f4097a0577bd5460c24f19cc4ef/pyqtgraph-0.14.0-py3-none-any.whl + name: pyqtgraph + version: 0.14.0 + sha256: 7abb7c3e17362add64f8711b474dffac5e7b0e9245abdf992e9a44119b7aa4f5 + requires_dist: + - numpy>=1.25.0 + - colorama + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl name: pyserial version: '3.5' sha256: c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0 requires_dist: - hidapi ; extra == 'cp2110' +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.10.2-py312h50ac2ff_1.conda + sha256: 18c8ffaca3d33e8617d600a79a1781b6de8e022039827254772a85651f4cebe6 + md5: 08452854f86c3190c3b0d4df1ae28555 + depends: + - python + - qt6-main 6.10.2.* + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libopengl >=1.7.0,<2.0a0 + - qt6-main >=6.10.2,<6.11.0a0 + - libclang13 >=21.1.8 + - libxslt >=1.1.43,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libegl >=1.7.0,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - python_abi 3.12.* *_cp312 + - libvulkan-loader >=1.4.341.0,<2.0a0 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/pyside6?source=compressed-mapping + size: 13096913 + timestamp: 1773742520312 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.10.2-py312hfc1e6cc_1.conda + sha256: 09feadf01ecf4f2eceb24b43052f65218af7be6a723c318416b6cd47f565ac32 + md5: b5dd45340bc6df6fa860906c2560f6b9 + depends: + - python + - qt6-main 6.10.2.* + - libstdcxx >=14 + - libgcc >=14 + - libgl >=1.7.0,<2.0a0 + - python_abi 3.12.* *_cp312 + - libegl >=1.7.0,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libclang13 >=21.1.8 + - libxslt >=1.1.43,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libopengl >=1.7.0,<2.0a0 + - qt6-main >=6.10.2,<6.11.0a0 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/pyside6?source=hash-mapping + - pkg:pypi/shiboken6?source=hash-mapping + size: 8726477 + timestamp: 1773742522966 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyside6-6.10.2-py312h4aa7bac_1.conda + sha256: 0cf9c6c953e1cdef58195c814e018c5103ecd0e656c0a8e61a44998b65eb995a + md5: 75bca82c716708c6c4059374137a81f0 + depends: + - python + - qt6-main 6.10.2.* + - libcxx >=19 + - __osx >=11.0 + - libxml2 + - libxml2-16 >=2.14.6 + - libxslt >=1.1.43,<2.0a0 + - python_abi 3.12.* *_cp312 + - libclang13 >=19.1.7 + - qt6-main >=6.10.2,<6.11.0a0 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/pyside6?source=compressed-mapping + size: 12771287 + timestamp: 1773742743051 +- conda: https://conda.anaconda.org/conda-forge/win-64/pyside6-6.10.2-py312ha7d0d2e_1.conda + sha256: 2b8265dc16dfbf23b31667f680c5ad3eb80f63e2332f93fb2b8e4373039019ac + md5: 8ffed66bebf43d73a2bb396e86324021 + depends: + - python + - qt6-main 6.10.2.* + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - qt6-main >=6.10.2,<6.11.0a0 + - python_abi 3.12.* *_cp312 + - libxml2 + - libxml2-16 >=2.14.6 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libxslt >=1.1.43,<2.0a0 + - libclang13 >=21.1.8 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/pyside6?source=compressed-mapping + size: 10993742 + timestamp: 1773742532174 - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl name: pytest version: 9.0.2 @@ -3163,6 +6184,17 @@ packages: - mypy-ipython ; extra == 'tests' - blessings ; extra == 'tests' requires_python: '>=3.9.0' +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + build_number: 8 + sha256: 80677180dd3c22deb7426ca89d6203f1c7f1f256f2d5a94dc210f6e758229809 + md5: c3efd25ac4d74b1584d2f7a57195ddf1 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6958 + timestamp: 1752805918820 - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl name: pywin32-ctypes version: 0.2.3 @@ -3216,6 +6248,208 @@ packages: - sip-python>=0.0.2 ; extra == 'sip' - qpsolvers[cvxopt,daqp,ecos,highs,piqp,proxqp,qpalm,sip] ; extra == 'wheels-only' requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.2-h17e89b9_5.conda + sha256: 94242e6623d10c08ebdaaf183056a15fc3b27b092a4cd826399ddabef7d51c2e + md5: 6c4f73c9a7e9b51f3a8e321c3e867bb6 + depends: + - __glibc >=2.17,<3.0.a0 + - alsa-lib >=1.2.15.3,<1.3.0a0 + - dbus >=1.16.2,<2.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - harfbuzz >=12.3.2 + - icu >=78.2,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libclang-cpp22.1 >=22.1.0,<22.2.0a0 + - libclang13 >=22.1.0 + - libcups >=2.3.3,<2.4.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - libegl >=1.7.0,<2.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libgl >=1.7.0,<2.0a0 + - libglib >=2.86.4,<3.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libllvm22 >=22.1.0,<22.2.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libpq >=18.2,<19.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libxkbcommon >=1.13.1,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - wayland >=1.24.0,<2.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxcomposite >=0.4.7,<1.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - xorg-libxxf86vm >=1.1.7,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - qt 6.10.2 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 56550801 + timestamp: 1772121854618 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.10.2-h4f79d1e_5.conda + sha256: 106170f525a3abed0f79b4b31f9192957d54547c274ac1a9741656a2fbbe666c + md5: c5a6c2e22d9e1a1ef8870a5997fe2eda + depends: + - alsa-lib >=1.2.15.3,<1.3.0a0 + - dbus >=1.16.2,<2.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - harfbuzz >=12.3.2 + - icu >=78.2,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libclang-cpp22.1 >=22.1.0,<22.2.0a0 + - libclang13 >=22.1.0 + - libcups >=2.3.3,<2.4.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - libegl >=1.7.0,<2.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libgl >=1.7.0,<2.0a0 + - libglib >=2.86.4,<3.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libllvm22 >=22.1.0,<22.2.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libpq >=18.2,<19.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libxkbcommon >=1.13.1,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - wayland >=1.24.0,<2.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxcomposite >=0.4.7,<1.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - xorg-libxxf86vm >=1.1.7,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - qt 6.10.2 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 58893291 + timestamp: 1772149304596 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/qt6-main-6.10.2-ha6d198a_5.conda + sha256: f54e2ae3886b4ca01cf611eb01c592163ffd595d788b15a4e8c770da9f434544 + md5: 27449652bf68f089d4f35754284baa7b + depends: + - __osx >=11.0 + - double-conversion >=3.4.0,<3.5.0a0 + - harfbuzz >=12.3.2 + - icu >=78.2,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libclang-cpp19.1 >=19.1.7,<19.2.0a0 + - libclang13 >=19.1.7 + - libcxx >=19 + - libglib >=2.86.4,<3.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libllvm19 >=19.1.7,<19.2.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libpq >=18.2,<19.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - qt 6.10.2 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 46935096 + timestamp: 1772148178819 +- conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.10.2-h35725d6_5.conda + sha256: 0c4dfea2b3dd9108ab08786092b373e089f34c17ec8f9c1f23da9917f9db3abe + md5: 193fcaa5c64aa817cd8cde92afbc9d4e + depends: + - double-conversion >=3.4.0,<3.5.0a0 + - harfbuzz >=12.3.2 + - icu >=78.2,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libclang13 >=21.1.8 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libglib >=2.86.4,<3.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - qt 6.10.2 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 86110363 + timestamp: 1772127760856 - pypi: https://files.pythonhosted.org/packages/10/5e/de8d3911e44699abc4e3ce835e69c3db76525af8018026f9bce61be69a43/quadprog-0.1.13-cp312-cp312-macosx_11_0_arm64.whl name: quadprog version: 0.1.13 @@ -3648,6 +6882,11 @@ packages: version: 1.17.0 sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl + name: smmap + version: 5.0.3 + sha256: c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/1e/0a/478e441fd049002cf308520c0d62dd8333e7c6cc8d997f0dda07b9fbcc46/sounddevice-0.5.5-py3-none-any.whl name: sounddevice version: 0.5.5 @@ -3672,6 +6911,68 @@ packages: - cffi - numpy ; extra == 'numpy' requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/67/87/039b6eeea781598015b538691bc174cc0bf77df9d4d2d3b8bf9245c0de8c/spidev-3.8.tar.gz + name: spidev + version: '3.8' + sha256: 2bc02fb8c6312d519ebf1f4331067427c0921d3f77b8bcaf05189a2e8b8382c0 +- conda: https://conda.anaconda.org/conda-forge/linux-64/swig-4.4.1-h7a96c5f_0.conda + sha256: 45ec1eedd1de2d7985955290015773a4adc9b8ea95d0f839aaabda2ed075d83c + md5: ce50bd18ea2a92833be8b62881929e23 + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - swig-abi ==5 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 1329174 + timestamp: 1773251886390 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/swig-4.4.1-h512d76c_0.conda + sha256: ac5e52ae7aededf3aa1489a8b4a47b2210915c2760f25c374dffba2335f014ee + md5: 91c99a0fec455afa9137c1d978445166 + depends: + - libstdcxx >=14 + - libgcc >=14 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - swig-abi ==5 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 1399015 + timestamp: 1773251896861 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/swig-4.4.1-h4366dc5_0.conda + sha256: 6491edeb3df94578b016015f78dd80bddc0f85e2624ed9cea79ad9f9f4b240ca + md5: f9a4ce9ad596a0feac7cc7aba8517389 + depends: + - libcxx >=19 + - __osx >=11.0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - swig-abi ==5 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 1189583 + timestamp: 1773252068990 +- conda: https://conda.anaconda.org/conda-forge/win-64/swig-4.4.1-h9b0202b_0.conda + sha256: f05e256f8edd14786c7832288e842f313b244a506975c2830ea9bbe7d4abc205 + md5: 0341bd38d90eae2041629f9084bb143a + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - swig-abi ==5 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 1154778 + timestamp: 1773251909868 - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda sha256: c47299fe37aebb0fcf674b3be588e67e4afb86225be4b0d452c7eb75c086b851 md5: 13dc3adbc692664cd3beabd216434749 @@ -3746,6 +7047,26 @@ packages: purls: [] size: 3526350 timestamp: 1769460339384 +- pypi: https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl + name: tornado + version: 6.5.5 + sha256: 6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/34/01/74e034a30ef59afb4097ef8659515e96a39d910b712a89af76f5e4e1f93c/tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl + name: tornado + version: 6.5.5 + sha256: 435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl + name: tornado + version: 6.5.5 + sha256: 487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: tornado + version: 6.5.5 + sha256: e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/61/7a/f38385f1b2d5f54221baf1db3d6371dc6eef8041d95abff39576c694e9d9/transforms3d-0.4.2-py3-none-any.whl name: transforms3d version: 0.4.2 @@ -3775,6 +7096,11 @@ packages: version: 4.15.0 sha256: f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + name: tzdata + version: '2025.3' + sha256: 06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 + requires_python: '>=2' - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c md5: ad659d0a2b3e47e38d829aa8cad2d610 @@ -3897,6 +7223,33 @@ packages: purls: [] size: 238764 timestamp: 1745560912727 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-hd6090a7_1.conda + sha256: 3aa04ae8e9521d9b56b562376d944c3e52b69f9d2a0667f77b8953464822e125 + md5: 035da2e4f5770f036ff704fa17aace24 + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 329779 + timestamp: 1761174273487 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h4f8a99f_1.conda + sha256: d94af8f287db764327ac7b48f6c0cd5c40da6ea2606afd34ac30671b7c85d8ee + md5: f6966cb1f000c230359ae98c29e37d87 + depends: + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 331480 + timestamp: 1761174368396 - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda sha256: d6cf2f0ebd5e09120c28ecba450556ce553752652d91795442f0e70f837126ae md5: bdbd7385b4a67025ac2dba4ef8cb6a8f @@ -3909,6 +7262,549 @@ packages: - pkg:pypi/wheel?source=hash-mapping size: 31858 timestamp: 1769139207397 +- pypi: https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl + name: win32-setctime + version: 1.2.0 + sha256: 95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390 + requires_dist: + - black>=19.3b0 ; python_full_version >= '3.6' and extra == 'dev' + - pytest>=4.6.2 ; extra == 'dev' + requires_python: '>=3.5' +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + sha256: ad8cab7e07e2af268449c2ce855cbb51f43f4664936eff679b1f3862e6e4b01d + md5: fdc27cb255a7a2cc73b7919a968b48f0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20772 + timestamp: 1750436796633 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda + sha256: d874906e236a5edc9309d479599bf2de4d8adca0f23c355b76759d5fb3c4bef8 + md5: 159ffec8f7fab775669a538f0b29373a + depends: + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 21517 + timestamp: 1750437961489 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + sha256: c2be9cae786fdb2df7c2387d2db31b285cf90ab3bfabda8fa75a596c3d20fc67 + md5: 4d1fc190b99912ed557a8236e958c559 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxcb >=1.13 + - libxcb >=1.17.0,<2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20829 + timestamp: 1763366954390 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-cursor-0.1.6-he30d5cf_0.conda + sha256: 2e31eeeac0ad76229a565f1df3a8fb4ea54852a68404a99558adab9c92c0ac4d + md5: 8b70063c86f7f9a0b045e78d2d9971f7 + depends: + - libgcc >=14 + - libxcb >=1.13 + - libxcb >=1.17.0,<2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 21639 + timestamp: 1763367131001 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + sha256: 94b12ff8b30260d9de4fd7a28cca12e028e572cbc504fd42aa2646ec4a5bded7 + md5: a0901183f08b6c7107aab109733a3c91 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + license: MIT + license_family: MIT + purls: [] + size: 24551 + timestamp: 1718880534789 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-image-0.4.0-h5c728e9_2.conda + sha256: a43058edc001e8fb97f9b291028a6ca16a8969d9b56a998c7aecea083323ac97 + md5: b82e5c78dbbfa931980e8bfe83bce913 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + license: MIT + license_family: MIT + purls: [] + size: 24910 + timestamp: 1718880504308 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + sha256: 546e3ee01e95a4c884b6401284bb22da449a2f4daf508d038fdfa0712fe4cc69 + md5: ad748ccca349aec3e91743e08b5e2b50 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14314 + timestamp: 1718846569232 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-keysyms-0.4.1-h5c728e9_0.conda + sha256: 9d92daa7feb0e14f81bf0d4b3f0b6ff1e8cec3ff514df8a0c06c4d49b518c315 + md5: 57ca8564599ddf8b633c4ea6afee6f3a + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14343 + timestamp: 1718846624153 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + sha256: 2d401dadc43855971ce008344a4b5bd804aca9487d8ebd83328592217daca3df + md5: 0e0cbe0564d03a99afd5fd7b362feecd + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 16978 + timestamp: 1718848865819 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-renderutil-0.3.10-h5c728e9_0.conda + sha256: 5827f5617c9741599f72bb7f090726f89c6ef91e4bada621895fdc2bbadfb0f1 + md5: 7beeda4223c5484ef72d89fb66b7e8c1 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 18139 + timestamp: 1718849914457 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + sha256: 31d44f297ad87a1e6510895740325a635dd204556aa7e079194a0034cdd7e66a + md5: 608e0ef8256b81d04456e8d211eee3e8 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 51689 + timestamp: 1718844051451 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-wm-0.4.2-h5c728e9_0.conda + sha256: 3f52cd8783e7d953c54266255fd11886c611c2620545eabc28ec8cf470ae8be7 + md5: f14dcda6894722e421da2b7dcffb0b78 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 50772 + timestamp: 1718845072660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + sha256: 19c2bb14bec84b0e995b56b752369775c75f1589314b43733948bb5f471a6915 + md5: b56e0c8432b56decafae7e78c5f29ba5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 399291 + timestamp: 1772021302485 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.47-he30d5cf_0.conda + sha256: ec7ff9dffbd41faa31a30fa0724699f05bca000d57c745a195ecdb56888a8605 + md5: 4ac707a4279972357712af099cd1ae50 + depends: + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 399629 + timestamp: 1772021320967 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b + md5: fb901ff28063514abb6046c9ec2c4a45 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 58628 + timestamp: 1734227592886 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda + sha256: a2ba1864403c7eb4194dacbfe2777acf3d596feae43aada8d1b478617ce45031 + md5: c8d8ec3e00cd0fd8a231789b91a7c5b7 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 60433 + timestamp: 1734229908988 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + sha256: 277841c43a39f738927145930ff963c5ce4c4dacf66637a3d95d802a64173250 + md5: 1c74ff8c35dcadf952a16f752ca5aa49 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libuuid >=2.38.1,<3.0a0 + - xorg-libice >=1.1.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 27590 + timestamp: 1741896361728 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda + sha256: b86a819cd16f90c01d9d81892155126d01555a20dabd5f3091da59d6309afd0a + md5: 2d1409c50882819cb1af2de82e2b7208 + depends: + - libgcc >=13 + - libuuid >=2.38.1,<3.0a0 + - xorg-libice >=1.1.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 28701 + timestamp: 1741897678254 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + sha256: 516d4060139dbb4de49a4dcdc6317a9353fb39ebd47789c14e6fe52de0deee42 + md5: 861fb6ccbc677bb9a9fb2468430b9c6a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 839652 + timestamp: 1770819209719 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda + sha256: cf886160e2ff580d77f7eb8ec1a77c41c2c5b05343e329bc35f0ddf40b8d92ab + md5: 22dd10425ef181e80e130db50675d615 + depends: + - libgcc >=14 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 869058 + timestamp: 1770819244991 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + sha256: 6bc6ab7a90a5d8ac94c7e300cc10beb0500eeba4b99822768ca2f2ef356f731b + md5: b2895afaf55bf96a8c8282a2e47a5de0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 15321 + timestamp: 1762976464266 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda + sha256: e9f6e931feeb2f40e1fdbafe41d3b665f1ab6cb39c5880a1fcf9f79a3f3c84a5 + md5: 1c246e1105000c3660558459e2fd6d43 + depends: + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 16317 + timestamp: 1762977521691 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + sha256: 048c103000af9541c919deef03ae7c5e9c570ffb4024b42ecb58dbde402e373a + md5: f2ba4192d38b6cef2bb2c25029071d90 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14415 + timestamp: 1770044404696 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcomposite-0.4.7-he30d5cf_0.conda + sha256: 554f986ffa781d3393079926931465e61291d1eb8a56a03ad4a8e54b1ae233f4 + md5: 9c639c1abdbfe6759c5beb2c1db4bc13 + depends: + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14915 + timestamp: 1770044415607 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + sha256: 832f538ade441b1eee863c8c91af9e69b356cd3e9e1350fff4fe36cc573fc91a + md5: 2ccd714aa2242315acaf0a67faea780b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 32533 + timestamp: 1730908305254 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcursor-1.2.3-h86ecc28_0.conda + sha256: c5d3692520762322a9598e7448492309f5ee9d8f3aff72d787cf06e77c42507f + md5: f2054759c2203d12d0007005e1f1296d + depends: + - libgcc >=13 + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 34596 + timestamp: 1730908388714 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + sha256: 43b9772fd6582bf401846642c4635c47a9b0e36ca08116b3ec3df36ab96e0ec0 + md5: b5fcc7172d22516e1f965490e65e33a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 13217 + timestamp: 1727891438799 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdamage-1.1.6-h86ecc28_0.conda + sha256: 3afaa2f43eb4cb679fc0c3d9d7c50f0f2c80cc5d3df01d5d5fd60655d0bfa9be + md5: d5773c4e4d64428d7ddaa01f6f845dc7 + depends: + - libgcc >=13 + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 13794 + timestamp: 1727891406431 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 + md5: 1dafce8548e38671bea82e3f5c6ce22f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 20591 + timestamp: 1762976546182 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda + sha256: 128d72f36bcc8d2b4cdbec07507542e437c7d67f677b7d77b71ed9eeac7d6df1 + md5: bff06dcde4a707339d66d45d96ceb2e2 + depends: + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 21039 + timestamp: 1762979038025 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + sha256: 79c60fc6acfd3d713d6340d3b4e296836a0f8c51602327b32794625826bd052f + md5: 34e54f03dfea3e7a2dcf1453a85f1085 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 50326 + timestamp: 1769445253162 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda + sha256: db2188bc0d844d4e9747bac7f6c1d067e390bd769c5ad897c93f1df759dc5dba + md5: fb42b683034619915863d68dd9df03a3 + depends: + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 52409 + timestamp: 1769446753771 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + sha256: 83c4c99d60b8784a611351220452a0a85b080668188dce5dfa394b723d7b64f4 + md5: ba231da7fccf9ea1e768caf5c7099b84 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20071 + timestamp: 1759282564045 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.2-he30d5cf_0.conda + sha256: 8cb9c88e25c57e47419e98f04f9ef3154ad96b9f858c88c570c7b91216a64d0e + md5: e8b4056544341daf1d415eaeae7a040c + depends: + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20704 + timestamp: 1759284028146 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + sha256: 1a724b47d98d7880f26da40e45f01728e7638e6ec69f35a3e11f92acd05f9e7a + md5: 17dcc85db3c7886650b8908b183d6876 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 47179 + timestamp: 1727799254088 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.2-h57736b2_0.conda + sha256: 7b587407ecb9ccd2bbaf0fb94c5dbdde4d015346df063e9502dc0ce2b682fb5e + md5: eeee3bdb31c6acde2b81ad1b8c287087 + depends: + - libgcc >=13 + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 48197 + timestamp: 1727801059062 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + sha256: 80ed047a5cb30632c3dc5804c7716131d767089f65877813d4ae855ee5c9d343 + md5: e192019153591938acf7322b6459d36e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 30456 + timestamp: 1769445263457 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.5-he30d5cf_0.conda + sha256: 9f5196665a8d72f4f119c40dcc4bafeb0b540b102cc7b8b299c2abf599e7919f + md5: 1f64c613f0b8d67e9fb0e165d898fb6b + depends: + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 31122 + timestamp: 1769445286951 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + sha256: 044c7b3153c224c6cedd4484dd91b389d2d7fd9c776ad0f4a34f099b3389f4a1 + md5: 96d57aba173e878a2089d5638016dc5e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 33005 + timestamp: 1734229037766 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda + sha256: ffd77ee860c9635a28cfda46163dcfe9224dc6248c62404c544ae6b564a0be1f + md5: ae2c2dd0e2d38d249887727db2af960e + depends: + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 33649 + timestamp: 1734229123157 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + sha256: 752fdaac5d58ed863bbf685bb6f98092fe1a488ea8ebb7ed7b606ccfce08637a + md5: 7bbe9a0cc0df0ac5f5a8ad6d6a11af2f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxi >=1.7.10,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 32808 + timestamp: 1727964811275 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda + sha256: 6eaffce5a34fc0a16a21ddeaefb597e792a263b1b0c387c1ce46b0a967d558e1 + md5: c05698071b5c8e0da82a282085845860 + depends: + - libgcc >=13 + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxi >=1.7.10,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 33786 + timestamp: 1727964907993 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + sha256: 64db17baaf36fa03ed8fae105e2e671a7383e22df4077486646f7dbf12842c9f + md5: 665d152b9c6e78da404086088077c844 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 18701 + timestamp: 1769434732453 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxxf86vm-1.1.7-he30d5cf_0.conda + sha256: 6f6f2b32754e09c2334e067ba5d2d38715f2432cd9fb41d6f66de0591f8f4f94 + md5: b15ca02584678f38df6e114c32f93959 + depends: + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 19148 + timestamp: 1769434729220 +- pypi: https://files.pythonhosted.org/packages/ef/5c/2c189d18d495dd0fa3f27ccc60762bbc787eed95b9b0147266e72bb76585/xyzservices-2025.11.0-py3-none-any.whl + name: xyzservices + version: 2025.11.0 + sha256: de66a7599a8d6dad63980b77defd1d8f5a5a9cb5fc8774ea1c6e89ca7c2a3d2f + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl name: zipp version: 3.23.0 @@ -3954,3 +7850,27 @@ packages: purls: [] size: 614429 timestamp: 1764777145593 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 + md5: ab136e4c34e97f34fb621d2592a393d8 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 433413 + timestamp: 1764777166076 +- conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + sha256: 368d8628424966fd8f9c8018326a9c779e06913dd39e646cf331226acc90e5b2 + md5: 053b84beec00b71ea8ff7a4f84b55207 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 388453 + timestamp: 1764777142545 diff --git a/pixi.toml b/pixi.toml index 9502636..d4ae5a3 100644 --- a/pixi.toml +++ b/pixi.toml @@ -10,6 +10,8 @@ platforms = ["linux-64", "win-64", "linux-aarch64", "osx-arm64"] python = "3.12.*" pip = "*" rust = "*" +pyside6 = "*" +swig = "*" [target.win-64.dependencies] # Provides activation that runs vcvars64, putting MSVC link.exe on PATH so Rust finds it (not Git's link) @@ -43,7 +45,6 @@ pyserial = ">=3.5" lgpio = "*" spidev = "*" loguru = "*" -PySide6 = "*" pyqtgraph = "*" bokeh = "*" pandas = "*" From 64b65c6cc49872064d61e44bb59bb8badbae3e17 Mon Sep 17 00:00:00 2001 From: kbhakt Date: Wed, 18 Mar 2026 22:53:20 -0700 Subject: [PATCH 3/6] add haptic test script --- Demo/Sensors/__init__.py | 0 Demo/Sensors/haptic_test.py | 76 +++++++++++++++++++++++++++++++++++++ Demo/__init__.py | 0 3 files changed, 76 insertions(+) create mode 100644 Demo/Sensors/__init__.py create mode 100644 Demo/Sensors/haptic_test.py create mode 100644 Demo/__init__.py diff --git a/Demo/Sensors/__init__.py b/Demo/Sensors/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Demo/Sensors/haptic_test.py b/Demo/Sensors/haptic_test.py new file mode 100644 index 0000000..57fac1d --- /dev/null +++ b/Demo/Sensors/haptic_test.py @@ -0,0 +1,76 @@ +""" +haptic_test.py — Interactive test script for HapticCoin (QYF-740 motor). + +Run with: + python haptic_test.py [--pin 19] + +Uses Ctrl-C to exit any continuous mode. +""" + +import argparse +import sys +from loguru import logger +from .haptic_coin import HapticCoin + + +def parse_args(): + parser = argparse.ArgumentParser(description="HapticCoin test script") + parser.add_argument("--pin", type=int, default=19, help="GPIO pin (default: 19)") + return parser.parse_args() + + +def print_menu(): + print("\n--- HapticCoin Test Menu ---") + print("1. Single vibration pulse") + print("2. Vibration at custom intensity") + print("3. Continuous vibration (Ctrl-C to stop)") + print("4. Ramp modulation (Ctrl-C to stop)") + print("q. Quit") + print("----------------------------") + + +def main(): + args = parse_args() + haptic = HapticCoin(gpio_pin=args.pin) + + while True: + print_menu() + choice = input("Select option: ").strip().lower() + + if choice == "1": + haptic.vibrate_once(intensity=1.0, duration_s=0.5) + logger.info("Single pulse done") + + elif choice == "2": + try: + intensity = float(input("Intensity (0.0–1.0): ")) + duration = float(input("Duration (seconds): ")) + haptic.vibrate_once(intensity=intensity, duration_s=duration) + except ValueError: + print("Invalid input — enter numeric values.") + + elif choice == "3": + try: + intensity = float(input("Intensity (0.0–1.0): ")) + interval = float(input("On/off interval (seconds): ")) + except ValueError: + print("Invalid input — enter numeric values.") + continue + logger.info("Starting continuous vibration — press Ctrl-C to stop") + haptic.vibration_magnitude(intensity=intensity, timing_interval_s=interval) + + elif choice == "4": + logger.info("Starting ramp modulation — press Ctrl-C to stop") + haptic.modulate_vibration(step=5, delay_s=0.05, pause_s=1.0) + + elif choice == "q": + haptic.cleanup() + logger.info("Exiting") + sys.exit(0) + + else: + print("Unknown option — try again.") + + +if __name__ == "__main__": + main() diff --git a/Demo/__init__.py b/Demo/__init__.py new file mode 100644 index 0000000..e69de29 From c0ece5848ad8ed3203439a2d60b1a1de1dc1b9d7 Mon Sep 17 00:00:00 2001 From: kbhakt Date: Sun, 22 Mar 2026 16:31:11 -0700 Subject: [PATCH 4/6] Update pixi.lock after adding sensor dependencies --- .github/workflows/ci.yml | 2 +- pixi.lock | 1288 +++++++++++++++++++------------------- 2 files changed, 635 insertions(+), 655 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7ae0a2a..0c82821 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: cache: ${{ !env.ACT }} - name: Install system deps for AHControl (Rust) - run: sudo apt-get update && sudo apt-get install -y libudev-dev pkg-config + run: sudo apt-get update && sudo apt-get install -y libudev-dev pkg-config liblgpio-dev - name: Run pre-commit run: pixi run pre-commit run --all-files diff --git a/pixi.lock b/pixi.lock index 46832cc..d57b645 100644 --- a/pixi.lock +++ b/pixi.lock @@ -11,7 +11,7 @@ environments: 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/alsa-lib-1.2.15.3-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda @@ -27,12 +27,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he420e7e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.1.1-h6083320_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.2.0-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.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_101.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/lerc-4.1.0-hdb68285_0.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 @@ -67,7 +67,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.3-h9abb657_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_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/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_118.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda @@ -80,7 +80,7 @@ environments: - 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/libxslt-1.1.43-h711ed8c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.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/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-hbde042b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda @@ -90,18 +90,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.10.2-py312h50ac2ff_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.12-hd63d673_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.2-h17e89b9_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.2-pl5321h16c4a6b_6.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/rust-1.93.1-h53717f1_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-unknown-linux-gnu-1.93.1-h2c6d0dc_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rust-1.94.0-h53717f1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-unknown-linux-gnu-1.94.0-h2c6d0dc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/swig-4.4.1-h7a96c5f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.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/wayland-1.24.0-hd6090a7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda @@ -127,47 +127,46 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/0b/bdf449df87be3f07b23091ceafee8c3ef569cf6d2fb7edec6e3b12b3faa4/bokeh-3.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/a6/ddd0f130e44a7593ac6c55aa93f6e256d2270fd88e9d1b64ab7f22ab8fde/colorzero-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/76/c4aa9e408dbacee3f4de8e6c5417e5f55de7e62fb5a50300e1233a2c9cb5/commentjson-0.9.0.tar.gz - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/97/84/f8a89433fd182a850aa8db9c0cfffc9d2ebf7347b34eb5e203c8488459a2/daqp-0.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/95/89/92d46052584e7977630583cf79ffdd26a377681e45d0ae5e6d5ef25dcc05/daqp-0.8.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/af/78aaff4eff5bc850041035673971925ee2650a7ea1173d33ad35bd7d056c/dora_rs-0.3.13-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/da/77/20163e4df61f2c8e9e36619b2e23f4bec073885be46774709b0c58a5159d/dora_rs_cli-0.3.13-cp37-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/3d/589663aeeacd59bb2f3e8596bfd3e81cf0fb18d70bb433199041f469771b/etils-1.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/37/82dbef0f6342eb01f54bca073ac1498433d6ce71e50c3c3282b655733b31/fonttools-4.61.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9b/8a/99c8b3c3888c5c474c08dbfd7c8899786de9604b727fcefb055b42c84bba/fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/02/eb/6518a1b00488d48995034226846653c382d676cf5f04be62b3c3fae2c6a1/gpiozero-2.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/53/6b/b381bda5850f5611822d791cd25dfe36efda2688a68c4dda0f8a92c36dec/jaxlib-0.9.1-cp312-cp312-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/17/9c/e897231c880f69e32251d3b1145894d7a04e4342d9bef8d29644c440d11b/jax-0.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/33/a0/ddb3a71359c1df61f3edc408936b5bda7ed402e78ae7e9ef6afd438577c6/jaxlib-0.9.2-cp312-cp312-manylinux_2_27_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/70/90/6d240beb0f24b74371762873e9b7f499f1e02166a2d9c5801f4dbf8fa12e/kiwisolver-1.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/34/b8/aa7d6cf2d5efdd2fcd85cf39b33584fe12a0f7086ed451176ceb7fb510eb/lark-parser-0.7.8.tar.gz - pypi: https://files.pythonhosted.org/packages/56/33/26ec2e8049eaa2f077bf23a12dc61ca559fbfa7bea0516bf263d657ae275/lgpio-0.2.2.0.tar.gz - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl @@ -180,11 +179,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/15/6f/64c5dd93f1d19de05709e5c6ac66f6abe89d280838b434e9075f94e30b65/mink-1.1.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3a/cb/28ce52eb94390dda42599c98ea0204d74799e4d8047a0eb559b6fd648056/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/8a/229e4db3692be55532e155e2ca6a1363752243ee79df0e7e22ba00f716cf/mujoco-3.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/52/6c/5ec4e93676a65064a6591176772e00cfa02716156a1d0a7d646a8203348f/mujoco-3.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bd/79/cc665495e4d57d0aa6fbcc0aa57aa82671dfc78fbf95fe733ed86d98f52a/numpy-2.4.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ea/2c/e17b8814050427929077639d35a42187a006922600d4840475bdc5f64ebb/numpy_stl-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/0a/8c35465fb5bd481d4299534d9d1dce8bf71474d4edc569133fb4b721f3bc/onshape_to_robot-1.8.1.tar.gz - pypi: https://files.pythonhosted.org/packages/ba/f6/3c645c21358079097201090de7c30d110f5ec3fa01008e3ee81b0a77a354/opencv_contrib_python-4.13.0.92-cp37-abi3-manylinux_2_28_x86_64.whl @@ -192,7 +191,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3d/fe/89d77e424365280b79d99b3e1e7d606f5165af2f2ecfaf0c6d24c799d607/pandas-3.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ff/79/6df7b2ee763d619cda2fb4fea498e5f79d984dae304d45a8999b80d6cf5c/pillow-12.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/c6/c9deaa6e789b6fc41b88ccbdfe7a42d2b82663248b715f55aa77fbc00724/protobuf-4.25.8-cp37-abi3-manylinux2014_x86_64.whl @@ -206,11 +205,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/3c/2005227cb951df502412de2fa781f800663cccbef8d90ec6f1b371ac2c0d/python_discovery-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/69/31c82567719b34d8f6b41077732589104883771d182a9f4ff3e71430999a/python_utils-3.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/76/e6/e6893547135170c23133bac241d5031b0f2002d61675f2166dcbeeb27fbf/qpsolvers-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/36/bb438a1ab5270be8a0d294a2734b31ebfabe8b1b41fde08f43966118b7e2/qpsolvers-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/64/72ae344963db87a15e8566b8c4f1408080ad5746c8e1c32f8d04911074bb/quadprog-0.1.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl @@ -229,14 +228,14 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/a9/2735cc9dc39457c9cf64d1ce2ba5a9a8ecbb103d0fb64b052bf33ba3d669/uv-0.10.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/42/139e68d7d92bb90a33b5e269dbe474acb00b6c9797541032f859c5bf4c4d/uv-0.10.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/5c/2c189d18d495dd0fa3f27ccc60762bbc787eed95b9b0147266e72bb76585/xyzservices-2025.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.3-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda @@ -252,12 +251,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-hcedddb3_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-13.1.1-h1134a53_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-13.2.0-h1134a53_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda @@ -292,7 +291,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.3-h7d4fc67_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_118.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda @@ -305,7 +304,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.2-h79dcc73_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.2-h825857f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxslt-1.1.43-h6700d25_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openldap-2.6.10-h2fb54aa_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda @@ -315,18 +314,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.10.2-py312hfc1e6cc_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.12-h91f4b29_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.13-h91f4b29_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.10.2-h4f79d1e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.10.2-pl5321h598db47_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rust-1.93.1-h6cf38e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-unknown-linux-gnu-1.93.1-hbe8e118_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rust-1.94.0-h6cf38e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-unknown-linux-gnu-1.94.0-hbe8e118_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/swig-4.4.1-h512d76c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-aarch64-2.28-h585391f_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h4f8a99f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.25.0-h4f8a99f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-cursor-0.1.6-he30d5cf_0.conda @@ -352,47 +351,46 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxxf86vm-1.1.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/0b/bdf449df87be3f07b23091ceafee8c3ef569cf6d2fb7edec6e3b12b3faa4/bokeh-3.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/a8/37/bdca6613c2e3c58c7421891d80cc3efa1d32e882f7c4a7ee6039c3fc951a/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/a6/ddd0f130e44a7593ac6c55aa93f6e256d2270fd88e9d1b64ab7f22ab8fde/colorzero-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/76/c4aa9e408dbacee3f4de8e6c5417e5f55de7e62fb5a50300e1233a2c9cb5/commentjson-0.9.0.tar.gz - pypi: https://files.pythonhosted.org/packages/d4/1c/a12359b9b2ca3a845e8f7f9ac08bdf776114eb931392fcad91743e2ea17b/contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/37/53/a18500f270342d66bf7e4d9f091114e31e5ee9e7375a5aba2e85a91e0044/cryptography-46.0.5-cp311-abi3-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2f/2a/b0a896f1aa8618fae09acf508f0bb0192022383dbf73bea76143345167c8/daqp-0.7.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/e3/8c/1f034921f93cc6d678c05bd496da7667d03be3ff01aa37b150eda6ebb006/daqp-0.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/59/d5/64a3e1dadfa72aed14d9dc1a2e11b4acbef9dfb850ad3eeed1293b63ea26/dora_rs-0.3.13-cp37-abi3-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/90/2a/e66c6cbf19f05ec38ecab7ca3d0ecdb3b5a9450050087c12b6e1d3025699/dora_rs_cli-0.3.13-cp37-abi3-manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/3d/589663aeeacd59bb2f3e8596bfd3e81cf0fb18d70bb433199041f469771b/etils-1.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6c/44/f3aeac0fa98e7ad527f479e161aca6c3a1e47bb6996b053d45226fe37bf2/fonttools-4.61.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/69/64/f19a9e3911968c37e1e620e14dfc5778299e1474f72f4e57c5ec771d9489/fonttools-4.62.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/b4/f7b6cc022dd7c68b6c702d19da5d591f978f89c958b9bd3090615db0c739/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/02/eb/6518a1b00488d48995034226846653c382d676cf5f04be62b3c3fae2c6a1/gpiozero-2.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f8/b9/e0419783cbff9fa3bbc053dbe130f9051f60de4f424f650d70aae7f3bdf1/jaxlib-0.9.1-cp312-cp312-manylinux_2_27_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/17/9c/e897231c880f69e32251d3b1145894d7a04e4342d9bef8d29644c440d11b/jax-0.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/79/699aa47d2256b2edbb75a68a8f1a1ee4d34dfb84b8842a963caeb9a8cb03/jaxlib-0.9.2-cp312-cp312-manylinux_2_27_aarch64.whl - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/42/f36816eaf465220f683fb711efdd1bbf7a7005a2473d0e4ed421389bd26c/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/c8/2f/cebfcdb60fd6a9b0f6b47a9337198bcbad6fbe15e68189b7011fd914911f/kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/34/b8/aa7d6cf2d5efdd2fcd85cf39b33584fe12a0f7086ed451176ceb7fb510eb/lark-parser-0.7.8.tar.gz - pypi: https://files.pythonhosted.org/packages/56/33/26ec2e8049eaa2f077bf23a12dc61ca559fbfa7bea0516bf263d657ae275/lgpio-0.2.2.0.tar.gz - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl @@ -405,11 +403,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/9c/71/3b219f6563b5a1a4e7bda894d7314b9eea1a5ec53d5cc3975b7951c6e84a/mink-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/54/0f/428ef6881782e5ebb7eca459689448c0394fa0a80bea3aa9262cba5445ea/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/7b/c1612ec68d98e5f3dbc5b8a21ff5d40ab52409fcc89ea7afc8a197983297/mujoco-3.5.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/2c/cc/2aae89c3a83fed29ccb9057c05fb4a218b2a42c6dea136d9a78fea6b39f8/mujoco-3.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/43/d2011a4f6c0272cb122eeff40062ee06bb2b6e57eabc3a5e057df0d582df/nh3-0.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/91/b97fdfd12dc75b02c44e26c6638241cc004d4079a0321a69c62f51470c4c/numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/7b/12/8c9f0c6c95f76aeb20fc4a699c33e9f827fa0d0f857747c73bb7b17af945/numpy-2.4.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/ea/2c/e17b8814050427929077639d35a42187a006922600d4840475bdc5f64ebb/numpy_stl-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/0a/8c35465fb5bd481d4299534d9d1dce8bf71474d4edc569133fb4b721f3bc/onshape_to_robot-1.8.1.tar.gz - pypi: https://files.pythonhosted.org/packages/f3/11/10c46e9527c4591d5264117debd8fe0e21bb23dbf378ce760add6b1e85b6/opencv_contrib_python-4.13.0.92-cp37-abi3-manylinux_2_28_aarch64.whl @@ -417,7 +415,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/39/327802e0b6d693182403c144edacbc27eb82907b57062f23ef5a4c4a5ea7/pandas-3.0.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/b2/8b/07587069c27be7535ac1fe33874e32de118fbd34e2a73b7f83436a88368c/pillow-12.1.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/6d/a4a198b61808dd3d1ee187082ccc21499bc949d639feb948961b48be9a7e/protobuf-4.25.8-cp37-abi3-manylinux2014_aarch64.whl @@ -431,11 +429,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/3c/2005227cb951df502412de2fa781f800663cccbef8d90ec6f1b371ac2c0d/python_discovery-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/69/31c82567719b34d8f6b41077732589104883771d182a9f4ff3e71430999a/python_utils-3.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/76/e6/e6893547135170c23133bac241d5031b0f2002d61675f2166dcbeeb27fbf/qpsolvers-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/36/bb438a1ab5270be8a0d294a2734b31ebfabe8b1b41fde08f43966118b7e2/qpsolvers-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/60/fb9b56d425c5b3495bb92683c28f954aedb609ae62f14c81a1b5621ad759/quadprog-0.1.13.tar.gz - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl @@ -454,8 +452,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/20/5f/5f204e9c3f04f5fc844d2f98d80a7de64b6b304af869644ab478d909f6ff/uv-0.10.7-py3-none-manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/75/40b237d005e4cdef9f960c215d3e2c0ab4f459ca009c3800cdcb07fbaa1d/uv-0.10.12-py3-none-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/5c/2c189d18d495dd0fa3f27ccc60762bbc787eed95b9b0147266e72bb76585/xyzservices-2025.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl osx-arm64: @@ -472,8 +470,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.14-hec049ff_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-13.1.1-h3103d1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-13.2.0-h3103d1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda @@ -498,13 +496,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libntlm-1.8-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.55-h132b30e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpq-18.3-hd341ff2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.2-h5ef1a60_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.2-h8d039ee_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxslt-1.1.43-hb2570ba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openldap-2.6.10-hf7f56bc_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda @@ -513,58 +511,57 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h81086ad_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyside6-6.10.2-py312h4aa7bac_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.12-h18782d2_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qt6-main-6.10.2-ha6d198a_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qt6-main-6.10.2-pl5321h01fc3ab_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rust-1.93.1-h4ff7c5d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-apple-darwin-1.93.1-hf6ec828_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rust-1.94.0-h4ff7c5d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-apple-darwin-1.94.0-hf6ec828_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/swig-4.4.1-h4366dc5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/0b/bdf449df87be3f07b23091ceafee8c3ef569cf6d2fb7edec6e3b12b3faa4/bokeh-3.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/e5/62/c0815c992c9545347aeea7859b50dc9044d147e2e7278329c6e02ac9a616/charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/a6/ddd0f130e44a7593ac6c55aa93f6e256d2270fd88e9d1b64ab7f22ab8fde/colorzero-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/76/c4aa9e408dbacee3f4de8e6c5417e5f55de7e62fb5a50300e1233a2c9cb5/commentjson-0.9.0.tar.gz - pypi: https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/08/041461120e16bab05ea163afdb88fab452aefa9cbeadb9b91b3ec4f23635/daqp-0.7.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/2e/32/0102e237dbcd47224fc638905354fcecb48097763b291e43a9e6a03d706b/daqp-0.8.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/59/8f/c5e43fc1a9bf27cd34cd98d5ad48ce18429851ae67977ae5be8f2ab0eccf/dora_rs-0.3.13-cp37-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/19/1e/2c9be5ca5a99bee5150cc76ff654f67c8d0e4b85e64f9cdd81d4ec138cf0/dora_rs_cli-0.3.13-cp37-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/3d/589663aeeacd59bb2f3e8596bfd3e81cf0fb18d70bb433199041f469771b/etils-1.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6f/16/7decaa24a1bd3a70c607b2e29f0adc6159f36a7e40eaba59846414765fd4/fonttools-4.61.1-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/02/eb/6518a1b00488d48995034226846653c382d676cf5f04be62b3c3fae2c6a1/gpiozero-2.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8f/06/59b1da0a3b2450a4abbf66cbb3bbfe0b14f9723b1f8997c0178db3549e54/jaxlib-0.9.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/17/9c/e897231c880f69e32251d3b1145894d7a04e4342d9bef8d29644c440d11b/jax-0.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/15/ff3d9fde15b5146a0164505085312d8c9c0b0bbd7be5a15218ead2593307/jaxlib-0.9.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/5a/51f5464373ce2aeb5194508298a508b6f21d3867f499556263c64c621914/kiwisolver-1.4.9-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/99/9f/795fedf35634f746151ca8839d05681ceb6287fbed6cc1c9bf235f7887c2/kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/34/b8/aa7d6cf2d5efdd2fcd85cf39b33584fe12a0f7086ed451176ceb7fb510eb/lark-parser-0.7.8.tar.gz - pypi: https://files.pythonhosted.org/packages/56/33/26ec2e8049eaa2f077bf23a12dc61ca559fbfa7bea0516bf263d657ae275/lgpio-0.2.2.0.tar.gz - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl @@ -577,11 +574,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/3d/97e4b9736f7d983d87f872eb80bbdc256a903ae1e4481f24bf3c317e376e/mink-1.1.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a8/b8/3c70881695e056f8a32f8b941126cf78775d9a4d7feba8abcb52cb7b04f2/ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/d4/d0032323f58a9b8080b8464c6aade8d5ac2e101dbed1de64a38b3913b446/mujoco-3.5.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/26/55/7407eced2c44fbea233302d2c11e778852ea0f2eb0e14610f13a7e0d6ac7/mujoco-3.6.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1f/f8/55483431f2b2fd015ae6ed4fe62288823ce908437ed49db5a03d15151678/numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/74/1b/ee2abfc68e1ce728b2958b6ba831d65c62e1b13ce3017c13943f8f9b5b2e/numpy-2.4.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ea/2c/e17b8814050427929077639d35a42187a006922600d4840475bdc5f64ebb/numpy_stl-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/0a/8c35465fb5bd481d4299534d9d1dce8bf71474d4edc569133fb4b721f3bc/onshape_to_robot-1.8.1.tar.gz - pypi: https://files.pythonhosted.org/packages/7e/4c/a45c96b9fe90b2c48ee604f5176eb7deb46ce7c2e87c8d819d2945dbcab6/opencv_contrib_python-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl @@ -589,7 +586,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7c/f1/e2567ffc8951ab371db2e40b2fe068e36b81d8cf3260f06ae508700e5504/pandas-3.0.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/d6/71/5026395b290ff404b836e636f51d7297e6c83beceaa87c592718747e670f/pillow-12.1.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/d7/ab27049a035b258dab43445eb6ec84a26277b16105b277cbe0a7698bdc6c/protobuf-4.25.8-cp37-abi3-macosx_10_9_universal2.whl @@ -603,11 +600,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/3c/2005227cb951df502412de2fa781f800663cccbef8d90ec6f1b371ac2c0d/python_discovery-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/69/31c82567719b34d8f6b41077732589104883771d182a9f4ff3e71430999a/python_utils-3.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/76/e6/e6893547135170c23133bac241d5031b0f2002d61675f2166dcbeeb27fbf/qpsolvers-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/36/bb438a1ab5270be8a0d294a2734b31ebfabe8b1b41fde08f43966118b7e2/qpsolvers-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/5e/de8d3911e44699abc4e3ce835e69c3db76525af8018026f9bce61be69a43/quadprog-0.1.13-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl @@ -625,8 +622,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5e/15/8365dc2ded350a4ee5fcbbf9b15195cb2b45855114f2a154b5effb6fa791/uv-0.10.7-py3-none-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/db/c41ace81b8ef5d5952433df38e321c0b6e5f88ce210c508b14f84817963f/uv-0.10.12-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/5c/2c189d18d495dd0fa3f27ccc60762bbc787eed95b9b0147266e72bb76585/xyzservices-2025.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl win-64: @@ -642,7 +639,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.14-hac47afa_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-13.1.1-h5a1b470_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-13.2.0-h5a1b470_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda @@ -661,26 +658,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.55-h7351971_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h3cfd58e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h779ef1b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.43-h0fbe4c1_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pyside6-6.10.2-py312ha7d0d2e_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.12-h0159041_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.13-h0159041_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.10.2-h35725d6_5.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/rust-1.93.1-hf8d6059_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-pc-windows-msvc-1.93.1-h17fc481_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.10.2-pl5321hfcac499_6.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/rust-1.94.0-hf8d6059_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-pc-windows-msvc-1.94.0-h17fc481_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/swig-4.4.1-h9b0202b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda @@ -693,45 +690,44 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/0b/bdf449df87be3f07b23091ceafee8c3ef569cf6d2fb7edec6e3b12b3faa4/bokeh-3.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ab/20/0567efb3a8fd481b8f34f739ebddc098ed062a59fed41a8d193a61939e8f/charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/a6/ddd0f130e44a7593ac6c55aa93f6e256d2270fd88e9d1b64ab7f22ab8fde/colorzero-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/76/c4aa9e408dbacee3f4de8e6c5417e5f55de7e62fb5a50300e1233a2c9cb5/commentjson-0.9.0.tar.gz - pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ea/72/3bbbb5c5da4b982f420000ee4465b46b35d802bfbc73c1f3b772585c8b86/daqp-0.7.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4f/c2/a2a2c30c771f53f6ee68778096e7347eeb65f876fafcaf34a6428131931a/daqp-0.8.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/72/7e6881a2c9d0513e65e93f6f8343c5e66b46bee1e1de0d4d39d5fd3d1b7e/dora_rs-0.3.13-cp37-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/eb/29/005e12a00e4475c30185f4a3998fa82370eba689a8133227ef591924ee37/dora_rs_cli-0.3.13-cp37-abi3-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/3d/589663aeeacd59bb2f3e8596bfd3e81cf0fb18d70bb433199041f469771b/etils-1.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/3b/a3e81b71aed5a688e89dfe0e2694b26b78c7d7f39a5ffd8a7d75f54a12a8/fonttools-4.61.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/28/b1/0c2ab56a16f409c6c8a68816e6af707827ad5d629634691ff60a52879792/fonttools-4.62.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/e1/6d6816b296a529ac9b897ad228b1e084eb1f92319e96371880eebdc874a6/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/02/eb/6518a1b00488d48995034226846653c382d676cf5f04be62b3c3fae2c6a1/gpiozero-2.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6c/e9/e4dc1f699b894651f3d3ed6622c3c113c21003c2ed832ab00ed62055062b/jaxlib-0.9.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/17/9c/e897231c880f69e32251d3b1145894d7a04e4342d9bef8d29644c440d11b/jax-0.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/57/09d6a9e2a8bc8e3ea79eb8e980f8ea2aea2d9dec3793755f5765657f6e11/jaxlib-0.9.2-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/41/85d82b0291db7504da3c2defe35c9a8a5c9803a730f297bd823d11d5fb77/kiwisolver-1.4.9-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ad/cf/0348374369ca588f8fe9c338fae49fa4e16eeb10ffb3d012f23a54578a9e/kiwisolver-1.5.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/34/b8/aa7d6cf2d5efdd2fcd85cf39b33584fe12a0f7086ed451176ceb7fb510eb/lark-parser-0.7.8.tar.gz - pypi: https://files.pythonhosted.org/packages/56/33/26ec2e8049eaa2f077bf23a12dc61ca559fbfa7bea0516bf263d657ae275/lgpio-0.2.2.0.tar.gz - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl @@ -744,11 +740,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/99/7f/cfba1085a845ce188259d25c72d3180c4f7431c566125f6b171f2fd62d06/mink-1.1.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f5/f0/0cfadd537c5470378b1b32bd859cf2824972174b51b873c9d95cfd7475a5/ml_dtypes-0.5.4-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/37/527d83610b878f27c01dd762e0e41aaa62f095c607f0500ac7f724a2c7a5/mujoco-3.5.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/92/22/38d82f0c34213af53afbbb248b3442943ef48ffbac1e4c909b321e02ac56/mujoco-3.6.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/0f/7ceaaeaacb40567071e94dbf2c9480c0ae453d5bb4f52bea3892c39dc83c/numpy-2.4.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/d7/7c/f5ee1bf6ed888494978046a809df2882aad35d414b622893322df7286879/numpy-2.4.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/ea/2c/e17b8814050427929077639d35a42187a006922600d4840475bdc5f64ebb/numpy_stl-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/0a/8c35465fb5bd481d4299534d9d1dce8bf71474d4edc569133fb4b721f3bc/onshape_to_robot-1.8.1.tar.gz - pypi: https://files.pythonhosted.org/packages/d9/98/a03f69ff6fb86a67d584ecc990d85a95e6930b96e3f39ad1f8e019cb8ada/opencv_contrib_python-4.13.0.92-cp37-abi3-win_amd64.whl @@ -756,7 +752,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/75/08/67cc404b3a966b6df27b38370ddd96b3b023030b572283d035181854aac5/pandas-3.0.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3d/17/688626d192d7261bbbf98846fc98995726bddc2c945344b65bec3a29d731/pillow-12.1.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/08/35/8b8a8405c564caf4ba835b1fdf554da869954712b26d8f2a98c0e434469b/protobuf-4.25.8-cp310-abi3-win_amd64.whl @@ -770,12 +766,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/3c/2005227cb951df502412de2fa781f800663cccbef8d90ec6f1b371ac2c0d/python_discovery-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/69/31c82567719b34d8f6b41077732589104883771d182a9f4ff3e71430999a/python_utils-3.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/76/e6/e6893547135170c23133bac241d5031b0f2002d61675f2166dcbeeb27fbf/qpsolvers-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/36/bb438a1ab5270be8a0d294a2734b31ebfabe8b1b41fde08f43966118b7e2/qpsolvers-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/11/4f8b99099215f6e7f2c8ca9756c590e561d1d3093fedb51a960dc609e347/quadprog-0.1.13-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl @@ -794,8 +790,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/1f/74f4d625db838f716a555908d41777b6357bacc141ddef117a01855e5ef9/uv-0.10.7-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/9c/1954092ce17c00a8c299d39f8121e4c8d60f22a69c103f34d8b8dc68444d/uv-0.10.12-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/5c/2c189d18d495dd0fa3f27ccc60762bbc787eed95b9b0147266e72bb76585/xyzservices-2025.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl @@ -853,35 +849,33 @@ packages: purls: [] size: 615729 timestamp: 1768327548407 -- pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl name: attrs - version: 25.4.0 - sha256: adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373 + version: 26.1.0 + sha256: c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda - sha256: 74341b26a2b9475dc14ba3cf12432fcd10a23af285101883e720216d81d44676 - md5: 83aa53cb3f5fc849851a84d777a60551 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + sha256: 0a7d405064f53b9d91d92515f1460f7906ee5e8523f3cd8973430e81219f4917 + md5: 8165352fdce2d2025bf884dc0ee85700 depends: - - ld_impl_linux-64 2.45.1 default_hbd61a6d_101 + - ld_impl_linux-64 2.45.1 default_hbd61a6d_102 - sysroot_linux-64 - zstd >=1.5.7,<1.6.0a0 license: GPL-3.0-only - license_family: GPL purls: [] - size: 3744895 - timestamp: 1770267152681 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_101.conda - sha256: e90ab42a5225dc1eaa6e4e7201cd7b8ed52dad6ec46814be7e5a4039433ae85c - md5: df6e1dc38cbe5642350fa09d4a1d546b + size: 3661455 + timestamp: 1774197460085 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_102.conda + sha256: 7fd4ddde2f0150d015dfa9f2db5f428bd1570078f270e4bd4f116487a52de169 + md5: 56a04d796d7e3cdc9f8d2e1278e91bff depends: - - ld_impl_linux-aarch64 2.45.1 default_h1979696_101 + - ld_impl_linux-aarch64 2.45.1 default_h1979696_102 - sysroot_linux-aarch64 - zstd >=1.5.7,<1.6.0a0 license: GPL-3.0-only - license_family: GPL purls: [] - size: 4741684 - timestamp: 1770267224406 + size: 4683754 + timestamp: 1774197535605 - pypi: https://files.pythonhosted.org/packages/47/0b/bdf449df87be3f07b23091ceafee8c3ef569cf6d2fb7edec6e3b12b3faa4/bokeh-3.9.0-py3-none-any.whl name: bokeh version: 3.9.0 @@ -1105,25 +1099,25 @@ packages: version: 3.5.0 sha256: a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: charset-normalizer - version: 3.4.4 - sha256: a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 + version: 3.4.6 + sha256: 0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/a8/37/bdca6613c2e3c58c7421891d80cc3efa1d32e882f7c4a7ee6039c3fc951a/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl name: charset-normalizer - version: 3.4.4 - sha256: b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 + version: 3.4.6 + sha256: a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/ab/20/0567efb3a8fd481b8f34f739ebddc098ed062a59fed41a8d193a61939e8f/charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl name: charset-normalizer - version: 3.4.4 - sha256: 11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 + version: 3.4.6 + sha256: c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl +- pypi: https://files.pythonhosted.org/packages/e5/62/c0815c992c9545347aeea7859b50dc9044d147e2e7278329c6e02ac9a616/charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl name: charset-normalizer - version: 3.4.4 - sha256: 0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 + version: 3.4.6 + sha256: 2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl name: colorama @@ -1365,22 +1359,22 @@ packages: purls: [] size: 194397 timestamp: 1771943557428 -- pypi: https://files.pythonhosted.org/packages/2f/2a/b0a896f1aa8618fae09acf508f0bb0192022383dbf73bea76143345167c8/daqp-0.7.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/2e/32/0102e237dbcd47224fc638905354fcecb48097763b291e43a9e6a03d706b/daqp-0.8.3-cp312-cp312-macosx_11_0_arm64.whl name: daqp - version: 0.7.2 - sha256: 5bc97b1f8b9ecd3bc1e5b8c0edc839314e6fd9e13061637a664d003e9b7ef7db -- pypi: https://files.pythonhosted.org/packages/97/84/f8a89433fd182a850aa8db9c0cfffc9d2ebf7347b34eb5e203c8488459a2/daqp-0.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + version: 0.8.3 + sha256: 300a44fb1ce218ba19e0b5f753b800cc27f417447ec64332132b7c86a24bea88 +- pypi: https://files.pythonhosted.org/packages/4f/c2/a2a2c30c771f53f6ee68778096e7347eeb65f876fafcaf34a6428131931a/daqp-0.8.3-cp312-cp312-win_amd64.whl name: daqp - version: 0.7.2 - sha256: 7d27e010ef42405f5979a93ca75c2c2f323a2b34247aacb4328fb446c61058d3 -- pypi: https://files.pythonhosted.org/packages/9e/08/041461120e16bab05ea163afdb88fab452aefa9cbeadb9b91b3ec4f23635/daqp-0.7.2-cp312-cp312-macosx_11_0_arm64.whl + version: 0.8.3 + sha256: 0bca581f25ea8c074190412acd6db71125e8a23aa8227df09a15ecde5eef8246 +- pypi: https://files.pythonhosted.org/packages/95/89/92d46052584e7977630583cf79ffdd26a377681e45d0ae5e6d5ef25dcc05/daqp-0.8.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: daqp - version: 0.7.2 - sha256: 9da7a69e89b5d26302cbfb049f132981fe1c2f2a59a788e46a7b53df242b4828 -- pypi: https://files.pythonhosted.org/packages/ea/72/3bbbb5c5da4b982f420000ee4465b46b35d802bfbc73c1f3b772585c8b86/daqp-0.7.2-cp312-cp312-win_amd64.whl + version: 0.8.3 + sha256: c84ac7bb4e2b7403126eedefa2a51d4f46d10f9a2eb3bf93d77972bf5e35e8ad +- pypi: https://files.pythonhosted.org/packages/e3/8c/1f034921f93cc6d678c05bd496da7667d03be3ff01aa37b150eda6ebb006/daqp-0.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl name: daqp - version: 0.7.2 - sha256: 49d66d0c92f309eda5acbbbb3b970f2ff90ec93e0f7450ced75fd2df83c12e3b + version: 0.8.3 + sha256: 7be682bdff020f5996e2a7def47da5d56226d2200db4528420c30331305a1fac - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda sha256: 8bb557af1b2b7983cf56292336a1a1853f26555d9c6cecf1e5b2b96838c9da87 md5: ce96f2f470d39bd96ce03945af92e280 @@ -1527,10 +1521,10 @@ packages: purls: [] size: 70943 timestamp: 1765193243911 -- pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/5a/3d/589663aeeacd59bb2f3e8596bfd3e81cf0fb18d70bb433199041f469771b/etils-1.14.0-py3-none-any.whl name: etils - version: 1.13.0 - sha256: d9cd4f40fbe77ad6613b7348a18132cc511237b6c076dbb89105c0b520a4c6bb + version: 1.14.0 + sha256: b5df7341f54dbe1405a4450b2741207b4a8c279780402b45f87202b94dfc52b4 requires_dist: - etils[array-types] ; extra == 'all' - etils[eapp] ; extra == 'all' @@ -1576,7 +1570,6 @@ packages: - einops ; extra == 'enp' - etils[epy] ; extra == 'enp' - fsspec ; extra == 'epath' - - importlib-resources ; extra == 'epath' - typing-extensions ; extra == 'epath' - zipp ; extra == 'epath' - etils[epy] ; extra == 'epath' @@ -1599,11 +1592,11 @@ packages: - tensorflow ; extra == 'etree-tf' - etils[etree] ; extra == 'etree-tf' - etils[ecolab] ; extra == 'lazy-imports' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl name: filelock - version: 3.25.0 - sha256: 5ccf8069f7948f494968fc0713c10e5c182a9c9d9eef3a636307a20c2490f047 + version: 3.25.2 + sha256: ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70 requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl name: flatbuffers @@ -1726,10 +1719,10 @@ packages: purls: [] size: 4059 timestamp: 1762351264405 -- pypi: https://files.pythonhosted.org/packages/6c/44/f3aeac0fa98e7ad527f479e161aca6c3a1e47bb6996b053d45226fe37bf2/fonttools-4.61.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/28/b1/0c2ab56a16f409c6c8a68816e6af707827ad5d629634691ff60a52879792/fonttools-4.62.1-cp312-cp312-win_amd64.whl name: fonttools - version: 4.61.1 - sha256: 15acc09befd16a0fb8a8f62bc147e1a82817542d72184acca9ce6e0aeda9fa6d + version: 4.62.1 + sha256: 9e7863e10b3de72376280b515d35b14f5eeed639d1aa7824f4cf06779ec65e42 requires_dist: - lxml>=4.0 ; extra == 'lxml' - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' @@ -1760,10 +1753,10 @@ packages: - skia-pathops>=0.5.0 ; extra == 'all' - uharfbuzz>=0.45.0 ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/6f/16/7decaa24a1bd3a70c607b2e29f0adc6159f36a7e40eaba59846414765fd4/fonttools-4.61.1-cp312-cp312-macosx_10_13_universal2.whl +- pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl name: fonttools - version: 4.61.1 - sha256: f3cb4a569029b9f291f88aafc927dd53683757e640081ca8c412781ea144565e + version: 4.62.1 + sha256: 90365821debbd7db678809c7491ca4acd1e0779b9624cdc6ddaf1f31992bf974 requires_dist: - lxml>=4.0 ; extra == 'lxml' - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' @@ -1794,10 +1787,10 @@ packages: - skia-pathops>=0.5.0 ; extra == 'all' - uharfbuzz>=0.45.0 ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/80/3b/a3e81b71aed5a688e89dfe0e2694b26b78c7d7f39a5ffd8a7d75f54a12a8/fonttools-4.61.1-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/69/64/f19a9e3911968c37e1e620e14dfc5778299e1474f72f4e57c5ec771d9489/fonttools-4.62.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl name: fonttools - version: 4.61.1 - sha256: 497c31ce314219888c0e2fce5ad9178ca83fe5230b01a5006726cdf3ac9f24d9 + version: 4.62.1 + sha256: 9c125ffa00c3d9003cdaaf7f2c79e6e535628093e14b5de1dccb08859b680936 requires_dist: - lxml>=4.0 ; extra == 'lxml' - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' @@ -1828,10 +1821,10 @@ packages: - skia-pathops>=0.5.0 ; extra == 'all' - uharfbuzz>=0.45.0 ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b7/37/82dbef0f6342eb01f54bca073ac1498433d6ce71e50c3c3282b655733b31/fonttools-4.61.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/9b/8a/99c8b3c3888c5c474c08dbfd7c8899786de9604b727fcefb055b42c84bba/fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: fonttools - version: 4.61.1 - sha256: 10d88e55330e092940584774ee5e8a6971b01fc2f4d3466a1d6c158230880796 + version: 4.62.1 + sha256: 149f7d84afca659d1a97e39a4778794a2f83bf344c5ee5134e09995086cc2392 requires_dist: - lxml>=4.0 ; extra == 'lxml' - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' @@ -2116,14 +2109,14 @@ packages: purls: [] size: 96336 timestamp: 1755102441729 -- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.1.1-h6083320_0.conda - sha256: cc536468a807a77bbfbbf392a21f205d4e1de1198be03f9359e52e01926d8597 - md5: 56d73078fe51aee26b7934cb1378d464 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.2.0-h6083320_0.conda + sha256: 2b6958ab30b2ce330b0166e51fc5f20f761f71e09510d62f03f9729882707497 + md5: 71c2c966e17a65b08b995f571310fb9f depends: - __glibc >=2.17,<3.0.a0 - cairo >=1.18.4,<2.0a0 - graphite2 >=1.3.14,<2.0a0 - - icu >=78.2,<79.0a0 + - icu >=78.3,<79.0a0 - libexpat >=2.7.4,<3.0a0 - libfreetype >=2.14.2 - libfreetype6 >=2.14.2 @@ -2134,15 +2127,15 @@ packages: license: MIT license_family: MIT purls: [] - size: 3069804 - timestamp: 1773391781117 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-13.1.1-h1134a53_0.conda - sha256: 519585a32a9374d2ff0ca93139665e65061117b70156f6c94ce8bc5b5b47c687 - md5: 46a7a399537501c4501be18a9f871976 + size: 2342310 + timestamp: 1773909324136 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-13.2.0-h1134a53_0.conda + sha256: 59614c9bba26720d4298a887a51733b05006c836ddace0469549c1dcce561652 + md5: 68508785d05856e4a053bf3d152fba95 depends: - cairo >=1.18.4,<2.0a0 - graphite2 >=1.3.14,<2.0a0 - - icu >=78.2,<79.0a0 + - icu >=78.3,<79.0a0 - libexpat >=2.7.4,<3.0a0 - libfreetype >=2.14.2 - libfreetype6 >=2.14.2 @@ -2153,16 +2146,16 @@ packages: license: MIT license_family: MIT purls: [] - size: 2669078 - timestamp: 1773396553668 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-13.1.1-h3103d1b_0.conda - sha256: fa61ebdcab0b9ca3a53c719b65af972cd2be57dea377e82e0a0ece9dcfe147db - md5: cfb229fdf2b19d1557c755cce8e183a8 + size: 2404379 + timestamp: 1773914163008 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-13.2.0-h3103d1b_0.conda + sha256: d46c0486f4b6c9a7d6765f5bb816c7099a90a84c2edc043577d99ac7693f0c36 + md5: f1f2021c8a0eb0f4e73f7644fc4a2e52 depends: - __osx >=11.0 - cairo >=1.18.4,<2.0a0 - graphite2 >=1.3.14,<2.0a0 - - icu >=78.2,<79.0a0 + - icu >=78.3,<79.0a0 - libcxx >=19 - libexpat >=2.7.4,<3.0a0 - libfreetype >=2.14.2 @@ -2172,15 +2165,15 @@ packages: license: MIT license_family: MIT purls: [] - size: 1635918 - timestamp: 1773392848411 -- conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-13.1.1-h5a1b470_0.conda - sha256: 5a23aac569bd68ce13273be30bc08f044f6b1870ac0f6eee78855a369e2c14e8 - md5: 987061cd0ee71af3493e5dbc6cbde56b + size: 1858910 + timestamp: 1773909964919 +- conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-13.2.0-h5a1b470_0.conda + sha256: 78a35bf2c350a83d3f40b3d934e2041a292cc8938b57baca12847475426b4dff + md5: 92901fd2086b94a243abc5da33cfa87d depends: - cairo >=1.18.4,<2.0a0 - graphite2 >=1.3.14,<2.0a0 - - icu >=78.2,<79.0a0 + - icu >=78.3,<79.0a0 - libexpat >=2.7.4,<3.0a0 - libfreetype >=2.14.2 - libfreetype6 >=2.14.2 @@ -2192,11 +2185,11 @@ packages: license: MIT license_family: MIT purls: [] - size: 1286958 - timestamp: 1773392007609 -- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - sha256: 142a722072fa96cf16ff98eaaf641f54ab84744af81754c292cb81e0881c0329 - md5: 186a18e3ba246eccfc7cff00cd19a870 + size: 1288774 + timestamp: 1773909586544 +- 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 @@ -2204,29 +2197,29 @@ packages: license: MIT license_family: MIT purls: [] - size: 12728445 - timestamp: 1767969922681 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda - sha256: dcbaa3042084ac58685e3ef4547e4c4be9d37dc52b92ea18581288af95e48b52 - md5: 998ee7d53e32f7ab57fc35707285527e + size: 12723451 + timestamp: 1773822285671 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda + sha256: 49ba6aed2c6b482bb0ba41078057555d29764299bc947b990708617712ef6406 + md5: 546da38c2fa9efacf203e2ad3f987c59 depends: - libgcc >=14 - libstdcxx >=14 license: MIT license_family: MIT purls: [] - size: 12851689 - timestamp: 1772208964788 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda - sha256: 24bc62335106c30fecbcc1dba62c5eba06d18b90ea1061abd111af7b9c89c2d7 - md5: 114e6bfe7c5ad2525eb3597acdbf2300 + size: 12837286 + timestamp: 1773822650615 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + sha256: 3a7907a17e9937d3a46dfd41cffaf815abad59a569440d1e25177c15fd0684e5 + md5: f1182c91c0de31a7abd40cedf6a5ebef depends: - __osx >=11.0 license: MIT license_family: MIT purls: [] - size: 12389400 - timestamp: 1772209104304 + size: 12361647 + timestamp: 1773822915649 - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda sha256: 1bda728d70a619731b278c859eda364146cb5b4b8c739a64da8128353d81d1c4 md5: 0097b24800cb696915c3dbd1f5335d3f @@ -2235,6 +2228,7 @@ packages: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: MIT + license_family: MIT purls: [] size: 14954024 timestamp: 1773822508646 @@ -2256,10 +2250,10 @@ packages: - pretend ; extra == 'test' - coverage[toml] ; extra == 'test' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-py2.py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl name: identify - version: 2.6.17 - sha256: be5f8412d5ed4b20f2bd41a65f920990bdccaa6a4a18a08f1eefdcd0bdd885f0 + version: 2.6.18 + sha256: 8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737 requires_dist: - ukkonen ; extra == 'license' requires_python: '>=3.10' @@ -2273,27 +2267,6 @@ packages: - pytest>=8.3.2 ; extra == 'all' - flake8>=7.1.1 ; extra == 'all' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - name: importlib-resources - version: 6.5.2 - sha256: 789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec - requires_dist: - - zipp>=3.1.0 ; python_full_version < '3.10' - - pytest>=6,!=8.1.* ; extra == 'test' - - zipp>=3.17 ; extra == 'test' - - jaraco-test>=5.4 ; extra == 'test' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - pytest-cov ; extra == 'cover' - - pytest-enabler>=2.2 ; extra == 'enabler' - - pytest-mypy ; extra == 'type' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl name: iniconfig version: 2.3.0 @@ -2318,10 +2291,10 @@ packages: - pytest-enabler>=2.2 ; extra == 'testing' - pytest-ruff>=0.2.1 ; extra == 'testing' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl name: jaraco-context - version: 6.1.0 - sha256: a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda + version: 6.1.2 + sha256: bf8150b79a2d5d91ae48629d8b427a8f7ba0e1097dd6202a9059f29a36379535 requires_dist: - backports-tarfile ; python_full_version < '3.12' - pytest>=6,!=8.1.* ; extra == 'test' @@ -2333,13 +2306,12 @@ packages: - furo ; extra == 'doc' - sphinx-lint ; extra == 'doc' - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-checkdocs>=2.14 ; extra == 'check' - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - pytest-cov ; extra == 'cover' - pytest-enabler>=3.4 ; extra == 'enabler' - - pytest-mypy>=1.0.1 ; extra == 'type' - - mypy<1.19 ; platform_python_implementation == 'PyPy' and extra == 'type' - requires_python: '>=3.9' + - pytest-mypy>=1.0.1 ; platform_python_implementation != 'PyPy' and extra == 'type' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl name: jaraco-functools version: 4.4.0 @@ -2361,67 +2333,67 @@ packages: - pytest-mypy>=1.0.1 ; extra == 'type' - mypy<1.19 ; platform_python_implementation == 'PyPy' and extra == 'type' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/17/9c/e897231c880f69e32251d3b1145894d7a04e4342d9bef8d29644c440d11b/jax-0.9.2-py3-none-any.whl name: jax - version: 0.9.1 - sha256: d11cb53d362912253013e8c4d6926cb9f3a4b59ab5b25a7dc08123567067d088 + version: 0.9.2 + sha256: 822a8ae155ab42e7bc59f2ae7a28705bcfccb01a7e76abfc8ae996190cdc5598 requires_dist: - - jaxlib<=0.9.1,>=0.9.1 + - jaxlib<=0.9.2,>=0.9.2 - ml-dtypes>=0.5.0 - numpy>=2.0 - opt-einsum - scipy>=1.13 - - jaxlib==0.9.1 ; extra == 'minimum-jaxlib' - - jaxlib==0.9.0 ; extra == 'ci' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'tpu' - - libtpu==0.0.35.* ; extra == 'tpu' + - jaxlib==0.9.2 ; extra == 'minimum-jaxlib' + - jaxlib==0.9.1 ; extra == 'ci' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'tpu' + - libtpu==0.0.37.* ; extra == 'tpu' - requests ; extra == 'tpu' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'cuda' - - jax-cuda12-plugin[with-cuda]<=0.9.1,>=0.9.1 ; extra == 'cuda' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'cuda12' - - jax-cuda12-plugin[with-cuda]<=0.9.1,>=0.9.1 ; extra == 'cuda12' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'cuda13' - - jax-cuda13-plugin[with-cuda]<=0.9.1,>=0.9.1 ; extra == 'cuda13' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'cuda12-local' - - jax-cuda12-plugin<=0.9.1,>=0.9.1 ; extra == 'cuda12-local' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'cuda13-local' - - jax-cuda13-plugin<=0.9.1,>=0.9.1 ; extra == 'cuda13-local' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'rocm' - - jax-rocm7-plugin<=0.9.1,>=0.9.1 ; extra == 'rocm' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'cuda' + - jax-cuda12-plugin[with-cuda]<=0.9.2,>=0.9.2 ; extra == 'cuda' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'cuda12' + - jax-cuda12-plugin[with-cuda]<=0.9.2,>=0.9.2 ; extra == 'cuda12' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'cuda13' + - jax-cuda13-plugin[with-cuda]<=0.9.2,>=0.9.2 ; extra == 'cuda13' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'cuda12-local' + - jax-cuda12-plugin<=0.9.2,>=0.9.2 ; extra == 'cuda12-local' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'cuda13-local' + - jax-cuda13-plugin<=0.9.2,>=0.9.2 ; extra == 'cuda13-local' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'rocm7-local' + - jax-rocm7-plugin==0.9.2.* ; extra == 'rocm7-local' - kubernetes ; extra == 'k8s' - xprof ; extra == 'xprof' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/53/6b/b381bda5850f5611822d791cd25dfe36efda2688a68c4dda0f8a92c36dec/jaxlib-0.9.1-cp312-cp312-manylinux_2_27_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/2d/57/09d6a9e2a8bc8e3ea79eb8e980f8ea2aea2d9dec3793755f5765657f6e11/jaxlib-0.9.2-cp312-cp312-win_amd64.whl name: jaxlib - version: 0.9.1 - sha256: e2ab8c97be30354a34e64d17066df0fce7d1d0f40f7a48eded19e9e837896f5d + version: 0.9.2 + sha256: c2f0837cc0788746301e68ae9eda468e6a8a7734dc4d529f26a2cb60fb56c657 requires_dist: - scipy>=1.13 - numpy>=2.0 - ml-dtypes>=0.5.0 requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/6c/e9/e4dc1f699b894651f3d3ed6622c3c113c21003c2ed832ab00ed62055062b/jaxlib-0.9.1-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/33/a0/ddb3a71359c1df61f3edc408936b5bda7ed402e78ae7e9ef6afd438577c6/jaxlib-0.9.2-cp312-cp312-manylinux_2_27_x86_64.whl name: jaxlib - version: 0.9.1 - sha256: 836b78e16bb06d984c41ae0605e96ef031b720191b489a0c09f7185dcabcbed0 + version: 0.9.2 + sha256: 88b276a71f4f2071b1fd2e922abfd67c87c6977a551a1036febcea78d5ef7e22 requires_dist: - scipy>=1.13 - numpy>=2.0 - ml-dtypes>=0.5.0 requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/8f/06/59b1da0a3b2450a4abbf66cbb3bbfe0b14f9723b1f8997c0178db3549e54/jaxlib-0.9.1-cp312-cp312-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/51/15/ff3d9fde15b5146a0164505085312d8c9c0b0bbd7be5a15218ead2593307/jaxlib-0.9.2-cp312-cp312-macosx_11_0_arm64.whl name: jaxlib - version: 0.9.1 - sha256: cea7f98a1a558fab5cf8f569e5567a3c288667dd223261adaeb9645c37e4ad8b + version: 0.9.2 + sha256: 97c2fbe58cbee4a27d94ca735d709d231b299ab6ed8b3b1075f52d864dfd32c1 requires_dist: - scipy>=1.13 - numpy>=2.0 - ml-dtypes>=0.5.0 requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/f8/b9/e0419783cbff9fa3bbc053dbe130f9051f60de4f424f650d70aae7f3bdf1/jaxlib-0.9.1-cp312-cp312-manylinux_2_27_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/88/79/699aa47d2256b2edbb75a68a8f1a1ee4d34dfb84b8842a963caeb9a8cb03/jaxlib-0.9.2-cp312-cp312-manylinux_2_27_aarch64.whl name: jaxlib - version: 0.9.1 - sha256: f80e8aead3461683657027e14e814e5bdd00be8ce8e05c0a5db86403db297c2e + version: 0.9.2 + sha256: fef02d846863b726e72452993883a8596eac325f22a2ec7ea921da0fbc5509b4 requires_dist: - scipy>=1.13 - numpy>=2.0 @@ -2517,25 +2489,25 @@ packages: purls: [] size: 129048 timestamp: 1754906002667 -- pypi: https://files.pythonhosted.org/packages/12/42/f36816eaf465220f683fb711efdd1bbf7a7005a2473d0e4ed421389bd26c/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/99/9f/795fedf35634f746151ca8839d05681ceb6287fbed6cc1c9bf235f7887c2/kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl name: kiwisolver - version: 1.4.9 - sha256: 67bb8b474b4181770f926f7b7d2f8c0248cbcb78b660fdd41a47054b28d2a752 + version: 1.5.0 + sha256: ed3a984b31da7481b103f68776f7128a89ef26ed40f4dc41a2223cda7fb24819 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/5b/5a/51f5464373ce2aeb5194508298a508b6f21d3867f499556263c64c621914/kiwisolver-1.4.9-cp312-cp312-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/ad/cf/0348374369ca588f8fe9c338fae49fa4e16eeb10ffb3d012f23a54578a9e/kiwisolver-1.5.0-cp312-cp312-win_amd64.whl name: kiwisolver - version: 1.4.9 - sha256: 4a2899935e724dd1074cb568ce7ac0dce28b2cd6ab539c8e001a8578eb106d14 + version: 1.5.0 + sha256: f18c2d9782259a6dc132fdc7a63c168cbc74b35284b6d75c673958982a378384 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/70/90/6d240beb0f24b74371762873e9b7f499f1e02166a2d9c5801f4dbf8fa12e/kiwisolver-1.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: kiwisolver - version: 1.4.9 - sha256: f6008a4919fdbc0b0097089f67a1eb55d950ed7e90ce2cc3e640abadd2757a04 + version: 1.5.0 + sha256: bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/a0/41/85d82b0291db7504da3c2defe35c9a8a5c9803a730f297bd823d11d5fb77/kiwisolver-1.4.9-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/c8/2f/cebfcdb60fd6a9b0f6b47a9337198bcbad6fbe15e68189b7011fd914911f/kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl name: kiwisolver - version: 1.4.9 - sha256: f68208a520c3d86ea51acf688a3e3002615a7f0238002cccc17affecc86a8a54 + version: 1.5.0 + sha256: b2af221f268f5af85e776a73d62b0845fc8baf8ef0abfae79d29c77d0e776aaf requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 @@ -2599,31 +2571,29 @@ packages: name: lark-parser version: 0.7.8 sha256: 26215ebb157e6fb2ee74319aa4445b9f3b7e456e26be215ce19fdaaa901c20a4 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3 - md5: 12bd9a3f089ee6c9266a37dab82afabd +- 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 purls: [] - size: 725507 - timestamp: 1770267139900 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - sha256: 44527364aa333be631913451c32eb0cae1e09343827e9ce3ccabd8d962584226 - md5: 35b2ae7fadf364b8e5fb8185aaeb80e5 + size: 728002 + timestamp: 1774197446916 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda + sha256: 7abd913d81a9bf00abb699e8987966baa2065f5132e37e815f92d90fc6bba530 + md5: a21644fc4a83da26452a718dc9468d5f depends: - zstd >=1.5.7,<1.6.0a0 constrains: - binutils_impl_linux-aarch64 2.45.1 license: GPL-3.0-only - license_family: GPL purls: [] - size: 875924 - timestamp: 1770267209884 + size: 875596 + timestamp: 1774197520746 - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 md5: a752488c68f2e7c456bcbd8f16eec275 @@ -3859,9 +3829,9 @@ packages: purls: [] size: 7164557 timestamp: 1771378185265 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - sha256: 04596fcee262a870e4b7c9807224680ff48d4d0cc0dac076a602503d3dc6d217 - md5: da5be73701eecd0e8454423fd6ffcf30 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda + sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993 + md5: fd893f6a3002a635b5e50ceb9dd2c0f4 depends: - __glibc >=2.17,<3.0.a0 - icu >=78.2,<79.0a0 @@ -3869,41 +3839,41 @@ packages: - libzlib >=1.3.1,<2.0a0 license: blessing purls: [] - size: 942808 - timestamp: 1768147973361 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - sha256: 5f8230ccaf9ffaab369adc894ef530699e96111dac0a8ff9b735a871f8ba8f8b - md5: 4e3ba0d5d192f99217b85f07a0761e64 + size: 951405 + timestamp: 1772818874251 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda + sha256: 1ddaf91b44fae83856276f4cb7ce544ffe41d4b55c1e346b504c6b45f19098d6 + md5: 77891484f18eca74b8ad83694da9815e depends: - icu >=78.2,<79.0a0 - libgcc >=14 - libzlib >=1.3.1,<2.0a0 license: blessing purls: [] - size: 944688 - timestamp: 1768147991301 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - sha256: 6e9b9f269732cbc4698c7984aa5b9682c168e2a8d1e0406e1ff10091ca046167 - md5: 4b0bf313c53c3e89692f020fb55d5f2c + size: 952296 + timestamp: 1772818881550 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda + sha256: beb0fd5594d6d7c7cd42c992b6bb4d66cbb39d6c94a8234f15956da99a04306c + md5: f6233a3fddc35a2ec9f617f79d6f3d71 depends: - __osx >=11.0 - icu >=78.2,<79.0a0 - libzlib >=1.3.1,<2.0a0 license: blessing purls: [] - size: 909777 - timestamp: 1768148320535 -- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.2-hf5d6505_0.conda - sha256: 756478128e3e104bd7e7c3ce6c1b0efad7e08c7320c69fdc726e039323c63fbb - md5: 903979414b47d777d548e5f0165e6cd8 + size: 918420 + timestamp: 1772819478684 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda + sha256: 5fccf1e4e4062f8b9a554abf4f9735a98e70f82e2865d0bfdb47b9de94887583 + md5: 8830689d537fda55f990620680934bb1 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: blessing purls: [] - size: 1291616 - timestamp: 1768148278261 + size: 1297302 + timestamp: 1772818899033 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e md5: 1b08cd684f34175e4514474793d44bcb @@ -4394,57 +4364,54 @@ packages: purls: [] size: 420223 timestamp: 1757963935611 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 - md5: edb0dca6bc32e4f4789199455a1dbeb8 +- 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 - - libgcc >=13 constrains: - - zlib 1.3.1 *_2 + - zlib 1.3.2 *_2 license: Zlib license_family: Other purls: [] - size: 60963 - timestamp: 1727963148474 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 - md5: 08aad7cbe9f5a6b460d0976076b6ae64 - depends: - - libgcc >=13 + size: 63629 + timestamp: 1774072609062 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda + sha256: eb111e32e5a7313a5bf799c7fb2419051fa2fe7eff74769fac8d5a448b309f7f + md5: 502006882cf5461adced436e410046d1 constrains: - - zlib 1.3.1 *_2 + - zlib 1.3.2 *_2 license: Zlib license_family: Other purls: [] - size: 66657 - timestamp: 1727963199518 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b - md5: 369964e85dc26bfe78f41399b366c435 + size: 69833 + timestamp: 1774072605429 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + sha256: 361415a698514b19a852f5d1123c5da746d4642139904156ddfca7c922d23a05 + md5: bc5a5721b6439f2f62a84f2548136082 depends: - __osx >=11.0 constrains: - - zlib 1.3.1 *_2 + - zlib 1.3.2 *_2 license: Zlib license_family: Other purls: [] - size: 46438 - timestamp: 1727963202283 -- conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 - md5: 41fbfac52c601159df6c01f875de31b9 + size: 47759 + timestamp: 1774072956767 +- conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + sha256: 88609816e0cc7452bac637aaf65783e5edf4fee8a9f8e22bdc3a75882c536061 + md5: dbabbd6234dea34040e631f87676292f depends: - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 constrains: - - zlib 1.3.1 *_2 + - zlib 1.3.2 *_2 license: Zlib license_family: Other purls: [] - size: 55476 - timestamp: 1727963768015 + size: 58347 + timestamp: 1774072851498 - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl name: loguru version: 0.7.3 @@ -4782,10 +4749,10 @@ packages: version: 10.8.0 sha256: 52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/02/37/527d83610b878f27c01dd762e0e41aaa62f095c607f0500ac7f724a2c7a5/mujoco-3.5.0-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/26/55/7407eced2c44fbea233302d2c11e778852ea0f2eb0e14610f13a7e0d6ac7/mujoco-3.6.0-cp312-cp312-macosx_11_0_arm64.whl name: mujoco - version: 3.5.0 - sha256: 4b3a62af174ab59b9b6d816dca0786b7fd85ac081d6c2a931a2b22dd6e821f50 + version: 3.6.0 + sha256: ea71750f8cbe24b02a091093592f08fb71c95692b43c25e87dabe496ace0bb55 requires_dist: - absl-py - etils[epath] @@ -4804,11 +4771,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/b8/7b/c1612ec68d98e5f3dbc5b8a21ff5d40ab52409fcc89ea7afc8a197983297/mujoco-3.5.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/2c/cc/2aae89c3a83fed29ccb9057c05fb4a218b2a42c6dea136d9a78fea6b39f8/mujoco-3.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl name: mujoco - version: 3.5.0 - sha256: 12bfb2bb70f760e0d51fd59f3c43b2906c7660a23954fd717321da52ba85a617 + version: 3.6.0 + sha256: 094de585a2084508f1cfd76170b0dfe1d9c122b3bd4677e96ef2383100c9032f requires_dist: - absl-py - etils[epath] @@ -4827,11 +4794,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/c8/8a/229e4db3692be55532e155e2ca6a1363752243ee79df0e7e22ba00f716cf/mujoco-3.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/52/6c/5ec4e93676a65064a6591176772e00cfa02716156a1d0a7d646a8203348f/mujoco-3.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.5.0 - sha256: 66fe37276644c28fab497929c55580725de81afc6d511a40cc27525a8dd99efa + version: 3.6.0 + sha256: 8714fab312c7ee58f45bda7ef8762da2184e3a6a1d780a5093e93a160d66bd3d requires_dist: - absl-py - etils[epath] @@ -4850,11 +4817,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e1/d4/d0032323f58a9b8080b8464c6aade8d5ac2e101dbed1de64a38b3913b446/mujoco-3.5.0-cp312-cp312-macosx_11_0_arm64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/92/22/38d82f0c34213af53afbbb248b3442943ef48ffbac1e4c909b321e02ac56/mujoco-3.6.0-cp312-cp312-win_amd64.whl name: mujoco - version: 3.5.0 - sha256: 94cf4285b46bc2d74fbe86e39a93ecfb3b0e584477fff7e38d293d47b88576e7 + version: 3.6.0 + sha256: 3d4ec53e4e20fcc85843d607fa1648e0b12d2d2de81ee6f85926e95a7e84e8d8 requires_dist: - absl-py - etils[epath] @@ -4873,7 +4840,7 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl name: narwhals version: 2.18.0 @@ -4949,25 +4916,25 @@ packages: version: 1.10.0 sha256: 5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' -- pypi: https://files.pythonhosted.org/packages/1f/f8/55483431f2b2fd015ae6ed4fe62288823ce908437ed49db5a03d15151678/numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/74/1b/ee2abfc68e1ce728b2958b6ba831d65c62e1b13ce3017c13943f8f9b5b2e/numpy-2.4.3-cp312-cp312-macosx_11_0_arm64.whl name: numpy - version: 2.4.2 - sha256: 40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1 + version: 2.4.3 + sha256: 7395e69ff32526710748f92cd8c9849b361830968ea3e24a676f272653e8983e requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/92/0f/7ceaaeaacb40567071e94dbf2c9480c0ae453d5bb4f52bea3892c39dc83c/numpy-2.4.2-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/7b/12/8c9f0c6c95f76aeb20fc4a699c33e9f827fa0d0f857747c73bb7b17af945/numpy-2.4.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl name: numpy - version: 2.4.2 - sha256: 209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85 + version: 2.4.3 + sha256: 32e3bef222ad6b052280311d1d60db8e259e4947052c3ae7dd6817451fc8a4c5 requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/b1/91/b97fdfd12dc75b02c44e26c6638241cc004d4079a0321a69c62f51470c4c/numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/bd/79/cc665495e4d57d0aa6fbcc0aa57aa82671dfc78fbf95fe733ed86d98f52a/numpy-2.4.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: numpy - version: 2.4.2 - sha256: 6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548 + version: 2.4.3 + sha256: e7dd01a46700b1967487141a66ac1a3cf0dd8ebf1f08db37d46389401512ca97 requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/d7/7c/f5ee1bf6ed888494978046a809df2882aad35d414b622893322df7286879/numpy-2.4.3-cp312-cp312-win_amd64.whl name: numpy - version: 2.4.2 - sha256: 9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f + version: 2.4.3 + sha256: 65f3c2455188f09678355f5cae1f959a06b778bc66d535da07bf2ef20cd319d5 requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/ea/2c/e17b8814050427929077639d35a42187a006922600d4840475bdc5f64ebb/numpy_stl-3.2.0-py3-none-any.whl name: numpy-stl @@ -5786,10 +5753,10 @@ packages: purls: [] size: 542795 timestamp: 1754665193489 -- pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl name: platformdirs - version: 4.9.2 - sha256: 9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd + version: 4.9.4 + sha256: 68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl name: pluggy @@ -5984,7 +5951,8 @@ packages: license: LGPL-3.0-only license_family: LGPL purls: - - pkg:pypi/pyside6?source=compressed-mapping + - pkg:pypi/pyside6?source=hash-mapping + - pkg:pypi/shiboken6?source=hash-mapping size: 12771287 timestamp: 1773742743051 - conda: https://conda.anaconda.org/conda-forge/win-64/pyside6-6.10.2-py312ha7d0d2e_1.conda @@ -6029,15 +5997,14 @@ packages: - setuptools ; extra == 'dev' - xmlschema ; extra == 'dev' requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.12-hd63d673_2_cpython.conda - build_number: 2 - sha256: 6621befd6570a216ba94bc34ec4618e4f3777de55ad0adc15fc23c28fadd4d1a - md5: c4540d3de3fa228d9fa95e31f8e97f89 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + sha256: a44655c1c3e1d43ed8704890a91e12afd68130414ea2c0872e154e5633a13d7e + md5: 7eccb41177e15cc672e1babe9056018e depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.7.3,<3.0a0 + - libexpat >=2.7.4,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 - liblzma >=5.8.2,<6.0a0 @@ -6047,7 +6014,7 @@ packages: - libxcrypt >=4.4.36 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 + - openssl >=3.5.5,<4.0a0 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -6055,16 +6022,15 @@ packages: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 31457785 - timestamp: 1769472855343 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.12-h91f4b29_2_cpython.conda - build_number: 2 - sha256: b67569e1d6ce065e1d246a38a0c92bcc9f43cf003a6d67a57e7db7240714c5ce - md5: b75f79be54a1422f1259bb7d198e8697 + size: 31608571 + timestamp: 1772730708989 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.13-h91f4b29_0_cpython.conda + sha256: 61933478813f5fd96c89a00dd964201b0266d71d2e3bc4dd5679354056e46948 + md5: 8aed8fdbbc03a5c9f455d20ce75a9dce depends: - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-aarch64 >=2.36.1 - - libexpat >=2.7.3,<3.0a0 + - libexpat >=2.7.4,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 - liblzma >=5.8.2,<6.0a0 @@ -6074,7 +6040,7 @@ packages: - libxcrypt >=4.4.36 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 + - openssl >=3.5.5,<4.0a0 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -6082,22 +6048,21 @@ packages: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 13798340 - timestamp: 1769471112 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.12-h18782d2_2_cpython.conda - build_number: 2 - sha256: 765e5d0f92dabc8c468d078a4409490e08181a6f9be6f5d5802a4e3131b9a69c - md5: e198b8f74b12292d138eb4eceb004fa3 + size: 13757191 + timestamp: 1772728951853 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda + sha256: e658e647a4a15981573d6018928dec2c448b10c77c557c29872043ff23c0eb6a + md5: 8e7608172fa4d1b90de9a745c2fd2b81 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 + - libexpat >=2.7.4,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - liblzma >=5.8.2,<6.0a0 - libsqlite >=3.51.2,<4.0a0 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 + - openssl >=3.5.5,<4.0a0 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -6105,20 +6070,19 @@ packages: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 12953358 - timestamp: 1769472376612 -- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.12-h0159041_2_cpython.conda - build_number: 2 - sha256: 5937ab50dfeb979f7405132f73e836a29690f21162308b95b240b8037aa99975 - md5: 068897f82240d69580c2d93f93b56ff5 + size: 12127424 + timestamp: 1772730755512 +- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.13-h0159041_0_cpython.conda + sha256: a02b446d8b7b167b61733a3de3be5de1342250403e72a63b18dac89e99e6180e + md5: 2956dff38eb9f8332ad4caeba941cfe7 depends: - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 + - libexpat >=2.7.4,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - liblzma >=5.8.2,<6.0a0 - libsqlite >=3.51.2,<4.0a0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.4,<4.0a0 + - openssl >=3.5.5,<4.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - ucrt >=10.0.20348.0 @@ -6128,8 +6092,8 @@ packages: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 15829087 - timestamp: 1769470991307 + size: 15840187 + timestamp: 1772728877265 - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl name: python-dateutil version: 2.9.0.post0 @@ -6137,10 +6101,10 @@ packages: requires_dist: - six>=1.5 requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' -- pypi: https://files.pythonhosted.org/packages/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/c2/3c/2005227cb951df502412de2fa781f800663cccbef8d90ec6f1b371ac2c0d/python_discovery-1.2.0-py3-none-any.whl name: python-discovery - version: 1.1.0 - sha256: a162893b8809727f54594a99ad2179d2ede4bf953e12d4c7abc3cc9cdbd1437b + version: 1.2.0 + sha256: 1e108f1bbe2ed0ef089823d28805d5ad32be8e734b86a5f212bf89b71c266e4a requires_dist: - filelock>=3.15.4 - platformdirs>=4.3.6,<5 @@ -6220,14 +6184,15 @@ packages: version: 6.0.3 sha256: 9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/76/e6/e6893547135170c23133bac241d5031b0f2002d61675f2166dcbeeb27fbf/qpsolvers-4.8.2-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/48/36/bb438a1ab5270be8a0d294a2734b31ebfabe8b1b41fde08f43966118b7e2/qpsolvers-4.11.0-py3-none-any.whl name: qpsolvers - version: 4.8.2 - sha256: 66cad899705b5ba009c6a280b2702c5f413e25c69beec2c6bcad72307fb22dd1 + version: 4.11.0 + sha256: 02ced5690e17036802662f9054dcd8270fc8f4b8c3bddffbfcecd71a6353db00 requires_dist: - numpy>=1.15.4 - scipy>=1.2.0 - clarabel>=0.4.1 ; extra == 'clarabel' + - coptpy>=7.0.0 ; extra == 'copt' - cvxopt>=1.2.6 ; extra == 'cvxopt' - daqp>=0.5.1 ; extra == 'daqp' - ecos>=2.0.8 ; extra == 'ecos' @@ -6237,219 +6202,234 @@ packages: - kvxopt>=1.3.2 ; extra == 'kvxopt' - cvxopt>=1.2.6 ; extra == 'mosek' - mosek>=10.0.40 ; extra == 'mosek' - - qpsolvers[clarabel,cvxopt,daqp,ecos,highs,jaxopt,osqp,piqp,proxqp,qpalm,quadprog,scs,sip,qpax] ; extra == 'open-source-solvers' + - qpsolvers[clarabel,cvxopt,daqp,ecos,highs,jaxopt,osqp,piqp,proxqp,qpalm,qtqp,quadprog,scs,sip,qpax] ; extra == 'open-source-solvers' - osqp>=0.6.2 ; extra == 'osqp' - piqp>=0.2.2 ; extra == 'piqp' - proxsuite>=0.2.9 ; extra == 'proxqp' - qpalm>=1.2.1 ; extra == 'qpalm' - qpax>=0.0.9 ; extra == 'qpax' + - qtqp>=0.0.3 ; extra == 'qtqp' - quadprog>=0.1.11 ; extra == 'quadprog' - scs>=3.2.0 ; extra == 'scs' - sip-python>=0.0.2 ; extra == 'sip' - qpsolvers[cvxopt,daqp,ecos,highs,piqp,proxqp,qpalm,sip] ; extra == 'wheels-only' - requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.2-h17e89b9_5.conda - sha256: 94242e6623d10c08ebdaaf183056a15fc3b27b092a4cd826399ddabef7d51c2e - md5: 6c4f73c9a7e9b51f3a8e321c3e867bb6 - depends: + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.2-pl5321h16c4a6b_6.conda + sha256: dd2fdde2cfecd29d4acd2bacbb341f00500d8b3b1c0583a8d92e07fc1e4b1106 + md5: 3a00bff44c15ee37bfd5eb435e1b2a51 + depends: + - libxcb + - xcb-util + - xcb-util-wm + - xcb-util-keysyms + - xcb-util-image + - xcb-util-renderutil + - xcb-util-cursor - __glibc >=2.17,<3.0.a0 - - alsa-lib >=1.2.15.3,<1.3.0a0 - - dbus >=1.16.2,<2.0a0 - - double-conversion >=3.4.0,<3.5.0a0 - - fontconfig >=2.17.1,<3.0a0 - - fonts-conda-ecosystem - - harfbuzz >=12.3.2 - - icu >=78.2,<79.0a0 + - libgcc >=14 + - libstdcxx >=14 + - xorg-libice >=1.1.2,<2.0a0 + - icu >=78.3,<79.0a0 + - libllvm22 >=22.1.0,<22.2.0a0 - krb5 >=1.22.2,<1.23.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libxml2 + - libxml2-16 >=2.14.6 + - libtiff >=4.7.1,<4.8.0a0 + - libegl >=1.7.0,<2.0a0 + - xorg-libxxf86vm >=1.1.7,<2.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - xcb-util >=0.4.1,<0.5.0a0 - libbrotlicommon >=1.2.0,<1.3.0a0 - - libbrotlidec >=1.2.0,<1.3.0a0 - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 - libclang-cpp22.1 >=22.1.0,<22.2.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - dbus >=1.16.2,<2.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - alsa-lib >=1.2.15.3,<1.3.0a0 + - wayland >=1.24.0,<2.0a0 + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - libpng >=1.6.55,<1.7.0a0 - libclang13 >=22.1.0 + - libwebp-base >=1.6.0,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + - pcre2 >=10.47,<10.48.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 - libcups >=2.3.3,<2.4.0a0 - - libdrm >=2.4.125,<2.5.0a0 - - libegl >=1.7.0,<2.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libgcc >=14 - - libgl >=1.7.0,<2.0a0 - - libglib >=2.86.4,<3.0a0 + - libpq >=18.3,<19.0a0 - libjpeg-turbo >=3.1.2,<4.0a0 - - libllvm22 >=22.1.0,<22.2.0a0 - - libpng >=1.6.55,<1.7.0a0 - - libpq >=18.2,<19.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libstdcxx >=14 - - libtiff >=4.7.1,<4.8.0a0 - - libvulkan-loader >=1.4.341.0,<2.0a0 - - libwebp-base >=1.6.0,<2.0a0 + - xorg-libxcomposite >=0.4.7,<1.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - harfbuzz >=13.1.1 + - openssl >=3.5.5,<4.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem - libxcb >=1.17.0,<2.0a0 - - libxkbcommon >=1.13.1,<2.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 - - pcre2 >=10.47,<10.48.0a0 - - wayland >=1.24.0,<2.0a0 - - xcb-util >=0.4.1,<0.5.0a0 - - xcb-util-cursor >=0.1.6,<0.2.0a0 - - xcb-util-image >=0.4.0,<0.5.0a0 - - xcb-util-keysyms >=0.4.1,<0.5.0a0 - - xcb-util-renderutil >=0.3.10,<0.4.0a0 - - xcb-util-wm >=0.4.2,<0.5.0a0 - - xorg-libice >=1.1.2,<2.0a0 + - libsqlite >=3.52.0,<4.0a0 - xorg-libsm >=1.2.6,<2.0a0 - - xorg-libx11 >=1.8.13,<2.0a0 - - xorg-libxcomposite >=0.4.7,<1.0a0 - - xorg-libxcursor >=1.2.3,<2.0a0 - - xorg-libxdamage >=1.1.6,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - libglib >=2.86.4,<3.0a0 - xorg-libxext >=1.3.7,<2.0a0 - - xorg-libxrandr >=1.5.5,<2.0a0 - - xorg-libxtst >=1.2.5,<2.0a0 - - xorg-libxxf86vm >=1.1.7,<2.0a0 - - zstd >=1.5.7,<1.6.0a0 + - libxkbcommon >=1.13.1,<2.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 constrains: - - qt 6.10.2 + - qt ==6.10.2 license: LGPL-3.0-only license_family: LGPL purls: [] - size: 56550801 - timestamp: 1772121854618 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.10.2-h4f79d1e_5.conda - sha256: 106170f525a3abed0f79b4b31f9192957d54547c274ac1a9741656a2fbbe666c - md5: c5a6c2e22d9e1a1ef8870a5997fe2eda - depends: - - alsa-lib >=1.2.15.3,<1.3.0a0 - - dbus >=1.16.2,<2.0a0 - - double-conversion >=3.4.0,<3.5.0a0 - - fontconfig >=2.17.1,<3.0a0 - - fonts-conda-ecosystem - - harfbuzz >=12.3.2 - - icu >=78.2,<79.0a0 - - krb5 >=1.22.2,<1.23.0a0 - - libbrotlicommon >=1.2.0,<1.3.0a0 - - libbrotlidec >=1.2.0,<1.3.0a0 - - libbrotlienc >=1.2.0,<1.3.0a0 - - libclang-cpp22.1 >=22.1.0,<22.2.0a0 - - libclang13 >=22.1.0 - - libcups >=2.3.3,<2.4.0a0 - - libdrm >=2.4.125,<2.5.0a0 - - libegl >=1.7.0,<2.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 + size: 58118322 + timestamp: 1773865930316 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.10.2-pl5321h598db47_6.conda + sha256: cb0175afcab951eb966382b8d02f5f6ad8a74a6f26ed97bd3def3b3515b9bc56 + md5: a2be7073b12891aab9fa91ca005c5a6b + depends: + - libxcb + - xcb-util + - xcb-util-wm + - xcb-util-keysyms + - xcb-util-image + - xcb-util-renderutil + - xcb-util-cursor - libgcc >=14 - - libgl >=1.7.0,<2.0a0 - - libglib >=2.86.4,<3.0a0 - - libjpeg-turbo >=3.1.2,<4.0a0 - - libllvm22 >=22.1.0,<22.2.0a0 - - libpng >=1.6.55,<1.7.0a0 - - libpq >=18.2,<19.0a0 - - libsqlite >=3.51.2,<4.0a0 - libstdcxx >=14 + - xorg-libx11 >=1.8.13,<2.0a0 - libtiff >=4.7.1,<4.8.0a0 - - libvulkan-loader >=1.4.341.0,<2.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - libegl >=1.7.0,<2.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - alsa-lib >=1.2.15.3,<1.3.0a0 + - icu >=78.3,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - dbus >=1.16.2,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - harfbuzz >=13.1.1 + - double-conversion >=3.4.0,<3.5.0a0 - libwebp-base >=1.6.0,<2.0a0 - - libxcb >=1.17.0,<2.0a0 - - libxkbcommon >=1.13.1,<2.0a0 - libxml2 - libxml2-16 >=2.14.6 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 + - libgl >=1.7.0,<2.0a0 + - libclang13 >=22.1.0 - pcre2 >=10.47,<10.48.0a0 + - libpq >=18.3,<19.0a0 + - libsqlite >=3.52.0,<4.0a0 + - libllvm22 >=22.1.0,<22.2.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + - libclang-cpp22.1 >=22.1.0,<22.2.0a0 + - xorg-libxxf86vm >=1.1.7,<2.0a0 + - xorg-libxcomposite >=0.4.7,<1.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 - wayland >=1.24.0,<2.0a0 - - xcb-util >=0.4.1,<0.5.0a0 - - xcb-util-cursor >=0.1.6,<0.2.0a0 - - xcb-util-image >=0.4.0,<0.5.0a0 - - xcb-util-keysyms >=0.4.1,<0.5.0a0 - - xcb-util-renderutil >=0.3.10,<0.4.0a0 - - xcb-util-wm >=0.4.2,<0.5.0a0 - - xorg-libice >=1.1.2,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 - xorg-libsm >=1.2.6,<2.0a0 - - xorg-libx11 >=1.8.13,<2.0a0 - - xorg-libxcomposite >=0.4.7,<1.0a0 - - xorg-libxcursor >=1.2.3,<2.0a0 - - xorg-libxdamage >=1.1.6,<2.0a0 - xorg-libxext >=1.3.7,<2.0a0 - - xorg-libxrandr >=1.5.5,<2.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libjpeg-turbo >=3.1.2,<4.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - libcups >=2.3.3,<2.4.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - libpng >=1.6.55,<1.7.0a0 + - xorg-libice >=1.1.2,<2.0a0 - xorg-libxtst >=1.2.5,<2.0a0 - - xorg-libxxf86vm >=1.1.7,<2.0a0 - - zstd >=1.5.7,<1.6.0a0 + - libxkbcommon >=1.13.1,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libglib >=2.86.4,<3.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - openssl >=3.5.5,<4.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 constrains: - - qt 6.10.2 + - qt ==6.10.2 license: LGPL-3.0-only license_family: LGPL purls: [] - size: 58893291 - timestamp: 1772149304596 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/qt6-main-6.10.2-ha6d198a_5.conda - sha256: f54e2ae3886b4ca01cf611eb01c592163ffd595d788b15a4e8c770da9f434544 - md5: 27449652bf68f089d4f35754284baa7b + size: 60839855 + timestamp: 1773865968913 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/qt6-main-6.10.2-pl5321h01fc3ab_6.conda + sha256: a20eae7f002278c0517d5d38dbe0f2a292f57b0df04a3b96c722ce3dfd6e7e3e + md5: 125f9a5dc035657ac027eec502ccaec9 depends: + - libcxx >=19 - __osx >=11.0 - - double-conversion >=3.4.0,<3.5.0a0 - - harfbuzz >=12.3.2 - - icu >=78.2,<79.0a0 - - krb5 >=1.22.2,<1.23.0a0 - - libbrotlicommon >=1.2.0,<1.3.0a0 - - libbrotlidec >=1.2.0,<1.3.0a0 - - libbrotlienc >=1.2.0,<1.3.0a0 - - libclang-cpp19.1 >=19.1.7,<19.2.0a0 + - openssl >=3.5.5,<4.0a0 + - libpq >=18.3,<19.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libsqlite >=3.52.0,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 - libclang13 >=19.1.7 - - libcxx >=19 - - libglib >=2.86.4,<3.0a0 - libjpeg-turbo >=3.1.2,<4.0a0 + - icu >=78.3,<79.0a0 + - harfbuzz >=13.1.1 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - zstd >=1.5.7,<1.6.0a0 - libllvm19 >=19.1.7,<19.2.0a0 - - libpng >=1.6.55,<1.7.0a0 - - libpq >=18.2,<19.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - libwebp-base >=1.6.0,<2.0a0 + - libglib >=2.86.4,<3.0a0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libclang-cpp19.1 >=19.1.7,<19.2.0a0 - pcre2 >=10.47,<10.48.0a0 - - zstd >=1.5.7,<1.6.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - libpng >=1.6.55,<1.7.0a0 constrains: - - qt 6.10.2 + - qt ==6.10.2 license: LGPL-3.0-only license_family: LGPL purls: [] - size: 46935096 - timestamp: 1772148178819 -- conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.10.2-h35725d6_5.conda - sha256: 0c4dfea2b3dd9108ab08786092b373e089f34c17ec8f9c1f23da9917f9db3abe - md5: 193fcaa5c64aa817cd8cde92afbc9d4e + size: 47339230 + timestamp: 1773865969082 +- conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.10.2-pl5321hfcac499_6.conda + sha256: bee25670710310749fa71d7c20e5bf7cf4f8d65519c11a5b867a8371f60ca2ef + md5: d5a2b237ad30f01d4f9474313c1ef1c4 depends: - - double-conversion >=3.4.0,<3.5.0a0 - - harfbuzz >=12.3.2 - - icu >=78.2,<79.0a0 - - krb5 >=1.22.2,<1.23.0a0 - - libbrotlicommon >=1.2.0,<1.3.0a0 - - libbrotlidec >=1.2.0,<1.3.0a0 - - libbrotlienc >=1.2.0,<1.3.0a0 - - libclang13 >=21.1.8 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - pcre2 >=10.47,<10.48.0a0 + - libzlib >=1.3.1,<2.0a0 + - libpng >=1.6.55,<1.7.0a0 - libglib >=2.86.4,<3.0a0 + - icu >=78.3,<79.0a0 + - libclang13 >=22.1.0 - libjpeg-turbo >=3.1.2,<4.0a0 - - libpng >=1.6.55,<1.7.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libtiff >=4.7.1,<4.8.0a0 - libvulkan-loader >=1.4.341.0,<2.0a0 + - harfbuzz >=13.1.1 + - libtiff >=4.7.1,<4.8.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 - libwebp-base >=1.6.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libsqlite >=3.52.0,<4.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - double-conversion >=3.4.0,<3.5.0a0 - openssl >=3.5.5,<4.0a0 - - pcre2 >=10.47,<10.48.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - zstd >=1.5.7,<1.6.0a0 constrains: - - qt 6.10.2 + - qt ==6.10.2 license: LGPL-3.0-only license_family: LGPL purls: [] - size: 86110363 - timestamp: 1772127760856 + size: 87201183 + timestamp: 1773865806951 - pypi: https://files.pythonhosted.org/packages/10/5e/de8d3911e44699abc4e3ce835e69c3db76525af8018026f9bce61be69a43/quadprog-0.1.13-cp312-cp312-macosx_11_0_arm64.whl name: quadprog version: 0.1.13 @@ -6557,103 +6537,103 @@ packages: - markdown-it-py>=2.2.0 - pygments>=2.13.0,<3.0.0 requires_python: '>=3.8.0' -- conda: https://conda.anaconda.org/conda-forge/linux-64/rust-1.93.1-h53717f1_0.conda - sha256: 21e067aabf5863eee02fc5681a6d56de888abea6eaa521abf756b707c0dbcd39 - md5: f05b79be5b5f13fecc79af60892bb1c4 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rust-1.94.0-h53717f1_0.conda + sha256: 50bfa8a8f848c1cb0a75e25327c056e5dad46c9076d54471b01b08fa7fd64f94 + md5: f32243e302459c44eb66291ff690abd2 depends: - __glibc >=2.17,<3.0.a0 - gcc_impl_linux-64 - libgcc >=14 - libzlib >=1.3.1,<2.0a0 - - rust-std-x86_64-unknown-linux-gnu 1.93.1 h2c6d0dc_0 + - rust-std-x86_64-unknown-linux-gnu 1.94.0 h2c6d0dc_0 - sysroot_linux-64 >=2.17 license: MIT license_family: MIT purls: [] - size: 177821736 - timestamp: 1771008968072 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rust-1.93.1-h6cf38e9_0.conda - sha256: 0b3f1c4d552092345f32d4723adfbb77aba02175615cda40454963f4136cba3d - md5: 27e0439ad967c39b26045a52764abc91 + size: 178422821 + timestamp: 1773066893036 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rust-1.94.0-h6cf38e9_0.conda + sha256: e9d97896c81ab7d628f341b5775e9e5dc21771efa8c66be21db818355e3d5bc8 + md5: 127575f27d8d7f7cfcd17eb24d8a46eb depends: - gcc_impl_linux-aarch64 - libgcc >=14 - libzlib >=1.3.1,<2.0a0 - - rust-std-aarch64-unknown-linux-gnu 1.93.1 hbe8e118_0 + - rust-std-aarch64-unknown-linux-gnu 1.94.0 hbe8e118_0 - sysroot_linux-aarch64 >=2.17 license: MIT license_family: MIT purls: [] - size: 139979043 - timestamp: 1771009599403 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rust-1.93.1-h4ff7c5d_0.conda - sha256: 5c7bf3200b072752878281fee69077a6731d491562e03ddaa46df0058ff9d706 - md5: 9d63a676e2138373a5520b820f34a3ab + size: 140668117 + timestamp: 1773067599517 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rust-1.94.0-h4ff7c5d_0.conda + sha256: 811c519f01d0d26587cdc99ba2c77ea8affd1cef0990e61c0a4ed663451d01b3 + md5: fb0fc448d379337e26f2633bd15bfcd8 depends: - - rust-std-aarch64-apple-darwin 1.93.1 hf6ec828_0 + - rust-std-aarch64-apple-darwin 1.94.0 hf6ec828_0 license: MIT license_family: MIT purls: [] - size: 181513569 - timestamp: 1771008421760 -- conda: https://conda.anaconda.org/conda-forge/win-64/rust-1.93.1-hf8d6059_0.conda - sha256: ca85fab88197407d0a240eb43ca9c454e00068d7b8cd75c0e88e3ba00ea64116 - md5: 426d6deb734b4e00a7e413ddf281f1dd + size: 183759788 + timestamp: 1773066599252 +- conda: https://conda.anaconda.org/conda-forge/win-64/rust-1.94.0-hf8d6059_0.conda + sha256: e1527c93259a2b0d3902b23232a43dd65ae6fde5824292c2f9d4fab0a36b2bef + md5: e9a29bde9a77aeeac056dddd6edd6863 depends: - - rust-std-x86_64-pc-windows-msvc 1.93.1 h17fc481_0 + - rust-std-x86_64-pc-windows-msvc 1.94.0 h17fc481_0 license: MIT license_family: MIT purls: [] - size: 199507365 - timestamp: 1771011101657 -- conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-apple-darwin-1.93.1-hf6ec828_0.conda - sha256: 738563b1144c277822379194e7cf3980327f2b22fc0f46a20e432c177d6fa156 - md5: 7ad7ce45df53349e3bc817ed384496fd + size: 196531421 + timestamp: 1773068659416 +- conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-apple-darwin-1.94.0-hf6ec828_0.conda + sha256: ad761500228974aad3d422902a87c8c2d938fb3f76dd356f7629fd16f5f214a4 + md5: 4aa5527d3163e6644197772dc56261c9 depends: - __unix constrains: - - rust >=1.93.1,<1.93.2.0a0 + - rust >=1.94.0,<1.94.1.0a0 license: MIT license_family: MIT purls: [] - size: 35165708 - timestamp: 1771008221089 -- conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-unknown-linux-gnu-1.93.1-hbe8e118_0.conda - sha256: 82dbb0788d7896a9270ebc17712d41a1391fb2bebaed7847ce66985e6cbd6c92 - md5: 62fbbf47f940ed4c722a0cf156d86ba0 + size: 32683899 + timestamp: 1773066361926 +- conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-unknown-linux-gnu-1.94.0-hbe8e118_0.conda + sha256: b3b9f6624c01d34377742a44db9b8a2edbb849ea8285dd50361f76d6ef979203 + md5: 3b01077f6def6c44a89318546abfafbe depends: - __unix constrains: - - rust >=1.93.1,<1.93.2.0a0 + - rust >=1.94.0,<1.94.1.0a0 license: MIT license_family: MIT purls: [] - size: 38356812 - timestamp: 1771009097984 -- conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-pc-windows-msvc-1.93.1-h17fc481_0.conda - sha256: 02604af1baf2fcef0184ca3dd1e78dde5a87982f3193fc2fc0bbd5e752597a77 - md5: 68a38a410f3652df865e3d536e52e541 + size: 35066947 + timestamp: 1773067041901 +- conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-pc-windows-msvc-1.94.0-h17fc481_0.conda + sha256: 3d84e1778e68709a377127af453f8564d038053c61ca063f448ee6c03dc8b20a + md5: a80810ebd9d697f369a94af8b8afe45e depends: - __win constrains: - - rust >=1.93.1,<1.93.2.0a0 + - rust >=1.94.0,<1.94.1.0a0 license: MIT license_family: MIT purls: [] - size: 28799384 - timestamp: 1771010950507 -- conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-unknown-linux-gnu-1.93.1-h2c6d0dc_0.conda - sha256: fb979ded3c378074457af671a4f7317e0e24ba9393a4ace33d7d87efe055752e - md5: b202bf8a5113a75a130ca5f6f111dda7 + size: 26451999 + timestamp: 1773068501954 +- conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-unknown-linux-gnu-1.94.0-h2c6d0dc_0.conda + sha256: 3980a10eee5f24ce7770c5d1665f93f363345c630bb6189176f3ab7bd9e8724d + md5: df0c8674169061103f9cc0e112591eab depends: - __unix constrains: - - rust >=1.93.1,<1.93.2.0a0 + - rust >=1.94.0,<1.94.1.0a0 license: MIT license_family: MIT purls: [] - size: 38400767 - timestamp: 1771008857576 + size: 36890656 + timestamp: 1773066787379 - pypi: https://files.pythonhosted.org/packages/11/cb/60e4be7b67dd8e0adfe73d0d30c11977ca1a2639ce0b852d880852cae4bc/rustypot-1.4.2-cp312-cp312-win_amd64.whl name: rustypot version: 1.4.2 @@ -6866,17 +6846,17 @@ packages: - cryptography>=2.0 - jeepney>=0.6 requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda - sha256: fd7201e38e38bf7f25818d624ca8da97b8998957ca9ae3fb7fdc9c17e6b25fcd - md5: 1d00d46c634177fc8ede8b99d6089239 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + sha256: 82088a6e4daa33329a30bc26dc19a98c7c1d3f05c0f73ce9845d4eab4924e9e1 + md5: 8e194e7b992f99a5015edbd4ebd38efd depends: - python >=3.10 license: MIT license_family: MIT purls: - pkg:pypi/setuptools?source=compressed-mapping - size: 637506 - timestamp: 1770634745653 + size: 639697 + timestamp: 1773074868565 - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl name: six version: 1.17.0 @@ -7129,25 +7109,25 @@ packages: - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/20/5f/5f204e9c3f04f5fc844d2f98d80a7de64b6b304af869644ab478d909f6ff/uv-0.10.7-py3-none-manylinux_2_28_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/0c/75/40b237d005e4cdef9f960c215d3e2c0ab4f459ca009c3800cdcb07fbaa1d/uv-0.10.12-py3-none-manylinux_2_28_aarch64.whl name: uv - version: 0.10.7 - sha256: 9945de1d11c4a5ad77e9c4f36f8b5f9e7c9c3c32999b8bc0e7e579145c3b641c + version: 0.10.12 + sha256: 384b7f36a1ae50efe5f50fe299f276a83bf7acc8b7147517f34e27103270f016 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/5e/15/8365dc2ded350a4ee5fcbbf9b15195cb2b45855114f2a154b5effb6fa791/uv-0.10.7-py3-none-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/8d/42/139e68d7d92bb90a33b5e269dbe474acb00b6c9797541032f859c5bf4c4d/uv-0.10.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: uv - version: 0.10.7 - sha256: d872d2ff9c9dfba989b5f05f599715bc0f19b94cd0dbf8ae4ad22f8879a66c8c + version: 0.10.12 + sha256: 101481a1f48db6becf219914a591a588c0b3bfd05bef90768a5d04972bd6455e requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/71/a9/2735cc9dc39457c9cf64d1ce2ba5a9a8ecbb103d0fb64b052bf33ba3d669/uv-0.10.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/b5/9c/1954092ce17c00a8c299d39f8121e4c8d60f22a69c103f34d8b8dc68444d/uv-0.10.12-py3-none-win_amd64.whl name: uv - version: 0.10.7 - sha256: 89de2504407dcf04aece914c6ca3b9d8e60cf9ff39a13031c1df1f7c040cea81 + version: 0.10.12 + sha256: 76ebe11572409dfbe20ec25a823f9bc8781400ece5356aa33ec44903af7ec316 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/e3/1f/74f4d625db838f716a555908d41777b6357bacc141ddef117a01855e5ef9/uv-0.10.7-py3-none-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/ce/db/c41ace81b8ef5d5952433df38e321c0b6e5f88ce210c508b14f84817963f/uv-0.10.12-py3-none-macosx_11_0_arm64.whl name: uv - version: 0.10.7 - sha256: ad0d0ddd9f5407ad8699e3b20fe6c18406cd606336743e246b16914801cfd8b0 + version: 0.10.12 + sha256: 551f799d53e397843b6cde7e3c61de716fb487da512a21a954b7d0cbc06967e0 requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda sha256: 9dc40c2610a6e6727d635c62cced5ef30b7b30123f5ef67d6139e23d21744b3a @@ -7186,10 +7166,10 @@ packages: purls: [] size: 115235 timestamp: 1767320173250 -- pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl name: virtualenv - version: 21.1.0 - sha256: 164f5e14c5587d170cf98e60378eb91ea35bf037be313811905d3a24ea33cc07 + version: 21.2.0 + sha256: 1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f requires_dist: - distlib>=0.3.7,<1 - filelock>=3.24.2,<4 ; python_full_version >= '3.10' @@ -7223,33 +7203,33 @@ packages: purls: [] size: 238764 timestamp: 1745560912727 -- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-hd6090a7_1.conda - sha256: 3aa04ae8e9521d9b56b562376d944c3e52b69f9d2a0667f77b8953464822e125 - md5: 035da2e4f5770f036ff704fa17aace24 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + sha256: ea374d57a8fcda281a0a89af0ee49a2c2e99cc4ac97cf2e2db7064e74e764bdb + md5: 996583ea9c796e5b915f7d7580b51ea6 depends: - __glibc >=2.17,<3.0.a0 - - libexpat >=2.7.1,<3.0a0 + - libexpat >=2.7.4,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 - libstdcxx >=14 license: MIT license_family: MIT purls: [] - size: 329779 - timestamp: 1761174273487 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h4f8a99f_1.conda - sha256: d94af8f287db764327ac7b48f6c0cd5c40da6ea2606afd34ac30671b7c85d8ee - md5: f6966cb1f000c230359ae98c29e37d87 + size: 334139 + timestamp: 1773959575393 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.25.0-h4f8a99f_0.conda + sha256: 3cc479df517b0ce110835a1256f91ca568581cb6dfe1c53a0786f0a226039a45 + md5: 0a7a9548726f98d5869fd4c43e110f0f depends: - - libexpat >=2.7.1,<3.0a0 + - libexpat >=2.7.4,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 - libstdcxx >=14 license: MIT license_family: MIT purls: [] - size: 331480 - timestamp: 1761174368396 + size: 335260 + timestamp: 1773959583826 - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda sha256: d6cf2f0ebd5e09120c28ecba450556ce553752652d91795442f0e70f837126ae md5: bdbd7385b4a67025ac2dba4ef8cb6a8f From 3464ca2667523302d256b1752d92ddb7f41cc4a9 Mon Sep 17 00:00:00 2001 From: kbhakt Date: Sun, 22 Mar 2026 16:34:52 -0700 Subject: [PATCH 5/6] update ci.yml --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0c82821..cf2ad3b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,13 +11,13 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Install system deps + run: sudo apt-get update && sudo apt-get install -y libudev-dev pkg-config liblgpio-dev + - uses: prefix-dev/setup-pixi@v0.9.4 with: cache: ${{ !env.ACT }} - - name: Install system deps for AHControl (Rust) - run: sudo apt-get update && sudo apt-get install -y libudev-dev pkg-config liblgpio-dev - - name: Run pre-commit run: pixi run pre-commit run --all-files From 6e295b4648432ba3641cf4ff912a131b5f4a9431 Mon Sep 17 00:00:00 2001 From: kbhakt Date: Sun, 22 Mar 2026 19:59:54 -0700 Subject: [PATCH 6/6] fix bugs in tactile sensing; update instructions in README and add BOM --- .gitignore | 5 ++ Demo/Sensors/README.md | 22 ++++++-- Demo/Sensors/ads1256.py | 4 +- Demo/Sensors/config.toml | 4 +- Demo/Sensors/images/fsr_wiring_diagram.png | Bin 0 -> 79283 bytes Demo/Sensors/tactile_sensing.py | 56 +++++++++++++++++---- docs/BOM.md | 24 +++++++++ 7 files changed, 98 insertions(+), 17 deletions(-) create mode 100644 Demo/Sensors/images/fsr_wiring_diagram.png create mode 100644 docs/BOM.md diff --git a/.gitignore b/.gitignore index 86ec081..451c125 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,8 @@ target/ Demo/out/ out/ *.code-workspace + +# Log, CSV, and HTML plot files +*.log +*.csv +*.html \ No newline at end of file diff --git a/Demo/Sensors/README.md b/Demo/Sensors/README.md index 6ae5b71..1ec6f41 100644 --- a/Demo/Sensors/README.md +++ b/Demo/Sensors/README.md @@ -18,7 +18,11 @@ - **ADC HAT**: [Waveshare High-Precision AD HAT](https://www.waveshare.com/wiki/High-Precision_AD_HAT) - ADS1256: 24-bit, 8 single-ended channels, SPI -- **Sensors**: FSR (Force Sensitive Resistors) wired in a voltage-divider circuit with a fixed resistor (default 10 kΩ) to each ADC input channel. +- **Sensors**: FSR (Force Sensitive Resistors) wired in a voltage-divider circuit with a **5.1 kΩ resistor** in series with each FSR to each ADC input channel. + +### FSR Wiring Diagram + +![FSR Wiring Diagram](images/fsr_wiring_diagram.png) ### SPI Wiring (BCM pin numbers, set in `config.toml`) @@ -67,12 +71,24 @@ pixi run python -m Demo.Sensors.tactile_sensing --help ### Offline Visualization +Run without arguments to automatically load the **latest** `tactile_*.csv` from the log directory configured in `config.toml` (`[logging] log_dir`): + ```bash pixi run python Demo/Sensors/tactile_sensing_post_visualize.py -# or point at a specific file: +``` + +To visualize a **specific file**, pass it with `--file`: + +```bash pixi run python Demo/Sensors/tactile_sensing_post_visualize.py --file Demo/Sensors/logs/tactile_20260101_120000.csv ``` +See all flags: + +```bash +pixi run python Demo/Sensors/tactile_sensing_post_visualize.py --help +``` + CSV schema (long format — one row per channel per sample): ``` @@ -81,7 +97,7 @@ sensor_time, channel, raw, volts, force_norm ### Tuning `fsr_r_fixed` -The `fsr_r_fixed` parameter (default 10 000 Ω) must match the resistor you place in series with each FSR to form the voltage divider. Larger values increase sensitivity at low force; smaller values increase the measurable force range. +The `fsr_r_fixed` parameter must match the resistor you place in series with each FSR to form the voltage divider. The build uses **5 100 Ω (5.1 kΩ)**. Larger values increase sensitivity at low force; smaller values increase the measurable force range. --- diff --git a/Demo/Sensors/ads1256.py b/Demo/Sensors/ads1256.py index d64d3ad..4153d38 100644 --- a/Demo/Sensors/ads1256.py +++ b/Demo/Sensors/ads1256.py @@ -30,7 +30,7 @@ # Hardware handles # --------------------------------------------------------------------------- _SPI = spidev.SpiDev(0, 0) -_h: lgpio.lgpio | None = None +_h: int | None = None # --------------------------------------------------------------------------- @@ -63,7 +63,7 @@ def _spi_read(n: int) -> list[int]: def _hw_init() -> None: global _h - _h = lgpio.gpiochip_open(0) + _h = lgpio.gpiochip_open(4) lgpio.gpio_claim_output(_h, _RST_PIN) lgpio.gpio_claim_output(_h, _CS_DAC_PIN) lgpio.gpio_claim_output(_h, _CS_PIN) diff --git a/Demo/Sensors/config.toml b/Demo/Sensors/config.toml index ab9bbca..fab9677 100644 --- a/Demo/Sensors/config.toml +++ b/Demo/Sensors/config.toml @@ -18,12 +18,12 @@ channels = [3, 4, 5, 6, 7] channel_names = ["thumb", "index", "middle", "ring", "pinky"] polling_hz = 100.0 fsr_vcc = 5.0 -fsr_r_fixed = 10_000.0 +fsr_r_fixed = 5100 #ohms gain_key = "ADS1256_GAIN_1" drate_key = "ADS1256_30000SPS" [logging] -log_dir = "Demo/Sensors/logs" +log_dir = "LOGS" [visualization] plot_window_secs = 10.0 diff --git a/Demo/Sensors/images/fsr_wiring_diagram.png b/Demo/Sensors/images/fsr_wiring_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..48c3b62b31cf6a4a92275a8486dcf9885d95cafb GIT binary patch literal 79283 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 za%0D*_x7CWL_A);DUJ;9C2m#uYbhRkFlrWQ%lQD8~ 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 CW(*bp literal 0 HcmV?d00001 diff --git a/Demo/Sensors/tactile_sensing.py b/Demo/Sensors/tactile_sensing.py index 2e8f95e..23e85a8 100644 --- a/Demo/Sensors/tactile_sensing.py +++ b/Demo/Sensors/tactile_sensing.py @@ -285,6 +285,8 @@ def __init__(self, output_dir: Path): logger.info("CSV logger opened: {}", fname) def write(self, reading: TactileReading) -> None: + if self._file.closed: + return for row in reading.as_rows(): self._writer.writerow(row) self._row_count += len(reading.raw) @@ -476,19 +478,37 @@ def __init__(self): self.resize(900, max(400, len(names) // 2 * 160 + 60)) - # Wire sensor callback through a Qt signal (thread-safe) - self._bridge = _SensorBridge() - self._bridge.new_reading.connect(self._on_reading) - sensor._on_reading = self._bridge.new_reading.emit # type: ignore[assignment] + # Latest reading written by the sensor polling thread; read by the + # GUI refresh timer. Single-object assignment is atomic under the + # GIL so no explicit lock is needed. + self._pending_reading: TactileReading | None = None + # CSV writes happen in the sensor polling thread (not the GUI + # thread) so heavy I/O never blocks the event loop. + def _sensor_callback(reading: TactileReading) -> None: + if csv_logger is not None: + csv_logger.write(reading) + self._pending_reading = reading + + sensor._on_reading = _sensor_callback # type: ignore[assignment] + + # Refresh plots at ~30 Hz regardless of sensor polling rate. self._sample_count = 0 + refresh_timer = QTimer(self) + refresh_timer.timeout.connect(self._refresh_plots) + refresh_timer.start(33) # ~30 Hz + fps_timer = QTimer(self) fps_timer.timeout.connect(self._update_fps) fps_timer.start(1000) logger.info("GUI window created for channels: {}", names) - def _on_reading(self, reading: TactileReading) -> None: + def _refresh_plots(self) -> None: + reading = self._pending_reading + if reading is None: + return + self._pending_reading = None t_rel = time.perf_counter() - self._t0 for name, cp in self._channel_plots.items(): cp.update_data( @@ -496,8 +516,6 @@ def _on_reading(self, reading: TactileReading) -> None: reading.volts.get(name, 0.0), reading.force_norm.get(name, 0.0), ) - if csv_logger is not None: - csv_logger.write(reading) self._sample_count += 1 self._status_label.setText( f"t={t_rel:.1f}s sensor_t={reading.sensor_time:.3f}s" @@ -508,17 +526,35 @@ def _update_fps(self) -> None: self._sample_count = 0 def closeEvent(self, event) -> None: + # Stop the sensor callback so no new readings arrive after close. + sensor._on_reading = None # type: ignore[assignment] + self._pending_reading = None logger.info("Window closing — stopping sensor") - sensor.stop() - if csv_logger is not None: - csv_logger.close() super().closeEvent(event) + QApplication.instance().quit() + import os + import signal + os.environ.setdefault("QT_QPA_PLATFORMTHEME", "") app = QApplication.instance() or QApplication(sys.argv) app.setStyle("Fusion") window = TactileGUI() window.show() + + # Allow Ctrl+C (SIGINT) to quit the Qt event loop. + # Qt blocks Python signal delivery during event processing, so a short + # timer wakes the loop periodically to let Python check for signals. + signal.signal(signal.SIGINT, lambda *_: app.quit()) + _sigint_timer = QTimer() + _sigint_timer.start(200) + _sigint_timer.timeout.connect(lambda: None) + exit_code = app.exec() + # Cleanup happens here, after the event loop exits, so the GUI thread + # is never blocked during window close. + sensor.stop() + if csv_logger is not None: + csv_logger.close() logger.info("Application exited with code {}", exit_code) sys.exit(exit_code) diff --git a/docs/BOM.md b/docs/BOM.md new file mode 100644 index 0000000..afdce86 --- /dev/null +++ b/docs/BOM.md @@ -0,0 +1,24 @@ +# Bill of Materials (BOM) + +## Required Components + +| Component | Link | +|---|---| +| Camera | https://www.amazon.com/dp/B0CLRJZG8D | +| AD/DA Expansion Hat | https://www.amazon.com/dp/B09Q8Y5F7Y | +| Haptic Motors | https://www.amazon.com/dp/B0FX9HW33Z | +| Pressure Sensors (FSR) | https://www.amazon.com/dp/B0FGD267GK | +| Resistor Kit | https://www.amazon.com/dp/B016NXK6QK | + +> **Note:** FSR voltage divider uses a **5.1 kΩ** resistor in series with each pressure sensor. + +--- + +## Nice to Have + +| Component | Link | +|---|---| +| Silicone Flexible Jumper Wires (Nice Quality) | https://www.amazon.com/dp/B0DNPS4RVQ | +| Dual Male Jumper Wires | https://www.amazon.com/dp/B09P52PLK4 | +| Breadboard | https://www.amazon.com/dp/B07DL13RZH | +| Generic Jumper Wires | https://www.amazon.com/dp/B01EV70C78 |