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