diff --git a/CHANGELOG.md b/CHANGELOG.md
index fa389b6..e329501 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 3.0.60 Dec 13, 2018
+
+In `reads.py`, changed the `_makeComplementTable` function so that 
+uppercase and lowercase bases are correctly reverse complemented into their
+respective uppercase and lowercase complementary letters. Added a test to 
+`test/reads.py` to confirm that `reverseComplement` does this.
+
 ## 3.0.59 Dec 11, 2018
 
 Added `--sampleName` option to `proteins-to-pathogens`.
diff --git a/dark/__init__.py b/dark/__init__.py
index 278f52a..ffb465c 100644
--- a/dark/__init__.py
+++ b/dark/__init__.py
@@ -8,4 +8,4 @@ if sys.version_info < (2, 7):
 #
 # Remember to update ../CHANGELOG.md describing what's new in each version.
 
-__version__ = '3.0.59'
+__version__ = '3.0.60'
diff --git a/dark/reads.py b/dark/reads.py
index 18171d0..df381e0 100644
--- a/dark/reads.py
+++ b/dark/reads.py
@@ -27,7 +27,8 @@ def _makeComplementTable(complementData):
     """
     table = list(range(256))
     for _from, to in complementData.items():
-        table[ord(_from[0])] = ord(to[0])
+        table[ord(_from[0].lower())] = ord(to[0].lower())
+        table[ord(_from[0].upper())] = ord(to[0].upper())
     return ''.join(map(chr, table))
 
 

diff --git a/test/test_reads.py b/test/test_reads.py
index d586ab1..4663234 100644
--- a/test/test_reads.py
+++ b/test/test_reads.py
@@ -652,6 +652,16 @@ class TestDNARead(TestCase):
         read = DNARead('id', 'ATCGMRWSVHXN')
         self.assertEqual('NXDBSWYKCGAT', read.reverseComplement().sequence)
 
+    def testReverseComplementLowercaseLetters(self):
+        """
+        The reverseComplement function must correctly reverse complement
+        lowercase letters. The issue is described here:
+        https://github.com/acorg/dark-matter/issues/662
+        """
+        read = DNARead('id', 'CAGCAGctgcagcaccagcaccagcagcttcCACAT')
+        expected = ('ATGTGgaagctgctggtgctggtgctgcagCTGCTG')
+        self.assertEqual(expected, read.reverseComplement().sequence)
+
     def testTranslationsOfEmptySequence(self):
         """
         The translations function must correctly return all six (empty)

