Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
optv / test / test_parameters_bindings.py
Size: Mime:
import unittest
from optv.parameters import MultimediaParams, ControlParams, VolumeParams, \
    SequenceParams, TrackingParams, TargetParams

import numpy, os, shutil
from numpy import r_

class Test_MultimediaParams(unittest.TestCase):
    def test_mm_np_instantiation(self):
        
        n2_np = numpy.array([11, 22, 33])
        d_np = numpy.array([55, 66, 77])
        
        # Initialize MultimediaParams object (uses all setters of MultimediaParams)
        m = MultimediaParams(n1=2, n2=n2_np, d=d_np, n3=4)
        self.failUnlessEqual(m.get_nlay(), 3)
        self.failUnlessEqual(m.get_n1(), 2)
        self.failUnlessEqual(m.get_n3(), 4)
        self.failUnlessEqual(m.get_nlay(), len(d_np))
        
        numpy.testing.assert_array_equal(m.get_d(), d_np)
        numpy.testing.assert_array_equal(m.get_n2(), n2_np)
        
        self.failUnlessEqual(m.__str__(), "nlay=\t3 \nn1=\t2.0 \nn2=\t{11.0, 22.0, 33.0} \nd=\t{55.0, 66.0, 77.0} \nn3=\t4.0 ")
        
        # pass two arrays with different number of elements
        new_arr = numpy.array([1, 2, 3, 4])
        with self.assertRaises(ValueError):
            m.set_layers(new_arr, d_np)
        new_arr = numpy.array([1, 2, 3])
        
        arr = m.get_n2(copy=False)  # don't copy the values: link directly to memory 
        arr[0] = 77.77
        arr[1] = 88.88
        arr[2] = 99.99
        # assert that the arr affected the contents of m object
        numpy.testing.assert_array_equal(m.get_n2(), [77.77, 88.88, 99.99])

class Test_TrackingParams(unittest.TestCase):
    
    def setUp(self):
        self.input_tracking_par_file_name = "testing_fodder/tracking_parameters/track.par"
            
        # create an instance of TrackingParams class
        # testing setters that are used in constructor
        self.track_obj1 = TrackingParams(
            accel_lim=1.1, angle_lim=2.2, add_particle=1,
            velocity_lims=[[3.3, 4.4], [5.5, 6.6], [7.7, 8.8]])
        
    # Testing getters according to the values passed in setUp
    
    def test_TrackingParams_getters(self):
        self.failUnless(self.track_obj1.get_dacc() == 1.1)
        self.failUnless(self.track_obj1.get_dangle() == 2.2)
        self.failUnless(self.track_obj1.get_dvxmin() == 3.3)
        self.failUnless(self.track_obj1.get_dvxmax() == 4.4)
        self.failUnless(self.track_obj1.get_dvymin() == 5.5)
        self.failUnless(self.track_obj1.get_dvymax() == 6.6)
        self.failUnless(self.track_obj1.get_dvzmin() == 7.7)
        self.failUnless(self.track_obj1.get_dvzmax() == 8.8)
        self.failUnless(self.track_obj1.get_add() == 1)

    def test_TrackingParams_read_from_file(self):
        """Filling a TrackingParams object by reading file"""
        
        # read tracking parameters from file
        self.track_obj1.read_track_par(self.input_tracking_par_file_name)
        
        # check that the values of track_obj1 are equal to values in tracking parameters file
        # the check is performed according to the order the parameters were read from same file
        track_file = open(self.input_tracking_par_file_name, 'r')
        self.failUnless(self.track_obj1.get_dvxmin() == float(track_file.readline()))
        self.failUnless(self.track_obj1.get_dvxmax() == float(track_file.readline()))
        self.failUnless(self.track_obj1.get_dvymin() == float(track_file.readline()))
        self.failUnless(self.track_obj1.get_dvymax() == float(track_file.readline()))
        self.failUnless(self.track_obj1.get_dvzmin() == float(track_file.readline()))
        self.failUnless(self.track_obj1.get_dvzmax() == float(track_file.readline()))
        self.failUnless(self.track_obj1.get_dangle() == float(track_file.readline()))
        self.failUnless(self.track_obj1.get_dacc() == float(track_file.readline()))
        self.failUnless(self.track_obj1.get_add() == int(track_file.readline()))
    
        self.failUnless(self.track_obj1.get_dsumg() == 0)
        self.failUnless(self.track_obj1.get_dn() == 0)
        self.failUnless(self.track_obj1.get_dnx() == 0)
        self.failUnless(self.track_obj1.get_dny() == 0)
        
    def test_comparison(self):
        # create two identical objects
        self.track_obj2 = TrackingParams(
            accel_lim=1.1, angle_lim=2.2, add_particle=1,
            velocity_lims=[[3.3, 4.4], [5.5, 6.6], [7.7, 8.8]])
        
        self.failUnless(self.track_obj2 == self.track_obj1)
        self.failIf(self.track_obj2 != self.track_obj1)
        
        # change one instance variable of track_obj2 and check that the comparisons results are inverted
        # please note that the operands '==' and '!=' must be checked separately
        self.track_obj2.set_dvxmin(999.999)
        self.failUnless(self.track_obj2 != self.track_obj1)
        self.failIf(self.track_obj2 == self.track_obj1)
                
