'Set all variables to nan for specializations of fused types for
which don\'t have signatures.'

def _get_nan_decs(self):

    tab = ('    ' * 4)
    (fused_types, lines) = ([], [(tab + 'else:')])
    seen = set()
    for (outvar, outtype, code) in zip(self.outvars, self.outtypes, self.outcodes):
        if (len(code) == 1):
            line = '{}[0]    =    {}'.format(outvar, NAN_VALUE[code])
            lines.append(((2 * tab) + line))
        else:
            fused_type = outtype
            (name, _) = fused_type
            if (name not in seen):
                fused_types.append(fused_type)
                seen.add(name)
    if (not fused_types):
        return lines
    all_codes = []
    for fused_type in fused_types:
        (_, codes) = fused_type
        all_codes.append(codes)
    all_codes = tuple(all_codes)
    codelens = list(map((lambda x: len(x)), all_codes))
    last = (numpy.product(codelens) - 1)
    for (m, codes) in enumerate(itertools.product(*all_codes)):
        (fused_codes, decs) = ([], [])
        for (n, fused_type) in enumerate(fused_types):
            code = codes[n]
            fused_codes.append(underscore(CY_TYPES[code]))
            for (nn, outvar) in enumerate(self.outvars):
                if (self.outtypes[nn] == fused_type):
                    line = '{}[0]    =    {}'.format(outvar, NAN_VALUE[code])
                    decs.append(line)
        if (m == 0):
            adverb = 'if'
        elif (m == last):
            adverb = 'else'
        else:
            adverb = 'elif'
        cond = self._get_conditional(fused_types, codes, adverb)
        lines.append(((2 * tab) + cond))
        lines.extend(map((lambda x: ((3 * tab) + x)), decs))
    return lines
