<commit_before>
{{alias}}( collection, [options,] indicator, done )
    Groups values according to an indicator function.

    When invoked, the indicator function is provided a maximum of four
    arguments:

    - `value`: collection value
    - `index`: collection index
    - `collection`: the input collection
    - `next`: a callback to be invoked after processing a collection `value`

    The actual number of provided arguments depends on function length. If the
    indicator function accepts two arguments, the indicator function is
    provided:

    - `value`
    - `next`

    If the indicator function accepts three arguments, the indicator function is
    provided:

    - `value`
    - `index`
    - `next`

    For every other indicator function signature, the indicator function is
    provided all four arguments.

    The `next` callback takes two arguments:

    - `error`: error argument
    - `group`: value group

    If an indicator function calls the `next` callback with a truthy `error`
    argument, the function suspends execution and immediately calls the `done`
    callback for subsequent `error` handling.

    If provided an empty collection, the function calls the `done` callback with
    an empty object as the second argument.

    The `group` returned by an indicator function should be a value which can be
    serialized as an object key.

    Execution is *not* guaranteed to be asynchronous. To guarantee asynchrony,
    wrap the `done` callback in a function which either executes at the end of
    the current stack (e.g., `nextTick`) or during a subsequent turn of the
    event loop (e.g., `setImmediate`, `setTimeout`).

    The function does not support dynamic collection resizing.

    The function does not skip `undefined` elements.

    Parameters
    ----------
    collection: Array|TypedArray|Object
        Input collection over which to iterate. If provided an object, the
        object must be array-like (excluding strings and functions).

    options: Object (optional)
        Function options.

    options.limit: integer (optional)
        Maximum number of pending invocations. Default: Infinity.

    options.series: boolean (optional)
        Boolean indicating whether to process each collection element
        sequentially. Default: false.

    options.returns: string (optional)
        If `values`, values are returned; if `indices`, indices are returned; if
        `*`, both indices and values are returned. Default: 'values'.

    options.thisArg: any (optional)
        Execution context.

    indicator: Function
        Indicator function specifying which group an element in the input
        collection belongs to.

    done: Function
        A callback invoked either upon processing all collection elements or
        upon encountering an error.

    Examples
    --------
    // Basic usage:
    > function indicator( value, index, next ) {
    ...     setTimeout( onTimeout, value );
    ...     function onTimeout() {
    ...         console.log( value );
    ...         next( null, ( index%2 === 0 ) );
    ...     }
    ... };
    > function done( error, result ) {
    ...     if ( error ) {
    ...         throw error;
    ...     }
    ...     console.log( result );
    ... };
    > var arr = [ 3000, 2500, 1000 ];
    > {{alias}}( arr, indicator, done )
    1000
    2500
    3000
    { "true": [ 1000, 3000 ], "false": [ 2500 ] }

    // Output group results as indices:
    > var opts = { 'returns': 'indices' };
    > {{alias}}( arr, opts, indicator, done )
    1000
    2500
    3000
    { "true": [ 2, 0 ], "false": [ 1 ] }

    // Output group results as index-value pairs:
    > opts = { 'returns': '*' };
    > {{alias}}( arr, opts, indicator done )
    1000
    2500
    3000
    { "true": [ [ 2, 1000 ], [ 0, 3000 ] ], "false": [ [ 1, 2500 ] ] }

    // Limit number of concurrent invocations:
    > function indicator( value, index, next ) {
    ...     setTimeout( onTimeout, value );
    ...     function onTimeout() {
    ...         console.log( value );
    ...         next( null, ( index%2 === 0 ) );
    ...     }
    ... };
    > function done( error, result ) {
    ...     if ( error ) {
    ...         throw error;
    ...     }
    ...     console.log( result );
    ... };
    > var opts = { 'limit': 2 };
    > var arr = [ 3000, 2500, 1000 ];
    > {{alias}}( arr, opts, indicator, done )
    2500
    3000
    1000
    { "true": [ 3000, 1000 ], "false": [ 2500 ] }

    // Process sequentially:
    > function indicator( value, index, next ) {
    ...     setTimeout( onTimeout, value );
    ...     function onTimeout() {
    ...         console.log( value );
    ...         next( null, ( index%2 === 0 ) );
    ...     }
    ... };
    > function done( error, result ) {
    ...     if ( error ) {
    ...         throw error;
    ...     }
    ...     console.log( result );
    ... };
    > var opts = { 'series': true };
    > var arr = [ 3000, 2500, 1000 ];
    > {{alias}}( arr, opts, indicator, done )
    3000
    2500
    1000
    { "true": [ 3000, 1000 ], "false": [ 2500 ] }


