def mintypecode(typechars,typeset='<STR_LIT>',default='<STR_LIT:d>'):
typecodes = [(isinstance(t, str) and t) or asarray(t).dtype.char<EOL>for t in typechars]<EOL>intersection = [t for t in typecodes if t in typeset]<EOL>if not intersection:<EOL><INDENT>return default<EOL><DEDENT>if '<STR_LIT:F>' in intersection and '<STR_LIT:d>' in intersection:<EOL><INDENT>return '<STR_LIT:D>'<EOL><DEDENT>l = []<EOL>for t in intersection:<EOL><INDENT>i = _typecodes_by_elsize.index(t)<EOL>l.append((i, t))<EOL><DEDENT>l.sort()<EOL>return l[<NUM_LIT:0>][<NUM_LIT:1>]<EOL>
Return the character for the minimum-size type to which given types can
be safely cast.

The returned type character must represent the smallest size dtype such
that an array of the returned type can handle the data from an array of
all types in `typechars` (or if `typechars` is an array, then its
dtype.char).

Parameters
----------
typechars : list of str or array_like
    If a list of strings, each string should represent a dtype.
    If array_like, the character representation of the array dtype is used.
typeset : str or list of str, optional
    The set of characters that the returned character is chosen from.
    The default set is 'GDFgdf'.
default : str, optional
    The default character, this is returned if none of the characters in
    `typechars` matches a character in `typeset`.

Returns
-------
typechar : str
    The character representing the minimum-size type that was found.

See Also
--------
dtype, sctype2char, maximum_sctype

Examples
--------
>>> np.mintypecode(['d', 'f', 'S'])
'd'
>>> x = np.array([1.1, 2-3.j])
>>> np.mintypecode(x)
'D'

>>> np.mintypecode('abceh', default='G')
'G'