Пример #1
0
 def test_save_params_only(self):
     from curve import Curve
     models.PROFILE_SAVE = True
     curve = CurveDB()
     curve.set_data(pandas.Series([1,4,6]))
     curve.save()
     
     
     print_and_log("================================")
     
     for i in range(5):
         curve = CurveDB()
         curve.set_data(pandas.Series([1,4,6]))
         for j in range(100):
             curve.params['coucou' + str(j)] = i*j
         tic = time.time()
         curve.save_params()
         print_and_log("time for saving 100 parameters in db only, new curve each time: " + str(time.time() - tic))
     print_and_log("================================")
     for i in range(5):
         curve = CurveDB()
         curve.set_data(pandas.Series([1,4,6]))
         for j in range(100):
             curve.params['coucou' + str(j)] = i*j
         tic = time.time()
         curve.save()
         print_and_log("time for saving 1 curve with 100 parameters, new curve each time: " + str(time.time() - tic))
     models.PROFILE_SAVE = False
Пример #2
0
    def test_import_export_with_childs(self):
        from pyinstruments import CurveDB
        c = CurveDB()
        s = pandas.Series([1,2,1])
        c.set_data(s)
        c.name = 'to_be_exported'
        c.save()
        
        c2 = CurveDB()
        s2 = pandas.Series([1,3,1])
        c2.set_data(s2)
        c2.name = 'to_be_exported_child'
        c2.move(c)
        
        queryset = CurveDB.objects.filter(id__in=[c.id, c2.id])
        from pyinstruments.curvestore.export import export_zip, import_zip
        export_zip(queryset, osp.dirname(__file__) + '/tests/temp_files/' +\
                    'test_export1.zip')
        c.delete()
        import_zip(osp.dirname(__file__) + '/tests/temp_files/' + \
                    'test_export1.zip')
        q = CurveDB.objects.filter_param('name', value='to_be_exported_child')

        self.assertEqual(q.count(), 1)
        self.assertLess((q[0].data - s2).abs().max(), 0.001)
Пример #3
0
 def test_insert(self):
     print_and_log("================================")
     curve = CurveDB()
     curve.set_data(pandas.Series([1,4,6]))
     curve.save()
     
     tic = time.time()
     for i in range(100):
         curve.save()
     print_and_log("time for saving 100 times the same simple dummy curve: " , time.time() - tic)
Пример #4
0
 def test_insert3(self):
     print_and_log("================================")
     
     for i in range(3):
         curve = CurveDB()
         curve.set_data(pandas.Series([1,4,6]))
         for j in range(100):
             curve.params['coucou' + str(j)] = i*j
         tic = time.time()
         curve.save()
         print_and_log("time for saving 1 curve with 100 parameters (new curve each time): " + str(time.time() - tic))
Пример #5
0
 def test_remove_param(self):
     curve = CurveDB()
     curve.params['hello'] = 4
     curve.save()
     curve = CurveDB.objects.get(id=curve.id)
     self.assertTrue('hello' in curve.get_all_params_db())
     del curve.params['hello']
     curve.save()
     self.assertTrue('hello' not in curve.get_all_params_db())
     curve = CurveDB.objects.get(id=curve.id)
     self.assertTrue('hello' not in curve.get_all_params_db())
Пример #6
0
 def test_delete(self):
     from curve import Curve
     curve = CurveDB()
     curve.set_data(pandas.Series([1,4,6]))
     curve.params["dummy"] = 24.5
     for j in range(100):
         curve.params['coucou' + str(j)] = j
     curve.save()
     tic = time.time()
     curve.delete()
     print_and_log("time for deleting one curve: ", time.time() - tic)
Пример #7
0
 def test_save_curve_only(self):
     from curve import Curve
     curve = CurveDB()
     curve.set_data(pandas.Series([1,4,6]))
     curve.save()
     print_and_log("================================")
     for i in range(3):
         for j in range(100):
             curve.params['coucou' + str(j)] = i*j
         tic = time.time()
         Curve.save(curve, curve.get_full_filename())
         print_and_log("time for saving 1 curve with 100 parameters in h5: " + str(time.time() - tic))
