<commit_before>## Pipe
* Composed of tapins
* A pipe has a set of methods to help configure the tapin workflow
    * `addTapin(name, tapin)`
    * `addTapinBefore(name, tapin, before)`
    * `addTapinAfter(name, tapin, after)`
    * `replaceTapin(name, tapin)`
    * `removeTapin(name)`
* A pipe also contains 3 methods to configure parameters
    * `initAssets(assets)`
    * `initState(state)`
    * `initOutput(output)`

## Tapin
* A tapin is a function that takes assets, state, output as parameters
* A tapin has a name to reference
* A tapin must return `true`/`false`.  If `false` or nothing is returned, then pipeline will abort.
* A tapin will receive the following 3 input parameters.
    * Assets
        * Pipeline input
        * Read-only (should not be mutated)
        * Because immutable, assets coming from another pipeline don't need to be copied 
    * State
        * Pipeline state parameters
        * Can be mutated by a tapin that is used in a latter tapin
        * Can also be used to reduce memory allocation/deallocation
    * Output
        * Pipeline output
        * Write-only
        * For layout pipes, the `Updater` expects a certain set of outputs to be set upon pipeline completion
        * Can also be used to report layout errors
* A tapin may receive extra input parameters. Example: RenderPipe has `ctx` and `region` that are used for render pass context.<commit_msg>Making tapin parameters look like variables.<commit_after>## Pipe
* Composed of tapins
* A pipe has a set of methods to help configure the tapin workflow
    * `addTapin(name, tapin)`
    * `addTapinBefore(name, tapin, before)`
    * `addTapinAfter(name, tapin, after)`
    * `replaceTapin(name, tapin)`
    * `removeTapin(name)`
* A pipe also contains 3 methods to configure parameters
    * `initAssets(assets)`
    * `initState(state)`
    * `initOutput(output)`

## Tapin
* A tapin is a function that takes assets, state, output as parameters
* A tapin has a name to reference
* A tapin must return `true`/`false`.  If `false` or nothing is returned, then pipeline will abort.
* A tapin will receive the following 3 input parameters.
    * `assets`
        * Pipeline input
        * Read-only (should not be mutated)
        * Because immutable, assets coming from another pipeline don't need to be copied 
    * `state`
        * Pipeline state parameters
        * Can be mutated by a tapin that is used in a latter tapin
        * Can also be used to reduce memory allocation/deallocation
    * `output`
        * Pipeline output
        * Write-only
        * For layout pipes, the `Updater` expects a certain set of outputs to be set upon pipeline completion
        * Can also be used to report layout errors
* A tapin may receive extra input parameters. Example: RenderPipe has `ctx` and `region` that are used for render pass context.
{'fraction_non_alphanumeric': 0.07525376268813441, 'fraction_numerical': 0.001400070003500175, 'mean_word_length': 3.112230215827338, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3464017', 'n_tokens_mistral': 822, 'n_tokens_neox': 806, 'n_words': 362}