From 0e0f230319f644c5652c3eee053b851081cbc536 Mon Sep 17 00:00:00 2001 From: Samuel Debionne Date: Wed, 23 Sep 2026 22:00:45 +0200 Subject: [PATCH 1/3] bench: Add benchmark for rotation/flip/transpose geometrical transformation --- CMakeLists.txt | 8 + benchmark/CMakeLists.txt | 85 + benchmark/README.md | 68 + benchmark/ipp/CMakeLists.txt | 45 + benchmark/ipp/view_flip.cpp | 141 ++ benchmark/ipp/view_transpose.cpp | 79 + benchmark/opencv/CMakeLists.txt | 40 + benchmark/opencv/view_flip.cpp | 43 + benchmark/opencv/view_rotation.cpp | 59 + benchmark/opencv/view_transpose.cpp | 42 + benchmark/pixel_channel_arithmetics.cpp | 232 ++ benchmark/view_flip.cpp | 45 + benchmark/view_rotation.cpp | 100 + benchmark/view_transpose.cpp | 28 + benchmark/view_transpose_blocked.cpp | 93 + pixi.lock | 3071 +++++++++++++++++++++-- pixi.toml | 69 +- 17 files changed, 4011 insertions(+), 237 deletions(-) create mode 100644 benchmark/CMakeLists.txt create mode 100644 benchmark/README.md create mode 100644 benchmark/ipp/CMakeLists.txt create mode 100644 benchmark/ipp/view_flip.cpp create mode 100644 benchmark/ipp/view_transpose.cpp create mode 100644 benchmark/opencv/CMakeLists.txt create mode 100644 benchmark/opencv/view_flip.cpp create mode 100644 benchmark/opencv/view_rotation.cpp create mode 100644 benchmark/opencv/view_transpose.cpp create mode 100644 benchmark/pixel_channel_arithmetics.cpp create mode 100644 benchmark/view_flip.cpp create mode 100644 benchmark/view_rotation.cpp create mode 100644 benchmark/view_transpose.cpp create mode 100644 benchmark/view_transpose_blocked.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index cd433a2d68..529ceccb14 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,6 +51,7 @@ cmake_minimum_required(VERSION 3.10) #----------------------------------------------------------------------------- # Options #----------------------------------------------------------------------------- +option(BOOST_GIL_BUILD_BENCHMARKS "Builds all available benchmarks in the benchmark directory" OFF) option(BOOST_GIL_BUILD_EXAMPLES "Build examples" ON) option(BOOST_GIL_BUILD_HEADER_TESTS "Enable self-contained header tests" ON) option(BOOST_GIL_ENABLE_EXT_DYNAMIC_IMAGE "Enable Dynamic Image extension, tests and examples" ON) @@ -307,4 +308,11 @@ if(BOOST_GIL_BUILD_EXAMPLES AND BOOST_GIL_ENABLE_EXT_IO) add_subdirectory(example) endif() +#----------------------------------------------------------------------------- +# Benchmarks +#----------------------------------------------------------------------------- +if(BOOST_GIL_BUILD_BENCHMARKS) + add_subdirectory(benchmark) +endif() + endif() diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt new file mode 100644 index 0000000000..be45b2251f --- /dev/null +++ b/benchmark/CMakeLists.txt @@ -0,0 +1,85 @@ +message(STATUS "Boost.GIL: Configuring benchmarks") + +#----------------------------------------------------------------------------- +# Deploy google/benchmark +#----------------------------------------------------------------------------- +include(ExternalProject) + +# NOTE for Ninja generator: +# Ninja generator will try to find external project library at the expected location. +# BUILD_BYPRODUCTS option is added to specify build output and satisfy dependencies. +ExternalProject_Add(project_googlebenchmark + GIT_REPOSITORY https://github.com/google/benchmark.git + GIT_TAG "v1.9.5" + GIT_SHALLOW 1 + PREFIX ${CMAKE_CURRENT_BINARY_DIR}/vendor/benchmark + TIMEOUT 10 + BUILD_BYPRODUCTS /lib/${CMAKE_STATIC_LIBRARY_PREFIX}benchmark${CMAKE_STATIC_LIBRARY_SUFFIX} + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/vendor/benchmark + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_LIBDIR=lib + -DBENCHMARK_ENABLE_TESTING=OFF + -DBENCHMARK_ENABLE_GTEST_TESTS=OFF + -DBENCHMARK_ENABLE_WERROR=OFF + UPDATE_COMMAND "" + TEST_COMMAND "") + +ExternalProject_Get_Property(project_googlebenchmark INSTALL_DIR) + +file(MAKE_DIRECTORY ${INSTALL_DIR}/include) +add_library(gil_googlebenchmark STATIC IMPORTED) +target_include_directories(gil_googlebenchmark INTERFACE ${INSTALL_DIR}/include) +target_compile_definitions(gil_googlebenchmark INTERFACE BENCHMARK_STATIC_DEFINE) +set_property(TARGET gil_googlebenchmark PROPERTY IMPORTED_LOCATION + "${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}benchmark${CMAKE_STATIC_LIBRARY_SUFFIX}") + +if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + find_library(SHLWAPI Shlwapi.lib) + target_link_libraries(gil_googlebenchmark INTERFACE SHLWAPI) +else() + find_package(Threads) + target_link_libraries(gil_googlebenchmark INTERFACE ${CMAKE_THREAD_LIBS_INIT} rt) +endif() + +add_dependencies(gil_googlebenchmark project_googlebenchmark) + +#----------------------------------------------------------------------------- +# Build benchmarks +#----------------------------------------------------------------------------- +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12.0) + file(GLOB _benchmarks ${CMAKE_CURRENT_LIST_DIR}/*.cpp CONFIGURE_DEPEND) +else() + file(GLOB _benchmarks ${CMAKE_CURRENT_LIST_DIR}/*.cpp) +endif() + +foreach(_benchmark ${_benchmarks}) + get_filename_component(_name ${_benchmark} NAME_WE) + set(_target benchmark_${_name}) + add_executable(${_target} ${_name}.cpp) + target_compile_definitions(${_target} PRIVATE BOOST_GIL_USE_CONCEPT_CHECK=1) + target_link_libraries(${_target} + PRIVATE + gil_compile_options + gil_include_directories + gil_dependencies + gil_googlebenchmark) +endforeach() + +unset(_benchmarks) +unset(_benchmark) + + +#----------------------------------------------------------------------------- +# Options +#----------------------------------------------------------------------------- +option(BOOST_GIL_BUILD_BENCHMARKS_OPENCV "Builds all OpenCV benchmarks" OFF) +option(BOOST_GIL_BUILD_BENCHMARKS_IPP "Builds all IPP benchmarks" OFF) + +if(BOOST_GIL_BUILD_BENCHMARKS_OPENCV) + add_subdirectory(opencv) +endif() + +if(BOOST_GIL_BUILD_BENCHMARKS_IPP) + add_subdirectory(ipp) +endif() diff --git a/benchmark/README.md b/benchmark/README.md new file mode 100644 index 0000000000..1454147b30 --- /dev/null +++ b/benchmark/README.md @@ -0,0 +1,68 @@ +# GIL Benchmarks + +This guide assumes that minimal GIL can already be built, e.g. dependency on +dependent Boost libraries are satisfied. + +## Dependencies + +The benchmarks depend on the popular micro-benchmarking framework: + +* https://github.com/google/benchmark + +It is configured using +[ExternalProject_Add](https://cmake.org/cmake/help/latest/module/ExternalProject.html) +with a custom target that drives download, build and deployment of the dependency. + +## Writing Benchmarks + +Google Benchmark provides facilities to avoid optimizing away some portions of the code or +effects on variables. It might get bypassed by compilers in the future though, as they get +smarter. Thus, providing some side effect outside of benchmarked section is advised. + +--- + +### Using Google Benchmark + +Overall structure of the file should look roughly like this: + + + + BENCHMARK(function1_name) + BENCHMARK(function2_name) + ... + + BENCHMARK_MAIN() + +Lets have a closer look at a benchmarking function: + + void function_name(benchmark::State& state) { + + + for (auto _: state) { + + } + + } + +Do note that as long as `_` is in scope, the runtime will be counted towards benchmarking results, +whereas the rest will not be included. Not writing a side effect (like a check can throw, +or printing on the console) might result in code being optimized away, thus making whole +benchmarking function useless. + +--- + +### Building the benchmarks + +To build a benchmark, simply put the benchmark `.cpp` file into `/benchmark` +and reconfigure the project. +Then, the targets to build are `benchmark_` +(`benchmark_ocv_` and `benchmark_ipp_` for the OpenCV and IPP +comparison benchmarks under `opencv/` and `ipp/`). + +--- + +### Running benchmarks + +Pairing the benchmarking framework with a good plotting tool of your choice is advised. +It provides options to control which benchmarks to run, for how long, +and output formats. Running `--help` on executables will print available options. diff --git a/benchmark/ipp/CMakeLists.txt b/benchmark/ipp/CMakeLists.txt new file mode 100644 index 0000000000..759510ff10 --- /dev/null +++ b/benchmark/ipp/CMakeLists.txt @@ -0,0 +1,45 @@ +# Copyright (C) 2020 Samuel Debionne, ESRF. + +# Use, modification and distribution is subject to the Boost Software +# License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +#----------------------------------------------------------------------------- +# Find package IPP +#----------------------------------------------------------------------------- +#find_package(IPP REQUIRED) +find_path(IPP_INCLUDE_DIR ipp.h PATHS ${IPP_ROOT}/include) +message("IPP_INCLUDE_DIR: ${IPP_INCLUDE_DIR}") +find_library(IPP_LIB_CORE ippcore PATHS ${IPP_ROOT}/lib) +find_library(IPP_LIB_I ippi PATHS ${IPP_ROOT}/lib) +message("IPP_LIB_CORE: ${IPP_LIB_CORE}") +message("IPP_LIB_I: ${IPP_LIB_I}") +add_library(ipp::ipp INTERFACE IMPORTED) +target_include_directories(ipp::ipp INTERFACE ${IPP_INCLUDE_DIR}) +target_link_libraries(ipp::ipp INTERFACE ${IPP_LIB_CORE} ${IPP_LIB_I}) + +#----------------------------------------------------------------------------- +# Build benchmarks +#----------------------------------------------------------------------------- +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12.0) + file(GLOB _benchmarks ${CMAKE_CURRENT_LIST_DIR}/*.cpp CONFIGURE_DEPEND) +else() + file(GLOB _benchmarks ${CMAKE_CURRENT_LIST_DIR}/*.cpp) +endif() + +foreach(_benchmark ${_benchmarks}) + get_filename_component(_name ${_benchmark} NAME_WE) + set(_target benchmark_ipp_${_name}) + add_executable(${_target} ${_name}.cpp) + target_compile_definitions(${_target} PRIVATE BOOST_GIL_USE_CONCEPT_CHECK=1) + target_link_libraries(${_target} + PRIVATE + gil_compile_options + gil_include_directories + gil_dependencies + gil_googlebenchmark + ipp::ipp) +endforeach() + +unset(_benchmarks) +unset(_benchmark) diff --git a/benchmark/ipp/view_flip.cpp b/benchmark/ipp/view_flip.cpp new file mode 100644 index 0000000000..8a3b67ad11 --- /dev/null +++ b/benchmark/ipp/view_flip.cpp @@ -0,0 +1,141 @@ +// Copyright (C) 2020 Samuel Debionne, ESRF. + +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +#include + +#include + +inline bool is_odd(benchmark::IterationCount cnt) { return (cnt % 2); } + +static void ipp_flip_left_right(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + generate_pixels(view(in), [i = 0]() mutable -> std::uint8_t { return ++i; }); + gray8_image_t out(dim, dim); + + IppiSize srcRoi = { dim, dim }; + + for (auto _ : state) { + // The code to benchmark + auto res = ippiMirror_8u_C1R( + boost::gil::interleaved_view_get_raw_data(const_view(in)), (int)const_view(in).pixels().row_size(), + boost::gil::interleaved_view_get_raw_data(view(out)), (int)view(in).pixels().row_size(), + srcRoi, + ippAxsVertical); + + if (res != ippStsNoErr) + state.SkipWithError("ipp_flip_left_right failed"); + } + + if (!equal_pixels(flipped_left_right_view(const_view(in)), const_view(out))) + state.SkipWithError("ipp_flip_left_right wrong result"); +} +BENCHMARK(ipp_flip_left_right)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void ipp_flip_left_right_inplace(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + generate_pixels(view(in), [i = 0]() mutable -> std::uint8_t { return ++i; }); + gray8_image_t in_ref(in); + + IppiSize srcRoi = { dim, dim }; + + for (auto _ : state) { + // The code to benchmark + auto res = ippiMirror_8u_C1IR( + boost::gil::interleaved_view_get_raw_data(view(in)), (int)view(in).pixels().row_size(), + srcRoi, + ippAxsVertical); + + if (res != ippStsNoErr) + state.SkipWithError("ipp_flip_left_right_inplace failed"); + } + + if (is_odd(state.iterations())) { + if (!equal_pixels(flipped_left_right_view(const_view(in_ref)), const_view(in))) + state.SkipWithError("ipp_flip_left_right_inplace wrong result"); + } + else { + if (!equal_pixels(const_view(in_ref), const_view(in))) + state.SkipWithError("ipp_flip_left_right_inplace wrong result"); + } +} +BENCHMARK(ipp_flip_left_right_inplace)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void ipp_flip_up_down(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + generate_pixels(view(in), [i = 0]() mutable -> std::uint8_t { return ++i; }); + gray8_image_t out(dim, dim); + + IppiSize srcRoi = { dim, dim }; + + for (auto _ : state) { + // The code to benchmark + auto res = ippiMirror_8u_C1R( + boost::gil::interleaved_view_get_raw_data(const_view(in)), (int)const_view(in).pixels().row_size(), + boost::gil::interleaved_view_get_raw_data(view(out)), (int)view(out).pixels().row_size(), + srcRoi, + ippAxsHorizontal); + + if (res != ippStsNoErr) + state.SkipWithError("ipp_flip_up_down failed"); + } + + if (is_odd(state.iterations())) { + if (!equal_pixels(flipped_up_down_view(const_view(in)), const_view(out))) + state.SkipWithError("ipp_flip_up_down wrong result"); + } + else { + if (!equal_pixels(const_view(in), const_view(out))) + state.SkipWithError("ipp_flip_up_down wrong result"); + } +} +BENCHMARK(ipp_flip_up_down)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void ipp_flip_up_down_inplace(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + generate_pixels(view(in), [i = 0]() mutable -> std::uint8_t { return ++i; }); + gray8_image_t in_ref(in); + + IppiSize srcRoi = { dim, dim }; + + for (auto _ : state) { + // The code to benchmark + auto res = ippiMirror_8u_C1IR( + boost::gil::interleaved_view_get_raw_data(view(in)), (int)view(in).pixels().row_size(), + srcRoi, + ippAxsHorizontal); + + if (res != ippStsNoErr) + state.SkipWithError("ipp_flip_up_down_inplace failed"); + } + + if (!equal_pixels(flipped_up_down_view(const_view(in_ref)), const_view(in))) + state.SkipWithError("ipp_flip_up_down_inplace wrong result"); +} +BENCHMARK(ipp_flip_up_down_inplace)->RangeMultiplier(2)->Range(256, 8 << 10); + +BENCHMARK_MAIN(); diff --git a/benchmark/ipp/view_transpose.cpp b/benchmark/ipp/view_transpose.cpp new file mode 100644 index 0000000000..037dc8b92b --- /dev/null +++ b/benchmark/ipp/view_transpose.cpp @@ -0,0 +1,79 @@ +// Copyright (C) 2020 Samuel Debionne, ESRF. + +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +#include + +#include + +inline bool is_odd(benchmark::IterationCount cnt) { return (cnt % 2); } + +static void ipp_transpose(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + generate_pixels(view(in), [i = 0]() mutable -> std::uint8_t { return ++i; }); + gray8_image_t out(dim, dim); + + IppiSize srcRoi = { dim, dim }; + + for (auto _ : state) { + // The code to benchmark + auto res = ippiTranspose_8u_C1R( + boost::gil::interleaved_view_get_raw_data(const_view(in)), (int) const_view(in).pixels().row_size(), + boost::gil::interleaved_view_get_raw_data(view(out)), (int)const_view(out).pixels().row_size(), + srcRoi); + + if (res != ippStsNoErr) + state.SkipWithError("ipp_transpose_inplace failed"); + } + + if (!equal_pixels(transposed_view(const_view(in)), const_view(out))) + state.SkipWithError("ipp_transpose wrong result"); +} +BENCHMARK(ipp_transpose)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void ipp_transpose_inplace(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + generate_pixels(view(in), [i = 0]() mutable -> std::uint8_t { return ++i; }); + gray8_image_t in_ref(in); + + if (!equal_pixels(const_view(in_ref), const_view(in))) + state.SkipWithError("ipp_transpose_inplace wrong init"); + + IppiSize srcRoi = { dim, dim }; + + for (auto _ : state) { + // The code to benchmark + auto res = ippiTranspose_8u_C1IR( + boost::gil::interleaved_view_get_raw_data(view(in)), (int)const_view(in).pixels().row_size(), + srcRoi); + + if (res != ippStsNoErr) + state.SkipWithError("ipp_transpose_inplace failed"); + } + + if (is_odd(state.iterations())) { + if (!equal_pixels(transposed_view(const_view(in_ref)), const_view(in))) + state.SkipWithError("ipp_transpose_inplace wrong result"); + } + else { + if (!equal_pixels(const_view(in_ref), const_view(in))) + state.SkipWithError("ipp_transpose_inplace wrong result"); + } +} +BENCHMARK(ipp_transpose_inplace)->RangeMultiplier(2)->Range(256, 8 << 10); + +BENCHMARK_MAIN(); diff --git a/benchmark/opencv/CMakeLists.txt b/benchmark/opencv/CMakeLists.txt new file mode 100644 index 0000000000..c77924491e --- /dev/null +++ b/benchmark/opencv/CMakeLists.txt @@ -0,0 +1,40 @@ +# Copyright (C) 2020 Samuel Debionne, ESRF. + +# Use, modification and distribution is subject to the Boost Software +# License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +#----------------------------------------------------------------------------- +# Find package OpenCV +#----------------------------------------------------------------------------- +find_package(OpenCV REQUIRED) + +#----------------------------------------------------------------------------- +# Build benchmarks +#----------------------------------------------------------------------------- +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12.0) + file(GLOB_RECURSE _benchmarks ${CMAKE_CURRENT_LIST_DIR}/*.cpp CONFIGURE_DEPEND) +else() + file(GLOB_RECURSE _benchmarks ${CMAKE_CURRENT_LIST_DIR}/*.cpp) +endif() + +foreach(_benchmark ${_benchmarks}) + get_filename_component(_name ${_benchmark} NAME_WE) + set(_target benchmark_ocv_${_name}) + add_executable(${_target} ${_name}.cpp) + target_compile_definitions(${_target} PRIVATE BOOST_GIL_USE_CONCEPT_CHECK=1) + target_include_directories(${_target} + PRIVATE + ${OpenCV_INCLUDE_DIRS} + ) + target_link_libraries(${_target} + PRIVATE + gil_compile_options + gil_include_directories + gil_dependencies + gil_googlebenchmark + ${OpenCV_LIBS}) +endforeach() + +unset(_benchmarks) +unset(_benchmark) diff --git a/benchmark/opencv/view_flip.cpp b/benchmark/opencv/view_flip.cpp new file mode 100644 index 0000000000..51d3d9e34a --- /dev/null +++ b/benchmark/opencv/view_flip.cpp @@ -0,0 +1,43 @@ +// Copyright (C) 2020 Samuel Debionne, ESRF. + +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +#include + +static void flip_up_down(benchmark::State& state) +{ + using namespace cv; + + int dim = state.range(0); + + Mat1b in(dim, dim); + Mat1b out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + flip(in,out,0); + } +} +BENCHMARK(flip_up_down)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void flip_left_right(benchmark::State& state) +{ + using namespace cv; + + int dim = state.range(0); + + Mat1b in(dim, dim); + Mat1b out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + flip(in,out,1); + } +} +BENCHMARK(flip_left_right)->RangeMultiplier(2)->Range(256, 8 << 10); + +BENCHMARK_MAIN(); diff --git a/benchmark/opencv/view_rotation.cpp b/benchmark/opencv/view_rotation.cpp new file mode 100644 index 0000000000..3e5270c13b --- /dev/null +++ b/benchmark/opencv/view_rotation.cpp @@ -0,0 +1,59 @@ +// Copyright (C) 2020 Samuel Debionne, ESRF. + +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +#include + +static void rotation_cc90(benchmark::State& state) +{ + using namespace cv; + + size_t dim = state.range(0); + + Mat1b in(dim, dim); + Mat1b out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + rotate(in,out,ROTATE_90_CLOCKWISE); + } +} +BENCHMARK(rotation_cc90)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void rotation_ccw90(benchmark::State& state) +{ + using namespace cv; + + size_t dim = state.range(0); + + Mat1b in(dim, dim); + Mat1b out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + rotate(in,out,ROTATE_90_COUNTERCLOCKWISE); + } +} +BENCHMARK(rotation_ccw90)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void rotation_180(benchmark::State& state) +{ + using namespace cv; + + size_t dim = state.range(0); + + Mat1b in(dim, dim); + Mat1b out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + rotate(in,out,ROTATE_180); + } +} +BENCHMARK(rotation_180)->RangeMultiplier(2)->Range(256, 8 << 10); + +BENCHMARK_MAIN(); diff --git a/benchmark/opencv/view_transpose.cpp b/benchmark/opencv/view_transpose.cpp new file mode 100644 index 0000000000..9bb48f0dbe --- /dev/null +++ b/benchmark/opencv/view_transpose.cpp @@ -0,0 +1,42 @@ +// Copyright (C) 2020 Samuel Debionne, ESRF. + +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +#include + +static void transpose(benchmark::State& state) +{ + using namespace cv; + + size_t dim = state.range(0); + + Mat1b in(dim, dim); + Mat1b out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + transpose(in, out); + } +} +BENCHMARK(transpose)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void transpose_inplace(benchmark::State& state) +{ + using namespace cv; + + size_t dim = state.range(0); + + Mat1b in(dim, dim); + + for (auto _ : state) { + // The code to benchmark + transpose(in, in); + } +} +BENCHMARK(transpose_inplace)->RangeMultiplier(2)->Range(256, 8 << 10); + +BENCHMARK_MAIN(); diff --git a/benchmark/pixel_channel_arithmetics.cpp b/benchmark/pixel_channel_arithmetics.cpp new file mode 100644 index 0000000000..c2d5d1fb38 --- /dev/null +++ b/benchmark/pixel_channel_arithmetics.cpp @@ -0,0 +1,232 @@ +#include +#include +#include + +#include + +#include +#include + +using namespace boost::gil; + +static void std_algo(benchmark::State& state) +{ + std::vector img(1024 * 1024, 0); + + for (auto _ : state) + // The code to benchmark + for (auto&& p : img) + p += 1; + + if (!std::all_of(img.begin(), img.end(), [&state](auto p) { return p == state.iterations(); })) + state.SkipWithError("std_algo wrong result"); +} +BENCHMARK(std_algo); + +static void gil_algo_stdfunction(benchmark::State& state) +{ + using namespace std::placeholders; + namespace gil = boost::gil; + + gil::gray16_image_t img(1024, 1024, gray16_pixel_t{ 0 }); + + //Pixel operation + auto op = std::bind( + gil::pixel_plus_t(), + _1, gray16_pixel_t{ 1 }); + + for (auto _ : state) + // The code to benchmark + gil::transform_pixels(gil::const_view(img), gil::view(img), op); + + if (!std::all_of(gil::view(img).begin(), gil::view(img).end(), [&state](auto p) { return p == state.iterations(); })) + state.SkipWithError("gil_algo_stdfunction wrong result"); +} +BENCHMARK(gil_algo_stdfunction); + +static void gil_algo_lambda(benchmark::State& state) +{ + using namespace std::placeholders; + namespace gil = boost::gil; + + gil::gray16_image_t img(1024, 1024, gray16_pixel_t{ 0 }); + + //Pixel operation + auto op2 = [second_arg = gray16_pixel_t{ 1 }](gray16_pixel_t value) { + return gil::pixel_plus_t()(value, second_arg); + }; + + for (auto _ : state) + // The code to benchmark + gil::transform_pixels(gil::const_view(img), gil::view(img), op2); + + if (!std::all_of(gil::view(img).begin(), gil::view(img).end(), [&state](auto p) { return p == state.iterations(); })) + state.SkipWithError("gil_algo_lambda wrong result"); +} +BENCHMARK(gil_algo_lambda); + +static void gil_algo_lambda_plus(benchmark::State& state) +{ + using namespace std::placeholders; + namespace gil = boost::gil; + + gil::gray16_image_t img(1024, 1024, gray16_pixel_t{ 0 }); + + //Pixel operation + auto op2 = [second_arg = gray16_pixel_t{ 1 }](gray16_pixel_t value) { + return value + second_arg; + }; + + for (auto _ : state) + // The code to benchmark + gil::transform_pixels(gil::const_view(img), gil::view(img), op2); + + if (!std::all_of(gil::view(img).begin(), gil::view(img).end(), [&state](auto p) { return p == state.iterations(); })) + state.SkipWithError("gil_algo_lambda_plus wrong result"); +} +BENCHMARK(gil_algo_lambda_plus); + +static void gil_algo_lambda_copy(benchmark::State& state) +{ + using namespace std::placeholders; + namespace gil = boost::gil; + + gil::gray16_image_t img(1024, 1024, gray16_pixel_t{ 0 }); + gil::gray16_image_t img2(1024, 1024, gray16_pixel_t{ 0 }); + + auto input_view = gil::const_view(img); + auto output_view = gil::view(img2); + auto plus = gil::pixel_plus_t{}; + + //Pixel operation + auto op2 = [second_arg = gray16_pixel_t{ 1 }](gray16_pixel_t value) { + return gil::pixel_plus_t()(value, second_arg); + }; + + for (auto _ : state) + // The code to benchmark + gil::transform_pixels(input_view, output_view, op2); + + if (!std::all_of(output_view.begin(), output_view.end(), [&state](auto p) { return p == 1; })) + state.SkipWithError("gil_algo_lambda_copy wrong result"); +} +BENCHMARK(gil_algo_lambda_copy); + +static void gil_algo_rangefor(benchmark::State& state) { + using namespace std::placeholders; + namespace gil = boost::gil; + + gil::gray16_image_t img(1024, 1024, gray16_pixel_t{ 0 }); + gil::gray16_image_t img2(1024, 1024, gray16_pixel_t{ 0 }); + + auto input_view = gil::const_view(img); + auto output_view = gil::view(img2); + auto plus = gil::pixel_plus_t{}; + + //Pixel operation + auto op2 = [second_arg = gray16_pixel_t{ 1 }](gray16_pixel_t value) { + return gil::pixel_plus_t()(value, second_arg); + }; + + for (auto _ : state) { + auto d_first = output_view.begin(); + for (auto pixel : input_view) { + *d_first++ = op2(pixel); + } + } + + if (!std::all_of(output_view.begin(), output_view.end(), [&state](auto p) { return p == 1; })) + state.SkipWithError("gil_algo_rangefor wrong result"); +} +BENCHMARK(gil_algo_rangefor); + +static void gil_algo_rangefor_plus(benchmark::State& state) { + using namespace std::placeholders; + namespace gil = boost::gil; + + gil::gray16_image_t img(1024, 1024, gray16_pixel_t{ 0 }); + gil::gray16_image_t img2(1024, 1024, gray16_pixel_t{ 0 }); + + auto input_view = gil::const_view(img); + auto output_view = gil::view(img2); + auto plus = gil::pixel_plus_t{}; + + //Pixel operation + auto op2 = [second_arg = gray16_pixel_t{ 1 }](gray16_pixel_t value) { + return gil::pixel_plus_t()(value, second_arg); + }; + + for (auto _ : state) { + auto d_first = output_view.begin(); + for (const auto& pixel : input_view) { + *d_first++ = pixel + 1; + } + } + + if (!std::all_of(output_view.begin(), output_view.end(), [&state](auto p) { return p == 1; })) + state.SkipWithError("gil_algo_rangefor_plus wrong result"); +} +BENCHMARK(gil_algo_rangefor_plus); + +static void gil_algo_copy_mem(benchmark::State& state) { + using namespace std::placeholders; + namespace gil = boost::gil; + + gil::gray16_image_t img(1024, 1024, gray16_pixel_t{ 0 }); + gil::gray16_image_t img2(1024, 1024, gray16_pixel_t{ 0 }); + + auto input_view = gil::const_view(img); + auto output_view = gil::view(img2); + + //Pixel operation + auto op2 = [second_arg = gray16_pixel_t{ 1 }](gray16_pixel_t value) { + return gil::pixel_plus_t()(value, second_arg); + }; + + for (auto _ : state) { + auto start = std::addressof(input_view(0, 0)); + auto end = std::addressof(input_view(input_view.width() - 1, input_view.height() - 1)) + 1; + auto d_start = std::addressof(output_view(0, 0)); + while (start != end) { + *d_start++ = *start++ + 1; + } + } + + if (!std::all_of(output_view.begin(), output_view.end(), [&state](auto p) { return p == 1; })) + state.SkipWithError("gil_algo_copy_mem wrong result"); +} +BENCHMARK(gil_algo_copy_mem); + +static void gil_algo_pixel_vector(benchmark::State& state) { + using namespace std::placeholders; + namespace gil = boost::gil; + std::vector img(1024 * 1024, gil::gray16_pixel_t(0)); + + for (auto _ : state) { + for (auto& pixel : img) + pixel.at(std::integral_constant{}) = pixel.at(std::integral_constant{}) + 1; + } + + if (!std::all_of(img.begin(), img.end(), [&state](auto p) {return p == state.iterations(); })) + state.SkipWithError("gil_algo_pixel_vector wrong result"); +} +BENCHMARK(gil_algo_pixel_vector); + +static void gil_algo_pixel_vector_reinterpret(benchmark::State& state) { + using namespace std::placeholders; + namespace gil = boost::gil; + std::vector img(1024 * 1024, gil::gray16_pixel_t(0)); + + for (auto _ : state) { + auto start = reinterpret_cast(img.data()); + auto end = start + img.size(); + for (; start != end; ++start) + *start += 1; + } + + if (!std::all_of(img.begin(), img.end(), [&state](auto p) {return p == state.iterations(); })) + state.SkipWithError("gil_algo_pixel_vector wrong result"); +} +BENCHMARK(gil_algo_pixel_vector_reinterpret); + +BENCHMARK_MAIN(); diff --git a/benchmark/view_flip.cpp b/benchmark/view_flip.cpp new file mode 100644 index 0000000000..1d61d09a72 --- /dev/null +++ b/benchmark/view_flip.cpp @@ -0,0 +1,45 @@ +// Copyright (C) 2020 Samuel Debionne, ESRF. + +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +#include + +static void flip_up_down(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + gray8_image_t out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + auto flipped = flipped_up_down_view(const_view(in)); + copy_pixels(flipped, view(out)); + } +} +BENCHMARK(flip_up_down)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void flip_left_right(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + gray8_image_t out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + auto flipped = flipped_left_right_view(const_view(in)); + copy_pixels(flipped, view(out)); + } +} +BENCHMARK(flip_left_right)->RangeMultiplier(2)->Range(256, 8 << 10); + +BENCHMARK_MAIN(); diff --git a/benchmark/view_rotation.cpp b/benchmark/view_rotation.cpp new file mode 100644 index 0000000000..497b46e2de --- /dev/null +++ b/benchmark/view_rotation.cpp @@ -0,0 +1,100 @@ +// Copyright (C) 2020 Samuel Debionne, ESRF. + +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +#include + +static void rotation_cc90(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + gray8_image_t out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + auto rotated = rotated90cw_view(const_view(in)); + copy_pixels(rotated, view(out)); + } +} +BENCHMARK(rotation_cc90)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void rotation_cc90_v2(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + gray8_image_t out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + auto transposed = transposed_view(const_view(in)); + copy_pixels(transposed, view(out)); + auto flipped = flipped_left_right_view(const_view(out)); + copy_pixels(flipped, view(out)); + } +} +BENCHMARK(rotation_cc90_v2)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void rotation_ccw90(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + gray8_image_t out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + auto rotated = rotated90ccw_view(const_view(in)); + copy_pixels(rotated, view(out)); + } +} +BENCHMARK(rotation_ccw90)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void rotation_ccw90_v2(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + gray8_image_t out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + auto transposed = transposed_view(const_view(in)); + copy_pixels(transposed, view(out)); + auto flipped = flipped_up_down_view(const_view(out)); + copy_pixels(flipped, view(out)); + } +} +BENCHMARK(rotation_ccw90_v2)->RangeMultiplier(2)->Range(256, 8 << 10); + +static void rotation_180(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + gray8_image_t out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + auto rotated = rotated180_view(const_view(in)); + copy_pixels(rotated, view(out)); + } +} +BENCHMARK(rotation_180)->RangeMultiplier(2)->Range(256, 8 << 10); + +BENCHMARK_MAIN(); diff --git a/benchmark/view_transpose.cpp b/benchmark/view_transpose.cpp new file mode 100644 index 0000000000..887672788f --- /dev/null +++ b/benchmark/view_transpose.cpp @@ -0,0 +1,28 @@ +// Copyright (C) 2020 Samuel Debionne, ESRF. + +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +#include + +static void transpose(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + gray8_image_t out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + auto transposed = transposed_view(const_view(in)); + copy_pixels(transposed, view(out)); + } +} +BENCHMARK(transpose)->RangeMultiplier(2)->Range(256, 8 << 10); + +BENCHMARK_MAIN(); diff --git a/benchmark/view_transpose_blocked.cpp b/benchmark/view_transpose_blocked.cpp new file mode 100644 index 0000000000..ca82db09a4 --- /dev/null +++ b/benchmark/view_transpose_blocked.cpp @@ -0,0 +1,93 @@ +// Copyright (C) 2020 Samuel Debionne, ESRF. + +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +#include + +#define GIL_ENABLE_UNROLLED 1 + +namespace boost { + namespace gil { + + template + static void transpose(const SrcView& src, const DstView& dst) + { + int i, j; + auto m = src.width(); + auto n = src.height(); + + static const int block_size = 4; + + std::array l; + std::generate(l.begin(), l.end(), [loc = src.xy_at(0, 0), i = 0]() mutable { + auto res = loc.cache_location(i % block_size, i / block_size); + i++; + return res; + }); + +#if GIL_ENABLE_UNROLLED + for (i = 0; i <= m - block_size; i += block_size) + { + auto d0 = dst.row_begin(i); + auto d1 = dst.row_begin(i + 1); + auto d2 = dst.row_begin(i + 2); + auto d3 = dst.row_begin(i + 3); + + for (j = 0; j <= n - block_size; j += block_size) + { + auto s = src.xy_at(i, j); + + d0[j] = s[l[0]]; d0[j + 1] = s[l[4]]; d0[j + 2] = s[l[8]]; d0[j + 3] = s[l[12]]; + d1[j] = s[l[1]]; d1[j + 1] = s[l[5]]; d1[j + 2] = s[l[9]]; d1[j + 3] = s[l[13]]; + d2[j] = s[l[2]]; d2[j + 1] = s[l[6]]; d2[j + 2] = s[l[10]]; d2[j + 3] = s[l[14]]; + d3[j] = s[l[3]]; d3[j + 1] = s[l[7]]; d3[j + 2] = s[l[11]]; d3[j + 3] = s[l[15]]; + } + + for (; j < n; j++) + { + auto s = src.xy_at(i, j); + + d0[j] = s[l[0]]; d1[j] = s[l[1]]; d2[j] = s[l[2]]; d3[j] = s[l[3]]; + } + } +#endif + for (; i < m; i++) + { + auto d0 = dst.row_begin(i); +#if GIL_ENABLE_UNROLLED + for (j = 0; j <= n - block_size; j += block_size) + { + auto s = src.xy_at(i, j); + + d0[j] = s[l[0]]; d0[j + 1] = s[l[4]]; d0[j + 2] = s[l[8]]; d0[j + 3] = s[l[12]]; + } +#endif + for (; j < n; j++) + d0[j] = src(i, j); + } + } + + } +} //namespace boost::gil + +static void transpose(benchmark::State& state) +{ + using namespace boost::gil; + + size_t dim = state.range(0); + + gray8_image_t in(dim, dim); + gray8_image_t out(dim, dim); + + for (auto _ : state) { + // The code to benchmark + transpose(const_view(in), view(out)); + } +} +BENCHMARK(transpose)->RangeMultiplier(2)->Range(256, 8 << 10); + +BENCHMARK_MAIN(); \ No newline at end of file diff --git a/pixi.lock b/pixi.lock index 742573aa1d..cf7396a71b 100644 --- a/pixi.lock +++ b/pixi.lock @@ -7,6 +7,208 @@ platforms: - __glibc=2.28 - __archspec=0=x86_64 environments: + bench: + channels: + - url: https://conda.anaconda.org/conda-forge/ + - url: https://software.repos.intel.com/python/conda/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.16.1-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.14.1-pl5321h57e6904_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.4-h4610da3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.15-h6bbde05_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.14.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h01ee8f8_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.11.0-hbe094ff_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.27.5-h4f381ba_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.13.1-h7508075_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.7-h01ee8f8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h01ee8f8_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.46.1-default_hfdba357_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.8-hebe6cf0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.6-h3c89d7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.4.3-hff7ac6b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.3.0-h8846f6e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-2.0.0-hdab9b82_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-he8c428d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-9.0.1-gpl_hc45e1dd_900.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.3-h4db4eae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.17-h7cc23a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.3.0-hc6a0c74_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.3.0-hc396a85_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.8-h68053f1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.55.0-pl5321h3795e67_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.6.0-h980caa0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hfd2156b_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.3.0-hc6a0c74_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.3.0-h90d9265_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.2.0-nompi_hc529623_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/imath-3.2.2-hde8ca8f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.2-h7148c6a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.6-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbc21106_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-4.0-h770b6ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h9073bf1_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.2.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.33.1-h7148c6a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260526.0-cxx17_h0dc7533_2.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/libass-0.17.5-h3b6f6bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.4.2-h3ef1eba_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-11_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-h39a168f_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-ha411449_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-h018ffa1_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-h084b8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-11_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.22.0-ha042cf0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdav1d7-1.5.4-hebe6cf0_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-hd45a770_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.4.0-h39d0f39_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.129-h7cc23a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h373387f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.4-hd2095e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h5e6c136_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-16.2.0-h69a702a_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-16.2.0-h69a702a_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-16.2.0-h6b99dfc_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.90.0-h569388d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.5.0-h23af247_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.13.0-default_he001693_1000.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h57c4cff_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h0cb94f2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.12.0-heb2dce7_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-11_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.11.0-11_h6ae95b6_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h74cf4be_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.34-pthreads_hf13c14d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopencv-5.0.0-headless_h9ca8472_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.3.0-hb2f3c86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.3.0-h9f30d58_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.3.0-h9f30d58_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.3.0-hfeb6f35_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.3.0-hb2f3c86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.3.0-hb2f3c86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.3.0-hb2f3c86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.3.0-hfeb6f35_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.3.0-h6c33c14_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.3.0-h6c33c14_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.3.0-h0542e35_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.3.0-h565fa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.3.0-h0542e35_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-hebe6cf0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-hc50b9dd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h922cc85_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-7.35.1-h622638d_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-ha427ee3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.3.0-h54950a5_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hbc6d301_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-h6154650_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-261.3-h26e0ef7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.2-hcc2c06a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-261.3-h26e0ef7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.4-hcfc3c73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.24.1-hb83e432_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.16.0-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hd2095e1_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.357.0-h0e34353_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-hb83e432_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.38-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-h51789e4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.4-hf3af7cc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.4-h7df9aa5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.33.7-h877a99e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ninja-1.13.2-h171cf75_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.4-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openexr-3.4.15-ha9edf89_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-h8c49934_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-heb1ab33_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.31.0-h8d634f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.4-h781a0a9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.58.2-h7bb47b9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-h8b3dc9c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-9_h7cc23a3_perl5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h7cc23a3_1004.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.8.1-h1fbca29_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb03c661_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.6-h7e3ee7f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.16-h5330f5c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2026.3-hcebf71c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h34e00bb_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.3-h7148c6a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.2.0-hd2095e1_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.1.0-hfd44327_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.26.0-hc1c935e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h7cc23a3_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h73f68a7_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-h0d788c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-h7cc23a3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-h7cc23a3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-h7cc23a3_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.3.0-h2b852eb_105.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.3.0-hb2c5482_105.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda + - conda: https://software.repos.intel.com/python/conda/linux-64/ipp-2026.0.1-intel_51.conda + - conda: https://software.repos.intel.com/python/conda/linux-64/ipp-devel-2026.0.1-intel_51.conda + - conda: https://software.repos.intel.com/python/conda/linux-64/ipp-include-2026.0.1-intel_51.conda + - conda: https://software.repos.intel.com/python/conda/linux-64/ipp-license-2026.0.1-intel_51.conda default: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -21,12 +223,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.8-hebe6cf0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.4.3-hff7ac6b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.3.0-h8846f6e_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.3.0-h8846f6e_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-2.0.0-hdab9b82_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.3.0-hc6a0c74_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.3.0-h6f13dc8_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.3.0-hc6a0c74_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.3.0-h90d9265_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.3.0-hc6a0c74_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.3.0-hc396a85_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.3.0-hc6a0c74_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.3.0-h90d9265_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbc21106_2.conda @@ -34,15 +236,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.22.0-ha042cf0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h373387f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.4-hd2095e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h74cf4be_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.3.0-h54950a5_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.3.0-h54950a5_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-h6154650_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda @@ -53,8 +255,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_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/noarch/libgcc-devel_linux-64-15.3.0-h2b852eb_104.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.3.0-hb2c5482_104.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.3.0-h2b852eb_105.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.3.0-hb2c5482_105.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda packages: @@ -74,6 +276,174 @@ packages: - _openmp_mutex >=4.5 size: 28948 timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.16.1-h7cc23a3_1.conda + sha256: a35bddac04be093769e81814465a537961c6ed0f8d3cc23d6dce6ecdfaf71821 + md5: 7094e0d8d14de0eff6d83f0d2f1f661e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - alsa-lib >=1.2.16.1,<1.3.0a0 + size: 594986 + timestamp: 1787763412911 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.14.1-pl5321h57e6904_2.conda + sha256: bcfe516fdebf4503ab10c7968ee880774ce1adee6e055738ca53c81745cfdd58 + md5: 5fabcad67aa128f07f269066ee7fdde6 + depends: + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - aom >=3.14.1,<3.15.0a0 + size: 3246374 + timestamp: 1787256015178 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.4-h4610da3_2.conda + sha256: 0c92dc5ddf4edd4038a63adb79f9f0b03f61e9455ce3253b7d2cf708e06ff99e + md5: cefa84dbf94066e7a6902af288a2fedd + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-http >=0.11.0,<0.11.1.0a0 + - aws-c-common >=0.14.3,<0.14.4.0a0 + - aws-c-io >=0.27.5,<0.27.6.0a0 + - aws-c-sdkutils >=0.2.7,<0.2.8.0a0 + - aws-c-cal >=0.9.15,<0.9.16.0a0 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - aws-c-auth >=0.10.4,<0.10.5.0a0 + size: 135127 + timestamp: 1785199053057 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.15-h6bbde05_1.conda + sha256: 6eb21a0129e0aa7c6be733c7f2d1de6bc97a60c8382c1016f19dced722600d73 + md5: 8f2b374c79908f271be3d0e9f1c462a8 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.14.3,<0.14.4.0a0 + - libgcc >=14 + - openssl >=3.5.7,<4.0a0 + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - aws-c-cal >=0.9.15,<0.9.16.0a0 + size: 56630 + timestamp: 1785157790550 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.14.3-hb03c661_0.conda + sha256: 8ea79f36d50ba90d7147fe1a047f9a7f2d33b114a3d4bacf1360cd8df43986e4 + md5: ce8664d7c01d4a598ad38107b289b5ec + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - aws-c-common >=0.14.3,<0.14.4.0a0 + size: 245819 + timestamp: 1784596136918 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h01ee8f8_5.conda + sha256: 27f8581573c533a92a1a9619516ebb66d390b9923d296331985cfd342dc32d29 + md5: ae862abdbb3160f97478d3d4749164c0 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.14.3,<0.14.4.0a0 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - aws-c-compression >=0.3.2,<0.3.3.0a0 + size: 22282 + timestamp: 1785157574179 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.11.0-hbe094ff_5.conda + sha256: a4a5e24b398e7c0ef64de5a341ecb3f0fa87c2879177695c5d0bcbde0c4f8b5e + md5: c09f7ec7327b8bd52fc2d6eacaa18d3b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-io >=0.27.5,<0.27.6.0a0 + - aws-c-cal >=0.9.15,<0.9.16.0a0 + - aws-c-common >=0.14.3,<0.14.4.0a0 + - aws-c-compression >=0.3.2,<0.3.3.0a0 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - aws-c-http >=0.11.0,<0.11.1.0a0 + size: 231270 + timestamp: 1785186134512 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.27.5-h4f381ba_1.conda + sha256: 76ab4eb6cae12e14244cb1fe11ecccc2f103f8ffa7e80e222099c6b16c19ae20 + md5: 948f5a4fddac779b7942626e5807caba + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-common >=0.14.3,<0.14.4.0a0 + - aws-c-cal >=0.9.15,<0.9.16.0a0 + - s2n >=1.7.6,<1.7.7.0a0 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - aws-c-io >=0.27.5,<0.27.6.0a0 + size: 183633 + timestamp: 1785170070776 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.13.1-h7508075_1.conda + sha256: d24f7f34b3b564535b533b17176e71f71b6944aa2cb71813283bece139908d9f + md5: 2daf54d3eef87b757f68d7597534dd2f + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-http >=0.11.0,<0.11.1.0a0 + - aws-c-auth >=0.10.4,<0.10.5.0a0 + - openssl >=3.5.7,<4.0a0 + - aws-c-common >=0.14.3,<0.14.4.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - aws-c-io >=0.27.5,<0.27.6.0a0 + - aws-c-cal >=0.9.15,<0.9.16.0a0 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - aws-c-s3 >=0.13.1,<0.13.2.0a0 + size: 157667 + timestamp: 1785351292770 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.7-h01ee8f8_3.conda + sha256: b308c393a3db78cef29942c6b83ca7321f86d357fbb47504d59f55254601c87a + md5: 412f0cf18cc4c4945655dba954ca2d76 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-common >=0.14.3,<0.14.4.0a0 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - aws-c-sdkutils >=0.2.7,<0.2.8.0a0 + size: 68574 + timestamp: 1785159234141 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h01ee8f8_5.conda + sha256: f8d2cd9faccb273df739fc28431b484a90aca10027ef44f7fec1d4f0bd229a76 + md5: 4d70caf5260e0787675c3bf61ae5b64c + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.14.3,<0.14.4.0a0 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - aws-checksums >=0.2.10,<0.2.11.0a0 + size: 101887 + timestamp: 1785159213897 - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.46.1-default_hfdba357_102.conda sha256: fb7bf36984a37ce7e4714d1d1da0bd0e3bfc679520f5cdc184afc676fd4b5da2 md5: a0c5e0b7f58c8ceeb08e5bc41251d5a2 @@ -112,6 +482,35 @@ packages: - c-ares >=1.34.8,<2.0a0 size: 228700 timestamp: 1787169971173 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.6-h3c89d7e_0.conda + sha256: 5d0efc6f9981468aca72897460d9b2d17b74dff72787f20a9d2330e214064515 + md5: 7920701f9abcb488411495742cf365a7 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.3,<79.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=15 + - libglib >=2.90.0,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libstdcxx >=15 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - pixman >=0.46.4,<1.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: LGPL-2.1-only or MPL-1.1 + run_exports: + weak: + - cairo >=1.18.6,<2.0a0 + size: 1007110 + timestamp: 1790045358757 - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.4.3-hff7ac6b_0.conda sha256: a6d21b5166cd7a44fa975e541f1abf851579a8ac3458e72e77125761da06c842 md5: e9d08c8f9a02853bfc6f8c3a4b0b19a4 @@ -133,16 +532,16 @@ packages: run_exports: {} size: 26077721 timestamp: 1787711119591 -- conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.3.0-h8846f6e_4.conda - sha256: 87ebd4f94c8823763d35adaba292c2dc8c60ddda70e0980f32eae0dbb0e2aa2d - md5: 4bfbca2f3bfcdf6d78a339cfd5368fce +- conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.3.0-h8846f6e_5.conda + sha256: 969fd0ed8854739103a0a58a5976f11d0b9f476350c5f5d3d6a3e36ba1ba7596 + md5: 1e528e9087b065353337275369151640 depends: - gcc_impl_linux-64 >=15.3.0,<15.3.1.0a0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL run_exports: {} - size: 32631 - timestamp: 1787618595567 + size: 32620 + timestamp: 1789486882706 - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-2.0.0-hdab9b82_0.conda sha256: 384ab445d260e0d69e701c32eb0ed870d348ec7e3efc78d944823855d4512ca1 md5: 923dacbfd97122c65c97a35f6e959ab8 @@ -153,59 +552,289 @@ packages: run_exports: {} size: 6972 timestamp: 1786642183694 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.3.0-hc6a0c74_4.conda - sha256: f9ee593ac1cbad6633c51c498b0ba8b1da14e6dc22c0cb49a1d158abe8d2cb0f - md5: cd390c3b900677ec6b0fdd729173125d +- conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda + sha256: 22053a5842ca8ee1cf8e1a817138cdb5e647eb2c46979f84153f6ad7bde73020 + md5: 418c6ca5929a611cbd69204907a83995 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - dav1d >=1.2.1,<1.2.2.0a0 + size: 760229 + timestamp: 1685695754230 +- conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-he8c428d_2.conda + sha256: 87a0a42d4ccc527597eff3234509dfb03e0d9bf67d5e2b6fc758e2ef389d8abe + md5: a6eb37b51be1a9a654dc3a8aca039b1a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - libexpat >=2.8.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - libglib >=2.88.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + run_exports: + weak: + - dbus >=1.16.2,<2.0a0 + size: 449564 + timestamp: 1788197922783 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-9.0.1-gpl_hc45e1dd_900.conda + sha256: 3848776a096b92665b6419ea5bd7867a3bd5e512bf8a328ef1264e4609dcae4d + md5: 21be8a374cbd1a1c75c75a9179b604e8 + depends: + - __glibc >=2.17,<3.0.a0 + - alsa-lib >=1.2.16.1,<1.3.0a0 + - aom >=3.14.1,<3.15.0a0 + - bzip2 >=1.0.8,<2.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - gmp >=6.3.0,<7.0a0 + - lame >=4.0,<4.1.0a0 + - libass >=0.17.5,<0.17.6.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=15 + - libharfbuzz >=14.3.0 + - libiconv >=1.18,<2.0a0 + - libjxl >=0.12.0,<0.13.0a0 + - liblzma >=5.8.3,<6.0a0 + - libopenvino >=2026.3.0,<2026.3.1.0a0 + - libopenvino-auto-batch-plugin >=2026.3.0,<2026.3.1.0a0 + - libopenvino-auto-plugin >=2026.3.0,<2026.3.1.0a0 + - libopenvino-hetero-plugin >=2026.3.0,<2026.3.1.0a0 + - libopenvino-intel-cpu-plugin >=2026.3.0,<2026.3.1.0a0 + - libopenvino-intel-gpu-plugin >=2026.3.0,<2026.3.1.0a0 + - libopenvino-intel-npu-plugin >=2026.3.0,<2026.3.1.0a0 + - libopenvino-ir-frontend >=2026.3.0,<2026.3.1.0a0 + - libopenvino-onnx-frontend >=2026.3.0,<2026.3.1.0a0 + - libopenvino-paddle-frontend >=2026.3.0,<2026.3.1.0a0 + - libopenvino-pytorch-frontend >=2026.3.0,<2026.3.1.0a0 + - libopenvino-tensorflow-frontend >=2026.3.0,<2026.3.1.0a0 + - libopenvino-tensorflow-lite-frontend >=2026.3.0,<2026.3.1.0a0 + - libopus >=1.6.1,<2.0a0 + - libplacebo >=7.360.1,<7.361.0a0 + - librsvg >=2.62.3,<3.0a0 + - libstdcxx >=15 + - libva >=2.24.1,<3.0a0 + - libvorbis >=1.3.7,<1.4.0a0 + - libvpl >=2.16.0,<2.17.0a0 + - libvpx >=1.15.2,<1.16.0a0 + - libvulkan-loader >=1.4.357.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - openh264 >=2.6.0,<2.6.1.0a0 + - openssl >=3.5.7,<4.0a0 + - pulseaudio-client >=17.0,<17.1.0a0 + - sdl2 >=2.32.56,<3.0a0 + - svt-av1 >=4.2.0,<4.2.1.0a0 + - x264 >=1!164.3095,<1!165 + - x265 >=3.5,<3.6.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + constrains: + - __cuda >=12.8 + license: GPL-2.0-or-later + license_family: GPL + run_exports: + weak: + - ffmpeg >=9.0.1,<10.0a0 + size: 13764967 + timestamp: 1786704879493 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.3-h4db4eae_1.conda + sha256: 5a3eb10b18a97223ab06b3a7f0d7f56658db2f2800e2f2af95836fe3bf55ba63 + md5: 922776b528a470ab5afa81fd42abfa1d + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=15 + - libuuid >=2.42.2,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + size: 296288 + timestamp: 1786667377340 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.17-h7cc23a3_0.conda + sha256: 3ba79ebfbd14ca5db4affaf10ee8001064e907de5baabc2dbe5bcd9aec856c9f + md5: f9d5302bca196ee87e62f393f2626562 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: LGPL-2.1-or-later + run_exports: + weak: + - fribidi >=1.0.17,<2.0a0 + size: 64102 + timestamp: 1790011855888 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.3.0-hc6a0c74_5.conda + sha256: 82ced70a8e470b2c4a0be0af465cfee6a54b3dedea6fd20a33bd69e95f57ca02 + md5: 991fd0f71d6dd95cdce863823ec746f7 depends: - conda-gcc-specs - - gcc_impl_linux-64 15.3.0 h6f13dc8_4 + - gcc_impl_linux-64 15.3.0 hc396a85_5 license: BSD-3-Clause license_family: BSD run_exports: {} - size: 29431 - timestamp: 1787618696046 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.3.0-h6f13dc8_4.conda - sha256: c7e4915c0c5e8f081e107d50ab6041eab17fbe094108538d614faed354ab8974 - md5: b1f9f0b4a4697fd26c1fe3c7a1ac659f + size: 29465 + timestamp: 1789487004656 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.3.0-hc396a85_5.conda + sha256: 32d6f106ab50fbe86a7c6df2012ecf47dc1e8edf3c8c653e6de65471cedb9488 + md5: 785f3e8588520b23b6b1df8e4081710e depends: - binutils_impl_linux-64 >=2.46.1 - libgcc >=15.3.0 - - libgcc-devel_linux-64 15.3.0 h2b852eb_104 + - libgcc-devel_linux-64 15.3.0 h2b852eb_105 - libgomp >=15.3.0 - - libsanitizer 15.3.0 h54950a5_4 + - libsanitizer 15.3.0 h54950a5_5 - libstdcxx >=15.3.0 - - libstdcxx-devel_linux-64 15.3.0 hb2c5482_104 + - libstdcxx-devel_linux-64 15.3.0 hb2c5482_105 - sysroot_linux-64 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL run_exports: {} - size: 82843060 - timestamp: 1787618483258 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.3.0-hc6a0c74_4.conda - sha256: 9ea6ca0830d8fe8ede308b4ab3f206f3504c422f7155981e13f2eca56a5ef9e8 - md5: 2264c7beb16d977423e8ebd69f44be88 + size: 84297590 + timestamp: 1789486747705 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.8-h68053f1_2.conda + sha256: 32f3ebd1871cb6ac7eac36c78c410860f38e8d252d5857a80f6abfcb79c7e0ff + md5: d7bd6ccfc58eb6796bd6bba85878fc0e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libglib >=2.88.3,<3.0a0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libtiff >=4.7.2,<4.8.0a0 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - gdk-pixbuf >=2.44.8,<3.0a0 + size: 581961 + timestamp: 1788490424411 +- conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.55.0-pl5321h3795e67_3.conda + sha256: dc160f995b3d49627bf5c865f9c0db79d803c73a605a2c05c3f950d5f884936e + md5: a3ea529904edb09f7a0b22926ee24fd3 + depends: + - __glibc >=2.17,<3.0.a0 + - libcurl >=8.22.0,<9.0a0 + - libexpat >=2.8.1,<3.0a0 + - libgcc >=15 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.8,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - perl 5.* + constrains: + - __glibc >=2.17 + license: GPL-2.0-or-later and LGPL-2.1-or-later + run_exports: {} + size: 12241592 + timestamp: 1789559175424 +- conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.6.0-h980caa0_0.conda + sha256: 390b9e94b29b53366673e5460b433c9daa34788f5cdabf8b30bf40cf086c60dd + md5: 35406140e41bd93ba199420e299854ef + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - spirv-tools >=2026,<2027.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - glslang >=16,<17.0a0 + size: 1449282 + timestamp: 1789335100141 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hfd2156b_3.conda + sha256: f36c336efc874f346a53a9011f67e997f9faac505562cc18c13b6d399cfe61c7 + md5: 576e32739f323438bf69ab006c21be7b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: GPL-2.0-or-later OR LGPL-3.0-or-later + run_exports: + weak: + - gmp >=6.3.0,<7.0a0 + size: 493498 + timestamp: 1786629164954 +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-h54a6638_1.conda + sha256: 7fa3b6a9c081fa3e545573152a788d061a0a0ba57df7251cc0f4f75225fc93e7 + md5: f9fe2984587fa8235a6af6004760cd18 + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + license: LGPL-2.0-or-later + license_family: LGPL + run_exports: + weak: + - graphite2 >=1.3.15,<2.0a0 + size: 102835 + timestamp: 1786118485753 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.3.0-hc6a0c74_5.conda + sha256: f090b2500c715a498177d725048270925d1e3089e379ae550df2a5be983b7bb1 + md5: dbf1e3e3871d3133c0bc9f8078014f6e depends: - conda-gcc-specs - - gcc 15.3.0 hc6a0c74_4 - - gxx_impl_linux-64 15.3.0 h90d9265_4 + - gcc 15.3.0 hc6a0c74_5 + - gxx_impl_linux-64 15.3.0 h90d9265_5 license: BSD-3-Clause license_family: BSD run_exports: {} - size: 28893 - timestamp: 1787618735531 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.3.0-h90d9265_4.conda - sha256: 2b18349ad16f4be8dd9f2afa58d4ab7b9014fc543326ddecd59db215c6dc721d - md5: 9a6fbf3da4dd624b8382e096bbca10f4 + size: 28952 + timestamp: 1789487101928 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.3.0-h90d9265_5.conda + sha256: 0e58e81f8d31454bd5edc39b15df6dae46aa00ca6ab5ff7f2b6996cfbedeb4ea + md5: 9807d970a37a428c4990e7a1d70fd4ae depends: - - gcc_impl_linux-64 15.3.0 h6f13dc8_4 - - libstdcxx-devel_linux-64 15.3.0 hb2c5482_104 + - gcc_impl_linux-64 15.3.0 hc396a85_5 + - libstdcxx-devel_linux-64 15.3.0 hb2c5482_105 - sysroot_linux-64 - tzdata license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL run_exports: {} - size: 16252239 - timestamp: 1787618666649 + size: 16225632 + timestamp: 1789486960809 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.2.0-nompi_hc529623_100.conda + sha256: 786d126bfb33b923dd1341a92c2a3edd0ff5d0a71db8557fca9324ea4e93d677 + md5: 336f7fb9af0c49cc246e2cff0992c3c4 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-auth >=0.10.4,<0.10.5.0a0 + - aws-c-common >=0.14.3,<0.14.4.0a0 + - aws-c-http >=0.11.0,<0.11.1.0a0 + - aws-c-io >=0.27.5,<0.27.6.0a0 + - aws-c-s3 >=0.13.1,<0.13.2.0a0 + - aws-c-sdkutils >=0.2.7,<0.2.8.0a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.21.0,<9.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.4.0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - hdf5 >=2.2.0,<3.0a0 + size: 4250161 + timestamp: 1786233343747 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda sha256: 9f07834f0c546ab14d885ce0366285f61f44e326c0edd1fc63b8294e113ae432 md5: 72a381cbad04f24b1c2a43ef707f45b4 @@ -220,6 +849,51 @@ packages: - icu >=78.3,<79.0a0 size: 14459115 timestamp: 1786545741408 +- conda: https://conda.anaconda.org/conda-forge/linux-64/imath-3.2.2-hde8ca8f_0.conda + sha256: 43f30e6fd8cbe1fef59da760d1847c9ceff3fb69ceee7fd4a34538b0927959dd + md5: c427448c6f3972c76e8a4474e0fe367b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - imath >=3.2.2,<3.2.3.0a0 + size: 160289 + timestamp: 1759983212466 +- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.2-h7148c6a_0.conda + sha256: a916de0f52de5ce16dc7869ca433dc420be55cae6a04592333ae9923545aa096 + md5: 7d8cc0ba43a18e1d6ddd7142175d6022 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + license: MIT + license_family: MIT + run_exports: + weak: + - intel-gmmlib >=22.10.2,<23.0a0 + size: 1007001 + timestamp: 1789121934082 +- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.6-hecca717_0.conda + sha256: 7cbd7fda22db70c64af64c9173434a4ede58e4f220bda52a044e469aa94c65cb + md5: aaf7c3db8c7c4533deb5449d3ba1c51f + depends: + - __glibc >=2.17,<3.0.a0 + - intel-gmmlib >=22.10.0,<23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libva >=2.23.0,<3.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - intel-media-driver >=26.1.6,<26.2.0a0 + size: 8782375 + timestamp: 1776080148587 - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda sha256: dd053c96dcb0dcfd59422aefea9d2fe937a190167f34fba7893ec1e10a7e8963 md5: ba55d1b89fd7775e67de8291029b4059 @@ -250,6 +924,35 @@ packages: - krb5 >=1.22.2,<1.23.0a0 size: 1394333 timestamp: 1786762112514 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lame-4.0-h770b6ad_1.conda + sha256: 560a8561c5cc1f3c05b1e91d93436eb14fe55beb29c27e02623b42960d64d91f + md5: 5aecb65b6ecfee6f878e6789a8a779de + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - mpg123 >=1.33.7,<1.34.0a0 + license: LGPL-2.0-only + license_family: LGPL + run_exports: + weak: + - lame >=4.0,<4.1.0a0 + size: 304210 + timestamp: 1786292506120 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h9073bf1_3.conda + sha256: 03e675b9adaf235aab880e4133c72f4830e87bc7da2df59d6194771612239b22 + md5: 596464faa06e0b656b35416188ef9bba + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libjpeg-turbo >=3.2.0,<4.0a0 + - libtiff >=4.7.2,<4.8.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - lcms2 >=2.19.1,<3.0a0 + size: 254292 + timestamp: 1789051947923 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda sha256: 27d83f1188cd19bcb7754a078b3fa7f4cfb8527f8eb2fde54dd01fc529d1adec md5: 449500f2c089da11c40f5c21312e3e07 @@ -263,186 +966,1898 @@ packages: run_exports: {} size: 745303 timestamp: 1784214507189 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.22.0-ha042cf0_0.conda - sha256: 483b7eb97f56fbb3a9cb7190d33012dfa0a5aaed99ede61465563cd97dd82504 - md5: e617deee7af8eb0c04f6296d12b54157 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.2.0-hdb68285_0.conda + sha256: bf9fdebf55d8bc99d83531cdffda00703f4dc5f93a1a956768c147362c72feda + md5: fb9d356b1a57d6d54768be7ebd5fce09 depends: - __glibc >=2.17,<3.0.a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=15 - - libnghttp2 >=1.68.1,<2.0a0 - - libpsl >=0.23.1,<0.24.0a0 - - libssh2 >=1.11.1,<2.0a0 - - libzlib >=1.3.2,<2.0a0 - - openssl >=3.5.8,<4.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: curl - license_family: MIT + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: Apache run_exports: weak: - - libcurl >=8.22.0,<9.0a0 - size: 499651 - timestamp: 1788340719230 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h373387f_1.conda + - lerc >=4.2.0,<5.0a0 + size: 271158 + timestamp: 1785036167977 +- conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.33.1-h7148c6a_0.conda + sha256: ae6bc49a784c442b4cf5b1306a342a4f85667b2f489509c01bb77edec0f9e0f3 + md5: 88ec7b59e2bff6caf5b517f73e7ce853 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + license: MIT + license_family: MIT + run_exports: {} + size: 780520 + timestamp: 1788366449509 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260526.0-cxx17_h0dc7533_2.conda + sha256: 7bb3d495411b7059e85225aae500d84e7846a4bb02ebd77e4450200b20c180f0 + md5: 6983bfe8e09992014b9cf393769c7a84 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - abseil-cpp =20260526.0 + - libabseil-static =20260526.0=cxx17* + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - libabseil >=20260526.0,<20260527.0a0 + - libabseil =*=cxx17* + size: 1436888 + timestamp: 1787217011773 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + sha256: 822e4ae421a7e9c04e841323526321185f6659222325e1a9aedec811c686e688 + md5: 86f7414544ae606282352fa1e116b41f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - libaec >=1.1.5,<2.0a0 + size: 36544 + timestamp: 1769221884824 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.5-h3b6f6bf_1.conda + sha256: 9de9aaf5e70265937a026d5f172c468ec4683e25bc0b2ddc641569b8d4a7f535 + md5: faaf338c59903174de76aca5181ba49e + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.16,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libiconv >=1.18,<2.0a0 + - libharfbuzz >=14.4.0 + license: ISC + run_exports: + weak: + - libass >=0.17.5,<0.17.6.0a0 + size: 155416 + timestamp: 1789989013309 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.4.2-h3ef1eba_4.conda + sha256: f4c7dbdff93bc62e4aa4a94635c4a139cd4b1e8deb753af5892a8f1ee6456b4d + md5: 2326d9fe25838dddac1f3876aa7ff878 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - rav1e >=0.8.1,<0.9.0a0 + - aom >=3.14.1,<3.15.0a0 + - libdav1d7 >=1.5.4 + - svt-av1 >=4.2.0,<4.2.1.0a0 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - libavif16 >=1.4.2,<2.0a0 + size: 168234 + timestamp: 1788391245817 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-11_h4a7cf45_openblas.conda + build_number: 11 + sha256: d942e0c820d60a613a6f786d074f0820fb6343e3f1ccfb110b1d98b44fb75968 + md5: b8cce1486f3c62f33291d6318c193d0d + depends: + - libopenblas >=0.3.34,<0.3.35.0a0 + - libopenblas >=0.3.34,<1.0a0 + constrains: + - blas 2.311 openblas + - libcblas 3.11.0 11*_openblas + - liblapack 3.11.0 11*_openblas + - liblapacke 3.11.0 11*_openblas + - mkl <2027 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libblas >=3.11.0,<4.0a0 + size: 18246 + timestamp: 1789061062982 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-h39a168f_4.conda + sha256: c4e9854c585f3ee1785f651287ecdf8c28f30a2ea1b159a513005f8a0f6453a3 + md5: df210655e30a05e3b069c91b7aaddd2d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: MIT + license_family: MIT + run_exports: + weak: + - libbrotlicommon >=1.2.0,<1.3.0a0 + size: 80561 + timestamp: 1788480364653 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-ha411449_4.conda + sha256: d5ed24da3e583a92227fe77280978b7933f07a39a2b60156c5ad95e5c76733fa + md5: 0cfd601eb03cca403dcc248844787486 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.2.0 h39a168f_4 + - libgcc >=15 + license: MIT + license_family: MIT + run_exports: + weak: + - libbrotlidec >=1.2.0,<1.3.0a0 + size: 34739 + timestamp: 1788480374261 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-h018ffa1_4.conda + sha256: b9f3cb510337655485c2e79ce5f7dd468991b19ad29723ffa1175a0aed1b69ae + md5: 4136f6e4ef4835cc7df39a707cbd511c + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.2.0 h39a168f_4 + - libgcc >=15 + license: MIT + license_family: MIT + run_exports: + weak: + - libbrotlienc >=1.2.0,<1.3.0a0 + size: 298134 + timestamp: 1788480383223 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-h084b8d7_1.conda + sha256: 8cb25174d6b6fac95d31e86cfe41faffc8ee9dacbf2bfd22e6c23377e8f338c1 + md5: 5db514adf5f843126ff846d1510f22a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libcap >=2.78,<2.79.0a0 + size: 124306 + timestamp: 1786025967663 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-11_h0358290_openblas.conda + build_number: 11 + sha256: f7d1bbdea61cf94ba219d17b2cb571a29830f8025385af799bff5a7ad1ef45e6 + md5: 73a248c30811075059b5aeda766c2624 + depends: + - libblas 3.11.0 11_h4a7cf45_openblas + constrains: + - blas 2.311 openblas + - liblapack 3.11.0 11*_openblas + - liblapacke 3.11.0 11*_openblas + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libcblas >=3.11.0,<4.0a0 + size: 18196 + timestamp: 1789061068819 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.22.0-ha042cf0_0.conda + sha256: 483b7eb97f56fbb3a9cb7190d33012dfa0a5aaed99ede61465563cd97dd82504 + md5: e617deee7af8eb0c04f6296d12b54157 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=15 + - libnghttp2 >=1.68.1,<2.0a0 + - libpsl >=0.23.1,<0.24.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.8,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + run_exports: + weak: + - libcurl >=8.22.0,<9.0a0 + size: 499651 + timestamp: 1788340719230 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdav1d7-1.5.4-hebe6cf0_4.conda + sha256: 9d3d31b9549f76ab61e2678a22566e4342842f388ec6df4ac10aea3ae3526697 + md5: ad38caba8fd619ac5e6d5fef0a6678cd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: BSD-2-Clause + license_family: BSD + run_exports: {} + size: 765022 + timestamp: 1788366542408 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-hd45a770_1.conda + sha256: 82e134c8a08b1eed9a2ed8ab578b89aa1730dcde3dea8dd87645ed0637878e54 + md5: 40f9b31aa9cf007789867df0decd0492 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 73710 + timestamp: 1785908694612 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.4.0-h39d0f39_1.conda + sha256: 2b662358b456aab29e0c4b0e2b476d559fbc4639665cd32ebea66cc3f796fbd2 + md5: c408b3aee110b40687bfcd51fbe85810 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + run_exports: + weak: + - libdovi >=3.4.0,<4.0a0 + size: 405118 + timestamp: 1789725215433 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.129-h7cc23a3_0.conda + sha256: ea46b0ca0fa16af1f8b329b740e6cd8b4577c5378fa8717b28a885f70668633d + md5: 64cc91512b6278c315349dc13c53f680 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libpciaccess >=0.19,<0.20.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libdrm >=2.4.129,<2.5.0a0 + size: 313461 + timestamp: 1786684701973 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h373387f_1.conda sha256: 6473eb8caf2aae830f37caa93db9b26dddf7ac84b63229e8bf7fc0e5c3ab95b0 md5: 50708d3b951d0f8e2d7f2df5b5edc040 depends: - - ncurses + - ncurses + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - ncurses >=6.6,<7.0a0 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - libedit >=3.1.20250104,<3.2.0a0 + size: 135098 + timestamp: 1786616658086 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_5.conda + sha256: 13d3fde9c1dcf254968cc70652222a43f25d04e69555ccf855553110e753288e + md5: 3a1b41c4591a0a1734382af3e2b8bc08 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_5 + license: LicenseRef-libglvnd + run_exports: {} + size: 46694 + timestamp: 1787310030923 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h280c20c_3.conda + sha256: e4418f68d01a6307c4431b585c71b584f40189877364e542ee87deb777f5e85b + md5: 7bc31538d6e3fb349e897353969237ec + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: BSD-2-Clause OR GPL-2.0-or-later + license_family: GPL + run_exports: + weak: + - libev >=4.33,<4.34.0a0 + size: 43220 + timestamp: 1785917328200 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.4-hd2095e1_0.conda + sha256: 2f5e90b621f7bf64c35d5c972bd85a645555d82404130569149a129dcbc8b8dd + md5: a77b44d6cbaad97f3ad050ab35fad55a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + constrains: + - expat 2.8.4.* + license: MIT + license_family: MIT + run_exports: {} + size: 77595 + timestamp: 1790073019208 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda + sha256: c8c7583ef063bc3c430f1d48298e5ad24f796a35c22ed5b14183325825a61106 + md5: 6525a0b06aa4fd390795f0740636a9dd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: MIT + license_family: MIT + run_exports: + weak: + - libffi >=3.7.0,<3.8.0a0 + size: 68004 + timestamp: 1787753412298 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda + sha256: e755e234236bdda3d265ae82e5b0581d259a9279e3e5b31d745dc43251ad64fb + md5: 47595b9d53054907a00d95e4d47af1d6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libogg >=1.3.5,<1.4.0a0 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libflac >=1.5.0,<1.6.0a0 + size: 424563 + timestamp: 1764526740626 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_2.conda + sha256: fb12ecb46c30d18d928c0e8fc346ab13b5f6fc8a9cacae4f2f4bb188782586f5 + md5: f8054e759d0ddddaf34a5c8fedc900a1 + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + run_exports: {} + size: 8407 + timestamp: 1786641007099 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h5e6c136_2.conda + sha256: ec607dd5445dd17ff6bf8b7fe6832e5504c226dd91d3aaea7ba83569808b0ce4 + md5: b72a266a9317036fd0464cb98b027cd0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + run_exports: {} + size: 387671 + timestamp: 1786641006460 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_5.conda + sha256: 33d1b5d57c5a55a474330c5ec41fe7001a5aa600d9639389e8ce5edafae216a4 + md5: 3b62b92f0f082b67c59618ebf07617a7 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==16.2.0=*_5 + - libgomp 16.2.0 he0feb66_5 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: {} + size: 1057064 + timestamp: 1789485807107 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-16.2.0-h69a702a_5.conda + sha256: d298972e17697a5e96806d5f2c151c53efd0afa0ef10db5d6757a5b186817219 + md5: e7c34906139296448e3554fafa3dbec2 + depends: + - libgcc 16.2.0 ha9f2e26_5 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: + strong: + - libgcc + size: 28535 + timestamp: 1789485811332 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-16.2.0-h69a702a_5.conda + sha256: 7e694578cbabd46251d7a069d89da6479c5edd962d78bbc66a847c1b722a8365 + md5: 34ddf93e56ee44924ce76a614e5fb379 + depends: + - libgfortran5 16.2.0 h6b99dfc_5 + constrains: + - libgfortran-ng ==16.2.0=*_5 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: {} + size: 28520 + timestamp: 1789485833036 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-16.2.0-h6b99dfc_5.conda + sha256: cc767363e3148a18d3a3015eeaed722bbf8ca0acc3a29157df2965e97caa9803 + md5: a7eb3f9540094247ec8a2fa800cf9bbf + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=16.2.0 + constrains: + - libgfortran 16.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: {} + size: 2528103 + timestamp: 1789485817694 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_5.conda + sha256: 7b2e7e31e8a4f5a01c45ecadcd8aa68c8f733b035240bc7ba9881835ef4bf7b4 + md5: 81141db127a106eb5a91df69a29c9918 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_5 + - libglx 1.7.0 ha4b6fd6_5 + license: LicenseRef-libglvnd + run_exports: {} + size: 131988 + timestamp: 1787310049847 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.90.0-h569388d_0.conda + sha256: 9e688e046550415c030c3d08ed9a3fd13a51d7bc56295283b858b6c3070bb9f8 + md5: c85e9539551f1fd21104e518d940c244 + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libiconv >=1.18,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libffi >=3.7.0,<3.8.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + run_exports: + weak: + - libglib >=2.90.0,<3.0a0 + size: 4819130 + timestamp: 1789478025196 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_5.conda + sha256: 6eb77601a44b78c4631d886d54ef54f321c2bdc69fdefc4065a1e0491f030c76 + md5: cfcf11edcfd4acf0094771a9c3b8587f + depends: + - __glibc >=2.17,<3.0.a0 + license: LicenseRef-libglvnd + run_exports: {} + size: 133827 + timestamp: 1787310026653 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_5.conda + sha256: d1f0d51aea6bcc5d915969cbed32e72a8ed6a95931b87357ef8d0866573688c4 + md5: 614e10aae180f87b84f0d1ca8ceb7d9e + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_5 + - xorg-libx11 >=1.8.13,<2.0a0 + license: LicenseRef-libglvnd + run_exports: {} + size: 79834 + timestamp: 1787310042550 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_5.conda + sha256: 224a5a09e258a1a257089a9af310e9336e1d36834959718a9fab8679742dd822 + md5: af44890f8a2beefd3a83805a59a65014 + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: + strong: + - _openmp_mutex >=4.5 + size: 641644 + timestamp: 1789485759120 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.5.0-h23af247_0.conda + sha256: 4e1522841eb5a5ab5a152ea9e2c1db4ec7919ab3c8991354367db9e8902e6111 + md5: 4c0d9662a054c51e69b66a427e7ead03 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.6,<2.0a0 + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=15 + - libglib >=2.90.0,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libstdcxx >=15 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: {} + size: 1408394 + timestamp: 1790061782998 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.13.0-default_he001693_1000.conda + sha256: 5041d295813dfb84652557839825880aae296222ab725972285c5abe3b6e4288 + md5: c197985b58bc813d26b42881f0021c82 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libhwloc >=2.13.0,<2.13.1.0a0 + size: 2436378 + timestamp: 1770953868164 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h57c4cff_1.conda + sha256: 23c7cf726b883f5e7c1bfa6bf24bceafa8be87245a7690e0b5c974eb320a9e83 + md5: d58bfbaaf51ed85771eae92c2e7f5816 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + license: Apache-2.0 OR BSD-3-Clause + run_exports: + weak: + - libhwy >=1.4.0,<1.5.0a0 + size: 1454025 + timestamp: 1787282422734 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h0cb94f2_3.conda + sha256: f943117edb9cd4d9c61cc972eee5a34291dc55ea7a6e9e38da104995841cbcb6 + md5: f92233bf33e24a25668bb2119e2c51f9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: LGPL-2.1-only + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 789471 + timestamp: 1787033836207 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.2.0-hb03c661_1.conda + sha256: bba8538e6538ed58a8479b332337b96986561f975d06cfa2039a016c2d246ee4 + md5: 898d1c9793eaa52efc4727bd84d2e39a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + run_exports: + weak: + - libjpeg-turbo >=3.2.0,<4.0a0 + size: 650434 + timestamp: 1785896381946 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.12.0-heb2dce7_2.conda + sha256: 965e59ea776344e93a416f7e0ba309810470a61c0e0c65f1eb90be0e808d7e9c + md5: 485788d339785bac87fe86315b4a0627 + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=15 + - libhwy >=1.4.0,<1.5.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libjxl >=0.12.0,<0.13.0a0 + size: 1886013 + timestamp: 1786691380980 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-11_h47877c9_openblas.conda + build_number: 11 + sha256: 1ad3f43c9319ef398a8ef45989f4903a06e3965b51e77fc669a4c894168a8411 + md5: 5622a13917855ce4b953b9e655cf9262 + depends: + - libblas 3.11.0 11_h4a7cf45_openblas + constrains: + - blas 2.311 openblas + - libcblas 3.11.0 11*_openblas + - liblapacke 3.11.0 11*_openblas + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - liblapack >=3.11.0,<3.12.0a0 + size: 18227 + timestamp: 1789061073957 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.11.0-11_h6ae95b6_openblas.conda + build_number: 11 + sha256: 912a8a4d152781f932b2afebf2c9d0c3537060998407bc306c4dd971adc4c0ad + md5: ed0f7f54d1fc2e6db0d93d6e81497331 + depends: + - libblas 3.11.0 11_h4a7cf45_openblas + - libcblas 3.11.0 11_h0358290_openblas + - liblapack 3.11.0 11_h47877c9_openblas + constrains: + - blas 2.311 openblas + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - liblapacke >=3.11.0,<3.12.0a0 + size: 18236 + timestamp: 1789061081541 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda + sha256: 9787df8c22a59c9a70d3e5a10db9ad663485e75e9ccc3f09bd092cb7b95e0dab + md5: 1390b7c5ac0b1d8e447bc5efa6d3c8c2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - xz 5.8.3.* + license: 0BSD + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 112995 + timestamp: 1786348617826 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h74cf4be_1.conda + sha256: 11a2f54a6f391e25738bce0023e6ef499600147bbcf21c1fa69d2e251b03cc6a + md5: 75d211f04ac87506f1f43420712a69fe + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.34.8,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc >=15 + - libstdcxx >=15 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libnghttp2 >=1.68.1,<2.0a0 + size: 649974 + timestamp: 1787177490105 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda + sha256: ffb066ddf2e76953f92e06677021c73c85536098f1c21fcd15360dbc859e22e4 + md5: 68e52064ed3897463c0e958ab5c8f91b + depends: + - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libogg >=1.3.5,<1.4.0a0 + size: 218500 + timestamp: 1745825989535 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.34-pthreads_hf13c14d_2.conda + sha256: 69a722751e14eab2eb3bfdcb9acb1187afbd962b0c49b48d829341e0f6787f60 + md5: 7e19fcd73d7f0997d3cb3326d2586a86 + depends: + - libgfortran5 >=15.3.0 + - libgfortran + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + constrains: + - openblas >=0.3.34,<0.3.35.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libopenblas >=0.3.34,<1.0a0 + size: 6845411 + timestamp: 1789141490688 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopencv-5.0.0-headless_h9ca8472_6.conda + sha256: d87c20c812ee54e56bcab3729e34c4d37ea7093d05fc4e17325690c59d857e58 + md5: ca34c9029b30eae279d6e06ef46db100 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - ffmpeg >=9.0.0,<10.0a0 + - hdf5 >=2.2.0,<3.0a0 + - imath >=3.2.2,<3.2.3.0a0 + - libavif16 >=1.4.2,<2.0a0 + - libcblas >=3.9.0,<4.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libharfbuzz >=14.3.0 + - libiconv >=1.18,<2.0a0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - libjxl >=0.12.0,<0.13.0a0 + - liblapack >=3.9.0,<4.0a0 + - liblapacke >=3.9.0,<4.0a0 + - libopenvino >=2026.3.0,<2026.3.1.0a0 + - libopenvino-auto-batch-plugin >=2026.3.0,<2026.3.1.0a0 + - libopenvino-auto-plugin >=2026.3.0,<2026.3.1.0a0 + - libopenvino-hetero-plugin >=2026.3.0,<2026.3.1.0a0 + - libopenvino-intel-cpu-plugin >=2026.3.0,<2026.3.1.0a0 + - libopenvino-intel-gpu-plugin >=2026.3.0,<2026.3.1.0a0 + - libopenvino-intel-npu-plugin >=2026.3.0,<2026.3.1.0a0 + - libopenvino-ir-frontend >=2026.3.0,<2026.3.1.0a0 + - libopenvino-onnx-frontend >=2026.3.0,<2026.3.1.0a0 + - libopenvino-paddle-frontend >=2026.3.0,<2026.3.1.0a0 + - libopenvino-pytorch-frontend >=2026.3.0,<2026.3.1.0a0 + - libopenvino-tensorflow-frontend >=2026.3.0,<2026.3.1.0a0 + - libopenvino-tensorflow-lite-frontend >=2026.3.0,<2026.3.1.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + - libtiff >=4.7.2,<4.8.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openexr >=3.4.14,<3.5.0a0 + - openjpeg >=2.5.4,<3.0a0 + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - libopencv >=5.0.0,<5.0.1.0a0 + size: 34966671 + timestamp: 1786397898398 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.3.0-hb2f3c86_0.conda + sha256: b52a974c4414aaf035ea9925e2f584d4a5b54194a7944978650a36c0153a8d9c + md5: 103554a12a2f6666aaaa360d30513911 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - libopenvino >=2026.3.0,<2026.3.1.0a0 + size: 6958517 + timestamp: 1786130942671 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.3.0-h9f30d58_0.conda + sha256: d70333e5fb2cab7518ba7db2fab371a98670a1b74e7bd53b49e18f1d55e67e38 + md5: 9728955c5c968923cdaf79317837ded4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.3.0 hb2f3c86_0 + - libstdcxx >=14 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 115265 + timestamp: 1786130964003 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.3.0-h9f30d58_0.conda + sha256: c9d1c80ec9b267cbbcbf234a358087ea42903f3bccdbbc7c663782943b4679ca + md5: 5fcbc9ef55adbffc1b804ae9c5f0e8d2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.3.0 hb2f3c86_0 + - libstdcxx >=14 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 251255 + timestamp: 1786130975924 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.3.0-hfeb6f35_0.conda + sha256: b0614ed14c8896c3c60d06522a40d5e4414024112fe88e6eab62afcbfb259a03 + md5: 00addda23f9daf34d787e8b445d81256 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.3.0 hb2f3c86_0 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 224643 + timestamp: 1786130986082 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.3.0-hb2f3c86_0.conda + sha256: 2306149a9b5fbac3a7f4217c868c504cb1706691ef9f63c4d6b0661cd84e160c + md5: 7559b02ec79104bb3e60658310815b4e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.3.0 hb2f3c86_0 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 13897562 + timestamp: 1786130996462 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.3.0-hb2f3c86_0.conda + sha256: 1442f41ff6ae171aba788c6e3bf1b156759b9f239d06a974f723b56e8bcb067b + md5: e9fed808af5cab2c1cf79c4a1c5fc399 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.3.0 hb2f3c86_0 + - libstdcxx >=14 + - ocl-icd >=2.3.4,<3.0a0 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 12124352 + timestamp: 1786131034750 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.3.0-hb2f3c86_0.conda + sha256: 1634885934423c4ffbaee56d9699190adc67334eab92b370f9015e5fc1247e58 + md5: 2402c917805aa66fd8604fc0b7292ec7 + depends: + - __glibc >=2.17,<3.0.a0 + - level-zero >=1.29.0,<2.0a0 + - libgcc >=14 + - libopenvino 2026.3.0 hb2f3c86_0 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 2802782 + timestamp: 1786131067457 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.3.0-hfeb6f35_0.conda + sha256: 4bca7d1b71182b1c95a82e77ad01402b261dac603acd9200f5b492e65bc8ca3d + md5: 2254de1e118bb39c876297b941c41d7b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.3.0 hb2f3c86_0 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - libopenvino-ir-frontend >=2026.3.0,<2026.3.1.0a0 + size: 205085 + timestamp: 1786131080935 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.3.0-h6c33c14_0.conda + sha256: f07168ce6d25aa529458c5c548df0b0e8b4033c8093a22aed92ee818c2e06679 + md5: 5a81c93a4ef5fe765fdc72ea0bb8ee48 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libgcc >=14 + - libopenvino 2026.3.0 hb2f3c86_0 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - libopenvino-onnx-frontend >=2026.3.0,<2026.3.1.0a0 + size: 2106186 + timestamp: 1786131093355 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.3.0-h6c33c14_0.conda + sha256: 3f28b4438c3014c5b05d196cf4abbb7214dc5877b887100f7663eff722347713 + md5: 5ad8dacb488082db12c72422c3deba74 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libgcc >=14 + - libopenvino 2026.3.0 hb2f3c86_0 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - libopenvino-paddle-frontend >=2026.3.0,<2026.3.1.0a0 + size: 690800 + timestamp: 1786131106085 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.3.0-h0542e35_0.conda + sha256: 9ae24b2df1aeda9aedfcc6ba08fcf1ba34b169481ff874288310282ce5659d07 + md5: 7e0fd6af38383ab7bd71dc6af22355f3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.3.0 hb2f3c86_0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - libopenvino-pytorch-frontend >=2026.3.0,<2026.3.1.0a0 + size: 1236788 + timestamp: 1786131116811 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.3.0-h565fa1b_0.conda + sha256: d1a027725dc6d6c2558e9e2b5ea65f99e982ec6adf575cef49be1ab5ecae8a47 + md5: e76e8e113e406442c0ca41284f6c3f0d + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libgcc >=14 + - libopenvino 2026.3.0 hb2f3c86_0 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + - snappy >=1.2.2,<1.3.0a0 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - libopenvino-tensorflow-frontend >=2026.3.0,<2026.3.1.0a0 + size: 1289288 + timestamp: 1786131128541 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.3.0-h0542e35_0.conda + sha256: 0a48ed163e475f3eff7ee358921f1393bbc769a58412c3b84cf27d86d1253440 + md5: e4318029124b4cacb8a2bfe884613676 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.3.0 hb2f3c86_0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - libopenvino-tensorflow-lite-frontend >=2026.3.0,<2026.3.1.0a0 + size: 511389 + timestamp: 1786131139830 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-hebe6cf0_1.conda + sha256: 82873b6c8478e19ab7aef0828ad3619b6633ad185a90a52f39dcb2c30c0c075e + md5: 8a1d977c3d77666406a40c0ab648ff52 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libopus >=1.6.1,<2.0a0 + size: 330213 + timestamp: 1787247513612 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_1.conda + sha256: addc80c69d362a9e6c40305c493139a8e9ee504b2f45a6687dbdaa9da3c6183c + md5: 35fa2b34bbced424e6976d30f5fde576 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + run_exports: + weak: + - libpciaccess >=0.19,<0.20.0a0 + size: 30070 + timestamp: 1785971678815 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-hc50b9dd_1.conda + sha256: 7fa90c06b81559cb56ea7806a6696fb4902a1acc20bbaff1bd3a4a75b3ffa0d5 + md5: 4a750e2ae0d52d003bb1e3421581585e + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libdovi >=3.4.0,<4.0a0 + - lcms2 >=2.19.1,<3.0a0 + - shaderc >=2026.3,<2026.4.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + license: LGPL-2.1-or-later + run_exports: + weak: + - libplacebo >=7.360.1,<7.361.0a0 + size: 550759 + timestamp: 1784287829706 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h922cc85_1.conda + sha256: c19eefb87d70d9b4b0629fa48414a155a47a1be4f04583ae71ed8c5a9a32fdcb + md5: fcf71c8d979148873f6f8ad4cfc73d86 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + run_exports: + weak: + - libpng >=1.6.58,<1.7.0a0 + size: 316643 + timestamp: 1786616563127 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-7.35.1-h622638d_3.conda + sha256: 37c51fbc936a6bb8bf5f67c8f056edacaaa41e8603738bc8a4dee186292bb114 + md5: fd307b61cceb36fdca38e1718bdb2893 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libgcc >=15 + - libstdcxx >=15 + - libzlib >=1.3.2,<2.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libprotobuf >=7.35.1,<7.35.2.0a0 + size: 3808338 + timestamp: 1787657986197 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda + sha256: 09e8effdc89bc5d021349318d32b85594f5b8d8e3ab8f90a85b81f8fe695a566 + md5: 77be60417aa572afcb48cbe0f967401d + depends: + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libpsl >=0.23.1,<0.24.0a0 + size: 72519 + timestamp: 1786970753847 +- conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-ha427ee3_1.conda + sha256: 9cd8f95157cd442b463649117c4814f1d8488a8b70b31ac926860bc43eb3685a + md5: d357bae89810ca378fdc9e1cf02a7a54 + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - libxml2-16 >=2.15.4 + - pango >=1.58.2,<2.0a0 + - cairo >=1.18.6,<2.0a0 + - gdk-pixbuf >=2.44.8,<3.0a0 + - libharfbuzz >=14.5.0 + - libglib >=2.90.0,<3.0a0 + constrains: + - __glibc >=2.17 + license: LGPL-2.1-or-later + run_exports: + weak: + - librsvg >=2.62.3,<3.0a0 + size: 4688088 + timestamp: 1790093958697 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.3.0-h54950a5_5.conda + sha256: f55d5a3e2dc88f993ed5018a7255eb4a38e71d7f57e19eccba0619d753ba1301 + md5: 8d95ac7455d5eb38b784d98019475f0c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.3.0 + - libstdcxx >=15.3.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: + weak: + - libsanitizer 15.3.0 + size: 8098064 + timestamp: 1789486698138 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hbc6d301_3.conda + sha256: 3503121a77d76e33f668916b69d4b20cb6a21f62aa4351d1506271ae9d184c61 + md5: a2bc10137c845d9c45067f3c53aad6e5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libvorbis >=1.3.7,<1.4.0a0 + - libopus >=1.6.1,<2.0a0 + - lame >=4.0,<4.1.0a0 + - mpg123 >=1.33.7,<1.34.0a0 + - libogg >=1.3.5,<1.4.0a0 + - libflac >=1.5.0,<1.6.0a0 + license: LGPL-2.1-or-later + run_exports: + weak: + - libsndfile >=1.2.2,<1.3.0a0 + size: 387942 + timestamp: 1786538522787 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-h6154650_1.conda + sha256: 7e463000fa1cba3f3a6597b776f6ab301d425a96e3bc20d0d9d76a3b9f237aa3 + md5: 5c526561e1d2a2e071941174eae84557 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libssh2 >=1.11.1,<2.0a0 + size: 306045 + timestamp: 1786713107897 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_5.conda + sha256: 38cadde30fad8f7c101f9eec79f60bf03fc99310c7195d23f8b30832516d666f + md5: 75b43a2912a0354204696708e4f34b8d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 16.2.0 ha9f2e26_5 + constrains: + - libstdcxx-ng ==16.2.0=*_5 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: {} + size: 6618916 + timestamp: 1789485826390 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-261.3-h26e0ef7_1.conda + sha256: c98e646ae3807a04f2607cc61392d0b055e0d47cc10b78b4f5d3703b9350af07 + md5: 3b6703a55a108ba956a1813cb1b41931 + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.78,<2.79.0a0 + - libgcc >=15 + license: LGPL-2.1-or-later + run_exports: {} + size: 587155 + timestamp: 1790045351740 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.2-hcc2c06a_1.conda + sha256: 10e125da82ca93e09191e66e5a94d566b2cf8d4024e2a0db3a9114297447e0d9 + md5: 0907d876f460ebc941ae590338b6102f + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.2.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=15 + - libjpeg-turbo >=3.2.0,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libstdcxx >=15 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + run_exports: + weak: + - libtiff >=4.7.2,<4.8.0a0 + size: 459753 + timestamp: 1787755584172 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-261.3-h26e0ef7_1.conda + sha256: 635057e7321d3204bd243c5db21d7265662479a563bc44031a6e6a777837f5b6 + md5: 5aba206dc07c6fc94300ddec22cc1323 + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.78,<2.79.0a0 + - libgcc >=15 + license: LGPL-2.1-or-later + run_exports: {} + size: 200833 + timestamp: 1790045358193 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + sha256: 71c8b9d5c72473752a0bb6e91b01dd209a03916cb71f36cc6a564e3a2a132d7a + md5: e179a69edd30d75c0144d7a380b88f28 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + run_exports: + weak: + - libunwind >=1.8.3,<1.9.0a0 + size: 75995 + timestamp: 1757032240102 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda + sha256: 3d17b7aa90610afc65356e9e6149aeac0b2df19deda73a51f0a09cf04fd89286 + md5: 56f65185b520e016d29d01657ac02c0d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + run_exports: + weak: + - liburing >=2.14,<2.15.0a0 + size: 154203 + timestamp: 1770566529700 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda + sha256: 89c84f5b26028a9d0f5c4014330703e7dff73ba0c98f90103e9cef6b43a5323c + md5: d17e3fb595a9f24fa9e149239a33475d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libudev1 >=257.4 + license: LGPL-2.1-or-later + run_exports: + weak: + - libusb >=1.0.29,<2.0a0 + size: 89551 + timestamp: 1748856210075 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.4-hcfc3c73_0.conda + sha256: f34b8d1de9a2bf62476d8608057d9b8a918d97444236dc53a47128f2fae79041 + md5: 54a948337e66706380ff24d6b5fde63f + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + license: BSD-3-Clause + run_exports: + weak: + - libuuid >=2.42.4,<3.0a0 + size: 34442 + timestamp: 1790121449161 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_1.conda + sha256: 67761d0206f84140047a367eaf9befe03a7e157a29ee25aee0047b40801cc6b6 + md5: 01c4ed87826af55996768af6dbc936b4 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libuv >=1.52.1,<2.0a0 + size: 420040 + timestamp: 1785914567661 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.24.1-hb83e432_1.conda + sha256: ce7fbe2855257467196613b9fa2bdedb36d4fc3419c43804e52cfe9eb094a35e + md5: c3e6df2790fff34ba708722052f02c0e + depends: + - __glibc >=2.17,<3.0.a0 + - libdrm >=2.4.129,<2.5.0a0 + - libegl >=1.7.0,<2.0a0 + - libgcc >=15 + - libgl >=1.7.0,<2.0a0 + - libglx >=1.7.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - wayland >=1.26.0,<2.0a0 + - wayland-protocols + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libva >=2.24.1,<3.0a0 + size: 225085 + timestamp: 1787800245924 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda + sha256: ca494c99c7e5ecc1b4cd2f72b5584cef3d4ce631d23511184411abcbb90a21a5 + md5: b4ecbefe517ed0157c37f8182768271c + depends: + - libogg + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - libogg >=1.3.5,<1.4.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libvorbis >=1.3.7,<1.4.0a0 + size: 285894 + timestamp: 1753879378005 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.16.0-h54a6638_0.conda + sha256: 38850657dd6835613ef16b34895a54bea98bc7639db6a649c886b331635714fc + md5: 9f6b0090c3902b2c763a16f7dace7b6e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - intel-media-driver >=26.1.2,<26.2.0a0 + - libva >=2.23.0,<3.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libvpl >=2.16.0,<2.17.0a0 + size: 287992 + timestamp: 1772980546550 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hd2095e1_1.conda + sha256: fa57017db022e72a4bf7f0136998340fff87a1f1304b4f6c91d9947ff2fdc9e4 + md5: dc42f5b888d93c7bbc6d0896be967e06 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libvpx >=1.15.2,<1.16.0a0 + size: 1119517 + timestamp: 1787250109176 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.357.0-h0e34353_2.conda + sha256: a70c25b66321ee77f9892b205e3247263c400803f543dc8aca53d569a59c5a77 + md5: c5f5f159b66332152197893427071695 + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - xorg-libxrandr >=1.5.5,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + constrains: + - libvulkan-headers 1.4.357.0.* + license: Apache-2.0 + license_family: APACHE + run_exports: + weak: + - libvulkan-loader >=1.4.357.0,<2.0a0 + size: 206957 + timestamp: 1787491938583 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_1.conda + sha256: 8415001414f488c85b72b9d8cc2071dfb3981a47bc3c8eb56ef91a57d12eae7f + md5: 9332b53d0ea93c5d39e33be03a0c611a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libwebp-base >=1.6.0,<2.0a0 + size: 428430 + timestamp: 1785954557217 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-hb83e432_2.conda + sha256: 7b49e6fd2a584b7f072943e6adf4149677af5121246975278804782d37752837 + md5: 61f0ffba9161cbb3a77722869b21e4bb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - pthread-stubs + - xorg-libxau >=1.0.12,<2.0a0 + - xorg-libxdmcp >=1.1.5,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxcb >=1.17.0,<2.0a0 + size: 395120 + timestamp: 1787885788278 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.38-h280c20c_0.conda + sha256: f7e9292dd219a6435bbb1223da9586c3e70d66d169c5a92f08db3f2127df04e9 + md5: f7a7ff5a6ab331e037abd34f379a631d + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: LGPL-2.1-or-later + run_exports: + weak: + - libxcrypt >=4.4.38 + size: 101957 + timestamp: 1785887123445 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-h51789e4_1.conda + sha256: d44878d396713ccf3b355df617f61c40a1442fffcf134392bc6ce0e6c2219369 + md5: f888787e0eab7a8076a67d197e155ffc + depends: + - xkeyboard-config + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libxcb >=1.17.0,<2.0a0 + - xorg-libxau >=1.0.12,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + license: MIT AND MIT-open-group AND HPND AND HPND-sell-variant AND ISC + run_exports: + weak: + - libxkbcommon >=1.13.2,<2.0a0 + size: 942571 + timestamp: 1787178780572 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.4-hf3af7cc_0.conda + sha256: 9a1685c8d8b8488cd7882a9cd6e673e687211ca763ebbcd1e91b6f594eeadc45 + md5: b7545c57a73a51d72aa6eee5695cf051 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=15 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.4 + license: MIT + license_family: MIT + run_exports: {} + size: 569196 + timestamp: 1788635197456 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.4-h7df9aa5_0.conda + sha256: 053d85821ce5e36b7ce03faea5930382f6af695df9e2cd68e5d8d273072d1551 + md5: ea192d1ef556bf1d55de4acb8c0f5b65 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=15 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.4 hf3af7cc_0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.4 + size: 47077 + timestamp: 1788635202698 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda + sha256: eb8a0db0aa570124f7d2a93d7c7f596e3390df5e047818d873baad32985fc736 + md5: 0de0122d9570a8ab637c6b73db268389 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - zlib 1.3.2 *_3 + license: Zlib + license_family: Other + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 + size: 63713 + timestamp: 1785362952714 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.33.7-h877a99e_1.conda + sha256: 5afc3265622de6663f4179bc9023e1c1cac06b9c8620a0bf54aa0a0c232cf15a + md5: e7cc06dba8d5fb83d9ae033225ffa458 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + license: LGPL-2.1-only + license_family: LGPL + run_exports: + weak: + - mpg123 >=1.33.7,<1.34.0a0 + size: 491351 + timestamp: 1787311495359 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda + sha256: 5d46557214ed184381dafe835b7c94a474a1c3b307a08a250b1ea4779b44ffb3 + md5: ee6c0cd80a60961a1f48aa3e0b91f986 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: X11 AND BSD-3-Clause + run_exports: + weak: + - ncurses >=6.6,<7.0a0 + size: 911196 + timestamp: 1786355078102 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ninja-1.13.2-h171cf75_1.conda + sha256: 2b5f2e865122f9fc0637f520a7cb22e16b9727b2db6761ee16cb5e6404412c81 + md5: 2db7a395d7dc2b6ed5effaf68fb99443 + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 186767 + timestamp: 1786713048064 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-20.20.2-h4dda4d0_2.conda + sha256: a3e0b1dd02b24e8959ab11f0f72c01fcbaea47d12a3d60b3289c8766da182fed + md5: d49c2e5d7f0963290033007ccc2c69bb + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=15 + - libstdcxx >=15 + - libuv >=1.52.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.8,<4.0a0 + - zlib + license: MIT + license_family: MIT + run_exports: + weak: + - nodejs >=20.20.2,<21.0a0 + size: 17509809 + timestamp: 1788202854345 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.4-hb03c661_1.conda + sha256: 75f3bf733523a338f73d6c276c4a26634877cd970edb558f2769d9fa52b100a9 + md5: c2871ba95727fd1382c05db66048b64c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - opencl-headers >=2025.6.13 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - ocl-icd >=2.3.4,<3.0a0 + size: 109598 + timestamp: 1780362789611 +- conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + sha256: 8de2f0cd8a659b01abf86e7fbb8cea4f28ada62fd288429a2bbc040db1b98dd0 + md5: c930c8052d780caa41216af7de472226 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 55754 + timestamp: 1773844383536 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openexr-3.4.15-ha9edf89_0.conda + sha256: 20eb5025e7dabe02bc89bbdb325ab74cf9193314676775288a392df2edec130d + md5: c9800c3c6d231e777ca98ac9024cb5cc + depends: + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.2,<2.0a0 + - openjph >=0.31.0,<0.32.0a0 + - imath >=3.2.2,<3.2.3.0a0 + - libdeflate >=1.25,<1.26.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - openexr >=3.4.15,<3.5.0a0 + size: 1226202 + timestamp: 1787620378513 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-h8c49934_2.conda + sha256: 6d54eeb307488f725a8f14af955467249735fa69ffd822763e53784aff05b8a3 + md5: 2f0b27ebfcbc15298dd99205e91288ba + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - openh264 >=2.6.0,<2.6.1.0a0 + size: 737036 + timestamp: 1787273914103 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-heb1ab33_2.conda + sha256: 131688a88bea8da92fe418c4558c5073435e2848911bc4c836c3a9dd5994b4aa + md5: a3f3ac7a68d01c198e276dbb99e62032 + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=15 + - libtiff >=4.7.2,<4.8.0a0 + - libzlib >=1.3.2,<2.0a0 + - libpng >=1.6.58,<1.7.0a0 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - openjpeg >=2.5.4,<3.0a0 + size: 391242 + timestamp: 1788425045145 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.31.0-h8d634f6_0.conda + sha256: 3c7a4118c678c43952ea10183388f175a4bcee16a1c61d90dab2fbdafddc45d7 + md5: 49ca947333c62d5985a88cbdd8f59468 + depends: + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - libtiff >=4.7.2,<4.8.0a0 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - openjph >=0.31.0,<0.32.0a0 + size: 295193 + timestamp: 1785149856790 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.4-h781a0a9_0.conda + sha256: 4747b2d6a8336f52343bceb8a1ebf41a9e6e665b9d2e3f989972de53a310599e + md5: 16e3034a330cc625f2c685edec60cf4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=15 + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - openssl >=3.6.4,<4.0a0 + size: 3202955 + timestamp: 1787698780103 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.58.2-h7bb47b9_1.conda + sha256: 47c3d25a0bdb0ae50627f9ef2a10345fabfabe0e6620cbcff04e589a644542d3 + md5: 0b889b1c6b472d215d6332c6b195589c + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.16,<2.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=15 + - libglib >=2.88.3,<3.0a0 + - libharfbuzz >=14.4.0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + license: LGPL-2.1-or-later + run_exports: + weak: + - pango >=1.58.2,<2.0a0 + size: 471814 + timestamp: 1788490377724 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-h8b3dc9c_1.conda + sha256: 9ebb10a4eb3be51ae67d85c679f5a7a50cb040ed25c783e6331a225ea09991d4 + md5: 06f6113cf1ff4a54b65f87ead132a5f1 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=15 + - libzlib >=1.3.2,<2.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - pcre2 >=10.47,<10.48.0a0 + size: 1218833 + timestamp: 1787294571916 +- conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-9_h7cc23a3_perl5.conda + build_number: 9 + sha256: d81859fc9f6fe6a49175403d3ddf93ba8038cb4f12664bc4cf628d200b664bd4 + md5: da53476767a523b23baf56b724a11e0b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libxcrypt >=4.4.38 + license: GPL-1.0-or-later OR Artistic-1.0-Perl + run_exports: + weak: + - perl >=5.32.1,<5.33.0a0 *_perl5 + noarch: + - perl >=5.32.1,<6.0a0 *_perl5 + size: 13384191 + timestamp: 1789148219214 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_3.conda + sha256: 829d8288764282de5a9f7b9169acb75cc7dc0b6c3fe2535cfe87dea3436bbc5d + md5: 0ee5bb30034b081a1386c1e2c98ab0a7 + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + run_exports: + weak: + - pixman >=0.46.4,<1.0a0 + size: 376704 + timestamp: 1786106621354 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h7cc23a3_1004.conda + sha256: 4a44fd00ea73b79ca2c89b0727b9ccf61c506ead71e67a9abfa4c590042b5a4a + md5: bb66b610707b811e3c65181a6431e7a8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: MIT + license_family: MIT + run_exports: {} + size: 9630 + timestamp: 1788381877753 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda + sha256: 23c98a5000356e173568dc5c5770b53393879f946f3ace716bbdefac2a8b23d2 + md5: b11a4c6bf6f6f44e5e143f759ffa2087 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: MIT + license_family: MIT + run_exports: + weak: + - pugixml >=1.15,<1.16.0a0 + size: 118488 + timestamp: 1736601364156 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda + sha256: 0a0858c59805d627d02bdceee965dd84fde0aceab03a2f984325eec08d822096 + md5: b8ea447fdf62e3597cb8d2fae4eb1a90 + depends: + - __glibc >=2.17,<3.0.a0 + - dbus >=1.16.2,<2.0a0 + - libgcc >=14 + - libglib >=2.86.1,<3.0a0 + - libiconv >=1.18,<2.0a0 + - libsndfile >=1.2.2,<1.3.0a0 + - libsystemd0 >=257.10 + - libxcb >=1.17.0,<2.0a0 + constrains: + - pulseaudio 17.0 *_3 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - pulseaudio-client >=17.0,<17.1.0a0 + size: 750785 + timestamp: 1763148198088 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.8.1-h1fbca29_0.conda + sha256: cf550bbc8e5ebedb6dba9ccaead3e07bd1cb86b183644a4c853e06e4b3ad5ac7 + md5: d83958768626b3c8471ce032e28afcd3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - __glibc >=2.17 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - rav1e >=0.8.1,<0.9.0a0 + size: 5595970 + timestamp: 1772540833621 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb03c661_2.conda + sha256: 186a5b225077ad5f4656966da947d43307101950751ef4a239b455588756b4e1 + md5: 007602d697e07c11ff9864964eba5ee3 + depends: + - __glibc >=2.17,<3.0.a0 - libgcc >=14 + license: MIT + license_family: MIT + run_exports: + weak: + - rhash >=1.4.6,<2.0a0 + size: 194994 + timestamp: 1786731436520 +- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.6-h7e3ee7f_0.conda + sha256: 1e1ccc56fdf3fe82150b4eac1d626c806e612af208fbf40ce3abfe9a2eb2a626 + md5: e112cadcd79412d81496e784884bddf0 + depends: - __glibc >=2.17,<3.0.a0 - - ncurses >=6.6,<7.0a0 - license: BSD-2-Clause - license_family: BSD + - libgcc >=14 + - openssl >=3.5.7,<4.0a0 + license: Apache-2.0 + license_family: Apache run_exports: weak: - - libedit >=3.1.20250104,<3.2.0a0 - size: 135098 - timestamp: 1786616658086 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h280c20c_3.conda - sha256: e4418f68d01a6307c4431b585c71b584f40189877364e542ee87deb777f5e85b - md5: 7bc31538d6e3fb349e897353969237ec + - s2n >=1.7.6,<1.7.7.0a0 + size: 393680 + timestamp: 1784674401024 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda + sha256: 987ad072939fdd51c92ea8d3544b286bb240aefda329f9b03a51d9b7e777f9de + md5: cdd138897d94dc07d99afe7113a07bec depends: + - libstdcxx >=14 - libgcc >=14 - __glibc >=2.17,<3.0.a0 - license: BSD-2-Clause OR GPL-2.0-or-later - license_family: GPL + - libgl >=1.7.0,<2.0a0 + - sdl3 >=3.2.22,<4.0a0 + - libegl >=1.7.0,<2.0a0 + license: Zlib run_exports: weak: - - libev >=4.33,<4.34.0a0 - size: 43220 - timestamp: 1785917328200 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - sha256: 16feffd9ddbbe5b718515d38ee376c685ba95491cd901244e24671d20b952a77 - md5: b24d3c612f71e7aa74158d92106318b2 + - sdl2 >=2.32.56,<3.0a0 + size: 589145 + timestamp: 1757842881000 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.16-h5330f5c_0.conda + sha256: 174a62a3994b205213b0667cfe7ea3d26407403b929e9f111256b29694234fb0 + md5: 1d4b9d45cd87da449d9f7c5c3b9ad6a4 depends: + - libstdcxx >=15 + - libgcc >=15 - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - constrains: - - expat 2.8.1.* - license: MIT - license_family: MIT - run_exports: {} - size: 77856 - timestamp: 1781203599810 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_4.conda - sha256: 24090e675d34403b4ee1cd4372d8f6c0937da7ecfd66a19a57cac2ed0f4ea793 - md5: cba14d01083fc62ffd32c24d7d390633 + - xorg-libxcursor >=1.2.3,<2.0a0 + - libegl >=1.7.0,<2.0a0 + - dbus >=1.16.2,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - libxkbcommon >=1.13.2,<2.0a0 + - libunwind >=1.8.3,<1.9.0a0 + - libgl >=1.7.0,<2.0a0 + - liburing >=2.14,<2.15.0a0 + - libvulkan-loader >=1.4.357.0,<2.0a0 + - libusb >=1.0.29,<2.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - wayland >=1.26.0,<2.0a0 + - xorg-libxi >=1.8.3,<2.0a0 + - libdrm >=2.4.129,<2.5.0a0 + - xorg-libxscrnsaver >=1.2.4,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - libudev1 >=257.13 + - pulseaudio-client >=17.0,<17.1.0a0 + license: Zlib + run_exports: + weak: + - sdl3 >=3.4.16,<4.0a0 + size: 2151582 + timestamp: 1788377993602 +- conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2026.3-hcebf71c_1.conda + sha256: 2fa613c823868ef6e05c2e756b1767269f24796564ea9cf4efde61abaae2816e + md5: 8f3979185375f21da886fb6cc2630005 depends: - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 - constrains: - - libgcc-ng ==16.2.0=*_4 - - libgomp 16.2.0 he0feb66_4 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - run_exports: {} - size: 1058083 - timestamp: 1787618680111 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_4.conda - sha256: 0fe5cb8e0752241ab55e11656ed1b9726248b522d23b929fe7c95b83eb55b9bb - md5: 89d2c1231f47bd818f5d624b9411459d + - glslang >=16,<17.0a0 + - libgcc >=15 + - libstdcxx >=15 + - spirv-tools >=2026,<2027.0a0 + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - shaderc >=2026.3,<2026.4.0a0 + size: 113803 + timestamp: 1787710995114 +- conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h34e00bb_2.conda + sha256: 8635d10c7f127808b09c0c8e77b21a255829e0934e49326548c949f7e0551f09 + md5: 2b7e31ffbd476eecf33b3b833692339c depends: + - libgcc >=15 + - libstdcxx >=15 - __glibc >=2.17,<3.0.a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL + license: BSD-3-Clause + license_family: BSD run_exports: - strong: - - _openmp_mutex >=4.5 - size: 639968 - timestamp: 1787618616266 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda - sha256: 9787df8c22a59c9a70d3e5a10db9ad663485e75e9ccc3f09bd092cb7b95e0dab - md5: 1390b7c5ac0b1d8e447bc5efa6d3c8c2 + weak: + - snappy >=1.2.2,<1.3.0a0 + size: 45695 + timestamp: 1790063285616 +- conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.3-h7148c6a_1.conda + sha256: 1ff7cdc2e65d3980f977a898d07f4e2b1b6f50dbf7e2fed88b3b4221faf34365 + md5: ac9adda1573683c31a8c58850e911273 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 + - libgcc >=15 + - libstdcxx >=15 constrains: - - xz 5.8.3.* - license: 0BSD + - spirv-headers >=1.4.357.0,<1.4.357.1.0a0 + license: Apache-2.0 + license_family: APACHE run_exports: weak: - - liblzma >=5.8.3,<6.0a0 - size: 112995 - timestamp: 1786348617826 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h74cf4be_1.conda - sha256: 11a2f54a6f391e25738bce0023e6ef499600147bbcf21c1fa69d2e251b03cc6a - md5: 75d211f04ac87506f1f43420712a69fe + - spirv-tools >=2026,<2027.0a0 + size: 2380634 + timestamp: 1787525383516 +- conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.2.0-hd2095e1_1.conda + sha256: 09c242d480632acca31f2a510c9a9f65bb8cca1e82b73d2d0261ec837fff48be + md5: 3bd5f5f3f6f6431b9f19b35ad4a8ed21 depends: - __glibc >=2.17,<3.0.a0 - - c-ares >=1.34.8,<2.0a0 - - libev >=4.33,<4.34.0a0 - - libev >=4.33,<5.0a0 - libgcc >=15 - libstdcxx >=15 - - libzlib >=1.3.2,<2.0a0 - - openssl >=3.5.7,<4.0a0 - license: MIT - license_family: MIT + license: BSD-2-Clause + license_family: BSD run_exports: weak: - - libnghttp2 >=1.68.1,<2.0a0 - size: 649974 - timestamp: 1787177490105 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda - sha256: 09e8effdc89bc5d021349318d32b85594f5b8d8e3ab8f90a85b81f8fe695a566 - md5: 77be60417aa572afcb48cbe0f967401d + - svt-av1 >=4.2.0,<4.2.1.0a0 + size: 2750545 + timestamp: 1787256261632 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.1.0-hfd44327_0.conda + sha256: ea35780ec77e2431bcfc193e75ddcc3ec1ae79a34464469b0b2186d93035c9e7 + md5: b17ef6c181922df16e9b1330fd00fe85 depends: - - libstdcxx >=15 + - __glibc >=2.17,<3.0.a0 - libgcc >=15 + - libhwloc >=2.13.0,<2.13.1.0a0 + - libstdcxx >=15 + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 187290 + timestamp: 1788879077075 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.26.0-hc1c935e_2.conda + sha256: df65b987979e6d7f88e756494da5a230d4f2d08d17437d04eecd35559c3a04e4 + md5: 88a47e22b53e50865b1cabe2eb648352 + depends: - __glibc >=2.17,<3.0.a0 - - icu >=78.3,<79.0a0 + - libexpat >=2.8.1,<3.0a0 + - libffi >=3.7.0,<3.8.0a0 + - libgcc >=15 + - libstdcxx >=15 license: MIT license_family: MIT run_exports: weak: - - libpsl >=0.23.1,<0.24.0a0 - size: 72519 - timestamp: 1786970753847 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.3.0-h54950a5_4.conda - sha256: 074869ef41874beec0ffee576fdd809f72eb8a4196fe2fa4d1a922c9a0742572 - md5: 306fcd92c8f1cd7049bc6e361bd37f09 + - wayland >=1.26.0,<2.0a0 + size: 340058 + timestamp: 1787793849093 +- conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h7cc23a3_3.conda + sha256: 1c34c63ba591982d438b844e2487a3f04e47f7274bfa88f87943bbb8326c8edc + md5: 45246ea280bd334e4413ec0125ce6797 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=15.3.0 - - libstdcxx >=15.3.0 - license: GPL-3.0-only WITH GCC-exception-3.1 + - libgcc >=15 + license: GPL-2.0-or-later license_family: GPL run_exports: weak: - - libsanitizer 15.3.0 - size: 7579092 - timestamp: 1787618435127 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-h6154650_1.conda - sha256: 7e463000fa1cba3f3a6597b776f6ab301d425a96e3bc20d0d9d76a3b9f237aa3 - md5: 5c526561e1d2a2e071941174eae84557 + - x264 >=1!164.3095,<1!165 + size: 707139 + timestamp: 1788934679384 +- conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h73f68a7_4.conda + sha256: fbf129786d8ed8949bddad9959c5edae25dc968efbe43a6567625f66d4bcf3b2 + md5: 5b049cd7e2149701a5e4e7dc90f00075 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libzlib >=1.3.2,<2.0a0 - - openssl >=3.5.7,<4.0a0 - license: BSD-3-Clause - license_family: BSD + - libgcc >=15 + - libstdcxx >=15 + license: GPL-2.0-or-later + license_family: GPL run_exports: weak: - - libssh2 >=1.11.1,<2.0a0 - size: 306045 - timestamp: 1786713107897 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_4.conda - sha256: 40b792b0186c1e8859280a1f6f19a54fc50a11b32724fc7b637009c1a9bd302b - md5: 2f2ef0d96de5bdd8c1270ff22fdf9352 + - x265 >=3.5,<3.6.0a0 + size: 2237095 + timestamp: 1788446524175 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda + sha256: 3b04afd5d1a65d2d27ac2d49a63b01ab8bcd875776779ec63e337370ed38afdc + md5: b233b41be0bf210989d57160ed39b394 depends: + - libgcc >=14 - __glibc >=2.17,<3.0.a0 - - libgcc 16.2.0 ha9f2e26_4 - constrains: - - libstdcxx-ng ==16.2.0=*_4 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT run_exports: {} - size: 6613148 - timestamp: 1787618704262 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_1.conda - sha256: 67761d0206f84140047a367eaf9befe03a7e157a29ee25aee0047b40801cc6b6 - md5: 01c4ed87826af55996768af6dbc936b4 + size: 441670 + timestamp: 1782027360439 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-h280c20c_0.conda + sha256: 49b532d1df875c6749d9078b56a76f3f5db49a5abe0ca620b593ed474ef0ebf1 + md5: 85c9442aec283b4e464fa9ecc484a2f3 depends: - libgcc >=14 - __glibc >=2.17,<3.0.a0 @@ -450,81 +2865,185 @@ packages: license_family: MIT run_exports: weak: - - libuv >=1.52.1,<2.0a0 - size: 420040 - timestamp: 1785914567661 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda - sha256: eb8a0db0aa570124f7d2a93d7c7f596e3390df5e047818d873baad32985fc736 - md5: 0de0122d9570a8ab637c6b73db268389 + - xorg-libice >=1.1.2,<2.0a0 + size: 62517 + timestamp: 1786474410404 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-h0d788c3_1.conda + sha256: ef907caee0665cf3b0f775602cc50e388e3bade8ce22ecade0873ff26604b2fd + md5: aa7459ed9ad086ba11dda843d764b33d depends: - __glibc >=2.17,<3.0.a0 - constrains: - - zlib 1.3.2 *_3 - license: Zlib - license_family: Other + - libgcc >=14 + - xorg-libice >=1.1.2,<2.0a0 + - libuuid >=2.42.2,<3.0a0 + license: MIT + license_family: MIT run_exports: weak: - - libzlib >=1.3.2,<2.0a0 - size: 63713 - timestamp: 1785362952714 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda - sha256: 5d46557214ed184381dafe835b7c94a474a1c3b307a08a250b1ea4779b44ffb3 - md5: ee6c0cd80a60961a1f48aa3e0b91f986 + - xorg-libsm >=1.2.6,<2.0a0 + size: 30739 + timestamp: 1786545374265 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_1.conda + sha256: 68053eebfa9f0d91666786c8fb5839d989aa9b869add92cb8815228bb2d7302c + md5: 8c282bbe4808a3cc80a5c98e9aec1cfc depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - license: X11 AND BSD-3-Clause + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT run_exports: weak: - - ncurses >=6.6,<7.0a0 - size: 911196 - timestamp: 1786355078102 -- conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-20.20.2-h4dda4d0_2.conda - sha256: a3e0b1dd02b24e8959ab11f0f72c01fcbaea47d12a3d60b3289c8766da182fed - md5: d49c2e5d7f0963290033007ccc2c69bb + - xorg-libx11 >=1.8.13,<2.0a0 + size: 839578 + timestamp: 1787087012372 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-h7cc23a3_2.conda + sha256: 3ec065b94554dc48a4ca582a960a5484bc166b26e83ce0954653e08d17e8bd53 + md5: da33efee1a93603d92e06d4a2b68def6 depends: - __glibc >=2.17,<3.0.a0 - - icu >=78.3,<79.0a0 - libgcc >=15 - - libstdcxx >=15 - - libuv >=1.52.1,<2.0a0 - - libzlib >=1.3.2,<2.0a0 - - openssl >=3.5.8,<4.0a0 - - zlib license: MIT license_family: MIT run_exports: weak: - - nodejs >=20.20.2,<21.0a0 - size: 17509809 - timestamp: 1788202854345 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.4-h781a0a9_0.conda - sha256: 4747b2d6a8336f52343bceb8a1ebf41a9e6e665b9d2e3f989972de53a310599e - md5: 16e3034a330cc625f2c685edec60cf4e + - xorg-libxau >=1.0.12,<2.0a0 + size: 18793 + timestamp: 1788960512381 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + sha256: 832f538ade441b1eee863c8c91af9e69b356cd3e9e1350fff4fe36cc573fc91a + md5: 2ccd714aa2242315acaf0a67faea780b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxcursor >=1.2.3,<2.0a0 + size: 32533 + timestamp: 1730908305254 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-h7cc23a3_2.conda + sha256: 8a095df9bc1d2e50f2504ce8858a047ae29ea634aad6cc0b43298c63361da6d9 + md5: eabfc45786244de252090cf8d55128a8 depends: - __glibc >=2.17,<3.0.a0 - - ca-certificates - libgcc >=15 - license: Apache-2.0 - license_family: Apache + license: MIT + license_family: MIT run_exports: weak: - - openssl >=3.6.4,<4.0a0 - size: 3202955 - timestamp: 1787698780103 -- conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb03c661_2.conda - sha256: 186a5b225077ad5f4656966da947d43307101950751ef4a239b455588756b4e1 - md5: 007602d697e07c11ff9864964eba5ee3 + - xorg-libxdmcp >=1.1.5,<2.0a0 + size: 22606 + timestamp: 1789676943335 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-h7cc23a3_1.conda + sha256: aa9bbe8b278aacc194e280ff5037f9f9a1f2c5b33ed97de8e7f01cfbe90dda43 + md5: e5b6b28536b81b3f4cb20db4668a4642 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxext >=1.3.7,<2.0a0 + size: 53124 + timestamp: 1787100841900 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-h7cc23a3_1.conda + sha256: aec84f554fc897bf4085c7bc8b8f0740e4c224e13bca3cc51c93e7699d56f83a + md5: 09132e874fe0e1f5e4492b0b6b904b6e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxfixes >=6.0.2,<7.0a0 + size: 21440 + timestamp: 1787248059682 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-h7cc23a3_1.conda + sha256: a523d71344a2f640efe6fc42b88fc261d9cd389d4f9838a5d42dcdb120c2b0c8 + md5: a1412b2b1184dacda45f8476fef2cc25 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxi >=1.8.3,<2.0a0 + size: 49165 + timestamp: 1787257060460 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-h7cc23a3_1.conda + sha256: 05a7f25d7f7f5cd32b27a019233ece97167fd8ade255bc13a0e49e53387f4c30 + md5: 798a8c9d171859a022e1cb89e7d0eb10 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxrandr >=1.5.5,<2.0a0 + size: 31106 + timestamp: 1787246614086 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb03c661_1.conda + sha256: 6901f91d398811e4ec89d7e20a69abac02a7bfebfaf073338b7ea3d1a99685b7 + md5: e470d224a7a5be1b1d021bded7abb536 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 license: MIT license_family: MIT run_exports: weak: - - rhash >=1.4.6,<2.0a0 - size: 194994 - timestamp: 1786731436520 + - xorg-libxrender >=0.9.12,<0.10.0a0 + size: 34645 + timestamp: 1787100191192 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda + sha256: 58e8fc1687534124832d22e102f098b5401173212ac69eb9fd96b16a3e2c8cb2 + md5: 303f7a0e9e0cd7d250bb6b952cecda90 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxscrnsaver >=1.2.4,<2.0a0 + size: 14412 + timestamp: 1727899730073 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-h7cc23a3_4.conda + sha256: d66525e7b1c492aa179c6c55610fc8dfb0a9a62ea7d4fb9f904fa6af62127f61 + md5: 752a5ac9322e0fbbc24146c1ce3ae44e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxi >=1.8.3,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxtst >=1.2.5,<2.0a0 + size: 35052 + timestamp: 1787360025506 - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_3.conda sha256: 16080a1c7724f7d25727cdc23c7658e0cec2db52448c1dc0c33467ee2c6e1c62 md5: 6acb86426229f96f93e5468d1df3a5e8 @@ -560,6 +3079,61 @@ packages: run_exports: {} size: 131780 timestamp: 1784754889428 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + md5: 0c96522c6bdaed4b1566d11387caaf45 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 397370 + timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + md5: 34893075a5c9e55cdafac56607368fc6 + license: OFL-1.1 + license_family: Other + run_exports: {} + size: 96530 + timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + md5: 4d59c254e01d9cde7957100457e2d5fb + license: OFL-1.1 + license_family: Other + run_exports: {} + size: 700814 + timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + md5: 49023d73832ef61042f6a237cb2687e7 + license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 + license_family: Other + run_exports: {} + size: 1620504 + timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + md5: fee5683a3f04bd15cbd8318b096a27ab + depends: + - fonts-conda-forge + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 3667 + timestamp: 1566974674465 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 + md5: a7970cd949a077b7cb9696379d338681 + depends: + - font-ttf-ubuntu + - font-ttf-inconsolata + - font-ttf-dejavu-sans-mono + - font-ttf-source-code-pro + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 4059 + timestamp: 1762351264405 - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda sha256: 41557eeadf641de6aeae49486cef30d02a6912d8da98585d687894afd65b356a md5: 86d9cba083cd041bfbf242a01a7a1999 @@ -570,26 +3144,26 @@ packages: run_exports: {} size: 1278712 timestamp: 1765578681495 -- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.3.0-h2b852eb_104.conda - sha256: 83221295f52a5ac410f092b4fe1415052b8542f76ddf9ee9949a3571d19e1d43 - md5: b206066f9a3900bf869ac1a964686c9c +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.3.0-h2b852eb_105.conda + sha256: f968a7844e138449efa881ca8167fa0ff5b610fa4f03c50efcce6034b8164ea5 + md5: 35e3188b38ce23565cc39989ba76199d depends: - __unix license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL run_exports: {} - size: 3093906 - timestamp: 1787618317103 -- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.3.0-hb2c5482_104.conda - sha256: 42de47979a998f594c378498ebdf2f1c833e6a4611dd2ddda56f1ba2d1515c7f - md5: c428c727fc8697f18a140c676032f8f5 + size: 3088262 + timestamp: 1789486575036 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.3.0-hb2c5482_105.conda + sha256: 320d67cafd034956aeea2c597faf88bc320739394e11e7cac66188b702ee9aa3 + md5: 5a196f19d6f46bca4800b254db3e78b4 depends: - __unix license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL run_exports: {} - size: 20671212 - timestamp: 1787618340216 + size: 19445568 + timestamp: 1789486598481 - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda sha256: c47299fe37aebb0fcf674b3be588e67e4afb86225be4b0d452c7eb75c086b851 md5: 13dc3adbc692664cd3beabd216434749 @@ -611,3 +3185,42 @@ packages: run_exports: {} size: 118849 timestamp: 1784250406640 +- conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda + sha256: 04ce686cd187d379344f9b2be7b4da5f431b265dc0944a6b764fab9da9171948 + md5: 0839a3421140d4a9ba93fb988698fc00 + license: MIT + license_family: MIT + run_exports: {} + size: 147954 + timestamp: 1780946721169 +- conda: https://software.repos.intel.com/python/conda/linux-64/ipp-2026.0.1-intel_51.conda + sha256: 0f0081f6d94696d636830abdd619cc015e0f69776d7386c8bc575b1937a424ff + md5: 35de25044ccdcb47f07e37efd0e655a3 + depends: + - ipp-license >=2026.0 + license: Intel Simplified Software License + size: 58281627 + timestamp: 1781710687433 +- conda: https://software.repos.intel.com/python/conda/linux-64/ipp-devel-2026.0.1-intel_51.conda + sha256: 1c2107b224381850883fca2553053892f827a98b9a24264abbc412a907032de6 + md5: 35f0edd95f1ec666a1d06a3e663235db + depends: + - ipp >=2026.0 + - ipp-include >=2026.0 + license: Intel Simplified Software License + size: 10630 + timestamp: 1781710584292 +- conda: https://software.repos.intel.com/python/conda/linux-64/ipp-include-2026.0.1-intel_51.conda + sha256: 8a3a9b98a8b369d4ee7ef95a19098b040a44021aed0796b4554c689999f36877 + md5: 12eb4a178d79276c00f99d8882c88de5 + depends: + - ipp-license >=2026.0 + license: Intel Simplified Software License + size: 192125 + timestamp: 1781710589530 +- conda: https://software.repos.intel.com/python/conda/linux-64/ipp-license-2026.0.1-intel_51.conda + sha256: d3af46095714525ad507b5f1bd06ba71771ccf87e8add35643b63cd0a5944ec0 + md5: 500bd833f4f83581298ca47d664484f1 + license: Intel Simplified Software License + size: 14542 + timestamp: 1781710583967 diff --git a/pixi.toml b/pixi.toml index f3eb29df3b..ced2c9661f 100644 --- a/pixi.toml +++ b/pixi.toml @@ -3,14 +3,6 @@ # # Distributed under the Boost Software License, Version 1.0. (See accompanying # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -# -# Official repository: https://github.com/boostorg/gil -# -# Tooling for building the documentation (doc/) locally. See -# doc/build_antora.sh -- MrDocs itself is fetched automatically by -# @cppalliance/antora-cpp-reference-extension (the latest release, as of -# MrDocs 2026.9.4 that's a fixed build for GIL's headers), so it isn't a -# pixi dependency. [workspace] channels = ["conda-forge"] @@ -18,6 +10,7 @@ name = "gil" platforms = ["linux-64"] version = "0.1.0" +# Tooling for building the documentation (doc/) locally [feature.docs.dependencies] nodejs = "20.*" cxx-compiler = "*" @@ -26,5 +19,65 @@ cmake = "*" [feature.docs.tasks] docs-build = "cd doc && bash build_antora.sh" +# Google Benchmark-based benchmarks (benchmark/). +[feature.bench] +# IPP is not on conda-forge but from Intel channel. +channels = ["conda-forge", "https://software.repos.intel.com/python/conda"] + +[feature.bench.dependencies] +cxx-compiler = "*" +cmake = "*" +ninja = "*" +git = "*" +# Libraries compared against GIL (BOOST_GIL_BUILD_BENCHMARKS_OPENCV/_IPP) +libopencv = { version = "*", build = "headless*" } +ipp-devel = "*" + +[feature.bench.tasks.boost-configure] +cmd = """cmake -S ../.. -B build-boost -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -DBOOST_INCLUDE_LIBRARIES=gil \ + -DCMAKE_INSTALL_MESSAGE=LAZY \ + -DCMAKE_INSTALL_PREFIX=$PIXI_PROJECT_ROOT/build-boost/install""" +outputs = ["build-boost/CMakeCache.txt"] +description = "Configure Boost (GIL and its dependencies) from the superproject in build-boost" + +[feature.bench.tasks.boost-install] +cmd = "cmake --build build-boost --target install" +depends-on = ["boost-configure"] +description = "Build and install Boost in build-boost/install" + +[feature.bench.tasks.bench-configure] +cmd = """cmake -S . -B build-bench -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBOOST_ROOT=$PIXI_PROJECT_ROOT/build-boost/install \ + -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \ + -DIPP_ROOT=$CONDA_PREFIX \ + -DBUILD_TESTING=OFF \ + -DBOOST_GIL_BUILD_BENCHMARKS=ON \ + -DBOOST_GIL_BUILD_BENCHMARKS_OPENCV=ON \ + -DBOOST_GIL_BUILD_BENCHMARKS_IPP=ON \ + -DBOOST_GIL_BUILD_EXAMPLES=OFF \ + -DBOOST_GIL_BUILD_HEADER_TESTS=OFF \ + -DBOOST_GIL_ENABLE_EXT_IO=OFF""" +depends-on = ["boost-install"] +description = "Configure the benchmarks in build-bench" + +[feature.bench.tasks.bench-build] +cmd = "cmake --build build-bench --target benchmark/all" +depends-on = ["bench-configure"] +description = "Build the benchmarks (benchmark)" + +[feature.bench.tasks.bench-run] +# The OpenCV and IPP benchmarks are prefixed with ocv_ and ipp_. With no name +# (the default "*"), every built benchmark is run in turn. +cmd = """bash -c 'find build-bench/benchmark -type f -executable -not -path "*/vendor/*" \ + -name "benchmark_{{ name }}" | sort | while read -r f; do echo "=== $f ==="; "$f"; done'""" +args = [{ arg = "name", default = "*" }] +depends-on = ["bench-build"] +description = "Run one or all benchmarks, e.g. `pixi run bench-run ocv_view_transpose`" + [environments] docs = ["docs"] +bench = ["bench"] From 0e8d8195420b2d1d40ec9f6c58d94ba1d74da573 Mon Sep 17 00:00:00 2001 From: Samuel Debionne Date: Wed, 23 Sep 2026 22:02:10 +0200 Subject: [PATCH 2/3] algo: add specialization for transposed_view --- include/boost/gil/algorithm.hpp | 279 ++++++++++++++++++++++- test/core/algorithm/CMakeLists.txt | 3 +- test/core/algorithm/Jamfile | 1 + test/core/algorithm/transposed_views.cpp | 187 +++++++++++++++ 4 files changed, 464 insertions(+), 6 deletions(-) create mode 100644 test/core/algorithm/transposed_views.cpp diff --git a/include/boost/gil/algorithm.hpp b/include/boost/gil/algorithm.hpp index 8cc4251895..86e2e746ff 100644 --- a/include/boost/gil/algorithm.hpp +++ b/include/boost/gil/algorithm.hpp @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -269,6 +270,201 @@ BOOST_FORCEINLINE auto copy_with_2d_iterators(SrcIterator first, SrcIterator las } return dst+n; } + +////////////////////////////////////////////////////////////////////////////////////// +// Support for views with a transposed memory layout (e.g. transposed_view, rotated90cw_view) +////////////////////////////////////////////////////////////////////////////////////// + +template +struct is_memory_based_2d_locator : std::false_type {}; + +template +struct is_memory_based_2d_locator> : std::true_type {}; + +/// Whether a view of this type can have a transposed memory layout, i.e. a memory-based view +/// whose horizontal step is dynamic. +template +struct may_have_transposed_layout + : std::integral_constant + < + bool, + is_memory_based_2d_locator::value && + iterator_is_step::value + > +{}; + +template +BOOST_FORCEINLINE bool has_transposed_layout(View const& view, std::true_type) +{ + // Adjacent pixels of a row are further apart in memory than adjacent pixels of a column + return std::abs(view.pixels().pixel_size()) > std::abs(view.pixels().row_size()); +} + +template +BOOST_FORCEINLINE bool has_transposed_layout(View const&, std::false_type) +{ + return false; +} + +/// Returns true if traversing the view row by row accesses the memory with a large stride +template +BOOST_FORCEINLINE bool has_transposed_layout(View const& view) +{ + return has_transposed_layout(view, + std::integral_constant::value>{}); +} + +/// Whether the views of these types may be traversed along different memory axes +template +struct may_have_different_layouts + : std::integral_constant + < + bool, + may_have_transposed_layout::value || may_have_transposed_layout::value + > +{}; + +struct identity_pixel_fn +{ + template + BOOST_FORCEINLINE auto operator()(P&& p) const -> P&& + { + return std::forward

