* Declarative modules: make sure to emmit doc comments and other attributes
* Adds a test
* Apply suggestions from code review
---------
Co-authored-by: David Hewitt <mail@davidhewitt.dev>
* Automated module= field creation in declarative modules
Sets automatically the "module" field of all contained classes and submodules in a declarative module
Adds the "module" field to pymodule attributes in order to set the name of the parent modules. By default, the module is assumed to be a root module
* fix guide test error
---------
Co-authored-by: David Hewitt <mail@davidhewitt.dev>
This makes it possible to use rust keywords as the name of python class
methods and standalone functions. For example:
```
struct MyClass {
}
impl MyClass {
#[new]
fn new() -> Self {
MyClass {}
}
#[pyo3(name = "struct")]
fn struct_method(&self) -> usize {
42
}
}
fn struct_function() -> usize {
42
}
```
From the [`syn::Ident`
documentation](https://docs.rs/syn/2.0.66/syn/struct.Ident.html):
> An identifier constructed with `Ident::new` is permitted to be a Rust
keyword, though parsing one through its
[`Parse`](https://docs.rs/syn/2.0.66/syn/parse/trait.Parse.html)
implementation rejects Rust keywords. Use `input.call(Ident::parse_any)`
when parsing to match the behaviour of `Ident::new`.
Fixes issue #4225
* fix incorrect `__richcmp__` for `eq_int` only simple enums
* add tests for deprecated simple enum eq behavior
* only emit deprecation warning if neither `eq` nor `eq_int` were given
* require `eq` for `eq_int`
* Added `ToPyObject` and `Into<PyObject>` impls for `PyBackedStr`.
* Create 4205.added.md
* Added attributes limiting the `ToPyObject` and `IntoPy<PyObject>` impls to the case where `cfg(any(Py_3_10, not(Py_LIMITED_API)))`. When this cfg does not apply, the conversion is less trivial since the `storage` is actually `PyBytes`, not `PyString`.
* Fixed imports format.
* Updated the `ToPyObject` and `IntoPy<PyObject>` impls to support the `cfg(not(any(Py_3_10, not(Py_LIMITED_API))))` case by converting the `PyBytes` back to `PyString`.
* Added `ToPyObject` and `IntoPy<PyObject>` impls for `PyBackedBytes`.
* Added tests for the `PyBackedBytes` conversion impls.
* Updated newsfragment entry to include the `PyBackedBytes` impls.
* Changed the `IntoPy` and `ToPyObject` impls for `PyBackedBytes` to produce `PyBytes` regardless of the backing variant. Updated tests to demonstrate this.
* retrigger checks
* Updated `PyBackedStr` conversion tests to extract the result as a `PyBackedStr` instead of `&str` since the latter is not supported under some `cfg`'s.
* Fixed `IntoPy<PyObject> for PyBackedBytes` impl to create `bytes` for both storage types as intended. Updated test to properly catch the error.
---------
Co-authored-by: jrudolph <jrudolph@anl.gov>
* Add vscode folder to gitignore
* Initial work on PyWeakRef (weakref.ReferenceType)
* Add documentation for PyWeakRef::upgrade
* Add missing docs for PyWeakRef
* Add PyWeakProxy
* Add PyWeakCallableProxy
* Add PyWeakRefMethods::upgrade_exact and prevent unnecessary panicing
* Change PyWeakRefMethods to exclude infeasible errors.
As a result of the checks made about the objectpointers in PyO3, all
errors in PyWeakref_GetObject are already caught. Therefor there is no
need to check for these errors in the non-ffi layer.
* Add towncrier changes
* Update weakref type doctests to use `py.run_bound`
* Fix to adhere to MSRV
* Make weakref tests independent from macros feature
* Change Weakref tests
* Remove forgotten Debug marcos
* Processed .gitignore and PyResultExt feedback
* Change new methods of weakref types to remove dangling pointers
* Change to reflect deprecation of PyErr::value for PyErr::value_bound
* Change Tests so different class name in older python versions is accounted for
* Change formatting
* Make tests ABI3 compatible
* Prevent the use of PyClass in test for weakref under abi3 Python 3.7 and 3.8
* Disable weakref types when targeting PyPy
* Remove needless borrow from CallableProxy test
* Add Borrowed variants of upgrade and upgrade exact to trait
* Added tests for weakref borrow_upgrade methods
* Change PyWeakRefMethods method names to be more consistent
* Change weakref constructors to take PyAny for main target
* Add track_caller to all panicing weakref methods
* Add PyWeakRefMethods::upgrade*_as_unchecked
* Fix PyWeakProxy and PyWeakCallableProxy Documentation
* Replace deprecated wrap_pyfunction with bound equivalent
* Add (Generic) PyWeakref Type
* Reworked Proxy types into one (PyWeakrefProxy)
* Rename PyWeakRef to PyWeakrefReference
* Change PyWeakrefReference to only use type pointer when it exists
* Remove `#[track_caller]` annotations for now
* Make the gil-refs function feature dependent
* Remove unused AsPyPointer import
* Change docs links to PyNone to not include private module
* Fix string based examples
* Change tests to work for Python 3.13
* Fix cargo clippy for Python 3.13
---------
Co-authored-by: David Hewitt <mail@davidhewitt.dev>
* feat: support pyclass on tuple enums
* cargo fmt
* changelog
* ruff format
* rebase with adaptation for FnArg refactor
* fix class.md from pr comments
* add enum tuple variant getitem implementation
* fmt
* progress toward getitem and len impl on derive pyclass for complex enum tuple
* working getitem and len slots for complex tuple enum pyclass derivation
* refactor code generation
* address PR concerns
- take py from function argument on get_item
- make more general slot def implementation
- remove unnecessary function arguments
- add testcases for uncovered cases including future feature match_args
* add tracking issue
* fmt
* ruff
* remove me
* support match_args for tuple enum
* integrate FnArg now takes Cow
* fix empty and single element tuples
* use impl_py_slot_def for cimplex tuple enum slots
* reverse erroneous doc change
* Address latest comments
* formatting suggestion
* fix :
- clippy beta
- better compile error (+related doc and test)
---------
Co-authored-by: Chris Arderne <chris@translucent.app>
* Add feature controlling the global reference pool to enable avoiding its overhead.
* Document reference-pool feature in the performance guide.
* Invert semantics of feature to disable reference pool so the new behaviour becomes opt-in
* Remove delayed reference count increments as we cannot prevent reference count errors as long as these are available
* Adjust tests to be compatible with disable-reference-pool feature
* Adjust tests to be compatible with py-clone feature
* Adjust the GIL benchmark to the updated reference pool semantics.
* Further extend and clarify the documentation of the py-clone and disable-reference-pool features
* Replace disable-reference-pool feature by pyo3_disable_reference_pool conditional compilation flag
Such a flag is harder to use and thereby also harder to abuse. This seems
appropriate as this is purely a performance-oriented change which show only be
enabled by leaf crates and brings with it additional highly implicit sources of
process aborts.
* Add pyo3_leak_on_drop_without_reference_pool to turn aborts into leaks when the global reference pool is disabled and the GIL is not held
* Add `num-rational` support for Python's `fractions.Fraction` type
* Add newsfragment
* Use Bound instead
* Handle objs which atts are incorrect
* Add extra test
* Add tests for wasm32 arch
* add type for wasm32 clipppy
This allow also storing idents that were generated
as part of the macro instead of only ones the were
present in the source code. This is needed for
example in complex enum tuple variants.