diff utils/scalar_series/test_series.py @ 186:d364a130b221

Ajout du code de base pour scalar_series. Modifications à stacked_dae: réglé un problème avec les input_divider (empêchait une optimisation), et ajouté utilisation des séries. Si j'avais pas déjà commité, aussi, j'ai enlevé l'histoire de réutilisation du pretraining: c'était compliqué (error prone) et ça créait des jobs beaucoup trop longues.
author fsavard
date Mon, 01 Mar 2010 11:45:25 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utils/scalar_series/test_series.py	Mon Mar 01 11:45:25 2010 -0500
@@ -0,0 +1,197 @@
+#!/usr/bin/python
+# coding: utf-8
+
+import sys
+import tempfile
+import os.path
+import os
+
+import numpy
+
+from series import BaseSeries, AccumulatorSeries, SeriesContainer, BasicStatsSeries, SeriesMultiplexer, SeriesList, ParamsArrayStats
+
+
+BASEDIR = tempfile.mkdtemp()
+
+def tempname():
+    file = tempfile.NamedTemporaryFile(dir=BASEDIR)
+    filepath = file.name
+    return os.path.split(filepath)
+
+def tempdir():
+    wholepath = os.path.dirname(tempfile.mkdtemp(dir=BASEDIR))
+    # split again, interpreting the last directory as a filename
+    return os.path.split(wholepath)
+
+def tempseries(type='f', flush_every=1):
+    dir, filename = tempname()
+
+    s = BaseSeries(name=filename, directory=dir, type=type, flush_every=flush_every)
+
+    return s
+
+def test_Series_storeload():
+    s = tempseries()
+
+    s.append(12.0)
+    s.append_list([13.0,14.0,15.0])
+
+    s2 = BaseSeries(name=s.name, directory=s.directory, flush_every=15)
+    # also test if elements stored before load_from_file (and before a flush)
+    # are deleted (or array is restarted from scratch... both work)
+    s2.append(10.0)
+    s2.append_list([30.0,40.0])
+    s2.load_from_file()
+
+    assert s2.tolist() == [12.0,13.0,14.0,15.0]
+
+
+def test_AccumulatorSeries_mean():
+    dir, filename = tempname()
+
+    s = AccumulatorSeries(reduce_every=15, mean=True, name=filename, directory=dir)
+
+    for i in range(50):
+        s.append(i)
+
+    assert s.tolist() == [7.0,22.0,37.0]
+
+def test_BasicStatsSeries_commoncase():
+    a1 = numpy.arange(25).reshape((5,5))
+    a2 = numpy.arange(40).reshape((8,5))
+    
+    parent_dir, dir = tempdir()
+
+    bss = BasicStatsSeries(parent_directory=parent_dir, name=dir)
+
+    bss.append(a1)
+    bss.append(a2)
+
+    assert bss.means.tolist() == [12.0, 19.5]
+    assert bss.mins.tolist() == [0.0, 0.0]
+    assert bss.maxes.tolist() == [24.0, 39.0]
+    assert (bss.stds.tolist()[0] - 7.211102) < 1e-3
+    assert (bss.stds.tolist()[1] - 11.54339) < 1e-3
+
+    # try to reload
+
+    bss2 = BasicStatsSeries(parent_directory=parent_dir, name=dir)
+    bss2.load_from_directory()
+
+    assert bss2.means.tolist() == [12.0, 19.5]
+    assert bss2.mins.tolist() == [0.0, 0.0]
+    assert bss2.maxes.tolist() == [24.0, 39.0]
+    assert (bss2.stds.tolist()[0] - 7.211102) < 1e-3
+    assert (bss2.stds.tolist()[1] - 11.54339) < 1e-3
+
+def test_BasicStatsSeries_reload():
+    a1 = numpy.arange(25).reshape((5,5))
+    a2 = numpy.arange(40).reshape((8,5))
+    
+    parent_dir, dir = tempdir()
+
+    bss = BasicStatsSeries(parent_directory=parent_dir, name=dir)
+
+    bss.append(a1)
+    bss.append(a2)
+
+    # try to reload
+
+    bss2 = BasicStatsSeries(parent_directory=parent_dir, name=dir)
+    bss2.load_from_directory()
+
+    assert bss2.means.tolist() == [12.0, 19.5]
+    assert bss2.mins.tolist() == [0.0, 0.0]
+    assert bss2.maxes.tolist() == [24.0, 39.0]
+    assert (bss2.stds.tolist()[0] - 7.211102) < 1e-3
+    assert (bss2.stds.tolist()[1] - 11.54339) < 1e-3
+
+
+def test_BasicStatsSeries_withaccumulator():
+    a1 = numpy.arange(25).reshape((5,5))
+    a2 = numpy.arange(40).reshape((8,5))
+    a3 = numpy.arange(20).reshape((4,5))
+    a4 = numpy.arange(48).reshape((6,8))
+    
+    parent_dir, dir = tempdir()
+
+    sc = AccumulatorSeries.series_constructor(reduce_every=2, mean=False)
+
+    bss = BasicStatsSeries(parent_directory=parent_dir, name=dir, series_constructor=sc)
+
+    bss.append(a1)
+    bss.append(a2)
+    bss.append(a3)
+    bss.append(a4)
+
+    assert bss.means.tolist() == [31.5, 33.0]
+
+def test_SeriesList_withbasicstats():
+    dir = tempfile.mkdtemp(dir=BASEDIR)
+
+    bscstr = BasicStatsSeries.series_constructor()
+
+    slist = SeriesList(num_elements=5, name="foo", directory=dir, series_constructor=bscstr)
+
+    for i in range(10): # 10 elements in each list
+        curlist = []
+        for j in range(5): # 5 = num_elements, ie. number of list to append to
+            dist = numpy.arange(i*j, i*j+10)
+            curlist.append(dist)
+        slist.append(curlist)
+
+    slist2 = SeriesList(num_elements=5, name="foo", directory=dir, series_constructor=bscstr)
+
+    slist2.load_from_files()
+
+    l1 = slist2._subseries[0].means.tolist()
+    l2 = slist2._subseries[4].means.tolist()
+
+    print l1
+    print l2
+
+    assert l1 == [4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5]
+    assert l2 == [4.5, 8.5, 12.5, 16.5, 20.5, 24.5, 28.5, 32.5, 36.5, 40.5]
+
+# same test as above, just with the shortcut
+def test_ParamsArrayStats_reload():
+    dir = tempfile.mkdtemp(dir=BASEDIR)
+
+    slist = ParamsArrayStats(5, name="foo", directory=dir)
+
+    for i in range(10): # 10 elements in each list
+        curlist = []
+        for j in range(5): # 5 = num_elements, ie. number of list to append to
+            dist = numpy.arange(i*j, i*j+10)
+            curlist.append(dist)
+        slist.append(curlist)
+
+    slist2 = ParamsArrayStats(5, name="foo", directory=dir)
+
+    slist2.load_from_files()
+
+    l1 = slist2._subseries[0].means.tolist()
+    l2 = slist2._subseries[4].means.tolist()
+
+    print l1
+    print l2
+
+    assert l1 == [4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5]
+    assert l2 == [4.5, 8.5, 12.5, 16.5, 20.5, 24.5, 28.5, 32.5, 36.5, 40.5]
+
+
+def manual_BasicStatsSeries_graph():
+    parent_dir, dir = tempdir()
+
+    bss = BasicStatsSeries(parent_directory=parent_dir, name=dir)
+
+    for i in range(50):
+        bss.append(1.0/numpy.arange(i*5, i*5+5))
+
+    bss.graph()
+
+#if __name__ == '__main__':
+#    import pylab
+#    manual_BasicStatsSeries_graph()
+#    pylab.show()
+