+++ /dev/null
-.. This file is part of TimeSide
- @author: Thomas Fillon
-
-=============================
- New analyzer Result example
-=============================
-
-Example of use of the new analyzerResult structure
-
-Usage : newAnalyzerResult(dataMode=None, timeMode=None)
-
-See : :class:`timeside.analyzer.core.newAnalyzerResult`
-
-Default
-=======
-
-Create a new analyzer result without arguments
-
- >>> import timeside.analyzer.core as coreA
- >>> res = coreA.newAnalyzerResult()
-
-This default result has all the metadata and data attribute
-
- >>> res.keys()
- ['dataMode', 'timeMode', 'idMetadata', 'data', 'audioMetadata', 'frameMetadata', 'labelMetadata', 'parameters']
-
- >>> for key,value in res.items():
- ... print '%s : %s' % (key, value)
- ...
- dataMode : None
- timeMode : None
- idMetadata : {'description': '', 'author': '', 'version': '', 'date': '', 'id': '', 'unit': '', 'name': ''}
- data : {'duration': array([], dtype=float64), 'time': array([], dtype=float64), 'value': None, 'label': array([], dtype=int64)}
- audioMetadata : {'duration': None, 'start': 0, 'channelsManagement': '', 'uri': '', 'channels': None}
- frameMetadata : {'blocksize': None, 'samplerate': None, 'stepsize': None}
- labelMetadata : {'labelType': 'mono', 'description': None, 'label': None}
- parameters : {}
-
-
-Specification of timeMode
-=========================
-Four different timeMode can be specified :
-
-- 'framewise' : Data are returned on a frame basis (i.e. with specified blocksize, stepsize and framerate)
-- 'global' : A global data value is return for the entire audio item
-- 'segment' : Data are returned on a segmnet basis (i.e. with specified start time and duration)
-- 'event' : Data are returned on a segment basis (i.e. with specified start time)
-
-
-Framewise
----------
-
->>> res = coreA.newAnalyzerResult(timeMode='framewise')
->>> res.keys()
-['dataMode', 'timeMode', 'idMetadata', 'data', 'audioMetadata', 'frameMetadata', 'labelMetadata', 'parameters']
-
-Global
-------
-
-No frame metadata information is needed for these modes.
-The 'frameMetadata' key/attribute is deleted.
-
->>> res = coreA.newAnalyzerResult(timeMode='global')
->>> res.keys()
-['dataMode', 'timeMode', 'idMetadata', 'data', 'audioMetadata', 'labelMetadata', 'parameters']
->>> res.data
-AnalyzerData(value=None, label=array([], dtype=int64))
-
-Segment
--------
-
->>> res = coreA.newAnalyzerResult(timeMode='segment')
->>> res.keys()
-['dataMode', 'timeMode', 'idMetadata', 'data', 'audioMetadata', 'labelMetadata', 'parameters']
->>> res.data
-AnalyzerData(value=None, label=array([], dtype=int64), time=array([], dtype=float64), duration=array([], dtype=float64))
-
-Event
------
-
->>> res = coreA.newAnalyzerResult(timeMode='event')
->>> res.keys()
-['dataMode', 'timeMode', 'idMetadata', 'data', 'audioMetadata', 'labelMetadata', 'parameters']
->>> res.data
-AnalyzerData(value=None, label=array([], dtype=int64), time=array([], dtype=float64))
-
-Specification of dataMode
-=========================
-Two different dataMode can be specified :
-
-- 'value' : Data are returned as numpy Array of arbitrary type
-- 'label' : Data are returned as label indexes (specified by the labelMetadata key)
-
-Value
------
-The labelMetadata key is deleted.
-
->>> res = coreA.newAnalyzerResult(dataMode='value')
->>> res.keys()
-['dataMode', 'timeMode', 'idMetadata', 'data', 'audioMetadata', 'frameMetadata', 'parameters']
-
-In the data key, the 'value' key is kept and the 'label' key is deleted.
-
->>> res.data
-AnalyzerData(value=None, time=array([], dtype=float64), duration=array([], dtype=float64))
-
-Label
------
->>> res = coreA.newAnalyzerResult(dataMode='label')
->>> res.keys()
-['dataMode', 'timeMode', 'idMetadata', 'data', 'audioMetadata', 'frameMetadata', 'labelMetadata', 'parameters']
-
-In the data key, the 'label' key is kept and the 'value' key is deleted.
-
-
->>> res.data
-AnalyzerData(label=array([], dtype=int64), time=array([], dtype=float64), duration=array([], dtype=float64))
value = numpy.asarray(value)
if value.dtype.type not in numpy_data_types:
raise TypeError(
- 'AnalyzerResult can not accept type %s for %s' %
+ 'Result Data can not accept type %s for %s' %
(value.dtype.type, name))
if value.shape == ():
value.resize((1,))
value = numpy.asarray(value, dtype='int')
except ValueError:
raise TypeError(
- 'AnalyzerResult can not accept type %s for %s' %
+ 'Result Data can not accept type %s for %s' %
(value.dtype.type, name))
elif name in ['time', 'duration']:
value = numpy.asfarray(value)
except ValueError:
raise TypeError(
- 'AnalyzerResult can not accept type %s for %s' %
+ 'Result Data can not accept type %s for %s' %
(value.dtype.type, name))
elif name == 'dataType':
return
return self
-class newAnalyzerResult(MetadataObject):
+class AnalyzerResult(MetadataObject):
"""
Object that contains the metadata and parameters of an analyzer process
def __init__(self, dataMode=None,
timeMode=None):
- super(newAnalyzerResult, self).__init__()
+ super(AnalyzerResult, self).__init__()
self.dataMode = dataMode
self.timeMode = timeMode
if name in setFuncDict.keys():
setFunc = setFuncDict[name]
if isinstance(value, setFunc):
- super(newAnalyzerResult, self).__setattr__(name, value)
+ super(AnalyzerResult, self).__setattr__(name, value)
return
elif isinstance(value, dict):
for (sub_name, sub_value) in value.items():
self[name][sub_name] = sub_value
return
elif value is None:
- super(newAnalyzerResult, self).__setattr__(name, setFunc())
+ super(AnalyzerResult, self).__setattr__(name, setFunc())
return
else:
raise TypeError('Wrong argument')
else:
raise ValueError('Argument ''timeMode''=%s should be in %s'
% (value, self._validTimeMode))
- super(newAnalyzerResult, self).__setattr__(name, value)
+ super(AnalyzerResult, self).__setattr__(name, value)
def as_dict(self):
return dict([(key, self[key].as_dict())
dataModeChild = root.find('dataMode')
timeModeChild = root.find('timeMode')
- result = newAnalyzerResult(dataMode=dataModeChild.text,
+ result = AnalyzerResult(dataMode=dataModeChild.text,
timeMode=timeModeChild.text)
for child in root:
key = child.tag
return result
-class AnalyzerMetadata(MetadataObject):
- """
- Object that contains the metadata and parameters of an analyzer process
-
- Attributes
- ----------
- id : string
- name : string
- unit : string
- samplerate : int or float
- blocksize : int
- stepsize : int
- parameters : dict
-
- """
- # TODO : Remove this class
-
- # Define default values as an OrderDict
- # in order to keep the order of the keys for display
- _default_value = OrderedDict([('id', ''),
- ('name', ''),
- ('unit', ''),
- ('samplerate', None),
- ('blocksize', None),
- ('stepsize', None),
- ('parameters', {})
- ])
-
-
-class AnalyzerResult(object):
-
- """
- Object that contains results return by an analyzer process
- metadata :
- - data :
- - metadata : an AnalyzerMetadata object containing the metadata
- """
- # TODO : Remove this class
-
- def __init__(self, data=None, metadata=None):
- # Define Metadata
- if metadata is None:
- self.metadata = AnalyzerMetadata()
- else:
- self.metadata = metadata
-
- # Define Data
- self.data = data
-
- def __setattr__(self, name, value):
-
- # Set Data with the proper type
- if name == 'data':
- if value is None:
- value = []
- # make a numpy.array out of list
- if isinstance(value, list):
- value = numpy.array(value)
- # serialize using numpy
- if type(value) in numpy_data_types + [numpy.ndarray]:
- value = value.tolist()
- if type(value) not in [list, str, int, long, float, complex, type(None)] + numpy_data_types:
- raise TypeError('AnalyzerResult can not accept type %s' %
- type(value))
- elif name == 'metadata':
- if not isinstance(value, AnalyzerMetadata):
- value = AnalyzerMetadata(**value)
- else:
- raise AttributeError("%s is not a valid attribute in %s" %
- (name, self.__class__.__name__))
-
- return super(AnalyzerResult, self).__setattr__(name, value)
-
- @property
- def properties(self):
- prop = dict(mean=numpy.mean(self.data, axis=0),
- std=numpy.std(self.data, axis=0, ddof=1),
- median=numpy.median(self.data, axis=0),
- max=numpy.max(self.data, axis=0),
- min=numpy.min(self.data, axis=0)
- )
- # ajouter size
- return(prop)
-
- def as_dict(self):
- return(dict(data=self.data, metadata=self.metadata.as_dict()))
-
- def to_json(self):
- import simplejson as json
- return json.dumps(self.as_dict())
-
- def __repr__(self):
- return self.to_json()
-
- def __eq__(self, other):
- return (isinstance(other, self.__class__)
- and self.as_dict() == other.as_dict())
-
- def __ne__(self, other):
- return not self.__eq__(other)
+# @property
+# def properties(self):
+# prop = dict(mean=numpy.mean(self.data, axis=0),
+# std=numpy.std(self.data, axis=0, ddof=1),
+# median=numpy.median(self.data, axis=0),
+# max=numpy.max(self.data, axis=0),
+# min=numpy.min(self.data, axis=0)
+# )
+# # ajouter size
+# return(prop)
class AnalyzerResultContainer(dict):
>>> (d|a).run() #doctest: +ELLIPSIS
<timeside.core.ProcessPipe object at 0x...>
>>> a.new_result() #doctest: +ELLIPSIS
- newAnalyzerResult(dataMode=None, timeMode=None, idMetadata=IdMetadata(id='', name='', unit='', description='', date='...', version='...', author='TimeSide'), data=AnalyzerData(value=None, label=array([], dtype=int64), time=array([], dtype=float64), duration=array([], dtype=float64)), audioMetadata=AudioMetadata(uri='file:///.../tests/samples/sweep.wav', start=1.0, duration=7.0, channels=None, channelsManagement=''), frameMetadata=FrameMetadata(samplerate=None, blocksize=None, stepsize=None), labelMetadata=LabelMetadata(label=None, description=None, labelType='mono'), parameters={})
+ AnalyzerResult(dataMode=None, timeMode=None, idMetadata=IdMetadata(id='', name='', unit='', description='', date='...', version='...', author='TimeSide'), data=AnalyzerData(value=None, label=array([], dtype=int64), time=array([], dtype=float64), duration=array([], dtype=float64)), audioMetadata=AudioMetadata(uri='file:///.../tests/samples/sweep.wav', start=1.0, duration=7.0, channels=None, channelsManagement=''), frameMetadata=FrameMetadata(samplerate=None, blocksize=None, stepsize=None), labelMetadata=LabelMetadata(label=None, description=None, labelType='mono'), parameters={})
>>> resContainer = coreA.AnalyzerResultContainer()
'''
self.add_result(res)
return
# Check result
- if not (isinstance(analyzer_result, AnalyzerResult)
- or isinstance(analyzer_result, newAnalyzerResult)):
+ if not isinstance(analyzer_result, AnalyzerResult):
raise TypeError('only AnalyzerResult can be added')
self.__setitem__(analyzer_result.idMetadata.id,
#root = tree.getroot()
root = ET.fromstring(xml_string)
for child in root.iter('result'):
- result = newAnalyzerResult()
+ result = AnalyzerResult()
results.add_result(result.from_xml(ET.tostring(child)))
return results
results = AnalyzerResultContainer()
for res_json in results_json:
- res = newAnalyzerResult(dataMode=res_json['dataMode'],
+ res = AnalyzerResult(dataMode=res_json['dataMode'],
timeMode=res_json['timeMode'])
for key in res_json.keys():
if key not in ['dataMode', 'timeMode']:
results_yaml = yaml.load(yaml_str)
results = AnalyzerResultContainer()
for res_yaml in results_yaml:
- res = newAnalyzerResult()
+ res = AnalyzerResult()
for key in res_yaml.keys():
res[key] = res_yaml[key]
results.add_result(res)
try:
for (group_name, group) in h5_file.items():
- result = newAnalyzerResult(dataMode=group.attrs['dataMode'],
+ result = AnalyzerResult(dataMode=group.attrs['dataMode'],
timeMode=group.attrs['timeMode'])
# Read Sub-Group
for subgroup_name, subgroup in group.items():
def unit():
return ""
- def new_result(self, dataMode=newAnalyzerResult._default_value['dataMode'],
- timeMode=newAnalyzerResult._default_value['timeMode']):
+ def new_result(self, dataMode=AnalyzerResult._default_value['dataMode'],
+ timeMode=AnalyzerResult._default_value['timeMode']):
'''
Create a new result
from datetime import datetime
- result = newAnalyzerResult(dataMode=dataMode, timeMode=timeMode)
+ result = AnalyzerResult(dataMode=dataMode, timeMode=timeMode)
# Automatically write known metadata
result.idMetadata = IdMetadata(
date=datetime.now().replace(microsecond=0).isoformat(' '),