Пример #8
0
 def test_insert2(self):
     print_and_log("================================")
     curve = CurveDB()
     curve.set_data(pandas.Series([1,4,6]))
     curve.save()
     
     for i in range(3):
         for j in range(100):
             curve.params['coucou' + str(j)] = i*j
         tic = time.time()
         curve.save()
         print_and_log("time for saving 1 curve with 100 parameters (always same curve, values changing): " + str(time.time() - tic))
Пример #9
0
 def test_insert_bad_param_string(self):
     curve = CurveDB()
     curve.set_data(pandas.Series([1,4,6]))
     curve.params['some_string_param'] = 'coucou'
     curve.save()
     def do_some_crap():
         curve.params['some_string_param'] = 15.
         curve.save()
     self.assertRaises(ValueError, do_some_crap)
     def do_other_crap():
         curve = CurveDB()
         curve.params['some_string_param'] = 15.
         curve.save()
     self.assertRaises(ValueError, do_other_crap)
Пример #10
0
 def test_alter_params_only(self):
     from curve import Curve
     curve = CurveDB()
     curve.set_data(pandas.Series([1,4,6]))
     curve.params["dummy"] = 24.5
     for j in range(100):
         curve.params['coucou' + str(j)] = j
     curve.save()
     tic = time.time()
     curve.params["dummy"] = 25.5
     models.PROFILING = True
     curve.save_params()
     print_and_log("================================")
     print_and_log("time for altering just one value: ", time.time() - tic)
     models.PROFILING = False
Пример #11
0
 def test_save_altered_curve(self):
     from curve import Curve
     curve = CurveDB()
     curve.set_data(pandas.Series([1,4,6]))
     curve.save()
     
     
     print_and_log("================================")
     curve = CurveDB()
     curve.set_data(pandas.Series([1,4,6]))
     for i in range(5):
         for j in range(100):
             curve.params['coucou' + str(j)] = i*j
         tic = time.time()
         curve.save_params()
         print_and_log("time for saving 100 parameters in db only, same curve each time: " + str(time.time() - tic))
Пример #12
0
 def test_insert_param(self):
     curve = CurveDB()
     curve.set_data(pandas.Series([1,4,6]))
     curve.save()
     
     for i in range(100):
         curve.params['coucou' + str(i)] = i
     curve.save()
     cu = CurveDB.objects.get(id=curve.id)
     self.assertTrue(cu.params['coucou12']==12)
     
     cu.params['coucou12'] = 45.
     cu.save()
     cu2 = CurveDB.objects.get(id=curve.id)
     self.assertTrue(cu2.params['coucou12']==45.)
     
     search = CurveDB.objects.filter_param('coucou12', value__gte=44)
     self.assertTrue(cu2 in search)
Пример #13
0
 def test_remove_param(self):
     curve = CurveDB()
     curve.set_data(pandas.Series([1,4,6]))
     curve.save()
     
     for i in range(20):
         curve.params['coucou' + str(i)] = i
     curve.save()
     curve = CurveDB.objects.get(id=curve.id)
     curve.params.pop("coucou12")
     curve.save()
     curve = CurveDB.objects.get(id=curve.id)
     self.assertTrue("coucou12" not in curve.params)
Пример #14
0
 def test_clear_columns(self):
     curve = CurveDB()
     curve.set_data(pandas.Series([1,4,6]))
     curve.save()
     
     curve.params['dummy_name'] = 89
     curve.save()
     curve = CurveDB.objects.get(id=curve.id)
     self.assertTrue("dummy_name" in [o.name for o in ParamColumn.objects.all()])
     
     curve.params.pop('dummy_name')
     curve.save()
     self.assertTrue("dummy_name" in [o.name for o in ParamColumn.objects.all()])
     clear_unused_columns()
     self.assertFalse("dummy_name" in [o.name for o in ParamColumn.objects.all()])
Пример #15
0
 def do_other_crap():
     curve = CurveDB()
     curve.params['some_float_param'] = 'coucou'
     curve.save()
Пример #16
0
 def do_other_crap():
     curve = CurveDB()
     curve.params['some_string_param'] = 15.
     curve.save()
