def test_unmatch_lawyer(self):
        law = session.query(RawLawyer).limit(20)
        alchemy.match(law, session)

        alchemy.unmatch(law[0], session)
        self.assertEqual(None, law[0].lawyer)
        self.assertEqual(19, len(law[1].lawyer.rawlawyers))
        self.assertEqual(14, len(law[1].lawyer.patents))
    def test_unmatch_lawyer(self):
        law = session.query(RawLawyer).limit(20)
        alchemy.match(law, session)

        alchemy.unmatch(law[0], session)
        self.assertEqual(None, law[0].lawyer)
        self.assertEqual(19, len(law[1].lawyer.rawlawyers))
        self.assertEqual(14, len(law[1].lawyer.patents))
    def test_unmatch_asgloc(self):
        loc = session.query(RawLocation).limit(20)
        asg = session.query(RawAssignee).limit(20)
        alchemy.match(asg, session)
        alchemy.match(loc[0:5], session)
        alchemy.match(loc[5:10], session)
        alchemy.match(loc[10:15], session)
        alchemy.match(loc[15:20], session)

        clean = asg[0].assignee
        alchemy.unmatch(asg[0], session)
        self.assertEqual(None, asg[0].assignee)
        self.assertEqual(19, len(clean.rawassignees))
        self.assertEqual(19, len(clean.patents))

        self.assertEqual(4, session.query(Location).count())
        self.assertEqual(4, session.query(locationassignee).count())

        clean = loc[0].location
        self.assertEqual(5, len(clean.rawlocations))
        alchemy.unmatch(loc[0], session)
        self.assertEqual(4, len(clean.rawlocations))
        alchemy.unmatch(loc[1], session)
        self.assertEqual(3, len(clean.rawlocations))
        alchemy.unmatch(loc[2:5], session)
        self.assertEqual(None, loc[0].location)
        self.assertEqual(3, session.query(Location).count())
        self.assertEqual(3, session.query(locationassignee).count())

        alchemy.unmatch(loc[5].location, session)
        self.assertEqual(2, session.query(Location).count())
        self.assertEqual(2, session.query(locationassignee).count())

        alchemy.unmatch(asg[3:20], session)
        alchemy.unmatch(loc[10].location, session)
        self.assertEqual(1, session.query(Location).count())
        self.assertEqual(0, session.query(locationassignee).count())
    def test_unmatch_invloc(self):
        loc = session.query(RawLocation).limit(20)
        inv = session.query(RawInventor).limit(20)
        alchemy.match(inv, session)
        alchemy.match(loc[0:5], session)
        alchemy.match(loc[5:10], session)
        alchemy.match(loc[10:15], session)
        alchemy.match(loc[15:20], session)

        clean = inv[0].inventor
        alchemy.unmatch(inv[0], session)
        self.assertEqual(None, inv[0].inventor)
        self.assertEqual(19, len(clean.rawinventors))
        self.assertEqual(10, len(clean.patents))

        self.assertEqual(4, session.query(Location).count())
        self.assertEqual(4, session.query(locationinventor).count())

        clean = loc[0].location
        self.assertEqual(5, len(clean.rawlocations))
        alchemy.unmatch(loc[0], session)
        self.assertEqual(4, len(clean.rawlocations))
        alchemy.unmatch(loc[1], session)
        self.assertEqual(3, len(clean.rawlocations))
        alchemy.unmatch(loc[2:5], session)
        self.assertEqual(None, loc[0].location)
        self.assertEqual(3, session.query(Location).count())
        self.assertEqual(3, session.query(locationinventor).count())

        clean = inv[5].inventor
        alchemy.unmatch(inv[1], session)
        self.assertEqual(None, inv[1].inventor)
        self.assertEqual(18, len(clean.rawinventors))
        # this patent is repeated
        self.assertEqual(10, len(clean.patents))

        alchemy.unmatch(inv[2], session)
        self.assertEqual(None, inv[2].inventor)
        self.assertEqual(17, len(clean.rawinventors))
        self.assertEqual(9, len(clean.patents))

        alchemy.unmatch(loc[5].location, session)
        self.assertEqual(2, session.query(Location).count())
        self.assertEqual(2, session.query(locationinventor).count())

        alchemy.unmatch(inv[3:20], session)
        alchemy.unmatch(loc[10].location, session)
        self.assertEqual(1, session.query(Location).count())
        self.assertEqual(0, session.query(locationinventor).count())
    def test_unmatch_invloc(self):
        loc = session.query(RawLocation).limit(20)
        inv = session.query(RawInventor).limit(20)
        alchemy.match(inv, session)
        alchemy.match(loc[0:5], session)
        alchemy.match(loc[5:10], session)
        alchemy.match(loc[10:15], session)
        alchemy.match(loc[15:20], session)

        clean = inv[0].inventor
        alchemy.unmatch(inv[0], session)
        self.assertEqual(None, inv[0].inventor)
        self.assertEqual(19, len(clean.rawinventors))
        self.assertEqual(10, len(clean.patents))

        self.assertEqual(4, session.query(Location).count())
        self.assertEqual(4, session.query(locationinventor).count())

        clean = loc[0].location
        self.assertEqual(5, len(clean.rawlocations))
        alchemy.unmatch(loc[0], session)
        self.assertEqual(4, len(clean.rawlocations))
        alchemy.unmatch(loc[1], session)
        self.assertEqual(3, len(clean.rawlocations))
        alchemy.unmatch(loc[2:5], session)
        self.assertEqual(None, loc[0].location)
        self.assertEqual(3, session.query(Location).count())
        self.assertEqual(3, session.query(locationinventor).count())

        clean = inv[5].inventor
        alchemy.unmatch(inv[1], session)
        self.assertEqual(None, inv[1].inventor)
        self.assertEqual(18, len(clean.rawinventors))
        # this patent is repeated
        self.assertEqual(10, len(clean.patents))

        alchemy.unmatch(inv[2], session)
        self.assertEqual(None, inv[2].inventor)
        self.assertEqual(17, len(clean.rawinventors))
        self.assertEqual(9, len(clean.patents))

        alchemy.unmatch(loc[5].location, session)
        self.assertEqual(2, session.query(Location).count())
        self.assertEqual(2, session.query(locationinventor).count())

        alchemy.unmatch(inv[3:20], session)
        alchemy.unmatch(loc[10].location, session)
        self.assertEqual(1, session.query(Location).count())
        self.assertEqual(0, session.query(locationinventor).count())
    def test_unmatch_asgloc(self):
        loc = session.query(RawLocation).limit(20)
        asg = session.query(RawAssignee).limit(20)
        alchemy.match(asg, session)
        alchemy.match(loc[0:5], session)
        alchemy.match(loc[5:10], session)
        alchemy.match(loc[10:15], session)
        alchemy.match(loc[15:20], session)

        clean = asg[0].assignee
        alchemy.unmatch(asg[0], session)
        self.assertEqual(None, asg[0].assignee)
        self.assertEqual(19, len(clean.rawassignees))
        self.assertEqual(19, len(clean.patents))

        self.assertEqual(4, session.query(Location).count())
        self.assertEqual(4, session.query(locationassignee).count())

        clean = loc[0].location
        self.assertEqual(5, len(clean.rawlocations))
        alchemy.unmatch(loc[0], session)
        self.assertEqual(4, len(clean.rawlocations))
        alchemy.unmatch(loc[1], session)
        self.assertEqual(3, len(clean.rawlocations))
        alchemy.unmatch(loc[2:5], session)
        self.assertEqual(None, loc[0].location)
        self.assertEqual(3, session.query(Location).count())
        self.assertEqual(3, session.query(locationassignee).count())

        alchemy.unmatch(loc[5].location, session)
        self.assertEqual(2, session.query(Location).count())
        self.assertEqual(2, session.query(locationassignee).count())

        alchemy.unmatch(asg[3:20], session)
        alchemy.unmatch(loc[10].location, session)
        self.assertEqual(1, session.query(Location).count())
        self.assertEqual(0, session.query(locationassignee).count())