Commit graph

273 commits

Author SHA1 Message Date
Icxolu 10152a7078
feature gate PyCell (#4177)
* feature gate `PyCell`

* feature gate `HasPyGilRef` completely

* bump version
2024-05-12 18:30:08 +00:00
Adam Reichold c5f9001985
Remove deferred reference count increments and make the global reference pool optional (#4095)
* 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
2024-05-11 14:48:45 +00:00
Icxolu 1e8e09dce3
feature gate as/into_gil_ref APIs (Part 3) (#4172) 2024-05-10 17:03:57 +00:00
Icxolu 21c02484d0
feature gate APIs using into_gil_ref (Part 2) (#4166) 2024-05-09 22:21:48 +00:00
Icxolu 635cb8075c
feature gate APIs using into_gil_ref (Part 1) (#4160) 2024-05-09 07:58:44 +00:00
Icxolu dc9a41521a
feature gate deprecated APIs for Py (#4142) 2024-05-01 10:57:03 +00:00
Icxolu d5452bcd8d
feature gate deprecated APIs for PyType, PyTypeInfo and PySuper (#4134) 2024-04-28 21:03:51 +00:00
Icxolu 5d2f5b5702
feature gate deprecated APIs for PyDict (#4108) 2024-04-23 05:48:27 +00:00
David Hewitt cd28e1408e
add #[track_caller] to all Py/Bound/Borrowed methods which panic (#4098) 2024-04-19 11:44:36 +00:00
David Hewitt 9d932c1061
add #[inline] hints on many Bound and Borrowed methods (#4024) 2024-03-30 22:10:21 +00:00
David Hewitt cedac43dbb
add Bound::as_unbound (#3973)
* add Bound::as_unbound

* Update src/instance.rs
2024-03-20 12:52:09 +00:00
Icxolu da24f0cf93
exposes Borrowed::to_owned as public API (#3963)
* exposes `Borrowed::to_owned` as public API

* add newsfragment
2024-03-17 09:17:09 +00:00
Icxolu 5c86dc35c1
allow borrowed extracts with gil-refs disabled (#3959) 2024-03-15 07:53:52 +00:00
David Hewitt 770d9b7f01
add FromPyObjectBound trait for extracting &str without GIL Refs (#3928)
* 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
2024-03-08 07:43:48 +00:00
Icxolu 70a7aa808d
deprecate the use of PyCell in favor of Bound and Py (#3916)
* deprecate the use of `PyCell` in favor of `Bound` and `Py`

* update `FromPyObject` for `T: PyClass + Clone` impl

* move `PyCell` deprecation to the `gil-refs` feature gate and add a migration note
2024-03-03 14:47:25 +00:00
David Hewitt 2e56f659ed
split PyCell and PyClassObject concepts (#3917)
* add test for refguard ref counting

* split `PyCell` and `PyClassObject` concepts

* rework `create_cell` to `create_class_object`

* Apply suggestions from code review

Co-authored-by: Icxolu <10486322+Icxolu@users.noreply.github.com>

* review: Icxolu feedback

---------

Co-authored-by: Icxolu <10486322+Icxolu@users.noreply.github.com>
2024-03-03 07:00:59 +00:00
Icxolu 1c5265e1c2
deprecate from_borrowed_ptr methods (#3915)
* deprecate `from_borrowed_ptr` methods

This deprecates the methods on the `Python`
marker, aswell as `FromPyPointer`

* use `BoundRef` to defer ref cnt inc until after the error case
2024-03-01 20:51:53 +00:00
Lily Foote 56683ed553
deprecate Py::as_ref (#3864)
* Deprecate Py::as_ref

* Reword as_ref deprecation note

Co-authored-by: David Hewitt <mail@davidhewitt.dev>

* Tidy up remaining uses of Py::as_ref

Co-authored-by: David Hewitt <mail@davidhewitt.dev>

* Pass hello into println! explicitly

---------

Co-authored-by: David Hewitt <mail@davidhewitt.dev>
2024-02-29 07:15:34 +00:00
David Hewitt 93704047a5
store Bound<T> inside PyRef and PyRefMut (#3860)
* store `Bound<T>` inside `PyRef` and `PyRefMut`

* update `FromPyObject` for `PyRef` to use `extract_bound`

* review: Icxolu feedback
2024-02-27 18:56:22 +00:00
David Matos 0f29feca8f
Tidy up deprecation message on bound api (#3893) 2024-02-24 13:25:06 +00:00
Lily Foote 22a23ffb31
Tidy some usage of py.from_borrowed_ptr and py.from_borrowed_ptr_or_opt (#3877)
* Tidy some usage of py.from_borrowed_ptr

* Add BoundRef::ref_from_ptr_or_opt
2024-02-22 23:06:55 +00:00
Icxolu 4f8ee96881
fix AsRef and Deref impls on Bound<T> (#3879)
* fix `AsRef` and `Deref` of `Bound<T>` to `Bound<PyAny>`

* cleanup unnessesary `.as_any()` calls

* remove trait bound on `AsRef` impl

* add comment for `Deref` trait bound

* rename marker trait
2024-02-22 22:38:42 +00:00
David Hewitt 9e74c858c2
add PyModule::new_bound and PyModule::import_bound (#3775)
* add `PyModule::new` and `PyModule::import_bound`

* review: Icxolu feedback
2024-02-22 09:35:47 +00:00
Lily Foote 5ddcd46980
Deprecate py.from_owned_ptr methods (#3875)
* Deprecate `py.from_owned_ptr` methods

* Refactor PyString.to_str

Co-authored-by: David Hewitt <mail@davidhewitt.dev>

---------

Co-authored-by: David Hewitt <mail@davidhewitt.dev>
2024-02-22 00:05:08 +00:00
Juniper Tyree 885883bf68
Add Py::drop_ref method (#3871)
* add Py::drop_ref method

* add changelog entry

* fix ffi import

* integrate review feedback

* Add a test

* Fix some build errors

* Fix some more build errors
2024-02-21 22:56:03 +00:00
Lily Foote a93900686e
Deprecate Py::into_ref (#3867)
* Migrate into_ref calls to Bound api

* Mark Py::into_ref as deprecated
2024-02-20 07:10:45 +00:00
David Hewitt 8ac7834f98
docs: update example for storing Py<T> in structs (#3876) 2024-02-20 07:08:49 +00:00
David Hewitt 96b8c9facf
migrate some final FromPyObject implementations to the Bound API (#3869)
* update `Py::extract` to use `extract_bound`

* update docstring of `FromPyObject`

* move `Option` conversions to new module & update

* move `Cell` conversions to new module & update
2024-02-19 22:14:26 +00:00
David Hewitt a85ed34c45
add Bound API constructors from borrowed pointers (#3858)
* make `Borrowed` ptr constructors public

* introduce `Bound::from_borrowed_ptr` constructors

* clippy `assert_eq` -> `assert`

* rerrange function order and correct docstrings
2024-02-18 22:03:43 +00:00
David Hewitt f04ad56df4
implement PyTypeMethods (#3705)
* implement `PyTypeMethods`

* introduce `PyType` bound constructors

* `from_type_ptr_bound` instead of `from_type_ptr_borrowed`

* correct conditional code

* just make `from_type_ptr_bound` create an owned `Bound`

* correct docstrings

Co-authored-by: Icxolu <10486322+Icxolu@users.noreply.github.com>

* Rework as `PyType::from_borrowed_type_ptr`

* correct doc link to `from_borrowed_type_ptr`

Co-authored-by: Lily Foote <code@lilyf.org>

* remove unneeded lifetime name

---------

Co-authored-by: Icxolu <10486322+Icxolu@users.noreply.github.com>
Co-authored-by: Lily Foote <code@lilyf.org>
2024-02-18 03:07:48 +00:00
Icxolu 1d295a12a0
port PyObject::downcast to Bound API (#3856)
* port `PyObject::downcast` to `Bound` API

* relax traits bounds for unchecked variant in `Bound` API

* deprecate `Python::(checked_)cast_as`

* reword deprecation warning
2024-02-18 01:11:43 +00:00
Lily Foote 0dd568d397
Use the new bound API instead of .as_ref(py) (#3853)
* Use the new bound API instead of .as_ref(py)

* Move import into a nested scope

* Use to_cow instead of to_str for compatibility

`to_str` is not available before Python 3.10 on the limited api.

* Relax &self lifetimes

* Use Bound<'py, PyAny> in test Mapping signatures

* Use .as_bytes(py)

* Simplify ThrowCallback::throw signature

* Avoid .as_any call with Py api instead of Bound
2024-02-18 00:09:56 +00:00
Lily Foote 5f42c02e4f
Remove stray " character from docstring (#3852) 2024-02-17 17:04:35 +00:00
David Hewitt ec6d587218
support Bound for classmethod and pass_module (#3831)
* support `Bound` for `classmethod` and `pass_module`

* `from_ref_to_ptr` -> `ref_from_ptr`

* add detailed docs to `ref_from_ptr`
2024-02-16 00:36:11 +00:00
Icxolu 0c12d9137f
port Python::import to Bound API (#3832)
* port `Python::import` to `Bound` API

* tidy up imports in tests/test_datetime_import.rs

---------

Co-authored-by: David Hewitt <mail@davidhewitt.dev>
2024-02-14 00:24:37 +00:00
Icxolu c359f5ca1d
deprecate PyDict::new constructor (#3823)
* deprecate `PyDict::new`

* update benchmarks

* convert `test_frompyobject`
2024-02-11 23:55:56 +00:00
Icxolu e45fbe493c port IntoPyDict to Bound API 2024-02-10 15:47:26 +01:00
David Hewitt 86f294f6e6 expose Bound::from_owned_ptr etc 2024-02-05 18:27:43 +00:00
David Hewitt 02f1df69b5
Merge pull request #3792 from davidhewitt/bound-pyclass-2
pyclass methods for `Bound`
2024-02-05 10:38:30 +00:00
David Hewitt 42843de47b pyclass methods for Bound 2024-02-05 09:41:22 +00:00
David Hewitt de93d15eeb ci: fix beta clippy map_clone warning 2024-02-05 07:57:27 +00:00
David Hewitt 0d4df9c19d adjust FromPyObject implementations to always use 'py lifetime 2024-02-04 14:22:03 +00:00
David Hewitt d8c5e7943c
Merge pull request #3790 from Icxolu/bool
add `Bound` constructor for `PyBool`
2024-02-03 13:10:30 +00:00
Icxolu af21a9dc74 add Bound constructor for PyBool 2024-02-03 12:06:50 +01:00
David Hewitt 8f8d4d33fa
Merge pull request #3776 from davidhewitt/bound-extract
migrate `FromPyObject` for `Bound` and `Py` to new APIs
2024-02-02 23:10:47 +00:00
David Hewitt 49a57dfd18 clean up implementations in src/instance.rs 2024-02-01 10:14:58 +00:00
David Hewitt 4437e8f616 add Py::as_any and Py::into_any 2024-02-01 09:07:36 +00:00
David Hewitt cbc97f8ea9 add Bound::as_any and Bound::into_any 2024-02-01 09:01:33 +00:00
David Hewitt 2f00eb1423 for now just change return type of intern! 2024-01-30 13:28:07 +00:00
David Hewitt aa139ad422 add intern_bound! macro 2024-01-30 10:58:19 +00:00