Пример #17
0
class SimpleTest(TestCurvestore):
    def test_curve_save(self):
        """
        Tests that a curve can be saved.
        """
        self.curve = CurveDB()
        print self.curve.params
        self.curve.set_data(pandas.Series([1,4,6]))
        print self.curve.params
        self.curve.save()
    
    def test_curve_filter_param_string(self):
        """
        Tests that a curve can be retrieved by a string param.
        """
        self.curve = CurveDB()
        self.curve.params['name'] = 'some_name'
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()

        qs = CurveDB.objects.filter_param('name', value='some_name')
        self.assertTrue(self.curve in qs)
        
    def test_curve_filter_param_float(self):
        """
        Tests that a curve can be retrieved by a string param.
        """
        
        self.curve = CurveDB()
        self.curve.params['name'] = 'some_name'
        self.curve.params['Q'] = 1e6
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()

        qs = CurveDB.objects.filter_param('Q', value=1e6)
        self.assertTrue(self.curve in qs)
        
    def test_curve_filter_param_float_lte(self):
        """
        Tests that a curve can be retrieved by a string param.
        """
        self.curve = CurveDB()
        self.curve.params['name'] = 'some_name'
        self.curve.params['Q'] = 1e6
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()

        qs = CurveDB.objects.filter_param('Q', value__lte=1e7)
        self.assertTrue(self.curve in qs)
        qs = CurveDB.objects.filter_param('Q', value__gte=1e7)
        self.assertFalse(self.curve in qs)
        
    def test_curve_filter_param_boolean(self):
        """
        Tests that a curve can be retrieved by a string param.
        """
        self.curve = CurveDB()
        self.curve.params['name'] = 'some_name'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()

        qs = CurveDB.objects.filter_param('nice_curve', value=True)
        self.assertTrue(self.curve in qs)
        qs = CurveDB.objects.filter_param('nice_curve', value=False)
        self.assertFalse(self.curve in qs)
    
    def test_curve_filter_param_text(self):
        """
        Tests that a curve can be retrieved by a string param.
        """
        self.curve = CurveDB()
        self.curve.params['comment'] = 'bla bla bla'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()

        qs = CurveDB.objects.filter_param('comment', value__contains='bla')
        self.assertTrue(self.curve in qs)
        qs = CurveDB.objects.filter_param('nice_curve', value__contains='blo')
        self.assertFalse(self.curve in qs)
        
    def test_curve_filter_date(self):
        """
        Tests that a curve can be retrieved by a date.
        """
        self.curve = CurveDB()
        self.curve.params['comment'] = 'bla bla bla'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()

        qs = CurveDB.objects.filter_param('date', value__lte=datetime.now())
        self.assertTrue(self.curve in qs)
        qs = CurveDB.objects.filter_param('date', value__gte=datetime.now() + timedelta(0,0,1e6))
        self.assertFalse(self.curve in qs)
        
        
    def test_curve_filter_tag(self):
        """
        Tests that a curve can be retrieved by a date.
        """
        self.curve = CurveDB()
        self.curve.params['comment'] = 'bla bla bla'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.tags.append('new_tag')
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()
        self.curve.tags.append('other_tag')
        self.curve.save()
        self.curve2 = CurveDB()
        self.curve2.set_data(pandas.Series([1,4,6]))
        self.curve2.tags.append('new_tag')
        self.curve2.params['Q'] = 5e6
        self.curve2.save()

        qs = CurveDB.objects.filter_tag('new_tag')
        self.assertTrue(self.curve in qs)
        self.assertTrue(self.curve2 in qs)
        
        qs = CurveDB.objects.filter_tag('other_tag')
        self.assertTrue(self.curve in qs)
        self.assertFalse(self.curve2 in qs)
        
        qs = CurveDB.objects.filter_tag('new_tag').filter_tag("other_tag")
        self.assertTrue(self.curve in qs)
        self.assertFalse(self.curve2 in qs)


    def test_curve_filter_distinct_elements(self):
        """
        Tests that a curve can be retrieved by a date.
        """
        self.curve = CurveDB()
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.tags.append('new_tag')
        self.curve.tags.append('new_tag/sub')
        self.curve.save()
        self.assertTrue(CurveDB.objects.filter_tag("new_tag").count()==1)
     
    def test_curve_filter_hierarchical_tag(self):
        self.curve = CurveDB()
        self.curve.params['comment'] = 'bla bla bla'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.tags.append('new_tag/subtag')
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()
        
        qs = CurveDB.objects.filter_tag("new_tag")
        self.assertTrue(self.curve in qs)
        
        qs = CurveDB.objects.filter_tag("new_t")
        self.assertFalse(self.curve in qs)
        
    def test_remove_tag(self):
        """
        Tests that a curve can be retrieved by a date.
        """
        self.curve = CurveDB()
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()
        self.curve.tags.append('other_tag')
        self.curve.save()
        qs = CurveDB.objects.filter_tag('other_tag')
        self.assertTrue(self.curve in qs)
        self.curve.tags.pop(0)
        self.curve.save()
        curve = CurveDB.objects.get(id=self.curve.id)
        self.assertTrue("other_tag" not in curve.tags)
        
       
    def test_rename_tag(self):
        """
        Tests that a curve can be retrieved by a date.
        """
        self.curve = CurveDB()
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()
        self.curve.tags.append('other_tag')
        self.curve.save()
        
        tag = Tag.objects.get(name='other_tag')
        tag.name = 'brand_new_name'
        tag.save()
        curve = CurveDB.objects.get(id=self.curve.id)
        
        self.assertTrue(curve.tags == ['brand_new_name'])
        
    def test_chained_filter(self):
        self.curve = CurveDB()
        self.curve.params['comment'] = 'bla bla bla'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.tags.append('new_tag')
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()
        self.curve.tags.append('other_tag')
        self.curve.save()
        self.curve2 = CurveDB()
        self.curve2.set_data(pandas.Series([1,4,6]))
        self.curve2.tags.append('new_tag')
        self.curve2.params['Q'] = 5e6
        self.curve2.save()
        
        qs = CurveDB.objects.filter_tag('new_tag').filter_param('Q', value__lte = 1e7)
        self.assertTrue(self.curve in qs)

        qs = CurveDB.objects.filter_tag('new_tag').filter_param('Q', value__gte = 1e7)
        self.assertFalse(self.curve in qs)
        
        qs = CurveDB.objects.filter_tag('new_tag').filter_tag('other_tag').filter_param('Q', value__lte = 1e7)
        self.assertTrue(self.curve in qs)
        self.assertFalse(self.curve2 in qs)

    def test_move(self):
        curve = models.CurveDB.create([1,3,4])
        curve.name = 'fix'
        curve.save()
        
        curve2 = models.CurveDB.create([1,3,4])
        curve2.name = 'moving'
        curve2.save()
        
        curve2.move(curve)
        
        curve = models.CurveDB.objects.get(id=curve.id)
        self.assertTrue(curve.has_childs)
        self.assertTrue(curve2.id in [c.id for c in curve.childs.all()])
        
    def test_move_root(self):
        curve = models.CurveDB.create([1,3,4])
        curve.name = 'fix'
        curve.save()
        
        curve2 = models.CurveDB.create([1,3,4])
        curve2.name = 'child'
        curve.add_child(curve2)
        
        curve2.move(None)
        
        self.assertTrue(curve2.id in [c.id for c in models.CurveDB.top.all()])