{{alias}}.factory( [options,] indicator )
    Returns a function which groups values according to an indicator function.

    Parameters
    ----------
    options: Object (optional)
        Function options.

    options.limit: integer (optional)
        Maximum number of pending invocations. Default: Infinity.

    options.series: boolean (optional)
        Boolean indicating whether to process each collection element
        sequentially. Default: false.

    options.returns: string (optional)
        If `values`, values are returned; if `indices`, indices are returned; if
        `*`, both indices and values are returned. Default: 'values'.

    options.thisArg: any (optional)
        Execution context.

    indicator: Function
        Indicator function specifying which group an element in the input
        collection belongs to.

    Returns
    -------
    out: Function
        A group-by function.

    Examples
    --------
    > function indicator( value, index, next ) {
    ...     setTimeout( onTimeout, value );
    ...     function onTimeout() {
    ...         console.log( value );
    ...         next( null, ( index%2 === 0 ) );
    ...     }
    ... };
    > var opts = { 'series': true };
    > var f = {{alias}}.factory( opts, indicator );
    > function done( error, result ) {
    ...     if ( error ) {
    ...         throw error;
    ...     }
    ...     console.log( result );
    ... };
    > var arr = [ 3000, 2500, 1000 ];
    > f( arr, done )
    3000
    2500
    1000
    { "true": [ 3000, 1000 ], "false": [ 2500 ] }
    > arr = [ 2000, 1500, 1000 ];
    > f( arr, done )
    2000
    1500
    1000
    { "true": [ 2000, 1000 ], "false": [ 1500 ] }

    See Also
    --------

<commit_msg>Add missing comma<commit_after>
{{alias}}( collection, [options,] indicator, done )
    Groups values according to an indicator function.

    When invoked, the indicator function is provided a maximum of four
    arguments:

    - `value`: collection value
    - `index`: collection index
    - `collection`: the input collection
    - `next`: a callback to be invoked after processing a collection `value`

    The actual number of provided arguments depends on function length. If the
    indicator function accepts two arguments, the indicator function is
    provided:

    - `value`
    - `next`

    If the indicator function accepts three arguments, the indicator function is
    provided:

    - `value`
    - `index`
    - `next`

    For every other indicator function signature, the indicator function is
    provided all four arguments.

    The `next` callback takes two arguments:

    - `error`: error argument
    - `group`: value group

    If an indicator function calls the `next` callback with a truthy `error`
    argument, the function suspends execution and immediately calls the `done`
    callback for subsequent `error` handling.

    If provided an empty collection, the function calls the `done` callback with
    an empty object as the second argument.

    The `group` returned by an indicator function should be a value which can be
    serialized as an object key.

    Execution is *not* guaranteed to be asynchronous. To guarantee asynchrony,
    wrap the `done` callback in a function which either executes at the end of
    the current stack (e.g., `nextTick`) or during a subsequent turn of the
    event loop (e.g., `setImmediate`, `setTimeout`).

    The function does not support dynamic collection resizing.

    The function does not skip `undefined` elements.

    Parameters
    ----------
    collection: Array|TypedArray|Object
        Input collection over which to iterate. If provided an object, the
        object must be array-like (excluding strings and functions).

    options: Object (optional)
        Function options.

    options.limit: integer (optional)
        Maximum number of pending invocations. Default: Infinity.

    options.series: boolean (optional)
        Boolean indicating whether to process each collection element
        sequentially. Default: false.

    options.returns: string (optional)
        If `values`, values are returned; if `indices`, indices are returned; if
        `*`, both indices and values are returned. Default: 'values'.

    options.thisArg: any (optional)
        Execution context.

    indicator: Function
        Indicator function specifying which group an element in the input
        collection belongs to.

    done: Function
        A callback invoked either upon processing all collection elements or
        upon encountering an error.

    Examples
    --------
    // Basic usage:
    > function indicator( value, index, next ) {
    ...     setTimeout( onTimeout, value );
    ...     function onTimeout() {
    ...         console.log( value );
    ...         next( null, ( index%2 === 0 ) );
    ...     }
    ... };
    > function done( error, result ) {
    ...     if ( error ) {
    ...         throw error;
    ...     }
    ...     console.log( result );
    ... };
    > var arr = [ 3000, 2500, 1000 ];
    > {{alias}}( arr, indicator, done )
    1000
    2500
    3000
    { "true": [ 1000, 3000 ], "false": [ 2500 ] }

    // Output group results as indices:
    > var opts = { 'returns': 'indices' };
    > {{alias}}( arr, opts, indicator, done )
    1000
    2500
    3000
    { "true": [ 2, 0 ], "false": [ 1 ] }

    // Output group results as index-value pairs:
    > opts = { 'returns': '*' };
    > {{alias}}( arr, opts, indicator, done )
    1000
    2500
    3000
    { "true": [ [ 2, 1000 ], [ 0, 3000 ] ], "false": [ [ 1, 2500 ] ] }

    // Limit number of concurrent invocations:
    > function indicator( value, index, next ) {
    ...     setTimeout( onTimeout, value );
    ...     function onTimeout() {
    ...         console.log( value );
    ...         next( null, ( index%2 === 0 ) );
    ...     }
    ... };
    > function done( error, result ) {
    ...     if ( error ) {
    ...         throw error;
    ...     }
    ...     console.log( result );
    ... };
    > var opts = { 'limit': 2 };
    > var arr = [ 3000, 2500, 1000 ];
    > {{alias}}( arr, opts, indicator, done )
    2500
    3000
    1000
    { "true": [ 3000, 1000 ], "false": [ 2500 ] }

    // Process sequentially:
    > function indicator( value, index, next ) {
    ...     setTimeout( onTimeout, value );
    ...     function onTimeout() {
    ...         console.log( value );
    ...         next( null, ( index%2 === 0 ) );
    ...     }
    ... };
    > function done( error, result ) {
    ...     if ( error ) {
    ...         throw error;
    ...     }
    ...     console.log( result );
    ... };
    > var opts = { 'series': true };
    > var arr = [ 3000, 2500, 1000 ];
    > {{alias}}( arr, opts, indicator, done )
    3000
    2500
    1000
    { "true": [ 3000, 1000 ], "false": [ 2500 ] }


