-
Notifications
You must be signed in to change notification settings - Fork 796
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 1b0a4b1
Showing
4,230 changed files
with
1,477,558 additions
and
0 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
Cargo.lock | ||
__pycache__ | ||
examples/ | ||
pytests/ | ||
target/ | ||
.hypothesis | ||
netlify_build |
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
pyo3.rs |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
This file makes sure that Github Pages doesn't process mdBook's output. |
Large diffs are not rendered by default.
Oops, something went wrong.
Binary file not shown.
Binary file not shown.
2,671 changes: 2,671 additions & 0 deletions
2,671
v0.10.0/FontAwesome/fonts/fontawesome-webfont.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,237 @@ | ||
<!DOCTYPE HTML> | ||
<html lang="en" class="sidebar-visible no-js light"> | ||
<head> | ||
<!-- Book generated using mdBook --> | ||
<meta charset="UTF-8"> | ||
<title>Advanced Topics - PyO3 user guide</title> | ||
|
||
|
||
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> | ||
<meta name="description" content="PyO3 user guide"> | ||
<meta name="viewport" content="width=device-width, initial-scale=1"> | ||
<meta name="theme-color" content="#ffffff" /> | ||
|
||
<link rel="shortcut icon" href="favicon.png"> | ||
<link rel="stylesheet" href="css/variables.css"> | ||
<link rel="stylesheet" href="css/general.css"> | ||
<link rel="stylesheet" href="css/chrome.css"> | ||
<link rel="stylesheet" href="css/print.css" media="print"> | ||
|
||
<!-- Fonts --> | ||
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css"> | ||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css"> | ||
<link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500" rel="stylesheet" type="text/css"> | ||
|
||
<!-- Highlight.js Stylesheets --> | ||
<link rel="stylesheet" href="highlight.css"> | ||
<link rel="stylesheet" href="tomorrow-night.css"> | ||
<link rel="stylesheet" href="ayu-highlight.css"> | ||
|
||
<!-- Custom theme stylesheets --> | ||
|
||
|
||
|
||
</head> | ||
<body> | ||
<!-- Provide site root to javascript --> | ||
<script type="text/javascript"> | ||
var path_to_root = ""; | ||
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "light" : "light"; | ||
</script> | ||
|
||
<!-- Work around some values being stored in localStorage wrapped in quotes --> | ||
<script type="text/javascript"> | ||
try { | ||
var theme = localStorage.getItem('mdbook-theme'); | ||
var sidebar = localStorage.getItem('mdbook-sidebar'); | ||
|
||
if (theme.startsWith('"') && theme.endsWith('"')) { | ||
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | ||
} | ||
|
||
if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | ||
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | ||
} | ||
} catch (e) { } | ||
</script> | ||
|
||
<!-- Set the theme before any content is loaded, prevents flash --> | ||
<script type="text/javascript"> | ||
var theme; | ||
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | ||
if (theme === null || theme === undefined) { theme = default_theme; } | ||
var html = document.querySelector('html'); | ||
html.classList.remove('no-js') | ||
html.classList.remove('light') | ||
html.classList.add(theme); | ||
html.classList.add('js'); | ||
</script> | ||
|
||
<!-- Hide / unhide sidebar before it is displayed --> | ||
<script type="text/javascript"> | ||
var html = document.querySelector('html'); | ||
var sidebar = 'hidden'; | ||
if (document.body.clientWidth >= 1080) { | ||
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | ||
sidebar = sidebar || 'visible'; | ||
} | ||
html.classList.remove('sidebar-visible'); | ||
html.classList.add("sidebar-" + sidebar); | ||
</script> | ||
|
||
<nav id="sidebar" class="sidebar" aria-label="Table of contents"> | ||
<div id="sidebar-scrollbox" class="sidebar-scrollbox"> | ||
<ol class="chapter"><li class="expanded "><a href="get_started.html"><strong aria-hidden="true">1.</strong> Getting Started</a></li><li class="expanded "><a href="module.html"><strong aria-hidden="true">2.</strong> Python Modules</a></li><li class="expanded "><a href="function.html"><strong aria-hidden="true">3.</strong> Python Functions</a></li><li class="expanded "><a href="class.html"><strong aria-hidden="true">4.</strong> Python Classes</a></li><li class="expanded "><a href="conversions.html"><strong aria-hidden="true">5.</strong> Type Conversions</a></li><li class="expanded "><a href="exception.html"><strong aria-hidden="true">6.</strong> Python Exceptions</a></li><li class="expanded "><a href="python_from_rust.html"><strong aria-hidden="true">7.</strong> Calling Python from Rust</a></li><li class="expanded "><a href="types.html"><strong aria-hidden="true">8.</strong> GIL, mutability and object types</a></li><li class="expanded "><a href="parallelism.html"><strong aria-hidden="true">9.</strong> Parallelism</a></li><li class="expanded "><a href="debugging.html"><strong aria-hidden="true">10.</strong> Debugging</a></li><li class="expanded "><a href="advanced.html" class="active"><strong aria-hidden="true">11.</strong> Advanced Topics</a></li><li class="expanded "><a href="building_and_distribution.html"><strong aria-hidden="true">12.</strong> Building and Distribution</a></li><li class="expanded "><a href="pypy.html"><strong aria-hidden="true">13.</strong> PyPy support</a></li><li class="expanded "><a href="rust_cpython.html"><strong aria-hidden="true">14.</strong> Appendix A: PyO3 and rust-cpython</a></li><li class="expanded "><a href="migration.html"><strong aria-hidden="true">15.</strong> Appendix B: Migration Guide</a></li></ol> | ||
</div> | ||
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div> | ||
</nav> | ||
|
||
<div id="page-wrapper" class="page-wrapper"> | ||
|
||
<div class="page"> | ||
|
||
<div id="menu-bar" class="menu-bar"> | ||
<div id="menu-bar-sticky-container"> | ||
<div class="left-buttons"> | ||
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar"> | ||
<i class="fa fa-bars"></i> | ||
</button> | ||
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list"> | ||
<i class="fa fa-paint-brush"></i> | ||
</button> | ||
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu"> | ||
<li role="none"><button role="menuitem" class="theme" id="light">Light (default)</button></li> | ||
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li> | ||
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li> | ||
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li> | ||
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li> | ||
</ul> | ||
|
||
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar"> | ||
<i class="fa fa-search"></i> | ||
</button> | ||
|
||
</div> | ||
|
||
<h1 class="menu-title">PyO3 user guide</h1> | ||
|
||
<div class="right-buttons"> | ||
<a href="print.html" title="Print this book" aria-label="Print this book"> | ||
<i id="print-button" class="fa fa-print"></i> | ||
</a> | ||
|
||
</div> | ||
</div> | ||
</div> | ||
|
||
|
||
<div id="search-wrapper" class="hidden"> | ||
<form id="searchbar-outer" class="searchbar-outer"> | ||
<input type="search" name="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header"> | ||
</form> | ||
<div id="searchresults-outer" class="searchresults-outer hidden"> | ||
<div id="searchresults-header" class="searchresults-header"></div> | ||
<ul id="searchresults"> | ||
</ul> | ||
</div> | ||
</div> | ||
|
||
|
||
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | ||
<script type="text/javascript"> | ||
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | ||
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | ||
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) { | ||
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | ||
}); | ||
</script> | ||
|
||
<div id="content" class="content"> | ||
<main> | ||
<h1><a class="header" href="#advanced-topics" id="advanced-topics">Advanced topics</a></h1> | ||
<h2><a class="header" href="#ffi" id="ffi">FFI</a></h2> | ||
<p>PyO3 exposes much of Python's C API through the <code>ffi</code> module.</p> | ||
<p>The C API is naturally unsafe and requires you to manage reference counts, errors and specific invariants yourself. Please refer to the <a href="https://docs.python.org/3/c-api/">C API Reference Manual</a> and <a href="https://doc.rust-lang.org/nightly/nomicon/ffi.html">The Rustonomicon</a> before using any function from that API.</p> | ||
<h2><a class="header" href="#memory-management" id="memory-management">Memory Management</a></h2> | ||
<p>PyO3's "owned references" (<code>&PyAny</code> etc.) make PyO3 more ergonomic to use by ensuring that their lifetime can never be longer than the duration the Python GIL is held. This means that most of PyO3's API can assume the GIL is held. (If PyO3 could not assume this, every PyO3 API would need to take a <code>Python</code> GIL token to prove that the GIL is held.)</p> | ||
<p>The caveat to these "owned references" is that Rust references do not normally convey ownership (they are always <code>Copy</code>, and cannot implement <code>Drop</code>). Whenever a PyO3 API returns an owned reference, PyO3 stores it internally, so that PyO3 can decrease the reference count just before PyO3 releases the GIL.</p> | ||
<p>For most use cases this behaviour is invisible. Occasionally, however, users may need to clear memory usage sooner than PyO3 usually does. PyO3 exposes this functionality with the the <code>GILPool</code> struct. When a <code>GILPool</code> is dropped, <em><strong>all</strong></em> owned references created after the <code>GILPool</code> was created will be cleared.</p> | ||
<p>The unsafe function <code>Python::new_pool</code> allows you to create a new <code>GILPool</code>. When doing this, you must be very careful to ensure that once the <code>GILPool</code> is dropped you do not retain access any owned references created after the <code>GILPool</code> was created.</p> | ||
<h2><a class="header" href="#testing" id="testing">Testing</a></h2> | ||
<p>Currently, <a href="https://github.com/PyO3/pyo3/issues/341">#341</a> causes <code>cargo test</code> to fail with weird linking errors when the <code>extension-module</code> feature is activated. For now you can work around this by making the <code>extension-module</code> feature optional and running the tests with <code>cargo test --no-default-features</code>:</p> | ||
<pre><code class="language-toml">[dependencies.pyo3] | ||
version = "0.8.1" | ||
|
||
[features] | ||
extension-module = ["pyo3/extension-module"] | ||
default = ["extension-module"] | ||
</code></pre> | ||
|
||
</main> | ||
|
||
<nav class="nav-wrapper" aria-label="Page navigation"> | ||
<!-- Mobile navigation buttons --> | ||
|
||
<a rel="prev" href="debugging.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | ||
<i class="fa fa-angle-left"></i> | ||
</a> | ||
|
||
|
||
|
||
<a rel="next" href="building_and_distribution.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | ||
<i class="fa fa-angle-right"></i> | ||
</a> | ||
|
||
|
||
<div style="clear: both"></div> | ||
</nav> | ||
</div> | ||
</div> | ||
|
||
<nav class="nav-wide-wrapper" aria-label="Page navigation"> | ||
|
||
<a href="debugging.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | ||
<i class="fa fa-angle-left"></i> | ||
</a> | ||
|
||
|
||
|
||
<a href="building_and_distribution.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | ||
<i class="fa fa-angle-right"></i> | ||
</a> | ||
|
||
</nav> | ||
|
||
</div> | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script type="text/javascript"> | ||
window.playpen_copyable = true; | ||
</script> | ||
|
||
|
||
|
||
|
||
|
||
<script src="elasticlunr.min.js" type="text/javascript" charset="utf-8"></script> | ||
<script src="mark.min.js" type="text/javascript" charset="utf-8"></script> | ||
<script src="searcher.js" type="text/javascript" charset="utf-8"></script> | ||
|
||
|
||
<script src="clipboard.min.js" type="text/javascript" charset="utf-8"></script> | ||
<script src="highlight.js" type="text/javascript" charset="utf-8"></script> | ||
<script src="book.js" type="text/javascript" charset="utf-8"></script> | ||
|
||
<!-- Custom JS scripts --> | ||
|
||
|
||
|
||
|
||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
/* | ||
Based off of the Ayu theme | ||
Original by Dempfi (https://github.com/dempfi/ayu) | ||
*/ | ||
|
||
.hljs { | ||
display: block; | ||
overflow-x: auto; | ||
background: #191f26; | ||
color: #e6e1cf; | ||
padding: 0.5em; | ||
} | ||
|
||
.hljs-comment, | ||
.hljs-quote, | ||
.hljs-meta { | ||
color: #5c6773; | ||
font-style: italic; | ||
} | ||
|
||
.hljs-variable, | ||
.hljs-template-variable, | ||
.hljs-attribute, | ||
.hljs-attr, | ||
.hljs-regexp, | ||
.hljs-link, | ||
.hljs-selector-id, | ||
.hljs-selector-class { | ||
color: #ff7733; | ||
} | ||
|
||
.hljs-number, | ||
.hljs-builtin-name, | ||
.hljs-literal, | ||
.hljs-type, | ||
.hljs-params { | ||
color: #ffee99; | ||
} | ||
|
||
.hljs-string, | ||
.hljs-bullet { | ||
color: #b8cc52; | ||
} | ||
|
||
.hljs-title, | ||
.hljs-built_in, | ||
.hljs-section { | ||
color: #ffb454; | ||
} | ||
|
||
.hljs-keyword, | ||
.hljs-selector-tag, | ||
.hljs-symbol { | ||
color: #ff7733; | ||
} | ||
|
||
.hljs-name { | ||
color: #36a3d9; | ||
} | ||
|
||
.hljs-tag { | ||
color: #00568d; | ||
} | ||
|
||
.hljs-emphasis { | ||
font-style: italic; | ||
} | ||
|
||
.hljs-strong { | ||
font-weight: bold; | ||
} | ||
|
||
.hljs-addition { | ||
color: #91b362; | ||
} | ||
|
||
.hljs-deletion { | ||
color: #d96c75; | ||
} |
Oops, something went wrong.