Пример #18
0
class TestImportExport(TestCurvestore):
    def test_import_export(self):
        from pyinstruments import CurveDB
        c = CurveDB()
        s = pandas.Series([1,2,1])
        c.set_data(s)
        c.name = 'to_be_exported'
        c.save()
        queryset = CurveDB.objects.filter(id=c.id)
        from pyinstruments.curvestore.export import export_zip, import_zip
        export_zip(queryset, osp.dirname(__file__) + '/tests/temp_files/' + \
                    'test_export1.zip')
        c.delete()
        import_zip(osp.dirname(__file__) + '/tests/temp_files/' +\
                    'test_export1.zip')
        q = CurveDB.objects.filter_param('name',value='to_be_exported')
        self.assertEqual(q.count(), 1)
        self.assertLess((q[0].data - s).abs().max(), 0.001)
    
    def test_import_export_with_childs(self):
        from pyinstruments import CurveDB
        c = CurveDB()
        s = pandas.Series([1,2,1])
        c.set_data(s)
        c.name = 'to_be_exported'
        c.save()
        
        c2 = CurveDB()
        s2 = pandas.Series([1,3,1])
        c2.set_data(s2)
        c2.name = 'to_be_exported_child'
        c2.move(c)
        
        queryset = CurveDB.objects.filter(id__in=[c.id, c2.id])
        from pyinstruments.curvestore.export import export_zip, import_zip
        export_zip(queryset, osp.dirname(__file__) + '/tests/temp_files/' +\
                    'test_export1.zip')
        c.delete()
        import_zip(osp.dirname(__file__) + '/tests/temp_files/' + \
                    'test_export1.zip')
        q = CurveDB.objects.filter_param('name', value='to_be_exported_child')

        self.assertEqual(q.count(), 1)
        self.assertLess((q[0].data - s2).abs().max(), 0.001)

    def test_backupreload(self):
        self.curve = CurveDB()
        self.curve.params['comment'] = 'bla bla bla'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.tags.append('new_tag')
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()
        self.curve.tags.append('other_tag')
        self.curve.save()
        self.curve2 = CurveDB()
        self.curve2.set_data(pandas.Series([1,4,6]))
        self.curve2.tags.append('new_tag')
        self.curve2.params['Q'] = 5e6
        self.curve2.save()
        self.curve2.move(self.curve)
        self.curve2 = CurveDB()
        self.curve2.set_data(pandas.Series([1,4,6]))
        self.curve2.tags.append('new_tag')
        self.curve2.params['Q'] = 5e6
        self.curve2.save()
        self.curve2.move(self.curve)
        
        tags = self.curve.tags
        curveid = self.curve.id
        from pyinstruments.curvestore import export
        export.backup_database(osp.dirname(__file__) + '/tests/temp_files/' +\
                    'test_backup_database.txt')
        CurveDB.objects.all().delete()
        Tag.objects.all().delete()
        print "Number of curves before reimport: ", CurveDB.objects.all().count()
        print "Number of tags: ", Tag.objects.all().count()
        
        export.reload_database(osp.dirname(__file__) + '/tests/temp_files/' + \
                    'test_backup_database.txt')

        print "Number of curves after reimport: ", CurveDB.objects.all().count()
        print "Number of tags: ", Tag.objects.all().count()

        curve = CurveDB.objects.get(pk=curveid) 
        
        self.assertEqual(curve.params["Q"], 1e6)
        self.assertEqual(curve.tags, tags)