{{alias}}.factory( [options,] indicator )
    Returns a function which groups values according to an indicator function.

    Parameters
    ----------
    options: Object (optional)
        Function options.

    options.limit: integer (optional)
        Maximum number of pending invocations. Default: Infinity.

    options.series: boolean (optional)
        Boolean indicating whether to process each collection element
        sequentially. Default: false.

    options.returns: string (optional)
        If `values`, values are returned; if `indices`, indices are returned; if
        `*`, both indices and values are returned. Default: 'values'.

    options.thisArg: any (optional)
        Execution context.

    indicator: Function
        Indicator function specifying which group an element in the input
        collection belongs to.

    Returns
    -------
    out: Function
        A group-by function.

    Examples
    --------
    > function indicator( value, index, next ) {
    ...     setTimeout( onTimeout, value );
    ...     function onTimeout() {
    ...         console.log( value );
    ...         next( null, ( index%2 === 0 ) );
    ...     }
    ... };
    > var opts = { 'series': true };
    > var f = {{alias}}.factory( opts, indicator );
    > function done( error, result ) {
    ...     if ( error ) {
    ...         throw error;
    ...     }
    ...     console.log( result );
    ... };
    > var arr = [ 3000, 2500, 1000 ];
    > f( arr, done )
    3000
    2500
    1000
    { "true": [ 3000, 1000 ], "false": [ 2500 ] }
    > arr = [ 2000, 1500, 1000 ];
    > f( arr, done )
    2000
    1500
    1000
    { "true": [ 2000, 1000 ], "false": [ 1500 ] }

    See Also
    --------


{'fraction_non_alphanumeric': 0.1265222781302414, 'fraction_numerical': 0.033690658499234305, 'mean_word_length': 1.980656379048033, 'pattern_counts': {'":': 28, '<': 3, '<?xml version=': 0, '>': 55, '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': '3953772', 'n_tokens_mistral': 4129, 'n_tokens_neox': 3600, 'n_words': 1396}