def to_scientific_tuple(number):
<EOL>convert = not isinstance(number, str)<EOL>if (convert and (number == <NUM_LIT:0>)) or (<EOL>(not convert) and (not number.strip("<STR_LIT:0>").strip("<STR_LIT:.>"))<EOL>):<EOL><INDENT>return ("<STR_LIT:0>", <NUM_LIT:0>)<EOL><DEDENT>sign, digits, exp = Decimal(str(number) if convert else number).as_tuple()<EOL>mant = (<EOL>"<STR_LIT>".format(<EOL>sign="<STR_LIT:->" if sign else "<STR_LIT>",<EOL>itg=digits[<NUM_LIT:0>],<EOL>frac=(<EOL>"<STR_LIT>".format(frac="<STR_LIT>".join([str(num) for num in digits[<NUM_LIT:1>:]]))<EOL>if len(digits) > <NUM_LIT:1><EOL>else "<STR_LIT>"<EOL>),<EOL>)<EOL>.rstrip("<STR_LIT:0>")<EOL>.rstrip("<STR_LIT:.>")<EOL>)<EOL>exp += len(digits) - <NUM_LIT:1><EOL>return NumComp(mant, exp)<EOL>
Return mantissa and exponent of a number in scientific notation.

Full precision is maintained if the number is
represented as a string

:param number: Number
:type  number: integer, float or string

:rtype: named tuple in which the first item is the mantissa (*string*)
        and the second item is the exponent (*integer*) of the number
        when expressed in scientific notation

For example:

    >>> import putil.eng
    >>> putil.eng.to_scientific_tuple('135.56E-8')
    NumComp(mant='1.3556', exp=-6)
    >>> putil.eng.to_scientific_tuple(0.0000013556)
    NumComp(mant='1.3556', exp=-6)