<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def connect(self, chip_name, speed='auto', verbose=False):
 """Connects the J-Link to its target. Args: self (JLink):
 the ``JLink`` instance chip_name (str):
 target chip name speed (int):
 connection speed, one of ``{5-12000, 'auto', 'adaptive'}`` verbose (bool):
 boolean indicating if connection should be verbose in logging Returns: ``None`` Raises: JLinkException: if connection fails to establish. TypeError: if given speed is invalid """


        if verbose:
            self.exec_command('EnableRemarks = 1')

        # This is weird but is currently the only way to specify what the
        # target is to the J-Link.
        self.exec_command('Device = %s' % chip_name)

        # Need to select target interface speed here, so the J-Link knows what
        # speed to use to establish target communication.
        if speed == 'auto':
            self.set_speed(auto=True)
        elif speed == 'adaptive':
            self.set_speed(adaptive=True)
        else:
            self.set_speed(speed)

        result = self._dll.JLINKARM_Connect()
        if result < 0:
            raise errors.JLinkException(result)

        try:
            # Issue a no-op command after connect. This has to be in a try-catch.
            self.halted()
        except errors.JLinkException:
            pass

        # Determine which device we are.  This is essential for using methods
        # like 'unlock' or 'lock'.
        for index in range(self.num_supported_devices()):
            device = self.supported_device(index)
            if device.name.lower() == chip_name.lower():
                self._device = device
                break
        else:
            raise errors.JLinkException('Unsupported device was connected to.')

        return None