# InplaceFunction

Source: https://www.tensorplay.cn/docs/generated/tensorplay.autograd.function.InplaceFunction.html

```python
class tensorplay.autograd.function.InplaceFunction
```

In-place operations must call ctx.mark_dirty on the mutated inputs
inside forward; this subclass exists only so historical code that
subclasses it keeps working.

```python
classmethod apply(*args, **kwargs)
```

Runs the operation and attaches gradient bookkeeping to outputs.

flat arguments computes needs_input_grad and wires next-edges
BEFORE forward; outputs are marked and attached AFTER
setup_context.  When the fused C++ helpers are present the hot
path makes two pybind crossings total (graph setup + output
attach); otherwise a generic Python fallback runs.

```python
static backward(ctx, *grad_outputs)
```

Defines a formula for differentiating the operation.

```python
static forward(ctx, *args, **kwargs)
```

Performs the operation.

This function is to be overridden by all subclasses. There are two ways
to define forward:

Usage 1 (Combined forward and ctx):

```
@staticmethod
def forward(ctx, input1, input2):
    ...
    return output
```

Usage 2 (Separated forward and ctx):

```
@staticmethod
def forward(input1, input2):
    ...
    return output

@staticmethod
def setup_context(ctx, inputs, output):
    ...
```

```python
static jvp(ctx, *grad_inputs)
```

Defines a formula for computing the jacobian-vector product.

Not yet supported by this engine; provided for API compatibility.

```python
static setup_context(ctx, inputs, output)
```

Sets up the context object (Usage 2 above).

Parameters:

- ctx (_Context) – context object to modify in-place

- inputs ([tuple](https://docs.python.org/3/library/stdtypes.html#tuple)) – inputs to [forward()](#tensorplay.autograd.function.InplaceFunction.forward)

- output (Any) – output of [forward()](#tensorplay.autograd.function.InplaceFunction.forward)

```python
static vmap(info, in_dims, *args)
```

Defines a formula for vectorizing the operation.

Not yet supported by this engine; provided for API compatibility.
