def testDocumentConstraints(self): dc = DocumentConstraints() r1 = DeterministicRankingFunction(None, self.weights_1) r2 = DeterministicRankingFunction(None, self.weights_2) (interleaved_list, assignments) = dc.interleave(r1, r2, self.query, 10) self.assertIn(interleaved_list.tolist(), [[0, 1, 2, 3], [1, 0, 2, 3], [0, 1, 3, 2], [1, 0, 3, 2]]) self.assertIn(assignments[0].tolist(), [[1, 2, 3, 0], [1, 3, 2, 0]]) self.assertIn(assignments[1].tolist(), [[0, 1, 2, 3], [0, 1, 3, 2]]) o = dc.infer_outcome([1, 0, 3, 2], [[1, 3, 2, 0], [0, 1, 3, 2]], [1, 0, 0, 0], self.query) self.assertEqual(o, -1, "l1 should win (1), o = %g" % o) o = dc.infer_outcome([1, 0, 3, 2], [[1, 3, 2, 0], [0, 1, 3, 2]], [0, 0, 0, 1], self.query) self.assertEqual(o, -1, "l1 should win (2), o = %g" % o) o = dc.infer_outcome([1, 0, 3, 2], [[1, 3, 2, 0], [0, 1, 3, 2]], [0, 1, 0, 0], self.query) self.assertEqual(o, 1, "l2 should win (1), o = %g" % o) o = dc.infer_outcome([1, 0, 3, 2], [[1, 0, 2, 3], [0, 1, 3, 2]], [0, 1, 0, 0], self.query) # constraints: 0 > 1, 0 > 3 self.assertEqual(o, 1, "l2 should win (2), o = %g" % o) o = dc.infer_outcome([1, 0, 3, 2], [[1, 2, 0, 3], [1, 0, 2, 3]], [0, 1, 1, 0], self.query) # constraints: 0 > 1, 3 > 1, 0 > 2, 3 > 2 self.assertEqual(o, 1, "l2 should win (3), o = %g" % o) o = dc.infer_outcome([1, 0, 3, 2], [[1, 3, 2, 0], [0, 1, 3, 2]], [0, 0, 0, 0], self.query) self.assertEqual(o, 0, "No winner when there are no clicks o = %g" % o) o = dc.infer_outcome([1, 0, 3, 2], [[1, 3, 2, 0], [0, 1, 3, 2]], [1, 1, 1, 1], self.query) self.assertEqual(o, 0, "No winner when all are clicked o = %g" % o) dc = DocumentConstraints("--constraints 1") o = dc.infer_outcome([1, 0, 3, 2], [[1, 0, 2, 3], [3, 0, 1, 2]], [0, 1, 0, 0], self.query) # constraint: 0 > 1 self.assertEqual(o, 1, "l2 should win with one constraint, o = %g" % o) dc = DocumentConstraints("--constraints 2") o = dc.infer_outcome([1, 0, 3, 2], [[1, 0, 2, 3], [3, 0, 1, 2]], [0, 1, 0, 0], self.query) self.assertEqual(o, 0, "Tie with two constraint types (1), o = %g" % o) o = dc.infer_outcome([1, 0, 3, 2], [[1, 0, 2, 3], [1, 2, 0, 3]], [0, 1, 1, 0], self.query) # constraints: 0 > 1, 3 > 1, 3 > 2 self.assertEqual(o, 0, "Tie with two constraint types (2), o = %g" % o) o = dc.infer_outcome([1, 0, 3, 2], [[1, 0, 4, 3], [1, 0, 3, 2]], [0, 1, 1, 0], self.query) self.assertEqual(o, 0, "Tie with two constraint types (3), o = %g" % o) o = dc.infer_outcome([1, 0, 3, 2], [[1, 0, 4, 3], [1, 0, 2, 3]], [0, 1, 1, 0], self.query) self.assertEqual(o, -1, "l1 should win with two constr., o = %g" % o)