class Test_SequenceParams(unittest.TestCase):
    def setUp(self):
        self.input_sequence_par_file_name = "testing_fodder/sequence_parameters/sequence.par"
            
        # create an instance of SequencParams class
        self.seq_obj = SequenceParams(num_cams=4)
        
    def test_read_sequence(self):
        # Fill the SequenceParams object with parameters from test file
        self.seq_obj.read_sequence_par(self.input_sequence_par_file_name, 4)
        
        # check that all parameters are equal to the contents of test file
        self.failUnless(self.seq_obj.get_img_base_name(0) == "dumbbell/cam1_Scene77_") 
        self.failUnless(self.seq_obj.get_img_base_name(1) == "dumbbell/cam2_Scene77_")
        self.failUnless(self.seq_obj.get_img_base_name(2) == "dumbbell/cam3_Scene77_")
        self.failUnless(self.seq_obj.get_img_base_name(3) == "dumbbell/cam4_Scene77_")
        self.failUnless(self.seq_obj.get_first() == 497)
        self.failUnless(self.seq_obj.get_last() == 597)
      
    def test_getters_setters(self):
        cams_num = 4
        for cam in range(cams_num):
            newStr = str(cam) + "some string" + str(cam)
            self.seq_obj.set_img_base_name(cam, newStr)
            self.failUnless(self.seq_obj.get_img_base_name(cam) == newStr)
             
        self.seq_obj.set_first(1234)
        self.failUnless(self.seq_obj.get_first() == 1234)
        self.seq_obj.set_last(5678)
        self.failUnless(self.seq_obj.get_last() == 5678)
       
    # testing __richcmp__ comparison method of SequenceParams class
    def test_rich_compare(self):
        self.seq_obj2 = SequenceParams(num_cams=4)
        self.seq_obj2.read_sequence_par(self.input_sequence_par_file_name, 4)
        
        self.seq_obj3 = SequenceParams(num_cams=4)
        self.seq_obj3.read_sequence_par(self.input_sequence_par_file_name, 4)
               
        self.failUnless(self.seq_obj2 == self.seq_obj3)
        self.failIf(self.seq_obj2 != self.seq_obj3)
            
        self.seq_obj2.set_first(-999)
        self.failUnless(self.seq_obj2 != self.seq_obj3)
        self.failIf(self.seq_obj2 == self.seq_obj3)
            
        with self.assertRaises(TypeError):
            var = (self.seq_obj2 > self.seq_obj3)
    
    def test_full_instantiate(self):
        """Instantiate a SequenceParams object from keywords."""
        spar = SequenceParams(
            image_base=['test1', 'test2'], frame_range=(1, 100))
        self.failUnless(spar.get_img_base_name(0) == "test1") 
        self.failUnless(spar.get_img_base_name(1) == "test2")
        self.failUnless(spar.get_first() == 1)
        self.failUnless(spar.get_last() == 100)
        
