* 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
* graalpy: recognize graalpy implementation when building
* graalpy: global Ellipse, None, NotImplemented, True, and False are only available as pointers
* graalpy: PyObject struct is opaque, use functions for everything
* graalpy: missing many of the same functions as pypy
* graalpy: do not have 128bit conversion functions
* graalpy: add functions for datetime accessor macros
* graalpy: add implementations for list macro functions
* graalpy: skip tuple macros
* graalpy: always use extern Py_CompileString function
* graalpy: disable assertion that does not apply to graalpy
* graalpy: floatobject structure is opaque on graalpy
* graalpy: ignore gc dependent test
* graalpy: add CI config
* graalpy: run rust fmt
* graalpy: add changelog entry
* graalpy: discover interpreter on PATH
* graalpy: interpreter id is not applicable to graalpy (just like pypy)
* graalpy: skip tests that cannot work on GraalPy
* graalpy: fix constructing normalized Err instances
Co-authored-by: David Hewitt <mail@davidhewitt.dev>
* graalpy: correct capi library name, but skip rust tests due to missing symbols
* graalpy: no support for C extensions on windows in latest release
* graalpy: declare support versions
* graalpy: frame, code, method, and function objects access from C API is mostly missing
* graalpy: take care only to expose C structure that GraalPy allocates
* graalpy: Bail out if graalpy version is less than what we support
---------
Co-authored-by: David Hewitt <mail@davidhewitt.dev>
* add `FromPyObjectBound` adjustment for `&str` without GIL Refs
* review: alex, Icxolu feedback
* add newsfragment
* add newsfragment for `FromPyObject` trait change
* make some examples compatible with abi3 < 3.10
* seal `FromPyObjectBound`
* fixup chrono_tz conversion