예제 #1
0
def _array2string(a,
                  max_line_width,
                  precision,
                  suppress_small,
                  separator=' ',
                  prefix=""):

    if max_line_width is None:
        max_line_width = _line_width

    if precision is None:
        precision = _float_output_precision

    if suppress_small is None:
        suppress_small = _float_output_suppress_small

    if a.size > _summaryThreshold:
        summary_insert = "..., "
        data = _leading_trailing(a)
    else:
        summary_insert = ""
        data = ravel(a)

    try:
        format_function = a._format
    except AttributeError:
        dtypeobj = a.dtype.type
        if issubclass(dtypeobj, _nt.bool_):
            # make sure True and False line up.
            format_function = _boolFormatter
        elif issubclass(dtypeobj, _nt.integer):
            max_str_len = max(len(str(maximum.reduce(data))),
                              len(str(minimum.reduce(data))))
            format = '%' + str(max_str_len) + 'd'
            format_function = lambda x: _formatInteger(x, format)
        elif issubclass(dtypeobj, _nt.floating):
            if issubclass(dtypeobj, _nt.longfloat):
                format_function = _longfloatFormatter(precision)
            else:
                format_function = FloatFormat(data, precision, suppress_small)
        elif issubclass(dtypeobj, _nt.complexfloating):
            if issubclass(dtypeobj, _nt.clongfloat):
                format_function = _clongfloatFormatter(precision)
            else:
                format_function = ComplexFormat(data, precision,
                                                suppress_small)
        elif issubclass(dtypeobj, _nt.unicode_) or \
                 issubclass(dtypeobj, _nt.string_):
            format_function = repr
        else:
            format_function = str

    next_line_prefix = " "  # skip over "["
    next_line_prefix += " " * len(prefix)  # skip over array(

    lst = _formatArray(a, format_function, len(a.shape), max_line_width,
                       next_line_prefix, separator, _summaryEdgeItems,
                       summary_insert)[:-1]

    return lst
예제 #2
0
파일: arrayprint.py 프로젝트: 1950/sawbuck
def _array2string(a, max_line_width, precision, suppress_small, separator=' ',
                  prefix=""):

    if max_line_width is None:
        max_line_width = _line_width

    if precision is None:
        precision = _float_output_precision

    if suppress_small is None:
        suppress_small = _float_output_suppress_small

    if a.size > _summaryThreshold:
        summary_insert = "..., "
        data = _leading_trailing(a)
    else:
        summary_insert = ""
        data = ravel(a)

    try:
        format_function = a._format
    except AttributeError:
        dtypeobj = a.dtype.type
        if issubclass(dtypeobj, _nt.bool_):
            # make sure True and False line up.
            format_function = _boolFormatter
        elif issubclass(dtypeobj, _nt.integer):
            if issubclass(dtypeobj, _nt.timeinteger):
                format_function = str
            else:
                max_str_len = max(len(str(maximum.reduce(data))),
                                  len(str(minimum.reduce(data))))
                format = '%' + str(max_str_len) + 'd'
                format_function = lambda x: _formatInteger(x, format)
        elif issubclass(dtypeobj, _nt.floating):
            if issubclass(dtypeobj, _nt.longfloat):
                format_function = LongFloatFormat(precision)
            else:
                format_function = FloatFormat(data, precision, suppress_small)
        elif issubclass(dtypeobj, _nt.complexfloating):
            if issubclass(dtypeobj, _nt.clongfloat):
                format_function = LongComplexFormat(precision)
            else:
                format_function = ComplexFormat(data, precision, suppress_small)
        elif issubclass(dtypeobj, _nt.unicode_) or \
                 issubclass(dtypeobj, _nt.string_):
            format_function = repr
        else:
            format_function = str

    next_line_prefix = " " # skip over "["
    next_line_prefix += " "*len(prefix)                  # skip over array(

    lst = _formatArray(a, format_function, len(a.shape), max_line_width,
                       next_line_prefix, separator,
                       _summaryEdgeItems, summary_insert)[:-1]

    return lst
예제 #3
0
 def __init__(self, data):
     try:
         max_str_len = max(len(str(maximum.reduce(data, skipna=True))),
                           len(str(minimum.reduce(data, skipna=True))))
         self.format = '%' + str(max_str_len) + 'd'
     except TypeError, NotImplementedError:
         # if reduce(data) fails, this instance will not be called, just
         # instantiated in formatdict.
         pass
예제 #4
0
 def __init__(self, data):
     try:
         max_str_len = max(len(str(maximum.reduce(data))),
                           len(str(minimum.reduce(data))))
         self.format = '%' + str(max_str_len) + 'd'
     except TypeError, NotImplementedError:
         # if reduce(data) fails, this instance will not be called, just
         # instantiated in formatdict.
         pass