Пример #19
0
class SimpleTest(TestCase):
    def test_curve_save(self):
        """
        Tests that a curve can be saved.
        """
        self.curve = CurveDB()
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()
    
    def test_curve_filter_param_string(self):
        """
        Tests that a curve can be retrieved by a string param.
        """
        self.curve = CurveDB()
        self.curve.params['name'] = 'some_name'
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()

        qs = CurveDB.objects.filter_param('name', value='some_name')
        self.assertTrue(self.curve in qs)
        
    def test_curve_filter_param_float(self):
        """
        Tests that a curve can be retrieved by a string param.
        """
        
        self.curve = CurveDB()
        self.curve.params['name'] = 'some_name'
        self.curve.params['Q'] = 1e6
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()

        qs = CurveDB.objects.filter_param('Q', value=1e6)
        self.assertTrue(self.curve in qs)
        
    def test_curve_filter_param_float_lte(self):
        """
        Tests that a curve can be retrieved by a string param.
        """
        self.curve = CurveDB()
        self.curve.params['name'] = 'some_name'
        self.curve.params['Q'] = 1e6
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()

        qs = CurveDB.objects.filter_param('Q', value__lte=1e7)
        self.assertTrue(self.curve in qs)
        qs = CurveDB.objects.filter_param('Q', value__gte=1e7)
        self.assertFalse(self.curve in qs)
        
    def test_curve_filter_param_boolean(self):
        """
        Tests that a curve can be retrieved by a string param.
        """
        self.curve = CurveDB()
        self.curve.params['name'] = 'some_name'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()

        qs = CurveDB.objects.filter_param('nice_curve', value=True)
        self.assertTrue(self.curve in qs)
        qs = CurveDB.objects.filter_param('nice_curve', value=False)
        self.assertFalse(self.curve in qs)
    
    def test_curve_filter_param_text(self):
        """
        Tests that a curve can be retrieved by a string param.
        """
        self.curve = CurveDB()
        self.curve.params['comment'] = 'bla bla bla'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()

        qs = CurveDB.objects.filter_param('comment', value__contains='bla')
        self.assertTrue(self.curve in qs)
        qs = CurveDB.objects.filter_param('nice_curve', value__contains='blo')
        self.assertFalse(self.curve in qs)
        
    def test_curve_filter_date(self):
        """
        Tests that a curve can be retrieved by a date.
        """
        self.curve = CurveDB()
        self.curve.params['comment'] = 'bla bla bla'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()

        qs = CurveDB.objects.filter_param('date', value__lte=datetime.now())
        self.assertTrue(self.curve in qs)
        qs = CurveDB.objects.filter_param('date', value__gte=datetime.now())
        self.assertFalse(self.curve in qs)
        
        
    def test_curve_filter_tag(self):
        """
        Tests that a curve can be retrieved by a date.
        """
        self.curve = CurveDB()
        self.curve.params['comment'] = 'bla bla bla'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.tags.append('new_tag')
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()
        self.curve.tags.append('other_tag')
        self.curve.save()
        self.curve2 = CurveDB()
        self.curve2.set_data(pandas.Series([1,4,6]))
        self.curve2.tags.append('new_tag')
        self.curve2.params['Q'] = 5e6
        self.curve2.save()

        qs = CurveDB.objects.filter_tag('new_tag')
        self.assertTrue(self.curve in qs)
        self.assertTrue(self.curve2 in qs)
        
        qs = CurveDB.objects.filter_tag('other_tag')
        self.assertTrue(self.curve in qs)
        self.assertFalse(self.curve2 in qs)
        
        qs = CurveDB.objects.filter_tag('new_tag').filter_tag("other_tag")
        self.assertTrue(self.curve in qs)
        self.assertFalse(self.curve2 in qs)


    def test_curve_filter_distinct_elements(self):
        """
        Tests that a curve can be retrieved by a date.
        """
        self.curve = CurveDB()
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.tags.append('new_tag')
        self.curve.tags.append('new_tag/sub')
        self.curve.save()
        self.assertTrue(CurveDB.objects.filter_tag("new_tag").count()==1)
     
    def test_curve_filter_hierarchical_tag(self):
        self.curve = CurveDB()
        self.curve.params['comment'] = 'bla bla bla'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.tags.append('new_tag/subtag')
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()
        
        qs = CurveDB.objects.filter_tag("new_tag")
        self.assertTrue(self.curve in qs)
        
        qs = CurveDB.objects.filter_tag("new_t")
        self.assertFalse(self.curve in qs)
        
    def test_remove_tag(self):
        """
        Tests that a curve can be retrieved by a date.
        """
        self.curve = CurveDB()
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()
        self.curve.tags.append('other_tag')
        self.curve.save()
        qs = CurveDB.objects.filter_tag('other_tag')
        self.assertTrue(self.curve in qs)
        self.curve.tags.pop(0)
        self.curve.save()
        curve = CurveDB.objects.get(id=self.curve.id)
        self.assertTrue("other_tag" not in curve.tags)
        
       
    def test_rename_tag(self):
        """
        Tests that a curve can be retrieved by a date.
        """
        self.curve = CurveDB()
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()
        self.curve.tags.append('other_tag')
        self.curve.save()
        
        tag = Tag.objects.get(name='other_tag')
        tag.name = 'brand_new_name'
        tag.save()
        curve = CurveDB.objects.get(id=self.curve.id)
        
        self.assertTrue(curve.tags == ['brand_new_name'])
        
    def test_chained_filter(self):
        self.curve = CurveDB()
        self.curve.params['comment'] = 'bla bla bla'
        self.curve.params['Q'] = 1e6
        self.curve.params['nice_curve'] = True
        self.curve.tags.append('new_tag')
        self.curve.set_data(pandas.Series([1,4,6]))
        self.curve.save()
        self.curve.tags.append('other_tag')
        self.curve.save()
        self.curve2 = CurveDB()
        self.curve2.set_data(pandas.Series([1,4,6]))
        self.curve2.tags.append('new_tag')
        self.curve2.params['Q'] = 5e6
        self.curve2.save()
        
        qs = CurveDB.objects.filter_tag('new_tag').filter_param('Q', value__lte = 1e7)
        self.assertTrue(self.curve in qs)

        qs = CurveDB.objects.filter_tag('new_tag').filter_param('Q', value__gte = 1e7)
        self.assertFalse(self.curve in qs)
        
        qs = CurveDB.objects.filter_tag('new_tag').filter_tag('other_tag').filter_param('Q', value__lte = 1e7)
        self.assertTrue(self.curve in qs)
        self.assertFalse(self.curve2 in qs)