pyo3_pytests/
pyfunctions.rs

1use pyo3::prelude::*;
2use pyo3::types::{PyDict, PyTuple};
3
4#[pyfunction(signature = ())]
5fn none() {}
6
7type Any<'py> = Bound<'py, PyAny>;
8type Dict<'py> = Bound<'py, PyDict>;
9type Tuple<'py> = Bound<'py, PyTuple>;
10
11#[pyfunction(signature = (a, b = None, *, c = None))]
12fn simple<'py>(
13    a: Any<'py>,
14    b: Option<Any<'py>>,
15    c: Option<Any<'py>>,
16) -> (Any<'py>, Option<Any<'py>>, Option<Any<'py>>) {
17    (a, b, c)
18}
19
20#[pyfunction(signature = (a, b = None, *args, c = None))]
21fn simple_args<'py>(
22    a: Any<'py>,
23    b: Option<Any<'py>>,
24    args: Tuple<'py>,
25    c: Option<Any<'py>>,
26) -> (Any<'py>, Option<Any<'py>>, Tuple<'py>, Option<Any<'py>>) {
27    (a, b, args, c)
28}
29
30#[pyfunction(signature = (a, b = None, c = None, **kwargs))]
31fn simple_kwargs<'py>(
32    a: Any<'py>,
33    b: Option<Any<'py>>,
34    c: Option<Any<'py>>,
35    kwargs: Option<Dict<'py>>,
36) -> (
37    Any<'py>,
38    Option<Any<'py>>,
39    Option<Any<'py>>,
40    Option<Dict<'py>>,
41) {
42    (a, b, c, kwargs)
43}
44
45#[pyfunction(signature = (a, b = None, *args, c = None, **kwargs))]
46fn simple_args_kwargs<'py>(
47    a: Any<'py>,
48    b: Option<Any<'py>>,
49    args: Tuple<'py>,
50    c: Option<Any<'py>>,
51    kwargs: Option<Dict<'py>>,
52) -> (
53    Any<'py>,
54    Option<Any<'py>>,
55    Tuple<'py>,
56    Option<Any<'py>>,
57    Option<Dict<'py>>,
58) {
59    (a, b, args, c, kwargs)
60}
61
62#[pyfunction(signature = (*args, **kwargs))]
63fn args_kwargs<'py>(
64    args: Tuple<'py>,
65    kwargs: Option<Dict<'py>>,
66) -> (Tuple<'py>, Option<Dict<'py>>) {
67    (args, kwargs)
68}
69
70#[pymodule(gil_used = false)]
71pub fn pyfunctions(m: &Bound<'_, PyModule>) -> PyResult<()> {
72    m.add_function(wrap_pyfunction!(none, m)?)?;
73    m.add_function(wrap_pyfunction!(simple, m)?)?;
74    m.add_function(wrap_pyfunction!(simple_args, m)?)?;
75    m.add_function(wrap_pyfunction!(simple_kwargs, m)?)?;
76    m.add_function(wrap_pyfunction!(simple_args_kwargs, m)?)?;
77    m.add_function(wrap_pyfunction!(args_kwargs, m)?)?;
78    Ok(())
79}
⚠️ Internal Docs ⚠️ Not Public API 👉 Official Docs Here