Example #1
0
def _data2string(data, form):
    '''Converts a data element to binary, text or base64 representation'''
    if isinstance(data, basestring):
        return ('"%s"' % encode_escape(data)).encode()

    elif type(data) is np.ndarray:
        if form == 'text' or types.numpy_data_isstring(data):
            f = types.numpy_data2printer(data)
            nrows, ncols = data.shape
            return _TEXT_ROWSEP.join([
                _TEXT_COLSEP.join([f(data[row, col]) for col in xrange(ncols)])
                for row in xrange(nrows)
            ]).encode()
        elif form == 'binary':
            data_reshaped = data.reshape((data.shape[1], data.shape[0]))
            r = data_reshaped.tostring()
            debug(
                'NIML', 'Binary encoding (len %d -> %d): [%s]' %
                (data_reshaped.size, len(r), _partial_string(r, 0)))
            return r
        elif form == 'base64':
            data_reshaped = data.reshape((data.shape[1], data.shape[0]))
            r = base64.b64encode(data_reshaped.tostring())
            debug('NIML', 'Encoding ok: [%s]', _partial_string(r, 0))
            return r
        else:
            raise ValueError("illegal format %s" % format)

    elif type(data) is list:
        # mixed types, each column in its own container
        # always use text output format, even if requested form is binary of base64

        ncols = len(data)
        if ncols == 0:
            return "".encode()
        else:
            nrows = len(data[0])

            # separate formatter functions for each column
            # if list of strings then take first element of the list to get a string formattr
            # else use the entire np array to get a numeric formatter
            fs = [
                types.numpy_data2printer(d[0] if type(d) is list else d)
                for d in data
            ]

            return _TEXT_ROWSEP.join([
                _TEXT_COLSEP.join(
                    [fs[col](data[col][row]) for col in xrange(ncols)])
                for row in xrange(nrows)
            ]).encode()

    else:
        raise TypeError("Unknown type %r" % type(data))
Example #2
0
def _data2string(data, form):
    '''Converts a data element to binary, text or base64 representation'''
    if isinstance(data, basestring):
        return ('"%s"' % encode_escape(data)).encode()

    elif type(data) is np.ndarray:
        if form == 'text':
            f = types.numpy_data2printer(data)
            nrows, ncols = data.shape
            return _TEXT_ROWSEP.join([_TEXT_COLSEP.join([f(data[row, col])
                                                         for col in xrange(ncols)])
                                                         for row in xrange(nrows)]).encode()
        elif form == 'binary':
            data_reshaped = data.reshape((data.shape[1], data.shape[0]))
            r = data_reshaped.tostring()
            debug('NIML', 'Binary encoding (len %d -> %d): [%s]' %
                            (data_reshaped.size, len(r), _partial_string(r, 0)))
            return r
        elif form == 'base64':
            data_reshaped = data.reshape((data.shape[1], data.shape[0]))
            r = base64.b64encode(data_reshaped.tostring())
            debug('NIML', 'Encoding ok: [%s]', _partial_string(r, 0))
            return r
        else:
            raise ValueError("illegal format %s" % format)

    elif type(data) is list:
        # mixed types, each column in its own container
        # always use text output format, even if requested form is binary of base64

        ncols = len(data)
        if ncols == 0:
            return "".encode()
        else:
            nrows = len(data[0])

            # separate formatter functions for each column
            # if list of strings then take first element of the list to get a string formattr
            # else use the entire np array to get a numeric formatter
            fs = [types.numpy_data2printer(d[0] if type(d) is list else d) for d in data]

            return _TEXT_ROWSEP.join([_TEXT_COLSEP.join([fs[col](data[col][row])
                                                         for col in xrange(ncols)])
                                                         for row in xrange(nrows)]).encode()

    else:
        raise TypeError("Unknown type %r" % type(data))
Example #3
0
def _dset2rawniml_datarange(s):
    data = s['data']

    minpos = np.argmin(data, axis=0)
    maxpos = np.argmax(data, axis=0)

    f = types.numpy_data2printer(data) # formatter function
    r = []
    for i in xrange(len(minpos)):
        mnpos = minpos[i]
        mxpos = maxpos[i]
        r.append('%s %s %d %d' % (f(data[mnpos, i]), f(data[mxpos, i]), mnpos, mxpos))

    # range of data in each column
    return dict(atr_name='COLMS_RANGE',
                data=r)