@@ -157,80 +157,80 @@ NB_MODULE(_drjit_ext, m_) {
157157 .value (" Permute" , ReduceMode::Permute, doc_ReduceMode_Permute)
158158 .value (" Expand" , ReduceMode::Expand, doc_ReduceMode_Expand);
159159
160- // nb::enum_<VarState>(m, "VarState", doc_VarState)
161- // .value("Invalid", VarState::Invalid, doc_VarState_Invalid)
162- // .value("Literal", VarState::Literal, doc_VarState_Literal)
163- // .value("Undefined", VarState::Undefined, doc_VarState_Undefined)
164- // .value("Unevaluated", VarState::Unevaluated, doc_VarState_Unevaluated)
165- // .value("Evaluated", VarState::Evaluated, doc_VarState_Evaluated)
166- // .value("Dirty", VarState::Dirty, doc_VarState_Dirty)
167- // .value("Symbolic", VarState::Symbolic, doc_VarState_Symbolic)
168- // .value("Mixed", VarState::Mixed, doc_VarState_Mixed);
169-
170- // nb::enum_<dr::FilterMode>(m, "FilterMode")
171- // .value("Nearest", dr::FilterMode::Nearest)
172- // .value("Linear", dr::FilterMode::Linear);
173-
174- // nb::enum_<dr::WrapMode>(m, "WrapMode")
175- // .value("Repeat", dr::WrapMode::Repeat)
176- // .value("Clamp", dr::WrapMode::Clamp)
177- // .value("Mirror", dr::WrapMode::Mirror);
178-
179- // m.def("has_backend", &jit_has_backend, doc_has_backend);
180-
181- // m.def("sync_thread", &jit_sync_thread, doc_sync_thread)
182- // .def("flush_kernel_cache", &jit_flush_kernel_cache, doc_flush_kernel_cache)
183- // .def("flush_malloc_cache", &jit_flush_malloc_cache, doc_flush_malloc_cache)
184- // .def("thread_count", &jit_llvm_thread_count, doc_thread_count)
185- // .def("set_thread_count", &jit_llvm_set_thread_count, doc_set_thread_count)
186- // .def("expand_threshold", &jit_llvm_expand_threshold, doc_expand_threshold)
187- // .def("set_expand_threshold", &jit_llvm_set_expand_threshold, doc_set_expand_threshold);
188-
189- // m.def("flag", [](JitFlag f) { return jit_flag(f) != 0; }, doc_flag);
190- // m.def("set_flag", &set_flag_py, doc_set_flag);
191-
192- // struct scoped_set_flag_py {
193- // JitFlag flag;
194- // bool value, backup = false;
195- // scoped_set_flag_py(JitFlag flag, bool value)
196- // : flag(flag), value(value) { }
197-
198- // void __enter__() {
199- // backup = jit_flag(flag);
200- // set_flag_py(flag, value);
201- // }
202-
203- // void __exit__(nb::handle, nb::handle, nb::handle) {
204- // set_flag_py(flag, backup);
205- // }
206- // };
207-
208- // nb::class_<scoped_set_flag_py>(m, "scoped_set_flag",
209- // doc_scoped_set_flag)
210- // .def(nb::init<JitFlag, bool>(), "flag"_a, "value"_a = true)
211- // .def("__enter__", &scoped_set_flag_py::__enter__)
212- // .def("__exit__", &scoped_set_flag_py::__exit__, nb::arg().none(),
213- // nb::arg().none(), nb::arg().none());
214-
215- // // Intrusive reference counting
216- // nb::intrusive_init(
217- // [](PyObject *o) noexcept {
218- // nb::gil_scoped_acquire guard;
219- // Py_INCREF(o);
220- // },
221- // [](PyObject *o) noexcept {
222- // if (!nb::is_alive())
223- // return;
224- // nb::gil_scoped_acquire guard;
225- // Py_DECREF(o);
226- // });
227-
228- // nb::class_<nb::intrusive_base> ib(
229- // detail, "IntrusiveBase",
230- // nb::intrusive_ptr<nb::intrusive_base>(
231- // [](nb::intrusive_base *o, PyObject *po) noexcept {
232- // o->set_self_py(po);
233- // }), doc_intrusive_base);
160+ nb::enum_<VarState>(m, " VarState" , doc_VarState)
161+ .value (" Invalid" , VarState::Invalid, doc_VarState_Invalid)
162+ .value (" Literal" , VarState::Literal, doc_VarState_Literal)
163+ .value (" Undefined" , VarState::Undefined, doc_VarState_Undefined)
164+ .value (" Unevaluated" , VarState::Unevaluated, doc_VarState_Unevaluated)
165+ .value (" Evaluated" , VarState::Evaluated, doc_VarState_Evaluated)
166+ .value (" Dirty" , VarState::Dirty, doc_VarState_Dirty)
167+ .value (" Symbolic" , VarState::Symbolic, doc_VarState_Symbolic)
168+ .value (" Mixed" , VarState::Mixed, doc_VarState_Mixed);
169+
170+ nb::enum_<dr::FilterMode>(m, " FilterMode" )
171+ .value (" Nearest" , dr::FilterMode::Nearest)
172+ .value (" Linear" , dr::FilterMode::Linear);
173+
174+ nb::enum_<dr::WrapMode>(m, " WrapMode" )
175+ .value (" Repeat" , dr::WrapMode::Repeat)
176+ .value (" Clamp" , dr::WrapMode::Clamp)
177+ .value (" Mirror" , dr::WrapMode::Mirror);
178+
179+ m.def (" has_backend" , &jit_has_backend, doc_has_backend);
180+
181+ m.def (" sync_thread" , &jit_sync_thread, doc_sync_thread)
182+ .def (" flush_kernel_cache" , &jit_flush_kernel_cache, doc_flush_kernel_cache)
183+ .def (" flush_malloc_cache" , &jit_flush_malloc_cache, doc_flush_malloc_cache)
184+ .def (" thread_count" , &jit_llvm_thread_count, doc_thread_count)
185+ .def (" set_thread_count" , &jit_llvm_set_thread_count, doc_set_thread_count)
186+ .def (" expand_threshold" , &jit_llvm_expand_threshold, doc_expand_threshold)
187+ .def (" set_expand_threshold" , &jit_llvm_set_expand_threshold, doc_set_expand_threshold);
188+
189+ m.def (" flag" , [](JitFlag f) { return jit_flag (f) != 0 ; }, doc_flag);
190+ m.def (" set_flag" , &set_flag_py, doc_set_flag);
191+
192+ struct scoped_set_flag_py {
193+ JitFlag flag;
194+ bool value, backup = false ;
195+ scoped_set_flag_py (JitFlag flag, bool value)
196+ : flag(flag), value(value) { }
197+
198+ void __enter__ () {
199+ backup = jit_flag (flag);
200+ set_flag_py (flag, value);
201+ }
202+
203+ void __exit__ (nb::handle, nb::handle, nb::handle) {
204+ set_flag_py (flag, backup);
205+ }
206+ };
207+
208+ nb::class_<scoped_set_flag_py>(m, " scoped_set_flag" ,
209+ doc_scoped_set_flag)
210+ .def (nb::init<JitFlag, bool >(), " flag" _a, " value" _a = true )
211+ .def (" __enter__" , &scoped_set_flag_py::__enter__)
212+ .def (" __exit__" , &scoped_set_flag_py::__exit__, nb::arg ().none (),
213+ nb::arg ().none (), nb::arg ().none ());
214+
215+ // Intrusive reference counting
216+ nb::intrusive_init (
217+ [](PyObject *o) noexcept {
218+ nb::gil_scoped_acquire guard;
219+ Py_INCREF (o);
220+ },
221+ [](PyObject *o) noexcept {
222+ if (!nb::is_alive ())
223+ return ;
224+ nb::gil_scoped_acquire guard;
225+ Py_DECREF (o);
226+ });
227+
228+ nb::class_<nb::intrusive_base> ib (
229+ detail, " IntrusiveBase" ,
230+ nb::intrusive_ptr<nb::intrusive_base>(
231+ [](nb::intrusive_base *o, PyObject *po) noexcept {
232+ o->set_self_py (po);
233+ }), doc_intrusive_base);
234234
235235 // jit_init_async(backends);
236236
0 commit comments