pocketpy/c-api/functions/index.html
2025-09-23 06:50:35 +00:00

2992 lines
189 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" class="h-full">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="3.11.0.811925382131">
<!-- See retype.com -->
<meta name="generator" content="Retype 3.11.0">
<!-- Primary Meta Tags -->
<title>Functions | Portable Python 3.x Interpreter in Modern C</title>
<meta name="title" content="Functions | Portable Python 3.x Interpreter in Modern C">
<!-- Canonical -->
<link rel="canonical" href="https://pocketpy.dev/c-api/functions/">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://pocketpy.dev/c-api/functions/">
<meta property="og:title" content="Functions | Portable Python 3.x Interpreter in Modern C">
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:url" content="https://pocketpy.dev/c-api/functions/">
<meta property="twitter:title" content="Functions | Portable Python 3.x Interpreter in Modern C">
<script data-cfasync="false">(function(){var cl=document.documentElement.classList,ls=localStorage.getItem("retype_scheme"),hd=cl.contains("dark"),hl=cl.contains("light"),wm=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;if(ls==="dark"||(!ls&&wm&&!hd&&!hl)){cl.remove("light");cl.add("dark")}else if(ls==="light"||(!ls&&!wm&&!hd&&!hl)){cl.remove("dark");cl.add("light")}})();</script>
<link href="../../static/logo.png" rel="icon">
<link href="../../resources/css/retype.css?v=3.11.0.811925382131" rel="stylesheet">
<script data-cfasync="false" src="../../resources/js/config.js?v=3.11.0.811925382131" data-turbo-eval="false" defer></script>
<script data-cfasync="false" src="../../resources/js/retype.js?v=3.11.0" data-turbo-eval="false" defer></script>
<script id="lunr-js" data-cfasync="false" src="../../resources/js/lunr.js?v=3.11.0.811925382131" data-turbo-eval="false" defer></script>
<script id="prism-js" data-cfasync="false" src="../../resources/js/prism.js?v=3.11.0.811925382131" defer></script>
</head>
<body>
<div id="retype-app" class="relative text-base antialiased text-base-text bg-base-bg font-body">
<div class="absolute bottom-0 left-0" style="top: 5rem; right: 50%"></div>
<header id="retype-header" class="sticky top-0 z-30 flex w-full h-16 bg-header-bg border-b border-header-border md:h-20">
<div class="container relative flex items-center justify-between pr-6 grow md:justify-start">
<!-- Mobile menu button skeleton -->
<button v-cloak class="skeleton retype-mobile-menu-button flex items-center justify-center shrink-0 overflow-hidden dark:text-white focus:outline-none rounded-full w-10 h-10 ml-3.5 md:hidden"><svg xmlns="http://www.w3.org/2000/svg" class="mb-px shrink-0" width="24" height="24" viewBox="0 0 24 24" role="presentation" style="margin-bottom: 0px;"><g fill="currentColor"><path d="M2 4h20v2H2zM2 11h20v2H2zM2 18h20v2H2z"></path></g></svg></button>
<div v-cloak id="retype-sidebar-left-toggle-button"></div>
<!-- Logo -->
<div class="flex items-center justify-between h-full py-2 md:w-75">
<div class="flex items-center px-2 md:px-6">
<a id="retype-branding-logo" href="../../" class="flex items-center leading-snug text-2xl">
<span class="w-10 mr-2 grow-0 shrink-0 overflow-hidden">
<img class="max-h-10 dark:hidden md:inline-block" src="../../static/logo.png">
<img class="max-h-10 hidden dark:inline-block" src="../../static/logo.png">
</span>
<span class="dark:text-white font-bold line-clamp-1 md:line-clamp-2">pocketpy</span>
</a><span id="retype-branding-label" class="inline-flex mt-1 px-2 py-1 ml-4 text-xs font-medium leading-none items-center rounded-md bg-branding-label-bg text-branding-label-text ring-1 ring-branding-label-border ring-inset md:inline-block">v2.1.2</span>
</div>
<span class="hidden h-8 border-r md:inline-block border-base-border"></span>
</div>
<div class="flex justify-between md:grow">
<!-- Top Nav -->
<nav id="retype-header-nav" class="hidden md:flex">
<ul class="flex flex-col mb-4 md:pl-16 md:mb-0 md:flex-row md:items-center">
<li class="mr-6">
<a class="py-2 md:mb-0 inline-flex items-center text-sm whitespace-nowrap transition-colors duration-200 ease-linear md:text-header-text font-header-text-weight hover:text-header-text-hover" href="">
<svg xmlns="http://www.w3.org/2000/svg" class="mb-px mr-1" width="18" height="18" viewBox="0 0 24 24" role="presentation">
<g fill="currentColor">
<path d="M11.03 2.59a1.501 1.501 0 0 1 1.94 0l7.5 6.363a1.5 1.5 0 0 1 .53 1.144V19.5a1.5 1.5 0 0 1-1.5 1.5h-5.75a.75.75 0 0 1-.75-.75V14h-2v6.25a.75.75 0 0 1-.75.75H4.5A1.5 1.5 0 0 1 3 19.5v-9.403c0-.44.194-.859.53-1.144ZM12 3.734l-7.5 6.363V19.5h5v-6.25a.75.75 0 0 1 .75-.75h3.5a.75.75 0 0 1 .75.75v6.25h5v-9.403Z"/>
</g>
</svg>
<span>Home</span>
</a>
</li>
<li class="mr-6">
<a class="py-2 md:mb-0 inline-flex items-center text-sm whitespace-nowrap transition-colors duration-200 ease-linear md:text-header-text font-header-text-weight hover:text-header-text-hover" href="https://pocketpy.dev/static/web/" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="mb-px mr-1" width="18" height="18" viewBox="0 0 24 24" role="presentation">
<g fill="currentColor">
<path d="M9.5 15.584V8.416a.5.5 0 0 1 .77-.42l5.576 3.583a.5.5 0 0 1 0 .842l-5.576 3.584a.5.5 0 0 1-.77-.42Z"/><path d="M1 12C1 5.925 5.925 1 12 1s11 4.925 11 11-4.925 11-11 11S1 18.075 1 12Zm11-9.5A9.5 9.5 0 0 0 2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5Z"/>
</g>
</svg>
<span>Live Demo</span>
</a>
</li>
<li class="mr-6">
<a class="py-2 md:mb-0 inline-flex items-center text-sm whitespace-nowrap transition-colors duration-200 ease-linear md:text-header-text font-header-text-weight hover:text-header-text-hover" href="https://pocketpy.github.io/examples/" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="mb-px mr-1" width="18" height="18" viewBox="0 0 24 24" role="presentation">
<g fill="currentColor">
<path d="M15.22 4.97a.75.75 0 0 1 1.06 0l6.5 6.5a.75.75 0 0 1 0 1.06l-6.5 6.5a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L21.19 12l-5.97-5.97a.75.75 0 0 1 0-1.06Zm-6.44 0a.75.75 0 0 1 0 1.06L2.81 12l5.97 5.97a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-6.5-6.5a.75.75 0 0 1 0-1.06l6.5-6.5a.75.75 0 0 1 1.06 0Z"/>
</g>
</svg>
<span>Live Examples</span>
</a>
</li>
<li class="mr-6">
<a class="py-2 md:mb-0 inline-flex items-center text-sm whitespace-nowrap transition-colors duration-200 ease-linear md:text-header-text font-header-text-weight hover:text-header-text-hover" href="https://github.com/blueloveth/pocketpy" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="mb-px mr-1" width="18" height="18" viewBox="0 0 24 24" role="presentation">
<g fill="currentColor">
<path d="M12 1C5.923 1 1 5.923 1 12c0 4.867 3.149 8.979 7.521 10.436.55.096.756-.233.756-.522 0-.262-.013-1.128-.013-2.049-2.764.509-3.479-.674-3.699-1.292-.124-.317-.66-1.293-1.127-1.554-.385-.207-.936-.715-.014-.729.866-.014 1.485.797 1.691 1.128.99 1.663 2.571 1.196 3.204.907.096-.715.385-1.196.701-1.471-2.448-.275-5.005-1.224-5.005-5.432 0-1.196.426-2.186 1.128-2.956-.111-.275-.496-1.402.11-2.915 0 0 .921-.288 3.024 1.128a10.193 10.193 0 0 1 2.75-.371c.936 0 1.871.123 2.75.371 2.104-1.43 3.025-1.128 3.025-1.128.605 1.513.221 2.64.111 2.915.701.77 1.127 1.747 1.127 2.956 0 4.222-2.571 5.157-5.019 5.432.399.344.743 1.004.743 2.035 0 1.471-.014 2.654-.014 3.025 0 .289.206.632.756.522C19.851 20.979 23 16.854 23 12c0-6.077-4.922-11-11-11Z"/>
</g>
</svg>
<span>Github</span>
</a>
</li>
<li class="mr-6">
<a class="py-2 md:mb-0 inline-flex items-center text-sm whitespace-nowrap transition-colors duration-200 ease-linear md:text-header-text font-header-text-weight hover:text-header-text-hover" href="https://discord.gg/WWaq72GzXv" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="mb-px mr-1" width="18" height="18" viewBox="0 0 24 24" role="presentation">
<g fill="currentColor">
<path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"/><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"/>
</g>
</svg>
<span>Discord</span>
</a>
</li>
</ul>
</nav>
<!-- Header Right Skeleton -->
<div v-cloak class="flex justify-end grow skeleton">
<!-- Search input mock -->
<div class="relative hidden w-40 lg:block lg:max-w-sm lg:ml-auto">
<div class="absolute flex items-center justify-center h-full pl-3 dark:text-dark-300">
<svg xmlns="http://www.w3.org/2000/svg" class="icon-base" width="16" height="16" viewBox="0 0 24 24" aria-labelledby="icon" role="presentation" style="margin-bottom: 1px;"><g fill="currentColor" ><path d="M21.71 20.29l-3.68-3.68A8.963 8.963 0 0020 11c0-4.96-4.04-9-9-9s-9 4.04-9 9 4.04 9 9 9c2.12 0 4.07-.74 5.61-1.97l3.68 3.68c.2.19.45.29.71.29s.51-.1.71-.29c.39-.39.39-1.03 0-1.42zM4 11c0-3.86 3.14-7 7-7s7 3.14 7 7c0 1.92-.78 3.66-2.04 4.93-.01.01-.02.01-.02.01-.01.01-.01.01-.01.02A6.98 6.98 0 0111 18c-3.86 0-7-3.14-7-7z" ></path></g></svg>
</div>
<input class="w-full h-10 placeholder-search-placeholder transition-colors duration-200 ease-in bg-search-bg border border-transparent rounded md:text-sm hover:border-search-border-hover focus:outline-none focus:border-search-border-focus" style="padding: 0.625rem 0.75rem 0.625rem 2rem" type="text" placeholder="Search">
</div>
<!-- Mobile search button -->
<div class="flex items-center justify-center w-10 h-10 lg:hidden">
<svg xmlns="http://www.w3.org/2000/svg" class="shrink-0 icon-base" width="20" height="20" viewBox="0 0 24 24" aria-labelledby="icon" role="presentation" style="margin-bottom: 0px;"><g fill="currentColor" ><path d="M21.71 20.29l-3.68-3.68A8.963 8.963 0 0020 11c0-4.96-4.04-9-9-9s-9 4.04-9 9 4.04 9 9 9c2.12 0 4.07-.74 5.61-1.97l3.68 3.68c.2.19.45.29.71.29s.51-.1.71-.29c.39-.39.39-1.03 0-1.42zM4 11c0-3.86 3.14-7 7-7s7 3.14 7 7c0 1.92-.78 3.66-2.04 4.93-.01.01-.02.01-.02.01-.01.01-.01.01-.01.02A6.98 6.98 0 0111 18c-3.86 0-7-3.14-7-7z" ></path></g></svg>
</div>
<!-- Dark mode switch placeholder -->
<div class="w-10 h-10 lg:ml-2"></div>
<!-- History button -->
<div class="flex items-center justify-center w-10 h-10" style="margin-right: -0.625rem;">
<svg xmlns="http://www.w3.org/2000/svg" class="shrink-0 icon-base" width="22" height="22" viewBox="0 0 24 24" aria-labelledby="icon" role="presentation" style="margin-bottom: 0px;"><g fill="currentColor" ><g ><path d="M12.01 6.01c-.55 0-1 .45-1 1V12a1 1 0 00.4.8l3 2.22a.985.985 0 001.39-.2.996.996 0 00-.21-1.4l-2.6-1.92V7.01c.02-.55-.43-1-.98-1z"></path><path d="M12.01 1.91c-5.33 0-9.69 4.16-10.05 9.4l-.29-.26a.997.997 0 10-1.34 1.48l1.97 1.79c.19.17.43.26.67.26s.48-.09.67-.26l1.97-1.79a.997.997 0 10-1.34-1.48l-.31.28c.34-4.14 3.82-7.41 8.05-7.41 4.46 0 8.08 3.63 8.08 8.09s-3.63 8.08-8.08 8.08c-2.18 0-4.22-.85-5.75-2.4a.996.996 0 10-1.42 1.4 10.02 10.02 0 007.17 2.99c5.56 0 10.08-4.52 10.08-10.08.01-5.56-4.52-10.09-10.08-10.09z"></path></g></g></svg>
</div>
</div>
<div v-cloak class="flex justify-end grow">
<div id="retype-mobile-search-button"></div>
<doc-search-desktop></doc-search-desktop>
<doc-theme-switch class="lg:ml-2"></doc-theme-switch>
<doc-history></doc-history>
</div>
</div>
</div>
</header>
<div id="retype-container" class="container relative flex bg-white">
<!-- Sidebar Skeleton -->
<div v-cloak class="fixed flex flex-col shrink-0 duration-300 ease-in-out bg-sidebar-left-bg border-sidebar-left-border sidebar top-20 w-75 border-r h-screen md:sticky transition-transform skeleton">
<div class="flex items-center h-16 px-6">
<input class="w-full h-8 px-3 py-2 transition-colors duration-200 ease-linear bg-filter-bg border border-filter-border rounded shadow-none text-sm focus:outline-none focus:border-filter-border-focus" type="text" placeholder="Filter">
</div>
<div class="pl-6 mt-1 mb-4">
<div class="w-32 h-3 mb-4 bg-skeleton-bg rounded-full loading"></div>
<div class="w-48 h-3 mb-4 bg-skeleton-bg rounded-full loading"></div>
<div class="w-40 h-3 mb-4 bg-skeleton-bg rounded-full loading"></div>
<div class="w-32 h-3 mb-4 bg-skeleton-bg rounded-full loading"></div>
<div class="w-48 h-3 mb-4 bg-skeleton-bg rounded-full loading"></div>
<div class="w-40 h-3 mb-4 bg-skeleton-bg rounded-full loading"></div>
</div>
<div class="shrink-0 mt-auto bg-transparent dark:border-base-border">
<a class="flex items-center justify-center flex-nowrap h-16 text-gray-350 dark:text-dark-400 hover:text-gray-600 dark:hover:text-dark-300 transition-colors duration-150 ease-in docs-powered-by" target="_blank" href="https://retype.com/" rel="noopener">
<span class="text-xs whitespace-nowrap">Powered by</span>
<svg xmlns="http://www.w3.org/2000/svg" class="ml-2" fill="currentColor" width="96" height="20" overflow="visible"><path d="M0 0v20h13.59V0H0zm11.15 17.54H2.44V2.46h8.71v15.08zM15.8 20h2.44V4.67L15.8 2.22zM20.45 6.89V20h2.44V9.34z"/><g><path d="M40.16 8.44c0 1.49-.59 2.45-1.75 2.88l2.34 3.32h-2.53l-2.04-2.96h-1.43v2.96h-2.06V5.36h3.5c1.43 0 2.46.24 3.07.73s.9 1.27.9 2.35zm-2.48 1.1c.26-.23.38-.59.38-1.09 0-.5-.13-.84-.4-1.03s-.73-.28-1.39-.28h-1.54v2.75h1.5c.72 0 1.2-.12 1.45-.35zM51.56 5.36V7.2h-4.59v1.91h4.13v1.76h-4.13v1.92h4.74v1.83h-6.79V5.36h6.64zM60.09 7.15v7.48h-2.06V7.15h-2.61V5.36h7.28v1.79h-2.61zM70.81 14.64h-2.06v-3.66l-3.19-5.61h2.23l1.99 3.45 1.99-3.45H74l-3.19 5.61v3.66zM83.99 6.19c.65.55.97 1.4.97 2.55s-.33 1.98-1 2.51-1.68.8-3.04.8h-1.23v2.59h-2.06V5.36h3.26c1.42 0 2.45.28 3.1.83zm-1.51 3.65c.25-.28.37-.69.37-1.22s-.16-.92-.48-1.14c-.32-.23-.82-.34-1.5-.34H79.7v3.12h1.38c.68 0 1.15-.14 1.4-.42zM95.85 5.36V7.2h-4.59v1.91h4.13v1.76h-4.13v1.92H96v1.83h-6.79V5.36h6.64z"/></g></svg>
</a>
</div>
</div>
<!-- Sidebar component -->
<doc-sidebar v-cloak>
<template #sidebar-footer>
<div class="shrink-0 mt-auto border-t md:bg-transparent md:border-none dark:border-base-border">
<div class="py-3 px-6 md:hidden border-b dark:border-base-border">
<nav>
<ul class="flex flex-wrap justify-center items-center">
<li class="mr-6">
<a class="block py-1 inline-flex items-center text-sm whitespace-nowrap transition-colors duration-200 ease-linear md:text-header-text font-header-text-weight hover:text-header-text-hover" href="">
<svg xmlns="http://www.w3.org/2000/svg" class="mb-px mr-1" width="18" height="18" viewBox="0 0 24 24" role="presentation">
<g fill="currentColor">
<path d="M11.03 2.59a1.501 1.501 0 0 1 1.94 0l7.5 6.363a1.5 1.5 0 0 1 .53 1.144V19.5a1.5 1.5 0 0 1-1.5 1.5h-5.75a.75.75 0 0 1-.75-.75V14h-2v6.25a.75.75 0 0 1-.75.75H4.5A1.5 1.5 0 0 1 3 19.5v-9.403c0-.44.194-.859.53-1.144ZM12 3.734l-7.5 6.363V19.5h5v-6.25a.75.75 0 0 1 .75-.75h3.5a.75.75 0 0 1 .75.75v6.25h5v-9.403Z"/>
</g>
</svg>
<span>Home</span>
</a>
</li>
<li class="mr-6">
<a class="block py-1 inline-flex items-center text-sm whitespace-nowrap transition-colors duration-200 ease-linear md:text-header-text font-header-text-weight hover:text-header-text-hover" href="https://pocketpy.dev/static/web/" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="mb-px mr-1" width="18" height="18" viewBox="0 0 24 24" role="presentation">
<g fill="currentColor">
<path d="M9.5 15.584V8.416a.5.5 0 0 1 .77-.42l5.576 3.583a.5.5 0 0 1 0 .842l-5.576 3.584a.5.5 0 0 1-.77-.42Z"/><path d="M1 12C1 5.925 5.925 1 12 1s11 4.925 11 11-4.925 11-11 11S1 18.075 1 12Zm11-9.5A9.5 9.5 0 0 0 2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5Z"/>
</g>
</svg>
<span>Live Demo</span>
</a>
</li>
<li class="mr-6">
<a class="block py-1 inline-flex items-center text-sm whitespace-nowrap transition-colors duration-200 ease-linear md:text-header-text font-header-text-weight hover:text-header-text-hover" href="https://pocketpy.github.io/examples/" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="mb-px mr-1" width="18" height="18" viewBox="0 0 24 24" role="presentation">
<g fill="currentColor">
<path d="M15.22 4.97a.75.75 0 0 1 1.06 0l6.5 6.5a.75.75 0 0 1 0 1.06l-6.5 6.5a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L21.19 12l-5.97-5.97a.75.75 0 0 1 0-1.06Zm-6.44 0a.75.75 0 0 1 0 1.06L2.81 12l5.97 5.97a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-6.5-6.5a.75.75 0 0 1 0-1.06l6.5-6.5a.75.75 0 0 1 1.06 0Z"/>
</g>
</svg>
<span>Live Examples</span>
</a>
</li>
<li class="mr-6">
<a class="block py-1 inline-flex items-center text-sm whitespace-nowrap transition-colors duration-200 ease-linear md:text-header-text font-header-text-weight hover:text-header-text-hover" href="https://github.com/blueloveth/pocketpy" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="mb-px mr-1" width="18" height="18" viewBox="0 0 24 24" role="presentation">
<g fill="currentColor">
<path d="M12 1C5.923 1 1 5.923 1 12c0 4.867 3.149 8.979 7.521 10.436.55.096.756-.233.756-.522 0-.262-.013-1.128-.013-2.049-2.764.509-3.479-.674-3.699-1.292-.124-.317-.66-1.293-1.127-1.554-.385-.207-.936-.715-.014-.729.866-.014 1.485.797 1.691 1.128.99 1.663 2.571 1.196 3.204.907.096-.715.385-1.196.701-1.471-2.448-.275-5.005-1.224-5.005-5.432 0-1.196.426-2.186 1.128-2.956-.111-.275-.496-1.402.11-2.915 0 0 .921-.288 3.024 1.128a10.193 10.193 0 0 1 2.75-.371c.936 0 1.871.123 2.75.371 2.104-1.43 3.025-1.128 3.025-1.128.605 1.513.221 2.64.111 2.915.701.77 1.127 1.747 1.127 2.956 0 4.222-2.571 5.157-5.019 5.432.399.344.743 1.004.743 2.035 0 1.471-.014 2.654-.014 3.025 0 .289.206.632.756.522C19.851 20.979 23 16.854 23 12c0-6.077-4.922-11-11-11Z"/>
</g>
</svg>
<span>Github</span>
</a>
</li>
<li class="mr-6">
<a class="block py-1 inline-flex items-center text-sm whitespace-nowrap transition-colors duration-200 ease-linear md:text-header-text font-header-text-weight hover:text-header-text-hover" href="https://discord.gg/WWaq72GzXv" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="mb-px mr-1" width="18" height="18" viewBox="0 0 24 24" role="presentation">
<g fill="currentColor">
<path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"/><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"/>
</g>
</svg>
<span>Discord</span>
</a>
</li>
</ul>
</nav>
</div>
<a class="flex items-center justify-center flex-nowrap h-16 text-gray-350 dark:text-dark-400 hover:text-gray-600 dark:hover:text-dark-300 transition-colors duration-150 ease-in docs-powered-by" target="_blank" href="https://retype.com/" rel="noopener">
<span class="text-xs whitespace-nowrap">Powered by</span>
<svg xmlns="http://www.w3.org/2000/svg" class="ml-2" fill="currentColor" width="96" height="20" overflow="visible"><path d="M0 0v20h13.59V0H0zm11.15 17.54H2.44V2.46h8.71v15.08zM15.8 20h2.44V4.67L15.8 2.22zM20.45 6.89V20h2.44V9.34z"/><g><path d="M40.16 8.44c0 1.49-.59 2.45-1.75 2.88l2.34 3.32h-2.53l-2.04-2.96h-1.43v2.96h-2.06V5.36h3.5c1.43 0 2.46.24 3.07.73s.9 1.27.9 2.35zm-2.48 1.1c.26-.23.38-.59.38-1.09 0-.5-.13-.84-.4-1.03s-.73-.28-1.39-.28h-1.54v2.75h1.5c.72 0 1.2-.12 1.45-.35zM51.56 5.36V7.2h-4.59v1.91h4.13v1.76h-4.13v1.92h4.74v1.83h-6.79V5.36h6.64zM60.09 7.15v7.48h-2.06V7.15h-2.61V5.36h7.28v1.79h-2.61zM70.81 14.64h-2.06v-3.66l-3.19-5.61h2.23l1.99 3.45 1.99-3.45H74l-3.19 5.61v3.66zM83.99 6.19c.65.55.97 1.4.97 2.55s-.33 1.98-1 2.51-1.68.8-3.04.8h-1.23v2.59h-2.06V5.36h3.26c1.42 0 2.45.28 3.1.83zm-1.51 3.65c.25-.28.37-.69.37-1.22s-.16-.92-.48-1.14c-.32-.23-.82-.34-1.5-.34H79.7v3.12h1.38c.68 0 1.15-.14 1.4-.42zM95.85 5.36V7.2h-4.59v1.91h4.13v1.76h-4.13v1.92H96v1.83h-6.79V5.36h6.64z"/></g></svg>
</a>
</div>
</template>
</doc-sidebar>
<div class="grow min-w-0 bg-body-bg">
<!-- Render "toolbar" template here on api pages --><!-- Render page content -->
<div class="flex">
<div id="retype-main" class="min-w-0 p-4 grow md:px-16">
<main class="relative pb-12 lg:pt-2">
<div class="retype-markdown" id="retype-content">
<!-- Rendered if sidebar right is enabled -->
<div id="retype-sidebar-right-toggle"></div>
<!-- Page content -->
<doc-anchor-target id="functions" class="break-words">
<h1>
<doc-anchor-trigger class="header-anchor-trigger" to="#functions">#</doc-anchor-trigger>
<span>Functions</span>
</h1>
</doc-anchor-target>
<doc-anchor-target id="py_initialize">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_initialize">#</doc-anchor-trigger>
<span>py_initialize</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Initialize pocketpy and the default VM.
PK_API void py_initialize();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_finalize">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_finalize">#</doc-anchor-trigger>
<span>py_finalize</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Finalize pocketpy and free all VMs. This opearation is irreversible.
/// After this call, you cannot use any function from this header anymore.
PK_API void py_finalize();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_currentvm">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_currentvm">#</doc-anchor-trigger>
<span>py_currentvm</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the current VM index.
PK_API int py_currentvm();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_switchvm">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_switchvm">#</doc-anchor-trigger>
<span>py_switchvm</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Switch to a VM.
/// @param index index of the VM ranging from 0 to 16 (exclusive). `0` is the default VM.
PK_API void py_switchvm(int index);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_resetvm">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_resetvm">#</doc-anchor-trigger>
<span>py_resetvm</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Reset the current VM.
PK_API void py_resetvm();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_resetallvm">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_resetallvm">#</doc-anchor-trigger>
<span>py_resetallvm</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Reset All VMs.
PK_API void py_resetallvm();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_getvmctx">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_getvmctx">#</doc-anchor-trigger>
<span>py_getvmctx</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the current VM context. This is used for user-defined data.
PK_API void* py_getvmctx();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_setvmctx">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_setvmctx">#</doc-anchor-trigger>
<span>py_setvmctx</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Set the current VM context. This is used for user-defined data.
PK_API void py_setvmctx(void* ctx);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_callbacks">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_callbacks">#</doc-anchor-trigger>
<span>py_callbacks</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Setup the callbacks for the current VM.
PK_API py_Callbacks* py_callbacks();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_sys_setargv">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_sys_setargv">#</doc-anchor-trigger>
<span>py_sys_setargv</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Set `sys.argv`. Used for storing command-line arguments.
PK_API void py_sys_setargv(int argc, char** argv);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_sys_settrace">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_sys_settrace">#</doc-anchor-trigger>
<span>py_sys_settrace</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Set the trace function for the current VM.
PK_API void py_sys_settrace(py_TraceFunc func, bool reset);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_gc_collect">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_gc_collect">#</doc-anchor-trigger>
<span>py_gc_collect</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Invoke the garbage collector.
PK_API int py_gc_collect();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_malloc">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_malloc">#</doc-anchor-trigger>
<span>py_malloc</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Wrapper for `PK_MALLOC(size)`.
PK_API void* py_malloc(size_t size);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_realloc">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_realloc">#</doc-anchor-trigger>
<span>py_realloc</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Wrapper for `PK_REALLOC(ptr, size)`.
PK_API void* py_realloc(void* ptr, size_t size);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_free">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_free">#</doc-anchor-trigger>
<span>py_free</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Wrapper for `PK_FREE(ptr)`.
PK_API void py_free(void* ptr);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_true">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_true">#</doc-anchor-trigger>
<span>py_True</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// A shorthand for `True`.
PK_API py_GlobalRef py_True();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_false">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_false">#</doc-anchor-trigger>
<span>py_False</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// A shorthand for `False`.
PK_API py_GlobalRef py_False();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_none">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_none">#</doc-anchor-trigger>
<span>py_None</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// A shorthand for `None`.
PK_API py_GlobalRef py_None();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_nil">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_nil">#</doc-anchor-trigger>
<span>py_NIL</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// A shorthand for `nil`. `nil` is not a valid python object.
PK_API py_GlobalRef py_NIL();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_frame_newglobals">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_frame_newglobals">#</doc-anchor-trigger>
<span>py_Frame_newglobals</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `globals()` with respect to the given frame.
PK_API void py_Frame_newglobals(py_Frame* frame, py_OutRef out);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_frame_newlocals">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_frame_newlocals">#</doc-anchor-trigger>
<span>py_Frame_newlocals</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `locals()` with respect to the given frame.
PK_API void py_Frame_newlocals(py_Frame* frame, py_OutRef out);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_frame_function">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_frame_function">#</doc-anchor-trigger>
<span>py_Frame_function</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the function object of the frame.
/// Returns `NULL` if not available.
PK_API py_StackRef py_Frame_function(py_Frame* frame);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_compile">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_compile">#</doc-anchor-trigger>
<span>py_compile <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Compile a source string into a code object.
/// Use python's `exec()` or `eval()` to execute it.
PK_API bool py_compile(const char* source,
const char* filename,
enum py_CompileMode mode,
bool is_dynamic);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_exec">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_exec">#</doc-anchor-trigger>
<span>py_exec <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Run a source string.
/// @param source source string.
/// @param filename filename (for error messages).
/// @param mode compile mode. Use `EXEC_MODE` for statements `EVAL_MODE` for expressions.
/// @param module target module. Use NULL for the main module.
/// @return `true` if the execution is successful or `false` if an exception is raised.
PK_API bool py_exec(const char* source,
const char* filename,
enum py_CompileMode mode,
py_Ref module);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_eval">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_eval">#</doc-anchor-trigger>
<span>py_eval <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Evaluate a source string. Equivalent to `py_exec(source, &quot;&lt;string&gt;&quot;, EVAL_MODE, module)`.
PK_API bool py_eval(const char* source, py_Ref module);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_smartexec">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_smartexec">#</doc-anchor-trigger>
<span>py_smartexec <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Run a source string with smart interpretation.
/// Example:
/// `py_newstr(py_r0(), &quot;abc&quot;);`
/// `py_newint(py_r1(), 123);`
/// `py_smartexec(&quot;print(_0, _1)&quot;, NULL, py_r0(), py_r1());`
/// `// &quot;abc 123&quot; will be printed`.
PK_API bool py_smartexec(const char* source, py_Ref module, ...);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_smarteval">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_smarteval">#</doc-anchor-trigger>
<span>py_smarteval <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Evaluate a source string with smart interpretation.
/// Example:
/// `py_newstr(py_r0(), &quot;abc&quot;);`
/// `py_smarteval(&quot;len(_)&quot;, NULL, py_r0());`
/// `int res = py_toint(py_retval());`
/// `// res will be 3`.
PK_API bool py_smarteval(const char* source, py_Ref module, ...);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newint">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newint">#</doc-anchor-trigger>
<span>py_newint</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create an `int` object.
PK_API void py_newint(py_OutRef, py_i64);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newtrivial">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newtrivial">#</doc-anchor-trigger>
<span>py_newtrivial</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a trivial value object.
PK_API void py_newtrivial(py_OutRef out, py_Type type, void* data, int size);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newfloat">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newfloat">#</doc-anchor-trigger>
<span>py_newfloat</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `float` object.
PK_API void py_newfloat(py_OutRef, py_f64);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newbool">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newbool">#</doc-anchor-trigger>
<span>py_newbool</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `bool` object.
PK_API void py_newbool(py_OutRef, bool);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newstr">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newstr">#</doc-anchor-trigger>
<span>py_newstr</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `str` object from a null-terminated string (utf-8).
PK_API void py_newstr(py_OutRef, const char*);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newstrn">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newstrn">#</doc-anchor-trigger>
<span>py_newstrn</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `str` object with `n` UNINITIALIZED bytes plus `'\0'`.
PK_API char* py_newstrn(py_OutRef, int);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newstrv">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newstrv">#</doc-anchor-trigger>
<span>py_newstrv</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `str` object from a `c11_sv`.
PK_API void py_newstrv(py_OutRef, c11_sv);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newfstr">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newfstr">#</doc-anchor-trigger>
<span>py_newfstr</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a formatted `str` object.
PK_API void py_newfstr(py_OutRef, const char*, ...);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newnone">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newnone">#</doc-anchor-trigger>
<span>py_newnone</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `None` object.
PK_API void py_newnone(py_OutRef);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newnotimplemented">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newnotimplemented">#</doc-anchor-trigger>
<span>py_newnotimplemented</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `NotImplemented` object.
PK_API void py_newnotimplemented(py_OutRef);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newellipsis">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newellipsis">#</doc-anchor-trigger>
<span>py_newellipsis</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `...` object.
PK_API void py_newellipsis(py_OutRef);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newnil">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newnil">#</doc-anchor-trigger>
<span>py_newnil</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `nil` object. `nil` is an invalid representation of an object.
/// Don't use it unless you know what you are doing.
PK_API void py_newnil(py_OutRef);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newnativefunc">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newnativefunc">#</doc-anchor-trigger>
<span>py_newnativefunc</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `nativefunc` object.
PK_API void py_newnativefunc(py_OutRef, py_CFunction);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newfunction">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newfunction">#</doc-anchor-trigger>
<span>py_newfunction</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `function` object.
PK_API py_Name py_newfunction(py_OutRef out,
const char* sig,
py_CFunction f,
const char* docstring,
int slots);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newboundmethod">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newboundmethod">#</doc-anchor-trigger>
<span>py_newboundmethod</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `boundmethod` object.
PK_API void py_newboundmethod(py_OutRef out, py_Ref self, py_Ref func);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newobject">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newobject">#</doc-anchor-trigger>
<span>py_newobject</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a new object.
/// @param out output reference.
/// @param type type of the object.
/// @param slots number of slots. Use `-1` to create a `__dict__`.
/// @param udsize size of your userdata.
/// @return pointer to the userdata.
PK_API void* py_newobject(py_OutRef out, py_Type type, int slots, int udsize);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_name">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_name">#</doc-anchor-trigger>
<span>py_name</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Convert a null-terminated string to a name.
PK_API py_Name py_name(const char*);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_name2ref">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_name2ref">#</doc-anchor-trigger>
<span>py_name2ref</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Convert a name to a python `str` object with cache.
PK_API py_GlobalRef py_name2ref(py_Name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_namev">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_namev">#</doc-anchor-trigger>
<span>py_namev</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Convert a `c11_sv` to a name.
PK_API py_Name py_namev(c11_sv);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_name2sv">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_name2sv">#</doc-anchor-trigger>
<span>py_name2sv</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Convert a name to a `c11_sv`.
PK_API c11_sv py_name2sv(py_Name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_bind">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_bind">#</doc-anchor-trigger>
<span>py_bind</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Bind a function to the object via &quot;decl-based&quot; style.
/// @param obj the target object.
/// @param sig signature of the function. e.g. `add(x, y)`.
/// @param f function to bind.
PK_API void py_bind(py_Ref obj, const char* sig, py_CFunction f);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_bindmethod">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_bindmethod">#</doc-anchor-trigger>
<span>py_bindmethod</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Bind a method to type via &quot;argc-based&quot; style.
/// @param type the target type.
/// @param name name of the method.
/// @param f function to bind.
PK_API void py_bindmethod(py_Type type, const char* name, py_CFunction f);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_bindstaticmethod">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_bindstaticmethod">#</doc-anchor-trigger>
<span>py_bindstaticmethod</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Bind a static method to type via &quot;argc-based&quot; style.
/// @param type the target type.
/// @param name name of the method.
/// @param f function to bind.
PK_API void py_bindstaticmethod(py_Type type, const char* name, py_CFunction f);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_bindfunc">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_bindfunc">#</doc-anchor-trigger>
<span>py_bindfunc</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Bind a function to the object via &quot;argc-based&quot; style.
/// @param obj the target object.
/// @param name name of the function.
/// @param f function to bind.
PK_API void py_bindfunc(py_Ref obj, const char* name, py_CFunction f);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_bindproperty">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_bindproperty">#</doc-anchor-trigger>
<span>py_bindproperty</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Bind a property to type.
/// @param type the target type.
/// @param name name of the property.
/// @param getter getter function.
/// @param setter setter function. Use `NULL` if not needed.
PK_API void py_bindproperty(py_Type type, const char* name, py_CFunction getter, py_CFunction setter);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_bindmagic">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_bindmagic">#</doc-anchor-trigger>
<span>py_bindmagic</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Bind a magic method to type.
PK_API void py_bindmagic(py_Type type, py_Name name, py_CFunction f);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_macrobind">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_macrobind">#</doc-anchor-trigger>
<span>py_macrobind</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Bind a compile-time function via &quot;decl-based&quot; style.
PK_API void py_macrobind(const char* sig, py_CFunction f);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_macroget">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_macroget">#</doc-anchor-trigger>
<span>py_macroget</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get a compile-time function by name.
PK_API py_ItemRef py_macroget(py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_toint">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_toint">#</doc-anchor-trigger>
<span>py_toint</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Convert an `int` object in python to `int64_t`.
PK_API py_i64 py_toint(py_Ref);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_totrivial">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_totrivial">#</doc-anchor-trigger>
<span>py_totrivial</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the address of the trivial value object (16 bytes).
PK_API void* py_totrivial(py_Ref);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tofloat">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tofloat">#</doc-anchor-trigger>
<span>py_tofloat</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Convert a `float` object in python to `double`.
PK_API py_f64 py_tofloat(py_Ref);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_castfloat">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_castfloat">#</doc-anchor-trigger>
<span>py_castfloat <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Cast a `int` or `float` object in python to `double`.
/// If successful, return true and set the value to `out`.
/// Otherwise, return false and raise `TypeError`.
PK_API bool py_castfloat(py_Ref, py_f64* out);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_castfloat32">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_castfloat32">#</doc-anchor-trigger>
<span>py_castfloat32 <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// 32-bit version of `py_castfloat`.
PK_API bool py_castfloat32(py_Ref, float* out);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_castint">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_castint">#</doc-anchor-trigger>
<span>py_castint <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Cast a `int` object in python to `int64_t`.
PK_API bool py_castint(py_Ref, py_i64* out);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tobool">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tobool">#</doc-anchor-trigger>
<span>py_tobool</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Convert a `bool` object in python to `bool`.
PK_API bool py_tobool(py_Ref);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_totype">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_totype">#</doc-anchor-trigger>
<span>py_totype</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Convert a `type` object in python to `py_Type`.
PK_API py_Type py_totype(py_Ref);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_touserdata">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_touserdata">#</doc-anchor-trigger>
<span>py_touserdata</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Convert a user-defined object to its userdata.
PK_API void* py_touserdata(py_Ref);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tosv">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tosv">#</doc-anchor-trigger>
<span>py_tosv</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Convert a `str` object in python to `c11_sv`.
PK_API c11_sv py_tosv(py_Ref);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_bytes_resize">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_bytes_resize">#</doc-anchor-trigger>
<span>py_bytes_resize</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Resize a `bytes` object. It can only be resized down.
PK_API void py_bytes_resize(py_Ref, int size);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newtype">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newtype">#</doc-anchor-trigger>
<span>py_newtype</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a new type.
/// @param name name of the type.
/// @param base base type.
/// @param module module where the type is defined. Use `NULL` for built-in types.
/// @param dtor destructor function. Use `NULL` if not needed.
PK_API py_Type py_newtype(const char* name, py_Type base, const py_GlobalRef module, py_Dtor dtor);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_istype">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_istype">#</doc-anchor-trigger>
<span>py_istype</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Check if the object is exactly the given type.
PK_API bool py_istype(py_Ref, py_Type);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_typeof">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_typeof">#</doc-anchor-trigger>
<span>py_typeof</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the type of the object.
PK_API py_Type py_typeof(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_isinstance">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_isinstance">#</doc-anchor-trigger>
<span>py_isinstance</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Check if the object is an instance of the given type.
PK_API bool py_isinstance(py_Ref obj, py_Type type);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_issubclass">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_issubclass">#</doc-anchor-trigger>
<span>py_issubclass</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Check if the derived type is a subclass of the base type.
PK_API bool py_issubclass(py_Type derived, py_Type base);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_gettype">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_gettype">#</doc-anchor-trigger>
<span>py_gettype</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get type by module and name. e.g. `py_gettype(&quot;time&quot;, py_name(&quot;struct_time&quot;))`.
/// Return `0` if not found.
PK_API py_Type py_gettype(const char* module, py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_checktype">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_checktype">#</doc-anchor-trigger>
<span>py_checktype <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Check if the object is an instance of the given type exactly.
/// Raise `TypeError` if the check fails.
PK_API bool py_checktype(py_Ref self, py_Type type);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_checkinstance">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_checkinstance">#</doc-anchor-trigger>
<span>py_checkinstance <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Check if the object is an instance of the given type or its subclass.
/// Raise `TypeError` if the check fails.
PK_API bool py_checkinstance(py_Ref self, py_Type type);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tpfindmagic">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tpfindmagic">#</doc-anchor-trigger>
<span>py_tpfindmagic</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Search the magic method from the given type to the base type.
/// Return `NULL` if not found.
PK_API py_GlobalRef py_tpfindmagic(py_Type, py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tpfindname">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tpfindname">#</doc-anchor-trigger>
<span>py_tpfindname</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Search the name from the given type to the base type.
/// Return `NULL` if not found.
PK_API py_ItemRef py_tpfindname(py_Type, py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tpbase">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tpbase">#</doc-anchor-trigger>
<span>py_tpbase</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the base type of the given type.
PK_API py_Type py_tpbase(py_Type type);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tpobject">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tpobject">#</doc-anchor-trigger>
<span>py_tpobject</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the type object of the given type.
PK_API py_GlobalRef py_tpobject(py_Type type);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tpsetfinal">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tpsetfinal">#</doc-anchor-trigger>
<span>py_tpsetfinal</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Disable the type for subclassing.
PK_API void py_tpsetfinal(py_Type type);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tphookattributes">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tphookattributes">#</doc-anchor-trigger>
<span>py_tphookattributes</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Set attribute hooks for the given type.
PK_API void py_tphookattributes(py_Type type,
bool (*getattribute)(py_Ref self, py_Name name) PY_RAISE PY_RETURN,
bool (*setattribute)(py_Ref self, py_Name name, py_Ref val)
PY_RAISE PY_RETURN,
bool (*delattribute)(py_Ref self, py_Name name) PY_RAISE,
bool (*getunboundmethod)(py_Ref self, py_Name name) PY_RETURN);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_inspect_currentfunction">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_inspect_currentfunction">#</doc-anchor-trigger>
<span>py_inspect_currentfunction</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the current `function` object on the stack.
/// Return `NULL` if not available.
/// NOTE: This function should be placed at the beginning of your decl-based bindings.
PK_API py_StackRef py_inspect_currentfunction();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_inspect_currentmodule">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_inspect_currentmodule">#</doc-anchor-trigger>
<span>py_inspect_currentmodule</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the current `module` object where the code is executed.
/// Return `NULL` if not available.
PK_API py_GlobalRef py_inspect_currentmodule();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_inspect_currentframe">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_inspect_currentframe">#</doc-anchor-trigger>
<span>py_inspect_currentframe</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the current frame object.
/// Return `NULL` if not available.
PK_API py_Frame* py_inspect_currentframe();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newglobals">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newglobals">#</doc-anchor-trigger>
<span>py_newglobals</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `globals()`.
PK_API void py_newglobals(py_OutRef);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newlocals">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newlocals">#</doc-anchor-trigger>
<span>py_newlocals</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `locals()`.
PK_API void py_newlocals(py_OutRef);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_getreg">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_getreg">#</doc-anchor-trigger>
<span>py_getreg</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the i-th register.
/// All registers are located in a contiguous memory.
PK_API py_GlobalRef py_getreg(int i);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_setreg">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_setreg">#</doc-anchor-trigger>
<span>py_setreg</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Set the i-th register.
PK_API void py_setreg(int i, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_retval">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_retval">#</doc-anchor-trigger>
<span>py_retval</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the last return value.
/// Please note that `py_retval()` cannot be used as input argument.
PK_API py_GlobalRef py_retval();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_getdict">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_getdict">#</doc-anchor-trigger>
<span>py_getdict</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get an item from the object's `__dict__`.
/// Return `NULL` if not found.
PK_API py_ItemRef py_getdict(py_Ref self, py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_setdict">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_setdict">#</doc-anchor-trigger>
<span>py_setdict</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Set an item to the object's `__dict__`.
PK_API void py_setdict(py_Ref self, py_Name name, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_deldict">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_deldict">#</doc-anchor-trigger>
<span>py_deldict</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Delete an item from the object's `__dict__`.
/// Return `true` if the deletion is successful.
PK_API bool py_deldict(py_Ref self, py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_emplacedict">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_emplacedict">#</doc-anchor-trigger>
<span>py_emplacedict</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Prepare an insertion to the object's `__dict__`.
PK_API py_ItemRef py_emplacedict(py_Ref self, py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_applydict">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_applydict">#</doc-anchor-trigger>
<span>py_applydict <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Apply a function to all items in the object's `__dict__`.
/// Return `true` if the function is successful for all items.
/// NOTE: Be careful if `f` modifies the object's `__dict__`.
PK_API bool py_applydict(py_Ref self, bool (*f)(py_Name name, py_Ref val, void* ctx), void* ctx);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_cleardict">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_cleardict">#</doc-anchor-trigger>
<span>py_cleardict</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Clear the object's `__dict__`. This function is dangerous.
PK_API void py_cleardict(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_getslot">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_getslot">#</doc-anchor-trigger>
<span>py_getslot</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the i-th slot of the object.
/// The object must have slots and `i` must be in valid range.
PK_API py_ObjectRef py_getslot(py_Ref self, int i);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_setslot">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_setslot">#</doc-anchor-trigger>
<span>py_setslot</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Set the i-th slot of the object.
PK_API void py_setslot(py_Ref self, int i, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_getbuiltin">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_getbuiltin">#</doc-anchor-trigger>
<span>py_getbuiltin</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get variable in the `builtins` module.
PK_API py_ItemRef py_getbuiltin(py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_getglobal">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_getglobal">#</doc-anchor-trigger>
<span>py_getglobal</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get variable in the `__main__` module.
PK_API py_ItemRef py_getglobal(py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_setglobal">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_setglobal">#</doc-anchor-trigger>
<span>py_setglobal</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Set variable in the `__main__` module.
PK_API void py_setglobal(py_Name name, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_peek">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_peek">#</doc-anchor-trigger>
<span>py_peek</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the i-th object from the top of the stack.
/// `i` should be negative, e.g. (-1) means TOS.
PK_API py_StackRef py_peek(int i);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_push">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_push">#</doc-anchor-trigger>
<span>py_push</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Push the object to the stack.
PK_API void py_push(py_Ref src);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_pushnil">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_pushnil">#</doc-anchor-trigger>
<span>py_pushnil</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Push a `nil` object to the stack.
PK_API void py_pushnil();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_pushnone">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_pushnone">#</doc-anchor-trigger>
<span>py_pushnone</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Push a `None` object to the stack.
PK_API void py_pushnone();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_pushname">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_pushname">#</doc-anchor-trigger>
<span>py_pushname</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Push a `py_Name` to the stack. This is used for keyword arguments.
PK_API void py_pushname(py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_pop">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_pop">#</doc-anchor-trigger>
<span>py_pop</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Pop an object from the stack.
PK_API void py_pop();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_shrink">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_shrink">#</doc-anchor-trigger>
<span>py_shrink</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Shrink the stack by n.
PK_API void py_shrink(int n);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_pushtmp">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_pushtmp">#</doc-anchor-trigger>
<span>py_pushtmp</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get a temporary variable from the stack.
PK_API py_StackRef py_pushtmp();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_pushmethod">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_pushmethod">#</doc-anchor-trigger>
<span>py_pushmethod</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the unbound method of the object.
/// Assume the object is located at the top of the stack.
/// If return true: `[self] -&gt; [unbound, self]`.
/// If return false: `[self] -&gt; [self]` (no change).
PK_API bool py_pushmethod(py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_pusheval">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_pusheval">#</doc-anchor-trigger>
<span>py_pusheval <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Evaluate an expression and push the result to the stack.
/// This function is used for testing.
PK_API bool py_pusheval(const char* expr, py_GlobalRef module);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_vectorcall">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_vectorcall">#</doc-anchor-trigger>
<span>py_vectorcall <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Call a callable object via pocketpy's calling convention.
/// You need to prepare the stack using the following format:
/// `callable, self/nil, arg1, arg2, ..., k1, v1, k2, v2, ...`.
/// `argc` is the number of positional arguments excluding `self`.
/// `kwargc` is the number of keyword arguments.
/// The result will be set to `py_retval()`.
/// The stack size will be reduced by `2 + argc + kwargc * 2`.
PK_API bool py_vectorcall(uint16_t argc, uint16_t kwargc);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_call">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_call">#</doc-anchor-trigger>
<span>py_call <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Call a function.
/// It prepares the stack and then performs a `vectorcall(argc, 0, false)`.
/// The result will be set to `py_retval()`.
/// The stack remains unchanged if successful.
PK_API bool py_call(py_Ref f, int argc, py_Ref argv);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tpcall">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tpcall">#</doc-anchor-trigger>
<span>py_tpcall <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Call a type to create a new instance.
PK_API bool py_tpcall(py_Type type, int argc, py_Ref argv);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_callcfunc">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_callcfunc">#</doc-anchor-trigger>
<span>py_callcfunc <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Call a `py_CFunction` in a safe way.
/// This function does extra checks to help you debug `py_CFunction`.
PK_API bool py_callcfunc(py_CFunction f, int argc, py_Ref argv);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binaryop">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binaryop">#</doc-anchor-trigger>
<span>py_binaryop <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Perform a binary operation.
/// The result will be set to `py_retval()`.
/// The stack remains unchanged after the operation.
PK_API bool py_binaryop(py_Ref lhs, py_Ref rhs, py_Name op, py_Name rop);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binaryadd">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binaryadd">#</doc-anchor-trigger>
<span>py_binaryadd <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs + rhs
PK_API bool py_binaryadd(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binarysub">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binarysub">#</doc-anchor-trigger>
<span>py_binarysub <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs - rhs
PK_API bool py_binarysub(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binarymul">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binarymul">#</doc-anchor-trigger>
<span>py_binarymul <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs * rhs
PK_API bool py_binarymul(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binarytruediv">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binarytruediv">#</doc-anchor-trigger>
<span>py_binarytruediv <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs / rhs
PK_API bool py_binarytruediv(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binaryfloordiv">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binaryfloordiv">#</doc-anchor-trigger>
<span>py_binaryfloordiv <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs // rhs
PK_API bool py_binaryfloordiv(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binarymod">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binarymod">#</doc-anchor-trigger>
<span>py_binarymod <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs % rhs
PK_API bool py_binarymod(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binarypow">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binarypow">#</doc-anchor-trigger>
<span>py_binarypow <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs ** rhs
PK_API bool py_binarypow(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binarylshift">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binarylshift">#</doc-anchor-trigger>
<span>py_binarylshift <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs &lt;&lt; rhs
PK_API bool py_binarylshift(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binaryrshift">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binaryrshift">#</doc-anchor-trigger>
<span>py_binaryrshift <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs &gt;&gt; rhs
PK_API bool py_binaryrshift(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binaryand">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binaryand">#</doc-anchor-trigger>
<span>py_binaryand <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs &amp; rhs
PK_API bool py_binaryand(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binaryor">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binaryor">#</doc-anchor-trigger>
<span>py_binaryor <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs | rhs
PK_API bool py_binaryor(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binaryxor">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binaryxor">#</doc-anchor-trigger>
<span>py_binaryxor <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs ^ rhs
PK_API bool py_binaryxor(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_binarymatmul">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_binarymatmul">#</doc-anchor-trigger>
<span>py_binarymatmul <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs @ rhs
PK_API bool py_binarymatmul(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_eq">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_eq">#</doc-anchor-trigger>
<span>py_eq <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs == rhs
PK_API bool py_eq(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_ne">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_ne">#</doc-anchor-trigger>
<span>py_ne <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs != rhs
PK_API bool py_ne(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_lt">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_lt">#</doc-anchor-trigger>
<span>py_lt <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs &lt; rhs
PK_API bool py_lt(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_le">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_le">#</doc-anchor-trigger>
<span>py_le <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs &lt;= rhs
PK_API bool py_le(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_gt">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_gt">#</doc-anchor-trigger>
<span>py_gt <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs &gt; rhs
PK_API bool py_gt(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_ge">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_ge">#</doc-anchor-trigger>
<span>py_ge <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// lhs &gt;= rhs
PK_API bool py_ge(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_isidentical">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_isidentical">#</doc-anchor-trigger>
<span>py_isidentical</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `lhs is rhs`.
PK_API bool py_isidentical(py_Ref, py_Ref);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_bool">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_bool">#</doc-anchor-trigger>
<span>py_bool <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `bool(val)`.
/// 1: true, 0: false, -1: error
PK_API int py_bool(py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_equal">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_equal">#</doc-anchor-trigger>
<span>py_equal <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Compare two objects.
/// 1: lhs == rhs, 0: lhs != rhs, -1: error
PK_API int py_equal(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_less">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_less">#</doc-anchor-trigger>
<span>py_less <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Compare two objects.
/// 1: lhs &lt; rhs, 0: lhs &gt;= rhs, -1: error
PK_API int py_less(py_Ref lhs, py_Ref rhs);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_callable">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_callable">#</doc-anchor-trigger>
<span>py_callable</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `callable(val)`.
PK_API bool py_callable(py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_hash">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_hash">#</doc-anchor-trigger>
<span>py_hash <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the hash value of the object.
PK_API bool py_hash(py_Ref, py_i64* out);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_iter">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_iter">#</doc-anchor-trigger>
<span>py_iter <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the iterator of the object.
PK_API bool py_iter(py_Ref);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_next">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_next">#</doc-anchor-trigger>
<span>py_next <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get the next element from the iterator.
/// 1: success, 0: StopIteration, -1: error
PK_API int py_next(py_Ref);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_str">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_str">#</doc-anchor-trigger>
<span>py_str <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `str(val)`.
PK_API bool py_str(py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_repr">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_repr">#</doc-anchor-trigger>
<span>py_repr <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `repr(val)`.
PK_API bool py_repr(py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_len">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_len">#</doc-anchor-trigger>
<span>py_len <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `len(val)`.
PK_API bool py_len(py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_getattr">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_getattr">#</doc-anchor-trigger>
<span>py_getattr <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `getattr(self, name)`.
PK_API bool py_getattr(py_Ref self, py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_setattr">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_setattr">#</doc-anchor-trigger>
<span>py_setattr <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `setattr(self, name, val)`.
PK_API bool py_setattr(py_Ref self, py_Name name, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_delattr">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_delattr">#</doc-anchor-trigger>
<span>py_delattr <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `delattr(self, name)`.
PK_API bool py_delattr(py_Ref self, py_Name name);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_getitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_getitem">#</doc-anchor-trigger>
<span>py_getitem <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `self[key]`.
PK_API bool py_getitem(py_Ref self, py_Ref key);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_setitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_setitem">#</doc-anchor-trigger>
<span>py_setitem <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `self[key] = val`.
PK_API bool py_setitem(py_Ref self, py_Ref key, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_delitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_delitem">#</doc-anchor-trigger>
<span>py_delitem <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `del self[key]`.
PK_API bool py_delitem(py_Ref self, py_Ref key);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_getmodule">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_getmodule">#</doc-anchor-trigger>
<span>py_getmodule</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Get a module by path.
PK_API py_GlobalRef py_getmodule(const char* path);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newmodule">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newmodule">#</doc-anchor-trigger>
<span>py_newmodule</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a new module.
PK_API py_GlobalRef py_newmodule(const char* path);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_importlib_reload">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_importlib_reload">#</doc-anchor-trigger>
<span>py_importlib_reload <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Reload an existing module.
PK_API bool py_importlib_reload(py_Ref module);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_import">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_import">#</doc-anchor-trigger>
<span>py_import <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Import a module.
/// The result will be set to `py_retval()`.
/// -1: error, 0: not found, 1: success
PK_API int py_import(const char* path);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_checkexc">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_checkexc">#</doc-anchor-trigger>
<span>py_checkexc</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Check if there is an unhandled exception.
PK_API bool py_checkexc();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_matchexc">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_matchexc">#</doc-anchor-trigger>
<span>py_matchexc <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Check if the unhandled exception is an instance of the given type.
/// If match, the exception will be stored in `py_retval()`.
PK_API bool py_matchexc(py_Type type);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_clearexc">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_clearexc">#</doc-anchor-trigger>
<span>py_clearexc</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Clear the unhandled exception.
/// @param p0 the unwinding point. Use `NULL` if not needed.
PK_API void py_clearexc(py_StackRef p0);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_printexc">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_printexc">#</doc-anchor-trigger>
<span>py_printexc</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Print the unhandled exception.
PK_API void py_printexc();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_formatexc">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_formatexc">#</doc-anchor-trigger>
<span>py_formatexc</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Format the unhandled exception and return a null-terminated string.
/// The returned string should be freed by the caller.
PK_API char* py_formatexc();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_exception">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_exception">#</doc-anchor-trigger>
<span>py_exception <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Raise an exception by type and message. Always return false.
PK_API bool py_exception(py_Type type, const char* fmt, ...);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_raise">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_raise">#</doc-anchor-trigger>
<span>py_raise <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Raise an exception object. Always return false.
PK_API bool py_raise(py_Ref);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="keyerror">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#keyerror">#</doc-anchor-trigger>
<span>KeyError <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API bool KeyError(py_Ref key);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="stopiteration">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#stopiteration">#</doc-anchor-trigger>
<span>StopIteration <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API bool StopIteration();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_debugger_waitforattach">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_debugger_waitforattach">#</doc-anchor-trigger>
<span>py_debugger_waitforattach</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_debugger_waitforattach(const char* hostname, unsigned short port);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_debugger_isattached">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_debugger_isattached">#</doc-anchor-trigger>
<span>py_debugger_isattached</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API bool py_debugger_isattached();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_debugger_exceptionbreakpoint">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_debugger_exceptionbreakpoint">#</doc-anchor-trigger>
<span>py_debugger_exceptionbreakpoint</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_debugger_exceptionbreakpoint(py_Ref exc);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_debugger_exit">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_debugger_exit">#</doc-anchor-trigger>
<span>py_debugger_exit</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_debugger_exit(int code);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newtuple">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newtuple">#</doc-anchor-trigger>
<span>py_newtuple</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `tuple` with `n` UNINITIALIZED elements.
/// You should initialize all elements before using it.
PK_API py_ObjectRef py_newtuple(py_OutRef, int n);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tuple_data">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tuple_data">#</doc-anchor-trigger>
<span>py_tuple_data</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API py_ObjectRef py_tuple_data(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tuple_getitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tuple_getitem">#</doc-anchor-trigger>
<span>py_tuple_getitem</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API py_ObjectRef py_tuple_getitem(py_Ref self, int i);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tuple_setitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tuple_setitem">#</doc-anchor-trigger>
<span>py_tuple_setitem</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_tuple_setitem(py_Ref self, int i, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tuple_len">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tuple_len">#</doc-anchor-trigger>
<span>py_tuple_len</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API int py_tuple_len(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newlist">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newlist">#</doc-anchor-trigger>
<span>py_newlist</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create an empty `list`.
PK_API void py_newlist(py_OutRef);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newlistn">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newlistn">#</doc-anchor-trigger>
<span>py_newlistn</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `list` with `n` UNINITIALIZED elements.
/// You should initialize all elements before using it.
PK_API void py_newlistn(py_OutRef, int n);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_list_data">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_list_data">#</doc-anchor-trigger>
<span>py_list_data</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API py_ItemRef py_list_data(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_list_getitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_list_getitem">#</doc-anchor-trigger>
<span>py_list_getitem</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API py_ItemRef py_list_getitem(py_Ref self, int i);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_list_setitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_list_setitem">#</doc-anchor-trigger>
<span>py_list_setitem</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_list_setitem(py_Ref self, int i, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_list_delitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_list_delitem">#</doc-anchor-trigger>
<span>py_list_delitem</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_list_delitem(py_Ref self, int i);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_list_len">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_list_len">#</doc-anchor-trigger>
<span>py_list_len</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API int py_list_len(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_list_swap">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_list_swap">#</doc-anchor-trigger>
<span>py_list_swap</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_list_swap(py_Ref self, int i, int j);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_list_append">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_list_append">#</doc-anchor-trigger>
<span>py_list_append</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_list_append(py_Ref self, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_list_emplace">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_list_emplace">#</doc-anchor-trigger>
<span>py_list_emplace</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API py_ItemRef py_list_emplace(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_list_clear">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_list_clear">#</doc-anchor-trigger>
<span>py_list_clear</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_list_clear(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_list_insert">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_list_insert">#</doc-anchor-trigger>
<span>py_list_insert</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_list_insert(py_Ref self, int i, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newdict">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newdict">#</doc-anchor-trigger>
<span>py_newdict</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create an empty `dict`.
PK_API void py_newdict(py_OutRef);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_dict_getitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_dict_getitem">#</doc-anchor-trigger>
<span>py_dict_getitem <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// -1: error, 0: not found, 1: found
PK_API int py_dict_getitem(py_Ref self, py_Ref key);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_dict_setitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_dict_setitem">#</doc-anchor-trigger>
<span>py_dict_setitem <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// true: success, false: error
PK_API bool py_dict_setitem(py_Ref self, py_Ref key, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_dict_delitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_dict_delitem">#</doc-anchor-trigger>
<span>py_dict_delitem <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// -1: error, 0: not found, 1: found (and deleted)
PK_API int py_dict_delitem(py_Ref self, py_Ref key);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_dict_getitem_by_str">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_dict_getitem_by_str">#</doc-anchor-trigger>
<span>py_dict_getitem_by_str <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// -1: error, 0: not found, 1: found
PK_API int py_dict_getitem_by_str(py_Ref self, const char* key);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_dict_getitem_by_int">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_dict_getitem_by_int">#</doc-anchor-trigger>
<span>py_dict_getitem_by_int <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// -1: error, 0: not found, 1: found
PK_API int py_dict_getitem_by_int(py_Ref self, py_i64 key);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_dict_setitem_by_str">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_dict_setitem_by_str">#</doc-anchor-trigger>
<span>py_dict_setitem_by_str <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// true: success, false: error
PK_API bool py_dict_setitem_by_str(py_Ref self, const char* key, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_dict_setitem_by_int">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_dict_setitem_by_int">#</doc-anchor-trigger>
<span>py_dict_setitem_by_int <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// true: success, false: error
PK_API bool py_dict_setitem_by_int(py_Ref self, py_i64 key, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_dict_delitem_by_str">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_dict_delitem_by_str">#</doc-anchor-trigger>
<span>py_dict_delitem_by_str <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// -1: error, 0: not found, 1: found (and deleted)
PK_API int py_dict_delitem_by_str(py_Ref self, const char* key);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_dict_delitem_by_int">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_dict_delitem_by_int">#</doc-anchor-trigger>
<span>py_dict_delitem_by_int <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// -1: error, 0: not found, 1: found (and deleted)
PK_API int py_dict_delitem_by_int(py_Ref self, py_i64 key);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_dict_apply">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_dict_apply">#</doc-anchor-trigger>
<span>py_dict_apply <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// true: success, false: error
PK_API bool py_dict_apply(py_Ref self, bool (*f)(py_Ref key, py_Ref val, void* ctx), void* ctx);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_dict_len">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_dict_len">#</doc-anchor-trigger>
<span>py_dict_len</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// noexcept
PK_API int py_dict_len(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newslice">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newslice">#</doc-anchor-trigger>
<span>py_newslice</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create an UNINITIALIZED `slice` object.
/// You should use `py_setslot()` to set `start`, `stop`, and `step`.
PK_API py_ObjectRef py_newslice(py_OutRef);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newsliceint">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newsliceint">#</doc-anchor-trigger>
<span>py_newsliceint</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Create a `slice` object from 3 integers.
PK_API void py_newsliceint(py_OutRef out, py_i64 start, py_i64 stop, py_i64 step);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newrandom">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newrandom">#</doc-anchor-trigger>
<span>py_newRandom</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_newRandom(py_OutRef out);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_random_seed">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_random_seed">#</doc-anchor-trigger>
<span>py_Random_seed</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_Random_seed(py_Ref self, py_i64 seed);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_random_random">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_random_random">#</doc-anchor-trigger>
<span>py_Random_random</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API py_f64 py_Random_random(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_random_uniform">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_random_uniform">#</doc-anchor-trigger>
<span>py_Random_uniform</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API py_f64 py_Random_uniform(py_Ref self, py_f64 a, py_f64 b);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_random_randint">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_random_randint">#</doc-anchor-trigger>
<span>py_Random_randint</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API py_i64 py_Random_randint(py_Ref self, py_i64 a, py_i64 b);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newarray2d">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newarray2d">#</doc-anchor-trigger>
<span>py_newarray2d</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_newarray2d(py_OutRef out, int width, int height);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_array2d_getwidth">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_array2d_getwidth">#</doc-anchor-trigger>
<span>py_array2d_getwidth</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API int py_array2d_getwidth(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_array2d_getheight">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_array2d_getheight">#</doc-anchor-trigger>
<span>py_array2d_getheight</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API int py_array2d_getheight(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_array2d_getitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_array2d_getitem">#</doc-anchor-trigger>
<span>py_array2d_getitem</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API py_ObjectRef py_array2d_getitem(py_Ref self, int x, int y);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_array2d_setitem">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_array2d_setitem">#</doc-anchor-trigger>
<span>py_array2d_setitem</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_array2d_setitem(py_Ref self, int x, int y, py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newvec2">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newvec2">#</doc-anchor-trigger>
<span>py_newvec2</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_newvec2(py_OutRef out, c11_vec2);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newvec3">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newvec3">#</doc-anchor-trigger>
<span>py_newvec3</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_newvec3(py_OutRef out, c11_vec3);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newvec2i">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newvec2i">#</doc-anchor-trigger>
<span>py_newvec2i</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_newvec2i(py_OutRef out, c11_vec2i);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newvec3i">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newvec3i">#</doc-anchor-trigger>
<span>py_newvec3i</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_newvec3i(py_OutRef out, c11_vec3i);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newcolor32">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newcolor32">#</doc-anchor-trigger>
<span>py_newcolor32</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_newcolor32(py_OutRef out, c11_color32);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_newmat3x3">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_newmat3x3">#</doc-anchor-trigger>
<span>py_newmat3x3</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API c11_mat3x3* py_newmat3x3(py_OutRef out);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tovec2">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tovec2">#</doc-anchor-trigger>
<span>py_tovec2</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API c11_vec2 py_tovec2(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tovec3">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tovec3">#</doc-anchor-trigger>
<span>py_tovec3</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API c11_vec3 py_tovec3(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tovec2i">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tovec2i">#</doc-anchor-trigger>
<span>py_tovec2i</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API c11_vec2i py_tovec2i(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tovec3i">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tovec3i">#</doc-anchor-trigger>
<span>py_tovec3i</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API c11_vec3i py_tovec3i(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tomat3x3">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tomat3x3">#</doc-anchor-trigger>
<span>py_tomat3x3</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API c11_mat3x3* py_tomat3x3(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_tocolor32">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_tocolor32">#</doc-anchor-trigger>
<span>py_tocolor32</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API c11_color32 py_tocolor32(py_Ref self);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_json_dumps">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_json_dumps">#</doc-anchor-trigger>
<span>py_json_dumps <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `json.dumps(val)`.
PK_API bool py_json_dumps(py_Ref val, int indent);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_json_loads">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_json_loads">#</doc-anchor-trigger>
<span>py_json_loads <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `json.loads(val)`.
PK_API bool py_json_loads(const char* source);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_pickle_dumps">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_pickle_dumps">#</doc-anchor-trigger>
<span>py_pickle_dumps <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `pickle.dumps(val)`.
PK_API bool py_pickle_dumps(py_Ref val);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_pickle_loads">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_pickle_loads">#</doc-anchor-trigger>
<span>py_pickle_loads <a href="../introduction/#py_raise-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-danger-text bg-badge-danger border border-badge-danger-border hover:text-badge-danger-text-hover hover:bg-badge-danger-hover hover:border-badge-danger-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>raise</span>
</a> <a href="../introduction/#py_return-macro" class="no-link inline-flex align-middle items-center justify-center font-medium leading-none whitespace-nowrap text-badge-primary-text bg-badge-primary border border-badge-primary-border hover:text-badge-primary-text-hover hover:bg-badge-primary-hover hover:border-badge-primary-border-hover transition-colors duration-200 ease-out h-6 px-2 text-xs rounded-md">
<span>return</span>
</a></span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Python equivalent to `pickle.loads(val)`.
PK_API bool py_pickle_loads(const unsigned char* data, int size);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_watchdog_begin">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_watchdog_begin">#</doc-anchor-trigger>
<span>py_watchdog_begin</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Begin the watchdog with `timeout` in milliseconds.
/// `PK_ENABLE_WATCHDOG` must be defined to `1` to use this feature.
/// You need to call `py_watchdog_end()` later.
/// If `timeout` is reached, `TimeoutError` will be raised.
PK_API void py_watchdog_begin(py_i64 timeout);</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_watchdog_end">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_watchdog_end">#</doc-anchor-trigger>
<span>py_watchdog_end</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// Reset the watchdog.
PK_API void py_watchdog_end();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_profiler_begin">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_profiler_begin">#</doc-anchor-trigger>
<span>py_profiler_begin</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_profiler_begin();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_profiler_end">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_profiler_end">#</doc-anchor-trigger>
<span>py_profiler_end</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_profiler_end();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_profiler_reset">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_profiler_reset">#</doc-anchor-trigger>
<span>py_profiler_reset</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API void py_profiler_reset();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_profiler_report">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_profiler_report">#</doc-anchor-trigger>
<span>py_profiler_report</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">
PK_API char* py_profiler_report();</code></pre>
</doc-codeblock></div>
<doc-anchor-target id="py_replinput">
<h3>
<doc-anchor-trigger class="header-anchor-trigger" to="#py_replinput">#</doc-anchor-trigger>
<span>py_replinput</span>
</h3>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre translate="no" class="language-c"><code v-pre class="language-c">/// An utility function to read a line from stdin for REPL.
PK_API int py_replinput(char* buf, int max_size);</code></pre>
</doc-codeblock></div>
<!-- Required only on API pages -->
<doc-toolbar-member-filter-no-results></doc-toolbar-member-filter-no-results>
</div>
<footer id="retype-content-footer" class="clear-both">
<nav id="retype-nextprev" class="print:hidden flex mt-14">
<div class="w-1/2">
<a class="px-5 py-4 h-full flex items-center break-normal font-medium text-body-link border border-base-border hover:border-base-border-hover rounded-l-lg transition-colors duration-150 relative hover:z-5" href="../../c-api/introduction/">
<svg xmlns="http://www.w3.org/2000/svg" class="mr-3" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" overflow="visible"><path d="M19 11H7.41l5.29-5.29a.996.996 0 10-1.41-1.41l-7 7a1 1 0 000 1.42l7 7a1.024 1.024 0 001.42-.01.996.996 0 000-1.41L7.41 13H19c.55 0 1-.45 1-1s-.45-1-1-1z" /><path fill="none" d="M0 0h24v24H0z" /></svg>
<span>
<span class="block text-xs font-normal text-base-text-muted">Previous</span>
<span class="block mt-1">Introduction</span>
</span>
</a>
</div>
<div class="w-1/2">
<a class="px-5 py-4 -mx-px h-full flex items-center justify-end break-normal font-medium text-body-link border border-base-border hover:border-base-border-hover rounded-r-lg transition-colors duration-150 relative hover:z-5" href="../../modules/array2d/">
<span>
<span class="block text-xs font-normal text-right text-base-text-muted">Next</span>
<span class="block mt-1">array2d</span>
</span>
<svg xmlns="http://www.w3.org/2000/svg" class="ml-3" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" overflow="visible"><path d="M19.92 12.38a1 1 0 00-.22-1.09l-7-7a.996.996 0 10-1.41 1.41l5.3 5.3H5c-.55 0-1 .45-1 1s.45 1 1 1h11.59l-5.29 5.29a.996.996 0 000 1.41c.19.2.44.3.7.3s.51-.1.71-.29l7-7c.09-.09.16-.21.21-.33z" /><path fill="none" d="M0 0h24v24H0z" /></svg>
</a>
</div>
</nav>
</footer>
</main>
<div id="retype-page-footer" class="print:border-none border-t border-base-border pt-6 mb-8">
<footer class="flex flex-wrap items-center justify-between print:justify-center">
<div id="retype-footer-links" class="print:hidden">
<ul class="flex flex-wrap items-center text-sm">
</ul>
</div>
<div id="retype-copyright" class="print:justify-center py-2 text-footer-text font-footer-link-weight text-sm leading-relaxed"><p>© Copyright 2025 - <a href="https://github.com/blueloveTH">blueloveTH</a> - All rights reserved.</p></div>
</footer>
</div>
</div>
<!-- Rendered if sidebar right is enabled -->
<!-- Sidebar right skeleton-->
<div v-cloak class="fixed top-0 bottom-0 right-0 translate-x-full bg-sidebar-right-bg border-sidebar-right-border lg:sticky lg:border-l lg:shrink-0 lg:pt-6 lg:transform-none sm:w-1/2 lg:w-64 lg:z-0 md:w-104 sidebar-right skeleton">
<div class="pl-5">
<div class="w-32 h-3 mb-4 bg-skeleton-bg rounded-full loading"></div>
<div class="w-48 h-3 mb-4 bg-skeleton-bg rounded-full loading"></div>
<div class="w-40 h-3 mb-4 bg-skeleton-bg rounded-full loading"></div>
</div>
</div>
<!-- User should be able to hide sidebar right -->
<doc-sidebar-right v-cloak></doc-sidebar-right>
</div>
</div>
</div>
<doc-search-mobile></doc-search-mobile>
<doc-back-to-top></doc-back-to-top>
</div>
<div id="retype-overlay-target"></div>
<script data-cfasync="false">window.__DOCS__ = { "title": "Functions", level: 2, icon: "file", hasPrism: true, hasMermaid: false, hasMath: false, tocDepth: 23 }</script>
</body>
</html>