Skip to content

python 3.15.0rc3: align python-feedstock with conda-forge - #256

Open
skupr-anaconda wants to merge 13 commits into
masterfrom
PKG-15601-cf-align
Open

skupr-anaconda wants to merge 13 commits into
masterfrom
PKG-15601-cf-align

Conversation

@skupr-anaconda

@skupr-anaconda skupr-anaconda commented Sep 4, 2026 •

Copy link
Copy Markdown

Destination channel: ad-testing/label/py315

Links

Explanation of changes:

Onto current master (feb5133b: #259 then #267). Merge cb9904b1, then review cleanups through fa2cc0c0. CF-align remainder only — do not re-review the libpython split or the rc3 bump.

Taken from master

  • dev=rc3, sha256 506630aa… (Python-3.15.0rc3.tar.xz). Shared patches already refreshed in python 3.15.0rc3 #267.
  • macOS shared-PGO dylib symlink in build_base.sh (20d8a034).
  • Prefix-replacement NEEDED / otool -L checks + exit 1 (4ccdc624).
  • Explicit run: on noarch outputs (b9667f6c).

Kept from this PR (#256 remainder)

  • CBC: gil_type → freethreading: yes/no and PY_FREETHREADING. FT on all platforms. build_type: release only (# - debug commented; unix debug is #258 / PKG-2624).
  • source: is url + sha256 + patches only (no from_source_control / git_url). Drop gil_type, PY_GIL_DISABLED, bootstrap, linkage_nature.
  • build_number 1 so rc3 CF-align artifacts do not collide with master's _0 on ad-testing/label/py315.
  • Win FT patches 0026 and 0030 wrapped in {% if freethreading == "yes" %}. 0023-branding.patch always applied.
  • CMake tests use Python_FIND_ABI (cmake_test_args). Win import-lib tests cover both lib\ and libs\ (CFEP-27 / CF keep import libraries in libs to help meson and other build systems conda-forge/python-feedstock#918).
  • License PSF-2.0. No dummy channel_targets.
  • python_site_packages_path set (GIL lib/python3.15/site-packages, FT lib/python3.15t/site-packages, win lib/python/site-packages). Changes index.json vs 3.14.7; payload dirs already matched.
  • build_base.sh: SYSCONFIG / build-details.json from shared build (CF LDLIBRARY is set to libpython3.9a although no static lib is included in mambaforge for Linux conda-forge/python-feedstock#565), VERABI_NO_DBG pic.a, llvm-tools-21 via $HOST-llvm-ar. No CentOS OLD_HOST / conda_cos6 clones.
  • build_base.bat: PY_FREETHREADING. Win tk TclVersion=%tk% / TkVersion=%tk% (tk 9).
  • run_test_jit.py: skip (exit 0) when this interpreter was built without JIT. python-jit still skipped for FT.
  • xorg-libx11 / xorg-xorgproto linux-only (not unix). No extra xorg-libx11 in python test.requires.
  • doc_url / dev_url restored to python.org docs + devguide.

Review follow-ups (Ian / Charles, 03cfb43d … fa2cc0c0)

  • No cpython output. python-freethreading / python-gil / python-jit run: python, not cpython. No libpython-{gil,freethreading} until a named consumer exists.
  • Dropped dead CF comments and the commented Win MSBuild cross block. Kept .vscode/ in .gitignore.
  • Dropped linux $RPATH sysroot missing_dso_whitelist (libc / libcrypt / libdl / libm / libnsl / libpthread / librt / libutil). Win MSVCR / api-ms-win-* whitelist stays (# [win]).

Already on master (from #259 — not new here)

Frozen AR-delta vs conda-forge (intentionally not copied)

  • tk 9.0 from pkgs/main (not CF 8.6).
  • llvm-tools-21 (not unversioned llvm-tools).
  • No _python_rc; no channel_sources: python_rc / python_debug zip.
  • Pinned aggregate host deps; msys2-gcc-libs; no binutils_impl / patch / m2-patch.
  • downstreams commented; cmake-no-system / ninja-base / make.
  • Keep 0023 branding, 0029 zlib-ng, 0030 xxlimited.

Notes:

  • Upload dest is ad-testing/label/py315 only. Do not merge to pkgs/main.
  • Human review/merge only when PBP is green.
  • Linter parsing_jinja_failure is skipped ({% if freethreading is not defined %}). Graph generate must succeed; the linter skip may stay red.
  • Debug builds are off here. Work them on #258; they will not go to pkgs/main.
  • Linux libpython3.so is empty upstream (cpython#104612); we follow CF and only test libpython3${SHLIB_EXT} on unix release.

@skupr-anaconda skupr-anaconda self-assigned this Sep 4, 2026
skupr-anaconda added a commit that referenced this pull request Sep 21, 2026
Replay #256 topology on origin/master without merge 2a73320.
Keep master patch numbering (0028 site.pth, 0029 zlib-ng, 0030 xxlimited).
Wrap win FT patches in freethreading jinja; add CF conda-forge#928 libpython
unix weak run_exports.

Refs: PKG-15601
@skupr-anaconda

skupr-anaconda commented Sep 23, 2026 •

Copy link
Copy Markdown
Author

Interesting, there is a new vendored d3-flame-graph in v3.15.0rc2: CPython stdlib profiling/sampling/_vendor/. . The upstream source is this https://github.com/spiermar/d3-flame-graph

@skupr-anaconda skupr-anaconda changed the title PKG-15601 — align python-feedstock with conda-forge python 3.15.0rc2: align python-feedstock with conda-forge Sep 23, 2026
skupr-anaconda added a commit that referenced this pull request Sep 24, 2026
PKG-2624 spike stacked on #256. Drop release variants so this graph
uploads only to ad-testing/label/py315-debug, and gate the d ABI with
unconditional tests instead of PY_INTERP_DEBUG getenv.

Windows skipped. Do not merge to pkgs/main.
skupr-anaconda added a commit that referenced this pull request Sep 25, 2026
Resolve #258 vs #256. Drop libexpat pins (expat-feedstock#31). Skip
win debug CMake FindPython. Assert _tkinter_d.lib for GIL and FT.
@skupr-anaconda

skupr-anaconda commented Sep 28, 2026 •

Copy link
Copy Markdown
Author

@ifitchet @cbouss

Artifact compare vs conda-forge python 3.15.0rc2

Staging: https://staging.continuum.io/pbp/fs/python-feedstock/pr256/cffd5c1
Pairs: GIL _101_cp315, FT _1_cp315t on linux-64, linux-aarch64, osx-arm64, win-64, noarch.

osx-64 is out of scope. win-arm64 is not in this graph (recipe is ARM64-ready; PBP has no win-arm64 worker yet).

Same

  • Same outputs, same extension-module names.
  • Unix python: ~1164/2814 files hash-identical (stdlib .py, headers, data).
  • Win python: 1953/2013 GIL, 1946/2009 FT hash-identical.
  • Remaining Unix “diffs” are almost all same-size .pyc (magic 520e0d0a, timestamp only).
  • Empty on both sides: win libpython / libpython-static, noarch cpython / python-gil / python-freethreading.
  • python-jit payloads match.

Not the same (review these)

What Staging conda-forge Action
Linux linker-compat dir compiler_compat/{ld,README} share/python_compiler_compat/ It's historical. Optional: move to CF path
GIL conda-site.pth missing present Keep missing. Do not restore CFEP-65 lib/python/site-packages (numba failure)
FT conda-site.pth 1 line 2 lines Keep 1 line
platform.py / sys.version Anaconda branding conda-forge branding Keep 0023-branding.patch
_tkinter libtcl9tk9.0 libtk8.6 Keep tk 9
osx-arm64 libpython*.dylib 11.3 MB + __llvm_prf_* 6.6 MB, no PGO sections Look — leftover PGO on the shared dylib

Shebangs / _sysconfig* / conda-meta differ by prefix (croot/ vs conda-bld/). Cannot match across CIs.

Why binaries differ (do not “fix” to CF)

  • tk 9 vs 8.6, glibc 2.28 vs 2.17, libgcc 14 vs 15, libffi 3.4 vs 3.7, sqlite vs libsqlite, xz vs liblzma, no _python_rc, license PSF-2.0 vs Python-2.0.
  • linux-64 CFLAGS: -march=x86-64-v2 (aggregate) vs CF -march=nocona. .comment: gcc 14.3 vs 15.3.
  • linux pyconfig.h: extra HAVE_* (statx, getrandom, copy_file_range, …) from el8 vs cos7. osx: only HAVE_READLINE_READLINE_H.
  • linux python3.15 ~40.4 vs 40.3 MB (DWARF, not a file-list bug). Win .pyd ~8 KB larger (MSVC + tk 9).

osx-arm64 libpython (the one real size bug)

python3.15 is fine (~6.57 MB both). libpython3.15.dylib is not:

  • Staging __TEXT,__text 6.46 MB vs CF 3.86 MB.
  • Staging has __llvm_prf_cnts/data/names/vnds (~2.0 MB). CF has none.

Cause: both configures get --enable-optimizations, but only the static tree runs make profile-opt. Shared make leaves PGO instrumentation in the dylib that install_shared.sh ships. Same story for libpython3.15.nolto.a (21.5 vs 14.6 MB).

Fix (follow-up, not required for file-list parity): do not pass --enable-optimizations into the shared configure, or run/strip PGO on that tree before cp libpython*.dylib.

Bottom line

File names: aligned except linux compiler_compat/ and GIL conda-site.pth.
File bytes: will never match CF while we keep tk 9, glibc 2.28, x86-64-v2, branding, and PBP prefixes. That is the frozen AR-delta, not a regression.

Optional in this PR: relocate compiler_compat. Do not chase CF bytes. Worth a small follow-up for the osx shared-lib PGO leftover.

@skupr-anaconda

skupr-anaconda commented Sep 28, 2026 •

Copy link
Copy Markdown
Author

Artifact compare vs pkgs/main python 3.14.7

Staging: https://staging.continuum.io/pbp/fs/python-feedstock/pr256/cffd5c1 (3.15.0rc2)
Main: https://repo.anaconda.com/pkgs/main (3.14.7) · recipe main-3.14
Pairs: GIL _101, FT _1 on linux-64, osx-arm64, win-64. Paths version-normalized (3.14/3.15 → X) before set-diff.

osx-64 is out of scope. win-arm64 is on 3.14.7 main, not on this graph (recipe is ARM64-ready).

Same

  • Unix compiler_compat/{ld,README} (both AR historical path).
  • libpython-static: same 3 files (libpython3.X.a, .nolto.a, osx config .a).
  • Host ABI family: tk 9.0.4, glibc 2.28, libffi 3.4, libgcc 14, openssl 3.5.x.
  • Same extension names except the 3.15 stdlib adds below.
  • Win: same ~37 .pyd names (after the CFEP-27 path rewrite).

Not the same (review these)

What Staging 3.15 pkgs/main 3.14.7 Action
Shared libpython new output; python has no .so/.dylib so/dylib inside python; no libpython pkg Keep CF-align split
GIL conda-site.pth missing present Keep missing (numba / CFEP-65)
bin/python3.1 absent present 3.14 conda#10969 workaround; optional
_sysconfigdata_*_conda_cos6_* absent present Keep dropped CentOS clones
sre_{compile,parse,constants}.py absent present Expected — removed upstream in 3.15
_asyncio*.so/.pyd absent present Expected — folded into interpreter in 3.15
Lib/profiling/sampling/ (~81 files) present absent Expected — new in 3.15
_math_integer, xxlimited_3_13 present absent Expected — new 3.15 modules
Win layout lib/python/ + lib-dynload/ Lib/ + DLLs/ Keep CFEP-27
cpython noarch present absent Keep CF-align metapackage
win-arm64 no artifacts GIL + FT on main PBP pool, not recipe

Shebangs / _sysconfig* / conda-meta differ by prefix and by version. Cannot match across CIs or minors.

Why binaries differ (do not “fix” to 3.14)

  • Different CPython (3.15.0rc2 ≠ 3.14.7). Interpreter / .so bytes will never match.
  • Pin floors only: libexpat 2.8.5 vs 2.8.2, sqlite 3.53.4 vs 3.53.2, ncurses 6.6 vs 6.5, openssl 3.5.8 vs 3.5.7. Same family as 3.14.7, not CF 8.6/glibc 2.17.
  • C-API headers renamed (lock.h → pylock.h, typeslots.h → slots.h).
  • pkgconfig filenames carry the version (python-3.15*.pc vs python-3.14*.pc).

win-arm64 (recipe yes, this graph no)

build_base.bat already sets PLATFORM=ARM64 / BUILD_PATH=arm64 (arm64t for FT) — the 3.14 #240 port. No extra LLVM override (3.15 upstream is 21).

PBP /check-queue lists win-amd64 only. Perseverance-skills: win-arm64 “(soon)”. 3.14.7 on main proves host deps work (ucrt, vc14, tk 9, openssl 3.5). This SHA never scheduled that subdir.

Bottom line

File names (Unix, version-normalized): aligned except CF-align split (libpython out of python), dropped cos6 sysconfig / python3.1, and 3.15 stdlib adds (profiling/, _math_integer).
File bytes: will never match 3.14.7 — different interpreter. That is expected, not a #256 regression.

Win is a layout rewrite (CFEP-27), not missing modules. Optional later: win-arm64 once PBP has a worker. Do not chase 3.14 paths or CF bytes.

Replay #256 topology on origin/master without merge 2a73320.
Keep master patch numbering (0028 site.pth, 0029 zlib-ng, 0030 xxlimited).
Wrap win FT patches in freethreading jinja; add CF conda-forge#928 libpython
unix weak run_exports.

Refs: PKG-15601
Keep build_type: release only in conda_build_config.yaml. Debug
interpreter remains a PKG-2624 spike, not this CF-align PR.

Refs: PKG-15601
Auto-bump must track every output from the CF-align split.

Refs: PKG-15601
Debug variants stay on ad-testing/label/py315. Disable before any
pkgs/main / stable 3.15.0+ release (PKG-2624).

Refs: PKG-15601
Debug builds are exclusive to python-feedstock#258 / PKG-2624.

Refs: PKG-15601
pyexpat overlinks libexpat 2.8.5; host expat has no run_exports, so
the python output never got a run req. Same fix as #258.

Refs: PKG-15601
@skupr-anaconda
skupr-anaconda changed the base branch from master to PKG-15601-libpython-split September 28, 2026 16:00
@skupr-anaconda

Copy link
Copy Markdown
Author

Review #259 first (C16+C17 libpython split vs master).

This PR (#256) is now based on PKG-15601-libpython-split so Files should be remainder-only (FT CBC / cpython / CF). Do not merge this before #259. After #259 merges, retarget this PR back to master.

Dest remains ad-testing/label/py315. Do not publish 3.15 to pkgs/main (PKG-15601 PBC).

Base automatically changed from PKG-15601-libpython-split to master October 1, 2026 08:21
Keep #256 CF-align remainder (cpython, freethreading CBC, no
from_source_control/gil_type). Take master 3.15.0rc3 sha256, macOS
shared-PGO dylib symlink, prefix-replacement NEEDED checks, and
explicit run: on noarch outputs. Keep build_number 1 so rc3 CF-align
artifacts do not collide with master's _0 on ad-testing/label/py315.
@skupr-anaconda skupr-anaconda changed the title python 3.15.0rc2: align python-feedstock with conda-forge python 3.15.0rc3: align python-feedstock with conda-forge Oct 6, 2026
@anaconda-package-review-v2

anaconda-package-review-v2 Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

🟠 Mergeability confidence: 65/100 (low) — 2 reviewers recommended

135 checks · 104 passed · 6 warnings · 2 critical

Categorization

  • 🟡 no-setup-py-script — Package 'python' has no inline build script; external build scripts (build.sh/bld.bat) were not analyzed.

    Evidence
    • inline_scripts_found: no
    • external_scripts_not_analyzed: yes
  • 🟡 no-setup-py-script — Package 'libpython' has no inline build script; external build scripts (build.sh/bld.bat) were not analyzed.

    Evidence
    • inline_scripts_found: no
    • external_scripts_not_analyzed: yes
  • 🟡 no-setup-py-script — Package 'libpython-static' has no inline build script; external build scripts (build.sh/bld.bat) were not analyzed.

    Evidence
    • inline_scripts_found: no
    • external_scripts_not_analyzed: yes
  • 🟡 no-setup-py-script — Package 'python-freethreading' has no inline build script; external build scripts (build.sh/bld.bat) were not analyzed.

    Evidence
    • inline_scripts_found: no
    • external_scripts_not_analyzed: yes
  • 🟡 no-setup-py-script — Package 'python-gil' has no inline build script; external build scripts (build.sh/bld.bat) were not analyzed.

    Evidence
    • inline_scripts_found: no
    • external_scripts_not_analyzed: yes
  • 🟡 no-setup-py-script — Package 'python-jit' has no inline build script; external build scripts (build.sh/bld.bat) were not analyzed.

    Evidence
    • inline_scripts_found: no
    • external_scripts_not_analyzed: yes
  • 🟡 pure-python — Package 'python' has native compilation signals: compiler deps ['compiler()'], native build tools ['make', 'pkg-config'], native host libs ['zstd', 'libffi', 'zlib', 'bzip2', 'xz', 'openssl', 'sqlite'], build script indicators ['compiler() reference in recipe'].

    Evidence
    • is_noarch_python: no
    • build_script_scan_scope: inline_meta_yaml_only
    • external_build_scripts_not_analyzed: yes
    • compiler_deps_found (1): compiler()
    • native_build_tools_found (2): make, pkg-config
    • native_host_libs_found (7): zstd, libffi, zlib, bzip2, xz, openssl, sqlite
    • build_script_native_indicators (1): compiler() reference in recipe
  • 🟡 pure-python — Package 'libpython' has native compilation signals: compiler deps ['compiler()'], build script indicators ['compiler() reference in recipe'].

    Evidence
    • is_noarch_python: no
    • build_script_scan_scope: inline_meta_yaml_only
    • external_build_scripts_not_analyzed: yes
    • compiler_deps_found (1): compiler()
    • build_script_native_indicators (1): compiler() reference in recipe
  • 🟡 pure-python — Package 'libpython-static' has native compilation signals: compiler deps ['compiler()'], build script indicators ['compiler() reference in recipe'].

    Evidence
    • is_noarch_python: no
    • build_script_scan_scope: inline_meta_yaml_only
    • external_build_scripts_not_analyzed: yes
    • compiler_deps_found (1): compiler()
    • build_script_native_indicators (1): compiler() reference in recipe
  • 🟡 pure-python — Could not determine if package is pure Python: no build/host requirements for 'python-freethreading'. Defaulting to not-pure-python.

    Evidence
    • is_noarch_python: yes
    • build_script_scan_scope: inline_meta_yaml_only
    • external_build_scripts_not_analyzed: yes
  • 🟡 pure-python — Could not determine if package is pure Python: no build/host requirements for 'python-gil'. Defaulting to not-pure-python.

    Evidence
    • is_noarch_python: yes
    • build_script_scan_scope: inline_meta_yaml_only
    • external_build_scripts_not_analyzed: yes
  • 🟡 pure-python — Could not determine if package is pure Python: no build/host requirements for 'python-jit'. Defaulting to not-pure-python.

    Evidence
    • is_noarch_python: yes
    • build_script_scan_scope: inline_meta_yaml_only
    • external_build_scripts_not_analyzed: yes
  • 🟡 version-only-bump — PR modifies 6 non-recipe file(s) — not a version-only bump

    Evidence
    • total_files_changed: 7
    • recipe_files_changed: 1
    • non_recipe_files (6): anaconda.yaml, recipe/build_base.bat, recipe/build_base.sh, recipe/conda_build_config.yaml, recipe/run_test_jit.py, recipe/tests/prefix-replacement/a.c
    • has_version_change: no
    • old_version: 3.15.0rc3
    • new_version: 3.15.0rc3
    • changes_detected:
      • version: no
      • build_number: yes
      • hashes: no
      • source_urls: no
      • source_urls_version_derived: no
      • patches: yes
      • dependencies: yes
      • build_section: no
      • test_section: no
      • about_section: yes
    • failure_reason: PR modifies non-recipe files: anaconda.yaml, recipe/build_base.bat, recipe/build_base.sh, recipe/conda_build_config.yaml, recipe/run_test_jit.py, recipe/tests/prefix-replacement/a.c
  • test-section-present — Recipe for 'python' declares a runnable test section

Needs attention

libpython

  • 🟡 soname-changes — Failed on 6/8 artifact(s). Soname check could not complete for 'libpython': no published baseline artifact available for comparison. (on 6 artifact(s): linux-64 (h723d65b_1_cp315t), linux-64 (hf0cc19c_101_cp315), linux-aarch64 (h9f9a8b9_101_cp315), … and 3 more)

    Evidence
    • failed_artifacts (6): linux-64 (h723d65b_1_cp315t), linux-64 (hf0cc19c_101_cp315), linux-aarch64 (h9f9a8b9_101_cp315), linux-aarch64 (hb9b3b32_1_cp315t), osx-arm64 (h0ec43b3_101_cp315), osx-arm64 (h69dd1f1_1_cp315t)
    • platform_results (8):
      • Soname check could not complete for 'libpython': no published baseline artifact available for comparison. — on 6 artifact(s): linux-64 (h723d65b_1_cp315t), linux-64 (hf0cc19c_101_cp315), linux-aarch64 (h9f9a8b9_101_cp315), … and 3 more
      • Soname check not applicable for 'libpython' — package ships no compiled shared libraries (.so/.dylib/.dll/.pyd). — on 2 artifact(s): win-64 (h5f5c92f_1_cp315t), win-64 (h94e4387_101_cp315)

python

  • 🔴 not-cbc-pinned — Package 'python' is pinned in the aggregate conda_build_config.yaml. Changes to CBC-pinned packages can cascade across the ecosystem and require careful review.

    Evidence
    • package_name_raw: python
    • package_name_normalized: python
    • is_cbc_pinned: yes
    • cbc_total_pinned_packages: 467
  • 🔴 not-miniconda-member — Package 'python' is part of the miniconda distribution. Changes to miniconda packages can break the installer bootstrap and require careful review.

    Evidence
    • package_name_raw: python
    • package_name_normalized: python
    • is_miniconda_member: yes
    • miniconda_total_packages: 169
  • 🟡 soname-changes — Failed on 8/8 artifact(s). linux-64 (h227b2fe_1_cp315t): ⚠️ Shared-library name changes detected for 'python' (linux-64): +76 added, -78 removed, 0 renamed — +_bisect.cpython-315t-x86_64-linux-gnu.so, +_blake2.cpython-315t-x86_64-linux-gnu.so, +_bz2.cpython-315t-x86_64-linux-gnu.so, +_codecs_cn.cpython-315t-x86_64-linux-gnu.so, +_codecs_hk.cpython-315t-x86_64-linux-gnu.so, … and 149 more (comparing 3.14.8 → 3.15.0rc3).; linux-64 (haccecee_101_cp315): ⚠️ Shared-library name changes detected for 'python' (linux-64): +76 added, -78 removed, 0 renamed — +_bisect.cpython-315-x86_64-linux-gnu.so, +_blake2.cpython-315-x86_64-linux-gnu.so, +_bz2.cpython-315-x86_64-linux-gnu.so, +_codecs_cn.cpython-315-x86_64-linux-gnu.so, +_codecs_hk.cpython-315-x86_64-linux-gnu.so, … and 149 more (comparing 3.14.8 → 3.15.0rc3).; linux-aarch64 (hd15f79a_101_cp315): ⚠️ Shared-library name changes detected for 'python' (linux-aarch64): +76 added, -78 removed, 0 renamed — +_bisect.cpython-315-aarch64-linux-gnu.so, +_blake2.cpython-315-aarch64-linux-gnu.so, +_bz2.cpython-315-aarch64-linux-gnu.so, +_codecs_cn.cpython-315-aarch64-linux-gnu.so, +_codecs_hk.cpython-315-aarch64-linux-gnu.so, … and 149 more (comparing 3.14.8 → 3.15.0rc3).; linux-aarch64 (hda1a480_1_cp315t): ⚠️ Shared-library name changes detected for 'python' (linux-aarch64): +76 added, -78 removed, 0 renamed — +_bisect.cpython-315t-aarch64-linux-gnu.so, +_blake2.cpython-315t-aarch64-linux-gnu.so, +_bz2.cpython-315t-aarch64-linux-gnu.so, +_codecs_cn.cpython-315t-aarch64-linux-gnu.so, +_codecs_hk.cpython-315t-aarch64-linux-gnu.so, … and 149 more (comparing 3.14.8 → 3.15.0rc3).; osx-arm64 (hccdce13_101_cp315): ⚠️ Shared-library name changes detected for 'python' (osx-arm64): +78 added, -78 removed, 0 renamed — +_bisect.cpython-315-darwin.so, +_blake2.cpython-315-darwin.so, +_bz2.cpython-315-darwin.so, +_codecs_cn.cpython-315-darwin.so, +_codecs_hk.cpython-315-darwin.so, … and 151 more (comparing 3.14.8 → 3.15.0rc3).; osx-arm64 (hd58bf3a_1_cp315t): ⚠️ Shared-library name changes detected for 'python' (osx-arm64): +78 added, -78 removed, 0 renamed — +_bisect.cpython-315t-darwin.so, +_blake2.cpython-315t-darwin.so, +_bz2.cpython-315t-darwin.so, +_codecs_cn.cpython-315t-darwin.so, +_codecs_hk.cpython-315t-darwin.so, … and 151 more (comparing 3.14.8 → 3.15.0rc3).; win-64 (hd25aaba_1_cp315t): ⚠️ Shared-library name changes detected for 'python' (win-64): +39 added, -38 removed, 0 renamed — +_asyncio.cp315t-win_amd64.pyd, +_bz2.cp315t-win_amd64.pyd, +_ctypes.cp315t-win_amd64.pyd, +_ctypes_test.cp315t-win_amd64.pyd, +_decimal.cp315t-win_amd64.pyd, … and 72 more (comparing 3.14.8 → 3.15.0rc3).; win-64 (he1dda86_101_cp315): ⚠️ Shared-library name changes detected for 'python' (win-64): +2 added, -1 removed, 0 renamed — +python315.dll, +xxlimited_3_13.pyd, -python314.dll (comparing 3.14.8 → 3.15.0rc3).

    Evidence
    • failed_artifacts (8): linux-64 (h227b2fe_1_cp315t), linux-64 (haccecee_101_cp315), linux-aarch64 (hd15f79a_101_cp315), linux-aarch64 (hda1a480_1_cp315t), osx-arm64 (hccdce13_101_cp315), osx-arm64 (hd58bf3a_1_cp315t), win-64 (hd25aaba_1_cp315t), win-64 (he1dda86_101_cp315)
    • platform_results (8):
      • linux-64 (h227b2fe_1_cp315t): ⚠️ Shared-library name changes detected for 'python' (linux-64): +76 added, -78 removed, 0 renamed — +_bisect.cpython-315t-x86_64-linux-gnu.so, +_blake2.cpython-315t-x86_64-linux-gnu.so, +_bz2.cpython-315t-x86_64-linux-gnu.so, +_codecs_cn.cpython-315t-x86_64-linux-gnu.so, +_codecs_hk.cpython-315t-x86_64-linux-gnu.so, … and 149 more (comparing 3.14.8 → 3.15.0rc3).
      • linux-64 (haccecee_101_cp315): ⚠️ Shared-library name changes detected for 'python' (linux-64): +76 added, -78 removed, 0 renamed — +_bisect.cpython-315-x86_64-linux-gnu.so, +_blake2.cpython-315-x86_64-linux-gnu.so, +_bz2.cpython-315-x86_64-linux-gnu.so, +_codecs_cn.cpython-315-x86_64-linux-gnu.so, +_codecs_hk.cpython-315-x86_64-linux-gnu.so, … and 149 more (comparing 3.14.8 → 3.15.0rc3).
      • linux-aarch64 (hd15f79a_101_cp315): ⚠️ Shared-library name changes detected for 'python' (linux-aarch64): +76 added, -78 removed, 0 renamed — +_bisect.cpython-315-aarch64-linux-gnu.so, +_blake2.cpython-315-aarch64-linux-gnu.so, +_bz2.cpython-315-aarch64-linux-gnu.so, +_codecs_cn.cpython-315-aarch64-linux-gnu.so, +_codecs_hk.cpython-315-aarch64-linux-gnu.so, … and 149 more (comparing 3.14.8 → 3.15.0rc3).
      • linux-aarch64 (hda1a480_1_cp315t): ⚠️ Shared-library name changes detected for 'python' (linux-aarch64): +76 added, -78 removed, 0 renamed — +_bisect.cpython-315t-aarch64-linux-gnu.so, +_blake2.cpython-315t-aarch64-linux-gnu.so, +_bz2.cpython-315t-aarch64-linux-gnu.so, +_codecs_cn.cpython-315t-aarch64-linux-gnu.so, +_codecs_hk.cpython-315t-aarch64-linux-gnu.so, … and 149 more (comparing 3.14.8 → 3.15.0rc3).
      • osx-arm64 (hccdce13_101_cp315): ⚠️ Shared-library name changes detected for 'python' (osx-arm64): +78 added, -78 removed, 0 renamed — +_bisect.cpython-315-darwin.so, +_blake2.cpython-315-darwin.so, +_bz2.cpython-315-darwin.so, +_codecs_cn.cpython-315-darwin.so, +_codecs_hk.cpython-315-darwin.so, … and 151 more (comparing 3.14.8 → 3.15.0rc3).
      • osx-arm64 (hd58bf3a_1_cp315t): ⚠️ Shared-library name changes detected for 'python' (osx-arm64): +78 added, -78 removed, 0 renamed — +_bisect.cpython-315t-darwin.so, +_blake2.cpython-315t-darwin.so, +_bz2.cpython-315t-darwin.so, +_codecs_cn.cpython-315t-darwin.so, +_codecs_hk.cpython-315t-darwin.so, … and 151 more (comparing 3.14.8 → 3.15.0rc3).
      • win-64 (hd25aaba_1_cp315t): ⚠️ Shared-library name changes detected for 'python' (win-64): +39 added, -38 removed, 0 renamed — +_asyncio.cp315t-win_amd64.pyd, +_bz2.cp315t-win_amd64.pyd, +_ctypes.cp315t-win_amd64.pyd, +_ctypes_test.cp315t-win_amd64.pyd, +_decimal.cp315t-win_amd64.pyd, … and 72 more (comparing 3.14.8 → 3.15.0rc3).
      • win-64 (he1dda86_101_cp315): ⚠️ Shared-library name changes detected for 'python' (win-64): +2 added, -1 removed, 0 renamed — +python315.dll, +xxlimited_3_13.pyd, -python314.dll (comparing 3.14.8 → 3.15.0rc3).
  • 🟡 static-libraries — Failed on 2/8 artifact(s). win-64 (hd25aaba_1_cp315t): Output 'python' (win-64 (hd25aaba_1_cp315t)) ships 4 static libraries (.a/.lib) but is not a devel/dev/static-named output (lib/python315t.lib, lib/python3t.lib, libs/python315t.lib...). Static archives belong in a dedicated -devel/-static output.; win-64 (he1dda86_101_cp315): Output 'python' (win-64 (he1dda86_101_cp315)) ships 6 static libraries (.a/.lib) but is not a devel/dev/static-named output (lib/_tkinter.lib, lib/python3.lib, lib/python315.lib...). Static archives belong in a dedicated -devel/-static output.

    Evidence
    • failed_artifacts (2): win-64 (hd25aaba_1_cp315t), win-64 (he1dda86_101_cp315)
    • platform_results (8):
      • linux-64 (h227b2fe_1_cp315t): No static libraries (.a/.lib) found in 'python' (linux-64 (h227b2fe_1_cp315t)).
      • linux-64 (haccecee_101_cp315): No static libraries (.a/.lib) found in 'python' (linux-64 (haccecee_101_cp315)).
      • linux-aarch64 (hd15f79a_101_cp315): No static libraries (.a/.lib) found in 'python' (linux-aarch64 (hd15f79a_101_cp315)).
      • linux-aarch64 (hda1a480_1_cp315t): No static libraries (.a/.lib) found in 'python' (linux-aarch64 (hda1a480_1_cp315t)).
      • osx-arm64 (hccdce13_101_cp315): No static libraries (.a/.lib) found in 'python' (osx-arm64 (hccdce13_101_cp315)).
      • osx-arm64 (hd58bf3a_1_cp315t): No static libraries (.a/.lib) found in 'python' (osx-arm64 (hd58bf3a_1_cp315t)).
      • win-64 (hd25aaba_1_cp315t): Output 'python' (win-64 (hd25aaba_1_cp315t)) ships 4 static libraries (.a/.lib) but is not a devel/dev/static-named output (lib/python315t.lib, lib/python3t.lib, libs/python315t.lib...). Static archives belong in a dedicated -devel/-static output.
      • win-64 (he1dda86_101_cp315): Output 'python' (win-64 (he1dda86_101_cp315)) ships 6 static libraries (.a/.lib) but is not a devel/dev/static-named output (lib/_tkinter.lib, lib/python3.lib, lib/python315.lib...). Static archives belong in a dedicated -devel/-static output.
  • 🟡 vendored-deps — Failed on 8/8 artifact(s). Found 4 vendored/foreign path(s) in artifact: lib/python3.15t/profiling/sampling/_vendor/d3-flame-graph/4.1.3/d3-flamegraph-tooltip.min.js, lib/python3.15t/profiling/sampling/_vendor/d3-flame-graph/4.1.3/d3-flamegraph.css, … (on 3 artifact(s): linux-64 (h227b2fe_1_cp315t), linux-aarch64 (hda1a480_1_cp315t), osx-arm64 (hd58bf3a_1_cp315t)); Found 4 vendored/foreign path(s) in artifact: lib/python3.15/profiling/sampling/_vendor/d3-flame-graph/4.1.3/d3-flamegraph-tooltip.min.js, lib/python3.15/profiling/sampling/_vendor/d3-flame-graph/4.1.3/d3-flamegraph.css, … (on 3 artifact(s): linux-64 (haccecee_101_cp315), linux-aarch64 (hd15f79a_101_cp315), osx-arm64 (hccdce13_101_cp315)); Found 4 vendored/foreign path(s) in artifact: lib/python/profiling/sampling/_vendor/d3-flame-graph/4.1.3/d3-flamegraph-tooltip.min.js, lib/python/profiling/sampling/_vendor/d3-flame-graph/4.1.3/d3-flamegraph.css, … (on 2 artifact(s): win-64 (hd25aaba_1_cp315t), win-64 (he1dda86_101_cp315))

    Evidence
    • failed_artifacts (8): linux-64 (h227b2fe_1_cp315t), linux-64 (haccecee_101_cp315), linux-aarch64 (hd15f79a_101_cp315), linux-aarch64 (hda1a480_1_cp315t), osx-arm64 (hccdce13_101_cp315), osx-arm64 (hd58bf3a_1_cp315t), win-64 (hd25aaba_1_cp315t), win-64 (he1dda86_101_cp315)
    • platform_results (8):
      • Found 4 vendored/foreign path(s) in artifact: lib/python3.15t/profiling/sampling/_vendor/d3-flame-graph/4.1.3/d3-flamegraph-tooltip.min.js, lib/python3.15t/profiling/sampling/_vendor/d3-flame-graph/4.1.3/d3-flamegraph.css, … — on 3 artifact(s): linux-64 (h227b2fe_1_cp315t), linux-aarch64 (hda1a480_1_cp315t), osx-arm64 (hd58bf3a_1_cp315t)
      • Found 4 vendored/foreign path(s) in artifact: lib/python3.15/profiling/sampling/_vendor/d3-flame-graph/4.1.3/d3-flamegraph-tooltip.min.js, lib/python3.15/profiling/sampling/_vendor/d3-flame-graph/4.1.3/d3-flamegraph.css, … — on 3 artifact(s): linux-64 (haccecee_101_cp315), linux-aarch64 (hd15f79a_101_cp315), osx-arm64 (hccdce13_101_cp315)
      • Found 4 vendored/foreign path(s) in artifact: lib/python/profiling/sampling/_vendor/d3-flame-graph/4.1.3/d3-flamegraph-tooltip.min.js, lib/python/profiling/sampling/_vendor/d3-flame-graph/4.1.3/d3-flamegraph.css, … — on 2 artifact(s): win-64 (hd25aaba_1_cp315t), win-64 (he1dda86_101_cp315)
  • 🟡 abi-symbol-comparison — Failed on 1/8 artifact(s). win-64 (he1dda86_101_cp315): 42 ABI symbols added (extension only): PyABIInfo_Check, PyCriticalSection2_Begin, PyCriticalSection2_End, PyCriticalSection_Begin, PyCriticalSection_End, … and 37 more (comparing 3.14.8 → 3.15.0rc3)

    Evidence
    • failed_artifacts (1): win-64 (he1dda86_101_cp315)
    • platform_results (8):
      • No shared libraries found in current artifact — on 6 artifact(s): linux-64 (h227b2fe_1_cp315t), linux-64 (haccecee_101_cp315), linux-aarch64 (hd15f79a_101_cp315), … and 3 more
      • win-64 (hd25aaba_1_cp315t): ABI unchanged across 0 shared libraries (comparing 3.14.8 → 3.15.0rc3)
      • win-64 (he1dda86_101_cp315): 42 ABI symbols added (extension only): PyABIInfo_Check, PyCriticalSection2_Begin, PyCriticalSection2_End, PyCriticalSection_Begin, PyCriticalSection_End, … and 37 more (comparing 3.14.8 → 3.15.0rc3)
  • 🟡 non-default-upload-channels — abs.yaml sets upload_channels to [ad-testing/label/py315] — this package is uploaded to a non-default channel, not main/defaults. Confirm the destination is intended before approving. Confirm the package is intended for this non-default channel before approving.

    Evidence
    • abs_yaml_path: abs.yaml
    • upload_channels (1): ad-testing/label/py315
    • non_default_channels (1): ad-testing/label/py315

unknown

  • 🟡 build-script-modified — PR adds or modifies build/executable scripts for 'unknown'. 2 build scripts modified: recipe/build_base.bat, recipe/build_base.sh. Build scripts run with unrestricted capabilities — review for arbitrary code execution, downloads, or filesystem changes. Review the build script diff for unintended side effects.

    Evidence
    • modified_scripts (2): recipe/build_base.bat, recipe/build_base.sh
    • total_script_changes: 2
    • highest_severity: warning
  • 🟡 new-platform-selectors — ⚠️ PR introduces new platform selector(s) for 'unknown': [unix and build_type == "release"]. Platform-conditional logic is error-prone and hard to test across all platforms. Confirm the platform selector / variant matrix is intended.

    Evidence
    • new_expressions (1): unix and build_type == "release"
    • removed_expressions (2): win and gil_type == "disabled", win or linux
    • base_count: 109
    • head_count: 104
    • count_increased: no
    • base_selectors (109): linux, linux, linux, linux, linux, linux, linux, linux, linux, linux, linux, linux, linux, linux, linux, linux, linux, linux, linux64, linux64 or osx, not win, not win, not win, not win, not win, … and 84 more
    • head_selectors (104): linux, linux, linux, linux, linux, linux, linux, linux, linux, linux64, linux64 or osx, not win, not win, not win, not win, not win, not win, not win, not win, not win, not win, not win, not win, not win, not win, … and 79 more
  • 🟡 no-ddb-impact — Downstream packages require action: rebuild: ['absl-py', 'adagio', 'aenum', 'affine', 'agate', 'agate-dbf', 'agate-excel', 'agate-sql', 'aiobotocore', 'aiofiles', 'aiohappyeyeballs', 'aiohttp', 'aiohttp-jinja2', 'aiorwlock', 'aiosqlite', 'alabaster', 'alembic', 'allure-behave', 'allure-nose2', 'allure-pytest', 'allure-pytest-bdd', 'allure-python-commons', 'allure-robotframework', 'altgraph', 'altair', 'anaconda-anon-usage', 'anaconda-catalogs', 'anaconda-clean', 'anaconda-cli-base', 'anaconda-client', 'anaconda-cloud', 'anaconda-cloud-cli', 'anaconda-navigator', 'anaconda-project', 'annotated-types', 'ansi2html', 'antlr4-python3-runtime', 'anyio', 'anyqt', 'apache-libcloud', 'apispec', 'apptools', 'apscheduler', 'argcomplete', 'argh', 'argon2-cffi', 'argon2-cffi-bindings', 'arrow', 'arviz', 'asgiref', 'asn1crypto', 'astor', 'astroid', 'astropy', 'astropy-iers-data', 'asv', 'async-lru', 'asyncpg', 'atom', 'attrs', 'authlib', 'autograd', 'autograd-gamma', 'automat', 'autopep8', 'autovizwidget', 'aws-sam-translator', 'aws-xray-sdk', 'azure-core', 'azure-functions', 'azure-storage-blob', 'babel', 'backoff', 'basemap', 'basemap-data', 'basemap-data-hires', 'bcrypt', 'beautifulsoup4', 'behave', 'billiard', 'biopython', 'bitarray', 'black', 'bleach', 'blessings', 'blessed', 'blinker', 'bokeh', 'boolean.py', 'boltons', 'boto3', 'botocore', 'bottleneck', 'brotli-python', 'brotlicffi', 'btrees', 'bytecode', 'cachecontrol', 'cachecontrol-with-filecache', 'cachecontrol-with-redis', 'cached-property', 'cachelib', 'cachetools', 'calver', 'capturer', 'captum', 'cartopy', 'cassandra-driver', 'catalogue', 'catboost', 'category_encoders', 'cattrs', 'cchardet', 'certifi', 'cffi', 'cfgv', 'cftime', 'cgroupspy', 'chameleon', 'chardet', 'cheroot', 'cherrypy', 'chex', 'ciso8601', 'cleo', 'click', 'clickhouse-cityhash', 'clickhouse-driver', 'clickhouse-sqlalchemy', 'cloudpathlib', 'cloudpathlib-all', 'cloudpathlib-azure', 'cloudpathlib-gs', 'cloudpathlib-s3', 'cloudpickle', 'clr_loader', 'cmaes', 'cmarkgfm', 'cmdstanpy', 'cmyt', 'colorama', 'colorcet', 'coloredlogs', 'colorspacious', 'comm', 'composeml', 'conda', 'conda-auth', 'conda-build', 'conda-content-trust', 'conda-index', 'conda-libmamba-solver', 'conda-pack', 'conda-lock', 'conda-package-handling', 'conda-package-streaming', 'conda-souschef', 'confection', 'configargparse', 'configobj', 'configparser', 'configspace', 'cons', 'constantly', 'constructor', 'contextlib2', 'contourpy', 'cookiecutter', 'coremltools', 'cornac', 'coverage', 'coveralls', 'cppy', 'cramjam', 'crashtest', 'cron-descriptor', 'croniter', 'cryptography-vectors', 'cssselect', 'csvkit', 'ctypesgen', 'cuda-gdb', 'cupy', 'cvxopt', 'cycler', 'cymem', 'cython-blis', 'cytoolz', 'dacite', 'dash', 'dash_cytoscape', 'dask', 'dask-core', 'dask-expr', 'dask-glm', 'dask-image', 'dask-jobqueue', 'dask-ml', 'databricks-cli', 'datasets', 'datashader', 'dateparser', 'dateutils', 'dawg-python', 'dbf', 'dbt-extractor', 'dbus-python', 'debugpy', 'decorator', 'deepdiff', 'deprecated', 'dicttoxml', 'diffusers', 'diffusers-torch', 'diffusers-base', 'dill', 'distconfig3', 'distlib', 'distributed', 'distro', 'django', 'dm-tree', 'dnspython', 'docker-py', 'docopt', 'docstring-to-markdown', 'docutils', 'doit', 'drmaa', 'dropbox', 'dulwich', 'dunamai', 'ecdsa', 'ecos', 'editables', 'editdistance', 'elasticsearch', 'elementpath', 'email-validator', 'emfile', 'enaml', 'ensureconda', 'entrypoints', 'ephem', 'et_xmlfile', 'etuples', 'evaluate', 'eventlet', 'exceptiongroup', 'expandvars', 'extension-helpers', 'faker', 'farama-notifications', 'fast-histogram', 'fastapi', 'fastcache', 'fastcluster', 'fastcore', 'fastdownload', 'fastparquet', 'fastrlock', 'favicon', 'featuretools', 'feedparser', 'filelock', 'findpython', 'flake8', 'fiona', 'flake8-import-order', 'flask', 'flask-apscheduler', 'flask-appbuilder', 'flask-admin', 'flask-caching', 'flask-compress', 'flask-json', 'flask-cors', 'flask-jwt-extended', 'flask-login', 'flask-openid', 'flask-restful', 'flask-restx', 'flask-session', 'flask-socketio', 'flask-sqlalchemy', 'flask-wtf', 'flit', 'flit-core', 'flit-scm', 'folium', 'formulaic', 'fonttools', 'frozendict', 'frozenlist', 'fs', 'fsspec', 'ftfy', 'fugue-sql-antlr', 'furl', 'gast', 'gdal', 'gdb', 'gensim', 'genson', 'geographiclib', 'geopandas', 'geopandas-base', 'geopy', 'geoviews', 'geoviews-core', 'gevent', 'geventhttpclient', 'gi-docgen', 'gitpython', 'glue-core', 'glue-vispy-viewers', 'glueviz', 'gluonts', 'gmpy2', 'gobject-introspection', 'google-api-core', 'google-api-core-grpc', 'google-auth', 'google-cloud-core', 'google-auth-oauthlib', 'google-cloud-storage', 'google-crc32c', 'google-resumable-media', 'googleapis-common-protos', 'googleapis-common-protos-grpc', 'gptcache', 'gpustat', 'graphene', 'graphql-relay', 'grayskull', 'greenlet', 'graphql-core', 'grpcio', 'grpcio-status', 'grpcio-tools', 'gunicorn', 'h11', 'h2', 'h5netcdf', 'h5py', 'hatch-nodejs-version', 'hatch-fancy-pypi-readme', 'hatch-jupyter-builder', 'hatch-requirements-txt', 'hatch-vcs', 'hatchling', 'hdijupyterutils', 'hdmedians', 'hiredis', 'holidays', 'holoviews', 'hpack', 'hsluv', 'htbuilder', 'httpcore', 'httptools', 'httpx', 'huggingface_hub', 'humanfriendly', 'humanize', 'hvplot', 'hyperframe', 'hypothesis', 'icalendar', 'identify', 'idna', 'ijson', 'imagecodecs', 'imagehash', 'imageio', 'imagesize', 'imbalanced-learn', 'iminuit', 'immutables', 'importlib-metadata', 'importlib_resources', 'impyla', 'infinity', 'inflate64', 'inflect', 'inflection', 'inquirer', 'intake', 'intake-xarray', 'interface_meta', 'intervals', 'invoke', 'ipykernel', 'ipyleaflet', 'ipympl', 'ipyparallel', 'ipython', 'ipywidgets', 'iso8601', 'isodate', 'isort', 'itsdangerous', 'itemloaders', 'jaraco.classes', 'jaraco.functools', 'jaraco.text', 'jax', 'jax-jumpy', 'jedi', 'jellyfish', 'jinja2', 'jinxed', 'jmespath', 'joblib', 'joserfc', 'jpype1', 'js2py', 'jschema-to-python', 'jsondiff', 'jsonpatch', 'jsonpickle', 'jsonschema', 'jsonpath-ng', 'jsonschema-path', 'jsonschema-specifications', 'jupyter', 'jupyter-lsp-python', 'jupyter-lsp', 'jupyter-packaging', 'jupyter-server-proxy', 'jupyter-server-mathjax', 'jupyter_bokeh', 'jupyter_client', 'jupyter_console', 'jupyter_core', 'jupyter_events', 'jupyter_kernel_gateway', 'jupyter_server', 'jupyter_server_fileid', 'jupyter_server_terminals', 'jupyter_server_ydoc', 'jupyter_ydoc', 'jupyterhub', 'jupyterhub-base', 'jupyterhub-singleuser', 'jupyterlab', 'jupyterlab-geojson', 'jupyterlab-git', 'jupyterlab-variableinspector', 'jupyterlab_code_formatter', 'jupyterlab_launcher', 'jupyterlab_pygments', 'jupyterlab_server', 'jupyterlab_widgets', 'jupytext', 'kagglehub', 'keras', 'keyring', 'keyrings.alt', 'kiwisolver', 'knit', 'kmodes', 'kombu', 'lark', 'lazy-object-proxy', 'lazy_loader', 'leb128', 'libcst', 'libpysal', 'license-expression', 'lightgbm', 'lightning-utilities', 'lightning-cloud', 'line_profiler', 'linkify-it-py', 'lit', 'llvmlite', 'locket', 'logbook', 'logical-unification', 'loguru', 'loky', 'luigi', 'lxml', 'lz4', 'm2cgen', 'macholib', 'mako', 'mapclassify', 'markdown', 'markdown-it-py', 'markdown2', 'markdownlit', 'markupsafe', 'marshmallow', 'marshmallow-oneofschema', 'mashumaro', 'matplotlib', 'matplotlib-base', 'matplotlib-inline', 'maturin', 'mccabe', 'mdit-py-plugins', 'mayavi', 'mdurl', 'medspacy_quickumls', 'menuinst', 'meson', 'meson-python', 'metakernel', 'minikanren', 'mistune', 'mizani', 'mkl-service', 'mkl_fft', 'mkl_random', 'ml_dtypes', 'mlflow', 'mlxtend', 'mmh3', 'mockupdb', 'mockito', 'modin', 'modin-all', 'modin-core', 'modin-dask', 'modin-ray', 'more-itertools', 'moto', 'mpi4py', 'mpl-scatter-density', 'mpld3', 'mpmath', 'msal', 'msgpack-numpy', 'msgpack-python', 'msrest', 'multidict', 'multimethod', 'multipart', 'multipledispatch', 'multiprocess', 'munch', 'murmurhash', 'mypy', 'mypy-protobuf', 'mypy_extensions', 'mypyc', 'mysql-connector-python', 'mysqlclient', 'namex', 'natsort', 'navigator-updater', 'nb_conda_kernels', 'nbclassic', 'nbclient', 'nbconvert', 'nbdime', 'nbformat', 'nbgrader', 'nbsmoke', 'neo4j-python-driver', 'neotime', 'netcdf4', 'networkx', 'nltk', 'nodeenv', 'nose-parameterized', 'nose2', 'notebook', 'notebook-shim', 'numba', 'numcodecs', 'numexpr', 'numpy', 'numpy-base', 'numpydoc', 'nvidia-ml-py', 'oauthenticator', 'oauthlib', 'onnx', 'onnxconverter-common', 'onnxmltools', 'onnxruntime', 'onnxruntime-novec', 'openai', 'openapi-schema-validator', 'openapi-spec-validator', 'opencensus-context', 'opencv', 'openpyxl', 'opentelemetry-api', 'opentelemetry-instrumentation', 'opentelemetry-proto', 'opentelemetry-semantic-conventions', 'opentsne', 'optimum', 'optax', 'optree', 'oracledb', 'orange-canvas-core', 'orange-widget-base', 'orange3', 'ordered-set', 'orderedmultidict', 'orjson', 'osqp', 'overrides', 'owslib', 'packaging', 'pandarallel', 'pamela', 'pandas', 'pandas-datareader', 'pandas-stubs', 'pandasql', 'pandocfilters', 'panel', 'param', 'parameterized', 'paramiko', 'parse', 'parse_type', 'parsedatetime', 'parsel', 'parso', 'partd', 'passlib', 'pastedeploy', 'path', 'pathable', 'pathos', 'pathspec', 'pathy', 'patsy', 'pbkdf2', 'pbr', 'pdm-backend', 'pdm-pep517', 'pefile', 'pegen', 'pendulum', 'pep8-naming', 'persistent', 'petl', 'pexpect', 'phik', 'phonenumbers', 'picklable-itertools', 'pillow', 'pims', 'pip', 'pivottablejs', 'pipenv', 'pkce', 'pkgconfig', 'pkginfo', 'pkgutil-resolve-name', 'plac', 'platformdirs', 'plotly', 'plotly-resampler', 'pluggy', 'ply', 'plyvel', 'pmdarima', 'plotnine', 'poetry-core', 'poetry-dynamic-versioning', 'pomegranate', 'pooch', 'portalocker', 'portend', 'portpicker', 'posix_ipc', 'pox', 'ppft', 'pre-commit', 'preshed', 'pretend', 'prettytable', 'prince', 'prison', 'progress', 'progressbar2', 'prometheus_client', 'prometheus_flask_exporter', 'promise', 'prompt-toolkit', 'prophet', 'proto-plus', 'protobuf', 'psutil', 'psycopg2', 'py-cpuinfo', 'py-lief', 'py-partiql-parser', 'py-xgboost', 'py-xgboost-cpu', 'py4j', 'py7zr', 'pyamg', 'pyaml', 'pyarrow', 'pyasn1', 'pyasn1-modules', 'pybcj', 'pybind11', 'pybind11-global', 'pycairo', 'pycares', 'pyclipper', 'pycodestyle', 'pycosat', 'pycparser', 'pycryptodome', 'pycryptodomex', 'pycryptosat', 'pyct', 'pycurl', 'pydantic', 'pydantic-core', 'pydeck', 'pydispatcher', 'pydot', 'pyee', 'pydruid', 'pyemd', 'pyerfa', 'pyface', 'pyfastner', 'pyflakes', 'pygments', 'pygraphviz', 'pyhamcrest', 'pyicu', 'pyinstaller', 'pyinstaller-hooks-contrib', 'pyjsparser', 'pyjwt', 'pykdtree', 'pykrb5', 'pylint', 'pymc', 'pymc-experimental', 'pymdown-extensions', 'pygithub', 'pymongo', 'pymorphy3', 'pymorphy3-dicts-ru', 'pymorphy3-dicts-uk', 'pympler', 'pymssql', 'pymysql', 'pynacl', 'pynndescent', 'pyod', 'pyodbc', 'pyopengl-accelerate', 'pyopenssl', 'pyopengl', 'pypandoc', 'pyparsing', 'pypdf-with-crypto', 'pypdf', 'pypdf-with-full', 'pypdf-with-image', 'pyphen', 'pypng', 'pyppmd', 'pyproj', 'pyproject-metadata', 'pyproject_hooks', 'pyqt', 'pyqt-builder', 'pyqt5-sip', 'pyqtgraph', 'pyqtwebengine', 'pyrsistent', 'pyrush', 'pysbd', 'pysal', 'pyserial', 'pyshp', 'pysimstring', 'pysmi', 'pysnmp', 'pysocks', 'pyspark', 'pyspnego', 'pytables', 'pytesseract', 'pytest', 'pytensor', 'pytest-arraydiff', 'pytest-astropy', 'pytest-asyncio', 'pytest-base-url', 'pytest-bdd', 'pytest-benchmark', 'pytest-console-scripts', 'pytest-cov', 'pytest-csv', 'pytest-dependency', 'pytest-describe', 'pytest-doctestplus', 'pytest-flake8', 'pytest-flakefinder', 'pytest-forked', 'pytest-html', 'pytest-httpserver', 'pytest-jupyter', 'pytest-jupyter-client', 'pytest-jupyter-server', 'pytest-metadata', 'pytest-mock', 'pytest-mpi', 'pytest-randomly', 'pytest-qt', 'pytest-remotedata', 'pytest-rerunfailures', 'pytest-selenium', 'pytest-shard', 'pytest-sugar', 'pytest-subprocess', 'pytest-timeout', 'pytest-tornasync', 'pytest-trio', 'pytest-variables', 'pytest-xdist', 'python-bidi', 'python-blosc', 'python-build', 'python-crfsuite', 'python-clang', 'python-dotenv', 'python-engineio', 'python-flatbuffers', 'python-graphviz', 'python-gssapi', 'python-hdfs', 'python-installer', 'python-json-logger', 'python-jose', 'python-kaleido', 'python-fastjsonschema', 'python-kubernetes', 'python-ldap', 'python-libarchive-c', 'python-lmdb', 'python-lsp-black', 'python-louvain', 'python-lsp-server', 'python-memcached', 'python-multipart', 'python-rapidjson', 'python-slugify', 'python-pptx', 'python-snappy', 'python-socketio', 'python-utils', 'python-xxhash', 'python3-openid', 'pythonanywhere', 'pythonnet', 'pythran', 'pytimeparse', 'pytoolconfig', 'pytorch-lightning', 'pyts', 'pytz', 'pyuca', 'pyviz_comms', 'pywavelets', 'pyyaml', 'pyzmq', 'pyzstd', 'qasync', 'qdldl-python', 'qpd', 'qrcode', 'qstylizer', 'qtawesome', 'qtconsole', 'qtpy', 'quantecon', 'querystring_parser', 'queuelib', 'quicksectx', 'quilt3', 'rapidfuzz', 'rasterio', 'ray-core', 'ray-dashboard', 'ray-data', 'ray-debug', 'ray-default', 'ray-rllib', 'ray-train', 'ray-tune', 're-assert', 'readchar', 'readme_renderer', 'redis-py', 'regex', 'referencing', 'reportlab', 'repoze.lru', 'requests', 'requests-cache', 'requests-file', 'requests-futures', 'requests-kerberos', 'requests-oauthlib', 'requests-toolbelt', 'requests-wsgi-adapter', 'responses', 'rfc3339-validator', 'rfc3986-validator', 'rich', 'rope', 'routes', 'rpds-py', 'rtree', 'ruamel.yaml.jinja2', 'ruff', 's3fs', 's3transfer', 'safetensors', 'salib', 'sarif_om', 'sas7bdat', 'sasl', 'sacrebleu', 'saspy', 'schema', 'scikit-bio', 'scikit-build', 'scikit-build-core', 'scikit-image', 'scikit-learn', 'scikit-rf', 'scipy', 'scons', 'scp', 'scrapy', 'scs', 'seaborn', 'secretstorage', 'selenium', 'semver', 'semantic_version', 'send2trash', 'sentencepiece', 'sentry-sdk', 'serverfiles', 'service_identity', 'setproctitle', 'setuptools-git', 'setuptools-git-versioning', 'setuptools-rust', 'setuptools-scm', 'shap', 'shapely', 'shellingham', 'simpervisor', 'simple-salesforce', 'simplejson', 'singledispatch', 'sip', 'sentencepiece-python', 'six', 'skl2onnx', 'slack-sdk', 'slicer', 'slicerator', 'smart_open', 'smartypants', 'snakeviz', 'sniffio', 'snowballstemmer', 'snowflake-connector-python', 'snowflake-ml-python', 'snowflake-snowpark-python', 'soupsieve', 'spacy', 'spacy-alignments', 'spacy-legacy', 'spacy-loggers', 'spacy-transformers', 'sparkmagic', 'spatialpandas', 'sphinx', 'sphinx-sitemap', 'sphinx-design', 'sphinx_rtd_theme', 'sphinxcontrib-images', 'sphinxcontrib-jquery', 'sphinxcontrib-websupport', 'sphinxcontrib-serializinghtml', 'sphinxcontrib-youtube', 'spin', 'spyder', 'spyder-kernels', 'sqlalchemy', 'sqlalchemy-jsonfield', 'sqlglot', 'sqlparse', 'squarify', 'srsly', 'st-annotated-text', 'starlette', 'starlette-full', 'starsessions', 'statsmodels', 'stdlib-list', 'stone', 'streamlit', 'streamlit-camera-input-live', 'streamlit-card', 'streamlit-chat', 'streamlit-embedcode', 'streamlit-extras', 'streamlit-faker', 'streamlit-image-coordinates', 'streamlit-keyup', 'streamlit-toggle-switch', 'streamlit-vertical-slider', 'streamz', 'strict-rfc3339', 'stripe', 'stumpy', 'sudachidict-core', 'sudachipy', 'superqt', 'supervisor', 'swagger-ui-bundle', 'sympy', 'tabula-py', 'tabulate', 'tangled-up-in-unicode', 'tbb4py', 'tblib', 'tenacity', 'tensorboard', 'tensorboard-data-server', 'tensorboardx', 'tensorflow', 'tensorflow-base', 'tensorflow-datasets', 'termcolor', 'terminado', 'testfixtures', 'testpath', 'testtools', 'textblob', 'thefuzz', 'thinc', 'threadpoolctl', 'thrift', 'thrift_sasl', 'thriftpy2', 'tifffile', 'tinycss2', 'tldextract', 'tokenizers', 'tomli', 'tomlkit', 'toolz', 'torchmetrics', 'torchvision', 'tornado', 'tqdm', 'trace-updater', 'traceback2', 'traitlets', 'traits', 'traitsui', 'traittypes', 'tranquilizer', 'transaction', 'transformers', 'treeinterpreter', 'triad', 'trio', 'trio-websocket', 'trustme', 'truststore', 'twine', 'twisted', 'typeguard', 'typer', 'types-futures', 'types-jsonschema', 'types-protobuf', 'types-psutil', 'types-pytz', 'types-pyyaml', 'types-setuptools', 'types-requests', 'types-toml', 'types-urllib3', 'typing', 'typing-extensions', 'typing_extensions', 'typing_inspect', 'typogrify', 'tzlocal', 'uc-micro-py', 'ujson', 'ukkonen', 'umap-learn', 'unearth', 'unicodedata2', 'unidecode', 'url-normalize', 'unyt', 'urllib3', 'uvicorn', 'uvicorn-standard', 'uvloop', 'uwsgi', 'vcrpy', 'vega_datasets', 'verboselogs', 'versioneer', 'virtualenv', 'virtualenv-clone', 'visions', 'vispy', 'visvis', 'voila', 'vtk', 'vyper-config', 'w3lib', 'waf', 'waitress', 'wasabi', 'watchdog', 'watchfiles', 'weasel', 'wcwidth', 'webencodings', 'webob', 'websocket-client', 'websockets', 'webtest', 'werkzeug', 'whatthepatch', 'wheel', 'whylabs-client', 'widgetsnbextension', 'woodwork', 'wordcloud', 'workerpool', 'wrapt', 'ws4py', 'wsgiproxy2', 'wsproto', 'wtforms', 'wurlitzer', 'xarray', 'xarray-einstats', 'xattr', 'xcb-proto', 'xgboost', 'xlsxwriter', 'xmlsec', 'xmltodict', 'xyzservices', 'y-py', 'yapf', 'yarl', 'ydata-profiling', 'yellowbrick', 'yt', 'zarr', 'zc.lockfile', 'zeep', 'zfpy', 'zict', 'zipfile-deflate64', 'zipp', 'zope.event', 'zope.interface', 'zope.sqlalchemy', 'zstandard', 'access', 'aiodns', 'aiohttp-cors', 'aiosignal', 'amqp', 'aniso8601', 'applaunchservices', 'archspec', 'asciitree', 'asttokens', 'bidict', 'beniget', 'baycomp', 'binaryornot', 'bs4', 'cerberus', 'certipy', 'celery', 'charset-normalizer', 'click-didyoumean', 'click-repl', 'colorful', 'confuse', 'convertdate', 'datadog', 'dictdiffer', 'echo', 'esda', 'executing', 'expecttest', 'fasteners', 'fastprogress', 'flask-babel', 'freezegun', 'freetype-py', 'geoalchemy2', 'giddy', 'gitdb', 'greyskull', 'hstspreload', 'importlib-resources', 'iniconfig', 'inequality', 'itemadapter', 'jaraco.itertools', 'json-merge-patch', 'json5', 'jsonlines', 'jsonpointer', 'jupyterhub-ldapauthenticator', 'korean_lunar_calendar', 'mando', 'marshmallow-sqlalchemy', 'mgwr', 'missingno', 'openml', 'opt_einsum', 'palettable', 'patch-ng', 'pdoc3', 'pg8000', 'pointpats', 'pure_eval', 'pydata-google-auth', 'pylev', 'pymeeus', 'pyperf', 'pyperformance', 'pytest-astropy-header', 'pytest-filter-subpackage', 'pytest-localserver', 'pytest-replay', 'pytest-subtests', 'python-debian', 'python-jenkins', 'python-nvd3', 'python_http_client', 'pywinrm', 'radon', 'rasterstats', 'requests_ntlm', 'rfc3986', 'protego', 'sacremoses', 'scapy', 'scramp', 'segregation', 'slack_sdk', 'smmap', 'spaghetti', 'spglm', 'spint', 'splot', 'spreg', 'stack_data', 'tensorflow-hub', 'tensorflow-probability', 'textdistance', 'tensorflow-metadata', 'texttable', 'tobler', 'torch-lr-finder', 'treelib', 'tsfresh', 'vertica-python', 'validators', 'vine', 'yq', 'yacs', 'appnope', 'appscript', 'macfsevents', 'pyobjc-core', 'pyobjc-framework-cocoa', 'pyobjc-framework-coreservices', 'pyobjc-framework-fsevents', 'python.app', 'xlwings', 'ansicon', 'comtypes', 'maturin-gnu', 'pyreadline3', 'pywin32', 'pywin32-ctypes', 'pywinpty', 'twisted-iocpsupport', 'win_inet_pton', 'winkerberos', 'makefun', 'opentelemetry-exporter-otlp-proto-grpc', 'opentelemetry-exporter-otlp', 'opentelemetry-exporter-otlp-proto-http', 'opentelemetry-propagator-jaeger', 'opentelemetry-exporter-prometheus', 'opentelemetry-propagator-b3', 'opentelemetry-sdk', 'opentelemetry-opentracing-shim', 'rdkit', 'wandb', 'implicit', 'mlforecast', 'statsforecast', 'torchdata', 'neuralforecast', 'ruptures', 'opencv-python-headless', 'quantlib-python', 'azure-keyvault-secrets', 'python-igraph', 'sentence-transformers', 'optuna', 'faiss', 'evidently', 'pulp', 'great-expectations', 'cvxpy', 'cvxpy-base', 'pypdfium2', 'atpublic', 'langsmith', 'tiktoken', 'llama-index', 'pydicom', 'dbt-semantic-interfaces', 'dbt-core', 'dbt-postgres', 'dynaconf', 'omegaconf', 'azure-mgmt-core', 'azure-storage-file-share', 'azure-storage-file-datalake', 'msal_extensions', 'azure-identity', 'pyxlsb', 'utilsforecast', 'funcy', 'langdetect', 'pyreadstat', 'structlog', 'probableparsing', 'requests-mock', 'sparse', 'janus', 'azure-mgmt-storage', 'kneed', 's3path', 'pydantic-settings', 'time-machine', 'hierarchicalforecast', 'opentelemetry-exporter-otlp-proto-common', 'polars', 'python-docx', 'snowflake.core', 'langchain-text-splitters', 'langchain-community', 'tsdownsample', 'momepy', 'rouge-score', 'matplotlib-venn', 'environs', 'torchaudio', 'jiwer', 'st-theme', 'jsonpath-python', 'filetype', 'docstring_parser', 'grpc-google-iam-v1', 'hydra-core', 'tensorflow-text', 'diff-cover', 'sqlfluff', 'python-gil', 'backports.tarfile', 'databricks-sdk', 'jaraco.context', 'opentelemetry-distro', 'pyfakefs', 'pysoundfile', 'jaraco.test', 'asynch', 'python-zstd', 'asyncssh', 'pypyodbc', 'jiter', 'rich-click', 'msgspec', 'immutabledict', 'msgspec-toml', 'msgspec-yaml', 'polyfactory', 'uuid6', 'iterative-telemetry', 'bottle', 'kt-legacy', 'litestar', 'litestar-with-annotated-types', 'litestar-with-attrs', 'litestar-with-cryptography', 'litestar-with-jinja', 'litestar-with-jwt', 'litestar-with-full', 'litestar-with-prometheus', 'litestar-with-structlog', 'litestar-with-brotli', 'openapi-pydantic', 'propcache', 'nbconvert-core', 'pytest-codspeed', 'sybil', 'pdf2image', 'unittest-xml-reporting', 'opentelemetry-instrumentation-system-metrics', 'splunk-opentelemetry', 'numba-cuda', 'fpdf2', 'ray-air', 'ray-client', 'ray-observability', 'ray-serve', 'ray-serve-grpc', 'pdfminer.six', 'httpx-sse', 'dbt-common', 'pikepdf', 'dbt-adapters', 'rioxarray', 'pytest-socket', 'daff', 'pyfiglet', 'types-python-dateutil', 'gcsfs', 'pdfplumber', 'elastic-transport', 'uuid-utils', 'eval-type-backport', 'sklearn-compat', 'accessible-pygments', 'sphinx-theme-builder', 'pyside6', 'ewah-bool-utils', 'aext-assistant', 'aext-assistant-server', 'aext-core', 'aext-core-server', 'aext-panels', 'aext-panels-server', 'aext-share-notebook', 'aext-project-filebrowser-server', 'aext-share-notebook-server', 'aext-shared', 'anaconda-ident', 'anaconda-mirror', 'anaconda-enterprise-cli', 'anaconda-toolbox', 'conda-anaconda-telemetry', 'conda-anaconda-tos', 'pydata-sphinx-theme', 'playwright-python', 'streamlit-tests', 'pyqt6-sip', 'trubar', 'pytest-xprocess', 'pytest-split', 'pyogrio', 'tf-keras', 'nbconvert-pandoc', 'nbconvert-all', 'simpleeval', 'posthog', 'anaconda-auth', 'awscrt', 'awscli', 'donfig', 'triton', 'vtk-io-ffmpeg', 'vtk-base', 'narwhals', 'fredapi', 'hvsampledata', 'psygnal', 'anywidget', 'durationpy', 'jpype1-test-openjdk-11', 'jpype1-test-openjdk-21', 'nanobind', 'evalidate', 'puremagic', 'roman-numerals-py', 'streamlit-avatar', 'sqlite-anyio', 'python-duckdb', 'ipython_pygments_lexers', 'pycrdt', 'anaconda-assistant-sdk', 'pycrdt-websocket', 'limits', 'flask-limiter', 'sse-starlette', 'mcp', 'instructor', 'snowplow-tracker', 'anthropic', 'databricks-sql-connector', 'magika', 'typing-inspection', 'markdownify', 'markitdown', 'webargs', 'allure-python-commons-test', 'aext-environments-server', 'forbiddenfruit', 'backports-datetime-fromisoformat', 'proxyspy', 'griffe', 'logging_tree', 'langchain-openai', 'mistralai', 'pydantic-extra-types', 'handy-archives', 'domdf-python-tools', 'mistletoe', 'deprecation-alias', 'apeye-core', 'dist-meta', 'dom-toml', 'pytest-regressions', 'anaconda-ai', 'consolekit', 'shippinglabel', 'pyproject-parser', 'coincidence', 'whey', 'panel-graphic-walker', 'intake-sql', 'pysimdjson', 'httpstan', 'ormsgpack', 'langgraph-sdk', 'langgraph-checkpoint', 'psycopg', 'psycopg-c', 'langgraph', 'langgraph-prebuilt', 'conda-tree', 'simple-websocket', 'keras-tuner', 'lumen', 'unidist-all', 'unidist-dask', 'unidist-mpi', 'unidist-ray', 'unidist', 'modin-mpi', 'changelog-chug', 'parserator', 'diskcache', 'starlette-context', 'etils', 'simple-parsing', 'grpc-interceptor', 'sqlmodel', 'authzed', 'aiokafka', 'kopf', 'authzed-py', 'conda-self', 'better-optimize', 'pymc-extras', 'snowpark-connect', 'pycountry', 'snakesay', 'cwcwidth', 'mistral-common', 'gguf', 'pythonanywhere-core', 'mamba_gator', 'libboost-python', 'libboost-python-devel', 'anaconda-opentelemetry', 'hf-xet', 'spopt', 'sspilib', 'geomet', 'rdflib-with-all', 'rdflib-with-lxml', 'rdflib-with-networkx', 'rdflib-with-orjson', 'rdflib', 'pyccolo', 'winloop', 'pytest-docker-tools', 'pyscaffold', 'aext-notebook-load-server', 'ansicolors', 'levenshtein', 'assertpy', 'papermill', 'deprecat', 'versioningit', 'biom-format', 'array-api-compat', 'dbt-protos', 'sqlparams', 'dbt-databricks', 'dbt-spark', 'marisa-trie', 'pytest-celery', 'language-data', 'clarabel', 'geoparse', 'periodictable', 'parmed', 'cupy-core', 'orderly-set', 'treescope', 'jupysql-plugin', 'ploomber-core', 'jupysql', 'opentelemetry-semantic-conventions-ai', 'gherkin-official', 'sseclient-py', 'cuid', 'sphinx-book-theme', 'opentelemetry-instrumentation-anthropic', 'dirty-equals', 'opentelemetry-instrumentation-bedrock', 'opentelemetry-instrumentation-alephalpha', 'opentelemetry-instrumentation-chromadb', 'opentelemetry-instrumentation-cohere', 'opentelemetry-instrumentation-crewai', 'opentelemetry-instrumentation-google-generativeai', 'opentelemetry-instrumentation-groq', 'opentelemetry-instrumentation-haystack', 'opentelemetry-instrumentation-lancedb', 'opentelemetry-instrumentation-langchain', 'opentelemetry-instrumentation-llamaindex', 'opentelemetry-instrumentation-marqo', 'opentelemetry-instrumentation-qdrant', 'opentelemetry-instrumentation-sagemaker', 'opentelemetry-instrumentation-sqlalchemy', 'opentelemetry-instrumentation-threading', 'opentelemetry-instrumentation-openai', 'opentelemetry-instrumentation-pinecone', 'opentelemetry-instrumentation-together', 'opentelemetry-instrumentation-vertexai', 'opentelemetry-instrumentation-watsonx', 'opentelemetry-instrumentation-weaviate', 'opentelemetry-instrumentation-writer', 'opentelemetry-instrumentation-replicate', 'opentelemetry-util-http', 'opentelemetry-instrumentation-ollama', 'opentelemetry-instrumentation-openai-agents', 'opentelemetry-instrumentation-logging', 'opentelemetry-instrumentation-milvus', 'opentelemetry-instrumentation-redis', 'opentelemetry-instrumentation-mistralai', 'opentelemetry-instrumentation-transformers', 'opentelemetry-instrumentation-requests', 'asyncer', 'chevron', 'opentelemetry-instrumentation-urllib3', 'syncer', 'gw-dsl-parser', 'id', 'segment-analytics-python', 'opentelemetry-instrumentation-mcp', 'traceloop-sdk', 'audioop-lts', 'chainlit', 'python-quickjs', 'kanaries-track', 'ipylab', 'pygwalker', 'jupyter-rfb', 'mpire', 'semchunk', 'lumen-ai', 'lumen-ai-local', 'lumen-ai-anthropic', 'lumen-ai-mistralai', 'lumen-ai-openai', 'casa_formats_io', 'pyportfolioopt', 'radio-beam', 'spectral-cube', 'pvextractor', 'google-genai', 'glue-qt', 'lsprotocol', 'python-lsp-ruff', 'loro', 'uv-build', 'python-freethreading', 'asv_runner', 'marimo', 'giturlparse', 'rich-argparse', 'litellm', 'pathvalidate', 'requirements-parser', 'pyclibrary', 'pytokens', 'xmod', 'runs', 'editor', 'snowpark-connect-deps-2', 'snowpark-connect-deps-1', 'polars-runtime-64', 'polars-runtime-compat', 'polars-runtime-32', 'zope.proxy', 'zope.deferredimport', 'dlt', 'manuel', 'cucumber-expressions', 'cucumber-tag-expressions', 'pathlib-abc', 'tika-client', 'packageurl-python', 'cuda-bindings', 'cuda-python', 'cuda-core', 'cuda-pathfinder', 'ultralytics-thop', 'qdrant-client', 'nh3', 'fastuuid', 'json-repair', 'madoka', 'magicattr', 'gepa', 'pondpond', 'nvtx', 'sphinx-last-updated-by-git', 'annotated-doc', 'inline-snapshot', 'click-loglevel', 'safehttpx', 'ffmpy', 'groovy-python', 'gradio-client', 'pydub', 'gradio', 'langchain-anthropic', 'dspy', 'backports.zstd', 'panel-splitjs', 'installer-attribution-bootstrap', 'pyyaml-ft', 'abi3info', 'kaitaistruct', 'pyelftools', 'python-jit', 'abi3audit', 'py-rattler', 'roman-numerals', 'typer-cli', 'typer-slim', 'typer-slim-standard', 'google-re2', 'cel-python', 'conda-rattler-solver', 'autokeras', 'protovalidate-python', 'interegular', 'compressed-tensors', 'prometheus-fastapi-instrumentator', 'pycrdt-store', 'airportsdata', 'lm-format-enforcer', 'uv-dynamic-versioning', 'google-cloud-storage-control', 'altex', 'rich-toolkit', 'mupdf', 'pytest-pretty', 'fastapi-cli', 'minify-html', 'fastapi-all', 'fastapi-core', 'pymupdf', 'conda-pypi', 'einops', 'llama-cpp-python', 'seccomp', 'tensorstore', 'apsw', 'langchain-classic', 'apswutils', 'fastlite', 'python-fasthtml', 'pot', 'g-ir-build-tools', 'orbax-checkpoint', 'flax', 'rich-rst', 'cyclopts', 'diagnostic', 'beartype', 'fakeredis', 'banks', 'dirtyjson', 'llama-index-instrumentation', 'llama-cloud', 'striprtf', 'textual', 'tinytag', 'llama-index-workflows', 'memray', 'llama-index-core', 'claude-agent-sdk', 'llama-index-embeddings-openai', 'llama-index-llms-openai', 'depyf', 'pybase64', 'llama-index-indices-managed-llama-cloud', 'outlines-core', 'llama-cloud-services', 'llama-index-readers-file', 'ray-adag', 'streamlit-notify', 'llama-parse', 'vl-convert-python', 'llama-index-readers-llama-parse', 'auditwheel', 'llama-index-cli', 'av', 'ctranslate2', 'blake3', 'highspy', 'partial-json-parser', 'python-librt', 'stanio', 'py-key-value-aio', 'py-key-value-shared', 'outlines', 'peft', 'taskgroup', 'py-rattler-build', 'haystack-ai', 'lazy-imports', 'haystack-experimental', 'anaconda-connector-core', 'anaconda-connector-utilities', 'anaconda-connector-conda', 'pyperclip', 'huey', 'skops', 'filecheck', 'pylerc', 'cutile-python', 'flash-attn', 'flash-attn-fused-dense', 'flash-attn-layer-norm', 'lupa', 'mcp-compose', 'geodatasets', 'gwlearn', 'uncalled-for', 'jsonref', 'nvshmem4py', 'fastmcp', 'environments-mcp-server', 'jwcrypto', 'litestar-htmx', 'anaconda-mcp', 'onnx-ir', 'mpl-probscale', 'delvewheel', 'scikit-base', 'scikit-base-all-extras', 'fast-depends', 'delocate', 'pyautogen', 'rst2pdf', 'ultralytics', 'llguidance', 'lance-namespace', 'lance-namespace-urllib3-client', 'vcs-versioning', 'conda-anaconda-trust-root', 'pylance', 'cronsim', 'lancedb', 'faster-whisper', 'pyre-extensions', 'onnxscript', 'pydocket', 'splink', 'xformers', 'captcha', 'escapism', 'jupyterhub-idle-culler', 'nbgitpuller', 'kubernetes_asyncio', 'num2words', 'fire', 'jupyterhub-kubespawner', 'jupyterhub-traefik-proxy', 'pygeostat', 'py-libnuma', 'xgrammar', 'azure-ai-agents', 'azure-appconfiguration', 'azure-ai-projects', 'azure-batch', 'applicationinsights', 'vllm', 'azure-data-tables', 'azure-datalake-store', 'azure-keyvault-administration', 'azure-keyvault-certificates', 'azure-keyvault-keys', 'azure-keyvault-securitydomain', 'azure-mgmt-advisor', 'azure-mgmt-apimanagement', 'knack', 'microsoft-security-utilities-secret-masker', 'py-deviceid', 'azure-cli-telemetry', 'azure-cli-core', 'azure-mgmt-appconfiguration', 'azure-mgmt-appcontainers', 'azure-mgmt-applicationinsights', 'azure-mgmt-authorization', 'azure-mgmt-batch', 'azure-mgmt-batchai', 'azure-mgmt-botservice', 'azure-mgmt-cdn', 'azure-mgmt-cognitiveservices', 'azure-mgmt-compute', 'azure-mgmt-containerinstance', 'azure-mgmt-containerregistry', 'azure-mgmt-containerregistrytasks', 'azure-mgmt-containerservice', 'azure-mgmt-cosmosdb', 'azure-mgmt-datalake-store', 'azure-mgmt-datamigration', 'azure-mgmt-eventgrid', 'azure-mgmt-eventhub', 'azure-mgmt-extendedlocation', 'azure-mgmt-hdinsight', 'azure-mgmt-imagebuilder', 'azure-mgmt-iotcentral', 'azure-mgmt-iothub', 'azure-mgmt-iothubprovisioningservices', 'azure-mgmt-keyvault', 'azure-mgmt-loganalytics', 'metaflow', 'azure-mgmt-sql', 'azure-mgmt-sqlvirtualmachine', 'azure-mgmt-synapse', 'azure-mgmt-trafficmanager', 'azure-mgmt-web', 'azure-mgmt-managementgroups', 'azure-mgmt-maps', 'azure-mgmt-marketplaceordering', 'azure-mgmt-media', 'azure-mgmt-monitor', 'azure-mgmt-msi', 'azure-mgmt-mysqlflexibleservers', 'azure-mgmt-netapp', 'azure-mgmt-policyinsights', 'azure-mgmt-postgresqlflexibleservers', 'azure-mgmt-privatedns', 'azure-mgmt-rdbms', 'azure-mgmt-recoveryservices', 'azure-mgmt-recoveryservicesbackup', 'azure-mgmt-redhatopenshift', 'azure-monitor-query', 'azure-storage-common', 'azure-synapse-accesscontrol', 'azure-synapse-artifacts', 'azure-synapse-managedprivateendpoints', 'azure-synapse-spark', 'javaproperties', 'pycomposefile', 'azure-mgmt-resource', 'azure-mgmt-resource-deployments', 'azure-mgmt-resource-deploymentscripts', 'azure-mgmt-resource-deploymentstacks', 'azure-mgmt-resource-templatespecs', 'azure-mgmt-search', 'azure-mgmt-security', 'azure-mgmt-servicebus', 'azure-mgmt-servicefabric', 'azure-mgmt-servicefabricmanagedclusters', 'azure-mgmt-servicelinker', 'azure-mgmt-signalr', 'azure-storage-queue', 'helion', 'hjson-py', 'azure-mgmt-billing', 'azure-mgmt-redis', 'azure-cli', 'genai-prices', 'logfire-api', 'opentelemetry-instrumentation-asgi', 'pypika', 'chroma-hnswlib', 'fasta2a', 'groq', 'opentelemetry-instrumentation-fastapi', 'py-rust-stemmers', 'griffecli', 'griffelib', 'metaflow-checkpoint', 'metaflow-torchrun', 'ob-metaflow', 'ob-metaflow-extensions', 'ob-metaflow-stubs', 'ob-project-utils', 'chromadb', 'deepeval', 'deepspeed', 'fastembed', 'conda-lockfiles', 'conda-spawn', 'logistro', 'choreographer', 'jupyterlab-eventlistener', 'jupyter-ai-tools', 'jupyter-collaboration-ui', 'jupyter-docprovider', 'jupyterlab-notebook-awareness', 'jupyter-collaboration', 'jupyterlab-commands-toolkit', 'jupyter_server_documents', 'jupyterlab-chat', 'sphinxcontrib-typer', 'jupyter-ai-router', 'jupyter-ai-persona-manager', 'accelerate', 'agent-client-protocol', 'parsy', 'cccl-python', 'langchain-protocol', 'jupyter-ai-chat-commands', 'treelite', 'nccl4py', 'hf-gradio', 'model-hosting-container-standards', 'jupyter-ai-acp-client', 'opentelemetry-instrumentation-agno', 'opentelemetry-instrumentation-voyageai', 'pyglfw', 'arviz-base', 'caio', 'aiofile', 'arviz-stats', 'arviz-stats-core', 'pytensor-distributions', 'preliz', 'mac_alias', 'ds_store', 'shtab', 'trl', 'tyro', 'arviz-plots', 'jupyter-server-mcp', 'dmgbuild', 'briefcase', 'jupyter-ai', 'keras-hub', 'aext-data-catalog-server', 'aext-events-server', 'aext-lms-notebooks-server', 'aext-notebook-info-server', 'aext-resource-manager-server', 'simplejpeg', 'torchao', 'fastmcp-slim', 'z3-solver', 'z3prover', 'pybreaker', 'ast_canopy', 'numbast', 'pyld', 'python-discovery', 'addict', 'pytrec-eval-terrier', 'fastar', 'adlfs', 'axolotl-contribs-lgpl', 'axolotl-contribs-mit', 'blobfile', 'cbor2', 'fla-core', 'hf-transfer', 'modelscope', 'ollama-python', 'schedulefree', 'openai-harmony', 'art', 'openenv-core', 'standard-chunk', 'standard-sunau', 'cut_cross_entropy', 'fastsafetensors', 'liger-kernel', 'mteb', 'soxr-python', 'mlx', 'nvmath-python-core', 'runtimed', 'pyspark-client', 'standard-aifc', 'audioread', 'flash-linear-attention', 'trackio', 'unsloth_zoo', 'mlx-lm', 'types-certifi', 'word2number', 'jaxtyping', 'wadler-lindig', 'orbax-export', 'sqlitedict', 'apache-tvm-ffi', 'kernels-data', 'synchronicity', 'grpclib', 'mbstrdecoder', 'tcolorpy', 'circuitbreaker', 'anaconda-channel-guide', 'httpcore2', 'typepy', 'httpx2', 'pgvector-python', 'logfire', 'openrouteservice', 'scikit-network', 'looseversion', 'simple-azure-blob-downloader', 'dataproperty', 'modal-client', 'tabledata', 'lumen-ai-bedrock', 'lumen-ai-llama', 'lumen-ai-transformers', 'oci', 'python-cudnn-frontend', 'arabic_reshaper', 'coreforecast', 'janitor-rs', 'pandas-flavor', 'qpsolvers', 'datasetsforecast', 'pyjanitor', 'pytablewriter', 'llamafactory', 'ocifs', 'anaconda-env-log', 'google-cloud-secret-manager', 'nexus-rpc', 'panel-core', 'temporalio', 'jupyterlab-git-core', 'lm_eval', 'unsloth', 'torchtune', 'pytest-repeat', 'questionary', 'kagglesdk', 'nest-asyncio2', 'lazy', 'nzpy', 'ast-serialize', 'camelot-py', 'mcp-types', 'nzpyida', 'playa-pdf', 'sqlanydb', 'torchcodec', 'jupyter-builder', 'win-precise-time', 'cachebox', 'gviz-api', 'xprof', 'cvss', 'capstone', 'ml-datasets', 'pypdf-with-fonts', 'pypdf-with-rtl-text', 'pytest-skip-slow', 'human-eval', 'gdstk', 'axolotl', 'torch-c-dlpack-ext', 'pygobject', 'numba-cuda-mlir', 'opentelemetry-instrumentation-litellm', 'sphinxcontrib-mermaid', 'tilelang', 'cuquantum-python', 'presidio-analyzer', 'py-cpuinfo2', 'dbt-core-experimental-parser', 'gribberish', 'metricflow', 'protobuf-py-ext', 'ultralytics-platform', 'protobuf-py', 'python-eccodes', 'ag2', 'cython-cmake', 'opendal', 'icechunk', 'pipcl', 'enkryptai-sdk', 'crcmod', 'rapidocr']; update: ['aiopg', 'bpython', 'branca', 'bsdiff4', 'cfn-lint', 'click-default-group', 'cryptography', 'cython', 'datrie', 'dmglib', 'execnet', 'fastavro', 'fugue', 'gymnasium', 'jaxlib', 'leather', 'libmambapy', 'mlflow-skinny', 'pyaudio', 'pylint-venv', 'python-dateutil', 'pytorch', 'ruamel.yaml', 'ruamel.yaml.clib', 'setuptools', 'spacy-pkuseg', 'sqlalchemy-utils', 'trove-classifiers', 'aioitertools', 'conda-repo-cli', 'curio', 'langcodes', 'minio', 'outcome', 'win32_setctime', 'langchain', 'ortools-python', 'langchain-core', 'python-stdnum', 'pytest-datadir', 'pyproject-examples', 'llama.cpp-tools', 'panel-material-ui', 'nvcomp', 'bitsandbytes', 'outerbounds', 'pydantic-graph', 'pydantic-ai', 'pydantic-ai-slim', 'warp-lang', 'librosa', 'pydantic-evals'].

    Evidence
    • action_summary:
    • ignore (1979): __anaconda_core_depends, _anaconda_core, _anaconda_depends, _ipyw_jlab_nb_ext_conf, absl-py, _robotframework_tests, adtk, affine, agate-dbf, agate-excel, agate-sql, aiobotocore, aiofiles, aiohttp-jinja2, aiopg, airflow, airflow-with-apache-atlas, airflow-with-apache-webhdfs, airflow-with-async, airflow-with-cgroups, airflow-with-cncf-kubernetes, airflow-with-dask, airflow-with-deprecated-api, airflow-with-github_enterprise, airflow-with-google_auth, … and 1954 more
    • rebuild (2240): absl-py, adagio, aenum, affine, agate, agate-dbf, agate-excel, agate-sql, aiobotocore, aiofiles, aiohappyeyeballs, aiohttp, aiohttp-jinja2, aiorwlock, aiosqlite, alabaster, alembic, allure-behave, allure-nose2, allure-pytest, allure-pytest-bdd, allure-python-commons, allure-robotframework, altgraph, altair, … and 2215 more
    • update (52): aiopg, bpython, branca, bsdiff4, cfn-lint, click-default-group, cryptography, cython, datrie, dmglib, execnet, fastavro, fugue, gymnasium, jaxlib, leather, libmambapy, mlflow-skinny, pyaudio, pylint-venv, python-dateutil, pytorch, ruamel.yaml, ruamel.yaml.clib, setuptools, … and 27 more
    • total_downstream_packages: 4271

Passed

no-new-dependencies

Could not determine

  • abi-symbol-comparison — Failed on 6/8 artifact(s). No previous artifact available for ABI comparison — no symbols compared (on 6 artifact(s): linux-64 (h723d65b_1_cp315t), linux-64 (hf0cc19c_101_cp315), linux-aarch64 (h9f9a8b9_101_cp315), … and 3 more).
  • openmp-conflict — Cannot determine artifact platform — cannot check OpenMP runtime conflicts.
  • openmp-conflict — Cannot determine artifact platform — cannot check OpenMP runtime conflicts.
  • openmp-conflict — Failed on 2/2 artifact(s). Cannot determine artifact platform — cannot check OpenMP runtime conflicts (on 2 artifact(s): noarch (h06886e5_101), noarch (hdc58331_101)).
  • shared-lib-linkage — Cannot determine artifact platform — cannot check shared-library linkage.
  • shared-lib-linkage — Cannot determine artifact platform — cannot check shared-library linkage.
  • shared-lib-linkage — Failed on 2/2 artifact(s). Cannot determine artifact platform — cannot check shared-library linkage (on 2 artifact(s): noarch (h06886e5_101), noarch (hdc58331_101)).

Analysed channel: https://staging.continuum.io/pbp/fs/python-feedstock/pr256/fa2cc0c


Automated signals — not an approval. Verify flagged items before merging.
Generated by pkg-review-automation 2026.9.29104234 · trigger: cli · 2026-10-07 21:27 UTC · head fa2cc0c08183
Please submit feedback using this form.
Outerbounds run: https://ui.merced.obp.outerbounds.com/p/distro/PkgReviewFlow/argo-pkgreviewflow-543810f8bc

@ifitchet

ifitchet commented Oct 6, 2026

Copy link
Copy Markdown
  • 🔴 first-time-package — Package 'cpython' has never been published on the Anaconda main channel

I think we were leaning into NOT introducing a new cpython metapackage.

Here it isn't doing anything useful (unlike libpython) and although we are aligning with CF we are allowed to be different! 😄

So I would remove the cpython output and change the python-{gil,freethreading,...} packages to be dependent on python directly.

( I guess there's a possibility that someone will now want a libpython-{gil,freethreading,...} but we can wait for those requirements to come in. )

Comment thread recipe/build_base.bat Outdated
Comment thread recipe/build_base.sh Outdated
Comment thread recipe/build_base.sh Outdated
Comment thread recipe/build_base.sh Outdated
Comment thread recipe/build_base.sh Outdated
Comment thread recipe/meta.yaml
Comment thread recipe/meta.yaml Outdated
Comment thread recipe/meta.yaml Outdated
Comment thread recipe/meta.yaml Outdated
Comment thread recipe/meta.yaml Outdated
Ian: no cpython metapackage; python-{gil,freethreading,jit} depend on
python. Hold libpython-{gil,freethreading}. Charles: restore linux-only
xorg, drop unused xorg-libx11 test dep, restore doc/dev URLs, keep
.vscode/, comment-only debug CBC, delete dead CF comments and the
commented MSBuild cross block.
@skupr-anaconda

Copy link
Copy Markdown
Author

Addressing automated package review (cb9904b) and Ian / Charles (03cfb43d).

Finding Verdict
first-time-package / no-new-dependencies cpython Removed. No cpython output. python-{gil,freethreading,jit} run: python, not cpython. No libpython-{gil,freethreading} (hold).
not-cbc-pinned / not-miniconda-member Expected. Dest remains ad-testing/label/py315, not pkgs/main.
non-default-upload-channels Intended.
soname-changes python (3.14.8 → 3.15.0rc3) Expected ABI-tag rename (cpython-315 / python315.dll). Not a recipe defect.
soname-changes libpython No pkgs/main baseline (new output, #259).
static-libraries win python*.lib Expected Win import libs in python. Unix .a is libpython-static.
vendored-deps d3-flame-graph Upstream stdlib (Lib/profiling/sampling/_vendor). Keep.
abi-symbol-comparison Expected 3.15 C-API adds.
build-script-modified Expected CF-align remainder. Charles: dropped dead CF comments / commented MSBuild cross block.
new-platform-selectors unix and build_type == "release" Expected — empty upstream libpython3.so (cpython#104612); test only on unix release.
no-setup-py-script / pure-python / version-only-bump Noise for this native multi-output recipe.

Charles recipe cleanups in the same commit: linux-only xorg, drop extra xorg-libx11 test dep, restore doc_url/dev_url, keep .vscode/, comment-only debug CBC. Left linux missing_dso libutil until a DSO proves it unused. python_site_packages_path kept (CF-align); next graph should confirm the path.

Linter-only red on graph d3a662f2 is parsing_jinja_failure ({% if freethreading is not defined %}) — known skip, non-blocking.

Try the python output without \$RPATH libc/libcrypt/libdl/libm/libnsl/
libpthread/librt/libutil. Win MSVCR entries stay. Restore any soname
conda-build still flags as missing DSO.
Remove the commented \$RPATH libc/libcrypt/libdl/libm/libnsl/libpthread/
librt/libutil entries. Win MSVCR whitelist stays; selector is win-only.
@skupr-anaconda
skupr-anaconda requested a review from cbouss October 7, 2026 19:43

@cbouss cbouss left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you squash all commits into one and remove most comments of this PR?

I ran some comparison tests between this build and our previous build and found one issue regarding jit that need to be addressed. See inline comments.

Also:

  • install_static.sh should be aligned. There are places where VERABI_NO_DBG should be used over VERABI
  • fix_staged_recipe should be updated following conda-forge#944

Comment thread recipe/build_base.sh
_common_configure_args+=(--with-system-libmpdec=yes)

if [[ "${DEBUG_PY}" == "yes" || "${target_platform}" != *"64" || ${PY_GIL_DISABLED} == yes ]]; then
if [[ "${PY_INTERP_DEBUG}" == "yes" || "${target_platform}" != *"-64" || ${PY_FREETHREADING} == yes ]]; then

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if [[ "${PY_INTERP_DEBUG}" == "yes" || "${target_platform}" != *"-64" || ${PY_FREETHREADING} == yes ]]; then
if [[ "${PY_INTERP_DEBUG}" == "yes" || "${target_platform}" != *"64" || ${PY_FREETHREADING} == yes ]]; then

With "${target_platform}" != *"-64", jit is disabled on osx-arm64 or linux-aarch64. But jit is supported on this platforms.

run_test_jit.py should be updated to fail when python is detected to not be built with jit.

Comment thread recipe/run_test_jit.py
Comment on lines +17 to +21
# python-jit is noarch and PBP tests it against every python variant.
# configure disables JIT for debug, freethreading, and some arches;
# the metapackage is a no-op there.
print("JIT not compiled into this interpreter; skip")
sys.exit(0)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# python-jit is noarch and PBP tests it against every python variant.
# configure disables JIT for debug, freethreading, and some arches;
# the metapackage is a no-op there.
print("JIT not compiled into this interpreter; skip")
sys.exit(0)
print("ERROR: JIT not compiled into this interpreter", file=sys.stderr)
sys.exit(1)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants