"Routes scalar and array differentiation, higher-order derivatives,
Scanned 9/8/2026
Install to Claude Code
npx -y skills add VectorSpaceLab/AREX-Skill --skill differentiation-core --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Differentiation Core?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vectorspacelab-differentiation-core)More formats (shields.io, HTML) on the badges page.
---
name: differentiation-core
description: "Routes scalar and array differentiation, higher-order derivatives,
and gradient checking for Autograd's core AD operators."
disable-model-invocation: true
metadata:
disco-role: operating
license: MIT
---
# Differentiation Core
Use this sub-skill when a task is about Autograd's core differentiation operators: scalar gradients, Jacobians, directional derivatives, Hessians, VJP/JVP pullbacks, generalized Gauss-Newton products, complex holomorphic derivatives, checkpointing, or numerical gradient checks.
## Trigger examples
- "I need `grad` or `value_and_grad` for a scalar loss."
- "I need `jacobian` or `elementwise_grad` for a vector-valued output."
- "I need a Hessian-vector product, `make_vjp`, or `make_jvp`."
- "I want to verify a derivative with `check_grads`."
- "My function has `if`/`while` branches and I want to know whether Autograd can still differentiate it."
## Read first
- `references/api-reference.md` for operator selection, return conventions, and mode relationships.
- `references/workflows.md` for scalar-loss, vector-output, higher-order, complex, and gradient-checking recipes.
- `references/troubleshooting.md` for scalar-output errors, argnum confusion, shape mismatches, holomorphic warnings, and checkpoint tradeoffs.
- `scripts/differentiation_smoke.py` for a runnable smoke that exercises the core operators without plotting.
## Boundary routing
- Wrapper behavior, NumPy/SciPy support, `A.dot(B)` / in-place / container pitfalls, and optional dependency questions belong in `../numpy-scipy-primitives/SKILL.md`.
- `primitive`, `defvjp`, `defjvp`, and custom VJP/JVP mechanics belong in `../extend-primitives/SKILL.md`.
- Optimizer wiring, flattening, and `fixed_point` belong in `../optimization-workflows/SKILL.md`.
## How to choose an operator
- Use reverse mode when the output is a real scalar and the input is large: `grad`, `value_and_grad`, or `make_vjp`.
- Use forward mode when the input is scalar or you want one directional derivative: `deriv` or `make_jvp`.
- Use `jacobian` when you need the full output-to-input sensitivity tensor.
- Use `elementwise_grad` when the function is real-valued and elementwise so the Jacobian is diagonal or column-summed.
- Use `hessian`, `hessian_tensor_product`, `hessian_vector_product`, or `make_ggnvp` when you need curvature without writing the matrix explicitly.
- Use `holomorphic_grad` only for complex-holomorphic functions.
- Use `checkpoint` when the function is deep and memory is the bottleneck.
- Use `grad_and_aux` when the function returns a scalar loss plus extra side information.
## Core rules
- `grad` and `value_and_grad` require a real scalar output.
- `jacobian` works on scalar or array outputs and returns a tensor with output shape first and input shape last.
- `elementwise_grad` is not a general Jacobian helper; it returns the column-sum/diagonal behavior used for elementwise real functions.
- Control flow is transparent to Autograd: the executed Python path matters, not the unexecuted branches.
- `make_vjp` exposes the reverse-mode pullback; `make_jvp` exposes the forward-mode pushforward.
- Higher-order derivatives are usually formed by composing these operators.
- `grad_and_aux` differentiates only the first output and returns the auxiliary payload unchanged.
- `checkpoint` recomputes forward intermediates during the backward pass to trade time for memory.
## Typical route
1. Start with `grad` for a scalar loss.
2. If the output is vector-valued, switch to `jacobian` or `elementwise_grad`.
3. If you need both the value and the gradient, use `value_and_grad`.
4. If you need a directional derivative, use `deriv` or `make_jvp`.
5. If you need a pullback from output cotangents, use `make_vjp`.
6. If you need curvature information, use `hessian` or a Hessian-vector product helper.
7. If the function is complex-valued and holomorphic, use `holomorphic_grad`.
8. If the function is deep and memory-bound, wrap it with `checkpoint`.
9. Validate the chosen operator with `check_grads` before trusting a new workflow.
## Reliability notes
- Use `check_grads` for a single function and `combo_check` when you want the same assertion to cover several positional or keyword combinations.
- When a derivative shape looks wrong, inspect the primal input and output shapes before changing the operator.
- When the function is intentionally branchy, choose a test point away from the branch threshold.
- When the failure message names a missing VJP or JVP rule for a primitive, route to `../extend-primitives/SKILL.md` instead of trying to solve it here.
## What this sub-skill does not cover
- Built-in NumPy/SciPy wrapper behavior and compatibility traps live in `../numpy-scipy-primitives/SKILL.md`.
- Defining new primitives or VJP/JVP rules lives in `../extend-primitives/SKILL.md`.
- Optimizer flattening and structured parameter updates live in `../optimization-workflows/SKILL.md`.
## Fastest sanity check
Run `scripts/differentiation_smoke.py` when you need a quick end-to-end check that the bundled differentiation guidance still matches the installed package.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!