Extract-ORFs.py mistranslates lowercase letters
In a sequence with mixed uppercase and lowercase letters, extract-ORFs.py output has incorrect translations only for the sites of lowercase letters. (Even though the `translations` function of `dark/reads.py` translate a sequence with mixed upper and lower case letters correctly)
test/test_reads.py::TestDNARead::testReverseComplementLowercaseLetters
test/test_reads.py::TestRead::testCasePreservation test/test_reads.py::TestRead::testCheckAlphabetAAReadMatchingReturnTrue test/test_reads.py::TestRead::testCheckAlphabetAAReadNotMatchingRaise test/test_reads.py::TestRead::testCheckAlphabetDNAReadMatchingReturnTrue test/test_reads.py::TestRead::testCheckAlphabetDNAReadNotMatchingRaise test/test_reads.py::TestRead::testCheckAlphabetwithReadMustBePermissive test/test_reads.py::TestRead::testEquality test/test_reads.py::TestRead::testEqualityWithDifferingIds test/test_reads.py::TestRead::testEqualityWithDifferingQuality test/test_reads.py::TestRead::testEqualityWithDifferingSequences test/test_reads.py::TestRead::testEqualityWithNoQuality test/test_reads.py::TestRead::testEqualityWithOneOmittedQuality test/test_reads.py::TestRead::testExpectedAttributes test/test_reads.py::TestRead::testFromDict test/test_reads.py::TestRead::testFromDictNoQuality test/test_reads.py::TestRead::testGetitemFullCopy test/test_reads.py::TestRead::testGetitemId test/test_reads.py::TestRead::testGetitemLength test/test_reads.py::TestRead::testGetitemQuality test/test_reads.py::TestRead::testGetitemReturnsNewRead test/test_reads.py::TestRead::testGetitemReversed test/test_reads.py::TestRead::testGetitemSequence test/test_reads.py::TestRead::testGetitemSingleIndex test/test_reads.py::TestRead::testGetitemWithStep test/test_reads.py::TestRead::testHashDiffersIfIdDiffers test/test_reads.py::TestRead::testHashDiffersIfQualityDiffers test/test_reads.py::TestRead::testHashDiffersIfSequenceDiffers test/test_reads.py::TestRead::testHashIdenticalNoQuality test/test_reads.py::TestRead::testHashIdenticalWithQuality test/test_reads.py::TestRead::testHashViaDict test/test_reads.py::TestRead::testHashViaSet test/test_reads.py::TestRead::testKeepSites test/test_reads.py::TestRead::testKeepSitesAllSites test/test_reads.py::TestRead::testKeepSitesNoSites test/test_reads.py::TestRead::testKeepSitesOutOfRange test/test_reads.py::TestRead::testKeepSitesWithQuality test/test_reads.py::TestRead::testLength test/test_reads.py::TestRead::testLowComplexityFraction test/test_reads.py::TestRead::testLowComplexityFractionEmptySequence test/test_reads.py::TestRead::testLowComplexityFractionOne test/test_reads.py::TestRead::testLowComplexityFractionZero test/test_reads.py::TestRead::testNoQuality test/test_reads.py::TestRead::testRemoveSites test/test_reads.py::TestRead::testRemoveSitesAllSites test/test_reads.py::TestRead::testRemoveSitesNoSites test/test_reads.py::TestRead::testRemoveSitesOutOfRange test/test_reads.py::TestRead::testRemoveSitesWithQuality test/test_reads.py::TestRead::testToDict test/test_reads.py::TestRead::testToDictNoQuality test/test_reads.py::TestRead::testToFASTA test/test_reads.py::TestRead::testToFASTAWithQuality test/test_reads.py::TestRead::testToFASTQ test/test_reads.py::TestRead::testToFASTQWithNoQuality test/test_reads.py::TestRead::testToUnknownFormat test/test_reads.py::TestRead::testUnequalLengths test/test_reads.py::TestRead::testWalkHSPExactMatch test/test_reads.py::TestRead::testWalkHSPExactMatchWithGap test/test_reads.py::TestRead::testWalkHSPLeftAndRightOverhangingMatch test/test_reads.py::TestRead::testWalkHSPLeftAndRightOverhangingMatchNoWhiskers test/test_reads.py::TestRead::testWalkHSPLeftOverhangingMatch test/test_reads.py::TestRead::testWalkHSPLeftOverhangingMatchNoWhiskers test/test_reads.py::TestRead::testWalkHSPRightOverhangingMatch test/test_reads.py::TestRead::testWalkHSPRightOverhangingMatchNoWhiskers test/test_reads.py::TestDNARead::testGetitemReturnsNewDNARead test/test_reads.py::TestDNARead::testReverseComplement test/test_reads.py::TestDNARead::testReverseComplementAmbiguous test/test_reads.py::TestDNARead::testReverseComplementReversesQuality test/test_reads.py::TestDNARead::testTranslationOfMultipleStopCodons test/test_reads.py::TestDNARead::testTranslationOfStartCodonATG test/test_reads.py::TestDNARead::testTranslationOfStopCodonTAG test/test_reads.py::TestDNARead::testTranslationOfStopCodonTGA test/test_reads.py::TestDNARead::testTranslations test/test_reads.py::TestDNARead::testTranslationsOfEmptySequence test/test_reads.py::TestDNARead::testTranslationsOfOneBaseSequence test/test_reads.py::TestDNARead::testTranslationsOfTwoBaseSequence test/test_reads.py::TestRNARead::testGetitemReturnsNewRNARead test/test_reads.py::TestRNARead::testReverseComplement test/test_reads.py::TestRNARead::testReverseComplementAmbiguous test/test_reads.py::TestRNARead::testTranslationOfStopCodonUAA test/test_reads.py::TestAARead::testCloseCloseORF test/test_reads.py::TestAARead::testCloseCloseThenCloseCloseORF test/test_reads.py::TestAARead::testCloseCloseThenCloseCloseThenCloseCloseORF test/test_reads.py::TestAARead::testCloseCloseThenCloseCloseThenCloseCloseORFWithJunk test/test_reads.py::TestAARead::testCloseCloseThenCloseCloseThenCloseOpenORF test/test_reads.py::TestAARead::testCloseCloseThenCloseCloseThenCloseOpenORFWithJunk test/test_reads.py::TestAARead::testCloseCloseThenCloseOpenORF test/test_reads.py::TestAARead::testCloseOpenORF test/test_reads.py::TestAARead::testCloseOpenORFWithMultipleStarts test/test_reads.py::TestAARead::testGetitemReturnsNewAARead test/test_reads.py::TestAARead::testNoStartCodon_GithubIssue239 test/test_reads.py::TestAARead::testORFsEmptySequence test/test_reads.py::TestAARead::testORFsEmptySequenceWithStart test/test_reads.py::TestAARead::testORFsEmptySequenceWithStartStop test/test_reads.py::TestAARead::testORFsWithJustStartsAndStops test/test_reads.py::TestAARead::testORFsWithOneStopCodon test/test_reads.py::TestAARead::testORFsWithTwoStopCodons test/test_reads.py::TestAARead::testOpenCloseORF test/test_reads.py::TestAARead::testOpenCloseORFWithMultipleStops test/test_reads.py::TestAARead::testOpenCloseThenCloseCloseThenCloseOpenORF test/test_reads.py::TestAARead::testOpenCloseThenCloseCloseThenCloseOpenORFWithJunk test/test_reads.py::TestAARead::testOpenCloseThenCloseOpenORF test/test_reads.py::TestAARead::testOpenOpenORF test/test_reads.py::TestAARead::testPropertiesCorrectTranslation test/test_reads.py::TestAARead::testPropertyDetailsCorrectTranslation test/test_reads.py::TestAAReadWithX::testAlphabet test/test_reads.py::TestAAReadWithX::testAlphabetChecking test/test_reads.py::TestAAReadWithX::testGetitemReturnsNewAAReadWithX test/test_reads.py::TestAAReadORF::testClosedClosedId test/test_reads.py::TestAAReadORF::testClosedOpenId test/test_reads.py::TestAAReadORF::testFromDict test/test_reads.py::TestAAReadORF::testOpenClosedId test/test_reads.py::TestAAReadORF::testOpenLeft test/test_reads.py::TestAAReadORF::testOpenOpenId test/test_reads.py::TestAAReadORF::testOpenRight test/test_reads.py::TestAAReadORF::testSequence test/test_reads.py::TestAAReadORF::testStart test/test_reads.py::TestAAReadORF::testStartGreaterThanStop test/test_reads.py::TestAAReadORF::testStartNegative test/test_reads.py::TestAAReadORF::testStop test/test_reads.py::TestAAReadORF::testStopGreaterThanOriginalSequenceLength test/test_reads.py::TestAAReadORF::testToDict test/test_reads.py::TestSSAARead::testCorrectAttributes test/test_reads.py::TestSSAARead::testFromDict test/test_reads.py::TestSSAARead::testGetitemFullCopy test/test_reads.py::TestSSAARead::testGetitemId test/test_reads.py::TestSSAARead::testGetitemLength test/test_reads.py::TestSSAARead::testGetitemReturnsNewRead test/test_reads.py::TestSSAARead::testGetitemReversed test/test_reads.py::TestSSAARead::testGetitemSequence test/test_reads.py::TestSSAARead::testGetitemSingleIndex test/test_reads.py::TestSSAARead::testGetitemStructure test/test_reads.py::TestSSAARead::testGetitemWithStep test/test_reads.py::TestSSAARead::testHashDiffersIfIdDiffers test/test_reads.py::TestSSAARead::testHashDiffersIfSequenceDiffers test/test_reads.py::TestSSAARead::testHashDiffersIfStructureDiffers test/test_reads.py::TestSSAARead::testHashViaDict test/test_reads.py::TestSSAARead::testHashViaSet test/test_reads.py::TestSSAARead::testKeepSites test/test_reads.py::TestSSAARead::testKeepSitesAllSites test/test_reads.py::TestSSAARead::testKeepSitesNoSites test/test_reads.py::TestSSAARead::testKeepSitesOutOfRange test/test_reads.py::TestSSAARead::testReads test/test_reads.py::TestSSAARead::testRemoveSites test/test_reads.py::TestSSAARead::testRemoveSitesAllSites test/test_reads.py::TestSSAARead::testRemoveSitesNoSites test/test_reads.py::TestSSAARead::testRemoveSitesOutOfRange test/test_reads.py::TestSSAARead::testSequenceLengthMatchesStructureLength test/test_reads.py::TestSSAARead::testToDict test/test_reads.py::TestSSAARead::testToString test/test_reads.py::TestSSAARead::testToStringWithExplicitFastaFormat test/test_reads.py::TestSSAARead::testToStringWithExplicitFastaSSFormat test/test_reads.py::TestSSAARead::testToStringWithStructureSuffix test/test_reads.py::TestSSAARead::testToStringWithUnknownFormat test/test_reads.py::TestSSAAReadWithX::testCorrectAttributes test/test_reads.py::TestSSAAReadWithX::testFromDict test/test_reads.py::TestSSAAReadWithX::testGetitemFullCopy test/test_reads.py::TestSSAAReadWithX::testGetitemId test/test_reads.py::TestSSAAReadWithX::testGetitemLength test/test_reads.py::TestSSAAReadWithX::testGetitemReturnsNewRead test/test_reads.py::TestSSAAReadWithX::testGetitemReversed test/test_reads.py::TestSSAAReadWithX::testGetitemSequence test/test_reads.py::TestSSAAReadWithX::testGetitemSingleIndex test/test_reads.py::TestSSAAReadWithX::testGetitemStructure test/test_reads.py::TestSSAAReadWithX::testGetitemWithStep test/test_reads.py::TestSSAAReadWithX::testHashDiffersIfIdDiffers test/test_reads.py::TestSSAAReadWithX::testHashDiffersIfSequenceDiffers test/test_reads.py::TestSSAAReadWithX::testHashDiffersIfStructureDiffers test/test_reads.py::TestSSAAReadWithX::testHashViaDict test/test_reads.py::TestSSAAReadWithX::testHashViaSet test/test_reads.py::TestSSAAReadWithX::testKeepSites test/test_reads.py::TestSSAAReadWithX::testKeepSitesAllSites test/test_reads.py::TestSSAAReadWithX::testKeepSitesNoSites test/test_reads.py::TestSSAAReadWithX::testKeepSitesOutOfRange test/test_reads.py::TestSSAAReadWithX::testReads test/test_reads.py::TestSSAAReadWithX::testRemoveSites test/test_reads.py::TestSSAAReadWithX::testRemoveSitesAllSites test/test_reads.py::TestSSAAReadWithX::testRemoveSitesNoSites test/test_reads.py::TestSSAAReadWithX::testRemoveSitesOutOfRange test/test_reads.py::TestSSAAReadWithX::testSequenceContainingX test/test_reads.py::TestSSAAReadWithX::testSequenceLengthMatchesStructureLength test/test_reads.py::TestSSAAReadWithX::testToDict test/test_reads.py::TestSSAAReadWithX::testToString test/test_reads.py::TestSSAAReadWithX::testToStringWithExplicitFastaFormat test/test_reads.py::TestSSAAReadWithX::testToStringWithExplicitFastaSSFormat test/test_reads.py::TestSSAAReadWithX::testToStringWithStructureSuffix test/test_reads.py::TestSSAAReadWithX::testToStringWithUnknownFormat test/test_reads.py::TestTranslatedRead::testExpectedAttributes test/test_reads.py::TestTranslatedRead::testExpectedFrame test/test_reads.py::TestTranslatedRead::testFromDict test/test_reads.py::TestTranslatedRead::testId test/test_reads.py::TestTranslatedRead::testIdReverseComplemented test/test_reads.py::TestTranslatedRead::testMaximumORFLength test/test_reads.py::TestTranslatedRead::testMaximumORFLengthNoStops test/test_reads.py::TestTranslatedRead::testOutOfRangeFrame test/test_reads.py::TestTranslatedRead::testReverseComplemented test/test_reads.py::TestTranslatedRead::testSequence test/test_reads.py::TestTranslatedRead::testToDict test/test_reads.py::TestReadClassNameToClass::testNames test/test_reads.py::TestReads::testEmptyInitialReads test/test_reads.py::TestReads::testInitialReads test/test_reads.py::TestReads::testManuallyAddedReads test/test_reads.py::TestReads::testManuallyAddedReadsLength test/test_reads.py::TestReads::testNoReads test/test_reads.py::TestReads::testNoReadsLength test/test_reads.py::TestReads::testRepeatedIter test/test_reads.py::TestReads::testSaveAsFASTA test/test_reads.py::TestReads::testSaveAsFASTQ test/test_reads.py::TestReads::testSaveAsFASTQFailsOnReadWithNoQuality test/test_reads.py::TestReads::testSaveFASTAIsDefault test/test_reads.py::TestReads::testSaveReturnsReadCount test/test_reads.py::TestReads::testSaveToFileDescriptor test/test_reads.py::TestReads::testSaveWithUnknownFormat test/test_reads.py::TestReads::testSaveWithUppercaseFormat test/test_reads.py::TestReads::testSubclass test/test_reads.py::TestReads::testSubclassLength test/test_reads.py::TestReads::testSubclassWithAdditionalReads test/test_reads.py::TestReads::testUnfilteredLengthAdditionalReads test/test_reads.py::TestReads::testUnfilteredLengthAdditionalReadsAfterFiltering test/test_reads.py::TestReads::testUnfilteredLengthBeforeIterating test/test_reads.py::TestReads::testUnfilteredLengthInitialReads test/test_reads.py::TestReads::testUnfilteredLengthInitialReadsAfterFiltering test/test_reads.py::TestReads::testUnfilteredLengthInitialReadsIsReads test/test_reads.py::TestReads::testUnfilteredLengthInitialReadsIsReadsWithAdditional test/test_reads.py::TestReads::testUnfilteredLengthInitialSubclassThenFiltered test/test_reads.py::TestReads::testUnfilteredLengthInitialSubclassWithAdditionalThenFiltered test/test_reads.py::TestReads::testUnfilteredLengthInitialSubclassWithNoLen test/test_reads.py::TestReads::testUnfilteredLengthNoReads test/test_reads.py::TestReadsFiltering::testAddFiltersThenClearFilters test/test_reads.py::TestReadsFiltering::testFilterBlacklist test/test_reads.py::TestReadsFiltering::testFilterDoNotRemoveDescriptions test/test_reads.py::TestReadsFiltering::testFilterDuplicates test/test_reads.py::TestReadsFiltering::testFilterDuplicatesById test/test_reads.py::TestReadsFiltering::testFilterHead test/test_reads.py::TestReadsFiltering::testFilterHeadZero test/test_reads.py::TestReadsFiltering::testFilterKeepSequences test/test_reads.py::TestReadsFiltering::testFilterKeepSequencesNoSequences test/test_reads.py::TestReadsFiltering::testFilterNegativeRegex test/test_reads.py::TestReadsFiltering::testFilterNoArgs test/test_reads.py::TestReadsFiltering::testFilterOnLengthEverythingMatches test/test_reads.py::TestReadsFiltering::testFilterOnLengthNothingMatches test/test_reads.py::TestReadsFiltering::testFilterOnMaxLength test/test_reads.py::TestReadsFiltering::testFilterOnMinLength test/test_reads.py::TestReadsFiltering::testFilterPositiveRegex test/test_reads.py::TestReadsFiltering::testFilterRandomSubsetOfFiveFromFiveReads test/test_reads.py::TestReadsFiltering::testFilterRandomSubsetOfFiveFromOneRead test/test_reads.py::TestReadsFiltering::testFilterRandomSubsetOfOneFromOneRead test/test_reads.py::TestReadsFiltering::testFilterRandomSubsetOfTwoFromFiveReads test/test_reads.py::TestReadsFiltering::testFilterRandomSubsetOfZeroReads test/test_reads.py::TestReadsFiltering::testFilterRandomSubsetSizeZeroNoReads test/test_reads.py::TestReadsFiltering::testFilterRandomSubsetSizeZeroTwoReads test/test_reads.py::TestReadsFiltering::testFilterRemoveDescriptions test/test_reads.py::TestReadsFiltering::testFilterRemoveGaps test/test_reads.py::TestReadsFiltering::testFilterRemoveGapsWithQuality test/test_reads.py::TestReadsFiltering::testFilterRemoveSequences test/test_reads.py::TestReadsFiltering::testFilterRemoveSequencesNoSequences test/test_reads.py::TestReadsFiltering::testFilterReturnsReadInstance test/test_reads.py::TestReadsFiltering::testFilterTruncateTitles test/test_reads.py::TestReadsFiltering::testFilterWhitelist test/test_reads.py::TestReadsFiltering::testFilterWithMinLengthEqualToMaxLength test/test_reads.py::TestReadsFiltering::testFilterWithModifierThatChangesIds test/test_reads.py::TestReadsFiltering::testFilterWithModifierThatOmits test/test_reads.py::TestReadsFiltering::testFilterWithModifierThatOmitsAndChangesIds test/test_reads.py::TestReadsFiltering::testFilteredReadsInstanceHasExpectedLength test/test_reads.py::TestReadsFiltering::testIdLambda test/test_reads.py::TestReadsFiltering::testIdLambdaReturningNone test/test_reads.py::TestReadsFiltering::testKeepSites test/test_reads.py::TestReadsFiltering::testKeepSitesAllSites test/test_reads.py::TestReadsFiltering::testKeepSitesNoSites test/test_reads.py::TestReadsFiltering::testKeepSitesOutOfRange test/test_reads.py::TestReadsFiltering::testKeepSitesWithQuality test/test_reads.py::TestReadsFiltering::testLineNumberFile test/test_reads.py::TestReadsFiltering::testLineNumberFileEmpty test/test_reads.py::TestReadsFiltering::testLineNumberFileFirstLineTooSmall test/test_reads.py::TestReadsFiltering::testLineNumberFileNonAscending test/test_reads.py::TestReadsFiltering::testLineNumberFileRunOutOfSequences test/test_reads.py::TestReadsFiltering::testReadLambda test/test_reads.py::TestReadsFiltering::testReadLambdaReturningNone test/test_reads.py::TestReadsFiltering::testRemoveAndKeepSites test/test_reads.py::TestReadsFiltering::testRemoveSites test/test_reads.py::TestReadsFiltering::testRemoveSitesAllSites test/test_reads.py::TestReadsFiltering::testRemoveSitesNoSites test/test_reads.py::TestReadsFiltering::testRemoveSitesOutOfRange test/test_reads.py::TestReadsFiltering::testRemoveSitesWithQuality test/test_reads.py::TestReadsFiltering::testSampleFractionAndNoTrueLengthRaisesValueError test/test_reads.py::TestReadsFiltering::testSampleFractionAndRandomSubsetRaisesValueError test/test_reads.py::TestReadsFiltering::testSampleFractionOne test/test_reads.py::TestReadsFiltering::testSampleFractionPointOne test/test_reads.py::TestReadsFiltering::testSampleFractionZero test/test_reads.py::TestReadsInRAM::testAdd test/test_reads.py::TestReadsInRAM::testFromReads test/test_reads.py::TestReadsInRAM::testNoReads test/test_reads.py::TestReadsInRAM::testOneReadIndex test/test_reads.py::TestReadsInRAM::testOneReadLength test/test_reads.py::TestReadsInRAM::testOneReadList test/test_reads.py::TestReadsInRAM::testSetItem test/test_reads.py::TestReadsInRAM::testTwoReadsIndex test/test_reads.py::TestReadsInRAM::testTwoReadsLength test/test_reads.py::TestReadsInRAM::testTwoReadsList test/test_reads.py::TestSummarizePosition::testCorrectFrequencies test/test_reads.py::TestSummarizePosition::testExcludeShortSequences test/test_reads.py::TestSummarizePosition::testFrequenciesNoReads test/test_reads.py::TestSummarizePosition::testIndexLargerThanSequenceLength test/test_reads.py::TestSummarizePosition::testNumberOfExclusionsNoReads test/test_reads.py::TestSitesMatching::testAllMatches test/test_reads.py::TestSitesMatching::testIgnoreCase test/test_reads.py::TestSitesMatching::testMatchCase test/test_reads.py::TestSitesMatching::testMultipleReadsAll test/test_reads.py::TestSitesMatching::testMultipleReadsAllWithDifferingLengths test/test_reads.py::TestSitesMatching::testMultipleReadsAny test/test_reads.py::TestSitesMatching::testMultipleReadsAnyWithDifferingLengths test/test_reads.py::TestSitesMatching::testNoMatches test/test_reads.py::TestSitesMatching::testPartialMatch