Multi-module package builds (5 package examples)#
This example shows how to build a small compiled package consisting of multiple Cython extension modules in one build directory.
Package examples live under _templates/package_examples/ and include:
vector_ops
stats_basic
text_hash
signal_conv
graph_algo
What this example demonstrates#
Listing bundled package examples.
Checking build prerequisites safely (so docs builds don’t fail).
Building one example package (profile=”fast-debug”).
Showing deterministic metadata: cache key, artifacts, module names.
Importing a module by dotted name and calling a known function (when declared).
Pinning the package build by alias and re-importing by alias.
Re-importing from cache key (restart-safe).
Optional: printing cache stats.
# Authors: The scikit-plots developers
# SPDX-License-Identifier: BSD-3-Clause
def _safe_call_known_function(module: Any, candidates: Iterable[str]) -> None:
"""
Call a known function if present, otherwise print a small preview.
This is intentionally strict: we only call names we expect, and only if
present on the module. Otherwise we print public names for inspection.
"""
for name in candidates:
f = getattr(module, name, None)
if callable(f):
try:
# Use a simple, deterministic call convention:
# - prefer 1-arg integer calls where sensible
out = f(10)
print(f" {module.__name__}.{name}(10) -> {out!r}")
except TypeError:
# Some functions may take no args or different args; avoid guessing.
print(f" {module.__name__}.{name} is callable but signature differs; not calling.")
return
# Fallback: show a preview of public names (no execution).
public = sorted(n for n in getattr(module, "__dict__", {}).keys() if n and not n.startswith("_"))
print(f" No known callable exported; public names: {public[:15]}{' ...' if len(public) > 15 else ''}")
List all available Package tamplates#
https://scikit-plots.github.io/dev/user_guide/cython/_templates/templates_index.html
examples = getattr(cython, "list_package_examples", lambda: [])()
print("Package examples:", examples)
Package examples: ['graph_algo', 'signal_conv', 'stats_basic', 'text_hash', 'vector_ops']
Generate python Packages from cython#
# Pick a template deterministically and safely.
if not examples:
print("No package examples were bundled in this build.")
else:
# Build prereqs check: keep docs builds safe.
report = cython.check_build_prereqs(numpy=False)
if not report.get('cython', {}).get('ok'):
print("Skipping package build because prerequisites are missing.\n")
problems = report.get("problems", [])
if problems:
print("Problems:", problems)
else:
# Choose a deterministic example name (first in sorted order)
name = sorted(examples)[0]
print("\nBuilding package example:", name)
# Demonstrate profiles:
# fast-debug is great for iteration; release for performance.
r_debug = cython.build_package_example_result(name, profile="fast-debug", verbose=0)
print("\nBuild (fast-debug) result:")
print(r_debug)
# Optional: build release too to show key changes deterministically.
r_release = cython.build_package_example_result(name, profile="release", verbose=0)
print("\nBuild (release) result:")
print(r_release)
print("\nKeys differ by profile:")
print(" fast-debug:", r_debug.key)
print(" release :", r_release.key)
# Show deterministic metadata
print("\nPackage metadata:")
print(" package_name:", r_debug.package_name)
print(" build_dir :", r_debug.build_dir)
print(" used_cache :", r_debug.used_cache)
print(" created_utc :", r_debug.created_utc)
# Show per-module summary and artifact paths
print("\nModules and artifacts:")
for br in r_debug.results:
print(" ", br.module.__name__)
print(" artifact:", br.artifact_path)
# Import one built module by dotted name and call a known function (strict)
first_module = r_debug.modules[0]
mod_name = first_module.__name__
mod = importlib.import_module(mod_name)
print("\nImported module:", mod.__name__)
# Try calling a known function name (declared by convention)
# Keep candidates short and standard.
_safe_call_known_function(mod, candidates=("run", "demo", "test", "inc", "dec", "dot", "hash_text"))
# Pin/alias (per-cache-dir) and import again
alias = f"pkg_{name}_debug"
print("\nPinning build:")
cython.pin(r_debug.key, alias=alias, overwrite=True)
r_pinned = cython.import_pinned_result(alias)
print("Pinned import result:")
print(r_pinned)
print("Pinned package name:", r_pinned.package_name)
# Restart-safe import by key (no recompilation)
r_cached = cython.import_cached_package_result(r_debug.key)
print("\nImported from cache key:")
print(r_cached)
print(" used_cache:", r_cached.used_cache)
# Optional: cache stats (if available)
if hasattr(cython, "cache_stats"):
stats = cython.cache_stats()
print("\nCache stats snapshot:")
print(stats)
Building package example: graph_algo
Compiling /home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/bfs.pyx because it changed.
Compiling /home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/degree.pyx because it changed.
[1/2] Cythonizing /home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/bfs.pyx
[2/2] Cythonizing /home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/degree.pyx
Build (fast-debug) result:
PackageBuildResult(package_name='scikitplot_pkg_graph_algo', key='eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', build_dir=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea'), results=(BuildResult(module=<module 'scikitplot_pkg_graph_algo.bfs' from '/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so'>, key='eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', module_name='scikitplot_pkg_graph_algo.bfs', build_dir=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea'), artifact_path=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so'), used_cache=False, created_utc='2026-02-01T06:33:55Z', fingerprint={'python': '3.11.14', 'python_impl': 'CPython', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'machine': 'x86_64', 'processor': 'x86_64', 'cython': '3.2.4', 'numpy': '2.4.2', 'abi': ''}, source_sha256='d3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2', meta={'kind': 'package', 'key': 'eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', 'package_name': 'scikitplot_pkg_graph_algo', 'modules': [{'module_name': 'scikitplot_pkg_graph_algo.bfs', 'artifact': 'scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so', 'source_sha256': 'd3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2', 'annotate_html': None}, {'module_name': 'scikitplot_pkg_graph_algo.degree', 'artifact': 'scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so', 'source_sha256': '5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371', 'annotate_html': None}], 'created_utc': '2026-02-01T06:33:55Z', 'fingerprint': {'python': '3.11.14', 'python_impl': 'CPython', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'machine': 'x86_64', 'processor': 'x86_64', 'cython': '3.2.4', 'numpy': '2.4.2', 'abi': ''}, 'directives': {'language_level': 3, 'embedsignature': True, 'boundscheck': True, 'wraparound': True, 'initializedcheck': True, 'cdivision': False}, 'compiler_directives': {'language_level': 3, 'embedsignature': True, 'boundscheck': True, 'wraparound': True, 'initializedcheck': True, 'cdivision': False}, 'profile': 'fast-debug', 'annotate': False, 'view_annotate': False, 'extra_compile_args': ['-O0', '-g'], 'extra_link_args': [], 'annotate_html': None, 'annotation_html': {}, 'include_dirs': ['/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/scikitplot/cython/_templates/package_examples/graph_algo', '/home/circleci/repo/galleries/examples/cython', '/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/numpy/_core/include'], 'support_files': [], 'support_paths': [], 'extra_sources': [], 'language': None}), BuildResult(module=<module 'scikitplot_pkg_graph_algo.degree' from '/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so'>, key='eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', module_name='scikitplot_pkg_graph_algo.degree', build_dir=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea'), artifact_path=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so'), used_cache=False, created_utc='2026-02-01T06:33:55Z', fingerprint={'python': '3.11.14', 'python_impl': 'CPython', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'machine': 'x86_64', 'processor': 'x86_64', 'cython': '3.2.4', 'numpy': '2.4.2', 'abi': ''}, source_sha256='5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371', meta={'kind': 'package', 'key': 'eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', 'package_name': 'scikitplot_pkg_graph_algo', 'modules': [{'module_name': 'scikitplot_pkg_graph_algo.bfs', 'artifact': 'scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so', 'source_sha256': 'd3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2', 'annotate_html': None}, {'module_name': 'scikitplot_pkg_graph_algo.degree', 'artifact': 'scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so', 'source_sha256': '5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371', 'annotate_html': None}], 'created_utc': '2026-02-01T06:33:55Z', 'fingerprint': {'python': '3.11.14', 'python_impl': 'CPython', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'machine': 'x86_64', 'processor': 'x86_64', 'cython': '3.2.4', 'numpy': '2.4.2', 'abi': ''}, 'directives': {'language_level': 3, 'embedsignature': True, 'boundscheck': True, 'wraparound': True, 'initializedcheck': True, 'cdivision': False}, 'compiler_directives': {'language_level': 3, 'embedsignature': True, 'boundscheck': True, 'wraparound': True, 'initializedcheck': True, 'cdivision': False}, 'profile': 'fast-debug', 'annotate': False, 'view_annotate': False, 'extra_compile_args': ['-O0', '-g'], 'extra_link_args': [], 'annotate_html': None, 'annotation_html': {}, 'include_dirs': ['/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/scikitplot/cython/_templates/package_examples/graph_algo', '/home/circleci/repo/galleries/examples/cython', '/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/numpy/_core/include'], 'support_files': [], 'support_paths': [], 'extra_sources': [], 'language': None})), used_cache=False, created_utc='2026-02-01T06:33:55Z', fingerprint={'python': '3.11.14', 'python_impl': 'CPython', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'machine': 'x86_64', 'processor': 'x86_64', 'cython': '3.2.4', 'numpy': '2.4.2', 'abi': ''}, meta={'kind': 'package', 'key': 'eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', 'package_name': 'scikitplot_pkg_graph_algo', 'modules': [{'module_name': 'scikitplot_pkg_graph_algo.bfs', 'artifact': 'scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so', 'source_sha256': 'd3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2', 'annotate_html': None}, {'module_name': 'scikitplot_pkg_graph_algo.degree', 'artifact': 'scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so', 'source_sha256': '5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371', 'annotate_html': None}], 'created_utc': '2026-02-01T06:33:55Z', 'fingerprint': {'python': '3.11.14', 'python_impl': 'CPython', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'machine': 'x86_64', 'processor': 'x86_64', 'cython': '3.2.4', 'numpy': '2.4.2', 'abi': ''}, 'directives': {'language_level': 3, 'embedsignature': True, 'boundscheck': True, 'wraparound': True, 'initializedcheck': True, 'cdivision': False}, 'compiler_directives': {'language_level': 3, 'embedsignature': True, 'boundscheck': True, 'wraparound': True, 'initializedcheck': True, 'cdivision': False}, 'profile': 'fast-debug', 'annotate': False, 'view_annotate': False, 'extra_compile_args': ['-O0', '-g'], 'extra_link_args': [], 'annotate_html': None, 'annotation_html': {}, 'include_dirs': ['/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/scikitplot/cython/_templates/package_examples/graph_algo', '/home/circleci/repo/galleries/examples/cython', '/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/numpy/_core/include'], 'support_files': [], 'support_paths': [], 'extra_sources': [], 'language': None})
Compiling /home/circleci/.cache/scikitplot/cython/f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d/scikitplot_pkg_graph_algo/bfs.pyx because it changed.
Compiling /home/circleci/.cache/scikitplot/cython/f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d/scikitplot_pkg_graph_algo/degree.pyx because it changed.
[1/2] Cythonizing /home/circleci/.cache/scikitplot/cython/f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d/scikitplot_pkg_graph_algo/bfs.pyx
[2/2] Cythonizing /home/circleci/.cache/scikitplot/cython/f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d/scikitplot_pkg_graph_algo/degree.pyx
Build (release) result:
PackageBuildResult(package_name='scikitplot_pkg_graph_algo', key='f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d', build_dir=PosixPath('/home/circleci/.cache/scikitplot/cython/f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d'), results=(BuildResult(module=<module 'scikitplot_pkg_graph_algo.bfs' from '/home/circleci/.cache/scikitplot/cython/f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d/scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so'>, key='f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d', module_name='scikitplot_pkg_graph_algo.bfs', build_dir=PosixPath('/home/circleci/.cache/scikitplot/cython/f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d'), artifact_path=PosixPath('/home/circleci/.cache/scikitplot/cython/f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d/scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so'), used_cache=False, created_utc='2026-02-01T06:33:58Z', fingerprint={'python': '3.11.14', 'python_impl': 'CPython', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'machine': 'x86_64', 'processor': 'x86_64', 'cython': '3.2.4', 'numpy': '2.4.2', 'abi': ''}, source_sha256='d3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2', meta={'kind': 'package', 'key': 'f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d', 'package_name': 'scikitplot_pkg_graph_algo', 'modules': [{'module_name': 'scikitplot_pkg_graph_algo.bfs', 'artifact': 'scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so', 'source_sha256': 'd3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2', 'annotate_html': None}, {'module_name': 'scikitplot_pkg_graph_algo.degree', 'artifact': 'scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so', 'source_sha256': '5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371', 'annotate_html': None}], 'created_utc': '2026-02-01T06:33:58Z', 'fingerprint': {'python': '3.11.14', 'python_impl': 'CPython', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'machine': 'x86_64', 'processor': 'x86_64', 'cython': '3.2.4', 'numpy': '2.4.2', 'abi': ''}, 'directives': {'language_level': 3, 'embedsignature': True, 'boundscheck': False, 'wraparound': False, 'initializedcheck': False, 'cdivision': True}, 'compiler_directives': {'language_level': 3, 'embedsignature': True, 'boundscheck': False, 'wraparound': False, 'initializedcheck': False, 'cdivision': True}, 'profile': 'release', 'annotate': False, 'view_annotate': False, 'extra_compile_args': ['-O3', '-DNDEBUG'], 'extra_link_args': [], 'annotate_html': None, 'annotation_html': {}, 'include_dirs': ['/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/scikitplot/cython/_templates/package_examples/graph_algo', '/home/circleci/repo/galleries/examples/cython', '/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/numpy/_core/include'], 'support_files': [], 'support_paths': [], 'extra_sources': [], 'language': None}), BuildResult(module=<module 'scikitplot_pkg_graph_algo.degree' from '/home/circleci/.cache/scikitplot/cython/f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d/scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so'>, key='f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d', module_name='scikitplot_pkg_graph_algo.degree', build_dir=PosixPath('/home/circleci/.cache/scikitplot/cython/f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d'), artifact_path=PosixPath('/home/circleci/.cache/scikitplot/cython/f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d/scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so'), used_cache=False, created_utc='2026-02-01T06:33:58Z', fingerprint={'python': '3.11.14', 'python_impl': 'CPython', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'machine': 'x86_64', 'processor': 'x86_64', 'cython': '3.2.4', 'numpy': '2.4.2', 'abi': ''}, source_sha256='5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371', meta={'kind': 'package', 'key': 'f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d', 'package_name': 'scikitplot_pkg_graph_algo', 'modules': [{'module_name': 'scikitplot_pkg_graph_algo.bfs', 'artifact': 'scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so', 'source_sha256': 'd3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2', 'annotate_html': None}, {'module_name': 'scikitplot_pkg_graph_algo.degree', 'artifact': 'scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so', 'source_sha256': '5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371', 'annotate_html': None}], 'created_utc': '2026-02-01T06:33:58Z', 'fingerprint': {'python': '3.11.14', 'python_impl': 'CPython', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'machine': 'x86_64', 'processor': 'x86_64', 'cython': '3.2.4', 'numpy': '2.4.2', 'abi': ''}, 'directives': {'language_level': 3, 'embedsignature': True, 'boundscheck': False, 'wraparound': False, 'initializedcheck': False, 'cdivision': True}, 'compiler_directives': {'language_level': 3, 'embedsignature': True, 'boundscheck': False, 'wraparound': False, 'initializedcheck': False, 'cdivision': True}, 'profile': 'release', 'annotate': False, 'view_annotate': False, 'extra_compile_args': ['-O3', '-DNDEBUG'], 'extra_link_args': [], 'annotate_html': None, 'annotation_html': {}, 'include_dirs': ['/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/scikitplot/cython/_templates/package_examples/graph_algo', '/home/circleci/repo/galleries/examples/cython', '/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/numpy/_core/include'], 'support_files': [], 'support_paths': [], 'extra_sources': [], 'language': None})), used_cache=False, created_utc='2026-02-01T06:33:58Z', fingerprint={'python': '3.11.14', 'python_impl': 'CPython', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'machine': 'x86_64', 'processor': 'x86_64', 'cython': '3.2.4', 'numpy': '2.4.2', 'abi': ''}, meta={'kind': 'package', 'key': 'f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d', 'package_name': 'scikitplot_pkg_graph_algo', 'modules': [{'module_name': 'scikitplot_pkg_graph_algo.bfs', 'artifact': 'scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so', 'source_sha256': 'd3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2', 'annotate_html': None}, {'module_name': 'scikitplot_pkg_graph_algo.degree', 'artifact': 'scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so', 'source_sha256': '5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371', 'annotate_html': None}], 'created_utc': '2026-02-01T06:33:58Z', 'fingerprint': {'python': '3.11.14', 'python_impl': 'CPython', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'machine': 'x86_64', 'processor': 'x86_64', 'cython': '3.2.4', 'numpy': '2.4.2', 'abi': ''}, 'directives': {'language_level': 3, 'embedsignature': True, 'boundscheck': False, 'wraparound': False, 'initializedcheck': False, 'cdivision': True}, 'compiler_directives': {'language_level': 3, 'embedsignature': True, 'boundscheck': False, 'wraparound': False, 'initializedcheck': False, 'cdivision': True}, 'profile': 'release', 'annotate': False, 'view_annotate': False, 'extra_compile_args': ['-O3', '-DNDEBUG'], 'extra_link_args': [], 'annotate_html': None, 'annotation_html': {}, 'include_dirs': ['/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/scikitplot/cython/_templates/package_examples/graph_algo', '/home/circleci/repo/galleries/examples/cython', '/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/numpy/_core/include'], 'support_files': [], 'support_paths': [], 'extra_sources': [], 'language': None})
Keys differ by profile:
fast-debug: eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea
release : f4d40d148b4830270f073c8a416601f3603bd32aeada212649baa202c92cac1d
Package metadata:
package_name: scikitplot_pkg_graph_algo
build_dir : /home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea
used_cache : False
created_utc : 2026-02-01T06:33:55Z
Modules and artifacts:
scikitplot_pkg_graph_algo.bfs
artifact: /home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so
scikitplot_pkg_graph_algo.degree
artifact: /home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so
Imported module: scikitplot_pkg_graph_algo.bfs
No known callable exported; public names: ['bfs', 'deque']
Pinning build:
Pinned import result:
PackageBuildResult(package_name='scikitplot_pkg_graph_algo', key='eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', build_dir=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea'), results=(BuildResult(module=<module 'scikitplot_pkg_graph_algo.bfs' from '/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so'>, key='eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', module_name='scikitplot_pkg_graph_algo.bfs', build_dir=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea'), artifact_path=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so'), used_cache=True, created_utc='2026-02-01T06:33:55Z', fingerprint={'abi': '', 'cython': '3.2.4', 'machine': 'x86_64', 'numpy': '2.4.2', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'processor': 'x86_64', 'python': '3.11.14', 'python_impl': 'CPython'}, source_sha256='d3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2', meta={'annotate': False, 'annotate_html': None, 'annotation_html': {}, 'compiler_directives': {'boundscheck': True, 'cdivision': False, 'embedsignature': True, 'initializedcheck': True, 'language_level': 3, 'wraparound': True}, 'created_utc': '2026-02-01T06:33:55Z', 'directives': {'boundscheck': True, 'cdivision': False, 'embedsignature': True, 'initializedcheck': True, 'language_level': 3, 'wraparound': True}, 'extra_compile_args': ['-O0', '-g'], 'extra_link_args': [], 'extra_sources': [], 'fingerprint': {'abi': '', 'cython': '3.2.4', 'machine': 'x86_64', 'numpy': '2.4.2', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'processor': 'x86_64', 'python': '3.11.14', 'python_impl': 'CPython'}, 'include_dirs': ['/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/scikitplot/cython/_templates/package_examples/graph_algo', '/home/circleci/repo/galleries/examples/cython', '/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/numpy/_core/include'], 'key': 'eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', 'kind': 'package', 'language': None, 'modules': [{'annotate_html': None, 'artifact': 'scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so', 'module_name': 'scikitplot_pkg_graph_algo.bfs', 'source_sha256': 'd3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2'}, {'annotate_html': None, 'artifact': 'scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so', 'module_name': 'scikitplot_pkg_graph_algo.degree', 'source_sha256': '5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371'}], 'package_name': 'scikitplot_pkg_graph_algo', 'profile': 'fast-debug', 'support_files': [], 'support_paths': [], 'view_annotate': False}), BuildResult(module=<module 'scikitplot_pkg_graph_algo.degree' from '/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so'>, key='eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', module_name='scikitplot_pkg_graph_algo.degree', build_dir=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea'), artifact_path=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so'), used_cache=True, created_utc='2026-02-01T06:33:55Z', fingerprint={'abi': '', 'cython': '3.2.4', 'machine': 'x86_64', 'numpy': '2.4.2', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'processor': 'x86_64', 'python': '3.11.14', 'python_impl': 'CPython'}, source_sha256='5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371', meta={'annotate': False, 'annotate_html': None, 'annotation_html': {}, 'compiler_directives': {'boundscheck': True, 'cdivision': False, 'embedsignature': True, 'initializedcheck': True, 'language_level': 3, 'wraparound': True}, 'created_utc': '2026-02-01T06:33:55Z', 'directives': {'boundscheck': True, 'cdivision': False, 'embedsignature': True, 'initializedcheck': True, 'language_level': 3, 'wraparound': True}, 'extra_compile_args': ['-O0', '-g'], 'extra_link_args': [], 'extra_sources': [], 'fingerprint': {'abi': '', 'cython': '3.2.4', 'machine': 'x86_64', 'numpy': '2.4.2', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'processor': 'x86_64', 'python': '3.11.14', 'python_impl': 'CPython'}, 'include_dirs': ['/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/scikitplot/cython/_templates/package_examples/graph_algo', '/home/circleci/repo/galleries/examples/cython', '/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/numpy/_core/include'], 'key': 'eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', 'kind': 'package', 'language': None, 'modules': [{'annotate_html': None, 'artifact': 'scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so', 'module_name': 'scikitplot_pkg_graph_algo.bfs', 'source_sha256': 'd3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2'}, {'annotate_html': None, 'artifact': 'scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so', 'module_name': 'scikitplot_pkg_graph_algo.degree', 'source_sha256': '5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371'}], 'package_name': 'scikitplot_pkg_graph_algo', 'profile': 'fast-debug', 'support_files': [], 'support_paths': [], 'view_annotate': False})), used_cache=True, created_utc='2026-02-01T06:33:55Z', fingerprint={'abi': '', 'cython': '3.2.4', 'machine': 'x86_64', 'numpy': '2.4.2', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'processor': 'x86_64', 'python': '3.11.14', 'python_impl': 'CPython'}, meta={'annotate': False, 'annotate_html': None, 'annotation_html': {}, 'compiler_directives': {'boundscheck': True, 'cdivision': False, 'embedsignature': True, 'initializedcheck': True, 'language_level': 3, 'wraparound': True}, 'created_utc': '2026-02-01T06:33:55Z', 'directives': {'boundscheck': True, 'cdivision': False, 'embedsignature': True, 'initializedcheck': True, 'language_level': 3, 'wraparound': True}, 'extra_compile_args': ['-O0', '-g'], 'extra_link_args': [], 'extra_sources': [], 'fingerprint': {'abi': '', 'cython': '3.2.4', 'machine': 'x86_64', 'numpy': '2.4.2', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'processor': 'x86_64', 'python': '3.11.14', 'python_impl': 'CPython'}, 'include_dirs': ['/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/scikitplot/cython/_templates/package_examples/graph_algo', '/home/circleci/repo/galleries/examples/cython', '/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/numpy/_core/include'], 'key': 'eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', 'kind': 'package', 'language': None, 'modules': [{'annotate_html': None, 'artifact': 'scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so', 'module_name': 'scikitplot_pkg_graph_algo.bfs', 'source_sha256': 'd3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2'}, {'annotate_html': None, 'artifact': 'scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so', 'module_name': 'scikitplot_pkg_graph_algo.degree', 'source_sha256': '5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371'}], 'package_name': 'scikitplot_pkg_graph_algo', 'profile': 'fast-debug', 'support_files': [], 'support_paths': [], 'view_annotate': False})
Pinned package name: scikitplot_pkg_graph_algo
Imported from cache key:
PackageBuildResult(package_name='scikitplot_pkg_graph_algo', key='eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', build_dir=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea'), results=(BuildResult(module=<module 'scikitplot_pkg_graph_algo.bfs' from '/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so'>, key='eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', module_name='scikitplot_pkg_graph_algo.bfs', build_dir=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea'), artifact_path=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so'), used_cache=True, created_utc='2026-02-01T06:33:55Z', fingerprint={'abi': '', 'cython': '3.2.4', 'machine': 'x86_64', 'numpy': '2.4.2', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'processor': 'x86_64', 'python': '3.11.14', 'python_impl': 'CPython'}, source_sha256='d3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2', meta={'annotate': False, 'annotate_html': None, 'annotation_html': {}, 'compiler_directives': {'boundscheck': True, 'cdivision': False, 'embedsignature': True, 'initializedcheck': True, 'language_level': 3, 'wraparound': True}, 'created_utc': '2026-02-01T06:33:55Z', 'directives': {'boundscheck': True, 'cdivision': False, 'embedsignature': True, 'initializedcheck': True, 'language_level': 3, 'wraparound': True}, 'extra_compile_args': ['-O0', '-g'], 'extra_link_args': [], 'extra_sources': [], 'fingerprint': {'abi': '', 'cython': '3.2.4', 'machine': 'x86_64', 'numpy': '2.4.2', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'processor': 'x86_64', 'python': '3.11.14', 'python_impl': 'CPython'}, 'include_dirs': ['/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/scikitplot/cython/_templates/package_examples/graph_algo', '/home/circleci/repo/galleries/examples/cython', '/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/numpy/_core/include'], 'key': 'eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', 'kind': 'package', 'language': None, 'modules': [{'annotate_html': None, 'artifact': 'scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so', 'module_name': 'scikitplot_pkg_graph_algo.bfs', 'source_sha256': 'd3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2'}, {'annotate_html': None, 'artifact': 'scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so', 'module_name': 'scikitplot_pkg_graph_algo.degree', 'source_sha256': '5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371'}], 'package_name': 'scikitplot_pkg_graph_algo', 'profile': 'fast-debug', 'support_files': [], 'support_paths': [], 'view_annotate': False}), BuildResult(module=<module 'scikitplot_pkg_graph_algo.degree' from '/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so'>, key='eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', module_name='scikitplot_pkg_graph_algo.degree', build_dir=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea'), artifact_path=PosixPath('/home/circleci/.cache/scikitplot/cython/eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea/scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so'), used_cache=True, created_utc='2026-02-01T06:33:55Z', fingerprint={'abi': '', 'cython': '3.2.4', 'machine': 'x86_64', 'numpy': '2.4.2', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'processor': 'x86_64', 'python': '3.11.14', 'python_impl': 'CPython'}, source_sha256='5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371', meta={'annotate': False, 'annotate_html': None, 'annotation_html': {}, 'compiler_directives': {'boundscheck': True, 'cdivision': False, 'embedsignature': True, 'initializedcheck': True, 'language_level': 3, 'wraparound': True}, 'created_utc': '2026-02-01T06:33:55Z', 'directives': {'boundscheck': True, 'cdivision': False, 'embedsignature': True, 'initializedcheck': True, 'language_level': 3, 'wraparound': True}, 'extra_compile_args': ['-O0', '-g'], 'extra_link_args': [], 'extra_sources': [], 'fingerprint': {'abi': '', 'cython': '3.2.4', 'machine': 'x86_64', 'numpy': '2.4.2', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'processor': 'x86_64', 'python': '3.11.14', 'python_impl': 'CPython'}, 'include_dirs': ['/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/scikitplot/cython/_templates/package_examples/graph_algo', '/home/circleci/repo/galleries/examples/cython', '/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/numpy/_core/include'], 'key': 'eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', 'kind': 'package', 'language': None, 'modules': [{'annotate_html': None, 'artifact': 'scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so', 'module_name': 'scikitplot_pkg_graph_algo.bfs', 'source_sha256': 'd3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2'}, {'annotate_html': None, 'artifact': 'scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so', 'module_name': 'scikitplot_pkg_graph_algo.degree', 'source_sha256': '5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371'}], 'package_name': 'scikitplot_pkg_graph_algo', 'profile': 'fast-debug', 'support_files': [], 'support_paths': [], 'view_annotate': False})), used_cache=True, created_utc='2026-02-01T06:33:55Z', fingerprint={'abi': '', 'cython': '3.2.4', 'machine': 'x86_64', 'numpy': '2.4.2', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'processor': 'x86_64', 'python': '3.11.14', 'python_impl': 'CPython'}, meta={'annotate': False, 'annotate_html': None, 'annotation_html': {}, 'compiler_directives': {'boundscheck': True, 'cdivision': False, 'embedsignature': True, 'initializedcheck': True, 'language_level': 3, 'wraparound': True}, 'created_utc': '2026-02-01T06:33:55Z', 'directives': {'boundscheck': True, 'cdivision': False, 'embedsignature': True, 'initializedcheck': True, 'language_level': 3, 'wraparound': True}, 'extra_compile_args': ['-O0', '-g'], 'extra_link_args': [], 'extra_sources': [], 'fingerprint': {'abi': '', 'cython': '3.2.4', 'machine': 'x86_64', 'numpy': '2.4.2', 'platform': 'Linux-6.8.0-1040-aws-x86_64-with-glibc2.35', 'processor': 'x86_64', 'python': '3.11.14', 'python_impl': 'CPython'}, 'include_dirs': ['/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/scikitplot/cython/_templates/package_examples/graph_algo', '/home/circleci/repo/galleries/examples/cython', '/home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/numpy/_core/include'], 'key': 'eaa5d9b14542e23dec890ebe8f973f635b2940138bbb76ca56981c56d351c9ea', 'kind': 'package', 'language': None, 'modules': [{'annotate_html': None, 'artifact': 'scikitplot_pkg_graph_algo/bfs.cpython-311-x86_64-linux-gnu.so', 'module_name': 'scikitplot_pkg_graph_algo.bfs', 'source_sha256': 'd3f1eaf3cb7438cf670f928965db1b4716ab6c8feacbb95ab744b6355ff758d2'}, {'annotate_html': None, 'artifact': 'scikitplot_pkg_graph_algo/degree.cpython-311-x86_64-linux-gnu.so', 'module_name': 'scikitplot_pkg_graph_algo.degree', 'source_sha256': '5c22e7a9ea4bb6273325a19d4fe03a8c3ed4d5e6bb0b78f218a560196ee3a371'}], 'package_name': 'scikitplot_pkg_graph_algo', 'profile': 'fast-debug', 'support_files': [], 'support_paths': [], 'view_annotate': False})
used_cache: True
Cache stats snapshot:
CacheStats(cache_root=PosixPath('/home/circleci/.cache/scikitplot/cython'), n_modules=9, n_packages=2, total_bytes=8892943, pinned_aliases=2, pinned_keys=2, newest_mtime_utc='2026-02-01T06:33:58Z', oldest_mtime_utc='2026-02-01T06:33:52Z')
Total running time of the script: (0 minutes 2.959 seconds)
Related examples
Workflow templates (train / hpo / predict) + CLI entry template