> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bijection.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Interface: ComputationBuilder<DataModel, V, Schema>

> Reference for the ComputationBuilder interface in bijection/computations.

[computations](https://docs.bijection.com/api/modules/computations.md).ComputationBuilder

## Type parameters

| Name | Type |
| :- | :- |
| `DataModel` | extends [`GenericDataModel`](https://docs.bijection.com/api/modules/server#genericdatamodel) |
| `V` | extends `"public"` \| `"internal"` |
| `Schema` | extends [`GenericSchema`](https://docs.bijection.com/api/modules/server#genericschema) = [`GenericSchema`](https://docs.bijection.com/api/modules/server#genericschema) |

## Callable

### ComputationBuilder

▸ **ComputationBuilder**\<`A`, `S`, `O`, `Input`, `State`, `CheckState`>(`definition`): `Omit`\<[`ComputationBinding`](https://docs.bijection.com/api/modules/server#computationbinding)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`A`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>>, `"withArtifacts"`> & \{ `_outputs?`: [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`> ; `definition`: `Readonly`\<\{ `format`: `"bijection.computation.v3"` ; `reference`: `string` ; `source`: \{ `module`: `string` ; `export`: `string`  } ; `args`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson) ; `returns`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson) ; `outputs`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `kind`: `"value"` | `"rows"` ; `schema`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson)  }>>> ; `root_output?`: `string` ; `obligations`: `Readonly`\<`Omit`\<`ComputationObligations`, `"outputPredicates"`> & \{ `outputPredicates`: `Readonly`\<`Record`\<`string`, `Readonly`\<`Record`\<`string`, [`JSONValue`](https://docs.bijection.com/api/modules/values#jsonvalue)>>>>  }> ; `contract_digest`: `string` ; `capabilities`: readonly [`ComputationCapability`](https://docs.bijection.com/api/modules/computations#computationcapability)\[] ; `requirements`: `Readonly`\<\{ `environment?`: `Readonly`\<\{ `python?`: `string` ; `image?`: `string`  }> ; `features?`: readonly `string`\[] ; `resources?`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `distributed?`: `Readonly`\<\{ `driver`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `workers`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `count`: `number` ; `resources`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }>  }>>>  }>  }> ; `implementation`: [`ComputationRepresentation`](https://docs.bijection.com/api/modules/computations#computationrepresentation)  }> ; `bindings`: \{ `dependencies`: `Readonly`\<\{}> ; `parameters`: `Readonly`\<\{}>  } ; `with`: (`changes`: \{ `dependencies?`: `Partial`\<\{}> ; `parameters?`: `Partial`\<\{}>  }) => [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`A`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`> ; `withArtifacts`: (`artifacts`: readonly [`ComputationArtifact`](https://docs.bijection.com/api/modules/computations#computationartifact)\[]) => [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`A`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`>  } & \{ `_inputs?`: `S`  }

A table computation: a TypeScript handler or fold over declared row
inputs, evaluated by the native engine. Its arguments, input rows and
outputs are inferred from this declaration.

#### Type parameters

| Name | Type |
| :- | :- |
| `A` | extends [`PropertyValidators`](https://docs.bijection.com/api/modules/values#propertyvalidators) |
| `S` | extends `Readonly`\<`Record`\<`string`, [`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`any`, `"required"`, `any`>>> |
| `O` | extends [`TableOutputs`](https://docs.bijection.com/api/modules/computations#tableoutputs) |
| `Input` | extends keyof `S` & `string` = `never` |
| `State` | extends [`GenericValidator`](https://docs.bijection.com/api/modules/values#genericvalidator) = `never` |
| `CheckState` | extends [`GenericValidator`](https://docs.bijection.com/api/modules/values#genericvalidator) = `never` |

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | [`TableComputationDeclaration`](https://docs.bijection.com/api/modules/computations#tablecomputationdeclaration)\<`A`, `S`, `O`, `Input`, `State`, `CheckState`> |

#### Returns

`Omit`\<[`ComputationBinding`](https://docs.bijection.com/api/modules/server#computationbinding)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`A`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>>, `"withArtifacts"`> & \{ `_outputs?`: [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`> ; `definition`: `Readonly`\<\{ `format`: `"bijection.computation.v3"` ; `reference`: `string` ; `source`: \{ `module`: `string` ; `export`: `string`  } ; `args`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson) ; `returns`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson) ; `outputs`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `kind`: `"value"` | `"rows"` ; `schema`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson)  }>>> ; `root_output?`: `string` ; `obligations`: `Readonly`\<`Omit`\<`ComputationObligations`, `"outputPredicates"`> & \{ `outputPredicates`: `Readonly`\<`Record`\<`string`, `Readonly`\<`Record`\<`string`, [`JSONValue`](https://docs.bijection.com/api/modules/values#jsonvalue)>>>>  }> ; `contract_digest`: `string` ; `capabilities`: readonly [`ComputationCapability`](https://docs.bijection.com/api/modules/computations#computationcapability)\[] ; `requirements`: `Readonly`\<\{ `environment?`: `Readonly`\<\{ `python?`: `string` ; `image?`: `string`  }> ; `features?`: readonly `string`\[] ; `resources?`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `distributed?`: `Readonly`\<\{ `driver`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `workers`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `count`: `number` ; `resources`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }>  }>>>  }>  }> ; `implementation`: [`ComputationRepresentation`](https://docs.bijection.com/api/modules/computations#computationrepresentation)  }> ; `bindings`: \{ `dependencies`: `Readonly`\<\{}> ; `parameters`: `Readonly`\<\{}>  } ; `with`: (`changes`: \{ `dependencies?`: `Partial`\<\{}> ; `parameters?`: `Partial`\<\{}>  }) => [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`A`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`> ; `withArtifacts`: (`artifacts`: readonly [`ComputationArtifact`](https://docs.bijection.com/api/modules/computations#computationartifact)\[]) => [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`A`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`>  } & \{ `_inputs?`: `S`  }

### ComputationBuilder

▸ **ComputationBuilder**\<`I`, `O`>(`definition`): [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `true`>

Every computation form, for a public or an internal declaration. A table
computation keeps its own component access policy and is prepared by the
pipelines component; it exports no endpoints.

#### Type parameters

| Name | Type |
| :- | :- |
| `I` | extends [`ComputationArgumentsContract`](https://docs.bijection.com/api/modules/computations#computationargumentscontract) |
| `O` | extends [`OutputDeclarations`](https://docs.bijection.com/api/modules/computations#outputdeclarations) |

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | \{ `args`: `I` ; `returns`: `O` ; `execution`: `"relational"` ; `handler`: (`args`: [`InputRelations`](https://docs.bijection.com/api/modules/computations#inputrelations)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`NoInfer<I>`>> & [`InputArguments`](https://docs.bijection.com/api/modules/computations#inputarguments)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`NoInfer<I>`>>) => [`OutputRelations`](https://docs.bijection.com/api/modules/computations#outputrelations)\<[`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`NoInfer<O>`>> ; `guarantees?`: [`ComputationGuarantees`](https://docs.bijection.com/api/modules/computations#computationguarantees)\<`NoInfer<O>`> ; `requires?`: `Readonly`\<\{ `environment?`: `Readonly`\<\{ `python?`: `string` ; `image?`: `string`  }> ; `features?`: readonly `string`\[] ; `resources?`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `distributed?`: `Readonly`\<\{ `driver`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `workers`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `count`: `number` ; `resources`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }>  }>>>  }>  }>  } & [`AccessFor`](https://docs.bijection.com/api/modules/computations#accessfor)\<`V`, [`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`NoInfer<I>`>, `DataModel`, `Schema`> |

#### Returns

[`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `true`>

### ComputationBuilder

▸ **ComputationBuilder**\<`I`, `O`>(`definition`): [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `true`>

An inline implementation declares a typed computation contract.

#### Type parameters

| Name | Type |
| :- | :- |
| `I` | extends [`ComputationArgumentsContract`](https://docs.bijection.com/api/modules/computations#computationargumentscontract) |
| `O` | extends [`OutputDeclarations`](https://docs.bijection.com/api/modules/computations#outputdeclarations) |

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | \{ `args`: `I` ; `returns`: `O` ; `handler`: `InlineComputationImplementation`\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>> ; `guarantees?`: [`ComputationGuarantees`](https://docs.bijection.com/api/modules/computations#computationguarantees)\<`NoInfer<O>`> ; `requires?`: `Readonly`\<\{ `environment?`: `Readonly`\<\{ `python?`: `string` ; `image?`: `string`  }> ; `features?`: readonly `string`\[] ; `resources?`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `distributed?`: `Readonly`\<\{ `driver`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `workers`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `count`: `number` ; `resources`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }>  }>>>  }>  }>  } & [`AccessFor`](https://docs.bijection.com/api/modules/computations#accessfor)\<`V`, [`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`NoInfer<I>`>, `DataModel`, `Schema`> |

#### Returns

[`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `true`>

### ComputationBuilder

▸ **ComputationBuilder**\<`I`, `O`>(`definition`): [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`>

Every computation form, for a public or an internal declaration. A table
computation keeps its own component access policy and is prepared by the
pipelines component; it exports no endpoints.

#### Type parameters

| Name | Type |
| :- | :- |
| `I` | extends [`ComputationArgumentsContract`](https://docs.bijection.com/api/modules/computations#computationargumentscontract) |
| `O` | extends [`OutputDeclarations`](https://docs.bijection.com/api/modules/computations#outputdeclarations) |

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | \{ `args`: `I` ; `returns`: `O` ; `execution`: `"action"` ; `requires?`: `Readonly`\<\{ `environment?`: `Readonly`\<\{ `python?`: `string` ; `image?`: `string`  }> ; `features?`: readonly `string`\[] ; `resources?`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `distributed?`: `Readonly`\<\{ `driver`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `workers`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `count`: `number` ; `resources`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }>  }>>>  }>  }> ; `handler`: (`ctx`: [`ComputationActionCtx`](https://docs.bijection.com/api/modules/computations#computationactionctx), `args`: [`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>) => [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`> \| `Promise`\<[`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>>  } & [`AccessFor`](https://docs.bijection.com/api/modules/computations#accessfor)\<`V`, [`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`NoInfer<I>`>, `DataModel`, `Schema`> |

#### Returns

[`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`>

### ComputationBuilder

▸ **ComputationBuilder**\<`I`, `O`>(`definition`): [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`>

A TypeScript handler that reads `ctx.db` states `execution: "query"`;
declare `inputs` instead to compute over captured rows only.

#### Type parameters

| Name | Type |
| :- | :- |
| `I` | extends [`ComputationArgumentsContract`](https://docs.bijection.com/api/modules/computations#computationargumentscontract) |
| `O` | extends [`OutputDeclarations`](https://docs.bijection.com/api/modules/computations#outputdeclarations) |

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | [`QueryDeclaration`](https://docs.bijection.com/api/modules/computations#querydeclaration)\<`I`, `O`, `DataModel`, `Schema`> & [`AccessFor`](https://docs.bijection.com/api/modules/computations#accessfor)\<`V`, [`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`NoInfer<I>`>, `DataModel`, `Schema`> |

#### Returns

[`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`>

### ComputationBuilder

▸ **ComputationBuilder**\<`I`, `O`, `D`, `P`>(`definition`): [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, [`DependencyValues`](https://docs.bijection.com/api/modules/computations#dependencyvalues)\<`D`>, [`ParameterValues`](https://docs.bijection.com/api/modules/computations#parametervalues)\<`P`>, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`>

A composition over named dependency slots or parameters.

#### Type parameters

| Name | Type |
| :- | :- |
| `I` | extends [`ComputationArgumentsContract`](https://docs.bijection.com/api/modules/computations#computationargumentscontract) |
| `O` | extends [`OutputDeclarations`](https://docs.bijection.com/api/modules/computations#outputdeclarations) |
| `D` | extends [`Dependencies`](https://docs.bijection.com/api/modules/computations#dependencies) \| `undefined` = `undefined` |
| `P` | extends [`PropertyValidators`](https://docs.bijection.com/api/modules/values#propertyvalidators) \| `undefined` = `undefined` |

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | `Object` |

#### Returns

[`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, [`DependencyValues`](https://docs.bijection.com/api/modules/computations#dependencyvalues)\<`D`>, [`ParameterValues`](https://docs.bijection.com/api/modules/computations#parametervalues)\<`P`>, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`>

### ComputationBuilder

▸ **ComputationBuilder**\<`I`, `O`>(`definition`): [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`>

A Python program, external callable or implementation adapter.

#### Type parameters

| Name | Type |
| :- | :- |
| `I` | extends [`ComputationArgumentsContract`](https://docs.bijection.com/api/modules/computations#computationargumentscontract) |
| `O` | extends [`OutputDeclarations`](https://docs.bijection.com/api/modules/computations#outputdeclarations) |

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | \{ `args`: `I` ; `returns`: `O` ; `guarantees?`: [`ComputationGuarantees`](https://docs.bijection.com/api/modules/computations#computationguarantees)\<`NoInfer<O>`> ; `requires?`: `Readonly`\<\{ `environment?`: `Readonly`\<\{ `python?`: `string` ; `image?`: `string`  }> ; `features?`: readonly `string`\[] ; `resources?`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `distributed?`: `Readonly`\<\{ `driver`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `workers`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `count`: `number` ; `resources`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }>  }>>>  }>  }> ; `handler`: `Readonly`\<\{ `revision`: `string` ; `manifest`: `string` ; `development?`: \{ `root`: `string` ; `contracts`: `string` ; `declaration?`: `string`  }  }> \| `Readonly`\<\{ `kind`: `"external"` ; `digest`: `string` ; `sampling`: [`ComputationSampling`](https://docs.bijection.com/api/modules/server#computationsampling)  }> \| `Readonly`\<\{ `kind`: `"adapter"` ; `inline?`: `true` ; `build?`: (`args`: [`InputRelations`](https://docs.bijection.com/api/modules/computations#inputrelations)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`NoInfer<I>`>> & [`InputArguments`](https://docs.bijection.com/api/modules/computations#inputarguments)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`NoInfer<I>`>>) => [`OutputRelations`](https://docs.bijection.com/api/modules/computations#outputrelations)\<[`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`NoInfer<O>`>> ; `prepare`: (`context`: \{ `reference`: `string` ; `query?`: `string` ; `args`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson) ; `outputs`: [`OutputContracts`](https://docs.bijection.com/api/modules/computations#outputcontracts) ; `root_output`: `string` \| `null` ; `guarantees?`: [`GuaranteeBuilders`](https://docs.bijection.com/api/modules/computations#guaranteebuilders) ; `row_keys?`: \{ `inputs`: `Readonly`\<`Record`\<`string`, readonly `string`\[]>> ; `outputs`: `Readonly`\<`Record`\<`string`, readonly `string`\[]>>  }  }, `build?`: `unknown`) => \{ `implementation`: [`ComputationRepresentation`](https://docs.bijection.com/api/modules/computations#computationrepresentation) ; `binding`: `unknown` ; `dispatch?`: `"installed"` ; `query?`: [`RegisteredQuery`](https://docs.bijection.com/api/modules/server#registeredquery)\<`"internal"`, `any`, `any`> ; `required_features?`: readonly `string`\[] ; `row_keys?`: `true` ; `guarantees?`: `true` ; `output_predicates?`: [`ComputationObligations`](https://docs.bijection.com/api/modules/computations#computationobligations)\[`"outputPredicates"`] ; `evaluate?`: (`args`: `unknown`, `clocks?`: readonly `ClockObservation`\[]) => `unknown` ; `inline?`: (`args`: `Readonly`\<`Record`\<`string`, `unknown`>>) => `Record`\<`string`, [`Relation`](https://docs.bijection.com/api/classes/server.Relation)\<`any`>>  }  }>  } & [`AccessFor`](https://docs.bijection.com/api/modules/computations#accessfor)\<`V`, [`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`NoInfer<I>`>, `DataModel`, `Schema`> |

#### Returns

[`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`I`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`>

### ComputationBuilder

▸ **ComputationBuilder**\<`A`, `S`, `O`, `Input`, `State`, `CheckState`, `QI`, `QO`>(`definition`): `Omit`\<[`ComputationBinding`](https://docs.bijection.com/api/modules/server#computationbinding)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`A`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>>, `"withArtifacts"`> & \{ `_outputs?`: [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`> ; `definition`: `Readonly`\<\{ `format`: `"bijection.computation.v3"` ; `reference`: `string` ; `source`: \{ `module`: `string` ; `export`: `string`  } ; `args`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson) ; `returns`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson) ; `outputs`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `kind`: `"value"` | `"rows"` ; `schema`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson)  }>>> ; `root_output?`: `string` ; `obligations`: `Readonly`\<`Omit`\<`ComputationObligations`, `"outputPredicates"`> & \{ `outputPredicates`: `Readonly`\<`Record`\<`string`, `Readonly`\<`Record`\<`string`, [`JSONValue`](https://docs.bijection.com/api/modules/values#jsonvalue)>>>>  }> ; `contract_digest`: `string` ; `capabilities`: readonly [`ComputationCapability`](https://docs.bijection.com/api/modules/computations#computationcapability)\[] ; `requirements`: `Readonly`\<\{ `environment?`: `Readonly`\<\{ `python?`: `string` ; `image?`: `string`  }> ; `features?`: readonly `string`\[] ; `resources?`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `distributed?`: `Readonly`\<\{ `driver`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `workers`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `count`: `number` ; `resources`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }>  }>>>  }>  }> ; `implementation`: [`ComputationRepresentation`](https://docs.bijection.com/api/modules/computations#computationrepresentation)  }> ; `bindings`: \{ `dependencies`: `Readonly`\<\{}> ; `parameters`: `Readonly`\<\{}>  } ; `with`: (`changes`: \{ `dependencies?`: `Partial`\<\{}> ; `parameters?`: `Partial`\<\{}>  }) => [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`A`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`> ; `withArtifacts`: (`artifacts`: readonly [`ComputationArtifact`](https://docs.bijection.com/api/modules/computations#computationartifact)\[]) => [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`A`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`>  } & \{ `_inputs?`: `S`  }

Last, so a failing declaration reports against the table or query form
it resembles.

#### Type parameters

| Name | Type |
| :- | :- |
| `A` | extends [`PropertyValidators`](https://docs.bijection.com/api/modules/values#propertyvalidators) |
| `S` | extends `Readonly`\<`Record`\<`string`, [`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`any`, `"required"`, `any`>>> |
| `O` | extends [`TableOutputs`](https://docs.bijection.com/api/modules/computations#tableoutputs) |
| `Input` | extends keyof `S` & `string` = `never` |
| `State` | extends [`GenericValidator`](https://docs.bijection.com/api/modules/values#genericvalidator) = `never` |
| `CheckState` | extends [`GenericValidator`](https://docs.bijection.com/api/modules/values#genericvalidator) = `never` |
| `QI` | extends [`ComputationArgumentsContract`](https://docs.bijection.com/api/modules/computations#computationargumentscontract) = \{} |
| `QO` | extends [`OutputDeclarations`](https://docs.bijection.com/api/modules/computations#outputdeclarations) = \{} |

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | [`TableComputationDeclaration`](https://docs.bijection.com/api/modules/computations#tablecomputationdeclaration)\<`A`, `S`, `O`, `Input`, `State`, `CheckState`> \| [`QueryDeclaration`](https://docs.bijection.com/api/modules/computations#querydeclaration)\<`QI`, `QO`, `DataModel`, `Schema`> & [`AccessFor`](https://docs.bijection.com/api/modules/computations#accessfor)\<`V`, `any`, `DataModel`, `Schema`> |

#### Returns

`Omit`\<[`ComputationBinding`](https://docs.bijection.com/api/modules/server#computationbinding)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`A`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>>, `"withArtifacts"`> & \{ `_outputs?`: [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`> ; `definition`: `Readonly`\<\{ `format`: `"bijection.computation.v3"` ; `reference`: `string` ; `source`: \{ `module`: `string` ; `export`: `string`  } ; `args`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson) ; `returns`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson) ; `outputs`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `kind`: `"value"` | `"rows"` ; `schema`: [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson)  }>>> ; `root_output?`: `string` ; `obligations`: `Readonly`\<`Omit`\<`ComputationObligations`, `"outputPredicates"`> & \{ `outputPredicates`: `Readonly`\<`Record`\<`string`, `Readonly`\<`Record`\<`string`, [`JSONValue`](https://docs.bijection.com/api/modules/values#jsonvalue)>>>>  }> ; `contract_digest`: `string` ; `capabilities`: readonly [`ComputationCapability`](https://docs.bijection.com/api/modules/computations#computationcapability)\[] ; `requirements`: `Readonly`\<\{ `environment?`: `Readonly`\<\{ `python?`: `string` ; `image?`: `string`  }> ; `features?`: readonly `string`\[] ; `resources?`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `distributed?`: `Readonly`\<\{ `driver`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }> ; `workers`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `count`: `number` ; `resources`: `Readonly`\<\{ `cpus?`: `number` ; `memory_mb?`: `number` ; `gpus?`: `number`  }>  }>>>  }>  }> ; `implementation`: [`ComputationRepresentation`](https://docs.bijection.com/api/modules/computations#computationrepresentation)  }> ; `bindings`: \{ `dependencies`: `Readonly`\<\{}> ; `parameters`: `Readonly`\<\{}>  } ; `with`: (`changes`: \{ `dependencies?`: `Partial`\<\{}> ; `parameters?`: `Partial`\<\{}>  }) => [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`A`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`> ; `withArtifacts`: (`artifacts`: readonly [`ComputationArtifact`](https://docs.bijection.com/api/modules/computations#computationartifact)\[]) => [`DeclaredComputation`](https://docs.bijection.com/api/modules/computations#declaredcomputation)\<[`InferComputationArguments`](https://docs.bijection.com/api/modules/computations#infercomputationarguments)\<`A`>, [`OutputValues`](https://docs.bijection.com/api/modules/computations#outputvalues)\<`O`>, \{}, \{}, [`OutputTypeInfo`](https://docs.bijection.com/api/modules/computations#outputtypeinfo)\<`O`>, `false`>  } & \{ `_inputs?`: `S`  }


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.