(inputs: T.List[str], outputs: T.List[str])
return values
Create a dictionary with template strings as keys and values as values for
    the following templates:

    @INPUT@  - the full path to one or more input files, from @inputs
    @OUTPUT@ - the full path to one or more output files, from @outputs
    @OUTDIR@ - the full path to the directory containing the output files

    If there is only one input file, the following keys are also created:

    @PLAINNAME@ - the filename of the input file
    @BASENAME@ - the filename of the input file with the extension removed

    If there is more than one input file, the following keys are also created:

    @INPUT0@, @INPUT1@, ... one for each input file

    If there is more than one output file, the following keys are also created:

    @OUTPUT0@, @OUTPUT1@, ... one for each output file
Create a dictionary with template strings as keys and values as values for
    the following templates:
Create a dictionary with template strings as keys and values as values for the following templates :
def get_filenames_templates_dict(inputs: T.List[str], outputs: T.List[str]) -> T.Dict[str, T.Union[str, T.List[str]]]:
    '''
    Create a dictionary with template strings as keys and values as values for
    the following templates:

    @INPUT@  - the full path to one or more input files, from @inputs
    @OUTPUT@ - the full path to one or more output files, from @outputs
    @OUTDIR@ - the full path to the directory containing the output files

    If there is only one input file, the following keys are also created:

    @PLAINNAME@ - the filename of the input file
    @BASENAME@ - the filename of the input file with the extension removed

    If there is more than one input file, the following keys are also created:

    @INPUT0@, @INPUT1@, ... one for each input file

    If there is more than one output file, the following keys are also created:

    @OUTPUT0@, @OUTPUT1@, ... one for each output file
    '''
    values = {}  # type: T.Dict[str, T.Union[str, T.List[str]]]
    # Gather values derived from the input
    if inputs:
        # We want to substitute all the inputs.
        values['@INPUT@'] = inputs
        for (ii, vv) in enumerate(inputs):
            # Write out @INPUT0@, @INPUT1@, ...
            values[f'@INPUT{ii}@'] = vv
        if len(inputs) == 1:
            # Just one value, substitute @PLAINNAME@ and @BASENAME@
            values['@PLAINNAME@'] = plain = os.path.basename(inputs[0])
            values['@BASENAME@'] = os.path.splitext(plain)[0]
    if outputs:
        # Gather values derived from the outputs, similar to above.
        values['@OUTPUT@'] = outputs
        for (ii, vv) in enumerate(outputs):
            values[f'@OUTPUT{ii}@'] = vv
        # Outdir should be the same for all outputs
        values['@OUTDIR@'] = os.path.dirname(outputs[0])
        # Many external programs fail on empty arguments.
        if values['@OUTDIR@'] == '':
            values['@OUTDIR@'] = '.'
    return values
def get_filenames_templates_dict ( inputs : T . List [ str ] , outputs : T . List [ str ] ) -> T . Dict [ str , T . Union [ str , T . List [ str ] ] ] : values = { } # type: T.Dict[str, T.Union[str, T.List[str]]] # Gather values derived from the input if inputs : # We want to substitute all the inputs. values [ '@INPUT@' ] = inputs for ( ii , vv ) in enumerate ( inputs ) : # Write out @INPUT0@, @INPUT1@, ... values [ f'@INPUT{ii}@' ] = vv if len ( inputs ) == 1 : # Just one value, substitute @PLAINNAME@ and @BASENAME@ values [ '@PLAINNAME@' ] = plain = os . path . basename ( inputs [ 0 ] ) values [ '@BASENAME@' ] = os . path . splitext ( plain ) [ 0 ] if outputs : # Gather values derived from the outputs, similar to above. values [ '@OUTPUT@' ] = outputs for ( ii , vv ) in enumerate ( outputs ) : values [ f'@OUTPUT{ii}@' ] = vv # Outdir should be the same for all outputs values [ '@OUTDIR@' ] = os . path . dirname ( outputs [ 0 ] ) # Many external programs fail on empty arguments. if values [ '@OUTDIR@' ] == '' : values [ '@OUTDIR@' ] = '.' return values