def __init__(self, id, data, components, xmlnode=None): """Create a name source instance. :param str id: A unique string identifier for the source :param numpy.array data: Numpy array (unshaped) with the source values :param tuple components: Tuple of strings describing the semantic of the data, e.g. ``('JOINT')`` would cause :attr:`data` to be reshaped as ``(-1, 1)`` :param xmlnode: When loaded, the xmlnode it comes from. """ self.id = id """The unique string identifier for the source""" self.data = data """Numpy array with the source values. This will be shaped as ``(-1,N)`` where ``N = len(self.components)``""" self.data.shape = (-1, len(components)) self.components = components """Tuple of strings describing the semantic of the data, e.g. ``('JOINT')``""" if xmlnode != None: self.xmlnode = xmlnode """ElementTree representation of the source.""" else: self.data.shape = (-1, ) txtdata = ' '.join(map(str, self.data.tolist())) rawlen = len(self.data) self.data.shape = (-1, len(self.components)) acclen = len(self.data) stridelen = len(self.components) sourcename = "%s-array" % self.id self.xmlnode = E.source(E.Name_array(txtdata, count=str(rawlen), id=sourcename), E.technique_common( E.accessor( *[ E.param(type='Name', name=c) for c in self.components ], **{ 'count': str(acclen), 'stride': str(stridelen), 'source': sourcename })), id=self.id)