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#[pyfunction(signature = (a, /, b))]
71fn positional_only<'py>(a: Any<'py>, b: Any<'py>) -> (Any<'py>, Any<'py>) {
72    (a, b)
73}
74
75#[pyfunction(signature = (a = false, b = 0, c = 0.0, d = ""))]
76fn with_typed_args(a: bool, b: u64, c: f64, d: &str) -> (bool, u64, f64, &str) {
77    (a, b, c, d)
78}
79
80#[pymodule]
81pub mod pyfunctions {
82    #[pymodule_export]
83    use super::{
84        args_kwargs, none, positional_only, simple, simple_args, simple_args_kwargs, simple_kwargs,
85        with_typed_args,
86    };
87}