class Test_VolumeParams(unittest.TestCase):
    def setUp(self):
        self.input_volume_par_file_name = "testing_fodder/volume_parameters/volume.par"
        self.temp_output_directory = "testing_fodder/volume_parameters/testing_output"
        
        # create a temporary output directory (will be deleted by the end of test)
        if not os.path.exists(self.temp_output_directory):
            os.makedirs(self.temp_output_directory)
            
        # create an instance of VolumeParams class
        self.vol_obj = VolumeParams()
        
    def test_read_volume(self):
        # Fill the VolumeParams object with parameters from test file
        self.vol_obj.read_volume_par(self.input_volume_par_file_name)
        
        # check that all parameters are equal to the contents of test file
        numpy.testing.assert_array_equal(numpy.array([111.111, 222.222]), self.vol_obj.get_X_lay())
        numpy.testing.assert_array_equal(numpy.array([333.333, 444.444]), self.vol_obj.get_Zmin_lay())
        numpy.testing.assert_array_equal(numpy.array([555.555, 666.666]), self.vol_obj.get_Zmax_lay())
         
        self.failUnless(self.vol_obj.get_cnx() == 777.777)
        self.failUnless(self.vol_obj.get_cny() == 888.888)
        self.failUnless(self.vol_obj.get_cn() == 999.999)
        self.failUnless(self.vol_obj.get_csumg() == 1010.1010)
        self.failUnless(self.vol_obj.get_corrmin() == 1111.1111)
        self.failUnless(self.vol_obj.get_eps0() == 1212.1212)
        
    def test_setters(self):
        xlay = numpy.array([111.1, 222.2])
        self.vol_obj.set_X_lay(xlay)
        numpy.testing.assert_array_equal(xlay, self.vol_obj.get_X_lay())
        
        zmin = numpy.array([333.3, 444.4])
        self.vol_obj.set_Zmin_lay(zmin)
        numpy.testing.assert_array_equal(zmin, self.vol_obj.get_Zmin_lay())
        
        zmax = numpy.array([555.5, 666.6])
        self.vol_obj.set_Zmax_lay(zmax)
        numpy.testing.assert_array_equal(zmax, self.vol_obj.get_Zmax_lay())
        
        self.vol_obj.set_cn(1)
        self.failUnless(self.vol_obj.get_cn() == 1)
        
        self.vol_obj.set_cnx(2)
        self.failUnless(self.vol_obj.get_cnx() == 2)
        
        self.vol_obj.set_cny(3)
        self.failUnless(self.vol_obj.get_cny() == 3)
        
        self.vol_obj.set_csumg(4)
        self.failUnless(self.vol_obj.get_csumg() == 4)
        
        self.vol_obj.set_eps0(5)
        self.failUnless(self.vol_obj.get_eps0() == 5)
        
        self.vol_obj.set_corrmin(6)
        self.failUnless(self.vol_obj.get_corrmin() == 6)
    
    def test_init_kwargs(self):
        """Initialize volume parameters with keyword arguments"""
        xlay = numpy.array([111.1, 222.2])
        zlay = [r_[333.3, 555.5], r_[444.4, 666.6]]
        zmin, zmax = zip(*zlay)
        
        vol_obj = VolumeParams(x_span=xlay, z_spans=zlay, 
            pixels_tot=1, pixels_x=2, pixels_y=3, 
            ref_gray=4, epipolar_band=5, min_correlation=6)
        
        numpy.testing.assert_array_equal(xlay, vol_obj.get_X_lay())
        numpy.testing.assert_array_equal(zmin, vol_obj.get_Zmin_lay())
        numpy.testing.assert_array_equal(zmax, vol_obj.get_Zmax_lay())
        
        self.failUnless(vol_obj.get_cn() == 1)
        self.failUnless(vol_obj.get_cnx() == 2)
        self.failUnless(vol_obj.get_cny() == 3)
        self.failUnless(vol_obj.get_csumg() == 4)
        self.failUnless(vol_obj.get_eps0() == 5)
        self.failUnless(vol_obj.get_corrmin() == 6)
        
    # testing __richcmp__ comparison method of VolumeParams class
    def test_rich_compare(self):
        self.vol_obj2 = VolumeParams()
        self.vol_obj2.read_volume_par(self.input_volume_par_file_name)
        self.vol_obj3 = VolumeParams()
        self.vol_obj3.read_volume_par(self.input_volume_par_file_name)
        self.failUnless(self.vol_obj2 == self.vol_obj3)
        self.failIf(self.vol_obj2 != self.vol_obj3)
        
        self.vol_obj2.set_cn(-999)
        self.failUnless(self.vol_obj2 != self.vol_obj3)
        self.failIf(self.vol_obj2 == self.vol_obj3)
        
        with self.assertRaises(TypeError):
            var = (self.vol_obj2 < self.vol_obj3)
    
    def tearDown(self):
        # remove the testing output directory and its files
        shutil.rmtree(self.temp_output_directory)

