def _datastring2rawniml(s, niml): '''Converts data with uniform type to raw NIML''' debug('NIML', 'Raw string to NIML: %d characters', len(s)) tps = niml['vec_typ'] onetype = types.findonetype(tps) if onetype is None or ([onetype] == types.str2codes('string') and len(tps) > 1): return _mixedtypes_datastring2rawniml(s, niml) if [onetype] == types.str2codes('string'): # single string return decode_escape(s.decode()) # do not string2rawniml # numeric, either int or float ncols = niml['vec_num'] nrows = niml['vec_len'] tp = types.code2numpy_type(onetype) niform = niml.get('ni_form', None) if not niform or niform == 'text': data = np.zeros((nrows, ncols), dtype=tp) # allocate space for data convertor = types.code2python_convertor( onetype) # string to type convertor vals = s.split(None) # split by whitespace seperator if len(vals) != ncols * nrows: raise ValueError("unexpected number of elements") for i, val in enumerate(vals): data[i // ncols, i % ncols] = convertor(val) else: dtype = np.dtype(tp) dtype = types.byteorder_from_niform(niform, dtype) if 'base64' in niform: debug('NIML', 'base64, %d chars: %s', (len(s), _partial_string(s, 0))) s = base64.b64decode(s) elif not 'binary' in niform: raise ValueError('Illegal niform %s' % niform) data_1d = np.fromstring(s, dtype=tp) debug('NIML', 'data vector has %d elements, reshape to %d x %d = %d', (np.size(data_1d), nrows, ncols, nrows * ncols)) data = np.reshape(data_1d, (nrows, ncols)) return data
def _datastring2rawniml(s, niml): '''Converts data with uniform type to raw NIML''' debug('NIML', 'Raw string to NIML: %d characters', len(s)) tps = niml['vec_typ'] onetype = types.findonetype(tps) if onetype is None or ([onetype] == types.str2codes('string') and len(tps) > 1): return _mixedtypes_datastring2rawniml(s, niml) if [onetype] == types.str2codes('string'): # single string return decode_escape(s.decode()) # do not string2rawniml # numeric, either int or float ncols = niml['vec_num'] nrows = niml['vec_len'] tp = types.code2numpy_type(onetype) niform = niml.get('ni_form', None) if not niform or niform == 'text': data = np.zeros((nrows, ncols), dtype=tp) # allocate space for data convertor = types.code2python_convertor(onetype) # string to type convertor vals = s.split(None) # split by whitespace seperator if len(vals) != ncols * nrows: raise ValueError("unexpected number of elements") for i, val in enumerate(vals): data[i // ncols, i % ncols] = convertor(val) else: dtype = np.dtype(tp) dtype = types.byteorder_from_niform(niform, dtype) if 'base64' in niform: debug('NIML', 'base64, %d chars: %s', (len(s), _partial_string(s, 0))) s = base64.b64decode(s) elif not 'binary' in niform: raise ValueError('Illegal niform %s' % niform) data_1d = np.fromstring(s, dtype=tp) debug('NIML', 'data vector has %d elements, reshape to %d x %d = %d', (np.size(data_1d), nrows, ncols, nrows * ncols)) data = np.reshape(data_1d, (nrows, ncols)) return data