<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_witnesses(self, source_tree):
 """Returns a list of all witnesses of variant readings in `source_tree` along with their XML ids. :param source_tree: XML tree of source document :type source_tree: `etree._ElementTree` :rtype: `list` of `tuple` """

        witnesses = []
        witness_elements = source_tree.xpath(
            '/tei:*/tei:teiHeader/tei:fileDesc/tei:sourceDesc/'
            'tei:listWit/tei:witness', namespaces=constants.NAMESPACES)
        for witness_element in witness_elements:
            witnesses.append((witness_element.text,
                              witness_element.get(constants.XML + 'id')))
        if not witnesses:
            witnesses = [(constants.BASE_WITNESS, constants.BASE_WITNESS_ID)]
        return witnesses