class Test_ControlParams(unittest.TestCase):
    def setUp(self):
        self.input_control_par_file_name = "testing_fodder/control_parameters/control.par"
        self.temp_output_directory = "testing_fodder/control_parameters/testing_output"
        
        # create a temporary output directory (will be deleted by the end of test)
        if not os.path.exists(self.temp_output_directory):
            os.makedirs(self.temp_output_directory)
        # create an instance of ControlParams class
        self.cp_obj = ControlParams(4)
        
    def test_read_control(self):
        # Fill the ControlParams object with parameters from test file
        self.cp_obj.read_control_par(self.input_control_par_file_name)
        # check if all parameters are equal to the contents of test file
        self.failUnless(self.cp_obj.get_img_base_name(0) == "dumbbell/cam1_Scene77_4085") 
        self.failUnless(self.cp_obj.get_img_base_name(1) == "dumbbell/cam2_Scene77_4085")
        self.failUnless(self.cp_obj.get_img_base_name(2) == "dumbbell/cam3_Scene77_4085")
        self.failUnless(self.cp_obj.get_img_base_name(3) == "dumbbell/cam4_Scene77_4085")
        
        self.failUnless(self.cp_obj.get_cal_img_base_name(0) == "cal/cam1.tif")
        self.failUnless(self.cp_obj.get_cal_img_base_name(1) == "cal/cam2.tif")
        self.failUnless(self.cp_obj.get_cal_img_base_name(2) == "cal/cam3.tif")
        self.failUnless(self.cp_obj.get_cal_img_base_name(3) == "cal/cam4.tif")
        
        self.failUnless(self.cp_obj.get_num_cams() == 4)
        self.failUnless(self.cp_obj.get_hp_flag())
        self.failUnless(self.cp_obj.get_allCam_flag())
        self.failUnless(self.cp_obj.get_tiff_flag())
        self.failUnless(self.cp_obj.get_image_size(), (1280, 1024))
        self.failUnless(self.cp_obj.get_pixel_size() == (15.15,16.16))
        self.failUnless(self.cp_obj.get_chfield() == 17)
        
        self.failUnless(self.cp_obj.get_multimedia_params().get_n1() == 18)
        self.failUnless(self.cp_obj.get_multimedia_params().get_n2()[0] == 19.19)
        self.failUnless(self.cp_obj.get_multimedia_params().get_n3() == 20.20)
        self.failUnless(self.cp_obj.get_multimedia_params().get_d()[0] == 21.21)
     
    def test_instantiate_fast(self):
        """ControlParams instantiation through constructor"""
        cp = ControlParams(4, ['headers', 'hp', 'allcam'], (1280, 1024), 
            (15.15,16.16), 18, [19.19], [21.21], 20.20)
        
        self.failUnless(cp.get_num_cams() == 4)
        self.failUnless(cp.get_hp_flag())
        self.failUnless(cp.get_allCam_flag())
        self.failUnless(cp.get_tiff_flag())
        self.failUnless(cp.get_image_size(), (1280, 1024))
        self.failUnless(cp.get_pixel_size() == (15.15,16.16))
        self.failUnless(cp.get_chfield() == 0)
        
        mm = cp.get_multimedia_params()
        self.failUnless(mm.get_n1() == 18)
        self.failUnless(mm.get_n2()[0] == 19.19)
        self.failUnless(mm.get_n3() == 20.20)
        self.failUnless(mm.get_d()[0] == 21.21)
        
        
    def test_getters_setters(self):
        cams_num = 4
        for cam in range(cams_num):
            new_str = str(cam) + "some string" + str(cam)
            
            self.cp_obj.set_img_base_name(cam, new_str)
            self.failUnless(self.cp_obj.get_img_base_name(cam) == new_str)
            
            self.cp_obj.set_cal_img_base_name(cam, new_str)
            self.failUnless(self.cp_obj.get_cal_img_base_name(cam) == new_str)
        
        self.cp_obj.set_hp_flag(True)
        self.failUnless(self.cp_obj.get_hp_flag())
        self.cp_obj.set_hp_flag(False)
        self.failUnless(not self.cp_obj.get_hp_flag())
        
        self.cp_obj.set_allCam_flag(True)
        self.failUnless(self.cp_obj.get_allCam_flag())
        self.cp_obj.set_allCam_flag(False)
        self.failUnless(not self.cp_obj.get_allCam_flag())
        
        self.cp_obj.set_tiff_flag(True)
        self.failUnless(self.cp_obj.get_tiff_flag())
        self.cp_obj.set_tiff_flag(False)
        self.failUnless(not self.cp_obj.get_tiff_flag())
        
        self.cp_obj.set_image_size((4, 5))
        self.failUnless(self.cp_obj.get_image_size()== (4, 5))
        print self.cp_obj.get_pixel_size()
        self.cp_obj.set_pixel_size((6.1, 7.0))
        numpy.testing.assert_array_equal(self.cp_obj.get_pixel_size(), (6.1, 7))
        
        self.cp_obj.set_chfield(8)
        self.failUnless(self.cp_obj.get_chfield() == 8)
         
    # testing __richcmp__ comparison method of ControlParams class
    def test_rich_compare(self):
        self.cp_obj2 = ControlParams(4)
        self.cp_obj2.read_control_par(self.input_control_par_file_name)
        
        self.cp_obj3 = ControlParams(4)
        self.cp_obj3.read_control_par(self.input_control_par_file_name)
           
        self.failUnless(self.cp_obj2 == self.cp_obj3)
        self.failIf(self.cp_obj2 != self.cp_obj3)
           
        self.cp_obj2.set_hp_flag(False)
        self.failUnless(self.cp_obj2 != self.cp_obj3)
        self.failIf(self.cp_obj2 == self.cp_obj3)
        
        with self.assertRaises(TypeError):
            var = (self.cp_obj2 > self.cp_obj3)  # unhandled operator > 
      
    def tearDown(self):
        # remove the testing output directory and its files
        shutil.rmtree(self.temp_output_directory)        

