Exemplo n.º 1
0
 def test_mode_update(self):
     self.ip._mode_update()
     self.ip._mode_update()
     data = RadarData(
         os.path.join(THIS_DIR, 'input_data', 'small_data_picks.mat'))
     ip = InteractivePicker(data)
     ip._mode_update()
     ip._mode_update()
Exemplo n.º 2
0
class TestInteractivePicker(unittest.TestCase):
    def setUp(self):
        data = RadarData(os.path.join(THIS_DIR, 'input_data',
                                      'small_data.mat'))
        self.ip = InteractivePicker(data)

    def test_other_lims(self):
        data = RadarData(os.path.join(THIS_DIR, 'input_data',
                                      'small_data.mat'))
        ip = InteractivePicker(data, xdat='dist')
        self.assertEqual(ip.x, 'dist')
        with self.assertRaises(ValueError):
            ip = InteractivePicker(data, xdat='dum')
        ip = InteractivePicker(data, ydat='twtt')
        self.assertEqual(ip.y, 'twtt')
        ip = InteractivePicker(data, ydat='depth')
        self.assertEqual(ip.y, 'depth')
        data.nmo_depth = data.travel_time
        ip = InteractivePicker(data, ydat='depth')
        self.assertEqual(ip.y, 'depth')
        with self.assertRaises(ValueError):
            ip = InteractivePicker(data, ydat='dum')

        with self.assertRaises(ValueError):
            ip = InteractivePicker(data, ydat='elev')
        data.elevation = np.arange(ip.dat.tnum)
        data.flags.elev = True
        ip = InteractivePicker(data, x_range=None)
        self.assertEqual(ip.x_range, (0, ip.dat.tnum))

    def test_PickNum(self):
        self.ip.pickNumberBox.setValue(1)

    def test_update_polarity(self):
        self.assertEqual(self.ip.dat.picks.pickparams.pol, 1)
        self.ip.wbw_radio.setChecked(True)
        self.assertEqual(self.ip.dat.picks.pickparams.pol, -1)

    def test_reverse_color(self):
        self.assertEqual(self.ip.im.get_cmap(),
                         plt.cm.get_cmap(self.ip.ColorSelector.currentText()))
        self.ip._update_color_reversal(QtCore.Qt.Checked)
        self.assertEqual(
            self.ip.im.get_cmap(),
            plt.cm.get_cmap(self.ip.ColorSelector.currentText() + '_r'))

    def test_select_lines_click(self):
        data = RadarData(
            os.path.join(THIS_DIR, 'input_data', 'small_data_picks.mat'))
        self.ip = InteractivePicker(data)
        event = DummyEvent()
        event.artist = self.ip.cline[0]
        self.ip._select_lines_click(event)
        self.assertEqual(self.ip.pickNumberBox.value(), 1)

        event.artist = 'dumdum'
        self.ip._select_lines_click(event)
        self.assertEqual(self.ip.pickNumberBox.value(), 1)

        event.artist = self.ip.cline[1]
        self.ip._select_lines_click(event)
        self.assertEqual(self.ip.pickNumberBox.value(), 5)

    def test_freq_update(self):
        p = self.ip.dat.picks.pickparams.plength
        self.ip._freq_update(678)
        self.assertEqual(self.ip.dat.picks.pickparams.freq, 678)
        self.assertFalse(p == self.ip.dat.picks.pickparams.plength)

    def test_add_pick(self):
        #blank pick
        self.ip._add_pick()
        self.assertTrue(self.ip.dat.picks.samp1.shape[0] == 1)

        # Overwrite slot
        self.ip._add_pick()
        self.assertTrue(self.ip.dat.picks.samp1.shape[0] == 1)

        # add to existing
        data = RadarData(
            os.path.join(THIS_DIR, 'input_data', 'small_data_picks.mat'))
        self.ip = InteractivePicker(data)
        self.assertTrue(self.ip.dat.picks.samp1.shape[0] == 2)
        self.ip._add_pick()
        self.assertTrue(self.ip.dat.picks.samp1.shape[0] == 3)

        # Check that we can add a non-blank pick
        self.ip._add_pick(snum=10, tnum=2)
        self.assertTrue(self.ip.dat.picks.samp1.shape[0] == 3)
        self.assertTrue(self.ip.current_pick[1, 2] > 5)

        # snum but no tnum
        self.ip._add_pick(snum=10, tnum=None)
        self.assertTrue(self.ip.current_pick[1, 0] > 5)

    def test_color_select(self):
        self.ip._color_select('bone')
        self.assertTrue(self.ip.im.get_cmap(), 'bone')
        self.ip._color_select('CEGSIC')
        self.assertTrue(self.ip.im.get_cmap(), 'CEGSIC')

    def test_lim_update(self):
        self.ip._update_lims(-100, 100)
        self.assertEqual(self.ip.im.get_clim(), (-100, 100))
        with self.assertRaises(ValueError):
            self.ip._update_lims(100, -100)
        self.ip.minSpinner.setValue(-999)
        self.ip.maxSpinner.setValue(999)
        self.assertEqual(self.ip.im.get_clim(), (-999, 999))
        self.ip.minSpinner.setValue(1000)
        self.assertEqual(self.ip.im.get_clim(), (1000, 1001))

    def test_mode_update(self):
        self.ip._mode_update()
        self.ip._mode_update()
        data = RadarData(
            os.path.join(THIS_DIR, 'input_data', 'small_data_picks.mat'))
        ip = InteractivePicker(data)
        ip._mode_update()
        ip._mode_update()

    def test_edit_lines_click_existingline(self):
        # First, plain left click
        # event has x and y data
        event = DummyEvent()
        event.xdata = 10.
        event.ydata = 1.0e-1
        event.button = 1

        self.ip._freq_update(800)

        # assume we have a pick
        self.ip._add_pick(snum=10, tnum=1)
        self.ip._add_point_pick = MagicMock()
        self.ip.update_lines = MagicMock()
        self.ip._edit_lines_click(event)
        self.assertTrue(self.ip._add_point_pick.called)
        self.assertTrue(self.ip.update_lines.called)

        # now nanpick
        self.ip._n_pressed = True
        self.ip._add_nanpick = MagicMock()
        self.ip.update_lines = MagicMock()
        self.ip._edit_lines_click(event)
        self.assertTrue(self.ip._add_nanpick.called)
        self.assertTrue(self.ip.update_lines.called)
        self.ip._n_pressed = False

        # now delete pick
        event.button = 3
        self.ip._delete_picks = MagicMock()
        self.ip.update_lines = MagicMock()
        self.ip._edit_lines_click(event)
        self.assertTrue(self.ip._delete_picks.called)
        self.assertTrue(self.ip.update_lines.called)

    @unittest.skipIf(sys.version_info[0] < 3, 'Mock is only on 3+')
    def test_edit_lines_click_newline(self):
        # First, plain left click
        # event has x and y data
        event = DummyEvent()
        event.xdata = 10.
        event.ydata = 1.0e-1
        event.button = 1

        # assume we have no picks
        self.ip._add_pick = MagicMock()
        self.ip.update_lines = MagicMock()
        self.ip._edit_lines_click(event)
        self.assertTrue(self.ip._add_pick.called)
        self.assertTrue(self.ip.update_lines.called)

    @unittest.skipIf(sys.version_info[0] < 3, 'Mock is only on 3+')
    def test_add_point_pick(self):
        # need to mock a lot to not deal with actually doing any picking
        with patch('impdar.lib.picklib.packet_pick',
                   return_value=np.zeros((5, ))) as mock1:
            with patch('impdar.lib.picklib.pick',
                       return_value=np.zeros(
                           (5, self.ip.dat.tnum - 1))) as mock2:
                self.ip._add_pick(0, 0)
                self.ip._add_point_pick(0, self.ip.dat.tnum - 1)

    @unittest.skipIf(sys.version_info[0] < 3, 'Mock is only on 3+')
    def test_add_nan_pick(self):
        with patch('impdar.lib.picklib.packet_pick',
                   return_value=np.zeros((5, ))) as mock1:
            self.ip._add_pick(0, 0)
            self.ip._add_nanpick(1, 10)
        self.assertEqual(self.ip.dat.picks.lasttrace.snum[0], 1)
        self.assertEqual(self.ip.dat.picks.lasttrace.tnum[0], 10)