예제 #5
0
    def fillFormat(self, data):
        import numeric as _nc
        errstate = _nc.seterr(all='ignore')
        try:
            special = isnan(data) | isinf(data) | isna(data)
            special[isna(data)] = False
            valid = not_equal(data, 0) & ~special
            valid[isna(data)] = False
            non_zero = absolute(data.compress(valid))
            if len(non_zero) == 0:
                max_val = 0.
                min_val = 0.
            else:
                max_val = maximum.reduce(non_zero, skipna=True)
                min_val = minimum.reduce(non_zero, skipna=True)
                if max_val >= 1.e8:
                    self.exp_format = True
                if not self.suppress_small and (min_val < 0.0001
                                           or max_val/min_val > 1000.):
                    self.exp_format = True
        finally:
            _nc.seterr(**errstate)

        if self.exp_format:
            self.large_exponent = 0 < min_val < 1e-99 or max_val >= 1e100
            self.max_str_len = 8 + self.precision
            if self.large_exponent:
                self.max_str_len += 1
            if self.sign:
                format = '%+'
            else:
                format = '%'
            format = format + '%d.%de' % (self.max_str_len, self.precision)
        else:
            format = '%%.%df' % (self.precision,)
            if len(non_zero):
                precision = max([_digits(x, self.precision, format)
                                 for x in non_zero])
            else:
                precision = 0
            precision = min(self.precision, precision)
            self.max_str_len = len(str(int(max_val))) + precision + 2
            if _nc.any(special):
                self.max_str_len = max(self.max_str_len,
                                       len(_nan_str),
                                       len(_inf_str)+1,
                                       len(_na_str))
            if self.sign:
                format = '%#+'
            else:
                format = '%#'
            format = format + '%d.%df' % (self.max_str_len, precision)

        self.special_fmt = '%%%ds' % (self.max_str_len,)
        self.format = format
예제 #6
0
파일: arrayprint.py 프로젝트: 87/numpy
 def __init__(self, data):
     try:
         max_str_len = max(len(str(maximum.reduce(data))),
                           len(str(minimum.reduce(data))))
         self.format = '%' + str(max_str_len) + 'd'
     except (TypeError, NotImplementedError):
         # if reduce(data) fails, this instance will not be called, just
         # instantiated in formatdict.
         pass
     except ValueError:
         # this occurs when everything is NA
         pass
예제 #7
0
 def __init__(self, data):
     try:
         max_str_len = max(len(str(maximum.reduce(data, skipna=True))),
                           len(str(minimum.reduce(data, skipna=True))))
         self.format = '%' + str(max_str_len) + 'd'
     except (TypeError, NotImplementedError):
         # if reduce(data) fails, this instance will not be called, just
         # instantiated in formatdict.
         pass
     except ValueError:
         # this occurs when everything is NA
         pass
예제 #8
0
    def fillFormat(self, data):
        import numeric as _nc
        errstate = _nc.seterr(all='ignore')
        try:
            special = isnan(data) | isinf(data) | isna(data)
            special[isna(data)] = False
            valid = not_equal(data, 0) & ~special
            valid[isna(data)] = False
            non_zero = absolute(data.compress(valid))
            if len(non_zero) == 0:
                max_val = 0.
                min_val = 0.
            else:
                max_val = maximum.reduce(non_zero, skipna=True)
                min_val = minimum.reduce(non_zero, skipna=True)
                if max_val >= 1.e8:
                    self.exp_format = True
                if not self.suppress_small and (min_val < 0.0001
                                                or max_val / min_val > 1000.):
                    self.exp_format = True
        finally:
            _nc.seterr(**errstate)

        if self.exp_format:
            self.large_exponent = 0 < min_val < 1e-99 or max_val >= 1e100
            self.max_str_len = 8 + self.precision
            if self.large_exponent:
                self.max_str_len += 1
            if self.sign:
                format = '%+'
            else:
                format = '%'
            format = format + '%d.%de' % (self.max_str_len, self.precision)
        else:
            format = '%%.%df' % (self.precision, )
            if len(non_zero):
                precision = max(
                    [_digits(x, self.precision, format) for x in non_zero])
            else:
                precision = 0
            precision = min(self.precision, precision)
            self.max_str_len = len(str(int(max_val))) + precision + 2
            if _nc.any(special):
                self.max_str_len = max(self.max_str_len, len(_nan_str),
                                       len(_inf_str) + 1, len(_na_str))
            if self.sign:
                format = '%#+'
            else:
                format = '%#'
            format = format + '%d.%df' % (self.max_str_len, precision)

        self.special_fmt = '%%%ds' % (self.max_str_len, )
        self.format = format
예제 #9
0
 def __init__(self, data):
     if data.dtype.kind == 'm':
         nat_value = array(['NaT'], dtype=data.dtype)[0]
         int_dtype = dtype(data.dtype.byteorder + 'i8')
         int_view = data.view(int_dtype)
         v = int_view[not_equal(int_view, nat_value.view(int_dtype))]
         if len(v) > 0:
             # Max str length of non-NaT elements
             max_str_len = max(len(str(maximum.reduce(v))),
                               len(str(minimum.reduce(v))))
         else:
             max_str_len = 0
         if len(v) < len(data):
             # data contains a NaT
             max_str_len = max(max_str_len, 5)
         self.format = '%' + str(max_str_len) + 'd'
         self._nat = "'NaT'".rjust(max_str_len)
예제 #10
0
 def __init__(self, data):
     if data.dtype.kind == 'm':
         v = data.view('i8')
         max_str_len = max(len(str(maximum.reduce(v))),
                           len(str(minimum.reduce(v))))
         self.format = '%' + str(max_str_len) + 'd'
예제 #11
0
 def __init__(self, data):
     if data.dtype.kind == 'm':
         v = data.view('i8')
         max_str_len = max(len(str(maximum.reduce(v))),
                           len(str(minimum.reduce(v))))
         self.format = '%' + str(max_str_len) + 'd'