From 922ab057b58c9f6ba9a44bf567fb139fc96c2c2c Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 07:31:40 +0100 Subject: [PATCH 01/15] feat: add rgpot-compatible RPC serve mode with gateway support Add serve mode to eonclient that wraps any eOn potential as an rgpot PotentialBase served over Cap'n Proto RPC. Supports four operating modes: - Single-potential: `eonclient -p lj --serve-port 12345` - Multi-model: `eonclient --serve "lj:12345,eam_al:12346"` - Replicated: `eonclient -p lj --serve-port 12345 --replicas 4` - Gateway: `eonclient -p lj --serve-port 12345 --replicas 6 --gateway` Gateway mode exposes a single port backed by a round-robin pool of potential instances, so clients need only one address. All modes are also configurable via INI config file with a [Serve] section (host, port, replicas, gateway_port, endpoints). Implementation uses a two-TU architecture to avoid naming collision between eOn's Potential class and capnp-generated Potential interface. Includes meson build integration (with_serve option, rgpot subproject wrap), Catch2 unit tests for parseServeSpec, Python schema (schema.py), config.yaml section, and user documentation. --- .github/workflows/ci_serve.yml | 45 ++++ client/CommandLine.cpp | 87 ++++++- client/Parameters.cpp | 21 ++ client/Parameters.h | 9 + client/ServeMode.cpp | 335 +++++++++++++++++++++++++++ client/ServeMode.h | 109 +++++++++ client/ServeRpcServer.cpp | 173 ++++++++++++++ client/ServeRpcServer.h | 50 ++++ client/gtests/ServeSpecParseTest.cpp | 87 +++++++ client/meson.build | 23 ++ docs/source/user_guide/index.md | 1 + docs/source/user_guide/serve_mode.md | 227 ++++++++++++++++++ eon/config.yaml | 24 ++ eon/schema.py | 26 +++ meson_options.txt | 1 + pixi.toml | 7 + subprojects/rgpot.wrap | 5 + 17 files changed, 1229 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/ci_serve.yml create mode 100644 client/ServeMode.cpp create mode 100644 client/ServeMode.h create mode 100644 client/ServeRpcServer.cpp create mode 100644 client/ServeRpcServer.h create mode 100644 client/gtests/ServeSpecParseTest.cpp create mode 100644 docs/source/user_guide/serve_mode.md create mode 100644 subprojects/rgpot.wrap diff --git a/.github/workflows/ci_serve.yml b/.github/workflows/ci_serve.yml new file mode 100644 index 000000000..252467e03 --- /dev/null +++ b/.github/workflows/ci_serve.yml @@ -0,0 +1,45 @@ +name: Build and test serve mode +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true +on: [push, pull_request] + +env: + SCCACHE_GHA_ENABLED: "true" + +jobs: + build_serve: + runs-on: ${{ matrix.os }} + name: test (${{ matrix.os }}) + strategy: + fail-fast: false + matrix: + os: [ubuntu-22.04] + steps: + - uses: actions/checkout@v4 + - uses: prefix-dev/setup-pixi@v0.8.10 + with: + cache: true + cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }} + activate-environment: true + environments: >- + serve + - name: Configure sccache + uses: actions/github-script@v7 + with: + script: | + core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); + core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); + - name: Build with serve mode + shell: pixi run bash -e {0} + run: | + meson setup bbdir \ + --prefix=$CONDA_PREFIX \ + --libdir=lib \ + -Dwith_serve=true \ + -Dwith_tests=true + meson compile -C bbdir + - name: Run serve mode tests + shell: pixi run bash -e {0} + run: | + meson test -C bbdir test_serve_spec diff --git a/client/CommandLine.cpp b/client/CommandLine.cpp index 1425e0af3..e74355361 100644 --- a/client/CommandLine.cpp +++ b/client/CommandLine.cpp @@ -15,7 +15,12 @@ #include "Potential.h" #include "version.h" +#ifdef WITH_SERVE_MODE +#include "ServeMode.h" +#endif + #include +#include #include #include #include @@ -62,7 +67,25 @@ void commandLine(int argc, char **argv) { "t,tolerance", "Distance tolerance", cxxopts::value()->default_value("0.1"))( "p,potential", "The potential (e.g. qsc, lj, eam_al)", - cxxopts::value())("h,help", "Print usage"); + cxxopts::value()) +#ifdef WITH_SERVE_MODE + ("serve", "Serve potential(s) over rgpot Cap'n Proto RPC. " + "Spec: 'potential:port' or 'pot1:port1,pot2:port2'", + cxxopts::value())( + "serve-host", "Host to bind RPC server(s) to", + cxxopts::value()->default_value("localhost"))( + "serve-port", "Port for single-potential serve mode (used with -p)", + cxxopts::value()->default_value("12345"))( + "replicas", "Number of replicated server instances (used with -p)", + cxxopts::value()->default_value("1"))( + "gateway", "Run a single gateway port backed by N pool instances " + "(use with -p and --replicas)", + cxxopts::value()->default_value("false"))( + "config", "Config file for potential parameters (INI format, " + "e.g. [Metatomic] model_path=model.pt)", + cxxopts::value()) +#endif + ("h,help", "Print usage"); try { auto result = options.parse(argc, argv); @@ -120,6 +143,68 @@ void commandLine(int argc, char **argv) { exit(2); } +#ifdef WITH_SERVE_MODE + // Load config file if provided (for potential-specific parameters + // like model_path, device, length_unit, etc.) + if (result.count("config")) { + auto config_path = result["config"].as(); + std::ifstream config_file(config_path); + if (!config_file.is_open()) { + std::cerr << "Cannot open config file: " << config_path << std::endl; + exit(2); + } + params.load(config_path); + } + + // Handle --serve mode (does not require a con file) + if (result.count("serve")) { + auto spec = result["serve"].as(); + auto endpoints = parseServeSpec(spec); + if (endpoints.empty()) { + std::cerr << "No valid serve endpoints in spec: " << spec << std::endl; + exit(2); + } + serveMultiple(endpoints, params); + exit(0); + } + + // Handle -p with serve flags (single potential serve mode) + if (pflag && !sflag && !mflag && !cflag && + (result.count("serve-port") || result.count("replicas") || + result.count("gateway"))) { + for (auto &ch : potential) { + ch = tolower(ch); + } + params.potential_options.potential = + magic_enum::enum_cast(potential, + magic_enum::case_insensitive) + .value_or(PotType::UNKNOWN); + auto host = result["serve-host"].as(); + auto port = result["serve-port"].as(); + auto reps = result["replicas"].as(); + bool gw = result["gateway"].as(); + + if (gw) { + serveGateway(params, host, port, reps); + } else if (reps > 1) { + serveReplicated(params, host, port, reps); + } else { + serveMode(params, host, port); + } + exit(0); + } + + // Config-driven serve (no -p or --serve, just --config with [Serve]) + if (!pflag && !sflag && !mflag && !cflag && + result.count("config") && !result.count("serve") && + (!params.serve_options.endpoints.empty() || + params.serve_options.gateway_port > 0 || + params.serve_options.replicas > 1)) { + serveFromConfig(params); + exit(0); + } +#endif + if (!cflag) { for (auto &ch : potential) { ch = tolower(ch); diff --git a/client/Parameters.cpp b/client/Parameters.cpp index c8e455f5f..6fc678b64 100644 --- a/client/Parameters.cpp +++ b/client/Parameters.cpp @@ -459,6 +459,13 @@ Parameters::Parameters() { bgsd_options.grad2energy_convergence = 0.000001; bgsd_options.grad2force_convergence = 0.0001; + // [Serve] // + serve_options.host = "localhost"; + serve_options.port = 12345; + serve_options.replicas = 1; + serve_options.gateway_port = 0; + serve_options.endpoints = ""; + // [CatLearn] // // No reasonable default for catlearn_options.path catlearn_options.model = "gp"; @@ -884,6 +891,20 @@ int Parameters::load(FILE *file) { _variant.energy_uncertainty = ini.GetValue("Metatomic", "variant_energy_uncertainty", ""); } + // [Serve] + if (ini.FindKey("Serve") != -1) { + serve_options.host = + ini.GetValue("Serve", "host", serve_options.host); + serve_options.port = static_cast( + ini.GetValueL("Serve", "port", serve_options.port)); + serve_options.replicas = static_cast( + ini.GetValueL("Serve", "replicas", serve_options.replicas)); + serve_options.gateway_port = static_cast( + ini.GetValueL("Serve", "gateway_port", serve_options.gateway_port)); + serve_options.endpoints = + ini.GetValue("Serve", "endpoints", serve_options.endpoints); + } + // GP_NEB only gp_surrogate_options.linear_path_always = ini.GetValueB("Surrogate", "gp_linear_path_always", diff --git a/client/Parameters.h b/client/Parameters.h index 07ac9971f..423a08bee 100644 --- a/client/Parameters.h +++ b/client/Parameters.h @@ -582,6 +582,15 @@ class Parameters { double grad2force_convergence; } bgsd_options; + // [Serve] // + struct serve_options_t { + string host; + uint16_t port; + size_t replicas; + uint16_t gateway_port; // 0 = disabled + string endpoints; // "pot:port,pot:host:port,..." spec string + } serve_options; + // [Debug] // struct debug_options_t { bool write_movies; diff --git a/client/ServeMode.cpp b/client/ServeMode.cpp new file mode 100644 index 000000000..74bacd54d --- /dev/null +++ b/client/ServeMode.cpp @@ -0,0 +1,335 @@ +/* +** This file is part of eOn. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** Copyright (c) 2010--present, eOn Development Team +** All rights reserved. +** +** Repo: +** https://github.com/TheochemUI/eOn +*/ + +/** + * @file ServeMode.cpp + * @brief Multi-model RPC serving for eOn potentials. + * + * Wraps any eOn Potential (including Metatomic ML models) as an rgpot + * PotentialBase and serves it over Cap'n Proto RPC. Supports serving + * multiple potentials concurrently on different ports, each in its own + * thread with its own event loop. + * + * This translation unit includes eOn's Potential.h. The Cap'n Proto server + * code is in ServeRpcServer.cpp (separate TU to avoid naming collision with + * the capnp-generated `Potential` interface). + */ + +#include "ServeMode.h" +#include "Potential.h" +#include "ServeRpcServer.h" + +#include +#include +#include +#include +#include +#include + +#include + +#include "rgpot/Potential.hpp" +#include "rgpot/types/AtomMatrix.hpp" + +using rgpot::types::AtomMatrix; + +/** + * @class EonPotentialAdapter + * @brief Adapts eOn's Potential::force() to rgpot's PotentialBase interface. + * + * This allows any eOn potential (LJ, EAM, Metatomic, VASP, LAMMPS, etc.) + * to be served over rgpot's Cap'n Proto RPC protocol without modification. + */ +class EonPotentialAdapter : public rgpot::PotentialBase { +public: + explicit EonPotentialAdapter(std::shared_ptr<::Potential> pot) + : rgpot::PotentialBase(rgpot::PotType::UNKNOWN), + m_potential(std::move(pot)) {} + + std::pair + operator()(const AtomMatrix &positions, const std::vector &atmtypes, + const std::array, 3> &box) override { + long nAtoms = static_cast(positions.rows()); + + // Flatten positions: eOn expects [x1,y1,z1, x2,y2,z2, ...] + std::vector flat_pos(nAtoms * 3); + for (long i = 0; i < nAtoms; ++i) { + flat_pos[3 * i + 0] = positions(i, 0); + flat_pos[3 * i + 1] = positions(i, 1); + flat_pos[3 * i + 2] = positions(i, 2); + } + + // Flatten box (3x3 row-major) + double flat_box[9]; + for (int i = 0; i < 3; ++i) { + for (int j = 0; j < 3; ++j) { + flat_box[i * 3 + j] = box[i][j]; + } + } + + // Call eOn's potential + std::vector flat_forces(nAtoms * 3, 0.0); + double energy = 0.0; + double variance = 0.0; + m_potential->force(nAtoms, flat_pos.data(), atmtypes.data(), + flat_forces.data(), &energy, &variance, flat_box); + + // Convert back to Eigen matrix + AtomMatrix forces(nAtoms, 3); + for (long i = 0; i < nAtoms; ++i) { + forces(i, 0) = flat_forces[3 * i + 0]; + forces(i, 1) = flat_forces[3 * i + 1]; + forces(i, 2) = flat_forces[3 * i + 2]; + } + + return {energy, forces}; + } + +private: + std::shared_ptr<::Potential> m_potential; +}; + +// --------------------------------------------------------------------------- +// Single-model serve +// --------------------------------------------------------------------------- + +void serveMode(const Parameters ¶ms, const std::string &host, + uint16_t port) { + auto pot_type = params.potential_options.potential; + spdlog::info("Creating potential: {}", + std::string(magic_enum::enum_name(pot_type))); + + auto eon_pot = helper_functions::makePotential(params); + if (!eon_pot) { + spdlog::error("Failed to create potential of type {}", + std::string(magic_enum::enum_name(pot_type))); + return; + } + + auto adapter = std::make_unique(std::move(eon_pot)); + + // Blocks until killed (runs Cap'n Proto event loop) + startRpcServer(std::move(adapter), host, port); +} + +// --------------------------------------------------------------------------- +// Multi-model concurrent serve +// --------------------------------------------------------------------------- + +void serveMultiple(const std::vector &endpoints, + const Parameters &base_params) { + if (endpoints.empty()) { + spdlog::error("No serve endpoints specified"); + return; + } + + // Single endpoint: run in the main thread (no extra overhead) + if (endpoints.size() == 1) { + auto params = base_params; + params.potential_options.potential = endpoints[0].potential; + serveMode(params, endpoints[0].host, endpoints[0].port); + return; + } + + // Multiple endpoints: one thread per server + spdlog::info("Starting {} concurrent RPC servers", endpoints.size()); + + std::vector threads; + threads.reserve(endpoints.size()); + + for (const auto &ep : endpoints) { + threads.emplace_back([&base_params, ep]() { + auto params = base_params; + params.potential_options.potential = ep.potential; + auto pot_name = std::string(magic_enum::enum_name(ep.potential)); + + spdlog::info("[{}:{}] Creating potential: {}", ep.host, ep.port, + pot_name); + + auto eon_pot = helper_functions::makePotential(params); + if (!eon_pot) { + spdlog::error("[{}:{}] Failed to create potential {}", ep.host, ep.port, + pot_name); + return; + } + + auto adapter = std::make_unique(std::move(eon_pot)); + startRpcServer(std::move(adapter), ep.host, ep.port); + }); + } + + // Wait for all threads (they block until killed) + for (auto &t : threads) { + if (t.joinable()) { + t.join(); + } + } +} + +// --------------------------------------------------------------------------- +// Replicated serve: N copies of same potential on sequential ports +// --------------------------------------------------------------------------- + +void serveReplicated(const Parameters ¶ms, const std::string &host, + uint16_t base_port, size_t replicas) { + if (replicas == 0) { + spdlog::error("Replicas must be >= 1"); + return; + } + if (replicas == 1) { + serveMode(params, host, base_port); + return; + } + + spdlog::info("Starting {} replicated servers on ports {}-{}", replicas, + base_port, base_port + replicas - 1); + + std::vector threads; + threads.reserve(replicas); + + for (size_t i = 0; i < replicas; ++i) { + uint16_t port = static_cast(base_port + i); + threads.emplace_back([¶ms, &host, port]() { + serveMode(params, host, port); + }); + } + + for (auto &t : threads) { + if (t.joinable()) { + t.join(); + } + } +} + +// --------------------------------------------------------------------------- +// Gateway serve: single port backed by a pool of potential instances +// --------------------------------------------------------------------------- + +void serveGateway(const Parameters ¶ms, const std::string &host, + uint16_t port, size_t pool_size) { + if (pool_size == 0) { + spdlog::error("Pool size must be >= 1"); + return; + } + + auto pot_type = params.potential_options.potential; + spdlog::info("Creating pool of {} {} instances for gateway on {}:{}", + pool_size, std::string(magic_enum::enum_name(pot_type)), host, + port); + + std::vector> pool; + pool.reserve(pool_size); + + for (size_t i = 0; i < pool_size; ++i) { + auto eon_pot = helper_functions::makePotential(params); + if (!eon_pot) { + spdlog::error("Failed to create potential instance {}/{}", i + 1, + pool_size); + return; + } + pool.push_back( + std::make_unique(std::move(eon_pot))); + } + + spdlog::info("Pool ready, starting gateway server"); + startPooledRpcServer(std::move(pool), host, port); +} + +// --------------------------------------------------------------------------- +// Config-driven dispatch +// --------------------------------------------------------------------------- + +void serveFromConfig(const Parameters ¶ms) { + const auto &opts = params.serve_options; + + // Multi-model endpoints take priority + if (!opts.endpoints.empty()) { + auto endpoints = parseServeSpec(opts.endpoints); + if (endpoints.empty()) { + spdlog::error("No valid endpoints in spec: {}", opts.endpoints); + return; + } + serveMultiple(endpoints, params); + return; + } + + // Gateway mode + if (opts.gateway_port > 0) { + size_t pool = (opts.replicas > 0) ? opts.replicas : 1; + serveGateway(params, opts.host, opts.gateway_port, pool); + return; + } + + // Replicated mode (default) + serveReplicated(params, opts.host, opts.port, opts.replicas); +} + +// --------------------------------------------------------------------------- +// Spec parser: "pot:port,pot:host:port,..." +// --------------------------------------------------------------------------- + +std::vector parseServeSpec(const std::string &spec) { + std::vector endpoints; + std::istringstream stream(spec); + std::string token; + + while (std::getline(stream, token, ',')) { + // Trim whitespace + token.erase(0, token.find_first_not_of(" \t")); + token.erase(token.find_last_not_of(" \t") + 1); + if (token.empty()) + continue; + + // Parse "potential:port" or "potential:host:port" + size_t first_colon = token.find(':'); + if (first_colon == std::string::npos) { + spdlog::error("Invalid serve spec '{}': expected 'potential:port'", + token); + continue; + } + + std::string pot_str = token.substr(0, first_colon); + std::string rest = token.substr(first_colon + 1); + + // Lowercase the potential name + std::transform(pot_str.begin(), pot_str.end(), pot_str.begin(), ::tolower); + + ServeEndpoint ep; + ep.potential = magic_enum::enum_cast(pot_str, + magic_enum::case_insensitive) + .value_or(PotType::UNKNOWN); + + if (ep.potential == PotType::UNKNOWN) { + spdlog::error("Unknown potential type '{}'", pot_str); + continue; + } + + size_t second_colon = rest.find(':'); + if (second_colon != std::string::npos) { + // "host:port" format + ep.host = rest.substr(0, second_colon); + ep.port = static_cast( + std::stoi(rest.substr(second_colon + 1))); + } else { + // "port" only + ep.host = "localhost"; + ep.port = static_cast(std::stoi(rest)); + } + + spdlog::info("Parsed endpoint: {} on {}:{}", + std::string(magic_enum::enum_name(ep.potential)), ep.host, + ep.port); + endpoints.push_back(ep); + } + + return endpoints; +} diff --git a/client/ServeMode.h b/client/ServeMode.h new file mode 100644 index 000000000..aa386735d --- /dev/null +++ b/client/ServeMode.h @@ -0,0 +1,109 @@ +/* +** This file is part of eOn. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** Copyright (c) 2010--present, eOn Development Team +** All rights reserved. +** +** Repo: +** https://github.com/TheochemUI/eOn +*/ +#pragma once + +#include "Parameters.h" +#include +#include +#include + +/** + * @brief Configuration for a single serve endpoint. + * + * Maps a potential type to a host:port pair. Multiple endpoints can be + * served concurrently, each in its own thread with its own potential instance. + */ +struct ServeEndpoint { + PotType potential; + std::string host; + uint16_t port; +}; + +/** + * @brief Start a single rgpot-compatible Cap'n Proto RPC server. + * + * Wraps eOn's Potential::force() as an rgpot PotentialBase and serves it + * over Cap'n Proto RPC. Blocks until the server is killed. + * + * @param params The eOn parameters (potential_options.potential must be set). + * @param host The hostname to listen on (e.g., "localhost" or "*"). + * @param port The TCP port to listen on. + */ +void serveMode(const Parameters ¶ms, const std::string &host, + uint16_t port); + +/** + * @brief Serve multiple potentials concurrently on different ports. + * + * Each endpoint gets its own thread, its own potential instance, and its own + * Cap'n Proto event loop. All threads block until SIGINT/SIGTERM. + * + * @param endpoints List of {potential, host, port} configurations. + * @param params Base eOn parameters (potential type is overridden per endpoint). + */ +void serveMultiple(const std::vector &endpoints, + const Parameters ¶ms); + +/** + * @brief Serve N replicas of the same potential across sequential ports. + * + * Starts `replicas` threads, each serving the same potential type on + * ports base_port, base_port+1, ..., base_port+replicas-1. + * + * @param params The eOn parameters (potential_options.potential must be set). + * @param host The hostname to listen on. + * @param base_port The first port; replicas use base_port+0 .. base_port+N-1. + * @param replicas Number of concurrent server instances. + */ +void serveReplicated(const Parameters ¶ms, const std::string &host, + uint16_t base_port, size_t replicas); + +/** + * @brief Start a gateway server backed by a pool of potential instances. + * + * Creates `pool_size` instances of the configured potential and serves them + * behind a single gateway port. Incoming requests are dispatched round-robin + * across the pool. This gives clients a single endpoint while spreading load. + * + * @param params The eOn parameters (potential_options.potential must be set). + * @param host The hostname to listen on. + * @param port The gateway port. + * @param pool_size Number of potential instances in the pool. + */ +void serveGateway(const Parameters ¶ms, const std::string &host, + uint16_t port, size_t pool_size); + +/** + * @brief Start serve mode from config-file parameters. + * + * Reads serve_options from params and dispatches to the appropriate mode: + * - If endpoints is set, uses multi-model serve (serveMultiple). + * - If gateway_port > 0, uses gateway mode (serveGateway). + * - Otherwise, uses replicated mode (serveReplicated). + * + * @param params The eOn parameters with serve_options populated. + */ +void serveFromConfig(const Parameters ¶ms); + +/** + * @brief Parse a serve configuration string into endpoints. + * + * Accepts comma-separated entries of the form "potential:port" or + * "potential:host:port". Examples: + * "lj:12345" + * "metatomic:12345,lj:12346" + * "metatomic:0.0.0.0:12345" + * + * @param spec The comma-separated endpoint specification. + * @return A vector of ServeEndpoint structs. + */ +std::vector parseServeSpec(const std::string &spec); diff --git a/client/ServeRpcServer.cpp b/client/ServeRpcServer.cpp new file mode 100644 index 000000000..b4eebc876 --- /dev/null +++ b/client/ServeRpcServer.cpp @@ -0,0 +1,173 @@ +/* +** This file is part of eOn. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** Copyright (c) 2010--present, eOn Development Team +** All rights reserved. +** +** Repo: +** https://github.com/TheochemUI/eOn +*/ + +/** + * @file ServeRpcServer.cpp + * @brief Cap'n Proto RPC server for rgpot PotentialBase instances. + * + * This translation unit does NOT include eOn's Potential.h to avoid naming + * collision with the capnp-generated `Potential` interface class. + */ + +#include "ServeRpcServer.h" + +#include +#include +#include +#include +#include + +#include "rgpot/types/AtomMatrix.hpp" +#include "rgpot/types/adapters/capnp/capnp_adapter.hpp" + +// Cap'n Proto generated header (from Potentials.capnp). +// This defines `class Potential` -- which collides with eOn's Potential class, +// hence the separate translation unit. +#include "Potentials.capnp.h" + +namespace { + +/** + * @class GenericPotImpl + * @brief Cap'n Proto RPC server implementation wrapping a PotentialBase. + * + * Same pattern as rgpot's potserv -- receives ForceInput over RPC, dispatches + * to the polymorphic PotentialBase, returns PotentialResult. + */ +class GenericPotImpl final : public Potential::Server { +public: + explicit GenericPotImpl(std::unique_ptr pot) + : m_potential(std::move(pot)) {} + + kj::Promise calculate(CalculateContext context) override { + auto fip = context.getParams().getFip(); + const size_t numAtoms = fip.getPos().size() / 3; + + KJ_REQUIRE(fip.getAtmnrs().size() == numAtoms, "AtomNumbers size mismatch"); + + auto nativePositions = + rgpot::types::adapt::capnp::convertPositionsFromCapnp(fip.getPos(), + numAtoms); + auto nativeAtomTypes = + rgpot::types::adapt::capnp::convertAtomNumbersFromCapnp( + fip.getAtmnrs()); + auto nativeBoxMatrix = + rgpot::types::adapt::capnp::convertBoxMatrixFromCapnp(fip.getBox()); + + auto [energy, forces] = + (*m_potential)(nativePositions, nativeAtomTypes, nativeBoxMatrix); + + auto result = context.getResults(); + auto pres = result.initResult(); + pres.setEnergy(energy); + + auto forcesList = pres.initForces(numAtoms * 3); + rgpot::types::adapt::capnp::populateForcesToCapnp(forcesList, forces); + + return kj::READY_NOW; + } + +private: + std::unique_ptr m_potential; +}; + +} // anonymous namespace + +void startRpcServer(std::unique_ptr pot, + const std::string &host, uint16_t port) { + spdlog::info("Starting Cap'n Proto RPC server on {}:{}", host, port); + + capnp::EzRpcServer server(kj::heap(std::move(pot)), host, + port); + + auto &waitScope = server.getWaitScope(); + spdlog::info("Server ready on port {}. Ctrl+C to stop.", port); + kj::NEVER_DONE.wait(waitScope); +} + +// --------------------------------------------------------------------------- +// Pooled (round-robin gateway) server +// --------------------------------------------------------------------------- + +namespace { + +/** + * @class PooledPotImpl + * @brief Cap'n Proto RPC server that dispatches across a pool of potentials. + * + * Incoming calculate() requests are assigned round-robin to the pool members. + * Each pool member is guarded by its own mutex so concurrent RPC calls are + * safe even though individual PotentialBase instances are not thread-safe. + */ +class PooledPotImpl final : public Potential::Server { +public: + explicit PooledPotImpl( + std::vector> pool) + : m_pool(std::move(pool)), m_mutexes(m_pool.size()), + m_next(0) {} + + kj::Promise calculate(CalculateContext context) override { + // Round-robin selection + size_t idx = + m_next.fetch_add(1, std::memory_order_relaxed) % m_pool.size(); + + auto fip = context.getParams().getFip(); + const size_t numAtoms = fip.getPos().size() / 3; + + KJ_REQUIRE(fip.getAtmnrs().size() == numAtoms, + "AtomNumbers size mismatch"); + + auto nativePositions = + rgpot::types::adapt::capnp::convertPositionsFromCapnp(fip.getPos(), + numAtoms); + auto nativeAtomTypes = + rgpot::types::adapt::capnp::convertAtomNumbersFromCapnp( + fip.getAtmnrs()); + auto nativeBoxMatrix = + rgpot::types::adapt::capnp::convertBoxMatrixFromCapnp(fip.getBox()); + + // Lock the selected pool member for the duration of the force call + std::lock_guard lock(m_mutexes[idx]); + auto [energy, forces] = + (*m_pool[idx])(nativePositions, nativeAtomTypes, nativeBoxMatrix); + + auto result = context.getResults(); + auto pres = result.initResult(); + pres.setEnergy(energy); + + auto forcesList = pres.initForces(numAtoms * 3); + rgpot::types::adapt::capnp::populateForcesToCapnp(forcesList, forces); + + return kj::READY_NOW; + } + +private: + std::vector> m_pool; + std::vector m_mutexes; + std::atomic m_next; +}; + +} // anonymous namespace + +void startPooledRpcServer( + std::vector> pool, + const std::string &host, uint16_t port) { + spdlog::info("Starting pooled RPC gateway on {}:{} with {} instances", host, + port, pool.size()); + + capnp::EzRpcServer server( + kj::heap(std::move(pool)), host, port); + + auto &waitScope = server.getWaitScope(); + spdlog::info("Gateway ready on port {}. Ctrl+C to stop.", port); + kj::NEVER_DONE.wait(waitScope); +} diff --git a/client/ServeRpcServer.h b/client/ServeRpcServer.h new file mode 100644 index 000000000..67e6accc1 --- /dev/null +++ b/client/ServeRpcServer.h @@ -0,0 +1,50 @@ +/* +** This file is part of eOn. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** Copyright (c) 2010--present, eOn Development Team +** All rights reserved. +** +** Repo: +** https://github.com/TheochemUI/eOn +*/ +#pragma once + +#include "rgpot/Potential.hpp" +#include +#include +#include +#include + +/** + * @brief Start a blocking Cap'n Proto RPC server for a given PotentialBase. + * + * This is an internal function used by serveMode(). It sets up the Cap'n Proto + * event loop and blocks until the process is killed. + * + * Defined in a separate translation unit to avoid naming collision between + * eOn's `class Potential` and the capnp-generated `Potential` interface. + * + * @param pot Ownership of the rgpot PotentialBase to serve. + * @param host The hostname to listen on. + * @param port The TCP port to listen on. + */ +void startRpcServer(std::unique_ptr pot, + const std::string &host, uint16_t port); + +/** + * @brief Start a blocking Cap'n Proto RPC server backed by a pool of + * PotentialBase instances dispatched round-robin. + * + * Creates a single gateway endpoint. Incoming RPC requests are dispatched + * to the next available potential instance in a round-robin fashion. This + * gives clients a single address while spreading computational load. + * + * @param pool Vector of PotentialBase instances (ownership transferred). + * @param host The hostname to listen on. + * @param port The TCP port to listen on. + */ +void startPooledRpcServer( + std::vector> pool, + const std::string &host, uint16_t port); diff --git a/client/gtests/ServeSpecParseTest.cpp b/client/gtests/ServeSpecParseTest.cpp new file mode 100644 index 000000000..fa57fb865 --- /dev/null +++ b/client/gtests/ServeSpecParseTest.cpp @@ -0,0 +1,87 @@ +/* +** This file is part of eOn. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** Copyright (c) 2010--present, eOn Development Team +** All rights reserved. +** +** Repo: +** https://github.com/TheochemUI/eOn +*/ +#include "catch2/catch_amalgamated.hpp" +#include "ServeMode.h" + +TEST_CASE("parseServeSpec single endpoint", "[serve]") { + auto eps = parseServeSpec("lj:12345"); + REQUIRE(eps.size() == 1); + CHECK(eps[0].potential == PotType::LJ); + CHECK(eps[0].host == "localhost"); + CHECK(eps[0].port == 12345); +} + +TEST_CASE("parseServeSpec multiple endpoints", "[serve]") { + auto eps = parseServeSpec("lj:12345,eam_al:12346"); + REQUIRE(eps.size() == 2); + CHECK(eps[0].potential == PotType::LJ); + CHECK(eps[0].port == 12345); + CHECK(eps[1].potential == PotType::EAM_AL); + CHECK(eps[1].port == 12346); +} + +TEST_CASE("parseServeSpec with host", "[serve]") { + auto eps = parseServeSpec("lj:0.0.0.0:9999"); + REQUIRE(eps.size() == 1); + CHECK(eps[0].potential == PotType::LJ); + CHECK(eps[0].host == "0.0.0.0"); + CHECK(eps[0].port == 9999); +} + +TEST_CASE("parseServeSpec mixed format", "[serve]") { + auto eps = parseServeSpec("lj:12345, eam_al:0.0.0.0:12346"); + REQUIRE(eps.size() == 2); + CHECK(eps[0].potential == PotType::LJ); + CHECK(eps[0].host == "localhost"); + CHECK(eps[0].port == 12345); + CHECK(eps[1].potential == PotType::EAM_AL); + CHECK(eps[1].host == "0.0.0.0"); + CHECK(eps[1].port == 12346); +} + +TEST_CASE("parseServeSpec unknown potential is skipped", "[serve]") { + auto eps = parseServeSpec("nonexistent:12345"); + CHECK(eps.empty()); +} + +TEST_CASE("parseServeSpec empty spec", "[serve]") { + auto eps = parseServeSpec(""); + CHECK(eps.empty()); +} + +TEST_CASE("parseServeSpec whitespace handling", "[serve]") { + auto eps = parseServeSpec(" lj : 12345 , eam_al : 12346 "); + // "lj " will be trimmed, ": 12345" -- the port parsing needs the colon + // The actual parsing trims the token but the colon position is found first. + // " lj : 12345 " -> trimmed -> "lj : 12345" + // first_colon at 2, pot_str="lj", rest=" 12345" + // Since port is " 12345", stoi skips leading whitespace. + REQUIRE(eps.size() == 2); + CHECK(eps[0].potential == PotType::LJ); + CHECK(eps[0].port == 12345); +} + +TEST_CASE("parseServeSpec case insensitive", "[serve]") { + auto eps = parseServeSpec("LJ:12345"); + REQUIRE(eps.size() == 1); + CHECK(eps[0].potential == PotType::LJ); +} + +TEST_CASE("ServeEndpoint struct members", "[serve]") { + ServeEndpoint ep; + ep.potential = PotType::LJ; + ep.host = "localhost"; + ep.port = 12345; + CHECK(ep.potential == PotType::LJ); + CHECK(ep.host == "localhost"); + CHECK(ep.port == 12345); +} diff --git a/client/meson.build b/client/meson.build index 7add45443..65e444034 100644 --- a/client/meson.build +++ b/client/meson.build @@ -561,6 +561,26 @@ if get_option('with_metatomic') _args += ['-DWITH_METATOMIC'] endif +if get_option('with_serve') + # rgpot-compatible RPC serve mode: wraps any eOn potential as an rgpot + # PotentialBase and serves it over Cap'n Proto RPC. + serve_capnp_dep = dependency('capnp-rpc', required: true) + rgpot_serve_opts = { + 'with_rpc': true, + 'with_eigen': true, + 'pure_lib': true, + 'with_rpc_client_only': false, + 'with_tests': false, + 'with_examples': false, + } + rgpot_proj = subproject('rgpot', default_options: rgpot_serve_opts) + rgpot_serve_dep = rgpot_proj.get_variable('rgpot_dep') + ptlrpc_dep = rgpot_proj.get_variable('ptlrpc_dep') + _args += ['-DWITH_SERVE_MODE'] + eonclient_sources += ['ServeMode.cpp', 'ServeRpcServer.cpp'] + _deps += [serve_capnp_dep, rgpot_serve_dep, ptlrpc_dep] +endif + _linkto += potentials # --------------------- Library @@ -649,6 +669,9 @@ if get_option('with_tests') test_array += [['test_xtb', 'XTBTest.cpp', 'sulfolene']] test_array += [['test_cineb_xtb', 'CINEBXTBTest.cpp', 'cineb_xtb']] endif + if get_option('with_serve') + test_array += [['test_serve_spec', 'ServeSpecParseTest.cpp', '']] + endif foreach test : test_array test( test.get(0), diff --git a/docs/source/user_guide/index.md b/docs/source/user_guide/index.md index 0749d8e55..531e6463a 100644 --- a/docs/source/user_guide/index.md +++ b/docs/source/user_guide/index.md @@ -136,6 +136,7 @@ described in the subsequent sections. :caption: External linkage kdb +serve_mode ``` diff --git a/docs/source/user_guide/serve_mode.md b/docs/source/user_guide/serve_mode.md new file mode 100644 index 000000000..c2cdeb48a --- /dev/null +++ b/docs/source/user_guide/serve_mode.md @@ -0,0 +1,227 @@ +--- +myst: + html_meta: + "description": "Learn how to use eonclient --serve to expose any eOn potential over RPC for integration with external tools like ChemGP." + "keywords": "eOn serve mode, RPC server, rgpot, Cap'n Proto, ChemGP, potential serving" +--- + +# Serve Mode + +```{versionadded} 2.2 +``` + +Serve mode wraps any eOn potential as an [rgpot](https://github.com/OmniPotentRPC/rgpot)-compatible +server, exposing it over Cap'n Proto RPC. This allows external tools -- such as +Julia-based optimization frameworks (e.g., [ChemGP](https://github.com/HaoZeke/ChemGP)) +-- to evaluate energies and forces without embedding C++ code directly. + +## Compilation + +Serve mode requires the `with_serve` build option and a Cap'n Proto installation: + +```{code-block} bash +meson setup builddir -Dwith_serve=true +meson compile -C builddir +``` + +If you also need Metatomic (ML) potentials: + +```{code-block} bash +meson setup builddir \ + -Dwith_serve=true \ + -Dwith_metatomic=true \ + -Dpip_metatomic=true \ + -Dtorch_version=2.9 +``` + +## Single-Potential Serving + +The simplest usage serves one potential on a single port: + +```{code-block} bash +eonclient -p lj --serve-port 12345 +``` + +This starts a blocking RPC server on `localhost:12345` serving the Lennard-Jones +potential. The server runs until interrupted with `Ctrl+C`. + +To bind to all interfaces: + +```{code-block} bash +eonclient -p lj --serve-host 0.0.0.0 --serve-port 12345 +``` + +## Replicated Serving + +To start multiple copies of the same potential on sequential ports: + +```{code-block} bash +eonclient -p lj --serve-port 12345 --replicas 4 +``` + +This starts 4 independent servers on ports 12345--12348, each with its own +potential instance and Cap'n Proto event loop. Useful when clients can +load-balance across known ports. + +## Gateway Mode + +Gateway mode exposes a single port backed by a pool of potential instances. +Incoming requests are dispatched round-robin across the pool, so clients only +need to know one address: + +```{code-block} bash +eonclient -p lj --serve-port 12345 --replicas 6 --gateway +``` + +This creates 6 LJ potential instances and serves them all behind port 12345. +Each incoming RPC call is routed to the next available instance. This is the +recommended mode for high-throughput use cases where clients should not need to +track multiple ports. + +## Multi-Model Serving + +The `--serve` flag accepts a comma-separated specification of +`potential:port` or `potential:host:port` pairs, each served concurrently +in its own thread: + +```{code-block} bash +eonclient --serve "lj:12345,eam_al:12346" +``` + +With explicit hosts: + +```{code-block} bash +eonclient --serve "lj:0.0.0.0:12345,eam_al:0.0.0.0:12346" +``` + +## Configuration Files + +Potentials that require parameters (Metatomic, XTB, etc.) can be configured +via the `--config` flag, which loads an INI-format config file: + +```{code-block} bash +eonclient --serve "metatomic:12345" --config model.ini +``` + +The config file uses the same INI format as eOn's standard `config.ini`. For +example, a Metatomic model: + +```{code-block} ini +[Metatomic] +model_path = /path/to/model.pt +device = cuda +length_unit = angstrom +``` + +Or for XTB: + +```{code-block} ini +[XTBPot] +paramset = GFN2xTB +accuracy = 1.0 +``` + +### Config-Driven Serve + +The `[Serve]` section allows fully config-driven serving without CLI flags +beyond `--config`: + +```{code-block} ini +[Potential] +potential = lj + +[Serve] +host = localhost +port = 12345 +replicas = 4 +gateway_port = 0 +``` + +```{code-block} bash +eonclient --config serve.ini +``` + +The dispatch logic: + +1. If `endpoints` is set, uses multi-model mode (`serveMultiple`). +2. If `gateway_port > 0`, uses gateway mode with `replicas` pool instances. +3. Otherwise, uses replicated mode on sequential ports starting at `port`. + +Example with gateway: + +```{code-block} ini +[Potential] +potential = metatomic + +[Metatomic] +model_path = /path/to/model.pt +device = cuda + +[Serve] +host = 0.0.0.0 +gateway_port = 12345 +replicas = 6 +``` + +Example with multi-model endpoints: + +```{code-block} ini +[Serve] +endpoints = lj:12345,eam_al:12346,metatomic:0.0.0.0:12347 + +[Metatomic] +model_path = /path/to/model.pt +``` + +### Serve Section Options + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| `host` | string | `localhost` | Hostname to bind servers to | +| `port` | int | `12345` | Port for single/replicated mode | +| `replicas` | int | `1` | Number of server instances (or gateway pool size) | +| `gateway_port` | int | `0` | Gateway port (0 = disabled; when > 0, pool mode) | +| `endpoints` | string | `""` | Multi-model spec (overrides other options) | + +## Protocol + +The RPC protocol is defined by rgpot's `Potentials.capnp` schema. Each request +sends: + +- **positions**: flat array `[x1, y1, z1, x2, y2, z2, ...]` (Angstroms) +- **atmnrs**: atomic numbers `[Z1, Z2, ...]` +- **box**: 3x3 cell matrix (row-major flat array) + +Each response returns: + +- **energy**: total potential energy (eV) +- **forces**: flat array matching positions layout (eV/Angstrom) + +## Integration with ChemGP + +ChemGP connects to the serve mode via its `RpcPotential` oracle: + +```{code-block} julia +using ChemGP + +# Connect to a running eonclient --serve instance +pot = RpcPotential("localhost", 12345, atmnrs, box) +E, F = ChemGP.calculate(pot, positions) + +# Use as a GP optimization oracle +oracle = make_rpc_oracle(pot, n_atoms) +``` + +See the [ChemGP RPC tutorial](https://github.com/HaoZeke/ChemGP) for details. + +## Command Reference + +| Flag | Description | +|------|-------------| +| `--serve ` | Multi-model serve spec: `pot:port` or `pot:host:port`, comma-separated | +| `--serve-host ` | Host for single-potential mode (default: `localhost`) | +| `--serve-port ` | Port for single-potential mode with `-p` (default: `12345`) | +| `--replicas ` | Number of server instances or gateway pool size (default: `1`) | +| `--gateway` | Enable gateway mode (single port, round-robin pool) | +| `--config ` | INI config file for potential and serve parameters | +| `-p ` | Potential type (used with `--serve-port`) | diff --git a/eon/config.yaml b/eon/config.yaml index 1adbd03e2..8e4dcf7a9 100644 --- a/eon/config.yaml +++ b/eon/config.yaml @@ -1779,3 +1779,27 @@ LBFGS: lbfgs_auto_scale: kind: boolean default: True + +################################################################################ + +Serve: + options: + host: + kind: string + default: "localhost" + + port: + kind: int + default: 12345 + + replicas: + kind: int + default: 1 + + gateway_port: + kind: int + default: 0 + + endpoints: + kind: string + default: "" diff --git a/eon/schema.py b/eon/schema.py index eb1f15c9e..963ae37e4 100644 --- a/eon/schema.py +++ b/eon/schema.py @@ -1350,6 +1350,31 @@ class RefineConfig(BaseModel): ) +class ServeConfig(BaseModel): + model_config = ConfigDict(use_attribute_docstrings=True) + + host: str = Field( + default="localhost", + description="Hostname to bind serve mode RPC servers to.", + ) + port: int = Field( + default=12345, + description="TCP port for single-potential or replicated serve mode.", + ) + replicas: int = Field( + default=1, + description="Number of replicated server instances. In gateway mode, this is the pool size.", + ) + gateway_port: int = Field( + default=0, + description="If > 0, start a single gateway on this port backed by a pool of 'replicas' potential instances dispatched round-robin. Set to 0 to disable gateway mode.", + ) + endpoints: str = Field( + default="", + description="Multi-model serve spec: comma-separated 'potential:port' or 'potential:host:port' entries. When set, overrides single-potential serve.", + ) + + class DebugConfig(BaseModel): model_config = ConfigDict(use_attribute_docstrings=True) @@ -1866,6 +1891,7 @@ class Config(BaseModel): distributed_replica: DistributedReplicaConfig gprdimer: GPRDimerConfig debug: DebugConfig + serve: ServeConfig @validator("communicator") def check_communicator(cls, v, values): diff --git a/meson_options.txt b/meson_options.txt index a2e2332dc..5efc86085 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -20,6 +20,7 @@ option('with_qsc', type : 'boolean', value : false) option('use_mkl', type: 'boolean', value: false, description: 'Enable Intel MKL support') option('gprd_linalg_backend', type: 'combo', choices: ['eigen', 'cusolver', 'kokkos', 'stdpar'], value: 'eigen', description: 'Linear algebra backend for GPR-dimer hot-path operations') option('with_metatomic', type : 'boolean', value : false) +option('with_serve', type : 'boolean', value : false, description : 'Enable rgpot-compatible RPC serve mode (eonclient --serve)') option('torch_path', type : 'string', value : '', description: 'path to Torch, either provide this or torch_version for pip') option('torch_version', type : 'string', value : '2.9', description: 'path to Torch') option('pip_metatomic', type : 'boolean', value : false, description: 'use pip versions of torch, metatensor, torch, and metatomic') diff --git a/pixi.toml b/pixi.toml index fb3501176..06c072e6f 100644 --- a/pixi.toml +++ b/pixi.toml @@ -55,6 +55,7 @@ ams = {features = ["ams"]} nwchem = {features = ["nwchem"]} docs = {features = ["docs"]} rel = {features = ["metatomic", "release"]} +serve = {features = ["serve"]} [feature.metatomic] # vesin torch has a wheel issue with macos x86_64 @@ -115,6 +116,12 @@ python -m http.server -d html [feature.xtb.dependencies] xtb = "*" +[feature.serve] +platforms = ["linux-64", "osx-64", "osx-arm64"] + +[feature.serve.dependencies] +capnproto = ">=1.0,<2" + [feature.metatomic.tasks.mkeon] args = ["buildtype"] depends-on = [ diff --git a/subprojects/rgpot.wrap b/subprojects/rgpot.wrap new file mode 100644 index 000000000..c11b3cfca --- /dev/null +++ b/subprojects/rgpot.wrap @@ -0,0 +1,5 @@ +[wrap-git] +directory=rgpot +url=https://github.com/OmniPotentRPC/rgpot.git +revision = head +depth = 1 From 9cc20e067c1f1fad1a0c0b547258bd67080a2c51 Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 08:26:16 +0100 Subject: [PATCH 02/15] fix: correct serve mode build and parseServeSpec whitespace handling - Set pure_lib: false for rgpot subproject (serve mode needs full lib) - Move serve sources to eonclib_sources (fixes test linking) - Trim whitespace after colon-split in parseServeSpec (fixes "lj : 12345" parsing where trailing space broke enum_cast) --- client/ServeMode.cpp | 14 ++++++++++++-- client/meson.build | 4 ++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/client/ServeMode.cpp b/client/ServeMode.cpp index 74bacd54d..adc00c6fa 100644 --- a/client/ServeMode.cpp +++ b/client/ServeMode.cpp @@ -300,6 +300,12 @@ std::vector parseServeSpec(const std::string &spec) { std::string pot_str = token.substr(0, first_colon); std::string rest = token.substr(first_colon + 1); + // Trim parts after colon split + pot_str.erase(0, pot_str.find_first_not_of(" \t")); + pot_str.erase(pot_str.find_last_not_of(" \t") + 1); + rest.erase(0, rest.find_first_not_of(" \t")); + rest.erase(rest.find_last_not_of(" \t") + 1); + // Lowercase the potential name std::transform(pot_str.begin(), pot_str.end(), pot_str.begin(), ::tolower); @@ -317,8 +323,12 @@ std::vector parseServeSpec(const std::string &spec) { if (second_colon != std::string::npos) { // "host:port" format ep.host = rest.substr(0, second_colon); - ep.port = static_cast( - std::stoi(rest.substr(second_colon + 1))); + ep.host.erase(0, ep.host.find_first_not_of(" \t")); + ep.host.erase(ep.host.find_last_not_of(" \t") + 1); + std::string port_str = rest.substr(second_colon + 1); + port_str.erase(0, port_str.find_first_not_of(" \t")); + port_str.erase(port_str.find_last_not_of(" \t") + 1); + ep.port = static_cast(std::stoi(port_str)); } else { // "port" only ep.host = "localhost"; diff --git a/client/meson.build b/client/meson.build index 65e444034..ba10c3aa9 100644 --- a/client/meson.build +++ b/client/meson.build @@ -568,7 +568,7 @@ if get_option('with_serve') rgpot_serve_opts = { 'with_rpc': true, 'with_eigen': true, - 'pure_lib': true, + 'pure_lib': false, 'with_rpc_client_only': false, 'with_tests': false, 'with_examples': false, @@ -577,7 +577,7 @@ if get_option('with_serve') rgpot_serve_dep = rgpot_proj.get_variable('rgpot_dep') ptlrpc_dep = rgpot_proj.get_variable('ptlrpc_dep') _args += ['-DWITH_SERVE_MODE'] - eonclient_sources += ['ServeMode.cpp', 'ServeRpcServer.cpp'] + eonclib_sources += ['ServeMode.cpp', 'ServeRpcServer.cpp'] _deps += [serve_capnp_dep, rgpot_serve_dep, ptlrpc_dep] endif From 7cefa60a1691b594b726556d829b0cf8a6ca8af2 Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 08:44:23 +0100 Subject: [PATCH 03/15] chore(pixi): update --- pixi.lock | 2538 ++++++++++++++++++++++++++++++++++++++++++++++++++++- pixi.toml | 1 + 2 files changed, 2515 insertions(+), 24 deletions(-) diff --git a/pixi.lock b/pixi.lock index 56b15dc20..ac16bcad8 100644 --- a/pixi.lock +++ b/pixi.lock @@ -2403,6 +2403,360 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/e3/556a107f6496b3f7f99c60eadf037cde6b37cf6b033f643c38617e95b8df/vesin-0.4.2-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/35/91/c45cc56afbf545989c57c1ab54bf9d6a96d23a2f96f4e7d5a831a8bc7c93/vesin_torch-0.4.2-py3-none-win_amd64.whl + dev-serve-mta: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + - https://download.pytorch.org/whl/cpu + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils-2.45.1-default_h4852527_101.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_linux-64-2.45.1-default_h4852527_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/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/capnproto-1.3.0-h23814c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/compilers-1.11.0-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-14.3.0-he8ccf15_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.11.0-hfcd1e18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-hff5e90c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.11.0-h9bea470_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hbdf3cc3_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran-14.3.0-h76987e4_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-14.3.0-h1a219da_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-14.3.0-hfa02b96_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-14.3.0-h76987e4_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he467f4b_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_106.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/highfive-2.10.1-he6560a2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyh53cf698_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.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/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_hc00574d_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h8e06fc2_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-hcf29cc6_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/libev-4.33-hd590300_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/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_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/libgfortran-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h8876d29_netlib.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/libnghttp2-1.67.0-had1ee68_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/libopenblas-0.3.31-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_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/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_118.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/libuv-1.51.0-hb03c661_1.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/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.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/ninja-1.13.2-h171cf75_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py312h33ff503_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.31-pthreads_h6ec200e_0.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/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h4bc722e_1009.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pkgconf-2.5.1-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.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/pyyaml-6.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.14.0-he64ecbb_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/spdlog-1.17.0-hab81395_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.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/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_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/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/9b/9b55b4d4855743de61ba91566d03b2560285ed8fc0387b9cf914795d4abf/ase-3.27.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/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - 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/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9c/0f/5d0c71a1aefeb08efff26272149e07ab922b64f46c63363756224bd6872e/filelock-3.24.3-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/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/92/cf3ab0b652b082e66876d08da57fcc6fa2f0e6c70dfbbafbd470bb73eb47/hf_xet-1.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/ae/2f6d96b4e6c5478d87d606a1934b5d436c4a2bce6bb7c6fdece891c128e3/huggingface_hub-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-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/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/f9/23/6b4c733aa2900cfc7b9856a649d5cfd173914bfa73b6069a63a115506d9a/metatensor_core-0.1.19-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0c/9c/f455b26da18906a8bdcd4fd2ddd3a916bf3e7c1e6675f4478da35ce41949/metatensor_learn-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/e6/60691e210a43b738249ee9abb3f2343dece72d0b821fda3d4023e061d26a/metatensor_operations-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/c7/844739309a227216e3b20049ec76cc0c0ca769c56d46f2434488316f5bbd/metatensor_torch-0.8.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ea/29/052418062fe9d97fada027b4ed451e3c378a149f58202f5f0ab3bec58f47/metatomic_torch-0.1.8-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/85/1607598424a7ee8bdd3dd6f7b47bbf79907c8b4ff57d6883da05ec6560dd/metatrain-2025.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.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/90/cc/bb6395c3f2b6bb739b1d3fc0e71f94e6a1c2e256df496237cbfd13cd74a6/python_hostlist-2.3.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d1/fe/66d73b76d378ba8cc2fe605920c0c75092e3a65ae746e1e767d9d020a75a/scipy-1.17.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.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/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl + - pypi: https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/24/5480c20380dfd18cf33d14784096dca45a24eae6102e91d49a718d3b6855/typer_slim-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f6/66/fe9c41fcf5fe73637997e632a488637d8283fe7bed327b147d26e4964a20/vesin-0.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ac/17/56cd86df5cedca93a7973546abd1ae2f0a1e202c17ca928b377477119332/vesin_torch-0.4.2-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.11.0-h61f9b84_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/capnproto-1.3.0-hb142b15_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1030.6.3-llvm19_1_hd01ab73_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_impl_osx-arm64-1030.6.3-llvm19_1_he8a363d_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1030.6.3-llvm19_1_h6d92914_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19-19.1.7-default_hf3020a7_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19.1.7-default_hf9bcbb7_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-19.1.7-default_hc11f16d_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-19.1.7-h75f8d18_31.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-19.1.7-default_hc995acf_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-19.1.7-default_hc11f16d_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-19.1.7-h75f8d18_31.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-19.1.7-h855ad52_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-19.1.7-he32a8d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.11.0-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.11.0-h88570a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h784d473_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.11.0-h81a4f41_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-14.3.0-h3ef1dbf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-14.3.0-h6d03799_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_osx-arm64-14.3.0-h3c33bd0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-nompi_had3affe_106.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/highfive-2.10.1-h92077ca_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyh53cf698_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/isl-0.26-imath32_h347afa1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.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/ld64-956.6-llvm19_1_he86490a_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-956.6-llvm19_1_ha2625f7_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-7_hc63b1ca_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-7_hd5b1ab5_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp19.1-19.1.7-default_hf3020a7_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-hd5a2499_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-h55c6f16_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-19.1.7-h6dc3340_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libcxx-headers-19.1.7-h707e725_2.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/libev-4.33-h93a5062_2.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/libgcc-15.2.0-hcbb3090_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-arm64-14.3.0-hc965647_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.86.4-he378b5c_0.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/liblapack-3.11.0-7_ha522803_netlib.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/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.67.0-hc438710_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.31-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsigtool-0.1.3-h98dc951_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/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.1-h5ef1a60_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.1-h8d039ee_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/llvm-openmp-21.1.8-h4a912ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19-19.1.7-h91fd4e7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19.1.7-h855ad52_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.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/ninja-1.13.2-h49c215f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py312he281c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openblas-0.3.31-openmp_hea878ba_0.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/noarch/parso-0.8.6-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/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkg-config-0.29.2-hde07d2e_1009.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkgconf-2.5.1-he530434_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.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/pyyaml-6.0.3-py312h04c11ed_1.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/rhash-1.4.6-h5505292_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sccache-0.14.0-h6fdd925_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-arm64-26.0-ha3f98da_7.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/sigtool-codesign-0.1.3-h98dc951_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1600.0.11.8-h997e182_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/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.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/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/9b/9b55b4d4855743de61ba91566d03b2560285ed8fc0387b9cf914795d4abf/ase-3.27.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/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - 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/9c/0f/5d0c71a1aefeb08efff26272149e07ab922b64f46c63363756224bd6872e/filelock-3.24.3-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/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/8c/c5becfa53234299bc2210ba314eaaae36c2875e0045809b82e40a9544f0c/hf_xet-1.2.0-cp37-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/ae/2f6d96b4e6c5478d87d606a1934b5d436c4a2bce6bb7c6fdece891c128e3/huggingface_hub-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-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/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/bb/ad/de1260b1360a2c41532f5022ad5946b05a6d581e4906b8262dc3cc11be47/metatensor_core-0.1.19-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0c/9c/f455b26da18906a8bdcd4fd2ddd3a916bf3e7c1e6675f4478da35ce41949/metatensor_learn-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/e6/60691e210a43b738249ee9abb3f2343dece72d0b821fda3d4023e061d26a/metatensor_operations-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/4d/74ba4841666518ed916d6637a4fd6dbc3f8272a4b2d724dbd0cdc26b4105/metatensor_torch-0.8.4-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/7a/4b/8e57c02768e8daf0b6833345e1b8a2472a73489b24d6157ed332cf224d67/metatomic_torch-0.1.8-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ce/85/1607598424a7ee8bdd3dd6f7b47bbf79907c8b4ff57d6883da05ec6560dd/metatrain-2025.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.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/90/cc/bb6395c3f2b6bb739b1d3fc0e71f94e6a1c2e256df496237cbfd13cd74a6/python_hostlist-2.3.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ed/1d/5057f812d4f6adc91a20a2d6f2ebcdb517fdbc87ae3acc5633c9b97c8ba5/scipy-1.17.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.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/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl + - pypi: https://download.pytorch.org/whl/cpu/torch-2.9.1-cp312-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/24/5480c20380dfd18cf33d14784096dca45a24eae6102e91d49a718d3b6855/typer_slim-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/1d/8a061603f318e965f50c39e46a56ed372a987b48c40011709f2a9219add0/vesin-0.4.2-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/de/3b/517af8e11dc8f321929669be69ad1d29dae757d656c6427613179865c3aa/vesin_torch-0.4.2-py3-none-macosx_11_0_arm64.whl dev-xtb: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -5105,14 +5459,348 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/e3/556a107f6496b3f7f99c60eadf037cde6b37cf6b033f643c38617e95b8df/vesin-0.4.2-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/35/91/c45cc56afbf545989c57c1ab54bf9d6a96d23a2f96f4e7d5a831a8bc7c93/vesin_torch-0.4.2-py3-none-win_amd64.whl -packages: -- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + serve: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + - https://download.pytorch.org/whl/cpu + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils-2.45.1-default_h4852527_101.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_linux-64-2.45.1-default_h4852527_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/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/capnproto-1.3.0-h23814c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/compilers-1.11.0-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-14.3.0-he8ccf15_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.11.0-hfcd1e18_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-hff5e90c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.11.0-h9bea470_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hbdf3cc3_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran-14.3.0-h76987e4_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-14.3.0-h1a219da_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-14.3.0-hfa02b96_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-14.3.0-h76987e4_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he467f4b_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_106.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/highfive-2.10.1-he6560a2_2.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/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_hc00574d_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h8e06fc2_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-hcf29cc6_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/libev-4.33-hd590300_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/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_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/libgfortran-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h8876d29_netlib.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/libnghttp2-1.67.0-had1ee68_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/libopenblas-0.3.31-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_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/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_118.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/libuv-1.51.0-hb03c661_1.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/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.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/ninja-1.13.2-h171cf75_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py312h33ff503_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.31-pthreads_h6ec200e_0.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/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h4bc722e_1009.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pkgconf-2.5.1-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.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/pyyaml-6.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.14.0-he64ecbb_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/spdlog-1.17.0-hab81395_1.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/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_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/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-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/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl + osx-64: + - conda: https://conda.anaconda.org/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-compiler-1.11.0-h7a00415_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/capnproto-1.3.0-h94e1571_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools-1030.6.3-llvm19_1_h67a6458_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_impl_osx-64-1030.6.3-llvm19_1_h7d82c7c_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_osx-64-1030.6.3-llvm19_1_h8f0d4bb_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-19-19.1.7-default_hd70426c_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-19.1.7-default_h1323312_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-19.1.7-default_ha1a018a_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-19.1.7-h8a78ed7_31.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-19.1.7-default_h9089c59_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-19.1.7-default_ha1a018a_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-19.1.7-h8a78ed7_31.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.3-h965d0ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt-19.1.7-he914875_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-64-19.1.7-h138dee1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/compilers-1.11.0-h694c41f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cxx-compiler-1.11.0-h307afc9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-h2fb4741_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/fmt-12.1.0-hda137b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/fortran-compiler-1.11.0-h9ab62e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran-14.3.0-hcc3c99d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran_impl_osx-64-14.3.0-h94fe04d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran_osx-64-14.3.0-h3223c34_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.6-nompi_hf563b80_106.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/highfive-2.10.1-h6ea3bb1_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/isl-0.26-imath32_h2e86a7b_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ld64-956.6-llvm19_1_hc3792c1_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ld64_osx-64-956.6-llvm19_1_hcae3351_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.5-he7c3a48_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-7_hfe11894_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.11.0-7_h282bb72_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp19.1-19.1.7-default_hd70426c_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9a2545f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-devel-19.1.7-h7c275be_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libcxx-headers-19.1.7-h707e725_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgcc-15.2.0-h08519bb_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-64-14.3.0-h660b60f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-7_h0b9d25f_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm19-19.1.7-h56e7563_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.31-openmp_h7314188_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsigtool-0.1.3-hc0f2934_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.1-hd57b93d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.1-h745d5cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-21.1.8-h472b3d1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-19-19.1.7-h879f4bc_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-19.1.7-hb0207f0_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/mpc-1.3.1-h9d8efa1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/mpfr-4.2.1-haed47dc_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ninja-1.13.2-hfc0b2d5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.2-py312hb34da66_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openblas-0.3.31-openmp_h30af337_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pkg-config-0.29.2-hf7e621a_1009.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pkgconf-2.5.1-h828b840_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.12-h74c2667_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-64/pyyaml-6.0.3-py312h51361c1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.6-h6e16a3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/sccache-0.14.0-h4728fb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-64-26.0-h62b880e_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/sigtool-codesign-0.1.3-hc0f2934_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/spdlog-1.17.0-h30f01e4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tapi-1600.0.11.8-h8d8e812_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-hd23fc13_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.11.0-h61f9b84_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/capnproto-1.3.0-hb142b15_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1030.6.3-llvm19_1_hd01ab73_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_impl_osx-arm64-1030.6.3-llvm19_1_he8a363d_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1030.6.3-llvm19_1_h6d92914_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19-19.1.7-default_hf3020a7_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19.1.7-default_hf9bcbb7_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-19.1.7-default_hc11f16d_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-19.1.7-h75f8d18_31.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-19.1.7-default_hc995acf_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-19.1.7-default_hc11f16d_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-19.1.7-h75f8d18_31.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-19.1.7-h855ad52_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-19.1.7-he32a8d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.11.0-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.11.0-h88570a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h784d473_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.11.0-h81a4f41_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-14.3.0-h3ef1dbf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-14.3.0-h6d03799_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_osx-arm64-14.3.0-h3c33bd0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-nompi_had3affe_106.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/highfive-2.10.1-h92077ca_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/isl-0.26-imath32_h347afa1_101.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/ld64-956.6-llvm19_1_he86490a_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-956.6-llvm19_1_ha2625f7_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-7_hc63b1ca_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-7_hd5b1ab5_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp19.1-19.1.7-default_hf3020a7_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-hd5a2499_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-h55c6f16_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-19.1.7-h6dc3340_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libcxx-headers-19.1.7-h707e725_2.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/libev-4.33-h93a5062_2.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/libgcc-15.2.0-hcbb3090_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-arm64-14.3.0-hc965647_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.86.4-he378b5c_0.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/liblapack-3.11.0-7_ha522803_netlib.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/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.67.0-hc438710_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.31-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsigtool-0.1.3-h98dc951_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/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.1-h5ef1a60_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.1-h8d039ee_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/llvm-openmp-21.1.8-h4a912ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19-19.1.7-h91fd4e7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19.1.7-h855ad52_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.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/ninja-1.13.2-h49c215f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py312he281c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openblas-0.3.31-openmp_hea878ba_0.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-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkg-config-0.29.2-hde07d2e_1009.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkgconf-2.5.1-he530434_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.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/pyyaml-6.0.3-py312h04c11ed_1.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/rhash-1.4.6-h5505292_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sccache-0.14.0-h6fdd925_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-arm64-26.0-ha3f98da_7.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/sigtool-codesign-0.1.3-h98dc951_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1600.0.11.8-h997e182_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/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.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/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-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/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 md5: d7c89558ba9fa0495403155b64376d81 license: None purls: [] size: 2562 timestamp: 1578324546067 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 + md5: a9f577daf3de00bca7c3c76c0ecbd1de + depends: + - __glibc >=2.17,<3.0.a0 + - libgomp >=7.5.0 + constrains: + - openmp_impl <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28948 + timestamp: 1770939786096 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 build_number: 16 sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 @@ -5313,6 +6001,16 @@ packages: purls: [] size: 35432 timestamp: 1766513140840 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils-2.45.1-default_h4852527_101.conda + sha256: 2851d34944b056d028543f0440fb631aeeff204151ea09589d8d9c13882395de + md5: 9902aeb08445c03fb31e01beeb173988 + depends: + - binutils_impl_linux-64 >=2.45.1,<2.45.2.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 35128 + timestamp: 1770267175160 - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45-default_hfdba357_104.conda sha256: 054a77ccab631071a803737ea8e5d04b5b18e57db5b0826a04495bd3fdf39a7c md5: a7a67bf132a4a2dea92a7cb498cdc5b1 @@ -5337,6 +6035,18 @@ packages: purls: [] size: 3719982 timestamp: 1766513109980 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda + sha256: 74341b26a2b9475dc14ba3cf12432fcd10a23af285101883e720216d81d44676 + md5: 83aa53cb3f5fc849851a84d777a60551 + depends: + - ld_impl_linux-64 2.45.1 default_hbd61a6d_101 + - 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-64/binutils_linux-64-2.45-default_h4852527_104.conda sha256: ed23fee4db69ad82320cca400fc77404c3874cd866606651a20bf743acd1a9b1 md5: e30e71d685e23cc1e5ac1c1990ba1f81 @@ -5357,6 +6067,16 @@ packages: purls: [] size: 36310 timestamp: 1766513143566 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_101.conda + sha256: 4826f97d33cbe54459970a1e84500dbe0cccf8326aaf370e707372ae20ec5a47 + md5: dec96579f9a7035a59492bf6ee613b53 + depends: + - binutils_impl_linux-64 2.45.1 default_hfdba357_101 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 36060 + timestamp: 1770267177798 - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda sha256: e7af5d1183b06a206192ff440e08db1c4e8b2ca1f8376ee45fb2f3a85d4ee45d md5: 2c2fae981fd2afd00812c92ac47d023d @@ -5470,6 +6190,17 @@ packages: purls: [] size: 260341 timestamp: 1757437258798 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 + md5: d2ffd7602c02f2b316fd921d39876885 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 260182 + timestamp: 1771350215188 - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_8.conda sha256: 8f50b58efb29c710f3cecf2027a8d7325ba769ab10c746eff75cea3ac050b10c md5: 97c4b3bd8a90722104798175a1bdddbf @@ -5480,6 +6211,16 @@ packages: purls: [] size: 132607 timestamp: 1757437730085 +- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + sha256: 9f242f13537ef1ce195f93f0cc162965d6cc79da578568d6d8e50f70dd025c42 + md5: 4173ac3b19ec0a4f400b4f782910368b + depends: + - __osx >=10.13 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 133427 + timestamp: 1771350680709 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda sha256: b456200636bd5fecb2bec63f7e0985ad2097cf1b83d60ce0b6968dffa6d02aa1 md5: 58fd217444c2a5701a44244faf518206 @@ -5490,6 +6231,16 @@ packages: purls: [] size: 125061 timestamp: 1757437486465 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df + md5: 620b85a3f45526a8bc4d23fd78fc22f0 + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 124834 + timestamp: 1771350416561 - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda sha256: d882712855624641f48aa9dc3f5feea2ed6b4e6004585d3616386a18186fe692 md5: 1077e9333c41ff0be8edd1a5ec0ddace @@ -5566,6 +6317,18 @@ packages: purls: [] size: 6667 timestamp: 1751115555092 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda + sha256: 8e7a40f16400d7839c82581410aa05c1f8324a693c9d50079f8c50dc9fb241f0 + md5: abd85120de1187b0d1ec305c2173c71b + depends: + - binutils + - gcc + - gcc_linux-64 14.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6693 + timestamp: 1753098721814 - conda: https://conda.anaconda.org/conda-forge/osx-64/c-compiler-1.10.0-h09a7c41_0.conda sha256: 6a3f6b72bf5ad154630f79bd600f6ccf0f5c6a4be5297e4831d63016f4220e62 md5: 7b7c12e4774b83c18612c78073d12adc @@ -5579,6 +6342,19 @@ packages: purls: [] size: 6773 timestamp: 1751115657381 +- conda: https://conda.anaconda.org/conda-forge/osx-64/c-compiler-1.11.0-h7a00415_0.conda + sha256: 2bd1cf3d26789b7e1d04e914ccd169bd618fceed68abf7b6a305266b88dcf861 + md5: 2b23ec416cef348192a5a17737ddee60 + depends: + - cctools >=949.0.1 + - clang_osx-64 19.* + - ld64 >=530 + - llvm-openmp + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6695 + timestamp: 1753098825695 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.10.0-hdf49b6b_0.conda sha256: efc71f2ae5901bea633c67468b3aa774b6bcf46c9433e1ab5d640e3faf1680b9 md5: 7ca1bdcc45db75f54ed7b3ac969ed888 @@ -5592,6 +6368,19 @@ packages: purls: [] size: 6758 timestamp: 1751115540465 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.11.0-h61f9b84_0.conda + sha256: b51bd1551cfdf41500f732b4bd1e4e70fb1e74557165804a648f32fa9c671eec + md5: 148516e0c9edf4e9331a4d53ae806a9b + depends: + - cctools >=949.0.1 + - clang_osx-arm64 19.* + - ld64 >=530 + - llvm-openmp + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6697 + timestamp: 1753098737760 - conda: https://conda.anaconda.org/conda-forge/win-64/c-compiler-1.11.0-h528c1b4_0.conda sha256: 55e04bd4af61500cb8cae064386be57d18fbfdf676655ff1c97c7e5d146c6e34 md5: 6d994ff9ab924ba11c2c07e93afbe485 @@ -5629,6 +6418,46 @@ packages: purls: [] size: 146519 timestamp: 1767500828366 +- conda: https://conda.anaconda.org/conda-forge/linux-64/capnproto-1.3.0-h23814c6_0.conda + sha256: 4857bd5f3557284c377a5e391a046910444ee88c78e1e7698d217eada02b2584 + md5: bf5d0d597a0d64e1c6204a7af1361704 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3734707 + timestamp: 1766168924557 +- conda: https://conda.anaconda.org/conda-forge/osx-64/capnproto-1.3.0-h94e1571_0.conda + sha256: 5b3206a29e0ea636eb5e8a104c8d87f5a837ce3a62e1306cb527173c56ddf512 + md5: 54a30dc9fc785402a42199315b207f82 + depends: + - __osx >=10.13 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2802457 + timestamp: 1766169230281 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/capnproto-1.3.0-hb142b15_0.conda + sha256: 7613d644745fb67dc03bc4667eaff23b9ef2ff80acf455d13f27fa78f45a5725 + md5: 3f82292f84075b57cbf27af1a61527f5 + depends: + - __osx >=11.0 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2903339 + timestamp: 1766169063213 - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools-1021.4-ha66f10e_0.conda sha256: 1af7ea0c54e37ca1587c2d4e9c3a5add8dfd9bc4ff929f70a4330328f0c145ac md5: 37619e89a65bb3688c67d82fd8645afc @@ -5641,6 +6470,18 @@ packages: purls: [] size: 21521 timestamp: 1752818999237 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cctools-1030.6.3-llvm19_1_h67a6458_4.conda + sha256: 0563fb193edde8002059e1a7fc32b23b5bd48389d9abdf5e49ff81e7490da722 + md5: 7b4852df7d4ed4e45bcb70c5d4b08cd0 + depends: + - cctools_impl_osx-64 1030.6.3 llvm19_1_h7d82c7c_4 + - ld64 956.6 llvm19_1_hc3792c1_4 + - libllvm19 >=19.1.7,<19.2.0a0 + license: APSL-2.0 + license_family: Other + purls: [] + size: 24262 + timestamp: 1768852850946 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1021.4-hb4fb6a3_0.conda sha256: 5492bfbb871086056daa5e7992f5845e317e09a882d1fe5fb94b3b2766462abc md5: 0db10a7dbc9494ca7a918b762722f41b @@ -5653,6 +6494,58 @@ packages: purls: [] size: 21511 timestamp: 1752819117398 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1030.6.3-llvm19_1_hd01ab73_4.conda + sha256: 4f408036b5175be0d2c7940250d00dae5ea7a71d194a1ffb35881fb9df6211fc + md5: caf7c8e48827c2ad0c402716159fe0a2 + depends: + - cctools_impl_osx-arm64 1030.6.3 llvm19_1_he8a363d_4 + - ld64 956.6 llvm19_1_he86490a_4 + - libllvm19 >=19.1.7,<19.2.0a0 + license: APSL-2.0 + license_family: Other + purls: [] + size: 24313 + timestamp: 1768852906882 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_impl_osx-64-1030.6.3-llvm19_1_h7d82c7c_4.conda + sha256: 43928e68f59a8e4135d20df702cf97073b07a162979a30258d93f6e44b1220db + md5: bb274e464cf9479e0a6da2cf2e33bc16 + depends: + - __osx >=10.13 + - ld64_osx-64 >=956.6,<956.7.0a0 + - libcxx + - libllvm19 >=19.1.7,<19.2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-tools 19.1.* + - sigtool-codesign + constrains: + - cctools 1030.6.3.* + - clang 19.1.* + - ld64 956.6.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 745672 + timestamp: 1768852809822 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_impl_osx-arm64-1030.6.3-llvm19_1_he8a363d_4.conda + sha256: c444442e0c01de92a75b58718a100f2e272649658d4f3dd915bbfc2316b25638 + md5: 76c651b923e048f3f3e0ecb22c966f70 + depends: + - __osx >=11.0 + - ld64_osx-arm64 >=956.6,<956.7.0a0 + - libcxx + - libllvm19 >=19.1.7,<19.2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-tools 19.1.* + - sigtool-codesign + constrains: + - ld64 956.6.* + - cctools 1030.6.3.* + - clang 19.1.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 749918 + timestamp: 1768852866532 - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_osx-64-1021.4-h508880d_0.conda sha256: 1fd96dc9abd1789d07e203ffac131edbbe773baeb8fc4038dcaf500f22c20c78 md5: 4813f891c9cf3901d3c9c091000c6569 @@ -5673,6 +6566,19 @@ packages: purls: [] size: 792335 timestamp: 1752818967832 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_osx-64-1030.6.3-llvm19_1_h8f0d4bb_4.conda + sha256: 258f7bde2b5f664f60130d0066f5cee96a308d946e95bacc82b44b76c776124a + md5: fdef8a054844f72a107dfd888331f4a7 + depends: + - cctools_impl_osx-64 1030.6.3 llvm19_1_h7d82c7c_4 + - ld64_osx-64 956.6 llvm19_1_hcae3351_4 + constrains: + - cctools 1030.6.3.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 23193 + timestamp: 1768852854819 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1021.4-h12580ec_0.conda sha256: 9754bae92bfeafb1c4d724161ea402101769b0239fddbcec1de5b1612dcbae87 md5: 8e0c8bd08a32fe607b6e504f8e0a00b5 @@ -5693,6 +6599,19 @@ packages: purls: [] size: 793113 timestamp: 1752819079152 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1030.6.3-llvm19_1_h6d92914_4.conda + sha256: 6b37ac10e22dd734cce14ce7d1ac6db07976bb71e38a10971c0693b9f17ad6c4 + md5: df5cd5c925df1412426e3db71d31363f + depends: + - cctools_impl_osx-arm64 1030.6.3 llvm19_1_he8a363d_4 + - ld64_osx-arm64 956.6 llvm19_1_ha2625f7_4 + constrains: + - cctools 1030.6.3.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 23211 + timestamp: 1768852915341 - pypi: https://download.pytorch.org/whl/certifi-2022.12.7-py3-none-any.whl name: certifi version: 2022.12.7 @@ -5797,6 +6716,17 @@ packages: purls: [] size: 90523 timestamp: 1768827989830 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang-19.1.7-default_h1323312_7.conda + sha256: 820d65cc9f0b44fdc088d4e7f6a154cfb323bbdeb29c6405b4794680e7e7ac18 + md5: 138b0781aea27a845b18e7c1cd34f2fb + depends: + - clang-19 19.1.7 default_hd70426c_7 + - clang_impl_osx-64 19.1.7 default_ha1a018a_7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24316 + timestamp: 1767959435159 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-18.1.8-default_hf9bcbb7_17.conda sha256: 814c40caafd065a4082bbec29e3c562359bd222a09fc5eb711af895d693fa3e4 md5: de9435da080b0e63d1eddcc7e5ba409b @@ -5807,6 +6737,17 @@ packages: purls: [] size: 90275 timestamp: 1768827137673 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19.1.7-default_hf9bcbb7_7.conda + sha256: e170fa45ea1a6c30348b05a474bfad58bcb7316ee278fd1051f1f7af105db2cd + md5: 13150cdd8e6bc61aa68b55d1a2a69083 + depends: + - clang-19 19.1.7 default_hf3020a7_7 + - clang_impl_osx-arm64 19.1.7 default_hc11f16d_7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24474 + timestamp: 1767957953998 - conda: https://conda.anaconda.org/conda-forge/win-64/clang-19.1.7-default_hac490eb_7.conda sha256: a1d02a927d05997e8a4fef000c11512baeb87dde5dda16aa871dfb0cb1bb0c9f md5: 5552cab7d5b866172bdc3d2cdf4df88e @@ -5861,6 +6802,32 @@ packages: purls: [] size: 827010 timestamp: 1768827022615 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang-19-19.1.7-default_hd70426c_7.conda + sha256: d1625b4896fa597e0f5fdcd4b7cbeea7c120728e0ef43fc641dd7e8fa6d4eabe + md5: c117b3fc6406027a2ca344aee4e1382a + depends: + - __osx >=10.13 + - libclang-cpp19.1 19.1.7 default_hd70426c_7 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 764031 + timestamp: 1767959120208 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19-19.1.7-default_hf3020a7_7.conda + sha256: d59286e188f4922f9812d8412358f98e98b187840c7256d9c143f4e9cc02847e + md5: 3b992d143f0008588ca26df8a324eee9 + depends: + - __osx >=11.0 + - libclang-cpp19.1 19.1.7 default_hf3020a7_7 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 764520 + timestamp: 1767957577398 - conda: https://conda.anaconda.org/conda-forge/win-64/clang-19-19.1.7-default_hac490eb_7.conda sha256: 34a99767bcc5435db5540224a6dc4e19ec0ab75af269364e6212512abbad62e2 md5: 9ec76da1182f9986c3d814be0af28499 @@ -6081,6 +7048,23 @@ packages: purls: [] size: 18256 timestamp: 1748575659622 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-19.1.7-default_ha1a018a_7.conda + sha256: bd9e569f9848d7fdcc963eecbc2cb75201213a751440a207956e1d670c174835 + md5: 61a2644a24a32277abae7a234f73b13d + depends: + - cctools_impl_osx-64 + - clang-19 19.1.7 default_hd70426c_7 + - compiler-rt 19.1.7.* + - compiler-rt_osx-64 + - ld64 + - ld64_osx-64 * llvm19_1_* + - llvm-openmp >=19.1.7 + - llvm-tools 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24417 + timestamp: 1767959402626 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-18.1.8-h2ae9ea5_25.conda sha256: 35273ca91fb998f979402c76066af008ad3108a61a3b161d881fcb37700a48bb md5: 9eb023cfc47dac4c22097b9344a943b4 @@ -6095,6 +7079,23 @@ packages: purls: [] size: 18331 timestamp: 1748575702758 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-19.1.7-default_hc11f16d_7.conda + sha256: faffb31c43afb4360d6545bd20590fbed5b344a77daeabdea39164d72c943d21 + md5: bde6fcb6b1fcefb687a7fb95675c6ec8 + depends: + - cctools_impl_osx-arm64 + - clang-19 19.1.7 default_hf3020a7_7 + - compiler-rt 19.1.7.* + - compiler-rt_osx-arm64 + - ld64 + - ld64_osx-arm64 * llvm19_1_* + - llvm-openmp >=19.1.7 + - llvm-tools 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24459 + timestamp: 1767957934083 - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-18.1.8-h7e5c614_25.conda sha256: 7f6aea0def866f1664b3ddf730d91e1b94da734b585c3e49cd51d3c4c66a1a49 md5: 1fea06d9ced6b87fe63384443bc2efaf @@ -6105,6 +7106,19 @@ packages: purls: [] size: 21534 timestamp: 1748575663505 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-19.1.7-h8a78ed7_31.conda + sha256: aa12658e55300efcdc34010312ee62d350464ae0ae8c30d1f7340153c9baa5aa + md5: faf4b6245c4287a4f13e793ca2826842 + depends: + - cctools_osx-64 + - clang 19.* + - clang_impl_osx-64 19.1.7.* + - sdkroot_env_osx-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 21157 + timestamp: 1769482965411 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-18.1.8-h07b0088_25.conda sha256: 4d1e695cd776783f6192fb8d4c7892c03e9f1f185dbb96cefdaab2f183430281 md5: d9ee862b94f4049c9e121e6dd18cc874 @@ -6115,6 +7129,19 @@ packages: purls: [] size: 21563 timestamp: 1748575706504 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-19.1.7-h75f8d18_31.conda + sha256: c9daaa0e7785fe7c5799e3d691c6aa5ab8b4a54bbf49835037068dd78e0a7b35 + md5: 6645630920c0980a33f055a49fbdb88e + depends: + - cctools_osx-arm64 + - clang 19.* + - clang_impl_osx-arm64 19.1.7.* + - sdkroot_env_osx-arm64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 21135 + timestamp: 1769482854554 - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-18.1.8-default_h1c12a56_16.conda sha256: 32fb83f6f6ba69265aec719057e09e7327f3825871710acbb776cb6eb28fa9ab md5: 23870e4265065771480d429b3a7679e1 @@ -6137,6 +7164,18 @@ packages: purls: [] size: 90700 timestamp: 1768828019291 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-19.1.7-default_h9089c59_7.conda + sha256: cfa79093c73f831c9df7892989e59cd25244eaf45a8d476be21871834b260c18 + md5: 85ed31bf1c61812adb2492a0745db172 + depends: + - clang 19.1.7 default_h1323312_7 + - clangxx_impl_osx-64 19.1.7.* default_*_7 + - libcxx-devel 19.1.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24380 + timestamp: 1767959626598 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-18.1.8-default_h36137df_17.conda sha256: 372dce6fbae28815dcd003fb8f8ae64367aecffaab7fe4f284b34690ef63c6c1 md5: f08f31fa4230170c15f19b9b2a39f113 @@ -6148,6 +7187,18 @@ packages: purls: [] size: 90421 timestamp: 1768827154110 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-19.1.7-default_hc995acf_7.conda + sha256: ac9f83722cfd336298b97e30c3746a8f0d9d6289a3e0383275f531dc03b2f88a + md5: 0c1f688616da9aac0ce556d74a24f740 + depends: + - clang 19.1.7 default_hf9bcbb7_7 + - clangxx_impl_osx-arm64 19.1.7.* default_*_7 + - libcxx-devel 19.1.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24443 + timestamp: 1767958120218 - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-18.1.8-h4b7810f_25.conda sha256: 1b2ee79318f37b356d36cbcfc46ff8a0a4e1d8e5fdaed1e5dbc5a2b58cacbad7 md5: c03c94381d9ffbec45c98b800e7d3e86 @@ -6161,6 +7212,18 @@ packages: purls: [] size: 18390 timestamp: 1748575690740 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-19.1.7-default_ha1a018a_7.conda + sha256: 56147cce5439c1543703dc0fb95a68793c3154f7987faf027c7159a850883298 + md5: b37f21ec0f7e5a279d51b3b692303ff6 + depends: + - clang-19 19.1.7 default_hd70426c_7 + - clang_impl_osx-64 19.1.7 default_ha1a018a_7 + - libcxx-devel 19.1.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24322 + timestamp: 1767959603633 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-18.1.8-h555f467_25.conda sha256: d0fb67a4ed19e9b40db08fce19afb342dcebc3609374a1b86c0d7a40abaf655c md5: 4d72782682bc7d61a3612fea2c93299f @@ -6174,6 +7237,18 @@ packages: purls: [] size: 18459 timestamp: 1748575734378 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-19.1.7-default_hc11f16d_7.conda + sha256: 56ec5bf095253eb7ff33b0e64f33c608d760f790f1ff0cb30480a797bffbb2fd + md5: 4fa4a9227c428372847c534a9bffd698 + depends: + - clang-19 19.1.7 default_hf3020a7_7 + - clang_impl_osx-arm64 19.1.7 default_hc11f16d_7 + - libcxx-devel 19.1.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24364 + timestamp: 1767958102690 - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-18.1.8-h7e5c614_25.conda sha256: 1a1a31eae8b491104d33d422b57578f041d34afafb4da0a7355ef16fd5174090 md5: 2e5c84e93a3519d77a0d8d9b3ea664fd @@ -6185,6 +7260,20 @@ packages: purls: [] size: 19947 timestamp: 1748575697030 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-19.1.7-h8a78ed7_31.conda + sha256: 308df8233f2a7a258e6441fb02553a1b5a54afe5e93d63b016dd9c0f1d28d5ab + md5: c3b46b5d6cd2a6d1f12b870b2c69aed4 + depends: + - cctools_osx-64 + - clang_osx-64 19.1.7 h8a78ed7_31 + - clangxx 19.* + - clangxx_impl_osx-64 19.1.7.* + - sdkroot_env_osx-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 19974 + timestamp: 1769482973715 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-18.1.8-h07b0088_25.conda sha256: aae6cad658c9899f13d5941bcadc942f1a471acdfc43cd86c3635d0e353babc9 md5: 4280e791148c1f9a3f8c0660d7a54acb @@ -6196,6 +7285,20 @@ packages: purls: [] size: 19924 timestamp: 1748575738546 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-19.1.7-h75f8d18_31.conda + sha256: f3a81f8e5451377d2b84a31f4a4e305cb92f5a4c4ba0126e7d1a3cfa4d66bf47 + md5: bd6926e81dc196064373b614af3bc9ff + depends: + - cctools_osx-arm64 + - clang_osx-arm64 19.1.7 h75f8d18_31 + - clangxx 19.* + - clangxx_impl_osx-arm64 19.1.7.* + - sdkroot_env_osx-arm64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 19914 + timestamp: 1769482862579 - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 md5: ea8a6c3256897cc31263de9f455e25d9 @@ -6286,6 +7389,27 @@ packages: purls: [] size: 22302340 timestamp: 1768967063937 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda + sha256: 5ece78754577b8d9030ec1f09ce1cd481125f27d8d6fcdcfe2c1017661830c61 + md5: 51d37989c1758b5edfe98518088bf700 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libexpat >=2.7.4,<3.0a0 + - libgcc >=14 + - liblzma >=5.8.2,<6.0a0 + - libstdcxx >=14 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - rhash >=1.4.6,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 22330508 + timestamp: 1771383666798 - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.0-h29fc008_0.conda sha256: 826b3ddafa3cf9ff2befa00b1c92d9bda75dc3cac2b1577e633d5353334c9de7 md5: 8b8277fa364d6306dfe00cb709e7cdb0 @@ -6324,13 +7448,53 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 18958048 - timestamp: 1765229793999 -- conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.2-h965d0ab_0.conda - sha256: 7fb52aa42c6561ed0e9c00fd7059bc880858b67bf58b0e4ab0d9af8882c9b638 - md5: 58d2bad0b375e2973683f559e220b292 + size: 18958048 + timestamp: 1765229793999 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.2-h965d0ab_0.conda + sha256: 7fb52aa42c6561ed0e9c00fd7059bc880858b67bf58b0e4ab0d9af8882c9b638 + md5: 58d2bad0b375e2973683f559e220b292 + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - libexpat >=2.7.3,<3.0a0 + - liblzma >=5.8.2,<6.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - rhash >=1.4.6,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18983553 + timestamp: 1768967726503 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.3-h965d0ab_1.conda + sha256: 7bc0971382c4272dba8e400b217f627583e28e4ba2fec8f77bfe2f47b9bd945f + md5: 06fa105f5ec490ca06315f2a77a3b1d7 + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - libexpat >=2.7.4,<3.0a0 + - liblzma >=5.8.2,<6.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - rhash >=1.4.6,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18992980 + timestamp: 1771384442992 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.2-h8cb302d_0.conda + sha256: fc836ee115e7959e876bba9fa6cae5e5f59c4eb85fbe2756c7b78f5590dce07f + md5: 0d52644db6143f90a0df485bbe19c34e depends: - - __osx >=10.13 + - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - libcurl >=8.18.0,<9.0a0 - libcxx >=19 @@ -6344,17 +7508,17 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 18983553 - timestamp: 1768967726503 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.2-h8cb302d_0.conda - sha256: fc836ee115e7959e876bba9fa6cae5e5f59c4eb85fbe2756c7b78f5590dce07f - md5: 0d52644db6143f90a0df485bbe19c34e + size: 17745866 + timestamp: 1768967512505 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda + sha256: 7c5fc735986f49e1c97c6919863c78e94b800602eb1ec825a294790cceb83c8b + md5: 752945affbfd47be28dfe2286052dd90 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - libcurl >=8.18.0,<9.0a0 - libcxx >=19 - - libexpat >=2.7.3,<3.0a0 + - libexpat >=2.7.4,<3.0a0 - liblzma >=5.8.2,<6.0a0 - libuv >=1.51.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 @@ -6364,8 +7528,8 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 17745866 - timestamp: 1768967512505 + size: 17746308 + timestamp: 1771384392762 - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.2-hdcbee5b_0.conda sha256: 8d82d8a14c5b966d8d31957f239e107e7bdd01fac7d2dd70e4332d7cc60c7ac0 md5: 6e2e78153e4c0657e2800256097f6400 @@ -6425,6 +7589,18 @@ packages: purls: [] size: 96219 timestamp: 1757436225599 +- conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt-19.1.7-he914875_1.conda + sha256: 28e5f0a6293acba68ebc54694a2fc40b1897202735e8e8cbaaa0e975ba7b235b + md5: e6b9e71e5cb08f9ed0185d31d33a074b + depends: + - __osx >=10.13 + - clang 19.1.7.* + - compiler-rt_osx-64 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 96722 + timestamp: 1757412473400 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-18.1.8-h855ad52_2.conda sha256: 93a26ec6d7e3d93db2d80c794e9710fc422d436680da165e78d7ff73b8ef6c12 md5: 8fa0332f248b2f65fdd497a888ab371e @@ -6437,6 +7613,18 @@ packages: purls: [] size: 95924 timestamp: 1757436417546 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-19.1.7-h855ad52_1.conda + sha256: b58a481828aee699db7f28bfcbbe72fb133277ac60831dfe70ee2465541bcb93 + md5: 39451684370ae65667fa5c11222e43f7 + depends: + - __osx >=11.0 + - clang 19.1.7.* + - compiler-rt_osx-arm64 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 97085 + timestamp: 1757411887557 - conda: https://conda.anaconda.org/conda-forge/win-64/compiler-rt-19.1.7-h49e36cd_1.conda sha256: b942211b4557680dae103a6de69f411d85973b499bc7db9bf5dd0a66f0836f3b md5: ebd0e08326cd166eb95a9956875303c3 @@ -6464,6 +7652,19 @@ packages: purls: [] size: 10231779 timestamp: 1757436151261 +- conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-64-19.1.7-h138dee1_1.conda + sha256: e6effe89523fc6143819f7a68372b28bf0c176af5b050fe6cf75b62e9f6c6157 + md5: 32deecb68e11352deaa3235b709ddab2 + depends: + - clang 19.1.7.* + constrains: + - compiler-rt 19.1.7 + - clangxx 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 10425780 + timestamp: 1757412396490 - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-18.1.8-he32a8d3_2.conda sha256: fd0e6d142d38ac54404fb8f8413fae181a2c58e7aca3f6304df58f03ab8df55b md5: e30e8ab85b13f0cab4c345d7758d525c @@ -6477,6 +7678,19 @@ packages: purls: [] size: 10204065 timestamp: 1757436348646 +- conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-19.1.7-he32a8d3_1.conda + sha256: 8c32a3db8adf18ed58197e8895ce4f24a83ed63c817512b9a26724753b116f2a + md5: 8d99c82e0f5fed6cc36fcf66a11e03f0 + depends: + - clang 19.1.7.* + constrains: + - compiler-rt 19.1.7 + - clangxx 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 10490535 + timestamp: 1757411851093 - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_win-64-19.1.7-h49e36cd_1.conda sha256: 5d43e1f0e5b66edc43f57e8c3ea502ce976f86d8eec2de51d21a3a51802b2e72 md5: dd4b9fef3c46e061a1b5e6698b17d5ff @@ -6502,6 +7716,18 @@ packages: purls: [] size: 7452 timestamp: 1751115555727 +- conda: https://conda.anaconda.org/conda-forge/linux-64/compilers-1.11.0-ha770c72_0.conda + sha256: 5709f2cbfeb8690317ba702611bdf711a502b417fecda6ad3313e501f6f8bd61 + md5: fdcf2e31dd960ef7c5daa9f2c95eff0e + depends: + - c-compiler 1.11.0 h4d9bdce_0 + - cxx-compiler 1.11.0 hfcd1e18_0 + - fortran-compiler 1.11.0 h9bea470_0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7482 + timestamp: 1753098722454 - conda: https://conda.anaconda.org/conda-forge/osx-64/compilers-1.10.0-h694c41f_0.conda sha256: 8c7e12b57e480bcb3babb742da9289b6a40a19ff802e5574b72d252f4c0a3369 md5: d43a090863429d66e0986c84de7a7906 @@ -6514,6 +7740,18 @@ packages: purls: [] size: 7586 timestamp: 1751115659782 +- conda: https://conda.anaconda.org/conda-forge/osx-64/compilers-1.11.0-h694c41f_0.conda + sha256: d95722dfe9a45b22fbb4e8d4f9531ac5ef7d829f3bfd2ed399d45d7590681bd0 + md5: 308ed38aeff454285547012272cb59f5 + depends: + - c-compiler 1.11.0 h7a00415_0 + - cxx-compiler 1.11.0 h307afc9_0 + - fortran-compiler 1.11.0 h9ab62e8_0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7509 + timestamp: 1753098827841 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.10.0-hce30654_0.conda sha256: 1403b04a687dd2b85c8bac9a933e6719340b2bcad45f84fbf516ed5e48ef2d07 md5: fbbdbdefc4d0c8b68ed08c88ad454b5d @@ -6526,6 +7764,18 @@ packages: purls: [] size: 7586 timestamp: 1751115542506 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.11.0-hce30654_0.conda + sha256: 01f02e9baa51ef2debfdc55df57ea6a7fce9b5fb9356c3267afb517e1dc4363a + md5: aac0d423ecfd95bde39582d0de9ca657 + depends: + - c-compiler 1.11.0 h61f9b84_0 + - cxx-compiler 1.11.0 h88570a1_0 + - fortran-compiler 1.11.0 h81a4f41_0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7525 + timestamp: 1753098740763 - conda: https://conda.anaconda.org/conda-forge/win-64/compilers-1.11.0-h57928b3_0.conda sha256: 37d51307f25e1d446b458881b366331e2c5b4c661b04c472f70408edac309b1f md5: 13095e0e8944fcdecae4c16812c0a608 @@ -6538,6 +7788,16 @@ packages: purls: [] size: 7886 timestamp: 1753098810030 +- conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-14.3.0-he8ccf15_18.conda + sha256: b90ec0e6a9eb22f7240b3584fe785457cff961fec68d40e6aece5d596f9bbd9a + md5: 0e3e144115c43c9150d18fa20db5f31c + depends: + - gcc_impl_linux-64 >=14.3.0,<14.3.1.0a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 31705 + timestamp: 1771378159534 - pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl name: contourpy version: 1.3.3 @@ -6736,6 +7996,18 @@ packages: purls: [] size: 6633 timestamp: 1751115555450 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.11.0-hfcd1e18_0.conda + sha256: 3fcc97ae3e89c150401a50a4de58794ffc67b1ed0e1851468fcc376980201e25 + md5: 5da8c935dca9186673987f79cef0b2a5 + depends: + - c-compiler 1.11.0 h4d9bdce_0 + - gxx + - gxx_linux-64 14.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6635 + timestamp: 1753098722177 - conda: https://conda.anaconda.org/conda-forge/osx-64/cxx-compiler-1.10.0-h20888b2_0.conda sha256: 15f6ea7258555b2e34d147d378f4e8e08343ca3e71a18bd98b89a3dbc43142a2 md5: b3a935ade707c54ebbea5f8a7c6f4549 @@ -6747,6 +8019,17 @@ packages: purls: [] size: 6785 timestamp: 1751115659099 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cxx-compiler-1.11.0-h307afc9_0.conda + sha256: d6976f8d8b51486072abfe1e76a733688380dcbd1a8e993a43d59b80f7288478 + md5: 463bb03bb27f9edc167fb3be224efe96 + depends: + - c-compiler 1.11.0 h7a00415_0 + - clangxx_osx-64 19.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6732 + timestamp: 1753098827160 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.10.0-hba80287_0.conda sha256: 52cbfc615a9727294fccdd507f11919ca01ff29bd928bb5aa0b211697a983e9f md5: 7fca30a1585a85ec8ab63579afcac5d3 @@ -6758,6 +8041,17 @@ packages: purls: [] size: 6784 timestamp: 1751115541888 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.11.0-h88570a1_0.conda + sha256: 99800d97a3a2ee9920dfc697b6d4c64e46dc7296c78b1b6c746ff1c24dea5e6c + md5: 043afed05ca5a0f2c18252ae4378bdee + depends: + - c-compiler 1.11.0 h61f9b84_0 + - clangxx_osx-arm64 19.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6715 + timestamp: 1753098739952 - conda: https://conda.anaconda.org/conda-forge/win-64/cxx-compiler-1.11.0-h1c1089f_0.conda sha256: c888f4fe9ec117c1c01bfaa4c722ca475ebbb341c92d1718afa088bb0d710619 md5: 4d94d3c01add44dc9d24359edf447507 @@ -6889,6 +8183,29 @@ packages: purls: [] size: 1169164 timestamp: 1759819831835 +- conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h54a6638_1.conda + sha256: dcf2f993c6b877613af2f38644fb0b199602913b3dfcedb8188e05987f04833d + md5: 284596590c3d0b35739c0ed0b8bfcddd + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 1172902 + timestamp: 1771590573478 +- conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-h2fb4741_1.conda + sha256: 7dbc71717ebd1e59b5593f739c68f5da9e24d4a654a4b17468099783800a0e8a + md5: cd30a50f824ee8094fae403949f8e09b + depends: + - libcxx >=19 + - __osx >=11.0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 1174070 + timestamp: 1771590662874 - conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-hfc0b2d5_1.conda sha256: 929bf0e15495bff2a08dfc372860c10efd829b9d66a7441bbfd565b6b8c8cf5a md5: 7e58d0dcc1f43ed4baf6d3156630cc68 @@ -6911,6 +8228,17 @@ packages: purls: [] size: 1169935 timestamp: 1759819925766 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h784d473_1.conda + sha256: bc68b39797d8bdc2d4885a0de62fa87dde81812eb3d640ac225316726280de85 + md5: 08c7e090a0db4c2f35887f0db3609a4a + depends: + - libcxx >=19 + - __osx >=11.0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 1174626 + timestamp: 1771590652561 - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h477610d_1.conda sha256: 39d6fa1245ef8c226ff3e485e947770e3b9c7d65fed6c42bd297e2b218b4ddab md5: 8ac3430db715982d054a004133ae8ae2 @@ -6993,6 +8321,11 @@ packages: version: 3.24.0 sha256: eebebb403d78363ef7be8e236b63cc6760b0004c7464dceaba3fd0afbd637ced requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9c/0f/5d0c71a1aefeb08efff26272149e07ab922b64f46c63363756224bd6872e/filelock-3.24.3-py3-none-any.whl + name: filelock + version: 3.24.3 + sha256: 426e9a4660391f7f8a810d71b0555bce9008b0a1cc342ab1f6947d37639e002d + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda sha256: 19025a4078ff3940d97eb0da29983d5e0deac9c3e09b0eabf897daeaf9d1114e md5: 66b8b26023b8efdf8fcb23bac4b6325d @@ -7292,6 +8625,19 @@ packages: purls: [] size: 6650 timestamp: 1751115555592 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.11.0-h9bea470_0.conda + sha256: 53e5562ede83b478ebe9f4fc3d3b4eff5b627883f48aa0bf412e8fd90b5d6113 + md5: d5596f445a1273ddc5ea68864c01b69f + depends: + - binutils + - c-compiler 1.11.0 h4d9bdce_0 + - gfortran + - gfortran_linux-64 14.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6656 + timestamp: 1753098722318 - conda: https://conda.anaconda.org/conda-forge/osx-64/fortran-compiler-1.10.0-h02557f8_0.conda sha256: 85bd7664f86cbf5e8d4f42ef79104bb2ddb1d9c15286894a34f84acc4f6fd731 md5: aa3288408631f87b70295594cd4daba8 @@ -7306,6 +8652,20 @@ packages: purls: [] size: 6813 timestamp: 1751115658407 +- conda: https://conda.anaconda.org/conda-forge/osx-64/fortran-compiler-1.11.0-h9ab62e8_0.conda + sha256: 21e2ec84b7b152daa22fa8cc98be5d4ba9ff93110bbc99e05dfd45eb6f7e8b77 + md5: ee1a3ecd568a695ea16747198df983eb + depends: + - cctools >=949.0.1 + - gfortran + - gfortran_osx-64 14.* + - ld64 >=530 + - llvm-openmp + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6749 + timestamp: 1753098826431 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.10.0-h5692697_0.conda sha256: 9386f285f6a57edaa2bb72ec1372cf99146369915647ef884680078b30ea5780 md5: 75f13dea967348e4f05143a3326142d5 @@ -7320,6 +8680,20 @@ packages: purls: [] size: 6808 timestamp: 1751115541182 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.11.0-h81a4f41_0.conda + sha256: 1a030edc0e79e4e7a4ed9736ec6925303940148d00f20faf3a7abf0565de181e + md5: d221c62af175b83186f96d8b0880bff6 + depends: + - cctools >=949.0.1 + - gfortran + - gfortran_osx-arm64 14.* + - ld64 >=530 + - llvm-openmp + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6723 + timestamp: 1753098739029 - conda: https://conda.anaconda.org/conda-forge/win-64/fortran-compiler-1.11.0-h95e3450_0.conda sha256: 9378136997003be05b4377bef00f414f73f6ed2ec3a8505467bd6eaf0dea2acb md5: c9e93abb0200067d40aa42c96fe1a156 @@ -7603,6 +8977,17 @@ packages: purls: [] size: 55246 timestamp: 1740240578937 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_18.conda + sha256: 9b34b57b06b485e33a40d430f71ac88c8f381673592507cf7161c50ff0832772 + md5: 52d6457abc42e320787ada5f9033fa99 + depends: + - conda-gcc-specs + - gcc_impl_linux-64 14.3.0 hbdf3cc3_18 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 29506 + timestamp: 1771378321585 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-h1e990d8_2.conda sha256: c3e9f243ea8292eecad78bb200d8f5b590e0f82bf7e7452a3a7c8df4eea6f774 md5: f46cf0acdcb6019397d37df1e407ab91 @@ -7619,6 +9004,23 @@ packages: purls: [] size: 66770653 timestamp: 1740240400031 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hbdf3cc3_18.conda + sha256: 3b31a273b806c6851e16e9cf63ef87cae28d19be0df148433f3948e7da795592 + md5: 30bb690150536f622873758b0e8d6712 + depends: + - binutils_impl_linux-64 >=2.45 + - libgcc >=14.3.0 + - libgcc-devel_linux-64 14.3.0 hf649bbc_118 + - libgomp >=14.3.0 + - libsanitizer 14.3.0 h8f1669f_18 + - libstdcxx >=14.3.0 + - libstdcxx-devel_linux-64 14.3.0 h9f08a49_118 + - sysroot_linux-64 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 76302378 + timestamp: 1771378056505 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.3.0-h6f18a23_11.conda sha256: b2533388ec510ef0fc95774f15fdfb89582623049494506ea27622333f90bc09 md5: 639ef869618e311eee4888fcb40747e2 @@ -7631,6 +9033,18 @@ packages: purls: [] size: 32538 timestamp: 1748905867619 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_21.conda + sha256: 27ad0cd10dccffca74e20fb38c9f8643ff8fce56eee260bf89fa257d5ab0c90a + md5: 1403ed5fe091bd7442e4e8a229d14030 + depends: + - gcc_impl_linux-64 14.3.0.* + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28946 + timestamp: 1770908213807 - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran-13.3.0-h9576a4e_2.conda sha256: 9425741d57bbcf918fe98cb375508f31de0daa655f3cebe100a43cf7cb46ec39 md5: 19e6d3c9cde10a0a9a170a684082588e @@ -7643,6 +9057,18 @@ packages: purls: [] size: 54740 timestamp: 1740240701423 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran-14.3.0-h76987e4_18.conda + sha256: c216b97f00973fc6c37af16d1d974635e81cfc93462123b1d0ffc93fe509ea01 + md5: 958a6ecb4188cce9edbd9bbd2831a61d + depends: + - gcc 14.3.0 h0dff253_18 + - gcc_impl_linux-64 14.3.0 hbdf3cc3_18 + - gfortran_impl_linux-64 14.3.0 h1a219da_18 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28880 + timestamp: 1771378338951 - conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran-13.3.0-hcc3c99d_1.conda sha256: 6dfcb28c051c258b566bf128c4df870f9df6e3dc1b7177d9cffcef0b0fcf7157 md5: e1177b9b139c6cf43250427819f2f07b @@ -7655,6 +9081,18 @@ packages: purls: [] size: 32387 timestamp: 1742561765479 +- conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran-14.3.0-hcc3c99d_0.conda + sha256: e99605f629a4baceba28bfda6305f6898a42a1a05a5833a92808b737457a0711 + md5: 6077316830986f224d771f9e6ba5c516 + depends: + - cctools + - gfortran_osx-64 14.3.0 + - ld64 + license: GPL-3.0-or-later WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 32631 + timestamp: 1751220511321 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-13.2.0-h1ca8e4b_1.conda sha256: 1232495ccd08cec4c80d475d584d1fc84365a1ef1b70e45bb0d9c317e9ec270e md5: 9eac94b5f64ba2d59ef2424cc44bebea @@ -7667,6 +9105,18 @@ packages: purls: [] size: 31973 timestamp: 1694179448089 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-14.3.0-h3ef1dbf_0.conda + sha256: cfdf9b4dd37ddfc15ea1c415619d4137004fa135d7192e5cdcea8e3944dc9df7 + md5: e148e0bc9bbc90b6325a479a5501786d + depends: + - cctools + - gfortran_osx-arm64 14.3.0 + - ld64 + license: GPL-3.0-or-later WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 32740 + timestamp: 1751220440768 - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-13.3.0-h84c1745_2.conda sha256: 03a45f58b41909d4189fb81ec7f971b60aaccf95a3953049d93ae7d06eb19000 md5: 4e21ed177b76537067736f20f54fee0a @@ -7681,6 +9131,20 @@ packages: purls: [] size: 15923784 timestamp: 1740240635243 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-14.3.0-h1a219da_18.conda + sha256: d8c8ba10471d4ec6e9d28b5a61982b0f49cb6ad55a6c84cb85b71f026329bd09 + md5: 91531d5176126c652e8b8dfcfa263dcd + depends: + - gcc_impl_linux-64 >=14.3.0 + - libgcc >=14.3.0 + - libgfortran5 >=14.3.0 + - libstdcxx >=14.3.0 + - sysroot_linux-64 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 18544424 + timestamp: 1771378230570 - conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran_impl_osx-64-13.3.0-hbf5bf67_105.conda sha256: c7d9cae04fa4becb2ba24cd6129748788f93ea0a0917e1266474322dea6df574 md5: f56a107c8d1253346d01785ecece7977 @@ -7701,6 +9165,28 @@ packages: purls: [] size: 20695550 timestamp: 1743911459556 +- conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran_impl_osx-64-14.3.0-h94fe04d_1.conda + sha256: 7a2a952ffee0349147768c1d6482cb0933349017056210118ebd5f0fb688f5d5 + md5: 1a81d1a0cb7f241144d9f10e55a66379 + depends: + - __osx >=10.13 + - cctools_osx-64 + - clang + - gmp >=6.3.0,<7.0a0 + - isl 0.26.* + - libcxx >=17 + - libgfortran-devel_osx-64 14.3.0.* + - libgfortran5 >=14.3.0 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - zlib + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 23083852 + timestamp: 1759709470800 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-13.2.0-h252ada1_3.conda sha256: 1ba0d59650e2d54ebcfdd6d6e7ce6823241764183c34f082bc1313ec43b01c7a md5: 4a020e943a2888b242b312a8e953eb9a @@ -7720,6 +9206,28 @@ packages: purls: [] size: 18431819 timestamp: 1707330710124 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-14.3.0-h6d03799_1.conda + sha256: c05c634388e180f79c70a5989d2b25977716b7f6d5e395119ad0007cf4a7bcbf + md5: 1e9ec88ecc684d92644a45c6df2399d0 + depends: + - __osx >=11.0 + - cctools_osx-arm64 + - clang + - gmp >=6.3.0,<7.0a0 + - isl 0.26.* + - libcxx >=17 + - libgfortran-devel_osx-arm64 14.3.0.* + - libgfortran5 >=14.3.0 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - zlib + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 20286770 + timestamp: 1759712171482 - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-13.3.0-h1917dac_11.conda sha256: e51bcd274ca1ff67b4f32cd772317f43a7f43dad1f8c07d400b4918a9f88b006 md5: 85b2fa3c287710011199f5da1bac5b43 @@ -7733,6 +9241,19 @@ packages: purls: [] size: 30896 timestamp: 1748905884078 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-14.3.0-hfa02b96_21.conda + sha256: 406e1b10478b29795377cc2ad561618363aaf37b208e5cb3de7858256f73276a + md5: 234863e90d09d229043af1075fcf8204 + depends: + - gfortran_impl_linux-64 14.3.0.* + - gcc_linux-64 ==14.3.0 h298d278_21 + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 27130 + timestamp: 1770908213808 - conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran_osx-64-13.3.0-h3223c34_1.conda sha256: 3c0887454dc9ddf4d627181899119908db8f4740fe60f93fb98cf6dc408e90bf md5: a6eeb1519091ac3239b88ee3914d6cb6 @@ -7750,6 +9271,23 @@ packages: purls: [] size: 35730 timestamp: 1742561746925 +- conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran_osx-64-14.3.0-h3223c34_0.conda + sha256: 14014ad4d46e894645979cbad42dd509482172095c756bdb5474918e0638bd57 + md5: 979b3c36c57d31e1112fa1b1aec28e02 + depends: + - cctools_osx-64 + - clang + - clang_osx-64 + - gfortran_impl_osx-64 14.3.0 + - ld64_osx-64 + - libgfortran + - libgfortran-devel_osx-64 14.3.0 + - libgfortran5 >=14.3.0 + license: GPL-3.0-or-later WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 35767 + timestamp: 1751220493617 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_osx-arm64-13.2.0-h57527a5_1.conda sha256: 3b075f15aba705d43870fdfde5a8d3f1adc9a045d575b4665726afe244149a64 md5: 13ca786286ed5efc9dc75f64b5101210 @@ -7767,6 +9305,23 @@ packages: purls: [] size: 35260 timestamp: 1694179424284 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_osx-arm64-14.3.0-h3c33bd0_0.conda + sha256: 2644e5f4b4eed171b12afb299e2413be5877db92f30ec03690621d1ae648502c + md5: 8db8c0061c0f3701444b7b9cc9966511 + depends: + - cctools_osx-arm64 + - clang + - clang_osx-arm64 + - gfortran_impl_osx-arm64 14.3.0 + - ld64_osx-arm64 + - libgfortran + - libgfortran-devel_osx-arm64 14.3.0 + - libgfortran5 >=14.3.0 + license: GPL-3.0-or-later WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 35951 + timestamp: 1751220424258 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda sha256: 309cf4f04fec0c31b6771a5809a1909b4b3154a2208f52351e1ada006f4c750c md5: c94a5994ef49749880a8139cf9afcbe1 @@ -7842,6 +9397,17 @@ packages: purls: [] size: 54718 timestamp: 1740240712365 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-14.3.0-h76987e4_18.conda + sha256: 1b490c9be9669f9c559db7b2a1f7d8b973c58ca0c6f21a5d2ba3f0ab2da63362 + md5: 19189121d644d4ef75fed05383bc75f5 + depends: + - gcc 14.3.0 h0dff253_18 + - gxx_impl_linux-64 14.3.0 h2185e75_18 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28883 + timestamp: 1771378355605 - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.3.0-hae580e1_2.conda sha256: 7cb36526a5c3e75ae07452aee5c9b6219f62fad9f85cc6d1dab5b21d1c4cc996 md5: b55f02540605c322a47719029f8404cc @@ -7855,6 +9421,19 @@ packages: purls: [] size: 13362974 timestamp: 1740240672045 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_18.conda + sha256: 38ffca57cc9c264d461ac2ce9464a9d605e0f606d92d831de9075cb0d95fc68a + md5: 6514b3a10e84b6a849e1b15d3753eb22 + depends: + - gcc_impl_linux-64 14.3.0 hbdf3cc3_18 + - libstdcxx-devel_linux-64 14.3.0 h9f08a49_118 + - sysroot_linux-64 + - tzdata + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 14566100 + timestamp: 1771378271421 - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.3.0-hb14504d_11.conda sha256: dda6a2765249c40168defea26aa67ff37d4d9fd214fb6e8d4fe0f434033bef87 md5: 2ca7575e4f2da39c5ee260e022ab1a6f @@ -7868,6 +9447,19 @@ packages: purls: [] size: 30844 timestamp: 1748905886442 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he467f4b_21.conda + sha256: 1e07c197e0779fa9105e59cd55a835ded96bfde59eb169439736a89b27b48e5d + md5: 7b51f4ff82eeb1f386bfee20a7bed3ed + depends: + - gxx_impl_linux-64 14.3.0.* + - gcc_linux-64 ==14.3.0 h298d278_21 + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 27503 + timestamp: 1770908213813 - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl name: h11 version: 0.16.0 @@ -7929,6 +9521,24 @@ packages: purls: [] size: 3933534 timestamp: 1753358621585 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_106.conda + sha256: 1fc50ce3b86710fba3ec9c5714f1612b5ffa4230d70bfe43e2a1436eacba1621 + md5: c223ee1429ba538f3e48cfb4a0b97357 + depends: + - __glibc >=2.17,<3.0.a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3708864 + timestamp: 1770390337946 - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h1b119a7_104.conda sha256: 454e9724b322cee277abd7acf4f8d688e9c4ded006b6d5bc9fcc2a1ff907d27a md5: 0857f4d157820dcd5625f61fdfefb780 @@ -8004,19 +9614,36 @@ packages: md5: 3f1df98f96e0c369d94232712c9b87d0 depends: - __osx >=10.13 - - libaec >=1.1.4,<2.0a0 - - libcurl >=8.14.1,<9.0a0 + - libaec >=1.1.4,<2.0a0 + - libcurl >=8.14.1,<9.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libgfortran5 >=15.1.0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3522832 + timestamp: 1753358062940 +- conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.6-nompi_hf563b80_106.conda + sha256: 4bcc7d54a011f1d515da2fb3406659574bae5f284bced126c756ed9ef151459f + md5: b74e900265ad3808337cd542cfad6733 + depends: + - __osx >=10.13 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.18.0,<9.0a0 - libcxx >=19 - libgfortran - libgfortran5 >=14.3.0 - - libgfortran5 >=15.1.0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.1,<4.0a0 + - openssl >=3.5.5,<4.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 3522832 - timestamp: 1753358062940 + size: 3526365 + timestamp: 1770391694712 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-mpi_openmpi_h2a44015_5.conda sha256: 02e5f6c460395521f8e726abc84bc11e73688fdec96eae3c08e15de8453a9392 md5: b9cd1f45c6f019673676966c4bc40986 @@ -8052,6 +9679,23 @@ packages: purls: [] size: 3299483 timestamp: 1768858142380 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-nompi_had3affe_106.conda + sha256: e91c2b8fe62d73bb56bdb9b5adcdcbedbd164ced288e0f361b8eb3f017ddcd7b + md5: 2d1270d283403c542680e969bea70355 + depends: + - __osx >=11.0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3299759 + timestamp: 1770390513189 - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.6-nompi_h89f0904_105.conda sha256: 52e5eb039289946a32aee305e6af777d77376dc0adcb2bdcc31633dcc48d21a5 md5: c1caaf8a28c0eb3be85566e63a5fcb5a @@ -8547,6 +10191,29 @@ packages: - pytest>=8.3.2 ; extra == 'all' - flake8>=7.1.1 ; extra == 'all' requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyh53cf698_0.conda + sha256: 12cb4db242ea1a2e5e60a51b20f16e9c8120a9eb5d013c641cbf827bf3bb78e1 + md5: 441ca4e203a62f7db2f29f190c02b9cf + depends: + - __unix + - pexpect >4.3 + - decorator >=4.3.2 + - ipython_pygments_lexers >=1.0.0 + - jedi >=0.18.1 + - matplotlib-inline >=0.1.5 + - prompt-toolkit >=3.0.41,<3.1.0 + - pygments >=2.11.0 + - python >=3.11 + - stack_data >=0.6.0 + - traitlets >=5.13.0 + - typing_extensions >=4.6 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython?source=compressed-mapping + size: 647436 + timestamp: 1770040907512 - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyhe2676ad_0.conda sha256: 89e39c69cb3b8b0d11930968d66dca6f7c3dff3ad8c520ac10af11f53a10fae4 md5: d44777fc7219cb62865dfdcba308ea0d @@ -8869,6 +10536,22 @@ packages: purls: [] size: 1370023 timestamp: 1719463201255 +- 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/osx-64/krb5-1.21.3-h37d8d59_0.conda sha256: 83b52685a4ce542772f0892a0f05764ac69d57187975579a0835ff255ae3ef9c md5: d4765c524b1d91567886bde656fb514b @@ -8883,6 +10566,20 @@ packages: purls: [] size: 1185323 timestamp: 1719463492984 +- conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda + sha256: df009385e8262c234c0dae9016540b86dad3d299f0d9366d08e327e8e7731634 + md5: e66e2c52d2fdddcf314ad750fb4ebb4a + depends: + - __osx >=10.13 + - 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: 1193620 + timestamp: 1769770267475 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b md5: c6dc8a0fdec13a0565936655c33069a1 @@ -8897,6 +10594,20 @@ packages: purls: [] size: 1155530 timestamp: 1719463474401 +- 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.21.3-hdf4eb48_0.conda sha256: 18e8b3430d7d232dad132f574268f56b3eb1a19431d6d5de8c53c29e6c18fa81 md5: 31aec030344e962fbd7dbbbbd68e60a9 @@ -9045,6 +10756,20 @@ packages: purls: [] size: 18815 timestamp: 1752818984788 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ld64-956.6-llvm19_1_hc3792c1_4.conda + sha256: 6f821c4c6a19722162ef2905c45e0f8034544dab70bb86c647fb4e022a9c27b4 + md5: 4d51a4b9f959c1fac780645b9d480a82 + depends: + - ld64_osx-64 956.6 llvm19_1_hcae3351_4 + - libllvm19 >=19.1.7,<19.2.0a0 + constrains: + - cctools 1030.6.3.* + - cctools_osx-64 1030.6.3.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 21560 + timestamp: 1768852832804 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-954.16-h4c6efb1_0.conda sha256: 722595fb6f81552a88864f79f87238f0dba8e2d3f6c5adf4322a66259c4ea825 md5: 04733a89c85df5b0fa72826b9e88b3a8 @@ -9059,6 +10784,20 @@ packages: purls: [] size: 18863 timestamp: 1752819098768 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-956.6-llvm19_1_he86490a_4.conda + sha256: d6197b4825ece12ab63097bd677294126439a1a6222c7098885aa23464ef280c + md5: 22eb76f8d98f4d3b8319d40bda9174de + depends: + - ld64_osx-arm64 956.6 llvm19_1_ha2625f7_4 + - libllvm19 >=19.1.7,<19.2.0a0 + constrains: + - cctools_osx-arm64 1030.6.3.* + - cctools 1030.6.3.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 21592 + timestamp: 1768852886875 - conda: https://conda.anaconda.org/conda-forge/osx-64/ld64_osx-64-954.16-h28b3ac7_0.conda sha256: 9ec626913646076c7514f294f46191b27e43fd87da24e98577078651a9b425f0 md5: e198e41dada835a065079e4c70905974 @@ -9078,6 +10817,25 @@ packages: purls: [] size: 1100874 timestamp: 1752818929757 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ld64_osx-64-956.6-llvm19_1_hcae3351_4.conda + sha256: 2ae4c885ea34bc976232fbfb8129a2a3f0a79b0f42a8f7437e06d571d1b6760c + md5: 2329a96b45c853dd22af9d11762f9057 + depends: + - __osx >=10.13 + - libcxx + - libllvm19 >=19.1.7,<19.2.0a0 + - sigtool-codesign + - tapi >=1600.0.11.8,<1601.0a0 + constrains: + - cctools 1030.6.3.* + - clang 19.1.* + - cctools_impl_osx-64 1030.6.3.* + - ld64 956.6.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 1110678 + timestamp: 1768852747927 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-954.16-h9d5fcb0_0.conda sha256: 825b56e7016fa64f3fb3b25ba535e838c914264c71ba47075bab91b56a738cbb md5: f46ccafd4b646514c45cf9857f9b4059 @@ -9097,6 +10855,25 @@ packages: purls: [] size: 1022059 timestamp: 1752819033976 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-956.6-llvm19_1_ha2625f7_4.conda + sha256: 4161eec579cea07903ee2fafdde6f8f9991dabd54f3ca6609a1bf75bed3dc788 + md5: eaf3d06e3a8a10dee7565e8d76ae618d + depends: + - __osx >=11.0 + - libcxx + - libllvm19 >=19.1.7,<19.2.0a0 + - sigtool-codesign + - tapi >=1600.0.11.8,<1601.0a0 + constrains: + - cctools_impl_osx-arm64 1030.6.3.* + - ld64 956.6.* + - cctools 1030.6.3.* + - clang 19.1.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 1040464 + timestamp: 1768852821767 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_104.conda sha256: 9e191baf2426a19507f1d0a17be0fdb7aa155cdf0f61d5a09c808e0a69464312 md5: a6abd2796fc332536735f68ba23f7901 @@ -9123,6 +10900,19 @@ packages: purls: [] size: 730831 timestamp: 1766513089214 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3 + md5: 12bd9a3f089ee6c9266a37dab82afabd + 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-64/libabseil-20220623.0-cxx17_h05df665_6.conda sha256: 3b2f0b6218d27f545aec2fa27dbb771d3b6497379c3b5804513e142a5e404ba0 md5: 39f6394ae835f0b16f01cbbd3bb1e8e2 @@ -9759,6 +11549,30 @@ packages: purls: [] size: 13334948 timestamp: 1768826899333 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp19.1-19.1.7-default_hd70426c_7.conda + sha256: 3e8588828d2586722328ea39a7cf48c50a32f7661b55299075741ef7c8875ad5 + md5: b671ac86f33848f3bc3a6066d21c37dd + depends: + - __osx >=10.13 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 14856190 + timestamp: 1767958815491 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp19.1-19.1.7-default_hf3020a7_7.conda + sha256: 89b8aed26ef89c9e56939d1acefa91ecf2e198923bfcc41f116c0de42ce869cb + md5: 5600ae1b88144099572939e773f4b20b + 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: 14062741 + timestamp: 1767957389675 - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.7-default_h99862b1_0.conda sha256: 8408e8b7dc4ac90bc011f76732277e6567645258c201a67803afd4804e9b5cd5 md5: e0015b7d1873038a184e073c0d87bdd5 @@ -9885,6 +11699,23 @@ packages: purls: [] size: 462942 timestamp: 1767821743793 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-hcf29cc6_1.conda + sha256: c84e8dccb65ad5149c0121e4b54bdc47fa39303fd5f4979b8c44bb51b39a369b + md5: 1707cdd636af2ff697b53186572c9f77 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 463621 + timestamp: 1770892808818 - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.17.0-h7dd4100_0.conda sha256: a58ca5a28c1cb481f65800781cee9411bd68e8bda43a69817aaeb635d25f7d75 md5: b3985ef7ca4cd2db59756bae2963283a @@ -9933,6 +11764,38 @@ packages: purls: [] size: 419089 timestamp: 1767822218800 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9a2545f_1.conda + sha256: e2d8cb7c6d8dfb6c277eddbb9cf099805f40957877a48347cafddeade02f143a + md5: a6c0494188638d4bfe767f195619bb93 + depends: + - __osx >=10.13 + - krb5 >=1.22.2,<1.23.0a0 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 419351 + timestamp: 1770893388507 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-hd5a2499_1.conda + sha256: dbc34552fc6f040bbcd52b4246ec068ce8d82be0e76bfe45c6984097758d37c2 + md5: 2742a933ef07e91f38e3d33ad6fe937c + depends: + - __osx >=11.0 + - krb5 >=1.22.2,<1.23.0a0 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 402616 + timestamp: 1770893178846 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-he38603e_0.conda sha256: 11c78b3e89bc332933386f0a11ac60d9200afb7a811b9e3bec98aef8d4a6389b md5: 36190179a799f3aee3c2d20a8a2b970d @@ -9999,6 +11862,26 @@ packages: purls: [] size: 569777 timestamp: 1765919624323 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda + sha256: 2619d471c50c466320e2aea906a4363e34efe181e61346e4453bc68264c5185f + md5: 1ac756454e65fb3fd7bc7de599526e43 + depends: + - __osx >=10.13 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 571912 + timestamp: 1770237202404 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-h55c6f16_2.conda + sha256: 5fbeb2fc2673f0455af6079abf93faaf27f11a92574ad51565fa1ecac9a4e2aa + md5: 4cb5878bdb9ebfa65b7cdff5445087c5 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 570068 + timestamp: 1770238262922 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_0.conda sha256: 82e228975fd491bcf1071ecd0a6ec2a0fcc5f57eb0bd1d52cb13a18d57c67786 md5: 780f0251b757564e062187044232c2b7 @@ -10019,6 +11902,17 @@ packages: purls: [] size: 794361 timestamp: 1742451346844 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-devel-19.1.7-h7c275be_2.conda + sha256: 760af3509e723d8ee5a9baa7f923a213a758b3a09e41ffdaf10f3a474898ab3f + md5: 52031c3ab8857ea8bcc96fe6f1b6d778 + depends: + - libcxx >=19.1.7 + - libcxx-headers >=19.1.7,<19.1.8.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 23069 + timestamp: 1764648572536 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-18.1.8-h6dc3340_8.conda sha256: ff83d001603476033eca155ce77f7ba614d9dc70c5811e2ce9915a3cadacb56f md5: fdf0850d6d1496f33e3996e377f605ed @@ -10029,6 +11923,29 @@ packages: purls: [] size: 794791 timestamp: 1742451369695 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-19.1.7-h6dc3340_2.conda + sha256: ec07ebaa226792f4e2bf0f5dba50325632a7474d5f04b951d8291be70af215da + md5: 9f7810b7c0a731dbc84d46d6005890ef + depends: + - libcxx >=19.1.7 + - libcxx-headers >=19.1.7,<19.1.8.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 23000 + timestamp: 1764648270121 +- conda: https://conda.anaconda.org/conda-forge/noarch/libcxx-headers-19.1.7-h707e725_2.conda + sha256: 36485e6807e03a4f15a8018ec982457a9de0a1318b4b49a44c5da75849dbe24f + md5: de91b5ce46dc7968b6e311f9add055a2 + depends: + - __unix + constrains: + - libcxx-devel 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 830747 + timestamp: 1764647922410 - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 md5: c277e0a4d549b03ac1e9d6cbbe3d017b @@ -10136,6 +12053,19 @@ packages: purls: [] size: 76643 timestamp: 1763549731408 +- 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 - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.3-heffb93a_0.conda sha256: d11b3a6ce5b2e832f430fd112084533a01220597221bee16d6c7dc3947dffba6 md5: 222e0732a1d0780a622926265bee14ef @@ -10148,6 +12078,18 @@ packages: purls: [] size: 74058 timestamp: 1763549886493 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda + sha256: 8d9d79b2de7d6f335692391f5281607221bf5d040e6724dad4c4d77cd603ce43 + md5: a684eb8a19b2aa68fde0267df172a1e3 + depends: + - __osx >=10.13 + constrains: + - expat 2.7.4.* + license: MIT + license_family: MIT + purls: [] + size: 74578 + timestamp: 1771260142624 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.3-haf25636_0.conda sha256: fce22610ecc95e6d149e42a42fbc3cc9d9179bd4eb6232639a60f06e080eec98 md5: b79875dbb5b1db9a4a22a4520f918e1a @@ -10160,6 +12102,18 @@ packages: purls: [] size: 67800 timestamp: 1763549994166 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + sha256: 03887d8080d6a8fe02d75b80929271b39697ecca7628f0657d7afaea87761edf + md5: a92e310ae8dfc206ff449f362fc4217f + depends: + - __osx >=11.0 + constrains: + - expat 2.7.4.* + license: MIT + license_family: MIT + purls: [] + size: 68199 + timestamp: 1771260020767 - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.3-hac47afa_0.conda sha256: 844ab708594bdfbd7b35e1a67c379861bcd180d6efe57b654f482ae2f7f5c21e md5: 8c9e4f1a0e688eef2e95711178061a0f @@ -10357,6 +12311,20 @@ packages: purls: [] size: 1042798 timestamp: 1765256792743 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 + md5: 0aa00f03f9e39fb9876085dee11a85d4 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 he0feb66_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1041788 + timestamp: 1771378212382 - conda: https://conda.anaconda.org/conda-forge/osx-64/libgcc-15.2.0-h08519bb_14.conda sha256: e300407b7f24d320e1e16277949db9d10cc8577004f839fe21e195933f8e3028 md5: ad31de7df92caf04a70d0d8dc48d9ecd @@ -10383,6 +12351,19 @@ packages: purls: [] size: 422960 timestamp: 1764839601296 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgcc-15.2.0-h08519bb_18.conda + sha256: 83366f11615ab234aa1e0797393f9e07b78124b5a24c4a9f8af0113d02df818e + md5: 9a5cb96e43f5c2296690186e15b3296f + depends: + - _openmp_mutex + constrains: + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 423025 + timestamp: 1771378225170 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_16.conda sha256: 646c91dbc422fe92a5f8a3a5409c9aac66549f4ce8f8d1cab7c2aa5db789bb69 md5: 8b216bac0de7a9d60f3ddeba2515545c @@ -10396,6 +12377,19 @@ packages: purls: [] size: 402197 timestamp: 1765258985740 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda + sha256: 1d9c4f35586adb71bcd23e31b68b7f3e4c4ab89914c26bed5f2859290be5560e + md5: 92df6107310b1fff92c4cc84f0de247b + depends: + - _openmp_mutex + constrains: + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 401974 + timestamp: 1771378877463 - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_16.conda sha256: 24984e1e768440ba73021f08a1da0c1ec957b30d7071b9a89b877a273d17cae8 md5: 1edb8bd8e093ebd31558008e9cb23b47 @@ -10421,6 +12415,16 @@ packages: purls: [] size: 2597400 timestamp: 1740240211859 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_118.conda + sha256: 1abc6a81ee66e8ac9ac09a26e2d6ad7bba23f0a0cc3a6118654f036f9c0e1854 + md5: 06901733131833f5edd68cf3d9679798 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3084533 + timestamp: 1771377786730 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_14.conda sha256: 48a77fde940b4b877c0ed24efd562c135170a46d100c07cd2d7b67e842e30642 md5: 6c13aaae36d7514f28bd5544da1a7bb8 @@ -10441,6 +12445,16 @@ packages: purls: [] size: 27256 timestamp: 1765256804124 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 + md5: d5e96b1ed75ca01906b3d2469b4ce493 + depends: + - libgcc 15.2.0 he0feb66_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27526 + timestamp: 1771378224552 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.25.1-h3f43e3d_1.conda sha256: 50a9e9815cf3f5bce1b8c5161c0899cc5b6c6052d6d73a4c27f749119e607100 md5: 2f4de899028319b27eb7a4023be5dfd2 @@ -10501,6 +12515,18 @@ packages: purls: [] size: 27215 timestamp: 1765256845586 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda + sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee + md5: 9063115da5bc35fdc3e1002e69b9ef6e + depends: + - libgfortran5 15.2.0 h68bc16d_18 + constrains: + - libgfortran-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27523 + timestamp: 1771378269450 - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_14.conda sha256: 59d0eb2198e703949c4b59cffa5f7b8936447531bd96d69799b80441a4139418 md5: c11e0acbe6ba3df9a30dbe7f839cbd99 @@ -10525,6 +12551,18 @@ packages: purls: [] size: 139002 timestamp: 1764839892631 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_18.conda + sha256: fb06c2a2ef06716a0f2a6550f5d13cdd1d89365993068512b7ae3c34e6e665d9 + md5: 34a9f67498721abcfef00178bcf4b190 + depends: + - libgfortran5 15.2.0 hd16e46c_18 + constrains: + - libgfortran-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 139761 + timestamp: 1771378423828 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_16.conda sha256: 68a6c1384d209f8654112c4c57c68c540540dd8e09e17dd1facf6cf3467798b5 md5: 11e09edf0dde4c288508501fe621bab4 @@ -10537,6 +12575,18 @@ packages: purls: [] size: 138630 timestamp: 1765259217400 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda + sha256: 63f89087c3f0c8621c5c89ecceec1e56e5e1c84f65fc9c5feca33a07c570a836 + md5: 26981599908ed2205366e8fc91b37fc6 + depends: + - libgfortran5 15.2.0 hdae7583_18 + constrains: + - libgfortran-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 138973 + timestamp: 1771379054939 - conda: https://conda.anaconda.org/conda-forge/win-64/libgfortran-15.2.0-h719f0c7_16.conda sha256: 88b1a14435c4252657dd0173e95cb1d6e5251e44bfc19b85fcc7ea690ca5c88c md5: 15a5c996dd00931cc1da361fd04c1e22 @@ -10557,6 +12607,14 @@ packages: purls: [] size: 509153 timestamp: 1743911443629 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-64-14.3.0-h660b60f_1.conda + sha256: b60e918409b71302ee61b61080b1b254a902c03fbcbb415c81925dc016c5990e + md5: 731190552d91ade042ddf897cfb361aa + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 551342 + timestamp: 1756238221735 - conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-arm64-13.2.0-h5d7a38c_3.conda sha256: 932daa12d7af965db25cd08485031ca857a91886c80d56b02365d4636729362b md5: 54386854330df39e779228c7922379a5 @@ -10565,6 +12623,14 @@ packages: purls: [] size: 1964427 timestamp: 1707330674197 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-arm64-14.3.0-hc965647_1.conda + sha256: f6ecc12e02a30ab7ee7a8b7285e4ffe3c2452e43885ce324b85827b97659a8c8 + md5: c1b69e537b3031d0f5af780b432ce511 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 2035634 + timestamp: 1756233109102 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_14.conda sha256: a32c45c9652dfd832fb860898f818fb34e6ad47933fcce24cf323bf0b6914f24 md5: 3078a2a9a58566a54e579b41b9e88c84 @@ -10591,6 +12657,19 @@ packages: purls: [] size: 2480559 timestamp: 1765256819588 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 + md5: 646855f357199a12f02a87382d429b75 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 2482475 + timestamp: 1771378241063 - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_14.conda sha256: eb78e8270859ba927d11db2f4f0f05b8e83fca82ff039e4236a4cef97fda16ec md5: 0f4173df0120daf2b2084a55960048e8 @@ -10615,6 +12694,18 @@ packages: purls: [] size: 1061950 timestamp: 1764839609607 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_18.conda + sha256: ddaf9dcf008c031b10987991aa78643e03c24a534ad420925cbd5851b31faa11 + md5: ca52daf58cea766656266c8771d8be81 + depends: + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1062274 + timestamp: 1771378232014 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_16.conda sha256: 9fb7f4ff219e3fb5decbd0ee90a950f4078c90a86f5d8d61ca608c913062f9b0 md5: 265a9d03461da24884ecc8eb58396d57 @@ -10625,8 +12716,20 @@ packages: license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 598291 - timestamp: 1765258993165 + size: 598291 + timestamp: 1765258993165 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda + sha256: 91033978ba25e6a60fb86843cf7e1f7dc8ad513f9689f991c9ddabfaf0361e7e + md5: c4a6f7989cffb0544bfd9207b6789971 + depends: + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 598634 + timestamp: 1771378886363 - conda: https://conda.anaconda.org/conda-forge/win-64/libgfortran5-15.2.0-h44d81a7_16.conda sha256: f7a411d0f08c5ce309a75a6c34649d14df25c8f40b875b9f2cef3e13a111c827 md5: bdad99bd951227c33aea83249e239020 @@ -10656,6 +12759,22 @@ packages: purls: [] size: 3670602 timestamp: 1765223125237 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.86.4-he378b5c_0.conda + sha256: e305f7b1f2202d4efcdb8856abb28d79dc012d85a2155fbfbfee96069e017073 + md5: 2d02b60ec23066e45c578c1524e9ca12 + 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 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 4124444 + timestamp: 1771293559119 - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.3-h0c9aed9_0.conda sha256: 84b74fc81fff745f3d21a26c317ace44269a563a42ead3500034c27e407e1021 md5: c2d5b6b790ef21abac0b5331094ccb56 @@ -10712,6 +12831,16 @@ packages: purls: [] size: 603284 timestamp: 1765256703881 +- 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/win-64/libgomp-15.2.0-h8ee18e1_16.conda sha256: 9c86aadc1bd9740f2aca291da8052152c32dd1c617d5d4fd0f334214960649bb md5: ab8189163748f95d4cb18ea1952943c3 @@ -11074,6 +13203,36 @@ packages: purls: [] size: 25876220 timestamp: 1764314088538 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm19-19.1.7-h56e7563_2.conda + sha256: 375a634873b7441d5101e6e2a9d3a42fec51be392306a03a2fa12ae8edecec1a + md5: 05a54b479099676e75f80ad0ddd38eff + depends: + - __osx >=10.13 + - 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: 28801374 + timestamp: 1757354631264 +- 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/win-64/libllvm19-19.1.7-h830ff33_2.conda sha256: a10457abcb83964bfaf6ba48dcae013823a3ed6ffa988623f744f56156e24721 md5: f5a11003ca45a1c81eb72d987cff65b5 @@ -11612,6 +13771,18 @@ packages: purls: [] size: 4155341 timestamp: 1740240344242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_18.conda + sha256: e03ed186eefb46d7800224ad34bad1268c9d19ecb8f621380a50601c6221a4a7 + md5: ad3a0e2dc4cce549b2860e2ef0e6d75b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14.3.0 + - libstdcxx >=14.3.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 7949259 + timestamp: 1771377982207 - conda: https://conda.anaconda.org/conda-forge/osx-64/libsigtool-0.1.3-hc0f2934_0.conda sha256: f87b743d5ab11c1a8ddd800dd9357fc0fabe47686068232ddc1d1eed0d7321ec md5: 3576aba85ce5e9ab15aa0ea376ab864b @@ -11809,6 +13980,19 @@ packages: purls: [] size: 5856456 timestamp: 1765256838573 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e + md5: 1b08cd684f34175e4514474793d44bcb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 he0feb66_18 + constrains: + - libstdcxx-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 5852330 + timestamp: 1771378262446 - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.3.0-hc03c837_102.conda sha256: abc89056d4ca7debe938504b3b6d9ccc6d7a0f0b528fe3409230636a21e81002 md5: aa38de2738c5f4a72a880e3d31ffe8b4 @@ -11819,6 +14003,16 @@ packages: purls: [] size: 12873130 timestamp: 1740240239655 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_118.conda + sha256: b1c3824769b92a1486bf3e2cc5f13304d83ae613ea061b7bc47bb6080d6dfdba + md5: 865a399bce236119301ebd1532fced8d + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 20171098 + timestamp: 1771377827750 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_14.conda sha256: 63336f51b88029a9557a430aecbb08a11365aa03ec47ec8d14e542fec5dc80fb md5: 9531f671a13eec0597941fa19e489b96 @@ -12483,6 +14677,23 @@ packages: purls: [] size: 93610 timestamp: 1764309933421 +- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-19.1.7-hb0207f0_2.conda + sha256: 8d042ee522bc9eb12c061f5f7e53052aeb4f13e576e624c8bebaf493725b95a0 + md5: 0f79b23c03d80f22ce4fe0022d12f6d2 + depends: + - __osx >=10.13 + - libllvm19 19.1.7 h56e7563_2 + - llvm-tools-19 19.1.7 h879f4bc_2 + constrains: + - llvmdev 19.1.7 + - llvm 19.1.7 + - clang 19.1.7 + - clang-tools 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 87962 + timestamp: 1757355027273 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-18.1.8-default_h3f38c9c_11.conda sha256: a3287ee1f918792a038a5d3cb6160d7dd6b9526399606c759ae6ccd1b0cc54a8 md5: 83cd54257892cb0c1318eab9eb47576d @@ -12504,6 +14715,23 @@ packages: purls: [] size: 94531 timestamp: 1764314372410 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19.1.7-h855ad52_2.conda + sha256: 09750c33b5d694c494cad9eafda56c61a62622264173d760341b49fb001afe82 + md5: 3e3ac06efc5fdc1aa675ca30bf7d53df + depends: + - __osx >=11.0 + - libllvm19 19.1.7 h8e0c9ce_2 + - llvm-tools-19 19.1.7 h91fd4e7_2 + constrains: + - llvm 19.1.7 + - llvmdev 19.1.7 + - clang-tools 19.1.7 + - clang 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 88390 + timestamp: 1757353535760 - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-tools-19.1.7-h752b59f_2.conda sha256: 439ce0b6c7e5e37b368fa1170b91b508b56a105e32b15d35d82cc3e964b83238 md5: 7f24c6c3a50f271f3a3af1ffc1cfff6c @@ -12556,6 +14784,34 @@ packages: purls: [] size: 23269022 timestamp: 1764314260766 +- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-19-19.1.7-h879f4bc_2.conda + sha256: fd281acb243323087ce672139f03a1b35ceb0e864a3b4e8113b9c23ca1f83bf0 + md5: bf644c6f69854656aa02d1520175840e + depends: + - __osx >=10.13 + - libcxx >=19 + - libllvm19 19.1.7 h56e7563_2 + - 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: 17198870 + timestamp: 1757354915882 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19-19.1.7-h91fd4e7_2.conda + sha256: 73f9506f7c32a448071340e73a0e8461e349082d63ecc4849e3eb2d1efc357dd + md5: 8237b150fcd7baf65258eef9a0fc76ef + depends: + - __osx >=11.0 + - libcxx >=19 + - libllvm19 19.1.7 h8e0c9ce_2 + - 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: 16376095 + timestamp: 1757353442671 - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 md5: 9de5350a85c4a20c685259b889aa6393 @@ -12674,6 +14930,21 @@ packages: version: 2.1.5 sha256: 823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb requires_python: '>=3.7' +- 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/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl + name: markupsafe + version: 3.0.3 + sha256: d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e + 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 @@ -12957,6 +15228,26 @@ packages: - metatensor-torch>=0.8.0,<0.9 - metatensor-operations>=0.4.0,<0.5 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/7a/4b/8e57c02768e8daf0b6833345e1b8a2472a73489b24d6157ed332cf224d67/metatomic_torch-0.1.8-py3-none-macosx_11_0_arm64.whl + name: metatomic-torch + version: 0.1.8 + sha256: e69c3c5dba312563d3a89efd4df4c1ddb094fa973e8bbb69d70bf40d3c3a01e4 + requires_dist: + - torch>=2.1,<2.11 + - vesin + - metatensor-torch>=0.8.0,<0.9 + - metatensor-operations>=0.4.0,<0.5 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ea/29/052418062fe9d97fada027b4ed451e3c378a149f58202f5f0ab3bec58f47/metatomic_torch-0.1.8-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: metatomic-torch + version: 0.1.8 + sha256: fefb57f3f3ff76a8d3ee0ff14ee4447615a52ae46ec09ae417d09c15644a73ae + requires_dist: + - torch>=2.1,<2.11 + - vesin + - metatensor-torch>=0.8.0,<0.9 + - metatensor-operations>=0.4.0,<0.5 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/ce/85/1607598424a7ee8bdd3dd6f7b47bbf79907c8b4ff57d6883da05ec6560dd/metatrain-2025.12-py3-none-any.whl name: metatrain version: '2025.12' @@ -13412,6 +15703,26 @@ packages: - pkg:pypi/numpy?source=compressed-mapping size: 8757015 timestamp: 1768085678045 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py312h33ff503_1.conda + sha256: fec4d37e1a7c677ddc07bb968255df74902733398b77acc1d05f9dc599e879df + md5: 3569a8fca2dd3202e4ab08f42499f6d3 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.12.* *_cp312 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8757566 + timestamp: 1770098484112 - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.3.5-py312ha3982b3_0.conda sha256: 62c2a6fb30fec82f8d46defcf33c94a04d5c890ce02b3ddeeda3263f9043688c md5: 6941ace329a1f088d1b3b399369aecec @@ -13468,6 +15779,25 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 7977192 timestamp: 1768085565414 +- conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.2-py312hb34da66_1.conda + sha256: e9acaaafe6a0a698d4d759d860fc8a617724a3031ae1918f761e69297e543a3e + md5: c06b511affcf74a79b1852ae7b722035 + depends: + - python + - __osx >=10.13 + - libcxx >=19 + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.12.* *_cp312 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 7978246 + timestamp: 1770098377108 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.1-py312he281c53_0.conda sha256: f28e86ce957cad03881148e81d548edcae9e093f6bab5f56d4e0fec608a0d7f7 md5: 9f51075d9ea979c5cbca44ac34b9623f @@ -13488,6 +15818,26 @@ packages: - pkg:pypi/numpy?source=compressed-mapping size: 6839209 timestamp: 1768085582339 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py312he281c53_1.conda + sha256: 7fd2f1a33b244129dcc2163304d103a7062fc38f01fe13945c9ea95cef12b954 + md5: 4afbe6ffff0335d25f3c5cc78b1350a4 + depends: + - python + - libcxx >=19 + - __osx >=11.0 + - python 3.12.* *_cpython + - libblas >=3.9.0,<4.0a0 + - python_abi 3.12.* *_cp312 + - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 6840961 + timestamp: 1770098400654 - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.1-py312ha72d056_0.conda sha256: 06d2acce4c5cfe230213c4bc62823de3fa032d053f83c93a28478c7b8ee769bc md5: e06f225f5bf5784b3412b21a2a44da72 @@ -14139,6 +16489,70 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d6/71/5026395b290ff404b836e636f51d7297e6c83beceaa87c592718747e670f/pillow-12.1.1-cp312-cp312-macosx_11_0_arm64.whl + name: pillow + version: 12.1.1 + sha256: adebb5bee0f0af4909c30db0d890c773d1a92ffe83da908e2e9e720f8edf3984 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma>=5 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- 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 + name: pillow + version: 12.1.1 + sha256: 7aac39bcf8d4770d089588a2e1dd111cbaa42df5a94be3114222057d68336bd0 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma>=5 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda sha256: b67692da1c0084516ac1c9ada4d55eaf3c5891b54980f30f3f444541c2706f1e md5: c55515ca43c6444d2572e0f0d93cb6b9 @@ -14294,6 +16708,18 @@ packages: - pkg:pypi/platformdirs?source=compressed-mapping size: 25742 timestamp: 1771119110671 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + sha256: 7f263219cecf0ba6d74c751efa60c4676ce823157ca90aa43ebba5ac615ca0fa + md5: 4fefefb892ce9cc1539405bec2f1a6cd + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=compressed-mapping + size: 25643 + timestamp: 1771233827084 - conda: https://conda.anaconda.org/conda-forge/linux-64/plumed-2.9.2-mpi_openmpi_h02da92d_0.conda sha256: bb0879d5e6856288217d61470b308cbd65d43b061245651e5af6ba6824080823 md5: 08765a6ad1ec9bfc6655ea4bc5ccff52 @@ -15034,6 +17460,15 @@ packages: - markdown-it-py>=2.2.0 - pygments>=2.13.0,<3.0.0 requires_python: '>=3.8.0' +- pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + name: rich + version: 14.3.3 + sha256: 793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d + requires_dist: + - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' + - markdown-it-py>=2.2.0 + - pygments>=2.13.0,<3.0.0 + requires_python: '>=3.8.0' - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl name: rpds-py version: 0.30.0 @@ -15510,6 +17945,22 @@ packages: - pkg:pypi/scipy?source=hash-mapping size: 13802410 timestamp: 1768801119235 +- conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-64-26.0-h62b880e_7.conda + sha256: 7e7e2556978bc9bd9628c6e39138c684082320014d708fbca0c9050df98c0968 + md5: 68a978f77c0ba6ca10ce55e188a21857 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4948 + timestamp: 1771434185960 +- conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-arm64-26.0-ha3f98da_7.conda + sha256: fabfe031ede99898cb2b0b805f6c0d64fcc24ecdb444de3a83002d8135bf4804 + md5: 5f0ebbfea12d8e5bddff157e271fdb2f + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4971 + timestamp: 1771434195389 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.1-pyh332efcf_0.conda sha256: 89d5bb48047e7e27aa52a3a71d6ebf386e5ee4bdbd7ca91d653df9977eca8253 md5: cb72cedd94dd923c6a9405a3d3b1c018 @@ -15848,6 +18299,17 @@ packages: purls: [] size: 221236 timestamp: 1725491044729 +- conda: https://conda.anaconda.org/conda-forge/osx-64/tapi-1600.0.11.8-h8d8e812_0.conda + sha256: 2602632f7923fd59042a897bfb22f050d78f2b5960d53565eae5fa6a79308caa + md5: aae272355bc3f038e403130a5f6f5495 + depends: + - libcxx >=19.0.0.a0 + - __osx >=10.13 + - ncurses >=6.5,<7.0a0 + license: NCSA + purls: [] + size: 213480 + timestamp: 1762535196805 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1300.6.5-h03f4b80_0.conda sha256: 37cd4f62ec023df8a6c6f9f6ffddde3d6620a83cbcab170a8fff31ef944402e5 md5: b703bc3e6cba5943acf0e5f987b5d0e2 @@ -15860,6 +18322,17 @@ packages: purls: [] size: 207679 timestamp: 1725491499758 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1600.0.11.8-h997e182_0.conda + sha256: dcb678fa77f448fa981bf3783902afe09b8838436f3092e9ecaf6a718c87f642 + md5: 347261d575a245cb6111fb2cb5a79fc7 + depends: + - libcxx >=19.0.0.a0 + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: NCSA + purls: [] + size: 199699 + timestamp: 1762535277608 - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda sha256: abd9a489f059fba85c8ffa1abdaa4d515d6de6a3325238b8e81203b913cf65a9 md5: 0f9817ffbe25f9e69ceba5ea70c52606 @@ -16261,6 +18734,16 @@ packages: - rich>=10.11.0 - annotated-doc>=0.0.2 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl + name: typer + version: 0.24.1 + sha256: 112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e + requires_dist: + - click>=8.2.1 + - shellingham>=1.3.0 + - rich>=12.3.0 + - annotated-doc>=0.0.2 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/c8/0a/4aca634faf693e33004796b6cee0ae2e1dba375a800c16ab8d3eff4bb800/typer_slim-0.21.1-py3-none-any.whl name: typer-slim version: 0.21.1 @@ -16278,6 +18761,13 @@ packages: requires_dist: - typer>=0.23.1 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a7/24/5480c20380dfd18cf33d14784096dca45a24eae6102e91d49a718d3b6855/typer_slim-0.24.0-py3-none-any.whl + name: typer-slim + version: 0.24.0 + sha256: d5d7ee1ee2834d5020c7c616ed5e0d0f29b9a4b1dd283bdebae198ec09778d0e + requires_dist: + - typer>=0.24.0 + requires_python: '>=3.10' - pypi: https://download.pytorch.org/whl/typing_extensions-4.15.0-py3-none-any.whl name: typing-extensions version: 4.15.0 diff --git a/pixi.toml b/pixi.toml index 06c072e6f..f92e26f98 100644 --- a/pixi.toml +++ b/pixi.toml @@ -56,6 +56,7 @@ nwchem = {features = ["nwchem"]} docs = {features = ["docs"]} rel = {features = ["metatomic", "release"]} serve = {features = ["serve"]} +dev-serve-mta = {features = ["serve", "metatomic", "develop"]} [feature.metatomic] # vesin torch has a wheel issue with macos x86_64 From 5bf0bcedda45eea6d4198f1e2908f2bbdf186e14 Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 08:49:11 +0100 Subject: [PATCH 04/15] fix: eliminate AtomMatrix type collision in serve mode Replace rgpot::PotentialBase virtual interface with a flat-array ForceCallback (std::function) to avoid the name collision between eOn's Eigen-based AtomMatrix and rgpot's custom AtomMatrix type. Both were defined at global scope, causing segfaults when capnp dispatched through the wrong vtable layout. The serve code now only links ptlrpc_dep (capnp schema) from rgpot with with_rpc_client_only:true -- no rgpot types cross the TU boundary. ServeMode.cpp wraps eOn's Potential::force() in a lambda, and ServeRpcServer.cpp converts capnp data to flat arrays directly. --- client/CommandLine.cpp | 37 +++---- client/Parameters.cpp | 3 +- client/ServeMode.cpp | 99 +++++------------- client/ServeMode.h | 9 +- client/ServeRpcServer.cpp | 146 +++++++++++++++------------ client/ServeRpcServer.h | 46 +++++---- client/gtests/ServeSpecParseTest.cpp | 2 +- client/meson.build | 15 ++- 8 files changed, 172 insertions(+), 185 deletions(-) diff --git a/client/CommandLine.cpp b/client/CommandLine.cpp index e74355361..0a9923c9c 100644 --- a/client/CommandLine.cpp +++ b/client/CommandLine.cpp @@ -69,23 +69,26 @@ void commandLine(int argc, char **argv) { "p,potential", "The potential (e.g. qsc, lj, eam_al)", cxxopts::value()) #ifdef WITH_SERVE_MODE - ("serve", "Serve potential(s) over rgpot Cap'n Proto RPC. " - "Spec: 'potential:port' or 'pot1:port1,pot2:port2'", + ("serve", + "Serve potential(s) over rgpot Cap'n Proto RPC. " + "Spec: 'potential:port' or 'pot1:port1,pot2:port2'", cxxopts::value())( - "serve-host", "Host to bind RPC server(s) to", - cxxopts::value()->default_value("localhost"))( - "serve-port", "Port for single-potential serve mode (used with -p)", - cxxopts::value()->default_value("12345"))( - "replicas", "Number of replicated server instances (used with -p)", - cxxopts::value()->default_value("1"))( - "gateway", "Run a single gateway port backed by N pool instances " - "(use with -p and --replicas)", - cxxopts::value()->default_value("false"))( - "config", "Config file for potential parameters (INI format, " - "e.g. [Metatomic] model_path=model.pt)", - cxxopts::value()) + "serve-host", "Host to bind RPC server(s) to", + cxxopts::value()->default_value("localhost"))( + "serve-port", "Port for single-potential serve mode (used with -p)", + cxxopts::value()->default_value("12345"))( + "replicas", "Number of replicated server instances (used with -p)", + cxxopts::value()->default_value("1"))( + "gateway", + "Run a single gateway port backed by N pool instances " + "(use with -p and --replicas)", + cxxopts::value()->default_value("false"))( + "config", + "Config file for potential parameters (INI format, " + "e.g. [Metatomic] model_path=model.pt)", + cxxopts::value()) #endif - ("h,help", "Print usage"); + ("h,help", "Print usage"); try { auto result = options.parse(argc, argv); @@ -195,8 +198,8 @@ void commandLine(int argc, char **argv) { } // Config-driven serve (no -p or --serve, just --config with [Serve]) - if (!pflag && !sflag && !mflag && !cflag && - result.count("config") && !result.count("serve") && + if (!pflag && !sflag && !mflag && !cflag && result.count("config") && + !result.count("serve") && (!params.serve_options.endpoints.empty() || params.serve_options.gateway_port > 0 || params.serve_options.replicas > 1)) { diff --git a/client/Parameters.cpp b/client/Parameters.cpp index 6fc678b64..afb581f61 100644 --- a/client/Parameters.cpp +++ b/client/Parameters.cpp @@ -893,8 +893,7 @@ int Parameters::load(FILE *file) { } // [Serve] if (ini.FindKey("Serve") != -1) { - serve_options.host = - ini.GetValue("Serve", "host", serve_options.host); + serve_options.host = ini.GetValue("Serve", "host", serve_options.host); serve_options.port = static_cast( ini.GetValueL("Serve", "port", serve_options.port)); serve_options.replicas = static_cast( diff --git a/client/ServeMode.cpp b/client/ServeMode.cpp index adc00c6fa..aa112fcd4 100644 --- a/client/ServeMode.cpp +++ b/client/ServeMode.cpp @@ -14,10 +14,10 @@ * @file ServeMode.cpp * @brief Multi-model RPC serving for eOn potentials. * - * Wraps any eOn Potential (including Metatomic ML models) as an rgpot - * PotentialBase and serves it over Cap'n Proto RPC. Supports serving - * multiple potentials concurrently on different ports, each in its own - * thread with its own event loop. + * Wraps any eOn Potential as a flat-array ForceCallback and serves it + * over Cap'n Proto RPC. Uses ForceCallback (std::function taking flat + * arrays) to completely avoid the AtomMatrix type collision between + * eOn's Eigen-based AtomMatrix and rgpot's custom AtomMatrix. * * This translation unit includes eOn's Potential.h. The Cap'n Proto server * code is in ServeRpcServer.cpp (separate TU to avoid naming collision with @@ -37,66 +37,19 @@ #include -#include "rgpot/Potential.hpp" -#include "rgpot/types/AtomMatrix.hpp" +namespace { -using rgpot::types::AtomMatrix; - -/** - * @class EonPotentialAdapter - * @brief Adapts eOn's Potential::force() to rgpot's PotentialBase interface. - * - * This allows any eOn potential (LJ, EAM, Metatomic, VASP, LAMMPS, etc.) - * to be served over rgpot's Cap'n Proto RPC protocol without modification. - */ -class EonPotentialAdapter : public rgpot::PotentialBase { -public: - explicit EonPotentialAdapter(std::shared_ptr<::Potential> pot) - : rgpot::PotentialBase(rgpot::PotType::UNKNOWN), - m_potential(std::move(pot)) {} - - std::pair - operator()(const AtomMatrix &positions, const std::vector &atmtypes, - const std::array, 3> &box) override { - long nAtoms = static_cast(positions.rows()); - - // Flatten positions: eOn expects [x1,y1,z1, x2,y2,z2, ...] - std::vector flat_pos(nAtoms * 3); - for (long i = 0; i < nAtoms; ++i) { - flat_pos[3 * i + 0] = positions(i, 0); - flat_pos[3 * i + 1] = positions(i, 1); - flat_pos[3 * i + 2] = positions(i, 2); - } - - // Flatten box (3x3 row-major) - double flat_box[9]; - for (int i = 0; i < 3; ++i) { - for (int j = 0; j < 3; ++j) { - flat_box[i * 3 + j] = box[i][j]; - } - } - - // Call eOn's potential - std::vector flat_forces(nAtoms * 3, 0.0); - double energy = 0.0; +/// Create a ForceCallback that wraps an eOn Potential's force() method. +ForceCallback makeForceCallback(std::shared_ptr<::Potential> pot) { + return [pot = std::move(pot)](long nAtoms, const double *positions, + const int *atomicNrs, double *forces, + double *energy, const double *box) { double variance = 0.0; - m_potential->force(nAtoms, flat_pos.data(), atmtypes.data(), - flat_forces.data(), &energy, &variance, flat_box); - - // Convert back to Eigen matrix - AtomMatrix forces(nAtoms, 3); - for (long i = 0; i < nAtoms; ++i) { - forces(i, 0) = flat_forces[3 * i + 0]; - forces(i, 1) = flat_forces[3 * i + 1]; - forces(i, 2) = flat_forces[3 * i + 2]; - } - - return {energy, forces}; - } + pot->force(nAtoms, positions, atomicNrs, forces, energy, &variance, box); + }; +} -private: - std::shared_ptr<::Potential> m_potential; -}; +} // anonymous namespace // --------------------------------------------------------------------------- // Single-model serve @@ -115,10 +68,10 @@ void serveMode(const Parameters ¶ms, const std::string &host, return; } - auto adapter = std::make_unique(std::move(eon_pot)); + auto callback = makeForceCallback(std::move(eon_pot)); // Blocks until killed (runs Cap'n Proto event loop) - startRpcServer(std::move(adapter), host, port); + startRpcServer(std::move(callback), host, port); } // --------------------------------------------------------------------------- @@ -162,8 +115,8 @@ void serveMultiple(const std::vector &endpoints, return; } - auto adapter = std::make_unique(std::move(eon_pot)); - startRpcServer(std::move(adapter), ep.host, ep.port); + auto callback = makeForceCallback(std::move(eon_pot)); + startRpcServer(std::move(callback), ep.host, ep.port); }); } @@ -198,9 +151,8 @@ void serveReplicated(const Parameters ¶ms, const std::string &host, for (size_t i = 0; i < replicas; ++i) { uint16_t port = static_cast(base_port + i); - threads.emplace_back([¶ms, &host, port]() { - serveMode(params, host, port); - }); + threads.emplace_back( + [¶ms, &host, port]() { serveMode(params, host, port); }); } for (auto &t : threads) { @@ -226,7 +178,7 @@ void serveGateway(const Parameters ¶ms, const std::string &host, pool_size, std::string(magic_enum::enum_name(pot_type)), host, port); - std::vector> pool; + std::vector pool; pool.reserve(pool_size); for (size_t i = 0; i < pool_size; ++i) { @@ -236,8 +188,7 @@ void serveGateway(const Parameters ¶ms, const std::string &host, pool_size); return; } - pool.push_back( - std::make_unique(std::move(eon_pot))); + pool.push_back(makeForceCallback(std::move(eon_pot))); } spdlog::info("Pool ready, starting gateway server"); @@ -310,9 +261,9 @@ std::vector parseServeSpec(const std::string &spec) { std::transform(pot_str.begin(), pot_str.end(), pot_str.begin(), ::tolower); ServeEndpoint ep; - ep.potential = magic_enum::enum_cast(pot_str, - magic_enum::case_insensitive) - .value_or(PotType::UNKNOWN); + ep.potential = + magic_enum::enum_cast(pot_str, magic_enum::case_insensitive) + .value_or(PotType::UNKNOWN); if (ep.potential == PotType::UNKNOWN) { spdlog::error("Unknown potential type '{}'", pot_str); diff --git a/client/ServeMode.h b/client/ServeMode.h index aa386735d..8a4ca1af7 100644 --- a/client/ServeMode.h +++ b/client/ServeMode.h @@ -48,7 +48,8 @@ void serveMode(const Parameters ¶ms, const std::string &host, * Cap'n Proto event loop. All threads block until SIGINT/SIGTERM. * * @param endpoints List of {potential, host, port} configurations. - * @param params Base eOn parameters (potential type is overridden per endpoint). + * @param params Base eOn parameters (potential type is overridden per + * endpoint). */ void serveMultiple(const std::vector &endpoints, const Parameters ¶ms); @@ -59,7 +60,8 @@ void serveMultiple(const std::vector &endpoints, * Starts `replicas` threads, each serving the same potential type on * ports base_port, base_port+1, ..., base_port+replicas-1. * - * @param params The eOn parameters (potential_options.potential must be set). + * @param params The eOn parameters (potential_options.potential must be + * set). * @param host The hostname to listen on. * @param base_port The first port; replicas use base_port+0 .. base_port+N-1. * @param replicas Number of concurrent server instances. @@ -74,7 +76,8 @@ void serveReplicated(const Parameters ¶ms, const std::string &host, * behind a single gateway port. Incoming requests are dispatched round-robin * across the pool. This gives clients a single endpoint while spreading load. * - * @param params The eOn parameters (potential_options.potential must be set). + * @param params The eOn parameters (potential_options.potential must be + * set). * @param host The hostname to listen on. * @param port The gateway port. * @param pool_size Number of potential instances in the pool. diff --git a/client/ServeRpcServer.cpp b/client/ServeRpcServer.cpp index b4eebc876..0d97558e8 100644 --- a/client/ServeRpcServer.cpp +++ b/client/ServeRpcServer.cpp @@ -12,10 +12,14 @@ /** * @file ServeRpcServer.cpp - * @brief Cap'n Proto RPC server for rgpot PotentialBase instances. + * @brief Cap'n Proto RPC server using flat-array force callbacks. * * This translation unit does NOT include eOn's Potential.h to avoid naming * collision with the capnp-generated `Potential` interface class. + * + * Uses a ForceCallback (std::function taking flat arrays) instead of + * rgpot::PotentialBase to avoid the AtomMatrix type collision between + * eOn's Eigen-based AtomMatrix and rgpot's custom AtomMatrix. */ #include "ServeRpcServer.h" @@ -26,9 +30,6 @@ #include #include -#include "rgpot/types/AtomMatrix.hpp" -#include "rgpot/types/adapters/capnp/capnp_adapter.hpp" - // Cap'n Proto generated header (from Potentials.capnp). // This defines `class Potential` -- which collides with eOn's Potential class, // hence the separate translation unit. @@ -37,16 +38,16 @@ namespace { /** - * @class GenericPotImpl - * @brief Cap'n Proto RPC server implementation wrapping a PotentialBase. + * @class CallbackPotImpl + * @brief Cap'n Proto RPC server wrapping a flat-array ForceCallback. * - * Same pattern as rgpot's potserv -- receives ForceInput over RPC, dispatches - * to the polymorphic PotentialBase, returns PotentialResult. + * Receives ForceInput over RPC, extracts flat arrays, calls the callback, + * and returns PotentialResult. */ -class GenericPotImpl final : public Potential::Server { +class CallbackPotImpl final : public Potential::Server { public: - explicit GenericPotImpl(std::unique_ptr pot) - : m_potential(std::move(pot)) {} + explicit CallbackPotImpl(ForceCallback cb) + : m_callback(std::move(cb)) {} kj::Promise calculate(CalculateContext context) override { auto fip = context.getParams().getFip(); @@ -54,40 +55,56 @@ class GenericPotImpl final : public Potential::Server { KJ_REQUIRE(fip.getAtmnrs().size() == numAtoms, "AtomNumbers size mismatch"); - auto nativePositions = - rgpot::types::adapt::capnp::convertPositionsFromCapnp(fip.getPos(), - numAtoms); - auto nativeAtomTypes = - rgpot::types::adapt::capnp::convertAtomNumbersFromCapnp( - fip.getAtmnrs()); - auto nativeBoxMatrix = - rgpot::types::adapt::capnp::convertBoxMatrixFromCapnp(fip.getBox()); - - auto [energy, forces] = - (*m_potential)(nativePositions, nativeAtomTypes, nativeBoxMatrix); - + // Extract flat arrays from capnp + std::vector positions(numAtoms * 3); + auto capnpPos = fip.getPos(); + for (size_t i = 0; i < numAtoms * 3; ++i) { + positions[i] = capnpPos[i]; + } + + std::vector atomicNrs(numAtoms); + auto capnpAtmnrs = fip.getAtmnrs(); + for (size_t i = 0; i < numAtoms; ++i) { + atomicNrs[i] = capnpAtmnrs[i]; + } + + double box[9] = {}; + auto capnpBox = fip.getBox(); + for (size_t i = 0; i < 9 && i < capnpBox.size(); ++i) { + box[i] = capnpBox[i]; + } + + // Call the force callback + std::vector forces(numAtoms * 3, 0.0); + double energy = 0.0; + m_callback(static_cast(numAtoms), positions.data(), atomicNrs.data(), + forces.data(), &energy, box); + + // Serialize result back to capnp auto result = context.getResults(); auto pres = result.initResult(); pres.setEnergy(energy); auto forcesList = pres.initForces(numAtoms * 3); - rgpot::types::adapt::capnp::populateForcesToCapnp(forcesList, forces); + for (size_t i = 0; i < numAtoms * 3; ++i) { + forcesList.set(i, forces[i]); + } return kj::READY_NOW; } private: - std::unique_ptr m_potential; + ForceCallback m_callback; }; } // anonymous namespace -void startRpcServer(std::unique_ptr pot, - const std::string &host, uint16_t port) { +void startRpcServer(ForceCallback callback, const std::string &host, + uint16_t port) { spdlog::info("Starting Cap'n Proto RPC server on {}:{}", host, port); - capnp::EzRpcServer server(kj::heap(std::move(pot)), host, - port); + capnp::EzRpcServer server(kj::heap(std::move(callback)), + host, port); auto &waitScope = server.getWaitScope(); spdlog::info("Server ready on port {}. Ctrl+C to stop.", port); @@ -101,71 +118,76 @@ void startRpcServer(std::unique_ptr pot, namespace { /** - * @class PooledPotImpl - * @brief Cap'n Proto RPC server that dispatches across a pool of potentials. - * - * Incoming calculate() requests are assigned round-robin to the pool members. - * Each pool member is guarded by its own mutex so concurrent RPC calls are - * safe even though individual PotentialBase instances are not thread-safe. + * @class PooledCallbackPotImpl + * @brief Cap'n Proto RPC server dispatching across a pool of callbacks. */ -class PooledPotImpl final : public Potential::Server { +class PooledCallbackPotImpl final : public Potential::Server { public: - explicit PooledPotImpl( - std::vector> pool) - : m_pool(std::move(pool)), m_mutexes(m_pool.size()), + explicit PooledCallbackPotImpl(std::vector pool) + : m_pool(std::move(pool)), + m_mutexes(m_pool.size()), m_next(0) {} kj::Promise calculate(CalculateContext context) override { - // Round-robin selection - size_t idx = - m_next.fetch_add(1, std::memory_order_relaxed) % m_pool.size(); + size_t idx = m_next.fetch_add(1, std::memory_order_relaxed) % m_pool.size(); auto fip = context.getParams().getFip(); const size_t numAtoms = fip.getPos().size() / 3; - KJ_REQUIRE(fip.getAtmnrs().size() == numAtoms, - "AtomNumbers size mismatch"); + KJ_REQUIRE(fip.getAtmnrs().size() == numAtoms, "AtomNumbers size mismatch"); + + std::vector positions(numAtoms * 3); + auto capnpPos = fip.getPos(); + for (size_t i = 0; i < numAtoms * 3; ++i) { + positions[i] = capnpPos[i]; + } + + std::vector atomicNrs(numAtoms); + auto capnpAtmnrs = fip.getAtmnrs(); + for (size_t i = 0; i < numAtoms; ++i) { + atomicNrs[i] = capnpAtmnrs[i]; + } + + double box[9] = {}; + auto capnpBox = fip.getBox(); + for (size_t i = 0; i < 9 && i < capnpBox.size(); ++i) { + box[i] = capnpBox[i]; + } - auto nativePositions = - rgpot::types::adapt::capnp::convertPositionsFromCapnp(fip.getPos(), - numAtoms); - auto nativeAtomTypes = - rgpot::types::adapt::capnp::convertAtomNumbersFromCapnp( - fip.getAtmnrs()); - auto nativeBoxMatrix = - rgpot::types::adapt::capnp::convertBoxMatrixFromCapnp(fip.getBox()); + std::vector forces(numAtoms * 3, 0.0); + double energy = 0.0; - // Lock the selected pool member for the duration of the force call std::lock_guard lock(m_mutexes[idx]); - auto [energy, forces] = - (*m_pool[idx])(nativePositions, nativeAtomTypes, nativeBoxMatrix); + m_pool[idx](static_cast(numAtoms), positions.data(), atomicNrs.data(), + forces.data(), &energy, box); auto result = context.getResults(); auto pres = result.initResult(); pres.setEnergy(energy); auto forcesList = pres.initForces(numAtoms * 3); - rgpot::types::adapt::capnp::populateForcesToCapnp(forcesList, forces); + for (size_t i = 0; i < numAtoms * 3; ++i) { + forcesList.set(i, forces[i]); + } return kj::READY_NOW; } private: - std::vector> m_pool; + std::vector m_pool; std::vector m_mutexes; std::atomic m_next; }; } // anonymous namespace -void startPooledRpcServer( - std::vector> pool, - const std::string &host, uint16_t port) { +void startPooledRpcServer(std::vector pool, + const std::string &host, uint16_t port) { spdlog::info("Starting pooled RPC gateway on {}:{} with {} instances", host, port, pool.size()); - capnp::EzRpcServer server( - kj::heap(std::move(pool)), host, port); + capnp::EzRpcServer server(kj::heap(std::move(pool)), + host, port); auto &waitScope = server.getWaitScope(); spdlog::info("Gateway ready on port {}. Ctrl+C to stop.", port); diff --git a/client/ServeRpcServer.h b/client/ServeRpcServer.h index 67e6accc1..83e0ee0d4 100644 --- a/client/ServeRpcServer.h +++ b/client/ServeRpcServer.h @@ -11,40 +11,50 @@ */ #pragma once -#include "rgpot/Potential.hpp" #include +#include #include #include #include /** - * @brief Start a blocking Cap'n Proto RPC server for a given PotentialBase. + * @brief Callback type for potential energy/force evaluation. * - * This is an internal function used by serveMode(). It sets up the Cap'n Proto - * event loop and blocks until the process is killed. + * Flat-array interface that avoids any AtomMatrix type dependency, + * preventing collisions between eOn's Eigen-based AtomMatrix and + * rgpot's custom AtomMatrix. + * + * @param nAtoms Number of atoms. + * @param positions Flat array [x1,y1,z1, x2,y2,z2, ...] (nAtoms*3). + * @param atomicNrs Atomic numbers [Z1, Z2, ...] (nAtoms). + * @param forces Output forces [Fx1,Fy1,Fz1, ...] (nAtoms*3). + * @param energy Output energy (single double). + * @param box Simulation cell flat 3x3 row-major (9 doubles). + */ +using ForceCallback = std::function; + +/** + * @brief Start a blocking Cap'n Proto RPC server using a force callback. * * Defined in a separate translation unit to avoid naming collision between * eOn's `class Potential` and the capnp-generated `Potential` interface. * - * @param pot Ownership of the rgpot PotentialBase to serve. - * @param host The hostname to listen on. - * @param port The TCP port to listen on. + * @param callback Force evaluation function. + * @param host The hostname to listen on. + * @param port The TCP port to listen on. */ -void startRpcServer(std::unique_ptr pot, - const std::string &host, uint16_t port); +void startRpcServer(ForceCallback callback, const std::string &host, + uint16_t port); /** * @brief Start a blocking Cap'n Proto RPC server backed by a pool of - * PotentialBase instances dispatched round-robin. - * - * Creates a single gateway endpoint. Incoming RPC requests are dispatched - * to the next available potential instance in a round-robin fashion. This - * gives clients a single address while spreading computational load. + * force callbacks dispatched round-robin. * - * @param pool Vector of PotentialBase instances (ownership transferred). + * @param pool Vector of force callbacks (one per pool instance). * @param host The hostname to listen on. * @param port The TCP port to listen on. */ -void startPooledRpcServer( - std::vector> pool, - const std::string &host, uint16_t port); +void startPooledRpcServer(std::vector pool, + const std::string &host, uint16_t port); diff --git a/client/gtests/ServeSpecParseTest.cpp b/client/gtests/ServeSpecParseTest.cpp index fa57fb865..28a650a75 100644 --- a/client/gtests/ServeSpecParseTest.cpp +++ b/client/gtests/ServeSpecParseTest.cpp @@ -9,8 +9,8 @@ ** Repo: ** https://github.com/TheochemUI/eOn */ -#include "catch2/catch_amalgamated.hpp" #include "ServeMode.h" +#include "catch2/catch_amalgamated.hpp" TEST_CASE("parseServeSpec single endpoint", "[serve]") { auto eps = parseServeSpec("lj:12345"); diff --git a/client/meson.build b/client/meson.build index ba10c3aa9..c9d236c7b 100644 --- a/client/meson.build +++ b/client/meson.build @@ -562,23 +562,22 @@ if get_option('with_metatomic') endif if get_option('with_serve') - # rgpot-compatible RPC serve mode: wraps any eOn potential as an rgpot - # PotentialBase and serves it over Cap'n Proto RPC. + # rgpot-compatible RPC serve mode: wraps any eOn potential and serves it + # over Cap'n Proto RPC using the rgpot Potentials.capnp schema. + # Only links capnp-rpc and the generated schema (ptlrpc); does NOT link + # rgpot types to avoid the AtomMatrix name collision with eOn's Eigen.h. serve_capnp_dep = dependency('capnp-rpc', required: true) rgpot_serve_opts = { - 'with_rpc': true, - 'with_eigen': true, - 'pure_lib': false, - 'with_rpc_client_only': false, + 'with_rpc_client_only': true, + 'pure_lib': true, 'with_tests': false, 'with_examples': false, } rgpot_proj = subproject('rgpot', default_options: rgpot_serve_opts) - rgpot_serve_dep = rgpot_proj.get_variable('rgpot_dep') ptlrpc_dep = rgpot_proj.get_variable('ptlrpc_dep') _args += ['-DWITH_SERVE_MODE'] eonclib_sources += ['ServeMode.cpp', 'ServeRpcServer.cpp'] - _deps += [serve_capnp_dep, rgpot_serve_dep, ptlrpc_dep] + _deps += [serve_capnp_dep, ptlrpc_dep] endif _linkto += potentials From 607e9b60b96373fde06bf74eb5e9bbb8606360a8 Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 09:18:48 +0100 Subject: [PATCH 05/15] fix: pin fmt v11 for metatomic envs, update serve mode docs Torch 2.9 bundles fmt 11.2 internally; pixi's spdlog was compiled against pixi's fmt. With fmt>=12 the ABI mismatch caused linker errors when building metatomic+serve together. Pin fmt to v11 for the metatomic feature so both torch and spdlog use the same fmt ABI. Also adds towncrier fragment for the AtomMatrix collision fix and updates serve_mode.md with architecture notes and corrected Julia API. --- docs/newsfragments/316.fixed.md | 5 ++ docs/source/user_guide/serve_mode.md | 13 ++- pixi.lock | 125 +++++++++++++++++++++------ pixi.toml | 8 +- 4 files changed, 122 insertions(+), 29 deletions(-) create mode 100644 docs/newsfragments/316.fixed.md diff --git a/docs/newsfragments/316.fixed.md b/docs/newsfragments/316.fixed.md new file mode 100644 index 000000000..ee2946a48 --- /dev/null +++ b/docs/newsfragments/316.fixed.md @@ -0,0 +1,5 @@ +Fixed serve mode segfault caused by `AtomMatrix` type collision between eOn's +Eigen-based type and rgpot's custom type. Replaced the `rgpot::PotentialBase` +virtual interface with a flat-array `ForceCallback`, eliminating the name +collision entirely. The serve code now only links the capnp schema dependency +(`ptlrpc_dep`) from rgpot, not the full library. diff --git a/docs/source/user_guide/serve_mode.md b/docs/source/user_guide/serve_mode.md index c2cdeb48a..05c0e9f57 100644 --- a/docs/source/user_guide/serve_mode.md +++ b/docs/source/user_guide/serve_mode.md @@ -208,12 +208,21 @@ using ChemGP pot = RpcPotential("localhost", 12345, atmnrs, box) E, F = ChemGP.calculate(pot, positions) -# Use as a GP optimization oracle -oracle = make_rpc_oracle(pot, n_atoms) +# Use as a GP optimization oracle (gradient = -forces) +oracle = make_rpc_oracle(pot) ``` See the [ChemGP RPC tutorial](https://github.com/HaoZeke/ChemGP) for details. +## Architecture Notes + +The serve mode uses a **ForceCallback** (flat-array `std::function`) interface +internally, completely decoupling the eOn potential from the capnp server. +This avoids a type collision between eOn's Eigen-based `AtomMatrix` and rgpot's +custom `AtomMatrix` by never allowing both types to coexist in the same +translation unit. The capnp schema code is compiled in a separate TU +(`ServeRpcServer.cpp`) from the eOn potential wrapper (`ServeMode.cpp`). + ## Command Reference | Flag | Description | diff --git a/pixi.lock b/pixi.lock index ac16bcad8..3758b4e45 100644 --- a/pixi.lock +++ b/pixi.lock @@ -874,7 +874,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.10.0-h36df796_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-h1e990d8_2.conda @@ -987,7 +987,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.16.3-py312h7a1785b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/simple-dftd3-1.2.1-h3b12eaf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-hffee6e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-ha91398d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tblite-0.4.0-hd37a5e2_2.conda @@ -1094,7 +1094,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-11.2.0-h440487c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.10.0-h5692697_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-13.2.0-h1ca8e4b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-13.2.0-h252ada1_3.conda @@ -1200,7 +1200,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h98dc951_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-codesign-0.1.3-h98dc951_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/simple-dftd3-1.2.1-hb42fc24_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.16.0-h06f2c6e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1300.6.5-h03f4b80_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tblite-0.4.0-hb3fdf34_2.conda @@ -1892,7 +1892,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.10.0-h36df796_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-h1e990d8_2.conda @@ -1978,7 +1978,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.14.7-h813ae00_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.14.0-he64ecbb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-hffee6e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-ha91398d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tinyxml2-11.0.0-h3f2d84a_0.conda @@ -2079,7 +2079,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-11.2.0-h440487c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.10.0-h5692697_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-13.2.0-h1ca8e4b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-13.2.0-h252ada1_3.conda @@ -2167,7 +2167,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h98dc951_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-codesign-0.1.3-h98dc951_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.16.0-h06f2c6e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1300.6.5-h03f4b80_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tinyxml2-11.0.0-ha1acc90_0.conda @@ -2262,7 +2262,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/flang-19.1.7-hbeecb71_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flang_impl_win-64-19.1.7-h719f0c7_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flang_win-64-19.1.7-h719f0c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-12.1.0-h7f4e812_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-11.2.0-h1d4551f_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/fortran-compiler-1.11.0-h95e3450_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.6-nompi_hae35d4c_106.conda - conda: https://conda.anaconda.org/conda-forge/win-64/highfive-2.10.1-h90b5984_2.conda @@ -2325,7 +2325,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.15.1-h213852a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sccache-0.14.0-h18a1a76_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/spdlog-1.17.0-h9f585f1_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.16.0-hb1706eb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tinyxml2-11.0.0-he0c23c2_0.conda @@ -2433,7 +2433,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-hff5e90c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.11.0-h9bea470_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hbdf3cc3_18.conda @@ -2508,7 +2508,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.14.0-he64ecbb_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/spdlog-1.17.0-hab81395_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-ha91398d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.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 @@ -2606,7 +2606,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h784d473_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-11.2.0-h440487c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.11.0-h81a4f41_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-14.3.0-h3ef1dbf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-14.3.0-h6d03799_1.conda @@ -2687,7 +2687,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-arm64-26.0-ha3f98da_7.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/sigtool-codesign-0.1.3-h98dc951_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.16.0-h06f2c6e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1600.0.11.8-h997e182_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda @@ -4215,7 +4215,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/compilers-1.10.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.10.0-h1a2810e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.10.0-h36df796_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-h1e990d8_2.conda @@ -4280,7 +4280,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.14.0-he64ecbb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-hffee6e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-ha91398d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda @@ -4365,7 +4365,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.10.0-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.10.0-hba80287_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-11.2.0-h440487c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.10.0-h5692697_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-13.2.0-h1ca8e4b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-13.2.0-h252ada1_3.conda @@ -4435,7 +4435,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h98dc951_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-codesign-0.1.3-h98dc951_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.16.0-h06f2c6e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1300.6.5-h03f4b80_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/tomli-2.4.0-pyhcf101f3_0.conda @@ -4515,7 +4515,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/flang-19.1.7-hbeecb71_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flang_impl_win-64-19.1.7-h719f0c7_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flang_win-64-19.1.7-h719f0c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-12.1.0-h7f4e812_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-11.2.0-h1d4551f_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/fortran-compiler-1.11.0-h95e3450_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.6-nompi_hae35d4c_106.conda - conda: https://conda.anaconda.org/conda-forge/win-64/highfive-2.10.1-h90b5984_2.conda @@ -4564,7 +4564,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sccache-0.14.0-h18a1a76_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/spdlog-1.17.0-h9f585f1_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.16.0-hb1706eb_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.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/tomli-2.4.0-pyhcf101f3_0.conda @@ -5037,7 +5037,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/compilers-1.10.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.10.0-h1a2810e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.10.0-h36df796_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-h1e990d8_2.conda @@ -5102,7 +5102,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.14.0-he64ecbb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-hffee6e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-ha91398d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda @@ -5187,7 +5187,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.10.0-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.10.0-hba80287_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-11.2.0-h440487c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.10.0-h5692697_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-13.2.0-h1ca8e4b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-13.2.0-h252ada1_3.conda @@ -5257,7 +5257,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h98dc951_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-codesign-0.1.3-h98dc951_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.16.0-h06f2c6e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1300.6.5-h03f4b80_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/tomli-2.4.0-pyhcf101f3_0.conda @@ -5337,7 +5337,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/flang-19.1.7-hbeecb71_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flang_impl_win-64-19.1.7-h719f0c7_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flang_win-64-19.1.7-h719f0c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-12.1.0-h7f4e812_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-11.2.0-h1d4551f_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/fortran-compiler-1.11.0-h95e3450_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.6-nompi_hae35d4c_106.conda - conda: https://conda.anaconda.org/conda-forge/win-64/highfive-2.10.1-h90b5984_2.conda @@ -5386,7 +5386,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sccache-0.14.0-h18a1a76_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/spdlog-1.17.0-h9f585f1_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.16.0-hb1706eb_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.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/tomli-2.4.0-pyhcf101f3_0.conda @@ -8407,6 +8407,18 @@ packages: purls: [] size: 9707 timestamp: 1737072650963 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda + sha256: e0f53b7801d0bcb5d61a1ddcb873479bfe8365e56fd3722a232fbcc372a9ac52 + md5: 0c2f855a88fab6afa92a7aa41217dc8e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: MIT + license_family: MIT + purls: [] + size: 192721 + timestamp: 1751277120358 - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda sha256: b546c4eb5e11c2d8eab0685593e078fd0cd483e467d5d6e307d60d887488230f md5: d90bf58b03d9a958cb4f9d3de539af17 @@ -8453,6 +8465,17 @@ packages: purls: [] size: 188352 timestamp: 1767681462452 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-11.2.0-h440487c_0.conda + sha256: 1449ec46468860f6fb77edba87797ce22d4f6bfe8d5587c46fd5374c4f7383ee + md5: 24109723ac700cce5ff96ea3e63a83a3 + depends: + - __osx >=11.0 + - libcxx >=18 + license: MIT + license_family: MIT + purls: [] + size: 177090 + timestamp: 1751277262419 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda sha256: dba5d4a93dc62f20e4c2de813ccf7beefed1fb54313faff9c4f2383e4744c8e5 md5: ae2f556fbb43e5a75cc80a47ac942a8e @@ -8464,6 +8487,18 @@ packages: purls: [] size: 180970 timestamp: 1767681372955 +- conda: https://conda.anaconda.org/conda-forge/win-64/fmt-11.2.0-h1d4551f_0.conda + sha256: 890f2789e55b509ff1f14592a5b20a0d0ec19f6da463eff96e378a5d70f882da + md5: 15b63c3fb5b7d67b1cb63553a33e6090 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 185995 + timestamp: 1751277236879 - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-12.1.0-h7f4e812_0.conda sha256: cce96406ec353692ab46cd9d992eddb6923979c1a342cbdba33521a7c234176f md5: 6e226b58e18411571aaa57a16ad10831 @@ -18165,6 +18200,19 @@ packages: purls: [] size: 38883 timestamp: 1762948066818 +- conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-ha91398d_0.conda + sha256: b186180e4ad6d00aa58b6890a31d45bee5b96202d636fe35a97bc5a621f65220 + md5: 57711002d722e1067e33c0bce84c2207 + depends: + - __glibc >=2.17,<3.0.a0 + - fmt >=11.2.0,<11.3.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 197730 + timestamp: 1760191982588 - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-hffee6e0_1.conda sha256: decf20ffbc2491ab4a65750e3ead2618ace69f3398b7bb58b5784b02f16ca87d md5: e7d62748a83b2a4574e219085e1d9855 @@ -18215,6 +18263,18 @@ packages: purls: [] size: 173402 timestamp: 1767782141460 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.16.0-h06f2c6e_0.conda + sha256: 6cfe6eba97204dc1d4165f903a9247a34d1cac6e06c29307db7150226452b118 + md5: f429110bb3c4139f94a2c5c3aecd4af5 + depends: + - __osx >=11.0 + - fmt >=11.2.0,<11.3.0a0 + - libcxx >=19 + license: MIT + license_family: MIT + purls: [] + size: 166909 + timestamp: 1760192476430 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda sha256: 465e81abc0e662937046a2c6318d1a9e74baee0addd51234d36e08bae6811296 md5: 1885f7cface8cd627774407eeacb2caf @@ -18227,6 +18287,19 @@ packages: purls: [] size: 166603 timestamp: 1767781942683 +- conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.16.0-hb1706eb_0.conda + sha256: 76b093cd335b011376bf591341026f4569cf5943986e9546a8146e95557d9492 + md5: f0fedd71001bf8ac6552865d5fb315b5 + depends: + - fmt >=11.2.0,<11.3.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 174853 + timestamp: 1760192198913 - conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.17.0-h9f585f1_1.conda sha256: 90c9befa5f154463647c8e101bc7a4e05cb84b731e2dea5406bedfea02f8b012 md5: 5c17c0a063b4d36b15d5f9c0ca5377a0 diff --git a/pixi.toml b/pixi.toml index f92e26f98..e97693d34 100644 --- a/pixi.toml +++ b/pixi.toml @@ -24,7 +24,7 @@ pip = ">=25.1.1,<26" pipx = ">=1.7.1,<2" numpy = ">=2.3.0,<3" compilers = ">=1.9.0,<2" -fmt = ">=12,<13" +fmt = ">=11,<13" spdlog = ">=1.16,<2" pkg-config = ">=0.29.2,<0.30" fortran-compiler = ">=1.10.0,<2" @@ -63,6 +63,12 @@ dev-serve-mta = {features = ["serve", "metatomic", "develop"]} # no torch wheels for 2.9 onwards for non arm macos platforms = ["linux-64", "osx-arm64", "win-64"] +[feature.metatomic.dependencies] +# Torch 2.9 bundles fmt 11.2 internally. Pin fmt to v11 so that pixi's +# spdlog is compiled against the same fmt ABI as torch, preventing linker +# errors from symbol mismatches between fmt v11 (torch) and fmt v12 (default). +fmt = ">=11,<12" + [feature.metatomic.pypi-dependencies] torch = ">=2.9, <2.10" metatomic-torch = ">=0.1.7, <0.2" From db0f30f4f7d2cdddf6e3ddf58462bb21b698c0fc Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 09:34:58 +0100 Subject: [PATCH 06/15] chore: add win-64 to serve platforms, remove unused includes capnproto is available on win-64 and the serve code uses no POSIX APIs, so enable the serve feature on Windows. Also remove unused and includes from ServeMode.cpp. --- client/ServeMode.cpp | 2 - pixi.lock | 328 +++++++++++++++++++++++++++++++++++++++++++ pixi.toml | 2 +- 3 files changed, 329 insertions(+), 3 deletions(-) diff --git a/client/ServeMode.cpp b/client/ServeMode.cpp index aa112fcd4..e82e9e316 100644 --- a/client/ServeMode.cpp +++ b/client/ServeMode.cpp @@ -29,8 +29,6 @@ #include "ServeRpcServer.h" #include -#include -#include #include #include #include diff --git a/pixi.lock b/pixi.lock index 3758b4e45..e430fea54 100644 --- a/pixi.lock +++ b/pixi.lock @@ -2757,6 +2757,160 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/1d/8a061603f318e965f50c39e46a56ed372a987b48c40011709f2a9219add0/vesin-0.4.2-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/de/3b/517af8e11dc8f321929669be69ad1d29dae757d656c6427613179865c3aa/vesin_torch-0.4.2-py3-none-macosx_11_0_arm64.whl + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/c-compiler-1.11.0-h528c1b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/capnproto-1.3.0-h76e3424_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-19-19.1.7-default_hac490eb_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-19.1.7-default_hac490eb_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/compiler-rt-19.1.7-h49e36cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_win-64-19.1.7-h49e36cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/compilers-1.11.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cxx-compiler-1.11.0-h1c1089f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flang-19.1.7-hbeecb71_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flang_impl_win-64-19.1.7-h719f0c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flang_win-64-19.1.7-h719f0c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-11.2.0-h1d4551f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fortran-compiler-1.11.0-h95e3450_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.6-nompi_hae35d4c_106.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/highfive-2.10.1-h90b5984_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.2-h637d24d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyhe2676ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.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/libaec-1.1.5-haf901d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.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/libflang-19.1.7-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.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/liblapack-3.11.0-5_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libllvm19-19.1.7-h830ff33_2.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/libopenblas-0.3.31-pthreads_h877e47f_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/libssh2-1.11.1-h9aa295b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h3cfd58e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-h779ef1b_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/lld-21.1.8-hc465015_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-21.1.8-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-tools-19.1.7-h752b59f_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ninja-1.13.2-h477610d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py312ha72d056_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openblas-0.3.31-pthreads_h4a7f399_0.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/noarch/parso-0.8.6-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-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pkg-config-0.29.2-h88c491f_1009.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pkgconf-2.5.1-h6a83c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.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/pyyaml-6.0.3-py312h05f76fc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sccache-0.14.0-h18a1a76_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/spdlog-1.16.0-hb1706eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.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/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.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 + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda + - 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/wcwidth-0.6.0-pyhd8ed1ab_0.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/yaml-0.2.5-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/9b/9b55b4d4855743de61ba91566d03b2560285ed8fc0387b9cf914795d4abf/ase-3.27.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/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - 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/9c/0f/5d0c71a1aefeb08efff26272149e07ab922b64f46c63363756224bd6872e/filelock-3.24.3-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/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/44/870d44b30e1dcfb6a65932e3e1506c103a8a5aea9103c337e7a53180322c/hf_xet-1.2.0-cp37-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/ae/2f6d96b4e6c5478d87d606a1934b5d436c4a2bce6bb7c6fdece891c128e3/huggingface_hub-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-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/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/94/d8/6649d70c4ed91783f9576e98d0bc60e32bd369c78402b0f4b8417cdc9db6/metatensor_core-0.1.19-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/0c/9c/f455b26da18906a8bdcd4fd2ddd3a916bf3e7c1e6675f4478da35ce41949/metatensor_learn-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/e6/60691e210a43b738249ee9abb3f2343dece72d0b821fda3d4023e061d26a/metatensor_operations-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/ed/1649ae0382a4d9942a1e0124ecae8d68b403e12bf2b6d8fd9759160fde5f/metatensor_torch-0.8.4-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/35/c8/8a09a68567ad2426fd9ae4abd12872f2e1c5b3a6a3db8809b88dc1c4d738/metatomic_torch-0.1.8-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ce/85/1607598424a7ee8bdd3dd6f7b47bbf79907c8b4ff57d6883da05ec6560dd/metatrain-2025.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.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/90/cc/bb6395c3f2b6bb739b1d3fc0e71f94e6a1c2e256df496237cbfd13cd74a6/python_hostlist-2.3.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/92/ce/672ed546f96d5d41ae78c4b9b02006cedd0b3d6f2bf5bb76ea455c320c28/scipy-1.17.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.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/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl + - pypi: https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/24/5480c20380dfd18cf33d14784096dca45a24eae6102e91d49a718d3b6855/typer_slim-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/e3/556a107f6496b3f7f99c60eadf037cde6b37cf6b033f643c38617e95b8df/vesin-0.4.2-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/35/91/c45cc56afbf545989c57c1ab54bf9d6a96d23a2f96f4e7d5a831a8bc7c93/vesin_torch-0.4.2-py3-none-win_amd64.whl dev-xtb: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -5779,6 +5933,92 @@ environments: - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-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/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/c-compiler-1.11.0-h528c1b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/capnproto-1.3.0-h76e3424_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-19-19.1.7-default_hac490eb_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-19.1.7-default_hac490eb_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/compiler-rt-19.1.7-h49e36cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_win-64-19.1.7-h49e36cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/compilers-1.11.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cxx-compiler-1.11.0-h1c1089f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flang-19.1.7-hbeecb71_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flang_impl_win-64-19.1.7-h719f0c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flang_win-64-19.1.7-h719f0c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-12.1.0-h7f4e812_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fortran-compiler-1.11.0-h95e3450_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.6-nompi_hae35d4c_106.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/highfive-2.10.1-h90b5984_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.2-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/libaec-1.1.5-haf901d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.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/libflang-19.1.7-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.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/liblapack-3.11.0-5_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libllvm19-19.1.7-h830ff33_2.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/libopenblas-0.3.31-pthreads_h877e47f_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/libssh2-1.11.1-h9aa295b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h3cfd58e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-h779ef1b_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/lld-21.1.8-hc465015_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-21.1.8-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-tools-19.1.7-h752b59f_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ninja-1.13.2-h477610d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py312ha72d056_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openblas-0.3.31-pthreads_h4a7f399_0.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-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pkg-config-0.29.2-h88c491f_1009.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pkgconf-2.5.1-h6a83c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.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/pyyaml-6.0.3-py312h05f76fc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sccache-0.14.0-h18a1a76_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/spdlog-1.17.0-h9f585f1_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.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/tomli-2.4.0-pyhcf101f3_0.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 + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda + - 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/yaml-0.2.5-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-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/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 @@ -6253,6 +6493,18 @@ packages: purls: [] size: 55977 timestamp: 1757437738856 +- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + sha256: 76dfb71df5e8d1c4eded2dbb5ba15bb8fb2e2b0fe42d94145d5eed4c75c35902 + md5: 4cb8e6b48f67de0b018719cdf1136306 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 56115 + timestamp: 1771350256444 - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda sha256: f8003bef369f57396593ccd03d08a8e21966157269426f71e943f96e4b579aeb md5: f7f0d6cc2dc986d42ac2689ec88192be @@ -6458,6 +6710,20 @@ packages: purls: [] size: 2903339 timestamp: 1766169063213 +- conda: https://conda.anaconda.org/conda-forge/win-64/capnproto-1.3.0-h76e3424_0.conda + sha256: 70097676115592ab44eea5f552d87ee72b8fc7c104e7861f02d2ae63ff587155 + md5: b11992a49df87274e85fe65f0853607b + depends: + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 8499759 + timestamp: 1766169156387 - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools-1021.4-ha66f10e_0.conda sha256: 1af7ea0c54e37ca1587c2d4e9c3a5add8dfd9bc4ff929f70a4330328f0c145ac md5: 37619e89a65bb3688c67d82fd8645afc @@ -7566,6 +7832,24 @@ packages: purls: [] size: 15666694 timestamp: 1769598343922 +- conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda + sha256: 9f66a8e231a3afce282123827bd9e8f8e0f81d4b6f3c5c809b8006db2bd8a44a + md5: ec81c32bfe49031759ffa481f44742bb + depends: + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libexpat >=2.7.4,<3.0a0 + - liblzma >=5.8.2,<6.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15742645 + timestamp: 1771384342226 - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 md5: 962b9857ee8e7018c22f2776ffa0b2d7 @@ -8254,6 +8538,18 @@ packages: purls: [] size: 1166663 timestamp: 1759819842269 +- conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h5112557_1.conda + sha256: ddaae02bdb9e0f7cbf4aa393aec0408a1aa701aa3070bd1cce18104fd7152f7e + md5: 4bb7af13f7c1b511e1c6e214d3787c88 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 1170655 + timestamp: 1771590596102 - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda sha256: 210c8165a58fdbf16e626aac93cc4c14dbd551a01d1516be5ecad795d2422cad md5: ff9efb7f7469aed3c4a8106ffa29593c @@ -12163,6 +12459,20 @@ packages: purls: [] size: 70137 timestamp: 1763550049107 +- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda + sha256: b31f6fb629c4e17885aaf2082fb30384156d16b48b264e454de4a06a313b533d + md5: 1c1ced969021592407f16ada4573586d + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - expat 2.7.4.* + license: MIT + license_family: MIT + purls: [] + size: 70323 + timestamp: 1771259521393 - conda: https://conda.anaconda.org/conda-forge/linux-64/libfabric-2.3.1-ha770c72_1.conda sha256: f705d6ab3827085c6dbf769d514f9ae9b6a6c03749530b0956b7228f14c03ff9 md5: 374ebf440b7e6094da551de9b9bc11ca @@ -12846,6 +13156,24 @@ packages: purls: [] size: 4060289 timestamp: 1770929667665 +- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_0.conda + sha256: 8ac945b308908e1eae9dcfeacba7f7a4163a9ae823c29dcf2335ec100e5aebee + md5: 275eb125dd1490f287e85ffd544b6403 + 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 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 4080064 + timestamp: 1771291641559 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_14.conda sha256: 2017cbc0f0f3b1d15df9ca681960eef015f9f58ba0d6e841694277a9f7eae0fc md5: 91349c276f84f590487e4c7f6e90e077 diff --git a/pixi.toml b/pixi.toml index e97693d34..008061c2c 100644 --- a/pixi.toml +++ b/pixi.toml @@ -124,7 +124,7 @@ python -m http.server -d html xtb = "*" [feature.serve] -platforms = ["linux-64", "osx-64", "osx-arm64"] +platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"] [feature.serve.dependencies] capnproto = ">=1.0,<2" From eb32ca8cf9499507a2cb39bce3bb834b28591693 Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 09:41:59 +0100 Subject: [PATCH 07/15] docs: add towncrier fragments for serve mode feature --- docs/newsfragments/316.added.md | 6 ++++++ docs/newsfragments/316.dev.md | 2 ++ 2 files changed, 8 insertions(+) create mode 100644 docs/newsfragments/316.added.md create mode 100644 docs/newsfragments/316.dev.md diff --git a/docs/newsfragments/316.added.md b/docs/newsfragments/316.added.md new file mode 100644 index 000000000..56a4e410d --- /dev/null +++ b/docs/newsfragments/316.added.md @@ -0,0 +1,6 @@ +Add `eonclient --serve` mode that wraps any eOn potential as an +rgpot-compatible RPC server over Cap'n Proto. Supports four serving modes: +single-potential (`--serve-port`), multi-model (`--serve "lj:12345,eam_al:12346"`), +replicated (`--replicas N` on sequential ports), and gateway (single port with +round-robin pool via `--gateway`). All options are also available through a +`[Serve]` INI config section. Requires `-Dwith_serve=true` at build time. diff --git a/docs/newsfragments/316.dev.md b/docs/newsfragments/316.dev.md new file mode 100644 index 000000000..182d51dc4 --- /dev/null +++ b/docs/newsfragments/316.dev.md @@ -0,0 +1,2 @@ +Add rgpot subproject wrap, `with_serve` meson option, `serve` pixi environment, +CI workflow for serve mode builds, and Catch2 unit tests for serve spec parsing. From 42052efb9533b773182df90c758678b30da7e43b Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Tue, 24 Feb 2026 06:05:38 +0100 Subject: [PATCH 08/15] docs: add dictionary-style config examples using rgpycrumbs Add run_*.py scripts to each major example directory (akmc-al, akmc-pt, akmc-cu-vacancy, basin-hopping, parallel-replica, neb-al) showing the equivalent config.ini expressed as Python dicts via write_eon_config. Also adds an advanced NEB example with climbing image, energy-weighted springs, and MMF options. New tutorial page (dict_config.md) documents the approach with side-by-side INI/Python comparisons and a parameter sweep example. References eon.schema as the single source of truth for option names. --- docs/source/tutorials/dict_config.md | 252 ++++++++++++++++++++ docs/source/tutorials/index.md | 1 + examples/akmc-al/run_akmc_al.py | 55 +++++ examples/akmc-cu-vacancy/run_akmc_cu.py | 77 ++++++ examples/akmc-pt/run_akmc_pt.py | 45 ++++ examples/basin-hopping/run_basin_hopping.py | 37 +++ examples/neb-al/run_neb_advanced.py | 49 ++++ examples/neb-al/run_neb_al.py | 31 +++ examples/parallel-replica/run_parrep.py | 46 ++++ 9 files changed, 593 insertions(+) create mode 100644 docs/source/tutorials/dict_config.md create mode 100644 examples/akmc-al/run_akmc_al.py create mode 100644 examples/akmc-cu-vacancy/run_akmc_cu.py create mode 100644 examples/akmc-pt/run_akmc_pt.py create mode 100644 examples/basin-hopping/run_basin_hopping.py create mode 100644 examples/neb-al/run_neb_advanced.py create mode 100644 examples/neb-al/run_neb_al.py create mode 100644 examples/parallel-replica/run_parrep.py diff --git a/docs/source/tutorials/dict_config.md b/docs/source/tutorials/dict_config.md new file mode 100644 index 000000000..607c35a15 --- /dev/null +++ b/docs/source/tutorials/dict_config.md @@ -0,0 +1,252 @@ +--- +myst: + html_meta: + "description": "Tutorial on using Python dictionaries to generate eOn configuration files programmatically, as an alternative to hand-written config.ini files." + "keywords": "eOn dictionary config, Python configuration, write_eon_config, rgpycrumbs, programmatic setup" +--- + +# Dictionary-Style Configuration + +eOn reads its parameters from a `config.ini` file in INI format. While writing +these files by hand works well for one-off runs, programmatic workflows benefit +from generating the configuration from Python dictionaries. The +{func}`~rgpycrumbs.eon.helpers.write_eon_config` function in +[rgpycrumbs](https://github.com/HaoZeke/rgpycrumbs) handles this conversion. + +All configuration options are documented in {mod}`eon.schema`, which is the +single source of truth for parameter names, types, defaults, and allowed values. +The user guide pages (e.g. {doc}`/user_guide/main`, {doc}`/user_guide/neb`) +render these Pydantic models directly. + +## Installation + +`rgpycrumbs` is available on PyPI: + +```bash +pip install rgpycrumbs +# or +uv add rgpycrumbs +``` + +## Basic Usage + +A dictionary maps INI section names to their key-value pairs. The section names +match the headers in `config.ini` (and the headings in the user guide). For +example, an AKMC run on a Pt heptamer: + +```python +from pathlib import Path +from rgpycrumbs.eon.helpers import write_eon_config + +settings = { + "Main": { + "job": "akmc", + "temperature": 300, + }, + "Potential": { + "potential": "morse_pt", + }, + "Optimizer": { + "converged_force": 0.001, + "max_iterations": 1000, + }, + "AKMC": { + "confidence": 0.95, + }, + "Process Search": { + "minimize_first": True, + }, + "Communicator": { + "type": "local", + "number_of_CPUs": 2, + "num_jobs": 2, + }, + "Saddle Search": { + "displace_least_coordinated_weight": 1.0, + "displace_radius": 3.3, + "displace_magnitude": 0.1, + "min_mode_method": "dimer", + "max_energy": 10.0, + }, +} + +write_eon_config(Path("."), settings) +``` + +This writes a `config.ini` in the current directory. You can then run +`python -m eon.server` (or `eonclient` directly) as usual. + +```{tip} +Pass a directory path and `write_eon_config` creates `config.ini` inside it. +Pass a full file path to control the output name. +``` + +## Why Dictionaries? + +Compared to editing INI files by hand, the dictionary approach provides: + +- **Reproducibility**: the script *is* the configuration, checked into version + control alongside the structure files. +- **Parameterization**: loop over temperatures, spring constants, or image + counts without duplicating INI files. +- **Validation reference**: option names and types are defined in + {mod}`eon.schema`. Typos that would silently fall back to defaults in an INI + file become obvious when compared against the schema documentation. +- **Notebook integration**: generate and run eOn configurations within Jupyter + notebooks. The + [atomistic cookbook](https://atomistic-cookbook.org/examples/eon-pet-neb/eon-pet-neb.html) + has a worked NEB example using this approach. + +## Examples by Job Type + +Each example directory under `examples/` now contains both a `config.ini` and +a Python equivalent (`run_*.py`). The scripts are self-contained and can be +executed with: + +```bash +cd examples/akmc-pt +python run_akmc_pt.py # generates config.ini +python -m eon.server # runs the simulation +``` + +### AKMC + +:::::{tab-set} + +::::{tab-item} Dictionary (Python) +```{literalinclude} ../../../examples/akmc-pt/run_akmc_pt.py +:language: python +``` +:::: + +::::{tab-item} INI +```{literalinclude} ../../../examples/akmc-pt/config.ini +:language: ini +``` +:::: + +::::: + +### NEB + +:::::{tab-set} + +::::{tab-item} Dictionary (Python) +```{literalinclude} ../../../examples/neb-al/run_neb_al.py +:language: python +``` +:::: + +::::{tab-item} INI +```{literalinclude} ../../../examples/neb-al/config.ini +:language: ini +``` +:::: + +::::: + +For advanced NEB options (climbing image, energy-weighted springs, IDPP +initialization, off-path CI with MMF), see +`examples/neb-al/run_neb_advanced.py`. + +### Basin Hopping + +:::::{tab-set} + +::::{tab-item} Dictionary (Python) +```{literalinclude} ../../../examples/basin-hopping/run_basin_hopping.py +:language: python +``` +:::: + +::::{tab-item} INI +```{literalinclude} ../../../examples/basin-hopping/config.ini +:language: ini +``` +:::: + +::::: + +### Parallel Replica Dynamics + +:::::{tab-set} + +::::{tab-item} Dictionary (Python) +```{literalinclude} ../../../examples/parallel-replica/run_parrep.py +:language: python +``` +:::: + +::::{tab-item} INI +```{literalinclude} ../../../examples/parallel-replica/config.ini +:language: ini +``` +:::: + +::::: + +### AKMC with Displacement Script + +The Cu vacancy example shows how dictionary config works alongside a +displacement script (`ptmdisp.py`). The script path is just another string +parameter: + +```python +"Saddle Search": { + "displace_atom_kmc_state_script": "ptmdisp.py", + "displace_all_listed": True, + # ... +}, +``` + +See `examples/akmc-cu-vacancy/run_akmc_cu.py` for the full configuration and +{doc}`displacement_scripts` for details on writing displacement scripts. + +## Parameter Sweeps + +The dictionary approach makes parameter sweeps straightforward: + +```python +from pathlib import Path +from rgpycrumbs.eon.helpers import write_eon_config + +base = { + "Main": {"job": "nudged_elastic_band"}, + "Potential": {"potential": "eam_al"}, + "Optimizer": { + "opt_method": "lbfgs", + "max_move": 0.1, + "converged_force": 0.001, + "max_iterations": 1000, + }, +} + +for n_images in [5, 7, 11, 15]: + run_dir = Path(f"neb_{n_images}img") + run_dir.mkdir(exist_ok=True) + settings = { + **base, + "Nudged Elastic Band": { + "images": n_images, + "spring": 5.0, + }, + } + write_eon_config(run_dir, settings) +``` + +## Schema Reference + +The authoritative documentation for every configuration option lives in the +Pydantic models in {mod}`eon.schema`. The user guide pages render these models +automatically: + +- {doc}`/user_guide/main` -- general simulation parameters +- {doc}`/user_guide/akmc` -- adaptive kinetic Monte Carlo +- {doc}`/user_guide/neb` -- nudged elastic band +- {doc}`/user_guide/saddle_search` -- saddle search methods +- {doc}`/user_guide/optimizer` -- optimization algorithms +- {doc}`/user_guide/potential` -- interatomic potentials +- {doc}`/user_guide/dynamics` -- molecular dynamics +- {doc}`/user_guide/parallel_replica` -- parallel replica dynamics +- {doc}`/user_guide/basin_hopping` -- basin hopping +- {doc}`/user_guide/communicator` -- job communicators diff --git a/docs/source/tutorials/index.md b/docs/source/tutorials/index.md index 88e9b4098..d2e13a16f 100644 --- a/docs/source/tutorials/index.md +++ b/docs/source/tutorials/index.md @@ -18,6 +18,7 @@ server and client). akmc parrep displacement_scripts +dict_config CECAM_LTS_MAP_2024/index ``` diff --git a/examples/akmc-al/run_akmc_al.py b/examples/akmc-al/run_akmc_al.py new file mode 100644 index 000000000..a5add56a5 --- /dev/null +++ b/examples/akmc-al/run_akmc_al.py @@ -0,0 +1,55 @@ +"""AKMC simulation of Al with dictionary-style configuration. + +Equivalent to the config.ini in this directory, but uses +``write_eon_config`` from rgpycrumbs to generate the INI file +programmatically. All option names match the fields documented in +``eon.schema`` (the Pydantic models are the single source of truth). +""" + +from pathlib import Path + +from rgpycrumbs.eon.helpers import write_eon_config + +settings = { + "Main": { + "job": "akmc", + "temperature": 300, + "random_seed": 42, + }, + "Potential": { + "potential": "eam_al", + }, + "Optimizer": { + "opt_method": "lbfgs", + "converged_force": 1e-4, + "max_iterations": 1000, + }, + "AKMC": { + "confidence": 0.95, + }, + "Process Search": { + "minimize_first": True, + }, + "Prefactor": { + "default_value": 1e12, + }, + "Communicator": { + "type": "local", + "number_of_cpus": 2, + "num_jobs": 8, + }, + "Lanczos": { + "tolerance": 0.05, + }, + "Saddle Search": { + "min_mode_method": "lanczos", + "displace_radius": 5.0, + "displace_magnitude": 0.2, + "max_energy": 10.0, + "displace_listed_atom_weight": 1.0, + "displace_atom_list": -1, + }, +} + +if __name__ == "__main__": + write_eon_config(Path("."), settings) diff --git a/examples/akmc-cu-vacancy/run_akmc_cu.py b/examples/akmc-cu-vacancy/run_akmc_cu.py new file mode 100644 index 000000000..0e7b62f2b --- /dev/null +++ b/examples/akmc-cu-vacancy/run_akmc_cu.py @@ -0,0 +1,77 @@ +"""AKMC simulation of Cu vacancy with dictionary-style configuration. + +Equivalent to the config.ini in this directory. Demonstrates the use of +a displacement script (ptmdisp.py) for targeted saddle searches around +the vacancy site, identified via polyhedral template matching. +""" + +from pathlib import Path + +from rgpycrumbs.eon.helpers import write_eon_config + +settings = { + "Main": { + "job": "akmc", + "temperature": 300, + "random_seed": 757783492, + "finite_difference": 0.01, + }, + "Communicator": { + "type": "local", + "num_jobs": 4, + "number_of_cpus": 4, + }, + "AKMC": { + "confidence": 0.005, + "confidence_scheme": "new", + "thermally_accessible_window": 100.0, + }, + "Optimizer": { + "max_iterations": 1000, + "opt_method": "lbfgs", + "converged_force": 0.01, + "lbfgs_memory": 25, + "lbfgs_inverse_curvature": 0.01, + "lbfgs_auto_scale": True, + "convergence_metric": "norm", + "max_move": 0.05, + }, + "Dimer": { + "opt_method": "cg", + "improved": True, + "rotations_max": 20, + "converged_angle": 1.0, + "remove_rotation": False, + }, + "Potential": { + "potential": "emt", + }, + "Process Search": { + "minimize_first": True, + }, + "Saddle Search": { + "method": "min_mode", + "min_mode_method": "dimer", + "max_energy": 300, + "displace_listed_atom_weight": 1.0, + "displace_radius": 3.0, + "displace_magnitude": 0.01, + "displace_atom_kmc_state_script": "ptmdisp.py", + "displace_all_listed": True, + "remove_rotation": False, + }, + "Structure Comparison": { + "distance_difference": 0.1, + "energy_difference": 0.08, + "neighbor_cutoff": 3.0, + }, + "Debug": { + "write_movies": True, + }, + "Prefactor": { + "default_value": 1e13, + }, +} + +if __name__ == "__main__": + write_eon_config(Path("."), settings) diff --git a/examples/akmc-pt/run_akmc_pt.py b/examples/akmc-pt/run_akmc_pt.py new file mode 100644 index 000000000..b59cfa3d2 --- /dev/null +++ b/examples/akmc-pt/run_akmc_pt.py @@ -0,0 +1,45 @@ +"""AKMC simulation of Pt heptamer with dictionary-style configuration. + +Equivalent to the config.ini in this directory. Uses the dimer method +for saddle searches with displacement biased towards the least +coordinated atom. +""" + +from pathlib import Path + +from rgpycrumbs.eon.helpers import write_eon_config + +settings = { + "Main": { + "job": "akmc", + "temperature": 300, + }, + "Potential": { + "potential": "morse_pt", + }, + "Optimizer": { + "converged_force": 0.001, + "max_iterations": 1000, + }, + "AKMC": { + "confidence": 0.95, + }, + "Process Search": { + "minimize_first": True, + }, + "Communicator": { + "type": "local", + "number_of_CPUs": 2, + "num_jobs": 2, + }, + "Saddle Search": { + "displace_least_coordinated_weight": 1.0, + "displace_radius": 3.3, + "displace_magnitude": 0.1, + "min_mode_method": "dimer", + "max_energy": 10.0, + }, +} + +if __name__ == "__main__": + write_eon_config(Path("."), settings) diff --git a/examples/basin-hopping/run_basin_hopping.py b/examples/basin-hopping/run_basin_hopping.py new file mode 100644 index 000000000..b2d064dc0 --- /dev/null +++ b/examples/basin-hopping/run_basin_hopping.py @@ -0,0 +1,37 @@ +"""Basin hopping global optimization with dictionary-style configuration. + +Equivalent to the config.ini in this directory. Searches for the global +minimum of a Lennard-Jones cluster at 2000 K using Gaussian-distributed +displacements. +""" + +from pathlib import Path + +from rgpycrumbs.eon.helpers import write_eon_config + +settings = { + "Main": { + "job": "basin_hopping", + "temperature": 2000, + }, + "Communicator": { + "type": "local", + }, + "Potential": { + "potential": "lj", + }, + "Basin Hopping": { + "steps": 100, + "displacement": 0.25, + "significant_structure": True, + "displacement_distribution": "gaussian", + }, + "Optimizer": { + "opt_method": "cg", + "converged_force": 0.01, + "max_iterations": 10000, + }, +} + +if __name__ == "__main__": + write_eon_config(Path("."), settings) diff --git a/examples/neb-al/run_neb_advanced.py b/examples/neb-al/run_neb_advanced.py new file mode 100644 index 000000000..6cbdc7ab6 --- /dev/null +++ b/examples/neb-al/run_neb_advanced.py @@ -0,0 +1,49 @@ +"""Advanced NEB with climbing image and energy-weighted springs. + +Demonstrates the full set of NEB options available via dictionary +configuration. This extends the basic NEB example with: + +- Climbing image method for accurate saddle point location +- Energy-weighted springs for better resolution near the barrier +- IDPP initialization for a smoother initial path +- Off-path climbing image (MMF) for dimer-like refinement at the saddle + +See ``eon.schema.NudgedElasticBandConfig`` for all available fields. +""" + +from pathlib import Path + +from rgpycrumbs.eon.helpers import write_eon_config + +N_IMAGES = 10 + +settings = { + "Main": { + "job": "nudged_elastic_band", + }, + "Potential": { + "potential": "eam_al", + }, + "Nudged Elastic Band": { + "images": N_IMAGES, + "spring": 5.0, + "climbing_image_method": True, + "energy_weighted": True, + "ew_ksp_min": 0.972, + "ew_ksp_max": 9.72, + "initializer": "idpp", + # Off-path climbing image with dimer-like refinement + "ci_mmf": True, + "ci_mmf_after": 0.5, + "ci_mmf_nsteps": 1000, + }, + "Optimizer": { + "max_iterations": 1000, + "opt_method": "lbfgs", + "max_move": 0.1, + "converged_force": 0.01, + }, +} + +if __name__ == "__main__": + write_eon_config(Path("."), settings) diff --git a/examples/neb-al/run_neb_al.py b/examples/neb-al/run_neb_al.py new file mode 100644 index 000000000..16fdc892b --- /dev/null +++ b/examples/neb-al/run_neb_al.py @@ -0,0 +1,31 @@ +"""Nudged elastic band calculation with dictionary-style configuration. + +Equivalent to the config.ini in this directory. Runs an NEB calculation +on Al with 7 intermediate images and LBFGS optimization. +""" + +from pathlib import Path + +from rgpycrumbs.eon.helpers import write_eon_config + +settings = { + "Main": { + "job": "nudged_elastic_band", + }, + "Potential": { + "potential": "eam_al", + }, + "Nudged Elastic Band": { + "images": 7, + "spring": 5.0, + }, + "Optimizer": { + "max_iterations": 1000, + "opt_method": "lbfgs", + "max_move": 0.1, + "converged_force": 0.001, + }, +} + +if __name__ == "__main__": + write_eon_config(Path("."), settings) diff --git a/examples/parallel-replica/run_parrep.py b/examples/parallel-replica/run_parrep.py new file mode 100644 index 000000000..4860e50be --- /dev/null +++ b/examples/parallel-replica/run_parrep.py @@ -0,0 +1,46 @@ +"""Parallel replica dynamics with dictionary-style configuration. + +Equivalent to the config.ini in this directory. Runs parallel replica +dynamics on an Al(100) surface with an Andersen thermostat at 500 K. +""" + +from pathlib import Path + +from rgpycrumbs.eon.helpers import write_eon_config + +settings = { + "Main": { + "job": "parallel_replica", + "temperature": 500, + "random_seed": 1042, + }, + "Potential": { + "potential": "eam_al", + }, + "Communicator": { + "type": "local", + "number_of_cpus": 1, + "num_jobs": 2, + }, + "Dynamics": { + "time_step": 1.0, + "time": 5000.0, + "thermostat": "andersen", + "andersen_alpha": 0.2, + "andersen_collision_period": 10.0, + }, + "Parallel Replica": { + "dephase_time": 1000.0, + "state_check_interval": 3000.0, + "state_save_interval": 1000.0, + "post_transition_time": 200.0, + "stop_after_transition": False, + }, + "Optimizer": { + "opt_method": "cg", + "converged_force": 0.005, + }, +} + +if __name__ == "__main__": + write_eon_config(Path("."), settings) From ddbe60e06d56d2fa3956b3bd4b7d8402f6d81da7 Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 07:31:40 +0100 Subject: [PATCH 09/15] feat: add rgpot-compatible RPC serve mode with gateway support Add serve mode to eonclient that wraps any eOn potential as an rgpot PotentialBase served over Cap'n Proto RPC. Supports four operating modes: - Single-potential: `eonclient -p lj --serve-port 12345` - Multi-model: `eonclient --serve "lj:12345,eam_al:12346"` - Replicated: `eonclient -p lj --serve-port 12345 --replicas 4` - Gateway: `eonclient -p lj --serve-port 12345 --replicas 6 --gateway` Gateway mode exposes a single port backed by a round-robin pool of potential instances, so clients need only one address. All modes are also configurable via INI config file with a [Serve] section (host, port, replicas, gateway_port, endpoints). Implementation uses a two-TU architecture to avoid naming collision between eOn's Potential class and capnp-generated Potential interface. Includes meson build integration (with_serve option, rgpot subproject wrap), Catch2 unit tests for parseServeSpec, Python schema (schema.py), config.yaml section, and user documentation. --- .github/workflows/ci_serve.yml | 45 ++++ client/CommandLine.cpp | 87 ++++++- client/Parameters.cpp | 21 ++ client/Parameters.h | 9 + client/ServeMode.cpp | 335 +++++++++++++++++++++++++++ client/ServeMode.h | 109 +++++++++ client/ServeRpcServer.cpp | 173 ++++++++++++++ client/ServeRpcServer.h | 50 ++++ client/gtests/ServeSpecParseTest.cpp | 87 +++++++ client/meson.build | 23 ++ docs/source/user_guide/index.md | 1 + docs/source/user_guide/serve_mode.md | 227 ++++++++++++++++++ eon/config.yaml | 24 ++ eon/schema.py | 26 +++ meson_options.txt | 1 + pixi.toml | 7 + subprojects/rgpot.wrap | 5 + 17 files changed, 1229 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/ci_serve.yml create mode 100644 client/ServeMode.cpp create mode 100644 client/ServeMode.h create mode 100644 client/ServeRpcServer.cpp create mode 100644 client/ServeRpcServer.h create mode 100644 client/gtests/ServeSpecParseTest.cpp create mode 100644 docs/source/user_guide/serve_mode.md create mode 100644 subprojects/rgpot.wrap diff --git a/.github/workflows/ci_serve.yml b/.github/workflows/ci_serve.yml new file mode 100644 index 000000000..252467e03 --- /dev/null +++ b/.github/workflows/ci_serve.yml @@ -0,0 +1,45 @@ +name: Build and test serve mode +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true +on: [push, pull_request] + +env: + SCCACHE_GHA_ENABLED: "true" + +jobs: + build_serve: + runs-on: ${{ matrix.os }} + name: test (${{ matrix.os }}) + strategy: + fail-fast: false + matrix: + os: [ubuntu-22.04] + steps: + - uses: actions/checkout@v4 + - uses: prefix-dev/setup-pixi@v0.8.10 + with: + cache: true + cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }} + activate-environment: true + environments: >- + serve + - name: Configure sccache + uses: actions/github-script@v7 + with: + script: | + core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); + core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); + - name: Build with serve mode + shell: pixi run bash -e {0} + run: | + meson setup bbdir \ + --prefix=$CONDA_PREFIX \ + --libdir=lib \ + -Dwith_serve=true \ + -Dwith_tests=true + meson compile -C bbdir + - name: Run serve mode tests + shell: pixi run bash -e {0} + run: | + meson test -C bbdir test_serve_spec diff --git a/client/CommandLine.cpp b/client/CommandLine.cpp index 1425e0af3..e74355361 100644 --- a/client/CommandLine.cpp +++ b/client/CommandLine.cpp @@ -15,7 +15,12 @@ #include "Potential.h" #include "version.h" +#ifdef WITH_SERVE_MODE +#include "ServeMode.h" +#endif + #include +#include #include #include #include @@ -62,7 +67,25 @@ void commandLine(int argc, char **argv) { "t,tolerance", "Distance tolerance", cxxopts::value()->default_value("0.1"))( "p,potential", "The potential (e.g. qsc, lj, eam_al)", - cxxopts::value())("h,help", "Print usage"); + cxxopts::value()) +#ifdef WITH_SERVE_MODE + ("serve", "Serve potential(s) over rgpot Cap'n Proto RPC. " + "Spec: 'potential:port' or 'pot1:port1,pot2:port2'", + cxxopts::value())( + "serve-host", "Host to bind RPC server(s) to", + cxxopts::value()->default_value("localhost"))( + "serve-port", "Port for single-potential serve mode (used with -p)", + cxxopts::value()->default_value("12345"))( + "replicas", "Number of replicated server instances (used with -p)", + cxxopts::value()->default_value("1"))( + "gateway", "Run a single gateway port backed by N pool instances " + "(use with -p and --replicas)", + cxxopts::value()->default_value("false"))( + "config", "Config file for potential parameters (INI format, " + "e.g. [Metatomic] model_path=model.pt)", + cxxopts::value()) +#endif + ("h,help", "Print usage"); try { auto result = options.parse(argc, argv); @@ -120,6 +143,68 @@ void commandLine(int argc, char **argv) { exit(2); } +#ifdef WITH_SERVE_MODE + // Load config file if provided (for potential-specific parameters + // like model_path, device, length_unit, etc.) + if (result.count("config")) { + auto config_path = result["config"].as(); + std::ifstream config_file(config_path); + if (!config_file.is_open()) { + std::cerr << "Cannot open config file: " << config_path << std::endl; + exit(2); + } + params.load(config_path); + } + + // Handle --serve mode (does not require a con file) + if (result.count("serve")) { + auto spec = result["serve"].as(); + auto endpoints = parseServeSpec(spec); + if (endpoints.empty()) { + std::cerr << "No valid serve endpoints in spec: " << spec << std::endl; + exit(2); + } + serveMultiple(endpoints, params); + exit(0); + } + + // Handle -p with serve flags (single potential serve mode) + if (pflag && !sflag && !mflag && !cflag && + (result.count("serve-port") || result.count("replicas") || + result.count("gateway"))) { + for (auto &ch : potential) { + ch = tolower(ch); + } + params.potential_options.potential = + magic_enum::enum_cast(potential, + magic_enum::case_insensitive) + .value_or(PotType::UNKNOWN); + auto host = result["serve-host"].as(); + auto port = result["serve-port"].as(); + auto reps = result["replicas"].as(); + bool gw = result["gateway"].as(); + + if (gw) { + serveGateway(params, host, port, reps); + } else if (reps > 1) { + serveReplicated(params, host, port, reps); + } else { + serveMode(params, host, port); + } + exit(0); + } + + // Config-driven serve (no -p or --serve, just --config with [Serve]) + if (!pflag && !sflag && !mflag && !cflag && + result.count("config") && !result.count("serve") && + (!params.serve_options.endpoints.empty() || + params.serve_options.gateway_port > 0 || + params.serve_options.replicas > 1)) { + serveFromConfig(params); + exit(0); + } +#endif + if (!cflag) { for (auto &ch : potential) { ch = tolower(ch); diff --git a/client/Parameters.cpp b/client/Parameters.cpp index c8e455f5f..6fc678b64 100644 --- a/client/Parameters.cpp +++ b/client/Parameters.cpp @@ -459,6 +459,13 @@ Parameters::Parameters() { bgsd_options.grad2energy_convergence = 0.000001; bgsd_options.grad2force_convergence = 0.0001; + // [Serve] // + serve_options.host = "localhost"; + serve_options.port = 12345; + serve_options.replicas = 1; + serve_options.gateway_port = 0; + serve_options.endpoints = ""; + // [CatLearn] // // No reasonable default for catlearn_options.path catlearn_options.model = "gp"; @@ -884,6 +891,20 @@ int Parameters::load(FILE *file) { _variant.energy_uncertainty = ini.GetValue("Metatomic", "variant_energy_uncertainty", ""); } + // [Serve] + if (ini.FindKey("Serve") != -1) { + serve_options.host = + ini.GetValue("Serve", "host", serve_options.host); + serve_options.port = static_cast( + ini.GetValueL("Serve", "port", serve_options.port)); + serve_options.replicas = static_cast( + ini.GetValueL("Serve", "replicas", serve_options.replicas)); + serve_options.gateway_port = static_cast( + ini.GetValueL("Serve", "gateway_port", serve_options.gateway_port)); + serve_options.endpoints = + ini.GetValue("Serve", "endpoints", serve_options.endpoints); + } + // GP_NEB only gp_surrogate_options.linear_path_always = ini.GetValueB("Surrogate", "gp_linear_path_always", diff --git a/client/Parameters.h b/client/Parameters.h index 07ac9971f..423a08bee 100644 --- a/client/Parameters.h +++ b/client/Parameters.h @@ -582,6 +582,15 @@ class Parameters { double grad2force_convergence; } bgsd_options; + // [Serve] // + struct serve_options_t { + string host; + uint16_t port; + size_t replicas; + uint16_t gateway_port; // 0 = disabled + string endpoints; // "pot:port,pot:host:port,..." spec string + } serve_options; + // [Debug] // struct debug_options_t { bool write_movies; diff --git a/client/ServeMode.cpp b/client/ServeMode.cpp new file mode 100644 index 000000000..74bacd54d --- /dev/null +++ b/client/ServeMode.cpp @@ -0,0 +1,335 @@ +/* +** This file is part of eOn. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** Copyright (c) 2010--present, eOn Development Team +** All rights reserved. +** +** Repo: +** https://github.com/TheochemUI/eOn +*/ + +/** + * @file ServeMode.cpp + * @brief Multi-model RPC serving for eOn potentials. + * + * Wraps any eOn Potential (including Metatomic ML models) as an rgpot + * PotentialBase and serves it over Cap'n Proto RPC. Supports serving + * multiple potentials concurrently on different ports, each in its own + * thread with its own event loop. + * + * This translation unit includes eOn's Potential.h. The Cap'n Proto server + * code is in ServeRpcServer.cpp (separate TU to avoid naming collision with + * the capnp-generated `Potential` interface). + */ + +#include "ServeMode.h" +#include "Potential.h" +#include "ServeRpcServer.h" + +#include +#include +#include +#include +#include +#include + +#include + +#include "rgpot/Potential.hpp" +#include "rgpot/types/AtomMatrix.hpp" + +using rgpot::types::AtomMatrix; + +/** + * @class EonPotentialAdapter + * @brief Adapts eOn's Potential::force() to rgpot's PotentialBase interface. + * + * This allows any eOn potential (LJ, EAM, Metatomic, VASP, LAMMPS, etc.) + * to be served over rgpot's Cap'n Proto RPC protocol without modification. + */ +class EonPotentialAdapter : public rgpot::PotentialBase { +public: + explicit EonPotentialAdapter(std::shared_ptr<::Potential> pot) + : rgpot::PotentialBase(rgpot::PotType::UNKNOWN), + m_potential(std::move(pot)) {} + + std::pair + operator()(const AtomMatrix &positions, const std::vector &atmtypes, + const std::array, 3> &box) override { + long nAtoms = static_cast(positions.rows()); + + // Flatten positions: eOn expects [x1,y1,z1, x2,y2,z2, ...] + std::vector flat_pos(nAtoms * 3); + for (long i = 0; i < nAtoms; ++i) { + flat_pos[3 * i + 0] = positions(i, 0); + flat_pos[3 * i + 1] = positions(i, 1); + flat_pos[3 * i + 2] = positions(i, 2); + } + + // Flatten box (3x3 row-major) + double flat_box[9]; + for (int i = 0; i < 3; ++i) { + for (int j = 0; j < 3; ++j) { + flat_box[i * 3 + j] = box[i][j]; + } + } + + // Call eOn's potential + std::vector flat_forces(nAtoms * 3, 0.0); + double energy = 0.0; + double variance = 0.0; + m_potential->force(nAtoms, flat_pos.data(), atmtypes.data(), + flat_forces.data(), &energy, &variance, flat_box); + + // Convert back to Eigen matrix + AtomMatrix forces(nAtoms, 3); + for (long i = 0; i < nAtoms; ++i) { + forces(i, 0) = flat_forces[3 * i + 0]; + forces(i, 1) = flat_forces[3 * i + 1]; + forces(i, 2) = flat_forces[3 * i + 2]; + } + + return {energy, forces}; + } + +private: + std::shared_ptr<::Potential> m_potential; +}; + +// --------------------------------------------------------------------------- +// Single-model serve +// --------------------------------------------------------------------------- + +void serveMode(const Parameters ¶ms, const std::string &host, + uint16_t port) { + auto pot_type = params.potential_options.potential; + spdlog::info("Creating potential: {}", + std::string(magic_enum::enum_name(pot_type))); + + auto eon_pot = helper_functions::makePotential(params); + if (!eon_pot) { + spdlog::error("Failed to create potential of type {}", + std::string(magic_enum::enum_name(pot_type))); + return; + } + + auto adapter = std::make_unique(std::move(eon_pot)); + + // Blocks until killed (runs Cap'n Proto event loop) + startRpcServer(std::move(adapter), host, port); +} + +// --------------------------------------------------------------------------- +// Multi-model concurrent serve +// --------------------------------------------------------------------------- + +void serveMultiple(const std::vector &endpoints, + const Parameters &base_params) { + if (endpoints.empty()) { + spdlog::error("No serve endpoints specified"); + return; + } + + // Single endpoint: run in the main thread (no extra overhead) + if (endpoints.size() == 1) { + auto params = base_params; + params.potential_options.potential = endpoints[0].potential; + serveMode(params, endpoints[0].host, endpoints[0].port); + return; + } + + // Multiple endpoints: one thread per server + spdlog::info("Starting {} concurrent RPC servers", endpoints.size()); + + std::vector threads; + threads.reserve(endpoints.size()); + + for (const auto &ep : endpoints) { + threads.emplace_back([&base_params, ep]() { + auto params = base_params; + params.potential_options.potential = ep.potential; + auto pot_name = std::string(magic_enum::enum_name(ep.potential)); + + spdlog::info("[{}:{}] Creating potential: {}", ep.host, ep.port, + pot_name); + + auto eon_pot = helper_functions::makePotential(params); + if (!eon_pot) { + spdlog::error("[{}:{}] Failed to create potential {}", ep.host, ep.port, + pot_name); + return; + } + + auto adapter = std::make_unique(std::move(eon_pot)); + startRpcServer(std::move(adapter), ep.host, ep.port); + }); + } + + // Wait for all threads (they block until killed) + for (auto &t : threads) { + if (t.joinable()) { + t.join(); + } + } +} + +// --------------------------------------------------------------------------- +// Replicated serve: N copies of same potential on sequential ports +// --------------------------------------------------------------------------- + +void serveReplicated(const Parameters ¶ms, const std::string &host, + uint16_t base_port, size_t replicas) { + if (replicas == 0) { + spdlog::error("Replicas must be >= 1"); + return; + } + if (replicas == 1) { + serveMode(params, host, base_port); + return; + } + + spdlog::info("Starting {} replicated servers on ports {}-{}", replicas, + base_port, base_port + replicas - 1); + + std::vector threads; + threads.reserve(replicas); + + for (size_t i = 0; i < replicas; ++i) { + uint16_t port = static_cast(base_port + i); + threads.emplace_back([¶ms, &host, port]() { + serveMode(params, host, port); + }); + } + + for (auto &t : threads) { + if (t.joinable()) { + t.join(); + } + } +} + +// --------------------------------------------------------------------------- +// Gateway serve: single port backed by a pool of potential instances +// --------------------------------------------------------------------------- + +void serveGateway(const Parameters ¶ms, const std::string &host, + uint16_t port, size_t pool_size) { + if (pool_size == 0) { + spdlog::error("Pool size must be >= 1"); + return; + } + + auto pot_type = params.potential_options.potential; + spdlog::info("Creating pool of {} {} instances for gateway on {}:{}", + pool_size, std::string(magic_enum::enum_name(pot_type)), host, + port); + + std::vector> pool; + pool.reserve(pool_size); + + for (size_t i = 0; i < pool_size; ++i) { + auto eon_pot = helper_functions::makePotential(params); + if (!eon_pot) { + spdlog::error("Failed to create potential instance {}/{}", i + 1, + pool_size); + return; + } + pool.push_back( + std::make_unique(std::move(eon_pot))); + } + + spdlog::info("Pool ready, starting gateway server"); + startPooledRpcServer(std::move(pool), host, port); +} + +// --------------------------------------------------------------------------- +// Config-driven dispatch +// --------------------------------------------------------------------------- + +void serveFromConfig(const Parameters ¶ms) { + const auto &opts = params.serve_options; + + // Multi-model endpoints take priority + if (!opts.endpoints.empty()) { + auto endpoints = parseServeSpec(opts.endpoints); + if (endpoints.empty()) { + spdlog::error("No valid endpoints in spec: {}", opts.endpoints); + return; + } + serveMultiple(endpoints, params); + return; + } + + // Gateway mode + if (opts.gateway_port > 0) { + size_t pool = (opts.replicas > 0) ? opts.replicas : 1; + serveGateway(params, opts.host, opts.gateway_port, pool); + return; + } + + // Replicated mode (default) + serveReplicated(params, opts.host, opts.port, opts.replicas); +} + +// --------------------------------------------------------------------------- +// Spec parser: "pot:port,pot:host:port,..." +// --------------------------------------------------------------------------- + +std::vector parseServeSpec(const std::string &spec) { + std::vector endpoints; + std::istringstream stream(spec); + std::string token; + + while (std::getline(stream, token, ',')) { + // Trim whitespace + token.erase(0, token.find_first_not_of(" \t")); + token.erase(token.find_last_not_of(" \t") + 1); + if (token.empty()) + continue; + + // Parse "potential:port" or "potential:host:port" + size_t first_colon = token.find(':'); + if (first_colon == std::string::npos) { + spdlog::error("Invalid serve spec '{}': expected 'potential:port'", + token); + continue; + } + + std::string pot_str = token.substr(0, first_colon); + std::string rest = token.substr(first_colon + 1); + + // Lowercase the potential name + std::transform(pot_str.begin(), pot_str.end(), pot_str.begin(), ::tolower); + + ServeEndpoint ep; + ep.potential = magic_enum::enum_cast(pot_str, + magic_enum::case_insensitive) + .value_or(PotType::UNKNOWN); + + if (ep.potential == PotType::UNKNOWN) { + spdlog::error("Unknown potential type '{}'", pot_str); + continue; + } + + size_t second_colon = rest.find(':'); + if (second_colon != std::string::npos) { + // "host:port" format + ep.host = rest.substr(0, second_colon); + ep.port = static_cast( + std::stoi(rest.substr(second_colon + 1))); + } else { + // "port" only + ep.host = "localhost"; + ep.port = static_cast(std::stoi(rest)); + } + + spdlog::info("Parsed endpoint: {} on {}:{}", + std::string(magic_enum::enum_name(ep.potential)), ep.host, + ep.port); + endpoints.push_back(ep); + } + + return endpoints; +} diff --git a/client/ServeMode.h b/client/ServeMode.h new file mode 100644 index 000000000..aa386735d --- /dev/null +++ b/client/ServeMode.h @@ -0,0 +1,109 @@ +/* +** This file is part of eOn. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** Copyright (c) 2010--present, eOn Development Team +** All rights reserved. +** +** Repo: +** https://github.com/TheochemUI/eOn +*/ +#pragma once + +#include "Parameters.h" +#include +#include +#include + +/** + * @brief Configuration for a single serve endpoint. + * + * Maps a potential type to a host:port pair. Multiple endpoints can be + * served concurrently, each in its own thread with its own potential instance. + */ +struct ServeEndpoint { + PotType potential; + std::string host; + uint16_t port; +}; + +/** + * @brief Start a single rgpot-compatible Cap'n Proto RPC server. + * + * Wraps eOn's Potential::force() as an rgpot PotentialBase and serves it + * over Cap'n Proto RPC. Blocks until the server is killed. + * + * @param params The eOn parameters (potential_options.potential must be set). + * @param host The hostname to listen on (e.g., "localhost" or "*"). + * @param port The TCP port to listen on. + */ +void serveMode(const Parameters ¶ms, const std::string &host, + uint16_t port); + +/** + * @brief Serve multiple potentials concurrently on different ports. + * + * Each endpoint gets its own thread, its own potential instance, and its own + * Cap'n Proto event loop. All threads block until SIGINT/SIGTERM. + * + * @param endpoints List of {potential, host, port} configurations. + * @param params Base eOn parameters (potential type is overridden per endpoint). + */ +void serveMultiple(const std::vector &endpoints, + const Parameters ¶ms); + +/** + * @brief Serve N replicas of the same potential across sequential ports. + * + * Starts `replicas` threads, each serving the same potential type on + * ports base_port, base_port+1, ..., base_port+replicas-1. + * + * @param params The eOn parameters (potential_options.potential must be set). + * @param host The hostname to listen on. + * @param base_port The first port; replicas use base_port+0 .. base_port+N-1. + * @param replicas Number of concurrent server instances. + */ +void serveReplicated(const Parameters ¶ms, const std::string &host, + uint16_t base_port, size_t replicas); + +/** + * @brief Start a gateway server backed by a pool of potential instances. + * + * Creates `pool_size` instances of the configured potential and serves them + * behind a single gateway port. Incoming requests are dispatched round-robin + * across the pool. This gives clients a single endpoint while spreading load. + * + * @param params The eOn parameters (potential_options.potential must be set). + * @param host The hostname to listen on. + * @param port The gateway port. + * @param pool_size Number of potential instances in the pool. + */ +void serveGateway(const Parameters ¶ms, const std::string &host, + uint16_t port, size_t pool_size); + +/** + * @brief Start serve mode from config-file parameters. + * + * Reads serve_options from params and dispatches to the appropriate mode: + * - If endpoints is set, uses multi-model serve (serveMultiple). + * - If gateway_port > 0, uses gateway mode (serveGateway). + * - Otherwise, uses replicated mode (serveReplicated). + * + * @param params The eOn parameters with serve_options populated. + */ +void serveFromConfig(const Parameters ¶ms); + +/** + * @brief Parse a serve configuration string into endpoints. + * + * Accepts comma-separated entries of the form "potential:port" or + * "potential:host:port". Examples: + * "lj:12345" + * "metatomic:12345,lj:12346" + * "metatomic:0.0.0.0:12345" + * + * @param spec The comma-separated endpoint specification. + * @return A vector of ServeEndpoint structs. + */ +std::vector parseServeSpec(const std::string &spec); diff --git a/client/ServeRpcServer.cpp b/client/ServeRpcServer.cpp new file mode 100644 index 000000000..b4eebc876 --- /dev/null +++ b/client/ServeRpcServer.cpp @@ -0,0 +1,173 @@ +/* +** This file is part of eOn. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** Copyright (c) 2010--present, eOn Development Team +** All rights reserved. +** +** Repo: +** https://github.com/TheochemUI/eOn +*/ + +/** + * @file ServeRpcServer.cpp + * @brief Cap'n Proto RPC server for rgpot PotentialBase instances. + * + * This translation unit does NOT include eOn's Potential.h to avoid naming + * collision with the capnp-generated `Potential` interface class. + */ + +#include "ServeRpcServer.h" + +#include +#include +#include +#include +#include + +#include "rgpot/types/AtomMatrix.hpp" +#include "rgpot/types/adapters/capnp/capnp_adapter.hpp" + +// Cap'n Proto generated header (from Potentials.capnp). +// This defines `class Potential` -- which collides with eOn's Potential class, +// hence the separate translation unit. +#include "Potentials.capnp.h" + +namespace { + +/** + * @class GenericPotImpl + * @brief Cap'n Proto RPC server implementation wrapping a PotentialBase. + * + * Same pattern as rgpot's potserv -- receives ForceInput over RPC, dispatches + * to the polymorphic PotentialBase, returns PotentialResult. + */ +class GenericPotImpl final : public Potential::Server { +public: + explicit GenericPotImpl(std::unique_ptr pot) + : m_potential(std::move(pot)) {} + + kj::Promise calculate(CalculateContext context) override { + auto fip = context.getParams().getFip(); + const size_t numAtoms = fip.getPos().size() / 3; + + KJ_REQUIRE(fip.getAtmnrs().size() == numAtoms, "AtomNumbers size mismatch"); + + auto nativePositions = + rgpot::types::adapt::capnp::convertPositionsFromCapnp(fip.getPos(), + numAtoms); + auto nativeAtomTypes = + rgpot::types::adapt::capnp::convertAtomNumbersFromCapnp( + fip.getAtmnrs()); + auto nativeBoxMatrix = + rgpot::types::adapt::capnp::convertBoxMatrixFromCapnp(fip.getBox()); + + auto [energy, forces] = + (*m_potential)(nativePositions, nativeAtomTypes, nativeBoxMatrix); + + auto result = context.getResults(); + auto pres = result.initResult(); + pres.setEnergy(energy); + + auto forcesList = pres.initForces(numAtoms * 3); + rgpot::types::adapt::capnp::populateForcesToCapnp(forcesList, forces); + + return kj::READY_NOW; + } + +private: + std::unique_ptr m_potential; +}; + +} // anonymous namespace + +void startRpcServer(std::unique_ptr pot, + const std::string &host, uint16_t port) { + spdlog::info("Starting Cap'n Proto RPC server on {}:{}", host, port); + + capnp::EzRpcServer server(kj::heap(std::move(pot)), host, + port); + + auto &waitScope = server.getWaitScope(); + spdlog::info("Server ready on port {}. Ctrl+C to stop.", port); + kj::NEVER_DONE.wait(waitScope); +} + +// --------------------------------------------------------------------------- +// Pooled (round-robin gateway) server +// --------------------------------------------------------------------------- + +namespace { + +/** + * @class PooledPotImpl + * @brief Cap'n Proto RPC server that dispatches across a pool of potentials. + * + * Incoming calculate() requests are assigned round-robin to the pool members. + * Each pool member is guarded by its own mutex so concurrent RPC calls are + * safe even though individual PotentialBase instances are not thread-safe. + */ +class PooledPotImpl final : public Potential::Server { +public: + explicit PooledPotImpl( + std::vector> pool) + : m_pool(std::move(pool)), m_mutexes(m_pool.size()), + m_next(0) {} + + kj::Promise calculate(CalculateContext context) override { + // Round-robin selection + size_t idx = + m_next.fetch_add(1, std::memory_order_relaxed) % m_pool.size(); + + auto fip = context.getParams().getFip(); + const size_t numAtoms = fip.getPos().size() / 3; + + KJ_REQUIRE(fip.getAtmnrs().size() == numAtoms, + "AtomNumbers size mismatch"); + + auto nativePositions = + rgpot::types::adapt::capnp::convertPositionsFromCapnp(fip.getPos(), + numAtoms); + auto nativeAtomTypes = + rgpot::types::adapt::capnp::convertAtomNumbersFromCapnp( + fip.getAtmnrs()); + auto nativeBoxMatrix = + rgpot::types::adapt::capnp::convertBoxMatrixFromCapnp(fip.getBox()); + + // Lock the selected pool member for the duration of the force call + std::lock_guard lock(m_mutexes[idx]); + auto [energy, forces] = + (*m_pool[idx])(nativePositions, nativeAtomTypes, nativeBoxMatrix); + + auto result = context.getResults(); + auto pres = result.initResult(); + pres.setEnergy(energy); + + auto forcesList = pres.initForces(numAtoms * 3); + rgpot::types::adapt::capnp::populateForcesToCapnp(forcesList, forces); + + return kj::READY_NOW; + } + +private: + std::vector> m_pool; + std::vector m_mutexes; + std::atomic m_next; +}; + +} // anonymous namespace + +void startPooledRpcServer( + std::vector> pool, + const std::string &host, uint16_t port) { + spdlog::info("Starting pooled RPC gateway on {}:{} with {} instances", host, + port, pool.size()); + + capnp::EzRpcServer server( + kj::heap(std::move(pool)), host, port); + + auto &waitScope = server.getWaitScope(); + spdlog::info("Gateway ready on port {}. Ctrl+C to stop.", port); + kj::NEVER_DONE.wait(waitScope); +} diff --git a/client/ServeRpcServer.h b/client/ServeRpcServer.h new file mode 100644 index 000000000..67e6accc1 --- /dev/null +++ b/client/ServeRpcServer.h @@ -0,0 +1,50 @@ +/* +** This file is part of eOn. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** Copyright (c) 2010--present, eOn Development Team +** All rights reserved. +** +** Repo: +** https://github.com/TheochemUI/eOn +*/ +#pragma once + +#include "rgpot/Potential.hpp" +#include +#include +#include +#include + +/** + * @brief Start a blocking Cap'n Proto RPC server for a given PotentialBase. + * + * This is an internal function used by serveMode(). It sets up the Cap'n Proto + * event loop and blocks until the process is killed. + * + * Defined in a separate translation unit to avoid naming collision between + * eOn's `class Potential` and the capnp-generated `Potential` interface. + * + * @param pot Ownership of the rgpot PotentialBase to serve. + * @param host The hostname to listen on. + * @param port The TCP port to listen on. + */ +void startRpcServer(std::unique_ptr pot, + const std::string &host, uint16_t port); + +/** + * @brief Start a blocking Cap'n Proto RPC server backed by a pool of + * PotentialBase instances dispatched round-robin. + * + * Creates a single gateway endpoint. Incoming RPC requests are dispatched + * to the next available potential instance in a round-robin fashion. This + * gives clients a single address while spreading computational load. + * + * @param pool Vector of PotentialBase instances (ownership transferred). + * @param host The hostname to listen on. + * @param port The TCP port to listen on. + */ +void startPooledRpcServer( + std::vector> pool, + const std::string &host, uint16_t port); diff --git a/client/gtests/ServeSpecParseTest.cpp b/client/gtests/ServeSpecParseTest.cpp new file mode 100644 index 000000000..fa57fb865 --- /dev/null +++ b/client/gtests/ServeSpecParseTest.cpp @@ -0,0 +1,87 @@ +/* +** This file is part of eOn. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** Copyright (c) 2010--present, eOn Development Team +** All rights reserved. +** +** Repo: +** https://github.com/TheochemUI/eOn +*/ +#include "catch2/catch_amalgamated.hpp" +#include "ServeMode.h" + +TEST_CASE("parseServeSpec single endpoint", "[serve]") { + auto eps = parseServeSpec("lj:12345"); + REQUIRE(eps.size() == 1); + CHECK(eps[0].potential == PotType::LJ); + CHECK(eps[0].host == "localhost"); + CHECK(eps[0].port == 12345); +} + +TEST_CASE("parseServeSpec multiple endpoints", "[serve]") { + auto eps = parseServeSpec("lj:12345,eam_al:12346"); + REQUIRE(eps.size() == 2); + CHECK(eps[0].potential == PotType::LJ); + CHECK(eps[0].port == 12345); + CHECK(eps[1].potential == PotType::EAM_AL); + CHECK(eps[1].port == 12346); +} + +TEST_CASE("parseServeSpec with host", "[serve]") { + auto eps = parseServeSpec("lj:0.0.0.0:9999"); + REQUIRE(eps.size() == 1); + CHECK(eps[0].potential == PotType::LJ); + CHECK(eps[0].host == "0.0.0.0"); + CHECK(eps[0].port == 9999); +} + +TEST_CASE("parseServeSpec mixed format", "[serve]") { + auto eps = parseServeSpec("lj:12345, eam_al:0.0.0.0:12346"); + REQUIRE(eps.size() == 2); + CHECK(eps[0].potential == PotType::LJ); + CHECK(eps[0].host == "localhost"); + CHECK(eps[0].port == 12345); + CHECK(eps[1].potential == PotType::EAM_AL); + CHECK(eps[1].host == "0.0.0.0"); + CHECK(eps[1].port == 12346); +} + +TEST_CASE("parseServeSpec unknown potential is skipped", "[serve]") { + auto eps = parseServeSpec("nonexistent:12345"); + CHECK(eps.empty()); +} + +TEST_CASE("parseServeSpec empty spec", "[serve]") { + auto eps = parseServeSpec(""); + CHECK(eps.empty()); +} + +TEST_CASE("parseServeSpec whitespace handling", "[serve]") { + auto eps = parseServeSpec(" lj : 12345 , eam_al : 12346 "); + // "lj " will be trimmed, ": 12345" -- the port parsing needs the colon + // The actual parsing trims the token but the colon position is found first. + // " lj : 12345 " -> trimmed -> "lj : 12345" + // first_colon at 2, pot_str="lj", rest=" 12345" + // Since port is " 12345", stoi skips leading whitespace. + REQUIRE(eps.size() == 2); + CHECK(eps[0].potential == PotType::LJ); + CHECK(eps[0].port == 12345); +} + +TEST_CASE("parseServeSpec case insensitive", "[serve]") { + auto eps = parseServeSpec("LJ:12345"); + REQUIRE(eps.size() == 1); + CHECK(eps[0].potential == PotType::LJ); +} + +TEST_CASE("ServeEndpoint struct members", "[serve]") { + ServeEndpoint ep; + ep.potential = PotType::LJ; + ep.host = "localhost"; + ep.port = 12345; + CHECK(ep.potential == PotType::LJ); + CHECK(ep.host == "localhost"); + CHECK(ep.port == 12345); +} diff --git a/client/meson.build b/client/meson.build index 7add45443..65e444034 100644 --- a/client/meson.build +++ b/client/meson.build @@ -561,6 +561,26 @@ if get_option('with_metatomic') _args += ['-DWITH_METATOMIC'] endif +if get_option('with_serve') + # rgpot-compatible RPC serve mode: wraps any eOn potential as an rgpot + # PotentialBase and serves it over Cap'n Proto RPC. + serve_capnp_dep = dependency('capnp-rpc', required: true) + rgpot_serve_opts = { + 'with_rpc': true, + 'with_eigen': true, + 'pure_lib': true, + 'with_rpc_client_only': false, + 'with_tests': false, + 'with_examples': false, + } + rgpot_proj = subproject('rgpot', default_options: rgpot_serve_opts) + rgpot_serve_dep = rgpot_proj.get_variable('rgpot_dep') + ptlrpc_dep = rgpot_proj.get_variable('ptlrpc_dep') + _args += ['-DWITH_SERVE_MODE'] + eonclient_sources += ['ServeMode.cpp', 'ServeRpcServer.cpp'] + _deps += [serve_capnp_dep, rgpot_serve_dep, ptlrpc_dep] +endif + _linkto += potentials # --------------------- Library @@ -649,6 +669,9 @@ if get_option('with_tests') test_array += [['test_xtb', 'XTBTest.cpp', 'sulfolene']] test_array += [['test_cineb_xtb', 'CINEBXTBTest.cpp', 'cineb_xtb']] endif + if get_option('with_serve') + test_array += [['test_serve_spec', 'ServeSpecParseTest.cpp', '']] + endif foreach test : test_array test( test.get(0), diff --git a/docs/source/user_guide/index.md b/docs/source/user_guide/index.md index 0749d8e55..531e6463a 100644 --- a/docs/source/user_guide/index.md +++ b/docs/source/user_guide/index.md @@ -136,6 +136,7 @@ described in the subsequent sections. :caption: External linkage kdb +serve_mode ``` diff --git a/docs/source/user_guide/serve_mode.md b/docs/source/user_guide/serve_mode.md new file mode 100644 index 000000000..c2cdeb48a --- /dev/null +++ b/docs/source/user_guide/serve_mode.md @@ -0,0 +1,227 @@ +--- +myst: + html_meta: + "description": "Learn how to use eonclient --serve to expose any eOn potential over RPC for integration with external tools like ChemGP." + "keywords": "eOn serve mode, RPC server, rgpot, Cap'n Proto, ChemGP, potential serving" +--- + +# Serve Mode + +```{versionadded} 2.2 +``` + +Serve mode wraps any eOn potential as an [rgpot](https://github.com/OmniPotentRPC/rgpot)-compatible +server, exposing it over Cap'n Proto RPC. This allows external tools -- such as +Julia-based optimization frameworks (e.g., [ChemGP](https://github.com/HaoZeke/ChemGP)) +-- to evaluate energies and forces without embedding C++ code directly. + +## Compilation + +Serve mode requires the `with_serve` build option and a Cap'n Proto installation: + +```{code-block} bash +meson setup builddir -Dwith_serve=true +meson compile -C builddir +``` + +If you also need Metatomic (ML) potentials: + +```{code-block} bash +meson setup builddir \ + -Dwith_serve=true \ + -Dwith_metatomic=true \ + -Dpip_metatomic=true \ + -Dtorch_version=2.9 +``` + +## Single-Potential Serving + +The simplest usage serves one potential on a single port: + +```{code-block} bash +eonclient -p lj --serve-port 12345 +``` + +This starts a blocking RPC server on `localhost:12345` serving the Lennard-Jones +potential. The server runs until interrupted with `Ctrl+C`. + +To bind to all interfaces: + +```{code-block} bash +eonclient -p lj --serve-host 0.0.0.0 --serve-port 12345 +``` + +## Replicated Serving + +To start multiple copies of the same potential on sequential ports: + +```{code-block} bash +eonclient -p lj --serve-port 12345 --replicas 4 +``` + +This starts 4 independent servers on ports 12345--12348, each with its own +potential instance and Cap'n Proto event loop. Useful when clients can +load-balance across known ports. + +## Gateway Mode + +Gateway mode exposes a single port backed by a pool of potential instances. +Incoming requests are dispatched round-robin across the pool, so clients only +need to know one address: + +```{code-block} bash +eonclient -p lj --serve-port 12345 --replicas 6 --gateway +``` + +This creates 6 LJ potential instances and serves them all behind port 12345. +Each incoming RPC call is routed to the next available instance. This is the +recommended mode for high-throughput use cases where clients should not need to +track multiple ports. + +## Multi-Model Serving + +The `--serve` flag accepts a comma-separated specification of +`potential:port` or `potential:host:port` pairs, each served concurrently +in its own thread: + +```{code-block} bash +eonclient --serve "lj:12345,eam_al:12346" +``` + +With explicit hosts: + +```{code-block} bash +eonclient --serve "lj:0.0.0.0:12345,eam_al:0.0.0.0:12346" +``` + +## Configuration Files + +Potentials that require parameters (Metatomic, XTB, etc.) can be configured +via the `--config` flag, which loads an INI-format config file: + +```{code-block} bash +eonclient --serve "metatomic:12345" --config model.ini +``` + +The config file uses the same INI format as eOn's standard `config.ini`. For +example, a Metatomic model: + +```{code-block} ini +[Metatomic] +model_path = /path/to/model.pt +device = cuda +length_unit = angstrom +``` + +Or for XTB: + +```{code-block} ini +[XTBPot] +paramset = GFN2xTB +accuracy = 1.0 +``` + +### Config-Driven Serve + +The `[Serve]` section allows fully config-driven serving without CLI flags +beyond `--config`: + +```{code-block} ini +[Potential] +potential = lj + +[Serve] +host = localhost +port = 12345 +replicas = 4 +gateway_port = 0 +``` + +```{code-block} bash +eonclient --config serve.ini +``` + +The dispatch logic: + +1. If `endpoints` is set, uses multi-model mode (`serveMultiple`). +2. If `gateway_port > 0`, uses gateway mode with `replicas` pool instances. +3. Otherwise, uses replicated mode on sequential ports starting at `port`. + +Example with gateway: + +```{code-block} ini +[Potential] +potential = metatomic + +[Metatomic] +model_path = /path/to/model.pt +device = cuda + +[Serve] +host = 0.0.0.0 +gateway_port = 12345 +replicas = 6 +``` + +Example with multi-model endpoints: + +```{code-block} ini +[Serve] +endpoints = lj:12345,eam_al:12346,metatomic:0.0.0.0:12347 + +[Metatomic] +model_path = /path/to/model.pt +``` + +### Serve Section Options + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| `host` | string | `localhost` | Hostname to bind servers to | +| `port` | int | `12345` | Port for single/replicated mode | +| `replicas` | int | `1` | Number of server instances (or gateway pool size) | +| `gateway_port` | int | `0` | Gateway port (0 = disabled; when > 0, pool mode) | +| `endpoints` | string | `""` | Multi-model spec (overrides other options) | + +## Protocol + +The RPC protocol is defined by rgpot's `Potentials.capnp` schema. Each request +sends: + +- **positions**: flat array `[x1, y1, z1, x2, y2, z2, ...]` (Angstroms) +- **atmnrs**: atomic numbers `[Z1, Z2, ...]` +- **box**: 3x3 cell matrix (row-major flat array) + +Each response returns: + +- **energy**: total potential energy (eV) +- **forces**: flat array matching positions layout (eV/Angstrom) + +## Integration with ChemGP + +ChemGP connects to the serve mode via its `RpcPotential` oracle: + +```{code-block} julia +using ChemGP + +# Connect to a running eonclient --serve instance +pot = RpcPotential("localhost", 12345, atmnrs, box) +E, F = ChemGP.calculate(pot, positions) + +# Use as a GP optimization oracle +oracle = make_rpc_oracle(pot, n_atoms) +``` + +See the [ChemGP RPC tutorial](https://github.com/HaoZeke/ChemGP) for details. + +## Command Reference + +| Flag | Description | +|------|-------------| +| `--serve ` | Multi-model serve spec: `pot:port` or `pot:host:port`, comma-separated | +| `--serve-host ` | Host for single-potential mode (default: `localhost`) | +| `--serve-port ` | Port for single-potential mode with `-p` (default: `12345`) | +| `--replicas ` | Number of server instances or gateway pool size (default: `1`) | +| `--gateway` | Enable gateway mode (single port, round-robin pool) | +| `--config ` | INI config file for potential and serve parameters | +| `-p ` | Potential type (used with `--serve-port`) | diff --git a/eon/config.yaml b/eon/config.yaml index 1adbd03e2..8e4dcf7a9 100644 --- a/eon/config.yaml +++ b/eon/config.yaml @@ -1779,3 +1779,27 @@ LBFGS: lbfgs_auto_scale: kind: boolean default: True + +################################################################################ + +Serve: + options: + host: + kind: string + default: "localhost" + + port: + kind: int + default: 12345 + + replicas: + kind: int + default: 1 + + gateway_port: + kind: int + default: 0 + + endpoints: + kind: string + default: "" diff --git a/eon/schema.py b/eon/schema.py index eb1f15c9e..963ae37e4 100644 --- a/eon/schema.py +++ b/eon/schema.py @@ -1350,6 +1350,31 @@ class RefineConfig(BaseModel): ) +class ServeConfig(BaseModel): + model_config = ConfigDict(use_attribute_docstrings=True) + + host: str = Field( + default="localhost", + description="Hostname to bind serve mode RPC servers to.", + ) + port: int = Field( + default=12345, + description="TCP port for single-potential or replicated serve mode.", + ) + replicas: int = Field( + default=1, + description="Number of replicated server instances. In gateway mode, this is the pool size.", + ) + gateway_port: int = Field( + default=0, + description="If > 0, start a single gateway on this port backed by a pool of 'replicas' potential instances dispatched round-robin. Set to 0 to disable gateway mode.", + ) + endpoints: str = Field( + default="", + description="Multi-model serve spec: comma-separated 'potential:port' or 'potential:host:port' entries. When set, overrides single-potential serve.", + ) + + class DebugConfig(BaseModel): model_config = ConfigDict(use_attribute_docstrings=True) @@ -1866,6 +1891,7 @@ class Config(BaseModel): distributed_replica: DistributedReplicaConfig gprdimer: GPRDimerConfig debug: DebugConfig + serve: ServeConfig @validator("communicator") def check_communicator(cls, v, values): diff --git a/meson_options.txt b/meson_options.txt index a2e2332dc..5efc86085 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -20,6 +20,7 @@ option('with_qsc', type : 'boolean', value : false) option('use_mkl', type: 'boolean', value: false, description: 'Enable Intel MKL support') option('gprd_linalg_backend', type: 'combo', choices: ['eigen', 'cusolver', 'kokkos', 'stdpar'], value: 'eigen', description: 'Linear algebra backend for GPR-dimer hot-path operations') option('with_metatomic', type : 'boolean', value : false) +option('with_serve', type : 'boolean', value : false, description : 'Enable rgpot-compatible RPC serve mode (eonclient --serve)') option('torch_path', type : 'string', value : '', description: 'path to Torch, either provide this or torch_version for pip') option('torch_version', type : 'string', value : '2.9', description: 'path to Torch') option('pip_metatomic', type : 'boolean', value : false, description: 'use pip versions of torch, metatensor, torch, and metatomic') diff --git a/pixi.toml b/pixi.toml index fb3501176..06c072e6f 100644 --- a/pixi.toml +++ b/pixi.toml @@ -55,6 +55,7 @@ ams = {features = ["ams"]} nwchem = {features = ["nwchem"]} docs = {features = ["docs"]} rel = {features = ["metatomic", "release"]} +serve = {features = ["serve"]} [feature.metatomic] # vesin torch has a wheel issue with macos x86_64 @@ -115,6 +116,12 @@ python -m http.server -d html [feature.xtb.dependencies] xtb = "*" +[feature.serve] +platforms = ["linux-64", "osx-64", "osx-arm64"] + +[feature.serve.dependencies] +capnproto = ">=1.0,<2" + [feature.metatomic.tasks.mkeon] args = ["buildtype"] depends-on = [ diff --git a/subprojects/rgpot.wrap b/subprojects/rgpot.wrap new file mode 100644 index 000000000..c11b3cfca --- /dev/null +++ b/subprojects/rgpot.wrap @@ -0,0 +1,5 @@ +[wrap-git] +directory=rgpot +url=https://github.com/OmniPotentRPC/rgpot.git +revision = head +depth = 1 From c12b0da28a5991b9f01723d84c44b411b600a56a Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 08:26:16 +0100 Subject: [PATCH 10/15] fix: correct serve mode build and parseServeSpec whitespace handling - Set pure_lib: false for rgpot subproject (serve mode needs full lib) - Move serve sources to eonclib_sources (fixes test linking) - Trim whitespace after colon-split in parseServeSpec (fixes "lj : 12345" parsing where trailing space broke enum_cast) --- client/ServeMode.cpp | 14 ++++++++++++-- client/meson.build | 4 ++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/client/ServeMode.cpp b/client/ServeMode.cpp index 74bacd54d..adc00c6fa 100644 --- a/client/ServeMode.cpp +++ b/client/ServeMode.cpp @@ -300,6 +300,12 @@ std::vector parseServeSpec(const std::string &spec) { std::string pot_str = token.substr(0, first_colon); std::string rest = token.substr(first_colon + 1); + // Trim parts after colon split + pot_str.erase(0, pot_str.find_first_not_of(" \t")); + pot_str.erase(pot_str.find_last_not_of(" \t") + 1); + rest.erase(0, rest.find_first_not_of(" \t")); + rest.erase(rest.find_last_not_of(" \t") + 1); + // Lowercase the potential name std::transform(pot_str.begin(), pot_str.end(), pot_str.begin(), ::tolower); @@ -317,8 +323,12 @@ std::vector parseServeSpec(const std::string &spec) { if (second_colon != std::string::npos) { // "host:port" format ep.host = rest.substr(0, second_colon); - ep.port = static_cast( - std::stoi(rest.substr(second_colon + 1))); + ep.host.erase(0, ep.host.find_first_not_of(" \t")); + ep.host.erase(ep.host.find_last_not_of(" \t") + 1); + std::string port_str = rest.substr(second_colon + 1); + port_str.erase(0, port_str.find_first_not_of(" \t")); + port_str.erase(port_str.find_last_not_of(" \t") + 1); + ep.port = static_cast(std::stoi(port_str)); } else { // "port" only ep.host = "localhost"; diff --git a/client/meson.build b/client/meson.build index 65e444034..ba10c3aa9 100644 --- a/client/meson.build +++ b/client/meson.build @@ -568,7 +568,7 @@ if get_option('with_serve') rgpot_serve_opts = { 'with_rpc': true, 'with_eigen': true, - 'pure_lib': true, + 'pure_lib': false, 'with_rpc_client_only': false, 'with_tests': false, 'with_examples': false, @@ -577,7 +577,7 @@ if get_option('with_serve') rgpot_serve_dep = rgpot_proj.get_variable('rgpot_dep') ptlrpc_dep = rgpot_proj.get_variable('ptlrpc_dep') _args += ['-DWITH_SERVE_MODE'] - eonclient_sources += ['ServeMode.cpp', 'ServeRpcServer.cpp'] + eonclib_sources += ['ServeMode.cpp', 'ServeRpcServer.cpp'] _deps += [serve_capnp_dep, rgpot_serve_dep, ptlrpc_dep] endif From 0cfe695bd6b6129506f36f094e6361efaa152c6d Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 08:44:23 +0100 Subject: [PATCH 11/15] chore(pixi): update --- pixi.lock | 2538 ++++++++++++++++++++++++++++++++++++++++++++++++++++- pixi.toml | 1 + 2 files changed, 2515 insertions(+), 24 deletions(-) diff --git a/pixi.lock b/pixi.lock index 56b15dc20..ac16bcad8 100644 --- a/pixi.lock +++ b/pixi.lock @@ -2403,6 +2403,360 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/e3/556a107f6496b3f7f99c60eadf037cde6b37cf6b033f643c38617e95b8df/vesin-0.4.2-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/35/91/c45cc56afbf545989c57c1ab54bf9d6a96d23a2f96f4e7d5a831a8bc7c93/vesin_torch-0.4.2-py3-none-win_amd64.whl + dev-serve-mta: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + - https://download.pytorch.org/whl/cpu + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils-2.45.1-default_h4852527_101.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_linux-64-2.45.1-default_h4852527_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/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/capnproto-1.3.0-h23814c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/compilers-1.11.0-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-14.3.0-he8ccf15_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.11.0-hfcd1e18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-hff5e90c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.11.0-h9bea470_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hbdf3cc3_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran-14.3.0-h76987e4_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-14.3.0-h1a219da_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-14.3.0-hfa02b96_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-14.3.0-h76987e4_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he467f4b_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_106.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/highfive-2.10.1-he6560a2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyh53cf698_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.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/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_hc00574d_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h8e06fc2_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-hcf29cc6_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/libev-4.33-hd590300_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/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_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/libgfortran-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h8876d29_netlib.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/libnghttp2-1.67.0-had1ee68_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/libopenblas-0.3.31-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_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/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_118.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/libuv-1.51.0-hb03c661_1.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/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.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/ninja-1.13.2-h171cf75_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py312h33ff503_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.31-pthreads_h6ec200e_0.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/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h4bc722e_1009.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pkgconf-2.5.1-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.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/pyyaml-6.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.14.0-he64ecbb_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/spdlog-1.17.0-hab81395_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.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/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_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/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/9b/9b55b4d4855743de61ba91566d03b2560285ed8fc0387b9cf914795d4abf/ase-3.27.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/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - 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/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9c/0f/5d0c71a1aefeb08efff26272149e07ab922b64f46c63363756224bd6872e/filelock-3.24.3-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/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/92/cf3ab0b652b082e66876d08da57fcc6fa2f0e6c70dfbbafbd470bb73eb47/hf_xet-1.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/ae/2f6d96b4e6c5478d87d606a1934b5d436c4a2bce6bb7c6fdece891c128e3/huggingface_hub-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-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/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/f9/23/6b4c733aa2900cfc7b9856a649d5cfd173914bfa73b6069a63a115506d9a/metatensor_core-0.1.19-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0c/9c/f455b26da18906a8bdcd4fd2ddd3a916bf3e7c1e6675f4478da35ce41949/metatensor_learn-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/e6/60691e210a43b738249ee9abb3f2343dece72d0b821fda3d4023e061d26a/metatensor_operations-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/c7/844739309a227216e3b20049ec76cc0c0ca769c56d46f2434488316f5bbd/metatensor_torch-0.8.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ea/29/052418062fe9d97fada027b4ed451e3c378a149f58202f5f0ab3bec58f47/metatomic_torch-0.1.8-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/85/1607598424a7ee8bdd3dd6f7b47bbf79907c8b4ff57d6883da05ec6560dd/metatrain-2025.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.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/90/cc/bb6395c3f2b6bb739b1d3fc0e71f94e6a1c2e256df496237cbfd13cd74a6/python_hostlist-2.3.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d1/fe/66d73b76d378ba8cc2fe605920c0c75092e3a65ae746e1e767d9d020a75a/scipy-1.17.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.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/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl + - pypi: https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/24/5480c20380dfd18cf33d14784096dca45a24eae6102e91d49a718d3b6855/typer_slim-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f6/66/fe9c41fcf5fe73637997e632a488637d8283fe7bed327b147d26e4964a20/vesin-0.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ac/17/56cd86df5cedca93a7973546abd1ae2f0a1e202c17ca928b377477119332/vesin_torch-0.4.2-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.11.0-h61f9b84_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/capnproto-1.3.0-hb142b15_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1030.6.3-llvm19_1_hd01ab73_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_impl_osx-arm64-1030.6.3-llvm19_1_he8a363d_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1030.6.3-llvm19_1_h6d92914_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19-19.1.7-default_hf3020a7_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19.1.7-default_hf9bcbb7_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-19.1.7-default_hc11f16d_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-19.1.7-h75f8d18_31.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-19.1.7-default_hc995acf_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-19.1.7-default_hc11f16d_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-19.1.7-h75f8d18_31.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-19.1.7-h855ad52_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-19.1.7-he32a8d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.11.0-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.11.0-h88570a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h784d473_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.11.0-h81a4f41_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-14.3.0-h3ef1dbf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-14.3.0-h6d03799_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_osx-arm64-14.3.0-h3c33bd0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-nompi_had3affe_106.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/highfive-2.10.1-h92077ca_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyh53cf698_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/isl-0.26-imath32_h347afa1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.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/ld64-956.6-llvm19_1_he86490a_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-956.6-llvm19_1_ha2625f7_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-7_hc63b1ca_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-7_hd5b1ab5_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp19.1-19.1.7-default_hf3020a7_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-hd5a2499_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-h55c6f16_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-19.1.7-h6dc3340_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libcxx-headers-19.1.7-h707e725_2.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/libev-4.33-h93a5062_2.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/libgcc-15.2.0-hcbb3090_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-arm64-14.3.0-hc965647_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.86.4-he378b5c_0.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/liblapack-3.11.0-7_ha522803_netlib.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/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.67.0-hc438710_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.31-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsigtool-0.1.3-h98dc951_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/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.1-h5ef1a60_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.1-h8d039ee_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/llvm-openmp-21.1.8-h4a912ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19-19.1.7-h91fd4e7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19.1.7-h855ad52_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.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/ninja-1.13.2-h49c215f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py312he281c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openblas-0.3.31-openmp_hea878ba_0.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/noarch/parso-0.8.6-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/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkg-config-0.29.2-hde07d2e_1009.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkgconf-2.5.1-he530434_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.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/pyyaml-6.0.3-py312h04c11ed_1.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/rhash-1.4.6-h5505292_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sccache-0.14.0-h6fdd925_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-arm64-26.0-ha3f98da_7.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/sigtool-codesign-0.1.3-h98dc951_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1600.0.11.8-h997e182_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/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.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/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/9b/9b55b4d4855743de61ba91566d03b2560285ed8fc0387b9cf914795d4abf/ase-3.27.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/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - 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/9c/0f/5d0c71a1aefeb08efff26272149e07ab922b64f46c63363756224bd6872e/filelock-3.24.3-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/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/8c/c5becfa53234299bc2210ba314eaaae36c2875e0045809b82e40a9544f0c/hf_xet-1.2.0-cp37-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/ae/2f6d96b4e6c5478d87d606a1934b5d436c4a2bce6bb7c6fdece891c128e3/huggingface_hub-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-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/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/bb/ad/de1260b1360a2c41532f5022ad5946b05a6d581e4906b8262dc3cc11be47/metatensor_core-0.1.19-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0c/9c/f455b26da18906a8bdcd4fd2ddd3a916bf3e7c1e6675f4478da35ce41949/metatensor_learn-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/e6/60691e210a43b738249ee9abb3f2343dece72d0b821fda3d4023e061d26a/metatensor_operations-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/4d/74ba4841666518ed916d6637a4fd6dbc3f8272a4b2d724dbd0cdc26b4105/metatensor_torch-0.8.4-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/7a/4b/8e57c02768e8daf0b6833345e1b8a2472a73489b24d6157ed332cf224d67/metatomic_torch-0.1.8-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ce/85/1607598424a7ee8bdd3dd6f7b47bbf79907c8b4ff57d6883da05ec6560dd/metatrain-2025.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.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/90/cc/bb6395c3f2b6bb739b1d3fc0e71f94e6a1c2e256df496237cbfd13cd74a6/python_hostlist-2.3.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ed/1d/5057f812d4f6adc91a20a2d6f2ebcdb517fdbc87ae3acc5633c9b97c8ba5/scipy-1.17.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.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/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl + - pypi: https://download.pytorch.org/whl/cpu/torch-2.9.1-cp312-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/24/5480c20380dfd18cf33d14784096dca45a24eae6102e91d49a718d3b6855/typer_slim-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/1d/8a061603f318e965f50c39e46a56ed372a987b48c40011709f2a9219add0/vesin-0.4.2-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/de/3b/517af8e11dc8f321929669be69ad1d29dae757d656c6427613179865c3aa/vesin_torch-0.4.2-py3-none-macosx_11_0_arm64.whl dev-xtb: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -5105,14 +5459,348 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/e3/556a107f6496b3f7f99c60eadf037cde6b37cf6b033f643c38617e95b8df/vesin-0.4.2-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/35/91/c45cc56afbf545989c57c1ab54bf9d6a96d23a2f96f4e7d5a831a8bc7c93/vesin_torch-0.4.2-py3-none-win_amd64.whl -packages: -- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + serve: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + - https://download.pytorch.org/whl/cpu + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils-2.45.1-default_h4852527_101.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_linux-64-2.45.1-default_h4852527_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/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/capnproto-1.3.0-h23814c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/compilers-1.11.0-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-14.3.0-he8ccf15_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.11.0-hfcd1e18_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-hff5e90c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.11.0-h9bea470_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hbdf3cc3_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran-14.3.0-h76987e4_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-14.3.0-h1a219da_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-14.3.0-hfa02b96_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-14.3.0-h76987e4_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he467f4b_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_106.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/highfive-2.10.1-he6560a2_2.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/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_hc00574d_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h8e06fc2_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-hcf29cc6_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/libev-4.33-hd590300_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/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_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/libgfortran-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h8876d29_netlib.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/libnghttp2-1.67.0-had1ee68_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/libopenblas-0.3.31-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_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/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_118.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/libuv-1.51.0-hb03c661_1.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/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.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/ninja-1.13.2-h171cf75_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py312h33ff503_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.31-pthreads_h6ec200e_0.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/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h4bc722e_1009.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pkgconf-2.5.1-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.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/pyyaml-6.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.14.0-he64ecbb_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/spdlog-1.17.0-hab81395_1.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/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_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/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-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/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl + osx-64: + - conda: https://conda.anaconda.org/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-compiler-1.11.0-h7a00415_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/capnproto-1.3.0-h94e1571_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools-1030.6.3-llvm19_1_h67a6458_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_impl_osx-64-1030.6.3-llvm19_1_h7d82c7c_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_osx-64-1030.6.3-llvm19_1_h8f0d4bb_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-19-19.1.7-default_hd70426c_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-19.1.7-default_h1323312_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-19.1.7-default_ha1a018a_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-19.1.7-h8a78ed7_31.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-19.1.7-default_h9089c59_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-19.1.7-default_ha1a018a_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-19.1.7-h8a78ed7_31.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.3-h965d0ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt-19.1.7-he914875_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-64-19.1.7-h138dee1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/compilers-1.11.0-h694c41f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cxx-compiler-1.11.0-h307afc9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-h2fb4741_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/fmt-12.1.0-hda137b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/fortran-compiler-1.11.0-h9ab62e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran-14.3.0-hcc3c99d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran_impl_osx-64-14.3.0-h94fe04d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran_osx-64-14.3.0-h3223c34_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.6-nompi_hf563b80_106.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/highfive-2.10.1-h6ea3bb1_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/isl-0.26-imath32_h2e86a7b_101.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ld64-956.6-llvm19_1_hc3792c1_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ld64_osx-64-956.6-llvm19_1_hcae3351_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.5-he7c3a48_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-7_hfe11894_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.11.0-7_h282bb72_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp19.1-19.1.7-default_hd70426c_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9a2545f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-devel-19.1.7-h7c275be_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libcxx-headers-19.1.7-h707e725_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgcc-15.2.0-h08519bb_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-64-14.3.0-h660b60f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-7_h0b9d25f_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm19-19.1.7-h56e7563_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.31-openmp_h7314188_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsigtool-0.1.3-hc0f2934_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.1-hd57b93d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.1-h745d5cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-21.1.8-h472b3d1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-19-19.1.7-h879f4bc_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-19.1.7-hb0207f0_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/mpc-1.3.1-h9d8efa1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/mpfr-4.2.1-haed47dc_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ninja-1.13.2-hfc0b2d5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.2-py312hb34da66_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openblas-0.3.31-openmp_h30af337_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pkg-config-0.29.2-hf7e621a_1009.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pkgconf-2.5.1-h828b840_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.12-h74c2667_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-64/pyyaml-6.0.3-py312h51361c1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.6-h6e16a3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/sccache-0.14.0-h4728fb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-64-26.0-h62b880e_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/sigtool-codesign-0.1.3-hc0f2934_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/spdlog-1.17.0-h30f01e4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tapi-1600.0.11.8-h8d8e812_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-hd23fc13_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.11.0-h61f9b84_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/capnproto-1.3.0-hb142b15_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1030.6.3-llvm19_1_hd01ab73_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_impl_osx-arm64-1030.6.3-llvm19_1_he8a363d_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1030.6.3-llvm19_1_h6d92914_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19-19.1.7-default_hf3020a7_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19.1.7-default_hf9bcbb7_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-19.1.7-default_hc11f16d_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-19.1.7-h75f8d18_31.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-19.1.7-default_hc995acf_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-19.1.7-default_hc11f16d_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-19.1.7-h75f8d18_31.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-19.1.7-h855ad52_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-19.1.7-he32a8d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.11.0-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.11.0-h88570a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h784d473_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.11.0-h81a4f41_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-14.3.0-h3ef1dbf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-14.3.0-h6d03799_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_osx-arm64-14.3.0-h3c33bd0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-nompi_had3affe_106.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/highfive-2.10.1-h92077ca_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/isl-0.26-imath32_h347afa1_101.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/ld64-956.6-llvm19_1_he86490a_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-956.6-llvm19_1_ha2625f7_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-7_hc63b1ca_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-7_hd5b1ab5_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp19.1-19.1.7-default_hf3020a7_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-hd5a2499_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-h55c6f16_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-19.1.7-h6dc3340_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libcxx-headers-19.1.7-h707e725_2.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/libev-4.33-h93a5062_2.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/libgcc-15.2.0-hcbb3090_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-arm64-14.3.0-hc965647_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.86.4-he378b5c_0.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/liblapack-3.11.0-7_ha522803_netlib.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/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.67.0-hc438710_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.31-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsigtool-0.1.3-h98dc951_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/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.1-h5ef1a60_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.1-h8d039ee_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/llvm-openmp-21.1.8-h4a912ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19-19.1.7-h91fd4e7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19.1.7-h855ad52_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.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/ninja-1.13.2-h49c215f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py312he281c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openblas-0.3.31-openmp_hea878ba_0.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-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkg-config-0.29.2-hde07d2e_1009.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkgconf-2.5.1-he530434_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.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/pyyaml-6.0.3-py312h04c11ed_1.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/rhash-1.4.6-h5505292_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sccache-0.14.0-h6fdd925_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-arm64-26.0-ha3f98da_7.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/sigtool-codesign-0.1.3-h98dc951_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1600.0.11.8-h997e182_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/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.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/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-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/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 md5: d7c89558ba9fa0495403155b64376d81 license: None purls: [] size: 2562 timestamp: 1578324546067 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 + md5: a9f577daf3de00bca7c3c76c0ecbd1de + depends: + - __glibc >=2.17,<3.0.a0 + - libgomp >=7.5.0 + constrains: + - openmp_impl <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28948 + timestamp: 1770939786096 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 build_number: 16 sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 @@ -5313,6 +6001,16 @@ packages: purls: [] size: 35432 timestamp: 1766513140840 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils-2.45.1-default_h4852527_101.conda + sha256: 2851d34944b056d028543f0440fb631aeeff204151ea09589d8d9c13882395de + md5: 9902aeb08445c03fb31e01beeb173988 + depends: + - binutils_impl_linux-64 >=2.45.1,<2.45.2.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 35128 + timestamp: 1770267175160 - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45-default_hfdba357_104.conda sha256: 054a77ccab631071a803737ea8e5d04b5b18e57db5b0826a04495bd3fdf39a7c md5: a7a67bf132a4a2dea92a7cb498cdc5b1 @@ -5337,6 +6035,18 @@ packages: purls: [] size: 3719982 timestamp: 1766513109980 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda + sha256: 74341b26a2b9475dc14ba3cf12432fcd10a23af285101883e720216d81d44676 + md5: 83aa53cb3f5fc849851a84d777a60551 + depends: + - ld_impl_linux-64 2.45.1 default_hbd61a6d_101 + - 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-64/binutils_linux-64-2.45-default_h4852527_104.conda sha256: ed23fee4db69ad82320cca400fc77404c3874cd866606651a20bf743acd1a9b1 md5: e30e71d685e23cc1e5ac1c1990ba1f81 @@ -5357,6 +6067,16 @@ packages: purls: [] size: 36310 timestamp: 1766513143566 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_101.conda + sha256: 4826f97d33cbe54459970a1e84500dbe0cccf8326aaf370e707372ae20ec5a47 + md5: dec96579f9a7035a59492bf6ee613b53 + depends: + - binutils_impl_linux-64 2.45.1 default_hfdba357_101 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 36060 + timestamp: 1770267177798 - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda sha256: e7af5d1183b06a206192ff440e08db1c4e8b2ca1f8376ee45fb2f3a85d4ee45d md5: 2c2fae981fd2afd00812c92ac47d023d @@ -5470,6 +6190,17 @@ packages: purls: [] size: 260341 timestamp: 1757437258798 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 + md5: d2ffd7602c02f2b316fd921d39876885 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 260182 + timestamp: 1771350215188 - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_8.conda sha256: 8f50b58efb29c710f3cecf2027a8d7325ba769ab10c746eff75cea3ac050b10c md5: 97c4b3bd8a90722104798175a1bdddbf @@ -5480,6 +6211,16 @@ packages: purls: [] size: 132607 timestamp: 1757437730085 +- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + sha256: 9f242f13537ef1ce195f93f0cc162965d6cc79da578568d6d8e50f70dd025c42 + md5: 4173ac3b19ec0a4f400b4f782910368b + depends: + - __osx >=10.13 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 133427 + timestamp: 1771350680709 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda sha256: b456200636bd5fecb2bec63f7e0985ad2097cf1b83d60ce0b6968dffa6d02aa1 md5: 58fd217444c2a5701a44244faf518206 @@ -5490,6 +6231,16 @@ packages: purls: [] size: 125061 timestamp: 1757437486465 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df + md5: 620b85a3f45526a8bc4d23fd78fc22f0 + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 124834 + timestamp: 1771350416561 - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda sha256: d882712855624641f48aa9dc3f5feea2ed6b4e6004585d3616386a18186fe692 md5: 1077e9333c41ff0be8edd1a5ec0ddace @@ -5566,6 +6317,18 @@ packages: purls: [] size: 6667 timestamp: 1751115555092 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda + sha256: 8e7a40f16400d7839c82581410aa05c1f8324a693c9d50079f8c50dc9fb241f0 + md5: abd85120de1187b0d1ec305c2173c71b + depends: + - binutils + - gcc + - gcc_linux-64 14.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6693 + timestamp: 1753098721814 - conda: https://conda.anaconda.org/conda-forge/osx-64/c-compiler-1.10.0-h09a7c41_0.conda sha256: 6a3f6b72bf5ad154630f79bd600f6ccf0f5c6a4be5297e4831d63016f4220e62 md5: 7b7c12e4774b83c18612c78073d12adc @@ -5579,6 +6342,19 @@ packages: purls: [] size: 6773 timestamp: 1751115657381 +- conda: https://conda.anaconda.org/conda-forge/osx-64/c-compiler-1.11.0-h7a00415_0.conda + sha256: 2bd1cf3d26789b7e1d04e914ccd169bd618fceed68abf7b6a305266b88dcf861 + md5: 2b23ec416cef348192a5a17737ddee60 + depends: + - cctools >=949.0.1 + - clang_osx-64 19.* + - ld64 >=530 + - llvm-openmp + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6695 + timestamp: 1753098825695 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.10.0-hdf49b6b_0.conda sha256: efc71f2ae5901bea633c67468b3aa774b6bcf46c9433e1ab5d640e3faf1680b9 md5: 7ca1bdcc45db75f54ed7b3ac969ed888 @@ -5592,6 +6368,19 @@ packages: purls: [] size: 6758 timestamp: 1751115540465 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.11.0-h61f9b84_0.conda + sha256: b51bd1551cfdf41500f732b4bd1e4e70fb1e74557165804a648f32fa9c671eec + md5: 148516e0c9edf4e9331a4d53ae806a9b + depends: + - cctools >=949.0.1 + - clang_osx-arm64 19.* + - ld64 >=530 + - llvm-openmp + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6697 + timestamp: 1753098737760 - conda: https://conda.anaconda.org/conda-forge/win-64/c-compiler-1.11.0-h528c1b4_0.conda sha256: 55e04bd4af61500cb8cae064386be57d18fbfdf676655ff1c97c7e5d146c6e34 md5: 6d994ff9ab924ba11c2c07e93afbe485 @@ -5629,6 +6418,46 @@ packages: purls: [] size: 146519 timestamp: 1767500828366 +- conda: https://conda.anaconda.org/conda-forge/linux-64/capnproto-1.3.0-h23814c6_0.conda + sha256: 4857bd5f3557284c377a5e391a046910444ee88c78e1e7698d217eada02b2584 + md5: bf5d0d597a0d64e1c6204a7af1361704 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3734707 + timestamp: 1766168924557 +- conda: https://conda.anaconda.org/conda-forge/osx-64/capnproto-1.3.0-h94e1571_0.conda + sha256: 5b3206a29e0ea636eb5e8a104c8d87f5a837ce3a62e1306cb527173c56ddf512 + md5: 54a30dc9fc785402a42199315b207f82 + depends: + - __osx >=10.13 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2802457 + timestamp: 1766169230281 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/capnproto-1.3.0-hb142b15_0.conda + sha256: 7613d644745fb67dc03bc4667eaff23b9ef2ff80acf455d13f27fa78f45a5725 + md5: 3f82292f84075b57cbf27af1a61527f5 + depends: + - __osx >=11.0 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2903339 + timestamp: 1766169063213 - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools-1021.4-ha66f10e_0.conda sha256: 1af7ea0c54e37ca1587c2d4e9c3a5add8dfd9bc4ff929f70a4330328f0c145ac md5: 37619e89a65bb3688c67d82fd8645afc @@ -5641,6 +6470,18 @@ packages: purls: [] size: 21521 timestamp: 1752818999237 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cctools-1030.6.3-llvm19_1_h67a6458_4.conda + sha256: 0563fb193edde8002059e1a7fc32b23b5bd48389d9abdf5e49ff81e7490da722 + md5: 7b4852df7d4ed4e45bcb70c5d4b08cd0 + depends: + - cctools_impl_osx-64 1030.6.3 llvm19_1_h7d82c7c_4 + - ld64 956.6 llvm19_1_hc3792c1_4 + - libllvm19 >=19.1.7,<19.2.0a0 + license: APSL-2.0 + license_family: Other + purls: [] + size: 24262 + timestamp: 1768852850946 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1021.4-hb4fb6a3_0.conda sha256: 5492bfbb871086056daa5e7992f5845e317e09a882d1fe5fb94b3b2766462abc md5: 0db10a7dbc9494ca7a918b762722f41b @@ -5653,6 +6494,58 @@ packages: purls: [] size: 21511 timestamp: 1752819117398 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1030.6.3-llvm19_1_hd01ab73_4.conda + sha256: 4f408036b5175be0d2c7940250d00dae5ea7a71d194a1ffb35881fb9df6211fc + md5: caf7c8e48827c2ad0c402716159fe0a2 + depends: + - cctools_impl_osx-arm64 1030.6.3 llvm19_1_he8a363d_4 + - ld64 956.6 llvm19_1_he86490a_4 + - libllvm19 >=19.1.7,<19.2.0a0 + license: APSL-2.0 + license_family: Other + purls: [] + size: 24313 + timestamp: 1768852906882 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_impl_osx-64-1030.6.3-llvm19_1_h7d82c7c_4.conda + sha256: 43928e68f59a8e4135d20df702cf97073b07a162979a30258d93f6e44b1220db + md5: bb274e464cf9479e0a6da2cf2e33bc16 + depends: + - __osx >=10.13 + - ld64_osx-64 >=956.6,<956.7.0a0 + - libcxx + - libllvm19 >=19.1.7,<19.2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-tools 19.1.* + - sigtool-codesign + constrains: + - cctools 1030.6.3.* + - clang 19.1.* + - ld64 956.6.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 745672 + timestamp: 1768852809822 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_impl_osx-arm64-1030.6.3-llvm19_1_he8a363d_4.conda + sha256: c444442e0c01de92a75b58718a100f2e272649658d4f3dd915bbfc2316b25638 + md5: 76c651b923e048f3f3e0ecb22c966f70 + depends: + - __osx >=11.0 + - ld64_osx-arm64 >=956.6,<956.7.0a0 + - libcxx + - libllvm19 >=19.1.7,<19.2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-tools 19.1.* + - sigtool-codesign + constrains: + - ld64 956.6.* + - cctools 1030.6.3.* + - clang 19.1.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 749918 + timestamp: 1768852866532 - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_osx-64-1021.4-h508880d_0.conda sha256: 1fd96dc9abd1789d07e203ffac131edbbe773baeb8fc4038dcaf500f22c20c78 md5: 4813f891c9cf3901d3c9c091000c6569 @@ -5673,6 +6566,19 @@ packages: purls: [] size: 792335 timestamp: 1752818967832 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_osx-64-1030.6.3-llvm19_1_h8f0d4bb_4.conda + sha256: 258f7bde2b5f664f60130d0066f5cee96a308d946e95bacc82b44b76c776124a + md5: fdef8a054844f72a107dfd888331f4a7 + depends: + - cctools_impl_osx-64 1030.6.3 llvm19_1_h7d82c7c_4 + - ld64_osx-64 956.6 llvm19_1_hcae3351_4 + constrains: + - cctools 1030.6.3.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 23193 + timestamp: 1768852854819 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1021.4-h12580ec_0.conda sha256: 9754bae92bfeafb1c4d724161ea402101769b0239fddbcec1de5b1612dcbae87 md5: 8e0c8bd08a32fe607b6e504f8e0a00b5 @@ -5693,6 +6599,19 @@ packages: purls: [] size: 793113 timestamp: 1752819079152 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1030.6.3-llvm19_1_h6d92914_4.conda + sha256: 6b37ac10e22dd734cce14ce7d1ac6db07976bb71e38a10971c0693b9f17ad6c4 + md5: df5cd5c925df1412426e3db71d31363f + depends: + - cctools_impl_osx-arm64 1030.6.3 llvm19_1_he8a363d_4 + - ld64_osx-arm64 956.6 llvm19_1_ha2625f7_4 + constrains: + - cctools 1030.6.3.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 23211 + timestamp: 1768852915341 - pypi: https://download.pytorch.org/whl/certifi-2022.12.7-py3-none-any.whl name: certifi version: 2022.12.7 @@ -5797,6 +6716,17 @@ packages: purls: [] size: 90523 timestamp: 1768827989830 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang-19.1.7-default_h1323312_7.conda + sha256: 820d65cc9f0b44fdc088d4e7f6a154cfb323bbdeb29c6405b4794680e7e7ac18 + md5: 138b0781aea27a845b18e7c1cd34f2fb + depends: + - clang-19 19.1.7 default_hd70426c_7 + - clang_impl_osx-64 19.1.7 default_ha1a018a_7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24316 + timestamp: 1767959435159 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-18.1.8-default_hf9bcbb7_17.conda sha256: 814c40caafd065a4082bbec29e3c562359bd222a09fc5eb711af895d693fa3e4 md5: de9435da080b0e63d1eddcc7e5ba409b @@ -5807,6 +6737,17 @@ packages: purls: [] size: 90275 timestamp: 1768827137673 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19.1.7-default_hf9bcbb7_7.conda + sha256: e170fa45ea1a6c30348b05a474bfad58bcb7316ee278fd1051f1f7af105db2cd + md5: 13150cdd8e6bc61aa68b55d1a2a69083 + depends: + - clang-19 19.1.7 default_hf3020a7_7 + - clang_impl_osx-arm64 19.1.7 default_hc11f16d_7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24474 + timestamp: 1767957953998 - conda: https://conda.anaconda.org/conda-forge/win-64/clang-19.1.7-default_hac490eb_7.conda sha256: a1d02a927d05997e8a4fef000c11512baeb87dde5dda16aa871dfb0cb1bb0c9f md5: 5552cab7d5b866172bdc3d2cdf4df88e @@ -5861,6 +6802,32 @@ packages: purls: [] size: 827010 timestamp: 1768827022615 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang-19-19.1.7-default_hd70426c_7.conda + sha256: d1625b4896fa597e0f5fdcd4b7cbeea7c120728e0ef43fc641dd7e8fa6d4eabe + md5: c117b3fc6406027a2ca344aee4e1382a + depends: + - __osx >=10.13 + - libclang-cpp19.1 19.1.7 default_hd70426c_7 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 764031 + timestamp: 1767959120208 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19-19.1.7-default_hf3020a7_7.conda + sha256: d59286e188f4922f9812d8412358f98e98b187840c7256d9c143f4e9cc02847e + md5: 3b992d143f0008588ca26df8a324eee9 + depends: + - __osx >=11.0 + - libclang-cpp19.1 19.1.7 default_hf3020a7_7 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 764520 + timestamp: 1767957577398 - conda: https://conda.anaconda.org/conda-forge/win-64/clang-19-19.1.7-default_hac490eb_7.conda sha256: 34a99767bcc5435db5540224a6dc4e19ec0ab75af269364e6212512abbad62e2 md5: 9ec76da1182f9986c3d814be0af28499 @@ -6081,6 +7048,23 @@ packages: purls: [] size: 18256 timestamp: 1748575659622 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-19.1.7-default_ha1a018a_7.conda + sha256: bd9e569f9848d7fdcc963eecbc2cb75201213a751440a207956e1d670c174835 + md5: 61a2644a24a32277abae7a234f73b13d + depends: + - cctools_impl_osx-64 + - clang-19 19.1.7 default_hd70426c_7 + - compiler-rt 19.1.7.* + - compiler-rt_osx-64 + - ld64 + - ld64_osx-64 * llvm19_1_* + - llvm-openmp >=19.1.7 + - llvm-tools 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24417 + timestamp: 1767959402626 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-18.1.8-h2ae9ea5_25.conda sha256: 35273ca91fb998f979402c76066af008ad3108a61a3b161d881fcb37700a48bb md5: 9eb023cfc47dac4c22097b9344a943b4 @@ -6095,6 +7079,23 @@ packages: purls: [] size: 18331 timestamp: 1748575702758 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-19.1.7-default_hc11f16d_7.conda + sha256: faffb31c43afb4360d6545bd20590fbed5b344a77daeabdea39164d72c943d21 + md5: bde6fcb6b1fcefb687a7fb95675c6ec8 + depends: + - cctools_impl_osx-arm64 + - clang-19 19.1.7 default_hf3020a7_7 + - compiler-rt 19.1.7.* + - compiler-rt_osx-arm64 + - ld64 + - ld64_osx-arm64 * llvm19_1_* + - llvm-openmp >=19.1.7 + - llvm-tools 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24459 + timestamp: 1767957934083 - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-18.1.8-h7e5c614_25.conda sha256: 7f6aea0def866f1664b3ddf730d91e1b94da734b585c3e49cd51d3c4c66a1a49 md5: 1fea06d9ced6b87fe63384443bc2efaf @@ -6105,6 +7106,19 @@ packages: purls: [] size: 21534 timestamp: 1748575663505 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-19.1.7-h8a78ed7_31.conda + sha256: aa12658e55300efcdc34010312ee62d350464ae0ae8c30d1f7340153c9baa5aa + md5: faf4b6245c4287a4f13e793ca2826842 + depends: + - cctools_osx-64 + - clang 19.* + - clang_impl_osx-64 19.1.7.* + - sdkroot_env_osx-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 21157 + timestamp: 1769482965411 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-18.1.8-h07b0088_25.conda sha256: 4d1e695cd776783f6192fb8d4c7892c03e9f1f185dbb96cefdaab2f183430281 md5: d9ee862b94f4049c9e121e6dd18cc874 @@ -6115,6 +7129,19 @@ packages: purls: [] size: 21563 timestamp: 1748575706504 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-19.1.7-h75f8d18_31.conda + sha256: c9daaa0e7785fe7c5799e3d691c6aa5ab8b4a54bbf49835037068dd78e0a7b35 + md5: 6645630920c0980a33f055a49fbdb88e + depends: + - cctools_osx-arm64 + - clang 19.* + - clang_impl_osx-arm64 19.1.7.* + - sdkroot_env_osx-arm64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 21135 + timestamp: 1769482854554 - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-18.1.8-default_h1c12a56_16.conda sha256: 32fb83f6f6ba69265aec719057e09e7327f3825871710acbb776cb6eb28fa9ab md5: 23870e4265065771480d429b3a7679e1 @@ -6137,6 +7164,18 @@ packages: purls: [] size: 90700 timestamp: 1768828019291 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-19.1.7-default_h9089c59_7.conda + sha256: cfa79093c73f831c9df7892989e59cd25244eaf45a8d476be21871834b260c18 + md5: 85ed31bf1c61812adb2492a0745db172 + depends: + - clang 19.1.7 default_h1323312_7 + - clangxx_impl_osx-64 19.1.7.* default_*_7 + - libcxx-devel 19.1.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24380 + timestamp: 1767959626598 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-18.1.8-default_h36137df_17.conda sha256: 372dce6fbae28815dcd003fb8f8ae64367aecffaab7fe4f284b34690ef63c6c1 md5: f08f31fa4230170c15f19b9b2a39f113 @@ -6148,6 +7187,18 @@ packages: purls: [] size: 90421 timestamp: 1768827154110 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-19.1.7-default_hc995acf_7.conda + sha256: ac9f83722cfd336298b97e30c3746a8f0d9d6289a3e0383275f531dc03b2f88a + md5: 0c1f688616da9aac0ce556d74a24f740 + depends: + - clang 19.1.7 default_hf9bcbb7_7 + - clangxx_impl_osx-arm64 19.1.7.* default_*_7 + - libcxx-devel 19.1.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24443 + timestamp: 1767958120218 - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-18.1.8-h4b7810f_25.conda sha256: 1b2ee79318f37b356d36cbcfc46ff8a0a4e1d8e5fdaed1e5dbc5a2b58cacbad7 md5: c03c94381d9ffbec45c98b800e7d3e86 @@ -6161,6 +7212,18 @@ packages: purls: [] size: 18390 timestamp: 1748575690740 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-19.1.7-default_ha1a018a_7.conda + sha256: 56147cce5439c1543703dc0fb95a68793c3154f7987faf027c7159a850883298 + md5: b37f21ec0f7e5a279d51b3b692303ff6 + depends: + - clang-19 19.1.7 default_hd70426c_7 + - clang_impl_osx-64 19.1.7 default_ha1a018a_7 + - libcxx-devel 19.1.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24322 + timestamp: 1767959603633 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-18.1.8-h555f467_25.conda sha256: d0fb67a4ed19e9b40db08fce19afb342dcebc3609374a1b86c0d7a40abaf655c md5: 4d72782682bc7d61a3612fea2c93299f @@ -6174,6 +7237,18 @@ packages: purls: [] size: 18459 timestamp: 1748575734378 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-19.1.7-default_hc11f16d_7.conda + sha256: 56ec5bf095253eb7ff33b0e64f33c608d760f790f1ff0cb30480a797bffbb2fd + md5: 4fa4a9227c428372847c534a9bffd698 + depends: + - clang-19 19.1.7 default_hf3020a7_7 + - clang_impl_osx-arm64 19.1.7 default_hc11f16d_7 + - libcxx-devel 19.1.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24364 + timestamp: 1767958102690 - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-18.1.8-h7e5c614_25.conda sha256: 1a1a31eae8b491104d33d422b57578f041d34afafb4da0a7355ef16fd5174090 md5: 2e5c84e93a3519d77a0d8d9b3ea664fd @@ -6185,6 +7260,20 @@ packages: purls: [] size: 19947 timestamp: 1748575697030 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-19.1.7-h8a78ed7_31.conda + sha256: 308df8233f2a7a258e6441fb02553a1b5a54afe5e93d63b016dd9c0f1d28d5ab + md5: c3b46b5d6cd2a6d1f12b870b2c69aed4 + depends: + - cctools_osx-64 + - clang_osx-64 19.1.7 h8a78ed7_31 + - clangxx 19.* + - clangxx_impl_osx-64 19.1.7.* + - sdkroot_env_osx-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 19974 + timestamp: 1769482973715 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-18.1.8-h07b0088_25.conda sha256: aae6cad658c9899f13d5941bcadc942f1a471acdfc43cd86c3635d0e353babc9 md5: 4280e791148c1f9a3f8c0660d7a54acb @@ -6196,6 +7285,20 @@ packages: purls: [] size: 19924 timestamp: 1748575738546 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-19.1.7-h75f8d18_31.conda + sha256: f3a81f8e5451377d2b84a31f4a4e305cb92f5a4c4ba0126e7d1a3cfa4d66bf47 + md5: bd6926e81dc196064373b614af3bc9ff + depends: + - cctools_osx-arm64 + - clang_osx-arm64 19.1.7 h75f8d18_31 + - clangxx 19.* + - clangxx_impl_osx-arm64 19.1.7.* + - sdkroot_env_osx-arm64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 19914 + timestamp: 1769482862579 - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 md5: ea8a6c3256897cc31263de9f455e25d9 @@ -6286,6 +7389,27 @@ packages: purls: [] size: 22302340 timestamp: 1768967063937 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda + sha256: 5ece78754577b8d9030ec1f09ce1cd481125f27d8d6fcdcfe2c1017661830c61 + md5: 51d37989c1758b5edfe98518088bf700 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libexpat >=2.7.4,<3.0a0 + - libgcc >=14 + - liblzma >=5.8.2,<6.0a0 + - libstdcxx >=14 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - rhash >=1.4.6,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 22330508 + timestamp: 1771383666798 - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.0-h29fc008_0.conda sha256: 826b3ddafa3cf9ff2befa00b1c92d9bda75dc3cac2b1577e633d5353334c9de7 md5: 8b8277fa364d6306dfe00cb709e7cdb0 @@ -6324,13 +7448,53 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 18958048 - timestamp: 1765229793999 -- conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.2-h965d0ab_0.conda - sha256: 7fb52aa42c6561ed0e9c00fd7059bc880858b67bf58b0e4ab0d9af8882c9b638 - md5: 58d2bad0b375e2973683f559e220b292 + size: 18958048 + timestamp: 1765229793999 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.2-h965d0ab_0.conda + sha256: 7fb52aa42c6561ed0e9c00fd7059bc880858b67bf58b0e4ab0d9af8882c9b638 + md5: 58d2bad0b375e2973683f559e220b292 + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - libexpat >=2.7.3,<3.0a0 + - liblzma >=5.8.2,<6.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - rhash >=1.4.6,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18983553 + timestamp: 1768967726503 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.3-h965d0ab_1.conda + sha256: 7bc0971382c4272dba8e400b217f627583e28e4ba2fec8f77bfe2f47b9bd945f + md5: 06fa105f5ec490ca06315f2a77a3b1d7 + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - libexpat >=2.7.4,<3.0a0 + - liblzma >=5.8.2,<6.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - rhash >=1.4.6,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18992980 + timestamp: 1771384442992 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.2-h8cb302d_0.conda + sha256: fc836ee115e7959e876bba9fa6cae5e5f59c4eb85fbe2756c7b78f5590dce07f + md5: 0d52644db6143f90a0df485bbe19c34e depends: - - __osx >=10.13 + - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - libcurl >=8.18.0,<9.0a0 - libcxx >=19 @@ -6344,17 +7508,17 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 18983553 - timestamp: 1768967726503 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.2-h8cb302d_0.conda - sha256: fc836ee115e7959e876bba9fa6cae5e5f59c4eb85fbe2756c7b78f5590dce07f - md5: 0d52644db6143f90a0df485bbe19c34e + size: 17745866 + timestamp: 1768967512505 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda + sha256: 7c5fc735986f49e1c97c6919863c78e94b800602eb1ec825a294790cceb83c8b + md5: 752945affbfd47be28dfe2286052dd90 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - libcurl >=8.18.0,<9.0a0 - libcxx >=19 - - libexpat >=2.7.3,<3.0a0 + - libexpat >=2.7.4,<3.0a0 - liblzma >=5.8.2,<6.0a0 - libuv >=1.51.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 @@ -6364,8 +7528,8 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 17745866 - timestamp: 1768967512505 + size: 17746308 + timestamp: 1771384392762 - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.2-hdcbee5b_0.conda sha256: 8d82d8a14c5b966d8d31957f239e107e7bdd01fac7d2dd70e4332d7cc60c7ac0 md5: 6e2e78153e4c0657e2800256097f6400 @@ -6425,6 +7589,18 @@ packages: purls: [] size: 96219 timestamp: 1757436225599 +- conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt-19.1.7-he914875_1.conda + sha256: 28e5f0a6293acba68ebc54694a2fc40b1897202735e8e8cbaaa0e975ba7b235b + md5: e6b9e71e5cb08f9ed0185d31d33a074b + depends: + - __osx >=10.13 + - clang 19.1.7.* + - compiler-rt_osx-64 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 96722 + timestamp: 1757412473400 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-18.1.8-h855ad52_2.conda sha256: 93a26ec6d7e3d93db2d80c794e9710fc422d436680da165e78d7ff73b8ef6c12 md5: 8fa0332f248b2f65fdd497a888ab371e @@ -6437,6 +7613,18 @@ packages: purls: [] size: 95924 timestamp: 1757436417546 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-19.1.7-h855ad52_1.conda + sha256: b58a481828aee699db7f28bfcbbe72fb133277ac60831dfe70ee2465541bcb93 + md5: 39451684370ae65667fa5c11222e43f7 + depends: + - __osx >=11.0 + - clang 19.1.7.* + - compiler-rt_osx-arm64 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 97085 + timestamp: 1757411887557 - conda: https://conda.anaconda.org/conda-forge/win-64/compiler-rt-19.1.7-h49e36cd_1.conda sha256: b942211b4557680dae103a6de69f411d85973b499bc7db9bf5dd0a66f0836f3b md5: ebd0e08326cd166eb95a9956875303c3 @@ -6464,6 +7652,19 @@ packages: purls: [] size: 10231779 timestamp: 1757436151261 +- conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-64-19.1.7-h138dee1_1.conda + sha256: e6effe89523fc6143819f7a68372b28bf0c176af5b050fe6cf75b62e9f6c6157 + md5: 32deecb68e11352deaa3235b709ddab2 + depends: + - clang 19.1.7.* + constrains: + - compiler-rt 19.1.7 + - clangxx 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 10425780 + timestamp: 1757412396490 - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-18.1.8-he32a8d3_2.conda sha256: fd0e6d142d38ac54404fb8f8413fae181a2c58e7aca3f6304df58f03ab8df55b md5: e30e8ab85b13f0cab4c345d7758d525c @@ -6477,6 +7678,19 @@ packages: purls: [] size: 10204065 timestamp: 1757436348646 +- conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-19.1.7-he32a8d3_1.conda + sha256: 8c32a3db8adf18ed58197e8895ce4f24a83ed63c817512b9a26724753b116f2a + md5: 8d99c82e0f5fed6cc36fcf66a11e03f0 + depends: + - clang 19.1.7.* + constrains: + - compiler-rt 19.1.7 + - clangxx 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 10490535 + timestamp: 1757411851093 - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_win-64-19.1.7-h49e36cd_1.conda sha256: 5d43e1f0e5b66edc43f57e8c3ea502ce976f86d8eec2de51d21a3a51802b2e72 md5: dd4b9fef3c46e061a1b5e6698b17d5ff @@ -6502,6 +7716,18 @@ packages: purls: [] size: 7452 timestamp: 1751115555727 +- conda: https://conda.anaconda.org/conda-forge/linux-64/compilers-1.11.0-ha770c72_0.conda + sha256: 5709f2cbfeb8690317ba702611bdf711a502b417fecda6ad3313e501f6f8bd61 + md5: fdcf2e31dd960ef7c5daa9f2c95eff0e + depends: + - c-compiler 1.11.0 h4d9bdce_0 + - cxx-compiler 1.11.0 hfcd1e18_0 + - fortran-compiler 1.11.0 h9bea470_0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7482 + timestamp: 1753098722454 - conda: https://conda.anaconda.org/conda-forge/osx-64/compilers-1.10.0-h694c41f_0.conda sha256: 8c7e12b57e480bcb3babb742da9289b6a40a19ff802e5574b72d252f4c0a3369 md5: d43a090863429d66e0986c84de7a7906 @@ -6514,6 +7740,18 @@ packages: purls: [] size: 7586 timestamp: 1751115659782 +- conda: https://conda.anaconda.org/conda-forge/osx-64/compilers-1.11.0-h694c41f_0.conda + sha256: d95722dfe9a45b22fbb4e8d4f9531ac5ef7d829f3bfd2ed399d45d7590681bd0 + md5: 308ed38aeff454285547012272cb59f5 + depends: + - c-compiler 1.11.0 h7a00415_0 + - cxx-compiler 1.11.0 h307afc9_0 + - fortran-compiler 1.11.0 h9ab62e8_0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7509 + timestamp: 1753098827841 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.10.0-hce30654_0.conda sha256: 1403b04a687dd2b85c8bac9a933e6719340b2bcad45f84fbf516ed5e48ef2d07 md5: fbbdbdefc4d0c8b68ed08c88ad454b5d @@ -6526,6 +7764,18 @@ packages: purls: [] size: 7586 timestamp: 1751115542506 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.11.0-hce30654_0.conda + sha256: 01f02e9baa51ef2debfdc55df57ea6a7fce9b5fb9356c3267afb517e1dc4363a + md5: aac0d423ecfd95bde39582d0de9ca657 + depends: + - c-compiler 1.11.0 h61f9b84_0 + - cxx-compiler 1.11.0 h88570a1_0 + - fortran-compiler 1.11.0 h81a4f41_0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7525 + timestamp: 1753098740763 - conda: https://conda.anaconda.org/conda-forge/win-64/compilers-1.11.0-h57928b3_0.conda sha256: 37d51307f25e1d446b458881b366331e2c5b4c661b04c472f70408edac309b1f md5: 13095e0e8944fcdecae4c16812c0a608 @@ -6538,6 +7788,16 @@ packages: purls: [] size: 7886 timestamp: 1753098810030 +- conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-14.3.0-he8ccf15_18.conda + sha256: b90ec0e6a9eb22f7240b3584fe785457cff961fec68d40e6aece5d596f9bbd9a + md5: 0e3e144115c43c9150d18fa20db5f31c + depends: + - gcc_impl_linux-64 >=14.3.0,<14.3.1.0a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 31705 + timestamp: 1771378159534 - pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl name: contourpy version: 1.3.3 @@ -6736,6 +7996,18 @@ packages: purls: [] size: 6633 timestamp: 1751115555450 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.11.0-hfcd1e18_0.conda + sha256: 3fcc97ae3e89c150401a50a4de58794ffc67b1ed0e1851468fcc376980201e25 + md5: 5da8c935dca9186673987f79cef0b2a5 + depends: + - c-compiler 1.11.0 h4d9bdce_0 + - gxx + - gxx_linux-64 14.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6635 + timestamp: 1753098722177 - conda: https://conda.anaconda.org/conda-forge/osx-64/cxx-compiler-1.10.0-h20888b2_0.conda sha256: 15f6ea7258555b2e34d147d378f4e8e08343ca3e71a18bd98b89a3dbc43142a2 md5: b3a935ade707c54ebbea5f8a7c6f4549 @@ -6747,6 +8019,17 @@ packages: purls: [] size: 6785 timestamp: 1751115659099 +- conda: https://conda.anaconda.org/conda-forge/osx-64/cxx-compiler-1.11.0-h307afc9_0.conda + sha256: d6976f8d8b51486072abfe1e76a733688380dcbd1a8e993a43d59b80f7288478 + md5: 463bb03bb27f9edc167fb3be224efe96 + depends: + - c-compiler 1.11.0 h7a00415_0 + - clangxx_osx-64 19.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6732 + timestamp: 1753098827160 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.10.0-hba80287_0.conda sha256: 52cbfc615a9727294fccdd507f11919ca01ff29bd928bb5aa0b211697a983e9f md5: 7fca30a1585a85ec8ab63579afcac5d3 @@ -6758,6 +8041,17 @@ packages: purls: [] size: 6784 timestamp: 1751115541888 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.11.0-h88570a1_0.conda + sha256: 99800d97a3a2ee9920dfc697b6d4c64e46dc7296c78b1b6c746ff1c24dea5e6c + md5: 043afed05ca5a0f2c18252ae4378bdee + depends: + - c-compiler 1.11.0 h61f9b84_0 + - clangxx_osx-arm64 19.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6715 + timestamp: 1753098739952 - conda: https://conda.anaconda.org/conda-forge/win-64/cxx-compiler-1.11.0-h1c1089f_0.conda sha256: c888f4fe9ec117c1c01bfaa4c722ca475ebbb341c92d1718afa088bb0d710619 md5: 4d94d3c01add44dc9d24359edf447507 @@ -6889,6 +8183,29 @@ packages: purls: [] size: 1169164 timestamp: 1759819831835 +- conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h54a6638_1.conda + sha256: dcf2f993c6b877613af2f38644fb0b199602913b3dfcedb8188e05987f04833d + md5: 284596590c3d0b35739c0ed0b8bfcddd + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 1172902 + timestamp: 1771590573478 +- conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-h2fb4741_1.conda + sha256: 7dbc71717ebd1e59b5593f739c68f5da9e24d4a654a4b17468099783800a0e8a + md5: cd30a50f824ee8094fae403949f8e09b + depends: + - libcxx >=19 + - __osx >=11.0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 1174070 + timestamp: 1771590662874 - conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-hfc0b2d5_1.conda sha256: 929bf0e15495bff2a08dfc372860c10efd829b9d66a7441bbfd565b6b8c8cf5a md5: 7e58d0dcc1f43ed4baf6d3156630cc68 @@ -6911,6 +8228,17 @@ packages: purls: [] size: 1169935 timestamp: 1759819925766 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h784d473_1.conda + sha256: bc68b39797d8bdc2d4885a0de62fa87dde81812eb3d640ac225316726280de85 + md5: 08c7e090a0db4c2f35887f0db3609a4a + depends: + - libcxx >=19 + - __osx >=11.0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 1174626 + timestamp: 1771590652561 - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h477610d_1.conda sha256: 39d6fa1245ef8c226ff3e485e947770e3b9c7d65fed6c42bd297e2b218b4ddab md5: 8ac3430db715982d054a004133ae8ae2 @@ -6993,6 +8321,11 @@ packages: version: 3.24.0 sha256: eebebb403d78363ef7be8e236b63cc6760b0004c7464dceaba3fd0afbd637ced requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9c/0f/5d0c71a1aefeb08efff26272149e07ab922b64f46c63363756224bd6872e/filelock-3.24.3-py3-none-any.whl + name: filelock + version: 3.24.3 + sha256: 426e9a4660391f7f8a810d71b0555bce9008b0a1cc342ab1f6947d37639e002d + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda sha256: 19025a4078ff3940d97eb0da29983d5e0deac9c3e09b0eabf897daeaf9d1114e md5: 66b8b26023b8efdf8fcb23bac4b6325d @@ -7292,6 +8625,19 @@ packages: purls: [] size: 6650 timestamp: 1751115555592 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.11.0-h9bea470_0.conda + sha256: 53e5562ede83b478ebe9f4fc3d3b4eff5b627883f48aa0bf412e8fd90b5d6113 + md5: d5596f445a1273ddc5ea68864c01b69f + depends: + - binutils + - c-compiler 1.11.0 h4d9bdce_0 + - gfortran + - gfortran_linux-64 14.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6656 + timestamp: 1753098722318 - conda: https://conda.anaconda.org/conda-forge/osx-64/fortran-compiler-1.10.0-h02557f8_0.conda sha256: 85bd7664f86cbf5e8d4f42ef79104bb2ddb1d9c15286894a34f84acc4f6fd731 md5: aa3288408631f87b70295594cd4daba8 @@ -7306,6 +8652,20 @@ packages: purls: [] size: 6813 timestamp: 1751115658407 +- conda: https://conda.anaconda.org/conda-forge/osx-64/fortran-compiler-1.11.0-h9ab62e8_0.conda + sha256: 21e2ec84b7b152daa22fa8cc98be5d4ba9ff93110bbc99e05dfd45eb6f7e8b77 + md5: ee1a3ecd568a695ea16747198df983eb + depends: + - cctools >=949.0.1 + - gfortran + - gfortran_osx-64 14.* + - ld64 >=530 + - llvm-openmp + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6749 + timestamp: 1753098826431 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.10.0-h5692697_0.conda sha256: 9386f285f6a57edaa2bb72ec1372cf99146369915647ef884680078b30ea5780 md5: 75f13dea967348e4f05143a3326142d5 @@ -7320,6 +8680,20 @@ packages: purls: [] size: 6808 timestamp: 1751115541182 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.11.0-h81a4f41_0.conda + sha256: 1a030edc0e79e4e7a4ed9736ec6925303940148d00f20faf3a7abf0565de181e + md5: d221c62af175b83186f96d8b0880bff6 + depends: + - cctools >=949.0.1 + - gfortran + - gfortran_osx-arm64 14.* + - ld64 >=530 + - llvm-openmp + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6723 + timestamp: 1753098739029 - conda: https://conda.anaconda.org/conda-forge/win-64/fortran-compiler-1.11.0-h95e3450_0.conda sha256: 9378136997003be05b4377bef00f414f73f6ed2ec3a8505467bd6eaf0dea2acb md5: c9e93abb0200067d40aa42c96fe1a156 @@ -7603,6 +8977,17 @@ packages: purls: [] size: 55246 timestamp: 1740240578937 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_18.conda + sha256: 9b34b57b06b485e33a40d430f71ac88c8f381673592507cf7161c50ff0832772 + md5: 52d6457abc42e320787ada5f9033fa99 + depends: + - conda-gcc-specs + - gcc_impl_linux-64 14.3.0 hbdf3cc3_18 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 29506 + timestamp: 1771378321585 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-h1e990d8_2.conda sha256: c3e9f243ea8292eecad78bb200d8f5b590e0f82bf7e7452a3a7c8df4eea6f774 md5: f46cf0acdcb6019397d37df1e407ab91 @@ -7619,6 +9004,23 @@ packages: purls: [] size: 66770653 timestamp: 1740240400031 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hbdf3cc3_18.conda + sha256: 3b31a273b806c6851e16e9cf63ef87cae28d19be0df148433f3948e7da795592 + md5: 30bb690150536f622873758b0e8d6712 + depends: + - binutils_impl_linux-64 >=2.45 + - libgcc >=14.3.0 + - libgcc-devel_linux-64 14.3.0 hf649bbc_118 + - libgomp >=14.3.0 + - libsanitizer 14.3.0 h8f1669f_18 + - libstdcxx >=14.3.0 + - libstdcxx-devel_linux-64 14.3.0 h9f08a49_118 + - sysroot_linux-64 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 76302378 + timestamp: 1771378056505 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.3.0-h6f18a23_11.conda sha256: b2533388ec510ef0fc95774f15fdfb89582623049494506ea27622333f90bc09 md5: 639ef869618e311eee4888fcb40747e2 @@ -7631,6 +9033,18 @@ packages: purls: [] size: 32538 timestamp: 1748905867619 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_21.conda + sha256: 27ad0cd10dccffca74e20fb38c9f8643ff8fce56eee260bf89fa257d5ab0c90a + md5: 1403ed5fe091bd7442e4e8a229d14030 + depends: + - gcc_impl_linux-64 14.3.0.* + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28946 + timestamp: 1770908213807 - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran-13.3.0-h9576a4e_2.conda sha256: 9425741d57bbcf918fe98cb375508f31de0daa655f3cebe100a43cf7cb46ec39 md5: 19e6d3c9cde10a0a9a170a684082588e @@ -7643,6 +9057,18 @@ packages: purls: [] size: 54740 timestamp: 1740240701423 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran-14.3.0-h76987e4_18.conda + sha256: c216b97f00973fc6c37af16d1d974635e81cfc93462123b1d0ffc93fe509ea01 + md5: 958a6ecb4188cce9edbd9bbd2831a61d + depends: + - gcc 14.3.0 h0dff253_18 + - gcc_impl_linux-64 14.3.0 hbdf3cc3_18 + - gfortran_impl_linux-64 14.3.0 h1a219da_18 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28880 + timestamp: 1771378338951 - conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran-13.3.0-hcc3c99d_1.conda sha256: 6dfcb28c051c258b566bf128c4df870f9df6e3dc1b7177d9cffcef0b0fcf7157 md5: e1177b9b139c6cf43250427819f2f07b @@ -7655,6 +9081,18 @@ packages: purls: [] size: 32387 timestamp: 1742561765479 +- conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran-14.3.0-hcc3c99d_0.conda + sha256: e99605f629a4baceba28bfda6305f6898a42a1a05a5833a92808b737457a0711 + md5: 6077316830986f224d771f9e6ba5c516 + depends: + - cctools + - gfortran_osx-64 14.3.0 + - ld64 + license: GPL-3.0-or-later WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 32631 + timestamp: 1751220511321 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-13.2.0-h1ca8e4b_1.conda sha256: 1232495ccd08cec4c80d475d584d1fc84365a1ef1b70e45bb0d9c317e9ec270e md5: 9eac94b5f64ba2d59ef2424cc44bebea @@ -7667,6 +9105,18 @@ packages: purls: [] size: 31973 timestamp: 1694179448089 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-14.3.0-h3ef1dbf_0.conda + sha256: cfdf9b4dd37ddfc15ea1c415619d4137004fa135d7192e5cdcea8e3944dc9df7 + md5: e148e0bc9bbc90b6325a479a5501786d + depends: + - cctools + - gfortran_osx-arm64 14.3.0 + - ld64 + license: GPL-3.0-or-later WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 32740 + timestamp: 1751220440768 - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-13.3.0-h84c1745_2.conda sha256: 03a45f58b41909d4189fb81ec7f971b60aaccf95a3953049d93ae7d06eb19000 md5: 4e21ed177b76537067736f20f54fee0a @@ -7681,6 +9131,20 @@ packages: purls: [] size: 15923784 timestamp: 1740240635243 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-14.3.0-h1a219da_18.conda + sha256: d8c8ba10471d4ec6e9d28b5a61982b0f49cb6ad55a6c84cb85b71f026329bd09 + md5: 91531d5176126c652e8b8dfcfa263dcd + depends: + - gcc_impl_linux-64 >=14.3.0 + - libgcc >=14.3.0 + - libgfortran5 >=14.3.0 + - libstdcxx >=14.3.0 + - sysroot_linux-64 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 18544424 + timestamp: 1771378230570 - conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran_impl_osx-64-13.3.0-hbf5bf67_105.conda sha256: c7d9cae04fa4becb2ba24cd6129748788f93ea0a0917e1266474322dea6df574 md5: f56a107c8d1253346d01785ecece7977 @@ -7701,6 +9165,28 @@ packages: purls: [] size: 20695550 timestamp: 1743911459556 +- conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran_impl_osx-64-14.3.0-h94fe04d_1.conda + sha256: 7a2a952ffee0349147768c1d6482cb0933349017056210118ebd5f0fb688f5d5 + md5: 1a81d1a0cb7f241144d9f10e55a66379 + depends: + - __osx >=10.13 + - cctools_osx-64 + - clang + - gmp >=6.3.0,<7.0a0 + - isl 0.26.* + - libcxx >=17 + - libgfortran-devel_osx-64 14.3.0.* + - libgfortran5 >=14.3.0 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - zlib + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 23083852 + timestamp: 1759709470800 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-13.2.0-h252ada1_3.conda sha256: 1ba0d59650e2d54ebcfdd6d6e7ce6823241764183c34f082bc1313ec43b01c7a md5: 4a020e943a2888b242b312a8e953eb9a @@ -7720,6 +9206,28 @@ packages: purls: [] size: 18431819 timestamp: 1707330710124 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-14.3.0-h6d03799_1.conda + sha256: c05c634388e180f79c70a5989d2b25977716b7f6d5e395119ad0007cf4a7bcbf + md5: 1e9ec88ecc684d92644a45c6df2399d0 + depends: + - __osx >=11.0 + - cctools_osx-arm64 + - clang + - gmp >=6.3.0,<7.0a0 + - isl 0.26.* + - libcxx >=17 + - libgfortran-devel_osx-arm64 14.3.0.* + - libgfortran5 >=14.3.0 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - zlib + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 20286770 + timestamp: 1759712171482 - conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-13.3.0-h1917dac_11.conda sha256: e51bcd274ca1ff67b4f32cd772317f43a7f43dad1f8c07d400b4918a9f88b006 md5: 85b2fa3c287710011199f5da1bac5b43 @@ -7733,6 +9241,19 @@ packages: purls: [] size: 30896 timestamp: 1748905884078 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-14.3.0-hfa02b96_21.conda + sha256: 406e1b10478b29795377cc2ad561618363aaf37b208e5cb3de7858256f73276a + md5: 234863e90d09d229043af1075fcf8204 + depends: + - gfortran_impl_linux-64 14.3.0.* + - gcc_linux-64 ==14.3.0 h298d278_21 + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 27130 + timestamp: 1770908213808 - conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran_osx-64-13.3.0-h3223c34_1.conda sha256: 3c0887454dc9ddf4d627181899119908db8f4740fe60f93fb98cf6dc408e90bf md5: a6eeb1519091ac3239b88ee3914d6cb6 @@ -7750,6 +9271,23 @@ packages: purls: [] size: 35730 timestamp: 1742561746925 +- conda: https://conda.anaconda.org/conda-forge/osx-64/gfortran_osx-64-14.3.0-h3223c34_0.conda + sha256: 14014ad4d46e894645979cbad42dd509482172095c756bdb5474918e0638bd57 + md5: 979b3c36c57d31e1112fa1b1aec28e02 + depends: + - cctools_osx-64 + - clang + - clang_osx-64 + - gfortran_impl_osx-64 14.3.0 + - ld64_osx-64 + - libgfortran + - libgfortran-devel_osx-64 14.3.0 + - libgfortran5 >=14.3.0 + license: GPL-3.0-or-later WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 35767 + timestamp: 1751220493617 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_osx-arm64-13.2.0-h57527a5_1.conda sha256: 3b075f15aba705d43870fdfde5a8d3f1adc9a045d575b4665726afe244149a64 md5: 13ca786286ed5efc9dc75f64b5101210 @@ -7767,6 +9305,23 @@ packages: purls: [] size: 35260 timestamp: 1694179424284 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_osx-arm64-14.3.0-h3c33bd0_0.conda + sha256: 2644e5f4b4eed171b12afb299e2413be5877db92f30ec03690621d1ae648502c + md5: 8db8c0061c0f3701444b7b9cc9966511 + depends: + - cctools_osx-arm64 + - clang + - clang_osx-arm64 + - gfortran_impl_osx-arm64 14.3.0 + - ld64_osx-arm64 + - libgfortran + - libgfortran-devel_osx-arm64 14.3.0 + - libgfortran5 >=14.3.0 + license: GPL-3.0-or-later WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 35951 + timestamp: 1751220424258 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda sha256: 309cf4f04fec0c31b6771a5809a1909b4b3154a2208f52351e1ada006f4c750c md5: c94a5994ef49749880a8139cf9afcbe1 @@ -7842,6 +9397,17 @@ packages: purls: [] size: 54718 timestamp: 1740240712365 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-14.3.0-h76987e4_18.conda + sha256: 1b490c9be9669f9c559db7b2a1f7d8b973c58ca0c6f21a5d2ba3f0ab2da63362 + md5: 19189121d644d4ef75fed05383bc75f5 + depends: + - gcc 14.3.0 h0dff253_18 + - gxx_impl_linux-64 14.3.0 h2185e75_18 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28883 + timestamp: 1771378355605 - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.3.0-hae580e1_2.conda sha256: 7cb36526a5c3e75ae07452aee5c9b6219f62fad9f85cc6d1dab5b21d1c4cc996 md5: b55f02540605c322a47719029f8404cc @@ -7855,6 +9421,19 @@ packages: purls: [] size: 13362974 timestamp: 1740240672045 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_18.conda + sha256: 38ffca57cc9c264d461ac2ce9464a9d605e0f606d92d831de9075cb0d95fc68a + md5: 6514b3a10e84b6a849e1b15d3753eb22 + depends: + - gcc_impl_linux-64 14.3.0 hbdf3cc3_18 + - libstdcxx-devel_linux-64 14.3.0 h9f08a49_118 + - sysroot_linux-64 + - tzdata + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 14566100 + timestamp: 1771378271421 - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.3.0-hb14504d_11.conda sha256: dda6a2765249c40168defea26aa67ff37d4d9fd214fb6e8d4fe0f434033bef87 md5: 2ca7575e4f2da39c5ee260e022ab1a6f @@ -7868,6 +9447,19 @@ packages: purls: [] size: 30844 timestamp: 1748905886442 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he467f4b_21.conda + sha256: 1e07c197e0779fa9105e59cd55a835ded96bfde59eb169439736a89b27b48e5d + md5: 7b51f4ff82eeb1f386bfee20a7bed3ed + depends: + - gxx_impl_linux-64 14.3.0.* + - gcc_linux-64 ==14.3.0 h298d278_21 + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 27503 + timestamp: 1770908213813 - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl name: h11 version: 0.16.0 @@ -7929,6 +9521,24 @@ packages: purls: [] size: 3933534 timestamp: 1753358621585 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_106.conda + sha256: 1fc50ce3b86710fba3ec9c5714f1612b5ffa4230d70bfe43e2a1436eacba1621 + md5: c223ee1429ba538f3e48cfb4a0b97357 + depends: + - __glibc >=2.17,<3.0.a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3708864 + timestamp: 1770390337946 - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h1b119a7_104.conda sha256: 454e9724b322cee277abd7acf4f8d688e9c4ded006b6d5bc9fcc2a1ff907d27a md5: 0857f4d157820dcd5625f61fdfefb780 @@ -8004,19 +9614,36 @@ packages: md5: 3f1df98f96e0c369d94232712c9b87d0 depends: - __osx >=10.13 - - libaec >=1.1.4,<2.0a0 - - libcurl >=8.14.1,<9.0a0 + - libaec >=1.1.4,<2.0a0 + - libcurl >=8.14.1,<9.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libgfortran5 >=15.1.0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3522832 + timestamp: 1753358062940 +- conda: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.6-nompi_hf563b80_106.conda + sha256: 4bcc7d54a011f1d515da2fb3406659574bae5f284bced126c756ed9ef151459f + md5: b74e900265ad3808337cd542cfad6733 + depends: + - __osx >=10.13 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.18.0,<9.0a0 - libcxx >=19 - libgfortran - libgfortran5 >=14.3.0 - - libgfortran5 >=15.1.0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.1,<4.0a0 + - openssl >=3.5.5,<4.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 3522832 - timestamp: 1753358062940 + size: 3526365 + timestamp: 1770391694712 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-mpi_openmpi_h2a44015_5.conda sha256: 02e5f6c460395521f8e726abc84bc11e73688fdec96eae3c08e15de8453a9392 md5: b9cd1f45c6f019673676966c4bc40986 @@ -8052,6 +9679,23 @@ packages: purls: [] size: 3299483 timestamp: 1768858142380 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.6-nompi_had3affe_106.conda + sha256: e91c2b8fe62d73bb56bdb9b5adcdcbedbd164ced288e0f361b8eb3f017ddcd7b + md5: 2d1270d283403c542680e969bea70355 + depends: + - __osx >=11.0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3299759 + timestamp: 1770390513189 - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.6-nompi_h89f0904_105.conda sha256: 52e5eb039289946a32aee305e6af777d77376dc0adcb2bdcc31633dcc48d21a5 md5: c1caaf8a28c0eb3be85566e63a5fcb5a @@ -8547,6 +10191,29 @@ packages: - pytest>=8.3.2 ; extra == 'all' - flake8>=7.1.1 ; extra == 'all' requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyh53cf698_0.conda + sha256: 12cb4db242ea1a2e5e60a51b20f16e9c8120a9eb5d013c641cbf827bf3bb78e1 + md5: 441ca4e203a62f7db2f29f190c02b9cf + depends: + - __unix + - pexpect >4.3 + - decorator >=4.3.2 + - ipython_pygments_lexers >=1.0.0 + - jedi >=0.18.1 + - matplotlib-inline >=0.1.5 + - prompt-toolkit >=3.0.41,<3.1.0 + - pygments >=2.11.0 + - python >=3.11 + - stack_data >=0.6.0 + - traitlets >=5.13.0 + - typing_extensions >=4.6 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython?source=compressed-mapping + size: 647436 + timestamp: 1770040907512 - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyhe2676ad_0.conda sha256: 89e39c69cb3b8b0d11930968d66dca6f7c3dff3ad8c520ac10af11f53a10fae4 md5: d44777fc7219cb62865dfdcba308ea0d @@ -8869,6 +10536,22 @@ packages: purls: [] size: 1370023 timestamp: 1719463201255 +- 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/osx-64/krb5-1.21.3-h37d8d59_0.conda sha256: 83b52685a4ce542772f0892a0f05764ac69d57187975579a0835ff255ae3ef9c md5: d4765c524b1d91567886bde656fb514b @@ -8883,6 +10566,20 @@ packages: purls: [] size: 1185323 timestamp: 1719463492984 +- conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda + sha256: df009385e8262c234c0dae9016540b86dad3d299f0d9366d08e327e8e7731634 + md5: e66e2c52d2fdddcf314ad750fb4ebb4a + depends: + - __osx >=10.13 + - 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: 1193620 + timestamp: 1769770267475 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b md5: c6dc8a0fdec13a0565936655c33069a1 @@ -8897,6 +10594,20 @@ packages: purls: [] size: 1155530 timestamp: 1719463474401 +- 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.21.3-hdf4eb48_0.conda sha256: 18e8b3430d7d232dad132f574268f56b3eb1a19431d6d5de8c53c29e6c18fa81 md5: 31aec030344e962fbd7dbbbbd68e60a9 @@ -9045,6 +10756,20 @@ packages: purls: [] size: 18815 timestamp: 1752818984788 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ld64-956.6-llvm19_1_hc3792c1_4.conda + sha256: 6f821c4c6a19722162ef2905c45e0f8034544dab70bb86c647fb4e022a9c27b4 + md5: 4d51a4b9f959c1fac780645b9d480a82 + depends: + - ld64_osx-64 956.6 llvm19_1_hcae3351_4 + - libllvm19 >=19.1.7,<19.2.0a0 + constrains: + - cctools 1030.6.3.* + - cctools_osx-64 1030.6.3.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 21560 + timestamp: 1768852832804 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-954.16-h4c6efb1_0.conda sha256: 722595fb6f81552a88864f79f87238f0dba8e2d3f6c5adf4322a66259c4ea825 md5: 04733a89c85df5b0fa72826b9e88b3a8 @@ -9059,6 +10784,20 @@ packages: purls: [] size: 18863 timestamp: 1752819098768 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-956.6-llvm19_1_he86490a_4.conda + sha256: d6197b4825ece12ab63097bd677294126439a1a6222c7098885aa23464ef280c + md5: 22eb76f8d98f4d3b8319d40bda9174de + depends: + - ld64_osx-arm64 956.6 llvm19_1_ha2625f7_4 + - libllvm19 >=19.1.7,<19.2.0a0 + constrains: + - cctools_osx-arm64 1030.6.3.* + - cctools 1030.6.3.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 21592 + timestamp: 1768852886875 - conda: https://conda.anaconda.org/conda-forge/osx-64/ld64_osx-64-954.16-h28b3ac7_0.conda sha256: 9ec626913646076c7514f294f46191b27e43fd87da24e98577078651a9b425f0 md5: e198e41dada835a065079e4c70905974 @@ -9078,6 +10817,25 @@ packages: purls: [] size: 1100874 timestamp: 1752818929757 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ld64_osx-64-956.6-llvm19_1_hcae3351_4.conda + sha256: 2ae4c885ea34bc976232fbfb8129a2a3f0a79b0f42a8f7437e06d571d1b6760c + md5: 2329a96b45c853dd22af9d11762f9057 + depends: + - __osx >=10.13 + - libcxx + - libllvm19 >=19.1.7,<19.2.0a0 + - sigtool-codesign + - tapi >=1600.0.11.8,<1601.0a0 + constrains: + - cctools 1030.6.3.* + - clang 19.1.* + - cctools_impl_osx-64 1030.6.3.* + - ld64 956.6.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 1110678 + timestamp: 1768852747927 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-954.16-h9d5fcb0_0.conda sha256: 825b56e7016fa64f3fb3b25ba535e838c914264c71ba47075bab91b56a738cbb md5: f46ccafd4b646514c45cf9857f9b4059 @@ -9097,6 +10855,25 @@ packages: purls: [] size: 1022059 timestamp: 1752819033976 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-956.6-llvm19_1_ha2625f7_4.conda + sha256: 4161eec579cea07903ee2fafdde6f8f9991dabd54f3ca6609a1bf75bed3dc788 + md5: eaf3d06e3a8a10dee7565e8d76ae618d + depends: + - __osx >=11.0 + - libcxx + - libllvm19 >=19.1.7,<19.2.0a0 + - sigtool-codesign + - tapi >=1600.0.11.8,<1601.0a0 + constrains: + - cctools_impl_osx-arm64 1030.6.3.* + - ld64 956.6.* + - cctools 1030.6.3.* + - clang 19.1.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 1040464 + timestamp: 1768852821767 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_104.conda sha256: 9e191baf2426a19507f1d0a17be0fdb7aa155cdf0f61d5a09c808e0a69464312 md5: a6abd2796fc332536735f68ba23f7901 @@ -9123,6 +10900,19 @@ packages: purls: [] size: 730831 timestamp: 1766513089214 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3 + md5: 12bd9a3f089ee6c9266a37dab82afabd + 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-64/libabseil-20220623.0-cxx17_h05df665_6.conda sha256: 3b2f0b6218d27f545aec2fa27dbb771d3b6497379c3b5804513e142a5e404ba0 md5: 39f6394ae835f0b16f01cbbd3bb1e8e2 @@ -9759,6 +11549,30 @@ packages: purls: [] size: 13334948 timestamp: 1768826899333 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp19.1-19.1.7-default_hd70426c_7.conda + sha256: 3e8588828d2586722328ea39a7cf48c50a32f7661b55299075741ef7c8875ad5 + md5: b671ac86f33848f3bc3a6066d21c37dd + depends: + - __osx >=10.13 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 14856190 + timestamp: 1767958815491 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp19.1-19.1.7-default_hf3020a7_7.conda + sha256: 89b8aed26ef89c9e56939d1acefa91ecf2e198923bfcc41f116c0de42ce869cb + md5: 5600ae1b88144099572939e773f4b20b + 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: 14062741 + timestamp: 1767957389675 - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.7-default_h99862b1_0.conda sha256: 8408e8b7dc4ac90bc011f76732277e6567645258c201a67803afd4804e9b5cd5 md5: e0015b7d1873038a184e073c0d87bdd5 @@ -9885,6 +11699,23 @@ packages: purls: [] size: 462942 timestamp: 1767821743793 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-hcf29cc6_1.conda + sha256: c84e8dccb65ad5149c0121e4b54bdc47fa39303fd5f4979b8c44bb51b39a369b + md5: 1707cdd636af2ff697b53186572c9f77 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 463621 + timestamp: 1770892808818 - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.17.0-h7dd4100_0.conda sha256: a58ca5a28c1cb481f65800781cee9411bd68e8bda43a69817aaeb635d25f7d75 md5: b3985ef7ca4cd2db59756bae2963283a @@ -9933,6 +11764,38 @@ packages: purls: [] size: 419089 timestamp: 1767822218800 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9a2545f_1.conda + sha256: e2d8cb7c6d8dfb6c277eddbb9cf099805f40957877a48347cafddeade02f143a + md5: a6c0494188638d4bfe767f195619bb93 + depends: + - __osx >=10.13 + - krb5 >=1.22.2,<1.23.0a0 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 419351 + timestamp: 1770893388507 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-hd5a2499_1.conda + sha256: dbc34552fc6f040bbcd52b4246ec068ce8d82be0e76bfe45c6984097758d37c2 + md5: 2742a933ef07e91f38e3d33ad6fe937c + depends: + - __osx >=11.0 + - krb5 >=1.22.2,<1.23.0a0 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 402616 + timestamp: 1770893178846 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-he38603e_0.conda sha256: 11c78b3e89bc332933386f0a11ac60d9200afb7a811b9e3bec98aef8d4a6389b md5: 36190179a799f3aee3c2d20a8a2b970d @@ -9999,6 +11862,26 @@ packages: purls: [] size: 569777 timestamp: 1765919624323 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda + sha256: 2619d471c50c466320e2aea906a4363e34efe181e61346e4453bc68264c5185f + md5: 1ac756454e65fb3fd7bc7de599526e43 + depends: + - __osx >=10.13 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 571912 + timestamp: 1770237202404 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-h55c6f16_2.conda + sha256: 5fbeb2fc2673f0455af6079abf93faaf27f11a92574ad51565fa1ecac9a4e2aa + md5: 4cb5878bdb9ebfa65b7cdff5445087c5 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 570068 + timestamp: 1770238262922 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_0.conda sha256: 82e228975fd491bcf1071ecd0a6ec2a0fcc5f57eb0bd1d52cb13a18d57c67786 md5: 780f0251b757564e062187044232c2b7 @@ -10019,6 +11902,17 @@ packages: purls: [] size: 794361 timestamp: 1742451346844 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-devel-19.1.7-h7c275be_2.conda + sha256: 760af3509e723d8ee5a9baa7f923a213a758b3a09e41ffdaf10f3a474898ab3f + md5: 52031c3ab8857ea8bcc96fe6f1b6d778 + depends: + - libcxx >=19.1.7 + - libcxx-headers >=19.1.7,<19.1.8.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 23069 + timestamp: 1764648572536 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-18.1.8-h6dc3340_8.conda sha256: ff83d001603476033eca155ce77f7ba614d9dc70c5811e2ce9915a3cadacb56f md5: fdf0850d6d1496f33e3996e377f605ed @@ -10029,6 +11923,29 @@ packages: purls: [] size: 794791 timestamp: 1742451369695 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-19.1.7-h6dc3340_2.conda + sha256: ec07ebaa226792f4e2bf0f5dba50325632a7474d5f04b951d8291be70af215da + md5: 9f7810b7c0a731dbc84d46d6005890ef + depends: + - libcxx >=19.1.7 + - libcxx-headers >=19.1.7,<19.1.8.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 23000 + timestamp: 1764648270121 +- conda: https://conda.anaconda.org/conda-forge/noarch/libcxx-headers-19.1.7-h707e725_2.conda + sha256: 36485e6807e03a4f15a8018ec982457a9de0a1318b4b49a44c5da75849dbe24f + md5: de91b5ce46dc7968b6e311f9add055a2 + depends: + - __unix + constrains: + - libcxx-devel 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 830747 + timestamp: 1764647922410 - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 md5: c277e0a4d549b03ac1e9d6cbbe3d017b @@ -10136,6 +12053,19 @@ packages: purls: [] size: 76643 timestamp: 1763549731408 +- 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 - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.3-heffb93a_0.conda sha256: d11b3a6ce5b2e832f430fd112084533a01220597221bee16d6c7dc3947dffba6 md5: 222e0732a1d0780a622926265bee14ef @@ -10148,6 +12078,18 @@ packages: purls: [] size: 74058 timestamp: 1763549886493 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda + sha256: 8d9d79b2de7d6f335692391f5281607221bf5d040e6724dad4c4d77cd603ce43 + md5: a684eb8a19b2aa68fde0267df172a1e3 + depends: + - __osx >=10.13 + constrains: + - expat 2.7.4.* + license: MIT + license_family: MIT + purls: [] + size: 74578 + timestamp: 1771260142624 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.3-haf25636_0.conda sha256: fce22610ecc95e6d149e42a42fbc3cc9d9179bd4eb6232639a60f06e080eec98 md5: b79875dbb5b1db9a4a22a4520f918e1a @@ -10160,6 +12102,18 @@ packages: purls: [] size: 67800 timestamp: 1763549994166 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + sha256: 03887d8080d6a8fe02d75b80929271b39697ecca7628f0657d7afaea87761edf + md5: a92e310ae8dfc206ff449f362fc4217f + depends: + - __osx >=11.0 + constrains: + - expat 2.7.4.* + license: MIT + license_family: MIT + purls: [] + size: 68199 + timestamp: 1771260020767 - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.3-hac47afa_0.conda sha256: 844ab708594bdfbd7b35e1a67c379861bcd180d6efe57b654f482ae2f7f5c21e md5: 8c9e4f1a0e688eef2e95711178061a0f @@ -10357,6 +12311,20 @@ packages: purls: [] size: 1042798 timestamp: 1765256792743 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 + md5: 0aa00f03f9e39fb9876085dee11a85d4 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 he0feb66_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1041788 + timestamp: 1771378212382 - conda: https://conda.anaconda.org/conda-forge/osx-64/libgcc-15.2.0-h08519bb_14.conda sha256: e300407b7f24d320e1e16277949db9d10cc8577004f839fe21e195933f8e3028 md5: ad31de7df92caf04a70d0d8dc48d9ecd @@ -10383,6 +12351,19 @@ packages: purls: [] size: 422960 timestamp: 1764839601296 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgcc-15.2.0-h08519bb_18.conda + sha256: 83366f11615ab234aa1e0797393f9e07b78124b5a24c4a9f8af0113d02df818e + md5: 9a5cb96e43f5c2296690186e15b3296f + depends: + - _openmp_mutex + constrains: + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 423025 + timestamp: 1771378225170 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_16.conda sha256: 646c91dbc422fe92a5f8a3a5409c9aac66549f4ce8f8d1cab7c2aa5db789bb69 md5: 8b216bac0de7a9d60f3ddeba2515545c @@ -10396,6 +12377,19 @@ packages: purls: [] size: 402197 timestamp: 1765258985740 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda + sha256: 1d9c4f35586adb71bcd23e31b68b7f3e4c4ab89914c26bed5f2859290be5560e + md5: 92df6107310b1fff92c4cc84f0de247b + depends: + - _openmp_mutex + constrains: + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 401974 + timestamp: 1771378877463 - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_16.conda sha256: 24984e1e768440ba73021f08a1da0c1ec957b30d7071b9a89b877a273d17cae8 md5: 1edb8bd8e093ebd31558008e9cb23b47 @@ -10421,6 +12415,16 @@ packages: purls: [] size: 2597400 timestamp: 1740240211859 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_118.conda + sha256: 1abc6a81ee66e8ac9ac09a26e2d6ad7bba23f0a0cc3a6118654f036f9c0e1854 + md5: 06901733131833f5edd68cf3d9679798 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3084533 + timestamp: 1771377786730 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_14.conda sha256: 48a77fde940b4b877c0ed24efd562c135170a46d100c07cd2d7b67e842e30642 md5: 6c13aaae36d7514f28bd5544da1a7bb8 @@ -10441,6 +12445,16 @@ packages: purls: [] size: 27256 timestamp: 1765256804124 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 + md5: d5e96b1ed75ca01906b3d2469b4ce493 + depends: + - libgcc 15.2.0 he0feb66_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27526 + timestamp: 1771378224552 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.25.1-h3f43e3d_1.conda sha256: 50a9e9815cf3f5bce1b8c5161c0899cc5b6c6052d6d73a4c27f749119e607100 md5: 2f4de899028319b27eb7a4023be5dfd2 @@ -10501,6 +12515,18 @@ packages: purls: [] size: 27215 timestamp: 1765256845586 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda + sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee + md5: 9063115da5bc35fdc3e1002e69b9ef6e + depends: + - libgfortran5 15.2.0 h68bc16d_18 + constrains: + - libgfortran-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27523 + timestamp: 1771378269450 - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_14.conda sha256: 59d0eb2198e703949c4b59cffa5f7b8936447531bd96d69799b80441a4139418 md5: c11e0acbe6ba3df9a30dbe7f839cbd99 @@ -10525,6 +12551,18 @@ packages: purls: [] size: 139002 timestamp: 1764839892631 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_18.conda + sha256: fb06c2a2ef06716a0f2a6550f5d13cdd1d89365993068512b7ae3c34e6e665d9 + md5: 34a9f67498721abcfef00178bcf4b190 + depends: + - libgfortran5 15.2.0 hd16e46c_18 + constrains: + - libgfortran-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 139761 + timestamp: 1771378423828 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_16.conda sha256: 68a6c1384d209f8654112c4c57c68c540540dd8e09e17dd1facf6cf3467798b5 md5: 11e09edf0dde4c288508501fe621bab4 @@ -10537,6 +12575,18 @@ packages: purls: [] size: 138630 timestamp: 1765259217400 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda + sha256: 63f89087c3f0c8621c5c89ecceec1e56e5e1c84f65fc9c5feca33a07c570a836 + md5: 26981599908ed2205366e8fc91b37fc6 + depends: + - libgfortran5 15.2.0 hdae7583_18 + constrains: + - libgfortran-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 138973 + timestamp: 1771379054939 - conda: https://conda.anaconda.org/conda-forge/win-64/libgfortran-15.2.0-h719f0c7_16.conda sha256: 88b1a14435c4252657dd0173e95cb1d6e5251e44bfc19b85fcc7ea690ca5c88c md5: 15a5c996dd00931cc1da361fd04c1e22 @@ -10557,6 +12607,14 @@ packages: purls: [] size: 509153 timestamp: 1743911443629 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-64-14.3.0-h660b60f_1.conda + sha256: b60e918409b71302ee61b61080b1b254a902c03fbcbb415c81925dc016c5990e + md5: 731190552d91ade042ddf897cfb361aa + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 551342 + timestamp: 1756238221735 - conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-arm64-13.2.0-h5d7a38c_3.conda sha256: 932daa12d7af965db25cd08485031ca857a91886c80d56b02365d4636729362b md5: 54386854330df39e779228c7922379a5 @@ -10565,6 +12623,14 @@ packages: purls: [] size: 1964427 timestamp: 1707330674197 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-arm64-14.3.0-hc965647_1.conda + sha256: f6ecc12e02a30ab7ee7a8b7285e4ffe3c2452e43885ce324b85827b97659a8c8 + md5: c1b69e537b3031d0f5af780b432ce511 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 2035634 + timestamp: 1756233109102 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_14.conda sha256: a32c45c9652dfd832fb860898f818fb34e6ad47933fcce24cf323bf0b6914f24 md5: 3078a2a9a58566a54e579b41b9e88c84 @@ -10591,6 +12657,19 @@ packages: purls: [] size: 2480559 timestamp: 1765256819588 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 + md5: 646855f357199a12f02a87382d429b75 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 2482475 + timestamp: 1771378241063 - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_14.conda sha256: eb78e8270859ba927d11db2f4f0f05b8e83fca82ff039e4236a4cef97fda16ec md5: 0f4173df0120daf2b2084a55960048e8 @@ -10615,6 +12694,18 @@ packages: purls: [] size: 1061950 timestamp: 1764839609607 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_18.conda + sha256: ddaf9dcf008c031b10987991aa78643e03c24a534ad420925cbd5851b31faa11 + md5: ca52daf58cea766656266c8771d8be81 + depends: + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1062274 + timestamp: 1771378232014 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_16.conda sha256: 9fb7f4ff219e3fb5decbd0ee90a950f4078c90a86f5d8d61ca608c913062f9b0 md5: 265a9d03461da24884ecc8eb58396d57 @@ -10625,8 +12716,20 @@ packages: license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 598291 - timestamp: 1765258993165 + size: 598291 + timestamp: 1765258993165 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda + sha256: 91033978ba25e6a60fb86843cf7e1f7dc8ad513f9689f991c9ddabfaf0361e7e + md5: c4a6f7989cffb0544bfd9207b6789971 + depends: + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 598634 + timestamp: 1771378886363 - conda: https://conda.anaconda.org/conda-forge/win-64/libgfortran5-15.2.0-h44d81a7_16.conda sha256: f7a411d0f08c5ce309a75a6c34649d14df25c8f40b875b9f2cef3e13a111c827 md5: bdad99bd951227c33aea83249e239020 @@ -10656,6 +12759,22 @@ packages: purls: [] size: 3670602 timestamp: 1765223125237 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.86.4-he378b5c_0.conda + sha256: e305f7b1f2202d4efcdb8856abb28d79dc012d85a2155fbfbfee96069e017073 + md5: 2d02b60ec23066e45c578c1524e9ca12 + 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 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 4124444 + timestamp: 1771293559119 - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.3-h0c9aed9_0.conda sha256: 84b74fc81fff745f3d21a26c317ace44269a563a42ead3500034c27e407e1021 md5: c2d5b6b790ef21abac0b5331094ccb56 @@ -10712,6 +12831,16 @@ packages: purls: [] size: 603284 timestamp: 1765256703881 +- 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/win-64/libgomp-15.2.0-h8ee18e1_16.conda sha256: 9c86aadc1bd9740f2aca291da8052152c32dd1c617d5d4fd0f334214960649bb md5: ab8189163748f95d4cb18ea1952943c3 @@ -11074,6 +13203,36 @@ packages: purls: [] size: 25876220 timestamp: 1764314088538 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm19-19.1.7-h56e7563_2.conda + sha256: 375a634873b7441d5101e6e2a9d3a42fec51be392306a03a2fa12ae8edecec1a + md5: 05a54b479099676e75f80ad0ddd38eff + depends: + - __osx >=10.13 + - 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: 28801374 + timestamp: 1757354631264 +- 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/win-64/libllvm19-19.1.7-h830ff33_2.conda sha256: a10457abcb83964bfaf6ba48dcae013823a3ed6ffa988623f744f56156e24721 md5: f5a11003ca45a1c81eb72d987cff65b5 @@ -11612,6 +13771,18 @@ packages: purls: [] size: 4155341 timestamp: 1740240344242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_18.conda + sha256: e03ed186eefb46d7800224ad34bad1268c9d19ecb8f621380a50601c6221a4a7 + md5: ad3a0e2dc4cce549b2860e2ef0e6d75b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14.3.0 + - libstdcxx >=14.3.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 7949259 + timestamp: 1771377982207 - conda: https://conda.anaconda.org/conda-forge/osx-64/libsigtool-0.1.3-hc0f2934_0.conda sha256: f87b743d5ab11c1a8ddd800dd9357fc0fabe47686068232ddc1d1eed0d7321ec md5: 3576aba85ce5e9ab15aa0ea376ab864b @@ -11809,6 +13980,19 @@ packages: purls: [] size: 5856456 timestamp: 1765256838573 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e + md5: 1b08cd684f34175e4514474793d44bcb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 he0feb66_18 + constrains: + - libstdcxx-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 5852330 + timestamp: 1771378262446 - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.3.0-hc03c837_102.conda sha256: abc89056d4ca7debe938504b3b6d9ccc6d7a0f0b528fe3409230636a21e81002 md5: aa38de2738c5f4a72a880e3d31ffe8b4 @@ -11819,6 +14003,16 @@ packages: purls: [] size: 12873130 timestamp: 1740240239655 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_118.conda + sha256: b1c3824769b92a1486bf3e2cc5f13304d83ae613ea061b7bc47bb6080d6dfdba + md5: 865a399bce236119301ebd1532fced8d + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 20171098 + timestamp: 1771377827750 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_14.conda sha256: 63336f51b88029a9557a430aecbb08a11365aa03ec47ec8d14e542fec5dc80fb md5: 9531f671a13eec0597941fa19e489b96 @@ -12483,6 +14677,23 @@ packages: purls: [] size: 93610 timestamp: 1764309933421 +- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-19.1.7-hb0207f0_2.conda + sha256: 8d042ee522bc9eb12c061f5f7e53052aeb4f13e576e624c8bebaf493725b95a0 + md5: 0f79b23c03d80f22ce4fe0022d12f6d2 + depends: + - __osx >=10.13 + - libllvm19 19.1.7 h56e7563_2 + - llvm-tools-19 19.1.7 h879f4bc_2 + constrains: + - llvmdev 19.1.7 + - llvm 19.1.7 + - clang 19.1.7 + - clang-tools 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 87962 + timestamp: 1757355027273 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-18.1.8-default_h3f38c9c_11.conda sha256: a3287ee1f918792a038a5d3cb6160d7dd6b9526399606c759ae6ccd1b0cc54a8 md5: 83cd54257892cb0c1318eab9eb47576d @@ -12504,6 +14715,23 @@ packages: purls: [] size: 94531 timestamp: 1764314372410 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19.1.7-h855ad52_2.conda + sha256: 09750c33b5d694c494cad9eafda56c61a62622264173d760341b49fb001afe82 + md5: 3e3ac06efc5fdc1aa675ca30bf7d53df + depends: + - __osx >=11.0 + - libllvm19 19.1.7 h8e0c9ce_2 + - llvm-tools-19 19.1.7 h91fd4e7_2 + constrains: + - llvm 19.1.7 + - llvmdev 19.1.7 + - clang-tools 19.1.7 + - clang 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 88390 + timestamp: 1757353535760 - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-tools-19.1.7-h752b59f_2.conda sha256: 439ce0b6c7e5e37b368fa1170b91b508b56a105e32b15d35d82cc3e964b83238 md5: 7f24c6c3a50f271f3a3af1ffc1cfff6c @@ -12556,6 +14784,34 @@ packages: purls: [] size: 23269022 timestamp: 1764314260766 +- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-19-19.1.7-h879f4bc_2.conda + sha256: fd281acb243323087ce672139f03a1b35ceb0e864a3b4e8113b9c23ca1f83bf0 + md5: bf644c6f69854656aa02d1520175840e + depends: + - __osx >=10.13 + - libcxx >=19 + - libllvm19 19.1.7 h56e7563_2 + - 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: 17198870 + timestamp: 1757354915882 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19-19.1.7-h91fd4e7_2.conda + sha256: 73f9506f7c32a448071340e73a0e8461e349082d63ecc4849e3eb2d1efc357dd + md5: 8237b150fcd7baf65258eef9a0fc76ef + depends: + - __osx >=11.0 + - libcxx >=19 + - libllvm19 19.1.7 h8e0c9ce_2 + - 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: 16376095 + timestamp: 1757353442671 - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 md5: 9de5350a85c4a20c685259b889aa6393 @@ -12674,6 +14930,21 @@ packages: version: 2.1.5 sha256: 823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb requires_python: '>=3.7' +- 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/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl + name: markupsafe + version: 3.0.3 + sha256: d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e + 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 @@ -12957,6 +15228,26 @@ packages: - metatensor-torch>=0.8.0,<0.9 - metatensor-operations>=0.4.0,<0.5 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/7a/4b/8e57c02768e8daf0b6833345e1b8a2472a73489b24d6157ed332cf224d67/metatomic_torch-0.1.8-py3-none-macosx_11_0_arm64.whl + name: metatomic-torch + version: 0.1.8 + sha256: e69c3c5dba312563d3a89efd4df4c1ddb094fa973e8bbb69d70bf40d3c3a01e4 + requires_dist: + - torch>=2.1,<2.11 + - vesin + - metatensor-torch>=0.8.0,<0.9 + - metatensor-operations>=0.4.0,<0.5 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ea/29/052418062fe9d97fada027b4ed451e3c378a149f58202f5f0ab3bec58f47/metatomic_torch-0.1.8-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: metatomic-torch + version: 0.1.8 + sha256: fefb57f3f3ff76a8d3ee0ff14ee4447615a52ae46ec09ae417d09c15644a73ae + requires_dist: + - torch>=2.1,<2.11 + - vesin + - metatensor-torch>=0.8.0,<0.9 + - metatensor-operations>=0.4.0,<0.5 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/ce/85/1607598424a7ee8bdd3dd6f7b47bbf79907c8b4ff57d6883da05ec6560dd/metatrain-2025.12-py3-none-any.whl name: metatrain version: '2025.12' @@ -13412,6 +15703,26 @@ packages: - pkg:pypi/numpy?source=compressed-mapping size: 8757015 timestamp: 1768085678045 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py312h33ff503_1.conda + sha256: fec4d37e1a7c677ddc07bb968255df74902733398b77acc1d05f9dc599e879df + md5: 3569a8fca2dd3202e4ab08f42499f6d3 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.12.* *_cp312 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8757566 + timestamp: 1770098484112 - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.3.5-py312ha3982b3_0.conda sha256: 62c2a6fb30fec82f8d46defcf33c94a04d5c890ce02b3ddeeda3263f9043688c md5: 6941ace329a1f088d1b3b399369aecec @@ -13468,6 +15779,25 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 7977192 timestamp: 1768085565414 +- conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.2-py312hb34da66_1.conda + sha256: e9acaaafe6a0a698d4d759d860fc8a617724a3031ae1918f761e69297e543a3e + md5: c06b511affcf74a79b1852ae7b722035 + depends: + - python + - __osx >=10.13 + - libcxx >=19 + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.12.* *_cp312 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 7978246 + timestamp: 1770098377108 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.1-py312he281c53_0.conda sha256: f28e86ce957cad03881148e81d548edcae9e093f6bab5f56d4e0fec608a0d7f7 md5: 9f51075d9ea979c5cbca44ac34b9623f @@ -13488,6 +15818,26 @@ packages: - pkg:pypi/numpy?source=compressed-mapping size: 6839209 timestamp: 1768085582339 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py312he281c53_1.conda + sha256: 7fd2f1a33b244129dcc2163304d103a7062fc38f01fe13945c9ea95cef12b954 + md5: 4afbe6ffff0335d25f3c5cc78b1350a4 + depends: + - python + - libcxx >=19 + - __osx >=11.0 + - python 3.12.* *_cpython + - libblas >=3.9.0,<4.0a0 + - python_abi 3.12.* *_cp312 + - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 6840961 + timestamp: 1770098400654 - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.1-py312ha72d056_0.conda sha256: 06d2acce4c5cfe230213c4bc62823de3fa032d053f83c93a28478c7b8ee769bc md5: e06f225f5bf5784b3412b21a2a44da72 @@ -14139,6 +16489,70 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d6/71/5026395b290ff404b836e636f51d7297e6c83beceaa87c592718747e670f/pillow-12.1.1-cp312-cp312-macosx_11_0_arm64.whl + name: pillow + version: 12.1.1 + sha256: adebb5bee0f0af4909c30db0d890c773d1a92ffe83da908e2e9e720f8edf3984 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma>=5 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- 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 + name: pillow + version: 12.1.1 + sha256: 7aac39bcf8d4770d089588a2e1dd111cbaa42df5a94be3114222057d68336bd0 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma>=5 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda sha256: b67692da1c0084516ac1c9ada4d55eaf3c5891b54980f30f3f444541c2706f1e md5: c55515ca43c6444d2572e0f0d93cb6b9 @@ -14294,6 +16708,18 @@ packages: - pkg:pypi/platformdirs?source=compressed-mapping size: 25742 timestamp: 1771119110671 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + sha256: 7f263219cecf0ba6d74c751efa60c4676ce823157ca90aa43ebba5ac615ca0fa + md5: 4fefefb892ce9cc1539405bec2f1a6cd + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=compressed-mapping + size: 25643 + timestamp: 1771233827084 - conda: https://conda.anaconda.org/conda-forge/linux-64/plumed-2.9.2-mpi_openmpi_h02da92d_0.conda sha256: bb0879d5e6856288217d61470b308cbd65d43b061245651e5af6ba6824080823 md5: 08765a6ad1ec9bfc6655ea4bc5ccff52 @@ -15034,6 +17460,15 @@ packages: - markdown-it-py>=2.2.0 - pygments>=2.13.0,<3.0.0 requires_python: '>=3.8.0' +- pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + name: rich + version: 14.3.3 + sha256: 793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d + requires_dist: + - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' + - markdown-it-py>=2.2.0 + - pygments>=2.13.0,<3.0.0 + requires_python: '>=3.8.0' - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl name: rpds-py version: 0.30.0 @@ -15510,6 +17945,22 @@ packages: - pkg:pypi/scipy?source=hash-mapping size: 13802410 timestamp: 1768801119235 +- conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-64-26.0-h62b880e_7.conda + sha256: 7e7e2556978bc9bd9628c6e39138c684082320014d708fbca0c9050df98c0968 + md5: 68a978f77c0ba6ca10ce55e188a21857 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4948 + timestamp: 1771434185960 +- conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-arm64-26.0-ha3f98da_7.conda + sha256: fabfe031ede99898cb2b0b805f6c0d64fcc24ecdb444de3a83002d8135bf4804 + md5: 5f0ebbfea12d8e5bddff157e271fdb2f + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4971 + timestamp: 1771434195389 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.1-pyh332efcf_0.conda sha256: 89d5bb48047e7e27aa52a3a71d6ebf386e5ee4bdbd7ca91d653df9977eca8253 md5: cb72cedd94dd923c6a9405a3d3b1c018 @@ -15848,6 +18299,17 @@ packages: purls: [] size: 221236 timestamp: 1725491044729 +- conda: https://conda.anaconda.org/conda-forge/osx-64/tapi-1600.0.11.8-h8d8e812_0.conda + sha256: 2602632f7923fd59042a897bfb22f050d78f2b5960d53565eae5fa6a79308caa + md5: aae272355bc3f038e403130a5f6f5495 + depends: + - libcxx >=19.0.0.a0 + - __osx >=10.13 + - ncurses >=6.5,<7.0a0 + license: NCSA + purls: [] + size: 213480 + timestamp: 1762535196805 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1300.6.5-h03f4b80_0.conda sha256: 37cd4f62ec023df8a6c6f9f6ffddde3d6620a83cbcab170a8fff31ef944402e5 md5: b703bc3e6cba5943acf0e5f987b5d0e2 @@ -15860,6 +18322,17 @@ packages: purls: [] size: 207679 timestamp: 1725491499758 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1600.0.11.8-h997e182_0.conda + sha256: dcb678fa77f448fa981bf3783902afe09b8838436f3092e9ecaf6a718c87f642 + md5: 347261d575a245cb6111fb2cb5a79fc7 + depends: + - libcxx >=19.0.0.a0 + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: NCSA + purls: [] + size: 199699 + timestamp: 1762535277608 - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda sha256: abd9a489f059fba85c8ffa1abdaa4d515d6de6a3325238b8e81203b913cf65a9 md5: 0f9817ffbe25f9e69ceba5ea70c52606 @@ -16261,6 +18734,16 @@ packages: - rich>=10.11.0 - annotated-doc>=0.0.2 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl + name: typer + version: 0.24.1 + sha256: 112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e + requires_dist: + - click>=8.2.1 + - shellingham>=1.3.0 + - rich>=12.3.0 + - annotated-doc>=0.0.2 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/c8/0a/4aca634faf693e33004796b6cee0ae2e1dba375a800c16ab8d3eff4bb800/typer_slim-0.21.1-py3-none-any.whl name: typer-slim version: 0.21.1 @@ -16278,6 +18761,13 @@ packages: requires_dist: - typer>=0.23.1 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a7/24/5480c20380dfd18cf33d14784096dca45a24eae6102e91d49a718d3b6855/typer_slim-0.24.0-py3-none-any.whl + name: typer-slim + version: 0.24.0 + sha256: d5d7ee1ee2834d5020c7c616ed5e0d0f29b9a4b1dd283bdebae198ec09778d0e + requires_dist: + - typer>=0.24.0 + requires_python: '>=3.10' - pypi: https://download.pytorch.org/whl/typing_extensions-4.15.0-py3-none-any.whl name: typing-extensions version: 4.15.0 diff --git a/pixi.toml b/pixi.toml index 06c072e6f..f92e26f98 100644 --- a/pixi.toml +++ b/pixi.toml @@ -56,6 +56,7 @@ nwchem = {features = ["nwchem"]} docs = {features = ["docs"]} rel = {features = ["metatomic", "release"]} serve = {features = ["serve"]} +dev-serve-mta = {features = ["serve", "metatomic", "develop"]} [feature.metatomic] # vesin torch has a wheel issue with macos x86_64 From d3927cd75069f4d4d71f3ac9d3599d502b94a580 Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 08:49:11 +0100 Subject: [PATCH 12/15] fix: eliminate AtomMatrix type collision in serve mode Replace rgpot::PotentialBase virtual interface with a flat-array ForceCallback (std::function) to avoid the name collision between eOn's Eigen-based AtomMatrix and rgpot's custom AtomMatrix type. Both were defined at global scope, causing segfaults when capnp dispatched through the wrong vtable layout. The serve code now only links ptlrpc_dep (capnp schema) from rgpot with with_rpc_client_only:true -- no rgpot types cross the TU boundary. ServeMode.cpp wraps eOn's Potential::force() in a lambda, and ServeRpcServer.cpp converts capnp data to flat arrays directly. --- client/CommandLine.cpp | 37 +++---- client/Parameters.cpp | 3 +- client/ServeMode.cpp | 99 +++++------------- client/ServeMode.h | 9 +- client/ServeRpcServer.cpp | 146 +++++++++++++++------------ client/ServeRpcServer.h | 46 +++++---- client/gtests/ServeSpecParseTest.cpp | 2 +- client/meson.build | 15 ++- 8 files changed, 172 insertions(+), 185 deletions(-) diff --git a/client/CommandLine.cpp b/client/CommandLine.cpp index e74355361..0a9923c9c 100644 --- a/client/CommandLine.cpp +++ b/client/CommandLine.cpp @@ -69,23 +69,26 @@ void commandLine(int argc, char **argv) { "p,potential", "The potential (e.g. qsc, lj, eam_al)", cxxopts::value()) #ifdef WITH_SERVE_MODE - ("serve", "Serve potential(s) over rgpot Cap'n Proto RPC. " - "Spec: 'potential:port' or 'pot1:port1,pot2:port2'", + ("serve", + "Serve potential(s) over rgpot Cap'n Proto RPC. " + "Spec: 'potential:port' or 'pot1:port1,pot2:port2'", cxxopts::value())( - "serve-host", "Host to bind RPC server(s) to", - cxxopts::value()->default_value("localhost"))( - "serve-port", "Port for single-potential serve mode (used with -p)", - cxxopts::value()->default_value("12345"))( - "replicas", "Number of replicated server instances (used with -p)", - cxxopts::value()->default_value("1"))( - "gateway", "Run a single gateway port backed by N pool instances " - "(use with -p and --replicas)", - cxxopts::value()->default_value("false"))( - "config", "Config file for potential parameters (INI format, " - "e.g. [Metatomic] model_path=model.pt)", - cxxopts::value()) + "serve-host", "Host to bind RPC server(s) to", + cxxopts::value()->default_value("localhost"))( + "serve-port", "Port for single-potential serve mode (used with -p)", + cxxopts::value()->default_value("12345"))( + "replicas", "Number of replicated server instances (used with -p)", + cxxopts::value()->default_value("1"))( + "gateway", + "Run a single gateway port backed by N pool instances " + "(use with -p and --replicas)", + cxxopts::value()->default_value("false"))( + "config", + "Config file for potential parameters (INI format, " + "e.g. [Metatomic] model_path=model.pt)", + cxxopts::value()) #endif - ("h,help", "Print usage"); + ("h,help", "Print usage"); try { auto result = options.parse(argc, argv); @@ -195,8 +198,8 @@ void commandLine(int argc, char **argv) { } // Config-driven serve (no -p or --serve, just --config with [Serve]) - if (!pflag && !sflag && !mflag && !cflag && - result.count("config") && !result.count("serve") && + if (!pflag && !sflag && !mflag && !cflag && result.count("config") && + !result.count("serve") && (!params.serve_options.endpoints.empty() || params.serve_options.gateway_port > 0 || params.serve_options.replicas > 1)) { diff --git a/client/Parameters.cpp b/client/Parameters.cpp index 6fc678b64..afb581f61 100644 --- a/client/Parameters.cpp +++ b/client/Parameters.cpp @@ -893,8 +893,7 @@ int Parameters::load(FILE *file) { } // [Serve] if (ini.FindKey("Serve") != -1) { - serve_options.host = - ini.GetValue("Serve", "host", serve_options.host); + serve_options.host = ini.GetValue("Serve", "host", serve_options.host); serve_options.port = static_cast( ini.GetValueL("Serve", "port", serve_options.port)); serve_options.replicas = static_cast( diff --git a/client/ServeMode.cpp b/client/ServeMode.cpp index adc00c6fa..aa112fcd4 100644 --- a/client/ServeMode.cpp +++ b/client/ServeMode.cpp @@ -14,10 +14,10 @@ * @file ServeMode.cpp * @brief Multi-model RPC serving for eOn potentials. * - * Wraps any eOn Potential (including Metatomic ML models) as an rgpot - * PotentialBase and serves it over Cap'n Proto RPC. Supports serving - * multiple potentials concurrently on different ports, each in its own - * thread with its own event loop. + * Wraps any eOn Potential as a flat-array ForceCallback and serves it + * over Cap'n Proto RPC. Uses ForceCallback (std::function taking flat + * arrays) to completely avoid the AtomMatrix type collision between + * eOn's Eigen-based AtomMatrix and rgpot's custom AtomMatrix. * * This translation unit includes eOn's Potential.h. The Cap'n Proto server * code is in ServeRpcServer.cpp (separate TU to avoid naming collision with @@ -37,66 +37,19 @@ #include -#include "rgpot/Potential.hpp" -#include "rgpot/types/AtomMatrix.hpp" +namespace { -using rgpot::types::AtomMatrix; - -/** - * @class EonPotentialAdapter - * @brief Adapts eOn's Potential::force() to rgpot's PotentialBase interface. - * - * This allows any eOn potential (LJ, EAM, Metatomic, VASP, LAMMPS, etc.) - * to be served over rgpot's Cap'n Proto RPC protocol without modification. - */ -class EonPotentialAdapter : public rgpot::PotentialBase { -public: - explicit EonPotentialAdapter(std::shared_ptr<::Potential> pot) - : rgpot::PotentialBase(rgpot::PotType::UNKNOWN), - m_potential(std::move(pot)) {} - - std::pair - operator()(const AtomMatrix &positions, const std::vector &atmtypes, - const std::array, 3> &box) override { - long nAtoms = static_cast(positions.rows()); - - // Flatten positions: eOn expects [x1,y1,z1, x2,y2,z2, ...] - std::vector flat_pos(nAtoms * 3); - for (long i = 0; i < nAtoms; ++i) { - flat_pos[3 * i + 0] = positions(i, 0); - flat_pos[3 * i + 1] = positions(i, 1); - flat_pos[3 * i + 2] = positions(i, 2); - } - - // Flatten box (3x3 row-major) - double flat_box[9]; - for (int i = 0; i < 3; ++i) { - for (int j = 0; j < 3; ++j) { - flat_box[i * 3 + j] = box[i][j]; - } - } - - // Call eOn's potential - std::vector flat_forces(nAtoms * 3, 0.0); - double energy = 0.0; +/// Create a ForceCallback that wraps an eOn Potential's force() method. +ForceCallback makeForceCallback(std::shared_ptr<::Potential> pot) { + return [pot = std::move(pot)](long nAtoms, const double *positions, + const int *atomicNrs, double *forces, + double *energy, const double *box) { double variance = 0.0; - m_potential->force(nAtoms, flat_pos.data(), atmtypes.data(), - flat_forces.data(), &energy, &variance, flat_box); - - // Convert back to Eigen matrix - AtomMatrix forces(nAtoms, 3); - for (long i = 0; i < nAtoms; ++i) { - forces(i, 0) = flat_forces[3 * i + 0]; - forces(i, 1) = flat_forces[3 * i + 1]; - forces(i, 2) = flat_forces[3 * i + 2]; - } - - return {energy, forces}; - } + pot->force(nAtoms, positions, atomicNrs, forces, energy, &variance, box); + }; +} -private: - std::shared_ptr<::Potential> m_potential; -}; +} // anonymous namespace // --------------------------------------------------------------------------- // Single-model serve @@ -115,10 +68,10 @@ void serveMode(const Parameters ¶ms, const std::string &host, return; } - auto adapter = std::make_unique(std::move(eon_pot)); + auto callback = makeForceCallback(std::move(eon_pot)); // Blocks until killed (runs Cap'n Proto event loop) - startRpcServer(std::move(adapter), host, port); + startRpcServer(std::move(callback), host, port); } // --------------------------------------------------------------------------- @@ -162,8 +115,8 @@ void serveMultiple(const std::vector &endpoints, return; } - auto adapter = std::make_unique(std::move(eon_pot)); - startRpcServer(std::move(adapter), ep.host, ep.port); + auto callback = makeForceCallback(std::move(eon_pot)); + startRpcServer(std::move(callback), ep.host, ep.port); }); } @@ -198,9 +151,8 @@ void serveReplicated(const Parameters ¶ms, const std::string &host, for (size_t i = 0; i < replicas; ++i) { uint16_t port = static_cast(base_port + i); - threads.emplace_back([¶ms, &host, port]() { - serveMode(params, host, port); - }); + threads.emplace_back( + [¶ms, &host, port]() { serveMode(params, host, port); }); } for (auto &t : threads) { @@ -226,7 +178,7 @@ void serveGateway(const Parameters ¶ms, const std::string &host, pool_size, std::string(magic_enum::enum_name(pot_type)), host, port); - std::vector> pool; + std::vector pool; pool.reserve(pool_size); for (size_t i = 0; i < pool_size; ++i) { @@ -236,8 +188,7 @@ void serveGateway(const Parameters ¶ms, const std::string &host, pool_size); return; } - pool.push_back( - std::make_unique(std::move(eon_pot))); + pool.push_back(makeForceCallback(std::move(eon_pot))); } spdlog::info("Pool ready, starting gateway server"); @@ -310,9 +261,9 @@ std::vector parseServeSpec(const std::string &spec) { std::transform(pot_str.begin(), pot_str.end(), pot_str.begin(), ::tolower); ServeEndpoint ep; - ep.potential = magic_enum::enum_cast(pot_str, - magic_enum::case_insensitive) - .value_or(PotType::UNKNOWN); + ep.potential = + magic_enum::enum_cast(pot_str, magic_enum::case_insensitive) + .value_or(PotType::UNKNOWN); if (ep.potential == PotType::UNKNOWN) { spdlog::error("Unknown potential type '{}'", pot_str); diff --git a/client/ServeMode.h b/client/ServeMode.h index aa386735d..8a4ca1af7 100644 --- a/client/ServeMode.h +++ b/client/ServeMode.h @@ -48,7 +48,8 @@ void serveMode(const Parameters ¶ms, const std::string &host, * Cap'n Proto event loop. All threads block until SIGINT/SIGTERM. * * @param endpoints List of {potential, host, port} configurations. - * @param params Base eOn parameters (potential type is overridden per endpoint). + * @param params Base eOn parameters (potential type is overridden per + * endpoint). */ void serveMultiple(const std::vector &endpoints, const Parameters ¶ms); @@ -59,7 +60,8 @@ void serveMultiple(const std::vector &endpoints, * Starts `replicas` threads, each serving the same potential type on * ports base_port, base_port+1, ..., base_port+replicas-1. * - * @param params The eOn parameters (potential_options.potential must be set). + * @param params The eOn parameters (potential_options.potential must be + * set). * @param host The hostname to listen on. * @param base_port The first port; replicas use base_port+0 .. base_port+N-1. * @param replicas Number of concurrent server instances. @@ -74,7 +76,8 @@ void serveReplicated(const Parameters ¶ms, const std::string &host, * behind a single gateway port. Incoming requests are dispatched round-robin * across the pool. This gives clients a single endpoint while spreading load. * - * @param params The eOn parameters (potential_options.potential must be set). + * @param params The eOn parameters (potential_options.potential must be + * set). * @param host The hostname to listen on. * @param port The gateway port. * @param pool_size Number of potential instances in the pool. diff --git a/client/ServeRpcServer.cpp b/client/ServeRpcServer.cpp index b4eebc876..0d97558e8 100644 --- a/client/ServeRpcServer.cpp +++ b/client/ServeRpcServer.cpp @@ -12,10 +12,14 @@ /** * @file ServeRpcServer.cpp - * @brief Cap'n Proto RPC server for rgpot PotentialBase instances. + * @brief Cap'n Proto RPC server using flat-array force callbacks. * * This translation unit does NOT include eOn's Potential.h to avoid naming * collision with the capnp-generated `Potential` interface class. + * + * Uses a ForceCallback (std::function taking flat arrays) instead of + * rgpot::PotentialBase to avoid the AtomMatrix type collision between + * eOn's Eigen-based AtomMatrix and rgpot's custom AtomMatrix. */ #include "ServeRpcServer.h" @@ -26,9 +30,6 @@ #include #include -#include "rgpot/types/AtomMatrix.hpp" -#include "rgpot/types/adapters/capnp/capnp_adapter.hpp" - // Cap'n Proto generated header (from Potentials.capnp). // This defines `class Potential` -- which collides with eOn's Potential class, // hence the separate translation unit. @@ -37,16 +38,16 @@ namespace { /** - * @class GenericPotImpl - * @brief Cap'n Proto RPC server implementation wrapping a PotentialBase. + * @class CallbackPotImpl + * @brief Cap'n Proto RPC server wrapping a flat-array ForceCallback. * - * Same pattern as rgpot's potserv -- receives ForceInput over RPC, dispatches - * to the polymorphic PotentialBase, returns PotentialResult. + * Receives ForceInput over RPC, extracts flat arrays, calls the callback, + * and returns PotentialResult. */ -class GenericPotImpl final : public Potential::Server { +class CallbackPotImpl final : public Potential::Server { public: - explicit GenericPotImpl(std::unique_ptr pot) - : m_potential(std::move(pot)) {} + explicit CallbackPotImpl(ForceCallback cb) + : m_callback(std::move(cb)) {} kj::Promise calculate(CalculateContext context) override { auto fip = context.getParams().getFip(); @@ -54,40 +55,56 @@ class GenericPotImpl final : public Potential::Server { KJ_REQUIRE(fip.getAtmnrs().size() == numAtoms, "AtomNumbers size mismatch"); - auto nativePositions = - rgpot::types::adapt::capnp::convertPositionsFromCapnp(fip.getPos(), - numAtoms); - auto nativeAtomTypes = - rgpot::types::adapt::capnp::convertAtomNumbersFromCapnp( - fip.getAtmnrs()); - auto nativeBoxMatrix = - rgpot::types::adapt::capnp::convertBoxMatrixFromCapnp(fip.getBox()); - - auto [energy, forces] = - (*m_potential)(nativePositions, nativeAtomTypes, nativeBoxMatrix); - + // Extract flat arrays from capnp + std::vector positions(numAtoms * 3); + auto capnpPos = fip.getPos(); + for (size_t i = 0; i < numAtoms * 3; ++i) { + positions[i] = capnpPos[i]; + } + + std::vector atomicNrs(numAtoms); + auto capnpAtmnrs = fip.getAtmnrs(); + for (size_t i = 0; i < numAtoms; ++i) { + atomicNrs[i] = capnpAtmnrs[i]; + } + + double box[9] = {}; + auto capnpBox = fip.getBox(); + for (size_t i = 0; i < 9 && i < capnpBox.size(); ++i) { + box[i] = capnpBox[i]; + } + + // Call the force callback + std::vector forces(numAtoms * 3, 0.0); + double energy = 0.0; + m_callback(static_cast(numAtoms), positions.data(), atomicNrs.data(), + forces.data(), &energy, box); + + // Serialize result back to capnp auto result = context.getResults(); auto pres = result.initResult(); pres.setEnergy(energy); auto forcesList = pres.initForces(numAtoms * 3); - rgpot::types::adapt::capnp::populateForcesToCapnp(forcesList, forces); + for (size_t i = 0; i < numAtoms * 3; ++i) { + forcesList.set(i, forces[i]); + } return kj::READY_NOW; } private: - std::unique_ptr m_potential; + ForceCallback m_callback; }; } // anonymous namespace -void startRpcServer(std::unique_ptr pot, - const std::string &host, uint16_t port) { +void startRpcServer(ForceCallback callback, const std::string &host, + uint16_t port) { spdlog::info("Starting Cap'n Proto RPC server on {}:{}", host, port); - capnp::EzRpcServer server(kj::heap(std::move(pot)), host, - port); + capnp::EzRpcServer server(kj::heap(std::move(callback)), + host, port); auto &waitScope = server.getWaitScope(); spdlog::info("Server ready on port {}. Ctrl+C to stop.", port); @@ -101,71 +118,76 @@ void startRpcServer(std::unique_ptr pot, namespace { /** - * @class PooledPotImpl - * @brief Cap'n Proto RPC server that dispatches across a pool of potentials. - * - * Incoming calculate() requests are assigned round-robin to the pool members. - * Each pool member is guarded by its own mutex so concurrent RPC calls are - * safe even though individual PotentialBase instances are not thread-safe. + * @class PooledCallbackPotImpl + * @brief Cap'n Proto RPC server dispatching across a pool of callbacks. */ -class PooledPotImpl final : public Potential::Server { +class PooledCallbackPotImpl final : public Potential::Server { public: - explicit PooledPotImpl( - std::vector> pool) - : m_pool(std::move(pool)), m_mutexes(m_pool.size()), + explicit PooledCallbackPotImpl(std::vector pool) + : m_pool(std::move(pool)), + m_mutexes(m_pool.size()), m_next(0) {} kj::Promise calculate(CalculateContext context) override { - // Round-robin selection - size_t idx = - m_next.fetch_add(1, std::memory_order_relaxed) % m_pool.size(); + size_t idx = m_next.fetch_add(1, std::memory_order_relaxed) % m_pool.size(); auto fip = context.getParams().getFip(); const size_t numAtoms = fip.getPos().size() / 3; - KJ_REQUIRE(fip.getAtmnrs().size() == numAtoms, - "AtomNumbers size mismatch"); + KJ_REQUIRE(fip.getAtmnrs().size() == numAtoms, "AtomNumbers size mismatch"); + + std::vector positions(numAtoms * 3); + auto capnpPos = fip.getPos(); + for (size_t i = 0; i < numAtoms * 3; ++i) { + positions[i] = capnpPos[i]; + } + + std::vector atomicNrs(numAtoms); + auto capnpAtmnrs = fip.getAtmnrs(); + for (size_t i = 0; i < numAtoms; ++i) { + atomicNrs[i] = capnpAtmnrs[i]; + } + + double box[9] = {}; + auto capnpBox = fip.getBox(); + for (size_t i = 0; i < 9 && i < capnpBox.size(); ++i) { + box[i] = capnpBox[i]; + } - auto nativePositions = - rgpot::types::adapt::capnp::convertPositionsFromCapnp(fip.getPos(), - numAtoms); - auto nativeAtomTypes = - rgpot::types::adapt::capnp::convertAtomNumbersFromCapnp( - fip.getAtmnrs()); - auto nativeBoxMatrix = - rgpot::types::adapt::capnp::convertBoxMatrixFromCapnp(fip.getBox()); + std::vector forces(numAtoms * 3, 0.0); + double energy = 0.0; - // Lock the selected pool member for the duration of the force call std::lock_guard lock(m_mutexes[idx]); - auto [energy, forces] = - (*m_pool[idx])(nativePositions, nativeAtomTypes, nativeBoxMatrix); + m_pool[idx](static_cast(numAtoms), positions.data(), atomicNrs.data(), + forces.data(), &energy, box); auto result = context.getResults(); auto pres = result.initResult(); pres.setEnergy(energy); auto forcesList = pres.initForces(numAtoms * 3); - rgpot::types::adapt::capnp::populateForcesToCapnp(forcesList, forces); + for (size_t i = 0; i < numAtoms * 3; ++i) { + forcesList.set(i, forces[i]); + } return kj::READY_NOW; } private: - std::vector> m_pool; + std::vector m_pool; std::vector m_mutexes; std::atomic m_next; }; } // anonymous namespace -void startPooledRpcServer( - std::vector> pool, - const std::string &host, uint16_t port) { +void startPooledRpcServer(std::vector pool, + const std::string &host, uint16_t port) { spdlog::info("Starting pooled RPC gateway on {}:{} with {} instances", host, port, pool.size()); - capnp::EzRpcServer server( - kj::heap(std::move(pool)), host, port); + capnp::EzRpcServer server(kj::heap(std::move(pool)), + host, port); auto &waitScope = server.getWaitScope(); spdlog::info("Gateway ready on port {}. Ctrl+C to stop.", port); diff --git a/client/ServeRpcServer.h b/client/ServeRpcServer.h index 67e6accc1..83e0ee0d4 100644 --- a/client/ServeRpcServer.h +++ b/client/ServeRpcServer.h @@ -11,40 +11,50 @@ */ #pragma once -#include "rgpot/Potential.hpp" #include +#include #include #include #include /** - * @brief Start a blocking Cap'n Proto RPC server for a given PotentialBase. + * @brief Callback type for potential energy/force evaluation. * - * This is an internal function used by serveMode(). It sets up the Cap'n Proto - * event loop and blocks until the process is killed. + * Flat-array interface that avoids any AtomMatrix type dependency, + * preventing collisions between eOn's Eigen-based AtomMatrix and + * rgpot's custom AtomMatrix. + * + * @param nAtoms Number of atoms. + * @param positions Flat array [x1,y1,z1, x2,y2,z2, ...] (nAtoms*3). + * @param atomicNrs Atomic numbers [Z1, Z2, ...] (nAtoms). + * @param forces Output forces [Fx1,Fy1,Fz1, ...] (nAtoms*3). + * @param energy Output energy (single double). + * @param box Simulation cell flat 3x3 row-major (9 doubles). + */ +using ForceCallback = std::function; + +/** + * @brief Start a blocking Cap'n Proto RPC server using a force callback. * * Defined in a separate translation unit to avoid naming collision between * eOn's `class Potential` and the capnp-generated `Potential` interface. * - * @param pot Ownership of the rgpot PotentialBase to serve. - * @param host The hostname to listen on. - * @param port The TCP port to listen on. + * @param callback Force evaluation function. + * @param host The hostname to listen on. + * @param port The TCP port to listen on. */ -void startRpcServer(std::unique_ptr pot, - const std::string &host, uint16_t port); +void startRpcServer(ForceCallback callback, const std::string &host, + uint16_t port); /** * @brief Start a blocking Cap'n Proto RPC server backed by a pool of - * PotentialBase instances dispatched round-robin. - * - * Creates a single gateway endpoint. Incoming RPC requests are dispatched - * to the next available potential instance in a round-robin fashion. This - * gives clients a single address while spreading computational load. + * force callbacks dispatched round-robin. * - * @param pool Vector of PotentialBase instances (ownership transferred). + * @param pool Vector of force callbacks (one per pool instance). * @param host The hostname to listen on. * @param port The TCP port to listen on. */ -void startPooledRpcServer( - std::vector> pool, - const std::string &host, uint16_t port); +void startPooledRpcServer(std::vector pool, + const std::string &host, uint16_t port); diff --git a/client/gtests/ServeSpecParseTest.cpp b/client/gtests/ServeSpecParseTest.cpp index fa57fb865..28a650a75 100644 --- a/client/gtests/ServeSpecParseTest.cpp +++ b/client/gtests/ServeSpecParseTest.cpp @@ -9,8 +9,8 @@ ** Repo: ** https://github.com/TheochemUI/eOn */ -#include "catch2/catch_amalgamated.hpp" #include "ServeMode.h" +#include "catch2/catch_amalgamated.hpp" TEST_CASE("parseServeSpec single endpoint", "[serve]") { auto eps = parseServeSpec("lj:12345"); diff --git a/client/meson.build b/client/meson.build index ba10c3aa9..c9d236c7b 100644 --- a/client/meson.build +++ b/client/meson.build @@ -562,23 +562,22 @@ if get_option('with_metatomic') endif if get_option('with_serve') - # rgpot-compatible RPC serve mode: wraps any eOn potential as an rgpot - # PotentialBase and serves it over Cap'n Proto RPC. + # rgpot-compatible RPC serve mode: wraps any eOn potential and serves it + # over Cap'n Proto RPC using the rgpot Potentials.capnp schema. + # Only links capnp-rpc and the generated schema (ptlrpc); does NOT link + # rgpot types to avoid the AtomMatrix name collision with eOn's Eigen.h. serve_capnp_dep = dependency('capnp-rpc', required: true) rgpot_serve_opts = { - 'with_rpc': true, - 'with_eigen': true, - 'pure_lib': false, - 'with_rpc_client_only': false, + 'with_rpc_client_only': true, + 'pure_lib': true, 'with_tests': false, 'with_examples': false, } rgpot_proj = subproject('rgpot', default_options: rgpot_serve_opts) - rgpot_serve_dep = rgpot_proj.get_variable('rgpot_dep') ptlrpc_dep = rgpot_proj.get_variable('ptlrpc_dep') _args += ['-DWITH_SERVE_MODE'] eonclib_sources += ['ServeMode.cpp', 'ServeRpcServer.cpp'] - _deps += [serve_capnp_dep, rgpot_serve_dep, ptlrpc_dep] + _deps += [serve_capnp_dep, ptlrpc_dep] endif _linkto += potentials From f48990a8629c5a57db6ef5c946ce1e8b3dfa6b3a Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 09:18:48 +0100 Subject: [PATCH 13/15] fix: pin fmt v11 for metatomic envs, update serve mode docs Torch 2.9 bundles fmt 11.2 internally; pixi's spdlog was compiled against pixi's fmt. With fmt>=12 the ABI mismatch caused linker errors when building metatomic+serve together. Pin fmt to v11 for the metatomic feature so both torch and spdlog use the same fmt ABI. Also adds towncrier fragment for the AtomMatrix collision fix and updates serve_mode.md with architecture notes and corrected Julia API. --- docs/newsfragments/316.fixed.md | 5 ++ docs/source/user_guide/serve_mode.md | 13 ++- pixi.lock | 125 +++++++++++++++++++++------ pixi.toml | 8 +- 4 files changed, 122 insertions(+), 29 deletions(-) create mode 100644 docs/newsfragments/316.fixed.md diff --git a/docs/newsfragments/316.fixed.md b/docs/newsfragments/316.fixed.md new file mode 100644 index 000000000..ee2946a48 --- /dev/null +++ b/docs/newsfragments/316.fixed.md @@ -0,0 +1,5 @@ +Fixed serve mode segfault caused by `AtomMatrix` type collision between eOn's +Eigen-based type and rgpot's custom type. Replaced the `rgpot::PotentialBase` +virtual interface with a flat-array `ForceCallback`, eliminating the name +collision entirely. The serve code now only links the capnp schema dependency +(`ptlrpc_dep`) from rgpot, not the full library. diff --git a/docs/source/user_guide/serve_mode.md b/docs/source/user_guide/serve_mode.md index c2cdeb48a..05c0e9f57 100644 --- a/docs/source/user_guide/serve_mode.md +++ b/docs/source/user_guide/serve_mode.md @@ -208,12 +208,21 @@ using ChemGP pot = RpcPotential("localhost", 12345, atmnrs, box) E, F = ChemGP.calculate(pot, positions) -# Use as a GP optimization oracle -oracle = make_rpc_oracle(pot, n_atoms) +# Use as a GP optimization oracle (gradient = -forces) +oracle = make_rpc_oracle(pot) ``` See the [ChemGP RPC tutorial](https://github.com/HaoZeke/ChemGP) for details. +## Architecture Notes + +The serve mode uses a **ForceCallback** (flat-array `std::function`) interface +internally, completely decoupling the eOn potential from the capnp server. +This avoids a type collision between eOn's Eigen-based `AtomMatrix` and rgpot's +custom `AtomMatrix` by never allowing both types to coexist in the same +translation unit. The capnp schema code is compiled in a separate TU +(`ServeRpcServer.cpp`) from the eOn potential wrapper (`ServeMode.cpp`). + ## Command Reference | Flag | Description | diff --git a/pixi.lock b/pixi.lock index ac16bcad8..3758b4e45 100644 --- a/pixi.lock +++ b/pixi.lock @@ -874,7 +874,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.10.0-h36df796_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-h1e990d8_2.conda @@ -987,7 +987,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.16.3-py312h7a1785b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/simple-dftd3-1.2.1-h3b12eaf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-hffee6e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-ha91398d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tblite-0.4.0-hd37a5e2_2.conda @@ -1094,7 +1094,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-11.2.0-h440487c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.10.0-h5692697_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-13.2.0-h1ca8e4b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-13.2.0-h252ada1_3.conda @@ -1200,7 +1200,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h98dc951_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-codesign-0.1.3-h98dc951_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/simple-dftd3-1.2.1-hb42fc24_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.16.0-h06f2c6e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1300.6.5-h03f4b80_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tblite-0.4.0-hb3fdf34_2.conda @@ -1892,7 +1892,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.10.0-h36df796_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-h1e990d8_2.conda @@ -1978,7 +1978,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.14.7-h813ae00_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.14.0-he64ecbb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-hffee6e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-ha91398d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tinyxml2-11.0.0-h3f2d84a_0.conda @@ -2079,7 +2079,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-11.2.0-h440487c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.10.0-h5692697_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-13.2.0-h1ca8e4b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-13.2.0-h252ada1_3.conda @@ -2167,7 +2167,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h98dc951_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-codesign-0.1.3-h98dc951_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.16.0-h06f2c6e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1300.6.5-h03f4b80_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tinyxml2-11.0.0-ha1acc90_0.conda @@ -2262,7 +2262,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/flang-19.1.7-hbeecb71_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flang_impl_win-64-19.1.7-h719f0c7_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flang_win-64-19.1.7-h719f0c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-12.1.0-h7f4e812_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-11.2.0-h1d4551f_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/fortran-compiler-1.11.0-h95e3450_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.6-nompi_hae35d4c_106.conda - conda: https://conda.anaconda.org/conda-forge/win-64/highfive-2.10.1-h90b5984_2.conda @@ -2325,7 +2325,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.15.1-h213852a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sccache-0.14.0-h18a1a76_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/spdlog-1.17.0-h9f585f1_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.16.0-hb1706eb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tinyxml2-11.0.0-he0c23c2_0.conda @@ -2433,7 +2433,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-hff5e90c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.11.0-h9bea470_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hbdf3cc3_18.conda @@ -2508,7 +2508,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.14.0-he64ecbb_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/spdlog-1.17.0-hab81395_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-ha91398d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.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 @@ -2606,7 +2606,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h784d473_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-11.2.0-h440487c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.11.0-h81a4f41_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-14.3.0-h3ef1dbf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-14.3.0-h6d03799_1.conda @@ -2687,7 +2687,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-arm64-26.0-ha3f98da_7.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/sigtool-codesign-0.1.3-h98dc951_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.16.0-h06f2c6e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1600.0.11.8-h997e182_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda @@ -4215,7 +4215,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/compilers-1.10.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.10.0-h1a2810e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.10.0-h36df796_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-h1e990d8_2.conda @@ -4280,7 +4280,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.14.0-he64ecbb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-hffee6e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-ha91398d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda @@ -4365,7 +4365,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.10.0-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.10.0-hba80287_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-11.2.0-h440487c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.10.0-h5692697_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-13.2.0-h1ca8e4b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-13.2.0-h252ada1_3.conda @@ -4435,7 +4435,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h98dc951_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-codesign-0.1.3-h98dc951_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.16.0-h06f2c6e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1300.6.5-h03f4b80_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/tomli-2.4.0-pyhcf101f3_0.conda @@ -4515,7 +4515,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/flang-19.1.7-hbeecb71_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flang_impl_win-64-19.1.7-h719f0c7_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flang_win-64-19.1.7-h719f0c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-12.1.0-h7f4e812_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-11.2.0-h1d4551f_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/fortran-compiler-1.11.0-h95e3450_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.6-nompi_hae35d4c_106.conda - conda: https://conda.anaconda.org/conda-forge/win-64/highfive-2.10.1-h90b5984_2.conda @@ -4564,7 +4564,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sccache-0.14.0-h18a1a76_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/spdlog-1.17.0-h9f585f1_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.16.0-hb1706eb_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.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/tomli-2.4.0-pyhcf101f3_0.conda @@ -5037,7 +5037,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/compilers-1.10.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.10.0-h1a2810e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.10.0-h36df796_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-h1e990d8_2.conda @@ -5102,7 +5102,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.14.0-he64ecbb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-hffee6e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-ha91398d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda @@ -5187,7 +5187,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.10.0-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.10.0-hba80287_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-11.2.0-h440487c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fortran-compiler-1.10.0-h5692697_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran-13.2.0-h1ca8e4b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gfortran_impl_osx-arm64-13.2.0-h252ada1_3.conda @@ -5257,7 +5257,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h98dc951_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-codesign-0.1.3-h98dc951_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.16.0-h06f2c6e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1300.6.5-h03f4b80_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/tomli-2.4.0-pyhcf101f3_0.conda @@ -5337,7 +5337,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/flang-19.1.7-hbeecb71_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flang_impl_win-64-19.1.7-h719f0c7_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flang_win-64-19.1.7-h719f0c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-12.1.0-h7f4e812_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-11.2.0-h1d4551f_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/fortran-compiler-1.11.0-h95e3450_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.6-nompi_hae35d4c_106.conda - conda: https://conda.anaconda.org/conda-forge/win-64/highfive-2.10.1-h90b5984_2.conda @@ -5386,7 +5386,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sccache-0.14.0-h18a1a76_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/spdlog-1.17.0-h9f585f1_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.16.0-hb1706eb_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.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/tomli-2.4.0-pyhcf101f3_0.conda @@ -8407,6 +8407,18 @@ packages: purls: [] size: 9707 timestamp: 1737072650963 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda + sha256: e0f53b7801d0bcb5d61a1ddcb873479bfe8365e56fd3722a232fbcc372a9ac52 + md5: 0c2f855a88fab6afa92a7aa41217dc8e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: MIT + license_family: MIT + purls: [] + size: 192721 + timestamp: 1751277120358 - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda sha256: b546c4eb5e11c2d8eab0685593e078fd0cd483e467d5d6e307d60d887488230f md5: d90bf58b03d9a958cb4f9d3de539af17 @@ -8453,6 +8465,17 @@ packages: purls: [] size: 188352 timestamp: 1767681462452 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-11.2.0-h440487c_0.conda + sha256: 1449ec46468860f6fb77edba87797ce22d4f6bfe8d5587c46fd5374c4f7383ee + md5: 24109723ac700cce5ff96ea3e63a83a3 + depends: + - __osx >=11.0 + - libcxx >=18 + license: MIT + license_family: MIT + purls: [] + size: 177090 + timestamp: 1751277262419 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h403dcb5_0.conda sha256: dba5d4a93dc62f20e4c2de813ccf7beefed1fb54313faff9c4f2383e4744c8e5 md5: ae2f556fbb43e5a75cc80a47ac942a8e @@ -8464,6 +8487,18 @@ packages: purls: [] size: 180970 timestamp: 1767681372955 +- conda: https://conda.anaconda.org/conda-forge/win-64/fmt-11.2.0-h1d4551f_0.conda + sha256: 890f2789e55b509ff1f14592a5b20a0d0ec19f6da463eff96e378a5d70f882da + md5: 15b63c3fb5b7d67b1cb63553a33e6090 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 185995 + timestamp: 1751277236879 - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-12.1.0-h7f4e812_0.conda sha256: cce96406ec353692ab46cd9d992eddb6923979c1a342cbdba33521a7c234176f md5: 6e226b58e18411571aaa57a16ad10831 @@ -18165,6 +18200,19 @@ packages: purls: [] size: 38883 timestamp: 1762948066818 +- conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-ha91398d_0.conda + sha256: b186180e4ad6d00aa58b6890a31d45bee5b96202d636fe35a97bc5a621f65220 + md5: 57711002d722e1067e33c0bce84c2207 + depends: + - __glibc >=2.17,<3.0.a0 + - fmt >=11.2.0,<11.3.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 197730 + timestamp: 1760191982588 - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.16.0-hffee6e0_1.conda sha256: decf20ffbc2491ab4a65750e3ead2618ace69f3398b7bb58b5784b02f16ca87d md5: e7d62748a83b2a4574e219085e1d9855 @@ -18215,6 +18263,18 @@ packages: purls: [] size: 173402 timestamp: 1767782141460 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.16.0-h06f2c6e_0.conda + sha256: 6cfe6eba97204dc1d4165f903a9247a34d1cac6e06c29307db7150226452b118 + md5: f429110bb3c4139f94a2c5c3aecd4af5 + depends: + - __osx >=11.0 + - fmt >=11.2.0,<11.3.0a0 + - libcxx >=19 + license: MIT + license_family: MIT + purls: [] + size: 166909 + timestamp: 1760192476430 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-ha0f8610_1.conda sha256: 465e81abc0e662937046a2c6318d1a9e74baee0addd51234d36e08bae6811296 md5: 1885f7cface8cd627774407eeacb2caf @@ -18227,6 +18287,19 @@ packages: purls: [] size: 166603 timestamp: 1767781942683 +- conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.16.0-hb1706eb_0.conda + sha256: 76b093cd335b011376bf591341026f4569cf5943986e9546a8146e95557d9492 + md5: f0fedd71001bf8ac6552865d5fb315b5 + depends: + - fmt >=11.2.0,<11.3.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 174853 + timestamp: 1760192198913 - conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.17.0-h9f585f1_1.conda sha256: 90c9befa5f154463647c8e101bc7a4e05cb84b731e2dea5406bedfea02f8b012 md5: 5c17c0a063b4d36b15d5f9c0ca5377a0 diff --git a/pixi.toml b/pixi.toml index f92e26f98..e97693d34 100644 --- a/pixi.toml +++ b/pixi.toml @@ -24,7 +24,7 @@ pip = ">=25.1.1,<26" pipx = ">=1.7.1,<2" numpy = ">=2.3.0,<3" compilers = ">=1.9.0,<2" -fmt = ">=12,<13" +fmt = ">=11,<13" spdlog = ">=1.16,<2" pkg-config = ">=0.29.2,<0.30" fortran-compiler = ">=1.10.0,<2" @@ -63,6 +63,12 @@ dev-serve-mta = {features = ["serve", "metatomic", "develop"]} # no torch wheels for 2.9 onwards for non arm macos platforms = ["linux-64", "osx-arm64", "win-64"] +[feature.metatomic.dependencies] +# Torch 2.9 bundles fmt 11.2 internally. Pin fmt to v11 so that pixi's +# spdlog is compiled against the same fmt ABI as torch, preventing linker +# errors from symbol mismatches between fmt v11 (torch) and fmt v12 (default). +fmt = ">=11,<12" + [feature.metatomic.pypi-dependencies] torch = ">=2.9, <2.10" metatomic-torch = ">=0.1.7, <0.2" From 9991af3ecf0d3777ba3519fa0375aee60093edb4 Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 22 Feb 2026 09:34:58 +0100 Subject: [PATCH 14/15] chore: add win-64 to serve platforms, remove unused includes capnproto is available on win-64 and the serve code uses no POSIX APIs, so enable the serve feature on Windows. Also remove unused and includes from ServeMode.cpp. --- client/ServeMode.cpp | 2 - pixi.lock | 328 +++++++++++++++++++++++++++++++++++++++++++ pixi.toml | 2 +- 3 files changed, 329 insertions(+), 3 deletions(-) diff --git a/client/ServeMode.cpp b/client/ServeMode.cpp index aa112fcd4..e82e9e316 100644 --- a/client/ServeMode.cpp +++ b/client/ServeMode.cpp @@ -29,8 +29,6 @@ #include "ServeRpcServer.h" #include -#include -#include #include #include #include diff --git a/pixi.lock b/pixi.lock index 3758b4e45..e430fea54 100644 --- a/pixi.lock +++ b/pixi.lock @@ -2757,6 +2757,160 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/1d/8a061603f318e965f50c39e46a56ed372a987b48c40011709f2a9219add0/vesin-0.4.2-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/de/3b/517af8e11dc8f321929669be69ad1d29dae757d656c6427613179865c3aa/vesin_torch-0.4.2-py3-none-macosx_11_0_arm64.whl + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/c-compiler-1.11.0-h528c1b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/capnproto-1.3.0-h76e3424_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-19-19.1.7-default_hac490eb_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-19.1.7-default_hac490eb_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/compiler-rt-19.1.7-h49e36cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_win-64-19.1.7-h49e36cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/compilers-1.11.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cxx-compiler-1.11.0-h1c1089f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flang-19.1.7-hbeecb71_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flang_impl_win-64-19.1.7-h719f0c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flang_win-64-19.1.7-h719f0c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-11.2.0-h1d4551f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fortran-compiler-1.11.0-h95e3450_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.6-nompi_hae35d4c_106.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/highfive-2.10.1-h90b5984_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.2-h637d24d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyhe2676ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.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/libaec-1.1.5-haf901d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.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/libflang-19.1.7-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.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/liblapack-3.11.0-5_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libllvm19-19.1.7-h830ff33_2.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/libopenblas-0.3.31-pthreads_h877e47f_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/libssh2-1.11.1-h9aa295b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h3cfd58e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-h779ef1b_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/lld-21.1.8-hc465015_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-21.1.8-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-tools-19.1.7-h752b59f_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ninja-1.13.2-h477610d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py312ha72d056_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openblas-0.3.31-pthreads_h4a7f399_0.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/noarch/parso-0.8.6-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-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pkg-config-0.29.2-h88c491f_1009.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pkgconf-2.5.1-h6a83c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.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/pyyaml-6.0.3-py312h05f76fc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sccache-0.14.0-h18a1a76_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/spdlog-1.16.0-hb1706eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.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/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.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 + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda + - 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/wcwidth-0.6.0-pyhd8ed1ab_0.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/yaml-0.2.5-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/9b/9b55b4d4855743de61ba91566d03b2560285ed8fc0387b9cf914795d4abf/ase-3.27.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/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - 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/9c/0f/5d0c71a1aefeb08efff26272149e07ab922b64f46c63363756224bd6872e/filelock-3.24.3-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/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/44/870d44b30e1dcfb6a65932e3e1506c103a8a5aea9103c337e7a53180322c/hf_xet-1.2.0-cp37-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/ae/2f6d96b4e6c5478d87d606a1934b5d436c4a2bce6bb7c6fdece891c128e3/huggingface_hub-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-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/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/94/d8/6649d70c4ed91783f9576e98d0bc60e32bd369c78402b0f4b8417cdc9db6/metatensor_core-0.1.19-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/0c/9c/f455b26da18906a8bdcd4fd2ddd3a916bf3e7c1e6675f4478da35ce41949/metatensor_learn-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/e6/60691e210a43b738249ee9abb3f2343dece72d0b821fda3d4023e061d26a/metatensor_operations-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/ed/1649ae0382a4d9942a1e0124ecae8d68b403e12bf2b6d8fd9759160fde5f/metatensor_torch-0.8.4-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/35/c8/8a09a68567ad2426fd9ae4abd12872f2e1c5b3a6a3db8809b88dc1c4d738/metatomic_torch-0.1.8-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ce/85/1607598424a7ee8bdd3dd6f7b47bbf79907c8b4ff57d6883da05ec6560dd/metatrain-2025.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.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/90/cc/bb6395c3f2b6bb739b1d3fc0e71f94e6a1c2e256df496237cbfd13cd74a6/python_hostlist-2.3.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/92/ce/672ed546f96d5d41ae78c4b9b02006cedd0b3d6f2bf5bb76ea455c320c28/scipy-1.17.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.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/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl + - pypi: https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/24/5480c20380dfd18cf33d14784096dca45a24eae6102e91d49a718d3b6855/typer_slim-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/e3/556a107f6496b3f7f99c60eadf037cde6b37cf6b033f643c38617e95b8df/vesin-0.4.2-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/35/91/c45cc56afbf545989c57c1ab54bf9d6a96d23a2f96f4e7d5a831a8bc7c93/vesin_torch-0.4.2-py3-none-win_amd64.whl dev-xtb: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -5779,6 +5933,92 @@ environments: - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-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/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/c-compiler-1.11.0-h528c1b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/capnproto-1.3.0-h76e3424_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-19-19.1.7-default_hac490eb_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-19.1.7-default_hac490eb_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/compiler-rt-19.1.7-h49e36cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_win-64-19.1.7-h49e36cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/compilers-1.11.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cxx-compiler-1.11.0-h1c1089f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flang-19.1.7-hbeecb71_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flang_impl_win-64-19.1.7-h719f0c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flang_win-64-19.1.7-h719f0c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-12.1.0-h7f4e812_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fortran-compiler-1.11.0-h95e3450_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.6-nompi_hae35d4c_106.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/highfive-2.10.1-h90b5984_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.2-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/libaec-1.1.5-haf901d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.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/libflang-19.1.7-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.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/liblapack-3.11.0-5_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libllvm19-19.1.7-h830ff33_2.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/libopenblas-0.3.31-pthreads_h877e47f_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/libssh2-1.11.1-h9aa295b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h3cfd58e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-h779ef1b_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/lld-21.1.8-hc465015_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-21.1.8-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-tools-19.1.7-h752b59f_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ninja-1.13.2-h477610d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py312ha72d056_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openblas-0.3.31-pthreads_h4a7f399_0.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-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pipx-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pkg-config-0.29.2-h88c491f_1009.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pkgconf-2.5.1-h6a83c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.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/pyyaml-6.0.3-py312h05f76fc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sccache-0.14.0-h18a1a76_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/spdlog-1.17.0-h9f585f1_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.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/tomli-2.4.0-pyhcf101f3_0.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 + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda + - 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/yaml-0.2.5-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + - pypi: https://download.pytorch.org/whl/jinja2-3.1.6-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/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 @@ -6253,6 +6493,18 @@ packages: purls: [] size: 55977 timestamp: 1757437738856 +- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + sha256: 76dfb71df5e8d1c4eded2dbb5ba15bb8fb2e2b0fe42d94145d5eed4c75c35902 + md5: 4cb8e6b48f67de0b018719cdf1136306 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 56115 + timestamp: 1771350256444 - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda sha256: f8003bef369f57396593ccd03d08a8e21966157269426f71e943f96e4b579aeb md5: f7f0d6cc2dc986d42ac2689ec88192be @@ -6458,6 +6710,20 @@ packages: purls: [] size: 2903339 timestamp: 1766169063213 +- conda: https://conda.anaconda.org/conda-forge/win-64/capnproto-1.3.0-h76e3424_0.conda + sha256: 70097676115592ab44eea5f552d87ee72b8fc7c104e7861f02d2ae63ff587155 + md5: b11992a49df87274e85fe65f0853607b + depends: + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 8499759 + timestamp: 1766169156387 - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools-1021.4-ha66f10e_0.conda sha256: 1af7ea0c54e37ca1587c2d4e9c3a5add8dfd9bc4ff929f70a4330328f0c145ac md5: 37619e89a65bb3688c67d82fd8645afc @@ -7566,6 +7832,24 @@ packages: purls: [] size: 15666694 timestamp: 1769598343922 +- conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda + sha256: 9f66a8e231a3afce282123827bd9e8f8e0f81d4b6f3c5c809b8006db2bd8a44a + md5: ec81c32bfe49031759ffa481f44742bb + depends: + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.18.0,<9.0a0 + - libexpat >=2.7.4,<3.0a0 + - liblzma >=5.8.2,<6.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15742645 + timestamp: 1771384342226 - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 md5: 962b9857ee8e7018c22f2776ffa0b2d7 @@ -8254,6 +8538,18 @@ packages: purls: [] size: 1166663 timestamp: 1759819842269 +- conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h5112557_1.conda + sha256: ddaae02bdb9e0f7cbf4aa393aec0408a1aa701aa3070bd1cce18104fd7152f7e + md5: 4bb7af13f7c1b511e1c6e214d3787c88 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 1170655 + timestamp: 1771590596102 - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda sha256: 210c8165a58fdbf16e626aac93cc4c14dbd551a01d1516be5ecad795d2422cad md5: ff9efb7f7469aed3c4a8106ffa29593c @@ -12163,6 +12459,20 @@ packages: purls: [] size: 70137 timestamp: 1763550049107 +- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda + sha256: b31f6fb629c4e17885aaf2082fb30384156d16b48b264e454de4a06a313b533d + md5: 1c1ced969021592407f16ada4573586d + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - expat 2.7.4.* + license: MIT + license_family: MIT + purls: [] + size: 70323 + timestamp: 1771259521393 - conda: https://conda.anaconda.org/conda-forge/linux-64/libfabric-2.3.1-ha770c72_1.conda sha256: f705d6ab3827085c6dbf769d514f9ae9b6a6c03749530b0956b7228f14c03ff9 md5: 374ebf440b7e6094da551de9b9bc11ca @@ -12846,6 +13156,24 @@ packages: purls: [] size: 4060289 timestamp: 1770929667665 +- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_0.conda + sha256: 8ac945b308908e1eae9dcfeacba7f7a4163a9ae823c29dcf2335ec100e5aebee + md5: 275eb125dd1490f287e85ffd544b6403 + 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 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 4080064 + timestamp: 1771291641559 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_14.conda sha256: 2017cbc0f0f3b1d15df9ca681960eef015f9f58ba0d6e841694277a9f7eae0fc md5: 91349c276f84f590487e4c7f6e90e077 diff --git a/pixi.toml b/pixi.toml index e97693d34..008061c2c 100644 --- a/pixi.toml +++ b/pixi.toml @@ -124,7 +124,7 @@ python -m http.server -d html xtb = "*" [feature.serve] -platforms = ["linux-64", "osx-64", "osx-arm64"] +platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"] [feature.serve.dependencies] capnproto = ">=1.0,<2" From c6187a1bdd3cd91d16eeea4239dc6c70c390df7c Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Tue, 24 Feb 2026 07:01:51 +0100 Subject: [PATCH 15/15] docs: improve serve mode user guide Replace manual config table with autopydantic directive, add pixi serve environment to compilation instructions, fix ASCII punctuation, remove internal function name references, and link rgpot integration guide. --- docs/source/user_guide/serve_mode.md | 83 +++++++++++++++++----------- 1 file changed, 50 insertions(+), 33 deletions(-) diff --git a/docs/source/user_guide/serve_mode.md b/docs/source/user_guide/serve_mode.md index 05c0e9f57..e123b38c7 100644 --- a/docs/source/user_guide/serve_mode.md +++ b/docs/source/user_guide/serve_mode.md @@ -1,7 +1,7 @@ --- myst: html_meta: - "description": "Learn how to use eonclient --serve to expose any eOn potential over RPC for integration with external tools like ChemGP." + "description": "Guide to using eonclient serve mode to expose any eOn potential over RPC for integration with external tools like ChemGP." "keywords": "eOn serve mode, RPC server, rgpot, Cap'n Proto, ChemGP, potential serving" --- @@ -10,21 +10,25 @@ myst: ```{versionadded} 2.2 ``` -Serve mode wraps any eOn potential as an [rgpot](https://github.com/OmniPotentRPC/rgpot)-compatible -server, exposing it over Cap'n Proto RPC. This allows external tools -- such as -Julia-based optimization frameworks (e.g., [ChemGP](https://github.com/HaoZeke/ChemGP)) --- to evaluate energies and forces without embedding C++ code directly. +Serve mode wraps any eOn potential as an +[rgpot](https://github.com/OmniPotentRPC/rgpot)-compatible server, exposing it +over Cap'n Proto RPC. This allows external tools, such as Julia-based +optimization frameworks (e.g., +[ChemGP](https://github.com/HaoZeke/ChemGP)), to evaluate energies and forces +without embedding C++ code directly. ## Compilation -Serve mode requires the `with_serve` build option and a Cap'n Proto installation: +Serve mode requires the `with_serve` build option and a Cap'n Proto installation. +The `serve` pixi environment provides all necessary dependencies: ```{code-block} bash +pixi run -e serve bash meson setup builddir -Dwith_serve=true meson compile -C builddir ``` -If you also need Metatomic (ML) potentials: +To also enable Metatomic (ML) potentials: ```{code-block} bash meson setup builddir \ @@ -32,9 +36,16 @@ meson setup builddir \ -Dwith_metatomic=true \ -Dpip_metatomic=true \ -Dtorch_version=2.9 +meson compile -C builddir ``` -## Single-Potential Serving +## Usage + +Serve mode supports four modes of operation: single-potential, replicated, +gateway, and multi-model. Each mode is selected by the combination of CLI flags +provided. + +### Single-Potential The simplest usage serves one potential on a single port: @@ -51,7 +62,7 @@ To bind to all interfaces: eonclient -p lj --serve-host 0.0.0.0 --serve-port 12345 ``` -## Replicated Serving +### Replicated To start multiple copies of the same potential on sequential ports: @@ -59,11 +70,11 @@ To start multiple copies of the same potential on sequential ports: eonclient -p lj --serve-port 12345 --replicas 4 ``` -This starts 4 independent servers on ports 12345--12348, each with its own -potential instance and Cap'n Proto event loop. Useful when clients can -load-balance across known ports. +This starts 4 independent servers on ports 12345 through 12348, each with its +own potential instance and event loop. Useful when clients can load-balance +across known ports. -## Gateway Mode +### Gateway Gateway mode exposes a single port backed by a pool of potential instances. Incoming requests are dispatched round-robin across the pool, so clients only @@ -78,7 +89,7 @@ Each incoming RPC call is routed to the next available instance. This is the recommended mode for high-throughput use cases where clients should not need to track multiple ports. -## Multi-Model Serving +### Multi-Model The `--serve` flag accepts a comma-separated specification of `potential:port` or `potential:host:port` pairs, each served concurrently @@ -94,7 +105,7 @@ With explicit hosts: eonclient --serve "lj:0.0.0.0:12345,eam_al:0.0.0.0:12346" ``` -## Configuration Files +## Potential Configuration Potentials that require parameters (Metatomic, XTB, etc.) can be configured via the `--config` flag, which loads an INI-format config file: @@ -121,7 +132,7 @@ paramset = GFN2xTB accuracy = 1.0 ``` -### Config-Driven Serve +## Config-Driven Serve The `[Serve]` section allows fully config-driven serving without CLI flags beyond `--config`: @@ -141,13 +152,17 @@ gateway_port = 0 eonclient --config serve.ini ``` -The dispatch logic: +The dispatch logic when serving from config: -1. If `endpoints` is set, uses multi-model mode (`serveMultiple`). -2. If `gateway_port > 0`, uses gateway mode with `replicas` pool instances. -3. Otherwise, uses replicated mode on sequential ports starting at `port`. +1. If `endpoints` is set, each endpoint is served in its own thread. +2. If `gateway_port > 0`, a single gateway port is opened backed by a pool + of `replicas` potential instances. +3. Otherwise, `replicas` independent servers are started on sequential ports + beginning at `port`. -Example with gateway: +### Examples + +Gateway with a Metatomic model: ```{code-block} ini [Potential] @@ -163,7 +178,7 @@ gateway_port = 12345 replicas = 6 ``` -Example with multi-model endpoints: +Multi-model endpoints: ```{code-block} ini [Serve] @@ -173,15 +188,15 @@ endpoints = lj:12345,eam_al:12346,metatomic:0.0.0.0:12347 model_path = /path/to/model.pt ``` -### Serve Section Options +## Configuration -| Key | Type | Default | Description | -|-----|------|---------|-------------| -| `host` | string | `localhost` | Hostname to bind servers to | -| `port` | int | `12345` | Port for single/replicated mode | -| `replicas` | int | `1` | Number of server instances (or gateway pool size) | -| `gateway_port` | int | `0` | Gateway port (0 = disabled; when > 0, pool mode) | -| `endpoints` | string | `""` | Multi-model spec (overrides other options) | +```{code-block} ini +[Serve] +``` + +```{eval-rst} +.. autopydantic_model:: eon.schema.ServeConfig +``` ## Protocol @@ -199,7 +214,7 @@ Each response returns: ## Integration with ChemGP -ChemGP connects to the serve mode via its `RpcPotential` oracle: +ChemGP connects to serve mode via its `RpcPotential` oracle: ```{code-block} julia using ChemGP @@ -216,12 +231,14 @@ See the [ChemGP RPC tutorial](https://github.com/HaoZeke/ChemGP) for details. ## Architecture Notes -The serve mode uses a **ForceCallback** (flat-array `std::function`) interface +The serve mode uses a `ForceCallback` (flat-array `std::function`) interface internally, completely decoupling the eOn potential from the capnp server. This avoids a type collision between eOn's Eigen-based `AtomMatrix` and rgpot's custom `AtomMatrix` by never allowing both types to coexist in the same translation unit. The capnp schema code is compiled in a separate TU -(`ServeRpcServer.cpp`) from the eOn potential wrapper (`ServeMode.cpp`). +(`ServeRpcServer.cpp`) from the eOn potential wrapper (`ServeMode.cpp`). For +more on the integration pattern, see the +[rgpot integration guide](https://rgpot.rgoswami.me/integration_guide.html). ## Command Reference