(p); + } +}; + +/// \brief Performs dst(x,y) = fun(src(x,y)) by square blocks of BlockSize x BlockSize pixels +/// +/// Intended for views that are traversed along different memory axes (one of them has a +/// transposed memory layout). BlockSize rows of dst are written at once while the src pixels +/// of the block are read with precomputed offsets, so that both views are accessed with +/// BlockSize sequential streams instead of one of them being accessed with a large stride. +/// The blocks are processed by vertical panels of PanelWidth columns, so that the memory +/// touched in src by a panel stays in cache while the panel is processed. +template +void transform_pixels_blocked(View1 const& src, View2 const& dst, F& fun) +{ + static_assert(BlockSize > 0, "BlockSize must be positive"); + static_assert(PanelWidth > 0 && PanelWidth % BlockSize == 0, + "PanelWidth must be a positive multiple of BlockSize"); + BOOST_ASSERT(src.dimensions() == dst.dimensions()); + + using src_locator_t = typename View1::xy_locator; + using cached_location_t = typename src_locator_t::cached_location_t; + + std::ptrdiff_t const width = src.width(); + std::ptrdiff_t const height = src.height(); + std::ptrdiff_t const blocked_width = width - width % BlockSize; + std::ptrdiff_t const blocked_height = height - height % BlockSize; + + // offsets[k][l] is the location of src(x + l, y + k) relative to src(x, y) + cached_location_t offsets[BlockSize][BlockSize]; + { + src_locator_t const loc = src.xy_at(0, 0); + for (std::ptrdiff_t k = 0; k < BlockSize; ++k) + for (std::ptrdiff_t l = 0; l < BlockSize; ++l) + offsets[k][l] = loc.cache_location(l, k); + } + + typename View2::x_iterator d[BlockSize]; + + for (std::ptrdiff_t x0 = 0; x0 < blocked_width; x0 += PanelWidth) + { + std::ptrdiff_t const x1 = (std::min)(x0 + PanelWidth, blocked_width); + + for (std::ptrdiff_t y = 0; y < blocked_height; y += BlockSize) + { + for (std::ptrdiff_t k = 0; k < BlockSize; ++k) + d[k] = dst.row_begin(y + k); + + for (std::ptrdiff_t x = x0; x < x1; x += BlockSize) + { + src_locator_t const s = src.xy_at(x, y); + for (std::ptrdiff_t k = 0; k < BlockSize; ++k) + for (std::ptrdiff_t l = 0; l < BlockSize; ++l) + d[k][x + l] = fun(s[offsets[k][l]]); + } + } + + // Remaining rows of the panel + for (std::ptrdiff_t y = blocked_height; y < height; ++y) + { + typename View1::x_iterator const s = src.row_begin(y); + typename View2::x_iterator const d0 = dst.row_begin(y); + for (std::ptrdiff_t x = x0; x < x1; ++x) + d0[x] = fun(s[x]); + } + } + + // Remaining columns + if (blocked_width < width) + { + for (std::ptrdiff_t y = 0; y < height; ++y) + { + typename View1::x_iterator const s = src.row_begin(y); + typename View2::x_iterator const d0 = dst.row_begin(y); + for (std::ptrdiff_t x = blocked_width; x < width; ++x) + d0[x] = fun(s[x]); + } + } +} + +/// Size in bits of a pixel in memory, given the reference and value types of a view +template +struct pixel_bit_size_impl + : std::integral_constant +{}; + +template +struct pixel_bit_size_impl, Value> + : std::integral_constant + < + std::size_t, + bit_aligned_pixel_reference::bit_size + > +{}; + +/// Size in bits of the pixels of the view (exact for bit-aligned pixels) +template +struct view_pixel_bit_size + : pixel_bit_size_impl + < + typename std::remove_cv::type>::type, + typename View::value_type + > +{}; + +/// Block size (in pixels) used by copy_pixels and transform_pixels for views with different +/// memory layouts, depending on the size of the pixels in bits. +/// Tuned on 1-bit to 128-bit pixels (bit-aligned, packed, interleaved and planar, integral and +/// floating-point channels) and 1000x1000 to 8192x8192 images: a row of a block should span +/// no more than about 32 bytes. +constexpr std::ptrdiff_t transpose_block_size(std::size_t pixel_bit_size) +{ + return pixel_bit_size <= 24 ? 8 : pixel_bit_size <= 64 ? 4 : 2; +} + +/// Panel width (in pixels) used by copy_pixels and transform_pixels for views with different +/// memory layouts. Each column of a panel touches one cache line of the transposed view whatever +/// the size of the pixels, hence it does not depend on it. +constexpr std::ptrdiff_t transpose_panel_width = 128; + +/// Blocked transform of views with different memory layouts. The views are swapped to their +/// transposed views if needed so that dst is the one that is written along its memory rows. +template +void transform_pixels_blocked_dispatch(View1 const& src, View2 const& dst, F& fun, bool dst_transposed) +{ + constexpr std::size_t pixel_bit_size = (std::max)( + view_pixel_bit_size::value, view_pixel_bit_size::value); + constexpr std::ptrdiff_t block_size = transpose_block_size(pixel_bit_size); + + if (dst_transposed) + transform_pixels_blocked( + transposed_view(src), transposed_view(dst), fun); + else + transform_pixels_blocked(src, dst, fun); +} + } // namespace detail } } // namespace boost::gil @@ -284,13 +480,50 @@ BOOST_FORCEINLINE auto copy1(boost::gil::iterator_from_2d first, boost::gil: } // namespace std namespace boost { namespace gil { + +namespace detail { + +template BOOST_FORCEINLINE +void copy_pixels_impl(View1 const& src, View2 const& dst, std::false_type) +{ + copy_with_2d_iterators(src.begin(), src.end(), dst.begin()); +} + +template BOOST_FORCEINLINE +void copy_pixels_impl(View1 const& src, View2 const& dst, std::true_type) +{ + bool const src_transposed = has_transposed_layout(src); + bool const dst_transposed = has_transposed_layout(dst); + + if (src_transposed != dst_transposed) + { + identity_pixel_fn fun; + transform_pixels_blocked_dispatch(src, dst, fun, dst_transposed); + } + else if (src_transposed) + { + // Both views are transposed: traverse them along their memory rows + auto const tsrc = transposed_view(src); + auto const tdst = transposed_view(dst); + copy_with_2d_iterators(tsrc.begin(), tsrc.end(), tdst.begin()); + } + else + copy_with_2d_iterators(src.begin(), src.end(), dst.begin()); +} + +} // namespace detail + /// \ingroup ImageViewSTLAlgorithmsCopyPixels /// \brief std::copy for image views +/// +/// If one of the views has a transposed memory layout (e.g. obtained with transposed_view) +/// and the other one does not, the pixels are copied by blocks to limit the cache misses. template BOOST_FORCEINLINE void copy_pixels(const View1& src, const View2& dst) { BOOST_ASSERT(src.dimensions() == dst.dimensions()); - detail::copy_with_2d_iterators(src.begin(),src.end(),dst.begin()); + detail::copy_pixels_impl(src, dst, + std::integral_constant::value>{}); } ////////////////////////////////////////////////////////////////////////////////////// @@ -1120,17 +1353,53 @@ bool equal_pixels(const View1& v1, const View2& v2) { /// \ingroup ImageViewSTLAlgorithms /// \brief std::transform for image views -/// \ingroup ImageViewSTLAlgorithmsTransformPixels -/// \brief std::transform for image views +namespace detail { + template BOOST_FORCEINLINE -F transform_pixels(const View1& src,const View2& dst, F fun) { - BOOST_ASSERT(src.dimensions() == dst.dimensions()); +void transform_pixels_by_rows(View1 const& src, View2 const& dst, F& fun) +{ for (std::ptrdiff_t y=0; y BOOST_FORCEINLINE +void transform_pixels_impl(View1 const& src, View2 const& dst, F& fun, std::false_type) +{ + transform_pixels_by_rows(src, dst, fun); +} + +template BOOST_FORCEINLINE +void transform_pixels_impl(View1 const& src, View2 const& dst, F& fun, std::true_type) +{ + bool const src_transposed = has_transposed_layout(src); + bool const dst_transposed = has_transposed_layout(dst); + + if (src_transposed != dst_transposed) + transform_pixels_blocked_dispatch(src, dst, fun, dst_transposed); + else if (src_transposed) + // Both views are transposed: traverse them along their memory rows + transform_pixels_by_rows(transposed_view(src), transposed_view(dst), fun); + else + transform_pixels_by_rows(src, dst, fun); +} + +} // namespace detail + +/// \ingroup ImageViewSTLAlgorithmsTransformPixels +/// \brief std::transform for image views +/// +/// If one of the views has a transposed memory layout (e.g. obtained with transposed_view) +/// and the other one does not, the pixels are processed by blocks to limit the cache misses. +/// Hence the order in which \p fun is applied to the pixels is unspecified. +template BOOST_FORCEINLINE +F transform_pixels(const View1& src,const View2& dst, F fun) { + BOOST_ASSERT(src.dimensions() == dst.dimensions()); + detail::transform_pixels_impl(src, dst, fun, + std::integral_constant::value>{}); return fun; } diff --git a/test/core/algorithm/CMakeLists.txt b/test/core/algorithm/CMakeLists.txt index 13e113fc64..da52344500 100644 --- a/test/core/algorithm/CMakeLists.txt +++ b/test/core/algorithm/CMakeLists.txt @@ -10,7 +10,8 @@ foreach(_name for_each_pixel std_fill std_uninitialized_fill - extend_boundary) + extend_boundary + transposed_views) set(_test t_core_algorithm_${_name}) set(_target test_core_algorithm_${_name}) diff --git a/test/core/algorithm/Jamfile b/test/core/algorithm/Jamfile index aa51fa435f..87bf6c31cf 100644 --- a/test/core/algorithm/Jamfile +++ b/test/core/algorithm/Jamfile @@ -13,3 +13,4 @@ run for_each_pixel.cpp ; run std_fill.cpp : : : /boost/array//boost_array ; run std_uninitialized_fill.cpp ; run extend_boundary.cpp ; +run transposed_views.cpp ; diff --git a/test/core/algorithm/transposed_views.cpp b/test/core/algorithm/transposed_views.cpp new file mode 100644 index 0000000000..0a92abe328 --- /dev/null +++ b/test/core/algorithm/transposed_views.cpp @@ -0,0 +1,187 @@ +// +// Copyright 2026 Samuel Debionne, ESRF +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include + +#include + +#include +#include + +namespace gil = boost::gil; + +// Fills the view with distinct values +template +void fill_distinct(View const& view) +{ + int i = 0; + for (std::ptrdiff_t y = 0; y < view.height(); ++y) + for (std::ptrdiff_t x = 0; x < view.width(); ++x, ++i) + gil::static_for_each(view(x, y), [&i](auto&& c) { + using channel_t = typename gil::channel_traits>::value_type; + c = gil::channel_convert(static_cast(i * 7 + 3)); + }); +} + +template +bool equal_by_pixel(View1 const& v1, View2 const& v2) +{ + if (v1.dimensions() != v2.dimensions()) + return false; + for (std::ptrdiff_t y = 0; y < v1.height(); ++y) + for (std::ptrdiff_t x = 0; x < v1.width(); ++x) + if (v1(x, y) != v2(x, y)) + return false; + return true; +} + +template +struct invert_fn +{ + Pixel operator()(Pixel const& p) const + { + Pixel r; + gil::static_transform(p, r, [](auto const& c) { + using channel_t = typename gil::channel_traits>::value_type; + return gil::channel_invert(channel_t(c)); + }); + return r; + } +}; + +template +bool equal_inverted_by_pixel(View1 const& v1, View2 const& v2) +{ + for (std::ptrdiff_t y = 0; y < v1.height(); ++y) + for (std::ptrdiff_t x = 0; x < v1.width(); ++x) + if (invert_fn{}(v1(x, y)) != v2(x, y)) + return false; + return true; +} + +// Image with extra hidden rows: accessing the last pixels of a bit-aligned image whose +// bit field spans several bytes reads past the end of the pixels (a GIL issue unrelated +// to the algorithms tested here). 32 rows of at least 1 bit cover a 32-bit bit field. +template +struct padded_image +{ + padded_image(std::ptrdiff_t width, std::ptrdiff_t height) + : img(width, height + 32), width(width), height(height) + {} + + typename Image::view_t view() { return gil::subimage_view(gil::view(img), 0, 0, width, height); } + typename Image::const_view_t const_view() const + { + return gil::subimage_view(gil::const_view(img), 0, 0, width, height); + } + + Image img; + std::ptrdiff_t width; + std::ptrdiff_t height; +}; + +template +void test_copy_and_transform(std::ptrdiff_t width, std::ptrdiff_t height) +{ + padded_image in(width, height); + fill_distinct(in.view()); + auto const src = in.const_view(); + + // transposed src -> regular dst + { + padded_image out(height, width); + gil::copy_pixels(gil::transposed_view(src), out.view()); + BOOST_TEST(equal_by_pixel(gil::transposed_view(src), out.view())); + + padded_image out2(height, width); + gil::transform_pixels(gil::transposed_view(src), out2.view(), invert_fn{}); + BOOST_TEST(equal_inverted_by_pixel(gil::transposed_view(src), out2.view())); + } + + // regular src -> transposed dst + { + padded_image out(height, width); + gil::copy_pixels(src, gil::transposed_view(out.view())); + BOOST_TEST(equal_by_pixel(src, gil::transposed_view(out.view()))); + + padded_image out2(height, width); + gil::transform_pixels(src, gil::transposed_view(out2.view()), invert_fn{}); + BOOST_TEST(equal_inverted_by_pixel(src, gil::transposed_view(out2.view()))); + } + + // transposed src -> transposed dst + { + padded_image out(width, height); + gil::copy_pixels(gil::transposed_view(src), gil::transposed_view(out.view())); + BOOST_TEST(equal_by_pixel(src, out.view())); + + padded_image out2(width, height); + gil::transform_pixels(gil::transposed_view(src), gil::transposed_view(out2.view()), invert_fn{}); + BOOST_TEST(equal_inverted_by_pixel(src, out2.view())); + } + + // rotated src -> regular dst + { + padded_image out(height, width); + gil::copy_pixels(gil::rotated90cw_view(src), out.view()); + BOOST_TEST(equal_by_pixel(gil::rotated90cw_view(src), out.view())); + + gil::copy_pixels(gil::rotated90ccw_view(src), out.view()); + BOOST_TEST(equal_by_pixel(gil::rotated90ccw_view(src), out.view())); + } + + // transposed subimage src -> regular dst + if (width > 2 && height > 2) + { + auto const sub = gil::subimage_view(src, 1, 1, width - 2, height - 2); + padded_image out(height - 2, width - 2); + gil::copy_pixels(gil::transposed_view(sub), out.view()); + BOOST_TEST(equal_by_pixel(gil::transposed_view(sub), out.view())); + } + + // transposed src -> regular dst with color conversion + { + gil::bgr8_image_t out(height, width); + gil::copy_and_convert_pixels(gil::transposed_view(src), gil::view(out)); + BOOST_TEST(equal_by_pixel( + gil::color_converted_view(gil::transposed_view(src)), gil::view(out))); + } +} + +template +void test_sizes() +{ + // Sizes that are and are not multiples of the block size, smaller and larger than a panel + std::ptrdiff_t const sizes[] = {1, 2, 3, 4, 5, 7, 8, 13, 16, 33, 64, 67, 130}; + for (auto w : sizes) + for (auto h : sizes) + test_copy_and_transform(w, h); +} + +// Byte-aligned packed pixels +using rgb565_image_t = gil::packed_image3_type::type; +// Bit-aligned packed pixels (several pixels per byte, or pixels straddling bytes) +using gray1_image_t = gil::bit_aligned_image1_type<1, gil::gray_layout_t>::type; +using rgb121_image_t = gil::bit_aligned_image3_type<1, 2, 1, gil::rgb_layout_t>::type; +using rgb565_bit_aligned_image_t = gil::bit_aligned_image3_type<5, 6, 5, gil::rgb_layout_t>::type; +using rgb343_image_t = gil::bit_aligned_image3_type<3, 4, 3, gil::rgb_layout_t>::type; + +int main() +{ + test_sizes(); + test_sizes(); + test_sizes(); + test_sizes(); + test_sizes(); + test_sizes(); + test_sizes(); + test_sizes(); + test_sizes(); + test_sizes(); + + return ::boost::report_errors(); +} From 69db29b50704d96dd29c7e65754e9b90b8c1e07c Mon Sep 17 00:00:00 2001 From: Samuel Debionne Date: Tue, 13 Oct 2026 21:59:21 +0200 Subject: [PATCH 3/3] cmake: Fix warning CMP0167 on FindBoost module is removed --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 529ceccb14..929f540613 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -158,7 +158,7 @@ set(Boost_required_components headers) if (BOOST_GIL_USE_BOOST_FILESYSTEM) list(APPEND Boost_required_components filesystem) endif() -find_package(Boost 1.80.0 REQUIRED COMPONENTS ${Boost_required_components}) +find_package(Boost CONFIG 1.80.0 REQUIRED COMPONENTS ${Boost_required_components}) message(STATUS "Boost.GIL: Using Boost_INCLUDE_DIRS=${Boost_INCLUDE_DIRS}") message(STATUS "Boost.GIL: Using Boost_LIBRARY_DIRS=${Boost_LIBRARY_DIRS}")