# NVIDIA Warp - Tesseract Wrapper (+ Auto-Diff)

**URL:** <https://si-tesseract.discourse.group/t/nvidia-warp-tesseract-wrapper-auto-diff/96>\
**Category:** General\
**Created:** [July 2, 2025, 11:36pm UTC](https://si-tesseract.discourse.group/t/nvidia-warp-tesseract-wrapper-auto-diff/96 "2025-07-02T23:36:41Z")\
**Posts on this page:** 1\
**Showing post:** 6

<div class="post-metadata">

**Author:** ![Alessandro](https://yyz1.discourse-cdn.com/flex009/user_avatar/si-tesseract.discourse.group/alessandro/32/37_2.png) [@Alessandro](https://si-tesseract.discourse.group/u/Alessandro)\
**Post date:** [July 4, 2025, 12:14pm UTC](https://si-tesseract.discourse.group/t/nvidia-warp-tesseract-wrapper-auto-diff/96/6 "2025-07-04T12:14:46Z")

</div>

Got it; there should not be any ambiguity there: inside a Tesseract you specify how that component is to be differentiated when you implement the `jacobian`, `jacobian_vector_product`, and `vector_jacobian_product` endpoints.

You could do that without any AD at all, for example by implementing some finite differencing on your own, you could have some custom code for that which uses your AD framework of choice, or (for pytorch and jax) you can just use our “recipes” that can create the endpoints mentioned above automatically from your implementation of `apply` (see for instance [this JAX example](https://si-tesseract.discourse.group/t/jax-based-rosenbrock-function-minimization/48), where the user only needed to implement `apply` and the implementation of vjp/jvp and so on was pre-filled via a template by tesseract-core).

If you don’t implement any differentiable endpoint, `tesseract-core` will not do anything for you as a fallback, and that Tesseract will simply be non differentiable.

---

_[View the full topic](https://si-tesseract.discourse.group/t/nvidia-warp-tesseract-wrapper-auto-diff/96)._
