def maximum_co_localized_cases(self, case_numbers, slice_variables, p_bounds=None):
     new = False
     if len(case_numbers) == 0:
         return None
     intersections = list()
     Cases = self(case_numbers)
     for i in xrange(len(Cases)):
         case = Cases[i]
         case_num = case.case_number
         case_numbers = self._cyclical_case_as_subcases(case_num, case_numbers)
     valid_cases = range(len(case_numbers))
     if p_bounds is not None:
         lower = VariablePool(names=self.independent_variables)
         upper = VariablePool(names=self.independent_variables)
         for key in lower:
             lower[key] = 1e-20
             upper[key] = 1e20
             for (key, value) in p_bounds.iteritems():
                 try:
                     min_value, max_value = value
                 except TypeError:
                     min_value = value
                     max_value = value
                 if min_value > max_value:
                     raise ValueError, "parameter slice bounds are inverted: min is larger than max"
                     lower[key] = min_value
                     upper[key] = max_value
     ## [intersections.append(i) for i in case_numbers if self(i).is_valid()is True]
     sets = [set([i]) for i in valid_cases]
     for i in xrange(2, len(case_numbers) + 1):
         new = True
         sets_to_check = sets
         sets = []
         identifiers = range(0, len(sets_to_check))
         comb = itertools.combinations(identifiers, 2)
         for j in comb:
             current_set = set()
             for k in j:
                 current_set = current_set.union(sets_to_check[k])
             if len(current_set) != i:
                 continue
             if current_set in sets:
                 continue
             case_int = CaseColocalization([self(case_numbers[k]) for k in current_set], slice_variables)
             pvals = case_int.valid_parameter_set()
             if pvals > 0:
                 if new is True:
                     intersections = []
                 new = False
                 intersections.append([case_numbers[k] for k in current_set])
                 sets.append(current_set)
     return intersections
 def co_localize_cases(
     self,
     case_numbers,
     slice_parameters,
     constraints=None,
     p_bounds=None,
     optimize=None,
     minimize=True,
     project=True,
     by_signature=False,
 ):
     cases = self(case_numbers, by_signature=by_signature)
     to_colocalize = CaseColocalization(cases, slice_parameters, constraints=constraints)
     co_localized = to_colocalize.valid_parameter_set(
         p_bounds=p_bounds, optimize=optimize, minimize=minimize, project=project
     )
     return co_localized