]> git.parisson.com Git - timeside.git/commitdiff
Change newAnalyzerResult to AnalyzerResult
authorThomas Fillon <thomas@parisson.com>
Fri, 4 Oct 2013 16:40:37 +0000 (18:40 +0200)
committerThomas Fillon <thomas@parisson.com>
Fri, 4 Oct 2013 16:40:37 +0000 (18:40 +0200)
.gitignore
doc/source/api/analyzer/core.rst
doc/source/examples/index.rst
doc/source/examples/newAnalyzerResult.rst [deleted file]
tests/test_AnalyzerResult.py
tests/test_analyzer_dc.py
tests/test_analyzer_level.py
timeside/analyzer/core.py

index c53ff0cb9bd1a67af0aa342156c13e1d64341dc9..0d04bb68c3cbd91b176318ec98c776e6bd8affe0 100644 (file)
@@ -5,3 +5,5 @@ dist/
 *.swp
 tests/samples
 TimeSide.egg-info
+*.rst~
+*.py~
\ No newline at end of file
index 97463058b37cc96e69fc8e3e4d9ae484ab50ccde..5c81903a9f773cd7efd5fde04799857b6e3824a4 100644 (file)
@@ -7,8 +7,8 @@
 New analyzer Result
 *******************
 
-.. autoclass:: newAnalyzerResult
-   :members: 
+.. autoclass:: AnalyzerResult
+   :members:
    :undoc-members:
    :show-inheritance:
 
@@ -16,6 +16,6 @@ AnalyzerResultContainer
 ***********************
 
 .. autoclass:: AnalyzerResultContainer
-   :members: 
+   :members:
    :undoc-members:
    :show-inheritance:
index d17df1a17e762daf89e181d8877f29c3a052ade7..c43250697044db4bb95b64594cf6a3fdb08fc5d6 100644 (file)
@@ -12,6 +12,6 @@ Contents:
    :maxdepth: 2
 
       Tutorial <tutorial>
-      Usage of the 'new' AnalyzerResult <newAnalyzerResult>
+      Usage of AnalyzerResult <AnalyzerResult>
 
 
diff --git a/doc/source/examples/newAnalyzerResult.rst b/doc/source/examples/newAnalyzerResult.rst
deleted file mode 100644 (file)
index 7415c7a..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-.. 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))
index d2a35f8469282a87eaef0cf475d1a9af6e0598e4..d1dd63e8fad0d66602779395ec5436b8d6110dcb 100755 (executable)
@@ -12,7 +12,7 @@ class TestAnalyzerResult(TestCase):
     """ test AnalyzerResult """
 
     def setUp(self):
-        self.result = newAnalyzerResult(dataMode='value', timeMode='framewise')
+        self.result = AnalyzerResult(dataMode='value', timeMode='framewise')
         from datetime import datetime
         self.result.idMetadata = dict(date=datetime.now().replace(microsecond=0).isoformat(' '),
                                        version=TimeSideVersion,
index e29d5d40c6418a97bcfcdf748549c9506a193671..ae2ec2729f777e6a7d693e0f7f990f852affa0f3 100755 (executable)
@@ -1,10 +1,8 @@
 #! /usr/bin/env python
 
 from unit_timeside import *
-from timeside.decoder import *
+from timeside.decoder import FileDecoder
 from timeside.analyzer.dc import MeanDCShift
-from timeside.analyzer.core import AnalyzerResult, AnalyzerMetadata
-from numpy import round
 
 class TestAnalyzerDC(TestCase):
 
index a90cf6ea072d2301bc54939b03c31b3c1e87eb40..b298880c0c9daeacb45ceda317ad95a03f2ec0f7 100755 (executable)
@@ -3,8 +3,6 @@
 from unit_timeside import *
 from timeside.decoder import *
 from timeside.analyzer.level import Level
-from timeside.analyzer import newAnalyzerResult, AnalyzerResultContainer
-from timeside.analyzer import AnalyzerMetadata
 
 class TestAnalyzerLevel(TestCase):
 
index 3d4f1361b08d35c6af7c4c5558c2b5a8616aee2d..aaef5f20e145dfb661bbba49e4ee427c5f8aa75e 100644 (file)
@@ -315,7 +315,7 @@ class AnalyzerData(MetadataObject):
                 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,))
@@ -325,7 +325,7 @@ class AnalyzerData(MetadataObject):
                     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']:
@@ -333,7 +333,7 @@ class AnalyzerData(MetadataObject):
                     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
@@ -405,7 +405,7 @@ class AnalyzerParameters(dict):
         return self
 
 
-class newAnalyzerResult(MetadataObject):
+class AnalyzerResult(MetadataObject):
 
     """
     Object that contains the metadata and parameters of an analyzer process
@@ -454,7 +454,7 @@ class newAnalyzerResult(MetadataObject):
 
     def __init__(self, dataMode=None,
                  timeMode=None):
-        super(newAnalyzerResult, self).__init__()
+        super(AnalyzerResult, self).__init__()
         self.dataMode = dataMode
         self.timeMode = timeMode
 
@@ -469,14 +469,14 @@ class newAnalyzerResult(MetadataObject):
         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')
@@ -521,7 +521,7 @@ class newAnalyzerResult(MetadataObject):
             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())
@@ -551,7 +551,7 @@ class newAnalyzerResult(MetadataObject):
 
         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
@@ -562,107 +562,17 @@ class newAnalyzerResult(MetadataObject):
         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):
@@ -679,7 +589,7 @@ 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()
 
     '''
@@ -712,8 +622,7 @@ class AnalyzerResultContainer(dict):
                 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,
@@ -741,7 +650,7 @@ class AnalyzerResultContainer(dict):
         #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
@@ -776,7 +685,7 @@ class AnalyzerResultContainer(dict):
         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']:
@@ -812,7 +721,7 @@ class AnalyzerResultContainer(dict):
         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)
@@ -871,7 +780,7 @@ class AnalyzerResultContainer(dict):
         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():
@@ -946,8 +855,8 @@ class Analyzer(Processor):
     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
 
@@ -964,7 +873,7 @@ class Analyzer(Processor):
 
         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(' '),