class TestTargetParams(unittest.TestCase):
    def test_read(self):
        inp_filename = "testing_fodder/target_parameters/targ_rec.par"
        tp = TargetParams()
        tp.read(inp_filename)

        self.assertEqual(tp.get_max_discontinuity(), 5)
        self.assertEqual(tp.get_pixel_count_bounds(), (3, 100))
        self.assertEqual(tp.get_xsize_bounds(), (1, 20))
        self.assertEqual(tp.get_ysize_bounds(), (1, 20))
        self.assertEqual(tp.get_min_sum_grey(), 3)

        numpy.testing.assert_array_equal(
            tp.get_grey_thresholds(), [3, 2, 2, 3])
        
    
    def test_instantiate_fast(self):
        tp = TargetParams(discont=1, gvthresh=[2, 3, 4, 5], 
            pixel_count_bounds=(10, 100), xsize_bounds=(20, 200), 
            ysize_bounds=(30, 300), min_sum_grey=60, cross_size=3)
        
        self.assertEqual(tp.get_max_discontinuity(), 1)
        self.assertEqual(tp.get_pixel_count_bounds(), (10, 100))
        self.assertEqual(tp.get_xsize_bounds(), (20, 200))
        self.assertEqual(tp.get_ysize_bounds(), (30, 300))
        self.assertEqual(tp.get_min_sum_grey(), 60)

        numpy.testing.assert_array_equal(
            tp.get_grey_thresholds(), [2, 3, 4, 5])
        
if __name__ == "__main__":
    unittest.main()