diff --git a/corneto/_plotting.py b/corneto/_plotting.py index d7e2a2937..9e4b08a2e 100644 --- a/corneto/_plotting.py +++ b/corneto/_plotting.py @@ -737,7 +737,9 @@ def _build_plot_model( v_t: List[str] = [] def add_node(v_name: str, default_shape: str) -> None: - attrs = {"shape": default_shape} + attrs = {} + if default_shape != "circle" or "shape" not in node_defaults: + attrs["shape"] = default_shape if v_name in custom_vertex_attr_str: attrs.update(custom_vertex_attr_str[v_name]) nodes.append((v_name, attrs)) diff --git a/corneto/backend/_base.py b/corneto/backend/_base.py index 7975fb5e9..70a2f5145 100644 --- a/corneto/backend/_base.py +++ b/corneto/backend/_base.py @@ -891,13 +891,14 @@ def Flow( alias_flow_ineg: str = EXPR_NAME_FLOW_INEG, alias_nonzero_flow: str = EXPR_NAME_FLOW_NZI, indicator_tolerance: float = 1e-4, + force_matrix: bool = False, ) -> ProblemDef: shape: Tuple = (g.num_edges,) if isinstance(lb, list): lb = np.array(lb) if isinstance(ub, list): ub = np.array(ub) - if n_flows > 1: + if n_flows > 1 or force_matrix: shape = (g.num_edges, n_flows) # If lb/ub are vectors, duplicate for each flow if isinstance(lb, (int, float)): @@ -1166,70 +1167,61 @@ def Acyclic( if vertex_ub_dist is not None and len(vertex_ub_dist) != n_samples: raise ValueError("Length of vertex_ub_dist must match number of samples") - # Loop over samples to add constraints based on indicator variables and the bounds. - for i_sample in range(n_samples): - if Ip is not None: - Ip_i_order = Ip if len(Ip.shape) == 1 else Ip[:, i_sample] - if In is not None: - In_i_order = In if len(In.shape) == 1 else In[:, i_sample] + edge_indexes = np.array([i for i, (source, target) in enumerate(g.E) if source and target], dtype=int) + if edge_indexes.size: + from scipy.sparse import csr_matrix + + edges = [g.get_edge(i) for i in edge_indexes] + source_indexes = np.array([vix[next(iter(source))] for source, _ in edges]) + target_indexes = np.array([vix[next(iter(target))] for _, target in edges]) + num_internal_edges = len(edge_indexes) + edge_rows = np.arange(num_internal_edges) + edge_selector = csr_matrix( + ( + np.ones(num_internal_edges), + (edge_rows, edge_indexes), + ), + shape=(num_internal_edges, g.num_edges), + ) + layer_difference_matrix = csr_matrix( + ( + np.concatenate((-np.ones(num_internal_edges), np.ones(num_internal_edges))), + ( + np.concatenate((edge_rows, edge_rows)), + np.concatenate((source_indexes, target_indexes)), + ), + ), + shape=(num_internal_edges, g.num_vertices), + ) + edge_selector = self.Constant(edge_selector) + layer_difference_matrix = self.Constant(layer_difference_matrix) if Ip is not None: - # Get edges that can have a positive flow. - if hasattr(Ip, "ub"): - ub = Ip.ub if len(Ip.shape) == 1 else Ip.ub[:, i_sample] - e_pos = [(i, g.get_edge(i)) for i in np.flatnonzero(ub > 0)] - e_ix = np.array([i for i, (s, t) in e_pos if s and t]) - else: - e_ix = np.array([i for i, (s, t) in enumerate(g.E) if s and t]) - edges = [g.get_edge(i) for i in e_ix] - s_idx = np.array([vix[next(iter(s))] for (s, _) in edges]) - t_idx = np.array([vix[next(iter(t))] for (_, t) in edges]) - if len(e_ix) > 0: - P += L[t_idx, i_sample] - L[s_idx, i_sample] >= Ip_i_order[e_ix] + (1 - g.num_vertices) * ( - 1 - Ip_i_order[e_ix] - ) - P += L[t_idx, i_sample] - L[s_idx, i_sample] <= g.num_vertices - 1 + positive = Ip.reshape((g.num_edges, 1)) if len(Ip.shape) == 1 else Ip + selected = edge_selector @ positive + layer_difference = layer_difference_matrix @ L + P += layer_difference >= selected + (1 - g.num_vertices) * (1 - selected) + P += layer_difference <= g.num_vertices - 1 if In is not None: - # Negative flows are handled as reversed directed edges. - if hasattr(In, "ub"): - ub = In.ub if len(In.shape) == 1 else In.ub[:, i_sample] - e_neg = [(i, g.get_edge(i)) for i in np.flatnonzero(ub > 0)] - e_ix = np.array([i for i, (s, t) in e_neg if s and t]) - else: - e_ix = np.array([i for i, (s, t) in enumerate(g.E) if s and t]) - edges = [g.get_edge(i) for i in e_ix] - s_idx = np.array([vix[next(iter(s))] for (s, _) in edges]) - t_idx = np.array([vix[next(iter(t))] for (_, t) in edges]) - if len(e_ix) > 0: - P += L[s_idx, i_sample] - L[t_idx, i_sample] >= In_i_order[e_ix] + (1 - g.num_vertices) * ( - 1 - In_i_order[e_ix] - ) - P += L[s_idx, i_sample] - L[t_idx, i_sample] <= g.num_vertices - 1 - - # --- New: Add vertex lower and upper bound constraints --- - if vertex_lb_dist is not None: - list_vix = [] - list_dist = [] - for v in g.V: - idx = vix[v] - if v in vertex_lb_dist[i_sample]: - list_vix.append(idx) - list_dist.append(vertex_lb_dist[i_sample][v]) - if list_vix: - P += L[np.array(list_vix), i_sample] >= np.array(list_dist) - if vertex_ub_dist is not None: - list_vix = [] - list_dist = [] - for v in g.V: - idx = vix[v] - if v in vertex_ub_dist[i_sample]: - list_vix.append(idx) - list_dist.append(vertex_ub_dist[i_sample][v]) - if list_vix: - P += L[np.array(list_vix), i_sample] <= np.array(list_dist) - - # TODO: Raise error if hypergraph is used + negative = In.reshape((g.num_edges, 1)) if len(In.shape) == 1 else In + selected = edge_selector @ negative + layer_difference = -(layer_difference_matrix @ L) + P += layer_difference >= selected + (1 - g.num_vertices) * (1 - selected) + P += layer_difference <= g.num_vertices - 1 + + if vertex_lb_dist is not None: + layer_lb = np.zeros((g.num_vertices, n_samples)) + for sample_index, bounds in enumerate(vertex_lb_dist): + for vertex, distance in bounds.items(): + layer_lb[vix[vertex], sample_index] = distance + P += L >= layer_lb + if vertex_ub_dist is not None: + layer_ub = np.full((g.num_vertices, n_samples), g.num_vertices - 1) + for sample_index, bounds in enumerate(vertex_ub_dist): + for vertex, distance in bounds.items(): + layer_ub[vix[vertex], sample_index] = distance + P += L <= layer_ub return P def AcyclicFlow( @@ -1417,35 +1409,12 @@ def NonZeroIndicator( indicator = I_pos + I_neg c += [indicator <= 1] # Ensure mutual exclusivity - # Disable infeasible binary indicators based on bounds - if np.sum(ub <= 0) > 0: - mask = ub <= 0 - if mask.ndim == 0: - c += [I_pos == 0] - elif mask.ndim == 1: - idx = np.where(mask)[0] - c += [I_pos[idx] == 0] - elif mask.ndim == 2: - for col in range(mask.shape[1]): - idx = np.where(mask[:, col])[0] - if len(idx) > 0: - c += [I_pos[idx, col] == 0] - else: - raise ValueError(f"Unsupported NonZeroIndicator ub dimensionality: {mask.ndim}") - if np.sum(lb >= 0) > 0: - mask = lb >= 0 - if mask.ndim == 0: - c += [I_neg == 0] - elif mask.ndim == 1: - idx = np.where(mask)[0] - c += [I_neg[idx] == 0] - elif mask.ndim == 2: - for col in range(mask.shape[1]): - idx = np.where(mask[:, col])[0] - if len(idx) > 0: - c += [I_neg[idx, col] == 0] - else: - raise ValueError(f"Unsupported NonZeroIndicator lb dimensionality: {mask.ndim}") + # Fix impossible directions with whole-array masks. Besides tightening + # the model, this avoids relying on solver feasibility tolerances when + # the nonzero tolerance is small. The matrix form keeps compilation + # independent of the number of flow columns. + c += [I_pos.multiply(np.asarray(ub <= 0, dtype=float)) == 0] + c += [I_neg.multiply(np.asarray(lb >= 0, dtype=float)) == 0] # Add constraints to enforce variable behavior depending on the indicator activation: # If I_pos = 1 and I_neg = 0: V >= tol AND V <= ub diff --git a/corneto/methods/__init__.py b/corneto/methods/__init__.py index d7e893798..dae677b09 100644 --- a/corneto/methods/__init__.py +++ b/corneto/methods/__init__.py @@ -9,6 +9,7 @@ """ # Import Carnival Methods +from corneto.methods.bidirectional_phonemes import BidirectionalPHONEMeS from corneto.methods.carnival import ( CarnivalFlow, CarnivalILP, @@ -17,6 +18,7 @@ from corneto.methods.fba import MultiSampleFBA from corneto.methods.imat import MultiSampleIMAT from corneto.methods.pcst import PrizeCollectingSteinerTree +from corneto.methods.phonemes import PHONEMeS, compute_phonemes_scores # Import Shortest Path Methods from corneto.methods.shortest_path import ( @@ -27,12 +29,15 @@ from corneto.methods.steiner import SteinerTreeFlow __all__ = [ + "BidirectionalPHONEMeS", "CarnivalFlow", "CarnivalILP", "MultiSampleFBA", "MultiSampleIMAT", + "PHONEMeS", "PrizeCollectingSteinerTree", "SteinerTreeFlow", + "compute_phonemes_scores", "create_multisample_shortest_path", "milp_carnival", "shortest_path", diff --git a/corneto/methods/_base.py b/corneto/methods/_base.py index 732d66e80..8fe6ba085 100644 --- a/corneto/methods/_base.py +++ b/corneto/methods/_base.py @@ -5,6 +5,7 @@ from corneto.backend._base import Backend, ProblemDef from corneto.data import Data from corneto.graph import BaseGraph +from corneto.methods._optimization_utils import add_condition_union class Method(ABC): @@ -157,7 +158,7 @@ def create_problem(self, graph: BaseGraph, data: Data) -> ProblemDef: """ pass - def build(self, graph: BaseGraph, data: Optional[Data] = None) -> ProblemDef: + def build_from_data(self, graph: BaseGraph, data: Optional[Data] = None) -> ProblemDef: """Build the complete optimization problem. The process involves: @@ -186,7 +187,6 @@ def build(self, graph: BaseGraph, data: Optional[Data] = None) -> ProblemDef: if self._reg_varname is not None: reg_var = self.problem.expr[self._reg_varname] newvar_name = self._reg_varname + self._reg_varname_suffix - ax = 0 if len(reg_var.shape) == 1 else 1 # A 1D vector can be summed directly without a linear OR. if len(reg_var.shape) == 1 or reg_var.shape[1] == 1 or reg_var.shape[0] == 1: self.problem.add_objective( @@ -196,9 +196,14 @@ def build(self, graph: BaseGraph, data: Optional[Data] = None) -> ProblemDef: ) else: # Structured sparsity regularization - self.problem += self._backend.linear_or(reg_var, axis=ax, varname=newvar_name) + reg_var_any = add_condition_union( + self._backend, + self.problem, + reg_var, + name=newvar_name, + ) self.problem.add_objective( - self.problem.expr[newvar_name].sum(), + reg_var_any.sum(), weight=self.lambda_reg_param, name=f"regularization_{newvar_name}", ) @@ -206,6 +211,15 @@ def build(self, graph: BaseGraph, data: Optional[Data] = None) -> ProblemDef: raise ValueError("Parameter lambda_reg > 0 but no regularization variable name provided") return self.problem + def build(self, graph: BaseGraph, data: Optional[Data] = None) -> ProblemDef: + """Build from a :class:`~corneto.data.Data` object. + + This compatibility entry point is retained for custom ``Method`` + subclasses. Public CORNETO methods provide method-specific ``build`` + signatures and expose this generic path as :meth:`build_from_data`. + """ + return self.build_from_data(graph, data) + @staticmethod def name() -> str: """Returns the name of the method. diff --git a/corneto/methods/_carnival.py b/corneto/methods/_carnival.py index f860cf6bc..d4a77f8f6 100644 --- a/corneto/methods/_carnival.py +++ b/corneto/methods/_carnival.py @@ -13,20 +13,31 @@ # from corneto.methods import expand_graph_for_flows from corneto.methods._base import FlowMethod, Method -from corneto.methods.signaling._utils import ( - get_incidence_matrices_of_edges, - get_interactions, +from corneto.methods._input_utils import ( + DEFAULT_CONDITION, + data_from_features, + legacy_data, + validate_condition_maps, + validate_vertices, ) +from corneto.methods._network_utils import ( + augment_with_boundaries, + directed_incidence, + prune_to_paths, +) +from corneto.methods._signal_utils import add_signed_edge_state +from corneto.methods.signaling._utils import get_interactions def create_flow_graph(G: BaseGraph, inputs: Iterable[Any], outputs: Iterable[Any]) -> BaseGraph: """Add flow edges to perturbed and measured nodes in graph ``G``.""" - G1 = G.copy() - for v in unique_iter(outputs): - G1.add_edge(v, ()) - for v in unique_iter(inputs): - G1.add_edge((), v) - return G1 + layout = augment_with_boundaries( + G, + inflow_vertices=unique_iter(inputs), + outflow_vertices=unique_iter(outputs), + boundary_order=("outflow", "inflow"), + ) + return layout.graph def prune_graph( @@ -40,11 +51,9 @@ def prune_graph( Steps: 1. For each condition in dataset: - - Find relevant vertices (graph vertices ∩ condition inputs/outputs) - - Prune subgraph using relevant vertices - - Collect remaining input/output keys - 2. Collect pruned input/output vertices across conditions - 3. Prune original graph using all collected vertices + - Find graph vertices on a directed path from an input to an output + 2. Return the union of the condition-specific path subgraphs + 3. Remove data features outside the retained graph Args: G: Graph-like object with: @@ -61,26 +70,14 @@ def prune_graph( - The pruned dataset with pruned vertices """ graph_vertices: Set[Any] = set(G.V) - reachable_inputs = set() - reachable_outputs = set() - - for sample in data.samples.values(): - sample_inputs = sample.query.select(lambda f: f.data[property_key] == input_key).pluck() - - sample_outputs = sample.query.select(lambda f: f.data[property_key] == output_key).pluck() - - # Intersect with the current graph's vertices - inputs_in_graph = graph_vertices & sample_inputs - outputs_in_graph = graph_vertices & sample_outputs - - # Prune the graph based on relevant inputs and outputs - sub_graph = G.prune(list(inputs_in_graph), list(outputs_in_graph)) - subgraph_vertices = set(sub_graph.V) - reachable_inputs.update(inputs_in_graph & subgraph_vertices) - reachable_outputs.update(outputs_in_graph & subgraph_vertices) - - # Prune the original graph with all collected inputs/outputs - pruned_graph = G.prune(list(reachable_inputs), list(reachable_outputs)) + sources = {} + targets = {} + for condition, sample in data.samples.items(): + sources[condition] = graph_vertices & sample.query.select(lambda f: f.data[property_key] == input_key).pluck() + targets[condition] = graph_vertices & sample.query.select(lambda f: f.data[property_key] == output_key).pluck() + + pruning = prune_to_paths(G, sources=sources, targets=targets) + pruned_graph = pruning.graph pruned_data = data.query.filter_features(lambda f: f.id in pruned_graph.V).collect() # pruned_data = data.subset(feature_predicate=lambda f: f.id in pruned_graph.V) return pruned_graph, pruned_data @@ -108,7 +105,71 @@ def create_signed_error_expression(P, values, index_of_vertices=None, condition_ return (1 - vertex_variable[index_of_vertices].multiply(np.sign(values))).multiply(abs(values)) -class CarnivalFlow(FlowMethod): +def _carnival_data(graph, perturbations, transcription_factors) -> Data: + conditions = validate_condition_maps( + perturbations=perturbations, + transcription_factors=transcription_factors, + ) + features_by_condition = {} + for condition in conditions["perturbations"]: + inputs = validate_vertices( + graph, + conditions["perturbations"][condition], + argument="perturbations", + condition=condition, + ) + outputs = validate_vertices( + graph, + conditions["transcription_factors"][condition], + argument="transcription_factors", + condition=condition, + ) + overlap = inputs.keys() & outputs.keys() + if overlap: + raise ValueError( + f"Vertices cannot be both perturbations and transcription_factors " + f"in condition {condition!r}: {sorted(overlap, key=repr)!r}." + ) + features_by_condition[condition] = [ + {"id": identifier, "value": value, "mapping": "vertex", "role": "input"} + for identifier, value in inputs.items() + ] + [ + {"id": identifier, "value": value, "mapping": "vertex", "role": "output"} + for identifier, value in outputs.items() + ] + return data_from_features(features_by_condition) + + +class _CarnivalUserInputs: + """User-facing input conversion shared by CARNIVAL formulations.""" + + def build( + self, + pkn: BaseGraph, + data: Optional[Data] = None, + *, + perturbations=None, + transcription_factors=None, + ): + old_data = legacy_data(data, method=self.__class__.__name__) + if old_data is not None: + if perturbations is not None or transcription_factors is not None: + raise TypeError("Do not combine a Data object with explicit scientific inputs.") + return self.build_from_data(pkn, old_data) + if perturbations is None or transcription_factors is None: + raise TypeError("build() requires perturbations= and transcription_factors=.") + return self.build_many( + pkn, + perturbations={DEFAULT_CONDITION: perturbations}, + transcription_factors={DEFAULT_CONDITION: transcription_factors}, + ) + + def build_many(self, pkn: BaseGraph, *, perturbations, transcription_factors): + data = _carnival_data(pkn, perturbations, transcription_factors) + return self.build_from_data(pkn, data) + + +class CarnivalFlow(_CarnivalUserInputs, FlowMethod): """Flow-base, multi-sample CARNIVAL method for intracellular signaling. Implements multi-sample intracellular network inference using @@ -243,14 +304,20 @@ def create_flow_based_problem(self, flow_problem, graph: BaseGraph, data: Data): ones = np.ones((1, num_experiments)) # Get incidence matrices and interactions from the graph - At, Ah = get_incidence_matrices_of_edges(graph, sparse=True) + incidence = directed_incidence(graph) + At, Ah = incidence.incoming, incidence.outgoing interaction = get_interactions(graph) - # Create binary variables for edge activations and inhibitions - Eact = self.backend.Variable("edge_activates", (graph.num_edges, num_experiments), vartype=VarType.BINARY) - Einh = self.backend.Variable("edge_inhibits", (graph.num_edges, num_experiments), vartype=VarType.BINARY) - # Prevent an edge from activating and inhibiting simultaneously - problem += Eact + Einh <= 1 + edge_state = add_signed_edge_state( + self.backend, + problem, + (graph.num_edges, num_experiments), + positive_name="edge_activates", + negative_name="edge_inhibits", + value_alias="edge_value", + selected_alias="edge_has_signal", + ) + Eact, Einh = edge_state.positive, edge_state.negative # PICOS requires a constant for a sparse matrix on the # left hand side, otherwise it fails. @@ -278,8 +345,6 @@ def create_flow_based_problem(self, flow_problem, graph: BaseGraph, data: Data): problem.register("vertex_value", V) problem.register("vertex_activated", Va) problem.register("vertex_inhibited", Vi) - problem.register("edge_value", Eact - Einh) - problem.register("edge_has_signal", Eact + Einh) # Add acyclic constraints to prevent cycles in signal propagation problem = self.backend.Acyclic( @@ -425,7 +490,7 @@ def description(): ) -class CarnivalILP(Method): +class CarnivalILP(_CarnivalUserInputs, Method): """Multi-condition implementation of the CARNIVAL ILP formulation. Each sample in :class:`corneto.data.Data` receives an independent signaling @@ -510,11 +575,6 @@ def create_problem(self, graph: BaseGraph, data: Data): def condition_shape(size): return (size, num_conditions) if is_multicondition else (size,) - def at_condition(variable, index, condition): - if is_multicondition: - return variable[index, condition] - return variable[index] - # Create the problem P = self.backend.Problem() @@ -531,16 +591,14 @@ def at_condition(variable, index, condition): shape=condition_shape(len(graph.V)), vartype=VarType.BINARY, ) - E_act = self.backend.Variable( - "edge_activating", - shape=condition_shape(len(graph.E)), - vartype=VarType.BINARY, - ) - E_inh = self.backend.Variable( - "edge_inhibiting", - shape=condition_shape(len(graph.E)), - vartype=VarType.BINARY, + edge_state = add_signed_edge_state( + self.backend, + P, + condition_shape(len(graph.E)), + positive_name="edge_activating", + negative_name="edge_inhibiting", ) + E_act, E_inh = edge_state.positive, edge_state.negative V_pos = self.backend.Variable( "vertex_position", shape=condition_shape(len(graph.V)), @@ -553,47 +611,59 @@ def at_condition(variable, index, condition): # A vertex can be activated or inhibited, but not both P += V_act + V_inh <= 1 - # An edge can activate or inhibit, but not both - P += E_act + E_inh <= 1 - - for edge_index, (s, t) in enumerate(graph.E): - s = list(s) - t = list(t) - if len(s) == 0: - continue - if len(s) > 1: - raise ValueError("Only one source vertex allowed") - if len(t) > 1: - raise ValueError("Only one target vertex allowed") - s = s[0] - t = t[0] - # An edge can activate its downstream (target vertex) (E_act=1, E_inh=0), - # inhibit it (E_act=0, E_inh=1), or do nothing (E_act=0, E_inh=0) - si = V_index[s] - ti = V_index[t] - interaction = int(graph.get_attr_edge(edge_index).get(self.interaction_graph_attribute)) - if interaction not in {-1, 1}: - raise ValueError(f"Invalid interaction value for edge {edge_index}: {interaction}") - for condition in range(num_conditions): - edge_activates = at_condition(E_act, edge_index, condition) - edge_inhibits = at_condition(E_inh, edge_index, condition) - source_activated = at_condition(V_act, si, condition) - source_inhibited = at_condition(V_inh, si, condition) - - if interaction == 1: - P += edge_activates <= source_activated - P += edge_inhibits <= source_inhibited - else: - P += edge_activates <= source_inhibited - P += edge_inhibits <= source_activated - - if not self.disable_acyclicity: - edge_selected = edge_activates + edge_inhibits - source_position = at_condition(V_pos, si, condition) - target_position = at_condition(V_pos, ti, condition) - P += target_position - source_position >= 1 - max_dist * (1 - edge_selected) - - for condition, (sample_name, sample) in enumerate(data.samples.items()): + + V_act_matrix = V_act + V_inh_matrix = V_inh + E_act_matrix = E_act + E_inh_matrix = E_inh + V_pos_matrix = V_pos + + incidence = directed_incidence(graph) + if np.any(incidence.source_indices < 0) or np.any(incidence.target_indices < 0): + raise ValueError("CarnivalILP requires internal edges with one source and one target.") + outgoing = self.backend.Constant(incidence.outgoing) + incoming = self.backend.Constant(incidence.incoming) + source_activated = outgoing.T @ V_act_matrix + source_inhibited = outgoing.T @ V_inh_matrix + incoming_activating = incoming @ E_act_matrix + incoming_inhibiting = incoming @ E_inh_matrix + + interactions = np.asarray( + graph.get_attr_from_edges(self.interaction_graph_attribute), + dtype=float, + ) + invalid_interactions = np.flatnonzero(~np.isin(interactions, (-1, 1))) + if invalid_interactions.size: + edge_index = int(invalid_interactions[0]) + raise ValueError(f"Invalid interaction value for edge {edge_index}: {interactions[edge_index]}") + activating = np.broadcast_to( + (interactions > 0).reshape(-1, 1) if is_multicondition else interactions > 0, + condition_shape(graph.num_edges), + ).astype(float) + inhibiting = np.broadcast_to( + (interactions < 0).reshape(-1, 1) if is_multicondition else interactions < 0, + condition_shape(graph.num_edges), + ).astype(float) + P += E_act_matrix <= source_activated.multiply(activating) + source_inhibited.multiply(inhibiting) + P += E_inh_matrix <= source_inhibited.multiply(activating) + source_activated.multiply(inhibiting) + P += incoming_activating + incoming_inhibiting <= 1 + + edge_selected = E_act_matrix + E_inh_matrix + if not self.disable_acyclicity: + if is_multicondition: + source_position = V_pos_matrix[incidence.source_indices, :] + target_position = V_pos_matrix[incidence.target_indices, :] + else: + source_position = V_pos_matrix[incidence.source_indices] + target_position = V_pos_matrix[incidence.target_indices] + P += target_position - source_position >= 1 - max_dist * (1 - edge_selected) + + perturbed_mask = np.zeros(condition_shape(graph.num_vertices), dtype=float) + positive_perturbation = np.zeros_like(perturbed_mask) + negative_perturbation = np.zeros_like(perturbed_mask) + condition_inputs = [] + condition_measurements = [] + for condition, sample in enumerate(data.samples.values()): perturbations = dict( sample.query.select(lambda f: f.data[self.data_type_key] == self.data_input_key).pluck( lambda f: (f.id, f.value) @@ -604,43 +674,35 @@ def at_condition(variable, index, condition): lambda f: (f.id, f.value) ) ) - - for vertex in graph.V: - in_edge_indices = [i for i, _ in graph.in_edges(vertex)] + condition_inputs.append(perturbations) + condition_measurements.append(measurements) + for vertex, value in perturbations.items(): vertex_index = V_index[vertex] - vertex_activated = at_condition(V_act, vertex_index, condition) - vertex_inhibited = at_condition(V_inh, vertex_index, condition) - incoming_activating = sum(at_condition(E_act, edge_index, condition) for edge_index in in_edge_indices) - incoming_inhibiting = sum(at_condition(E_inh, edge_index, condition) for edge_index in in_edge_indices) - if in_edge_indices: - P += incoming_activating + incoming_inhibiting <= 1 - - perturbed = vertex in perturbations - P += vertex_activated <= int(perturbed) + incoming_activating - P += vertex_inhibited <= int(perturbed) + incoming_inhibiting - - perturbed_value = np.sign(perturbations.get(vertex, 0)) - if perturbed_value > 0: - P += vertex_activated == 1 - P += vertex_inhibited == 0 - elif perturbed_value < 0: - P += vertex_activated == 0 - P += vertex_inhibited == 1 - - objective_data = measurements.copy() + index = (vertex_index, condition) if is_multicondition else vertex_index + perturbed_mask[index] = 1 + positive_perturbation[index] = value > 0 + negative_perturbation[index] = value < 0 + + P += V_act_matrix <= perturbed_mask + incoming_activating + P += V_inh_matrix <= perturbed_mask + incoming_inhibiting + P += V_act_matrix >= positive_perturbation + P += V_inh_matrix >= negative_perturbation + + vertex_value_matrix = V_act_matrix - V_inh_matrix + for condition, sample_name in enumerate(data.samples): + objective_data = condition_measurements[condition].copy() if self.use_perturbation_weights: - objective_data.update(perturbations) - - error_terms = [] - for vertex, value in objective_data.items(): - vertex_index = V_index[vertex] - prediction = at_condition(V_act, vertex_index, condition) - at_condition(V_inh, vertex_index, condition) - sign = np.sign(value) - if sign > 0: - error_terms.append(np.abs(value) * (sign - prediction)) - elif sign < 0: - error_terms.append(np.abs(value) * (prediction - sign)) - P.add_objective(sum(error_terms), name=f"error_{sample_name}") + objective_data.update(condition_inputs[condition]) + positions = [V_index[vertex] for vertex in objective_data] + values = np.asarray(list(objective_data.values())) + error_expr = create_signed_error_expression( + P, + values, + index_of_vertices=positions, + condition_index=condition, + vertex_variable=vertex_value_matrix, + ) + P.add_objective(error_expr.sum(), name=f"error_{sample_name}") if self.beta_weight > 0: if self.penalize == "nodes": @@ -655,7 +717,7 @@ def at_condition(variable, index, condition): # Finally, register some aliases for convenience P.register("vertex_values", V_act - V_inh) - P.register("edge_values", E_act - E_inh) + P.register("edge_values", edge_state.value) return P diff --git a/corneto/methods/_flow_utils.py b/corneto/methods/_flow_utils.py new file mode 100644 index 000000000..8ef2d8bf3 --- /dev/null +++ b/corneto/methods/_flow_utils.py @@ -0,0 +1,123 @@ +"""Private vectorized building blocks shared by network-flow methods.""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import Any, Iterable + +import numpy as np + +from corneto._constants import VarType +from corneto.backend._base import Backend, ProblemDef +from corneto.graph import BaseGraph +from corneto.methods._network_utils import directed_incidence + + +@dataclass(frozen=True) +class VertexSelection: + """Expressions created by :func:`add_vertex_selection`.""" + + selected: Any + outgoing: Any + incoming: Any + + +@dataclass(frozen=True) +class SelectedFlow: + """Flow-selection expressions over all and biological edges.""" + + all_edges: Any + biological_edges: Any + dag_layer: Any | None + + +def add_acyclic_flow_selection( + backend: Backend, + problem: ProblemDef, + graph: BaseGraph, + *, + epsilon: float, +): + """Add flow indicators and DAG constraints, returning edge selection.""" + problem += backend.NonZeroIndicator(problem.expr._flow, tolerance=epsilon) + backend.Acyclic( + graph, + problem, + indicator_negative_var_name="_flow_ineg", + indicator_positive_var_name="_flow_ipos", + ) + return problem.expr._flow_ipos + problem.expr._flow_ineg + + +def add_selected_flow( + backend: Backend, + problem: ProblemDef, + graph: BaseGraph, + *, + biological_edge_indices: Iterable[int], + epsilon: float, + acyclic: bool, +) -> SelectedFlow: + """Attach edge-selection indicators and optionally DAG constraints to a flow.""" + biological_edge_indices = list(biological_edge_indices) + if acyclic: + selected_all = add_acyclic_flow_selection( + backend, + problem, + graph, + epsilon=epsilon, + ) + dag_layer = problem.expr._dag_layer + else: + flow = problem.expr._flow + indicator_indexes = biological_edge_indices if len(flow.shape) == 1 else (biological_edge_indices, slice(None)) + problem += backend.Indicator(flow, indexes=indicator_indexes) + selected_all = problem.expr._flow_i + dag_layer = None + biological = ( + selected_all[biological_edge_indices] + if len(selected_all.shape) == 1 + else selected_all[biological_edge_indices, :] + ) + return SelectedFlow( + all_edges=selected_all, + biological_edges=biological, + dag_layer=dag_layer, + ) + + +def add_vertex_selection( + backend: Backend, + problem: ProblemDef, + graph: BaseGraph, + edge_selected, + *, + edge_indices: Iterable[int], + force_selected: Any, + require_incoming: np.ndarray, + require_outgoing: np.ndarray, + name: str = "vertex_selected", + reverse: bool = False, +) -> VertexSelection: + """Link explicit vertex selection to selected directed biological edges.""" + incidence = directed_incidence(graph, edge_indices) + num_conditions = force_selected.shape[1] + selected = backend.Variable( + name, + (graph.num_vertices, num_conditions), + vartype=VarType.BINARY, + ) + outgoing_incidence = incidence.incoming if reverse else incidence.outgoing + incoming_incidence = incidence.outgoing if reverse else incidence.incoming + outgoing = backend.Constant(outgoing_incidence) @ edge_selected + incoming = backend.Constant(incoming_incidence) @ edge_selected + out_degree = np.asarray(outgoing_incidence.sum(axis=1)).reshape(-1, 1) + in_degree = np.asarray(incoming_incidence.sum(axis=1)).reshape(-1, 1) + + problem += outgoing <= selected.multiply(np.broadcast_to(out_degree, selected.shape)) + problem += incoming <= selected.multiply(np.broadcast_to(in_degree, selected.shape)) + forced = force_selected.astype(float) if isinstance(force_selected, np.ndarray) else force_selected + problem += selected >= forced + problem += selected.multiply(require_outgoing.astype(float)) <= outgoing + problem += selected.multiply(require_incoming.astype(float)) <= incoming + return VertexSelection(selected=selected, outgoing=outgoing, incoming=incoming) diff --git a/corneto/methods/_input_utils.py b/corneto/methods/_input_utils.py new file mode 100644 index 000000000..39c50815c --- /dev/null +++ b/corneto/methods/_input_utils.py @@ -0,0 +1,233 @@ +"""Validation helpers for user-facing method inputs.""" + +from __future__ import annotations + +import warnings +from collections.abc import Collection, Mapping +from numbers import Integral, Real +from typing import Any + +import numpy as np + +from corneto.data import Data +from corneto.graph import BaseGraph + +DEFAULT_CONDITION = "condition" + + +def legacy_data(data: Any, *, method: str) -> Data | None: + """Return a legacy Data argument or reject an invalid positional value.""" + if data is None: + return None + if not isinstance(data, Data): + raise TypeError( + f"{method}.build() accepts scientific inputs as keyword arguments; " + f"use {method}.build_from_data(graph, data) for a Data object." + ) + warnings.warn( + f"{method}.build(graph, data) is deprecated; use " + f"{method}.build_from_data(graph, data) for the advanced Data interface.", + DeprecationWarning, + stacklevel=3, + ) + return data + + +def require_mapping(value: Any, *, argument: str, condition: str | None = None) -> Mapping: + if not isinstance(value, Mapping): + suffix = f" for condition {condition!r}" if condition is not None else "" + raise TypeError(f"{argument}{suffix} must be a mapping, got {type(value).__name__}.") + return value + + +def validate_condition_maps(**arguments: Any) -> dict[str, Mapping]: + """Validate named condition mappings and require matching condition keys.""" + provided = {name: value for name, value in arguments.items() if value is not None} + if not provided: + return {} + + normalized: dict[str, Mapping] = {} + expected: tuple[str, ...] | None = None + expected_argument = "" + for argument, value in provided.items(): + outer = require_mapping(value, argument=argument) + if not outer: + raise ValueError(f"{argument} must contain at least one named condition.") + keys = tuple(outer.keys()) + for condition in keys: + if not isinstance(condition, str) or not condition: + raise ValueError(f"Condition names in {argument} must be non-empty strings, got {condition!r}.") + require_mapping(outer[condition], argument=argument, condition=condition) + if expected is None: + expected = keys + expected_argument = argument + elif set(keys) != set(expected): + raise ValueError( + f"Condition names in {argument} must match {expected_argument}: " + f"expected {list(expected)!r}, got {list(keys)!r}." + ) + normalized[argument] = outer + return normalized + + +def validate_condition_keys(**arguments: Any) -> tuple[str, ...]: + """Require all provided outer mappings to use the same named conditions.""" + provided = {name: value for name, value in arguments.items() if value is not None} + expected: tuple[str, ...] | None = None + expected_argument = "" + for argument, value in provided.items(): + outer = require_mapping(value, argument=argument) + if not outer: + raise ValueError(f"{argument} must contain at least one named condition.") + keys = tuple(outer.keys()) + for condition in keys: + if not isinstance(condition, str) or not condition: + raise ValueError(f"Condition names in {argument} must be non-empty strings, got {condition!r}.") + if expected is None: + expected = keys + expected_argument = argument + elif set(keys) != set(expected): + raise ValueError( + f"Condition names in {argument} must match {expected_argument}: " + f"expected {list(expected)!r}, got {list(keys)!r}." + ) + return expected or () + + +def validate_numeric(value: Any, *, argument: str, identifier: Any, condition: str) -> float: + if isinstance(value, bool) or not isinstance(value, Real): + raise TypeError( + f"{argument}[{identifier!r}] for condition {condition!r} must be a finite number, got {value!r}." + ) + number = float(value) + if not np.isfinite(number): + raise ValueError(f"{argument}[{identifier!r}] for condition {condition!r} must be finite, got {value!r}.") + return number + + +def validate_vertices( + graph: BaseGraph, + values: Mapping, + *, + argument: str, + condition: str, +) -> dict[Any, float]: + vertices = set(graph.V) + result = {} + for identifier, value in values.items(): + if identifier not in vertices: + raise ValueError(f"Unknown vertex {identifier!r} in {argument} for condition {condition!r}.") + result[identifier] = validate_numeric(value, argument=argument, identifier=identifier, condition=condition) + return result + + +def validate_vertex_collection( + graph: BaseGraph, + values: Collection, + *, + argument: str, + condition: str, + required: bool = False, +) -> list[Any]: + if isinstance(values, (str, bytes)) or not isinstance(values, Collection): + raise TypeError(f"{argument} for condition {condition!r} must be a collection of vertices.") + result = list(values) + if required and not result: + raise ValueError(f"{argument} for condition {condition!r} must not be empty.") + vertices = set(graph.V) + for identifier in result: + if identifier not in vertices: + raise ValueError(f"Unknown vertex {identifier!r} in {argument} for condition {condition!r}.") + return list(dict.fromkeys(result)) + + +def reaction_ids(model: BaseGraph) -> set[Any]: + return set(model.get_attr_from_edges("id")) + + +def validate_reaction_values( + model: BaseGraph, + values: Mapping, + *, + argument: str, + condition: str, +) -> dict[Any, float]: + identifiers = reaction_ids(model) + result = {} + for identifier, value in values.items(): + if identifier not in identifiers: + raise ValueError(f"Unknown reaction {identifier!r} in {argument} for condition {condition!r}.") + result[identifier] = validate_numeric(value, argument=argument, identifier=identifier, condition=condition) + return result + + +def validate_reaction_bounds( + model: BaseGraph, + values: Mapping, + *, + condition: str, +) -> dict[Any, tuple[float | None, float | None]]: + identifiers = reaction_ids(model) + result = {} + for identifier, bounds in values.items(): + if identifier not in identifiers: + raise ValueError(f"Unknown reaction {identifier!r} in reaction_bounds for condition {condition!r}.") + if isinstance(bounds, (str, bytes)) or not isinstance(bounds, Collection) or len(bounds) != 2: + raise ValueError( + f"reaction_bounds[{identifier!r}] for condition {condition!r} must be a (lower, upper) pair." + ) + lower, upper = tuple(bounds) + lower_value = ( + None + if lower is None + else validate_numeric( + lower, + argument="reaction_bounds lower bound", + identifier=identifier, + condition=condition, + ) + ) + upper_value = ( + None + if upper is None + else validate_numeric( + upper, + argument="reaction_bounds upper bound", + identifier=identifier, + condition=condition, + ) + ) + if lower_value is not None and upper_value is not None and lower_value > upper_value: + raise ValueError( + f"Lower bound {lower_value} exceeds upper bound {upper_value} " + f"for reaction {identifier!r} in condition {condition!r}." + ) + result[identifier] = (lower_value, upper_value) + return result + + +def validate_edge_costs( + graph: BaseGraph, + values: Mapping, + *, + condition: str, +) -> dict[int, float]: + result = {} + for identifier, value in values.items(): + if ( + isinstance(identifier, bool) + or not isinstance(identifier, Integral) + or not 0 <= identifier < graph.num_edges + ): + raise ValueError( + f"Invalid edge index {identifier!r} in edge_costs for condition {condition!r}; " + f"expected an integer in [0, {graph.num_edges - 1}]." + ) + result[int(identifier)] = validate_numeric( + value, argument="edge_costs", identifier=identifier, condition=condition + ) + return result + + +def data_from_features(features_by_condition: Mapping[str, list[dict[str, Any]]]) -> Data: + return Data.from_dict({condition: {"features": features} for condition, features in features_by_condition.items()}) diff --git a/corneto/methods/_network_utils.py b/corneto/methods/_network_utils.py new file mode 100644 index 000000000..b2799119a --- /dev/null +++ b/corneto/methods/_network_utils.py @@ -0,0 +1,206 @@ +"""Private graph-layout and incidence helpers shared by network methods.""" + +from __future__ import annotations + +from collections.abc import Mapping +from dataclasses import dataclass +from typing import Any, Iterable + +import numpy as np +from scipy.sparse import csr_matrix + +from corneto.graph import BaseGraph, EdgeType + + +@dataclass(frozen=True) +class BoundaryFlowLayout: + """An augmented graph and stable mappings for its boundary edges.""" + + graph: BaseGraph + original_num_edges: int + inflow_edges: dict[Any, int] + outflow_edges: dict[Any, int] + + @property + def biological_edge_indices(self) -> np.ndarray: + return np.arange(self.original_num_edges, dtype=int) + + @property + def boundary_edge_indices(self) -> np.ndarray: + return np.arange(self.original_num_edges, self.graph.num_edges, dtype=int) + + +@dataclass(frozen=True) +class DirectedIncidence: + """Sparse directed incidence matrices over a selected set of edges.""" + + outgoing: csr_matrix + incoming: csr_matrix + edge_indices: np.ndarray + source_indices: np.ndarray + target_indices: np.ndarray + + +@dataclass(frozen=True) +class PathPruning: + """A graph restricted to condition-specific source-to-target paths.""" + + graph: BaseGraph + original_vertex_indices: np.ndarray + original_edge_indices: np.ndarray + vertices_by_condition: dict[str, frozenset[Any]] + unreachable_sources: dict[str, frozenset[Any]] + unreachable_targets: dict[str, frozenset[Any]] + + +def prune_to_paths( + graph: BaseGraph, + *, + sources: Mapping[str, Iterable[Any]], + targets: Mapping[str, Iterable[Any]], +) -> PathPruning: + """Keep vertices and edges on a directed source-to-target path. + + Reachability is computed independently for every condition. The returned + graph is the union of those condition-specific path subgraphs, preserving + the input graph's vertex and edge order. + """ + if tuple(sources) != tuple(targets): + if set(sources) != set(targets): + raise ValueError("sources and targets must contain the same condition names.") + targets = {condition: targets[condition] for condition in sources} + + graph_vertices = set(graph.V) + vertices_by_condition: dict[str, frozenset[Any]] = {} + unreachable_sources: dict[str, frozenset[Any]] = {} + unreachable_targets: dict[str, frozenset[Any]] = {} + retained_vertices: set[Any] = set() + retained_edges: set[int] = set() + + for condition in sources: + condition_sources = set(sources[condition]) & graph_vertices + condition_targets = set(targets[condition]) & graph_vertices + forward = set(graph.bfs(condition_sources)) + backward = set(graph.bfs(condition_targets, reverse=True)) + condition_vertices = forward & backward & graph_vertices + vertices_by_condition[condition] = frozenset(condition_vertices) + unreachable_sources[condition] = frozenset(condition_sources - condition_vertices) + unreachable_targets[condition] = frozenset(condition_targets - condition_vertices) + retained_vertices.update(condition_vertices) + + for edge_index, (source, target) in enumerate(graph.E): + edge_vertices = set(source) | set(target) + if edge_vertices and edge_vertices <= condition_vertices: + retained_edges.add(edge_index) + + vertex_indices = np.asarray( + [index for index, vertex in enumerate(graph.V) if vertex in retained_vertices], + dtype=int, + ) + edge_indices = np.asarray( + [index for index in range(graph.num_edges) if index in retained_edges], + dtype=int, + ) + ordered_vertices = [graph.V[index] for index in vertex_indices] + ordered_edges = edge_indices.tolist() + + ordered_extract = getattr(graph, "_extract_subgraph_keep_order", None) + if callable(ordered_extract): + pruned_graph = ordered_extract(vertices=ordered_vertices, edges=ordered_edges) + else: + pruned_graph = graph.extract_subgraph(vertices=ordered_vertices, edges=ordered_edges) + + return PathPruning( + graph=pruned_graph, + original_vertex_indices=vertex_indices, + original_edge_indices=edge_indices, + vertices_by_condition=vertices_by_condition, + unreachable_sources=unreachable_sources, + unreachable_targets=unreachable_targets, + ) + + +def augment_with_boundaries( + graph: BaseGraph, + *, + inflow_vertices: Iterable[Any] = (), + outflow_vertices: Iterable[Any] = (), + inflow_type: EdgeType = EdgeType.DIRECTED, + outflow_type: EdgeType = EdgeType.DIRECTED, + boundary_order: tuple[str, str] = ("inflow", "outflow"), +) -> BoundaryFlowLayout: + """Copy a graph and add one boundary edge for each requested vertex.""" + augmented = graph.copy() + inflow_vertices = tuple(dict.fromkeys(inflow_vertices)) + outflow_vertices = tuple(dict.fromkeys(outflow_vertices)) + inflow_edges = {} + outflow_edges = {} + if set(boundary_order) != {"inflow", "outflow"}: + raise ValueError("boundary_order must contain 'inflow' and 'outflow' exactly once.") + for direction in boundary_order: + if direction == "inflow": + inflow_edges.update( + (vertex, augmented.add_edge((), vertex, type=inflow_type)) for vertex in inflow_vertices + ) + else: + outflow_edges.update( + (vertex, augmented.add_edge(vertex, (), type=outflow_type)) for vertex in outflow_vertices + ) + return BoundaryFlowLayout( + graph=augmented, + original_num_edges=graph.num_edges, + inflow_edges=inflow_edges, + outflow_edges=outflow_edges, + ) + + +def directed_incidence( + graph: BaseGraph, + edge_indices: Iterable[int] | None = None, +) -> DirectedIncidence: + """Return unambiguous sparse tail/head matrices for simple directed edges.""" + indexes = np.asarray( + list(range(graph.num_edges)) if edge_indices is None else list(edge_indices), + dtype=int, + ) + vertex_index = {vertex: index for index, vertex in enumerate(graph.V)} + source_indices = [] + target_indices = [] + outgoing_rows = [] + outgoing_columns = [] + incoming_rows = [] + incoming_columns = [] + for column, edge_index in enumerate(indexes): + source, target = graph.get_edge(int(edge_index)) + if len(source) > 1 or len(target) > 1 or (not source and not target): + raise ValueError( + "Directed incidence requires simple edges; " + f"edge {edge_index} has {len(source)} source and {len(target)} target vertices." + ) + source_index = vertex_index[next(iter(source))] if source else -1 + target_index = vertex_index[next(iter(target))] if target else -1 + if source: + outgoing_rows.append(source_index) + outgoing_columns.append(column) + if target: + incoming_rows.append(target_index) + incoming_columns.append(column) + source_indices.append(source_index) + target_indices.append(target_index) + + shape = (graph.num_vertices, len(indexes)) + outgoing = csr_matrix( + (np.ones(len(outgoing_rows)), (outgoing_rows, outgoing_columns)), + shape=shape, + ) + incoming = csr_matrix( + (np.ones(len(incoming_rows)), (incoming_rows, incoming_columns)), + shape=shape, + ) + return DirectedIncidence( + outgoing=outgoing, + incoming=incoming, + edge_indices=indexes, + source_indices=np.asarray(source_indices, dtype=int), + target_indices=np.asarray(target_indices, dtype=int), + ) diff --git a/corneto/methods/_optimization_utils.py b/corneto/methods/_optimization_utils.py new file mode 100644 index 000000000..90e31d140 --- /dev/null +++ b/corneto/methods/_optimization_utils.py @@ -0,0 +1,23 @@ +"""Private optimization-expression helpers shared by method families.""" + +from corneto.backend._base import Backend, ProblemDef + + +def add_condition_union( + backend: Backend, + problem: ProblemDef, + selected, + *, + name: str, +): + """Return the linear OR over conditions, avoiding variables for one column.""" + if len(selected.shape) == 1: + union = selected + elif selected.shape[1] == 1: + union = selected[:, 0] + else: + internal_name = f"_{name}" + problem += backend.linear_or(selected, axis=1, varname=internal_name, ignore_type=True) + union = problem.expr[internal_name] + problem.register(name, union) + return union diff --git a/corneto/methods/_phonemes_preprocessing.py b/corneto/methods/_phonemes_preprocessing.py new file mode 100644 index 000000000..a4cbb671c --- /dev/null +++ b/corneto/methods/_phonemes_preprocessing.py @@ -0,0 +1,264 @@ +"""Dependency-free preprocessing helpers for PHONEMeS.""" + +from __future__ import annotations + +from collections.abc import Mapping +from numbers import Real +from typing import Any + +import numpy as np + + +def _finite_threshold(value: Any, *, name: str, positive: bool = False) -> float: + if isinstance(value, bool) or not isinstance(value, Real): + raise TypeError(f"{name} must be a finite number, got {value!r}.") + result = float(value) + if not np.isfinite(result): + raise ValueError(f"{name} must be finite, got {value!r}.") + if positive and result <= 0: + raise ValueError(f"{name} must be greater than zero, got {value!r}.") + return result + + +def _scale_scores(scores: np.ndarray) -> np.ndarray: + values = scores[:, None] if scores.ndim == 1 else scores + negative_scale = np.max(np.where(values < 0, -values, 0), axis=0, keepdims=True) + positive_scale = np.max(np.where(values > 0, values, 0), axis=0, keepdims=True) + negative_scale = np.where(negative_scale > 0, negative_scale, 1) + positive_scale = np.where(positive_scale > 0, positive_scale, 1) + scaled = np.where(values < 0, values / negative_scale, values / positive_scale) + return scaled[:, 0] if scores.ndim == 1 else scaled + + +def _score_array( + pvalues: Any, + *, + fold_changes: Any, + pvalue_threshold: float, + fold_change_threshold: float | None, + direction: str, + scale: bool, +) -> np.ndarray: + pvalue_array = np.asarray(pvalues, dtype=float) + if pvalue_array.ndim not in {1, 2}: + raise ValueError("pvalues must be one-dimensional (sites) or two-dimensional (sites by conditions).") + if pvalue_array.size == 0: + raise ValueError("pvalues must not be empty.") + if not np.all(np.isfinite(pvalue_array)): + raise ValueError("pvalues must contain only finite values.") + if np.any((pvalue_array < 0) | (pvalue_array > 1)): + raise ValueError("pvalues must be between 0 and 1.") + + supported = pvalue_array < pvalue_threshold + if fold_change_threshold is not None: + if fold_changes is None: + raise ValueError("fold_changes is required when fold_change_threshold is provided.") + fold_change_array = np.asarray(fold_changes, dtype=float) + if fold_change_array.shape != pvalue_array.shape: + raise ValueError( + "fold_changes must have the same shape as pvalues: " + f"expected {pvalue_array.shape}, got {fold_change_array.shape}." + ) + if not np.all(np.isfinite(fold_change_array)): + raise ValueError("fold_changes must contain only finite values.") + if direction == "both": + supported &= np.abs(fold_change_array) >= fold_change_threshold + elif direction == "up": + supported &= fold_change_array >= fold_change_threshold + else: + supported &= fold_change_array <= -fold_change_threshold + + safe_pvalues = np.maximum(pvalue_array, np.finfo(float).tiny) + magnitude = np.abs(np.log2(safe_pvalues / pvalue_threshold)) + scores = np.where(supported, -magnitude, magnitude) + return _scale_scores(scores) if scale else scores + + +def _mapping_kind(values: Mapping, *, name: str) -> str: + if not values: + raise ValueError(f"{name} must not be empty.") + is_nested = [isinstance(value, Mapping) for value in values.values()] + if all(is_nested): + return "nested" + if any(is_nested): + raise TypeError(f"{name} must be either a flat site mapping or a uniformly nested condition-to-site mapping.") + return "flat" + + +def _matching_mapping(reference: Mapping, value: Any, *, name: str) -> Mapping | None: + if value is None: + return None + if not isinstance(value, Mapping): + raise TypeError(f"{name} must use the same mapping structure as pvalues.") + if tuple(value) != tuple(reference): + if set(value) != set(reference): + raise ValueError(f"{name} keys must match pvalues keys.") + return {key: value[key] for key in reference} + return value + + +def _score_mapping( + pvalues: Mapping, + *, + fold_changes: Any, + pvalue_threshold: float, + fold_change_threshold: float | None, + direction: str, + scale: bool, +) -> dict: + kind = _mapping_kind(pvalues, name="pvalues") + fold_mapping = _matching_mapping(pvalues, fold_changes, name="fold_changes") + if kind == "nested": + return { + condition: _score_mapping( + condition_pvalues, + fold_changes=None if fold_mapping is None else fold_mapping[condition], + pvalue_threshold=pvalue_threshold, + fold_change_threshold=fold_change_threshold, + direction=direction, + scale=scale, + ) + for condition, condition_pvalues in pvalues.items() + } + + identifiers = tuple(pvalues) + score_values = _score_array( + [pvalues[identifier] for identifier in identifiers], + fold_changes=(None if fold_mapping is None else [fold_mapping[identifier] for identifier in identifiers]), + pvalue_threshold=pvalue_threshold, + fold_change_threshold=fold_change_threshold, + direction=direction, + scale=scale, + ) + return dict(zip(identifiers, score_values.tolist())) + + +def _optional_pandas(): + try: + import pandas as pd + except ImportError: + return None + return pd + + +def normalize_phonemes_score_mapping(scores, *, many: bool): + """Return the mapping form accepted by PHONEMeS build methods.""" + if isinstance(scores, Mapping): + return scores + pd = _optional_pandas() + expected = "a condition-by-site mapping or pandas DataFrame" if many else "a site mapping or pandas Series" + if pd is None: + raise TypeError(f"phosphosite_scores must be {expected}.") + if many and isinstance(scores, pd.DataFrame): + if not scores.index.is_unique or not scores.columns.is_unique: + raise ValueError("phosphosite_scores DataFrame must have unique phosphosite and condition labels.") + return scores.to_dict() + if not many and isinstance(scores, pd.Series): + if not scores.index.is_unique: + raise ValueError("phosphosite_scores Series must have unique phosphosite labels.") + return scores.to_dict() + raise TypeError(f"phosphosite_scores must be {expected}.") + + +def compute_phonemes_scores( + pvalues, + *, + fold_changes=None, + pvalue_threshold: float = 0.05, + fold_change_threshold: float | None = None, + direction: str = "both", + scale: bool = True, +): + """Compute PHONEMeS node scores from p-values and fold changes. + + Flat mappings, pandas Series, and one-dimensional arrays represent one + condition. Nested mappings, pandas DataFrames, and two-dimensional arrays + represent sites by conditions. The returned object preserves the input + container type for NumPy and pandas inputs; mappings return dictionaries. + + Negative scores reward measurements satisfying the selected evidence + criteria, while positive scores penalize unsupported measurements. + + Args: + pvalues: P-values indexed or ordered by phosphosite. + fold_changes: Optional fold changes with the same structure and labels. + pvalue_threshold: Significance threshold in ``(0, 1]``. + fold_change_threshold: Optional nonnegative absolute fold-change threshold. + direction: Fold-change direction: ``"both"``, ``"up"``, or ``"down"``. + scale: Scale positive and negative scores separately per condition. + + Returns: + Scores with the same labels and container type as ``pvalues``. + """ + threshold = _finite_threshold( + pvalue_threshold, + name="pvalue_threshold", + positive=True, + ) + if threshold > 1: + raise ValueError("pvalue_threshold must be less than or equal to 1.") + if fold_change_threshold is not None: + fold_change_threshold = _finite_threshold( + fold_change_threshold, + name="fold_change_threshold", + ) + if fold_change_threshold < 0: + raise ValueError("fold_change_threshold must be nonnegative.") + if direction not in {"both", "up", "down"}: + raise ValueError("direction must be 'both', 'up', or 'down'.") + if not isinstance(scale, bool): + raise TypeError(f"scale must be a boolean, got {scale!r}.") + + if isinstance(pvalues, Mapping): + return _score_mapping( + pvalues, + fold_changes=fold_changes, + pvalue_threshold=threshold, + fold_change_threshold=fold_change_threshold, + direction=direction, + scale=scale, + ) + + pd = _optional_pandas() + if pd is not None and isinstance(pvalues, (pd.Series, pd.DataFrame)): + if not pvalues.index.is_unique: + raise ValueError("pvalues index must contain unique phosphosite identifiers.") + if isinstance(pvalues, pd.DataFrame) and not pvalues.columns.is_unique: + raise ValueError("pvalues columns must contain unique condition names.") + + aligned_fold_changes = None + if fold_changes is not None: + if type(fold_changes) is not type(pvalues): + raise TypeError("fold_changes must have the same pandas container type as pvalues.") + if isinstance(pvalues, pd.Series): + if set(fold_changes.index) != set(pvalues.index): + raise ValueError("fold_changes index must match pvalues index.") + aligned_fold_changes = fold_changes.reindex(pvalues.index).to_numpy() + else: + if set(fold_changes.index) != set(pvalues.index) or set(fold_changes.columns) != set(pvalues.columns): + raise ValueError("fold_changes index and columns must match pvalues.") + aligned_fold_changes = fold_changes.reindex( + index=pvalues.index, + columns=pvalues.columns, + ).to_numpy() + + scores = _score_array( + pvalues.to_numpy(), + fold_changes=aligned_fold_changes, + pvalue_threshold=threshold, + fold_change_threshold=fold_change_threshold, + direction=direction, + scale=scale, + ) + if isinstance(pvalues, pd.Series): + return pd.Series(scores, index=pvalues.index, name=pvalues.name) + return pd.DataFrame(scores, index=pvalues.index, columns=pvalues.columns) + + return _score_array( + pvalues, + fold_changes=fold_changes, + pvalue_threshold=threshold, + fold_change_threshold=fold_change_threshold, + direction=direction, + scale=scale, + ) diff --git a/corneto/methods/_signal_utils.py b/corneto/methods/_signal_utils.py new file mode 100644 index 000000000..c7695dfb4 --- /dev/null +++ b/corneto/methods/_signal_utils.py @@ -0,0 +1,47 @@ +"""Private vectorized building blocks shared by signaling formulations.""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import Any + +from corneto._constants import VarType +from corneto.backend._base import Backend, ProblemDef + + +@dataclass(frozen=True) +class SignedEdgeState: + """Positive, negative, signed, and selected edge-state expressions.""" + + positive: Any + negative: Any + value: Any + selected: Any + + +def add_signed_edge_state( + backend: Backend, + problem: ProblemDef, + shape: tuple[int, ...], + *, + positive_name: str, + negative_name: str, + value_alias: str | None = None, + selected_alias: str | None = None, +) -> SignedEdgeState: + """Create mutually exclusive positive and negative binary edge states.""" + positive = backend.Variable(positive_name, shape, vartype=VarType.BINARY) + negative = backend.Variable(negative_name, shape, vartype=VarType.BINARY) + problem += positive + negative <= 1 + value = positive - negative + selected = positive + negative + if value_alias is not None: + problem.register(value_alias, value) + if selected_alias is not None: + problem.register(selected_alias, selected) + return SignedEdgeState( + positive=positive, + negative=negative, + value=value, + selected=selected, + ) diff --git a/corneto/methods/bidirectional_phonemes.py b/corneto/methods/bidirectional_phonemes.py new file mode 100644 index 000000000..a45d1e924 --- /dev/null +++ b/corneto/methods/bidirectional_phonemes.py @@ -0,0 +1,599 @@ +"""Globally optimized upstream/downstream PHONEMeS formulation.""" + +from __future__ import annotations + +from typing import Any, Literal, Optional + +import numpy as np + +from corneto._constants import VarType +from corneto.backend._base import Backend +from corneto.data import Data +from corneto.graph import BaseGraph, EdgeType +from corneto.methods._flow_utils import add_vertex_selection +from corneto.methods._input_utils import ( + DEFAULT_CONDITION, + data_from_features, + validate_edge_costs, + validate_numeric, +) +from corneto.methods._network_utils import prune_to_paths +from corneto.methods._optimization_utils import add_condition_union +from corneto.methods._phonemes_preprocessing import ( + normalize_phonemes_score_mapping, +) +from corneto.methods.phonemes import PHONEMeS, _data_from_phonemes_inputs + +_ROLE_REGULATED_KINASE = "regulated_kinase" +_ROLE_PHOSPHOSITE = "phosphosite" +_ROLE_BOTH = "regulated_kinase_phosphosite" +_ANCHOR_POLICIES = {"either", "both", "downstream"} + + +def _pairwise_or(backend, problem, left, right, *, name: str): + union = backend.Variable(name, left.shape, vartype=VarType.BINARY) + problem += union >= left + problem += union >= right + problem += union <= left + right + return union + + +class BidirectionalPHONEMeS(PHONEMeS): + """Infer one globally optimized network around regulated kinase anchors. + + The method searches both upstream and downstream of each regulated kinase. + Phosphosite scores and interaction costs are applied to the combined + biological network rather than to two independently inferred networks. + + Args: + default_edge_cost: Cost assigned to unspecified PKN edges. + max_flow: Upper bound for every directional flow. + epsilon: Smallest positive flow associated with a selected edge. + anchor_policy: Whether every anchor must participate on either side, + both sides, or the downstream side. + backend: Optimization backend. + """ + + def __init__( + self, + default_edge_cost: float = 1e-5, + max_flow: Optional[float] = None, + epsilon: float = 1, + anchor_policy: Literal["either", "both", "downstream"] = "either", + backend: Optional[Backend] = None, + ): + super().__init__( + default_edge_cost=default_edge_cost, + max_flow=max_flow, + epsilon=epsilon, + backend=backend, + ) + if anchor_policy not in _ANCHOR_POLICIES: + allowed = ", ".join(repr(value) for value in sorted(_ANCHOR_POLICIES)) + raise ValueError(f"anchor_policy must be one of {allowed}, got {anchor_policy!r}.") + self.anchor_policy = anchor_policy + self._biological_graph: BaseGraph | None = None + self._reverse_edge_offset = 0 + self._anchor_mask = np.empty((0, 0), dtype=bool) + self._anchor_downstream_eligible = np.empty((0, 0), dtype=bool) + self._anchor_upstream_eligible = np.empty((0, 0), dtype=bool) + self._measured_downstream_mask = np.empty((0, 0), dtype=bool) + self._measured_upstream_mask = np.empty((0, 0), dtype=bool) + self._edge_downstream_mask = np.empty((0, 0), dtype=bool) + self._edge_upstream_mask = np.empty((0, 0), dtype=bool) + self._anchor_inflow_edges: dict[Any, int] = {} + self._measured_outflow_edges: dict[Any, int] = {} + + def build( + self, + pkn: BaseGraph, + *, + regulated_kinases, + phosphosite_scores, + edge_costs=None, + ): + """Build one bidirectional PHONEMeS condition.""" + phosphosite_scores = normalize_phonemes_score_mapping( + phosphosite_scores, + many=False, + ) + return self.build_many( + pkn, + regulated_kinases={DEFAULT_CONDITION: regulated_kinases}, + phosphosite_scores={DEFAULT_CONDITION: phosphosite_scores}, + edge_costs=edge_costs, + ) + + def build_many( + self, + pkn: BaseGraph, + *, + regulated_kinases, + phosphosite_scores, + edge_costs=None, + ): + """Build named bidirectional PHONEMeS conditions.""" + phosphosite_scores = normalize_phonemes_score_mapping( + phosphosite_scores, + many=True, + ) + data = _data_from_phonemes_inputs( + pkn, + primary_inputs=regulated_kinases, + phosphosite_scores=phosphosite_scores, + edge_costs=edge_costs, + primary_argument="regulated_kinases", + primary_role=_ROLE_REGULATED_KINASE, + overlap_role=_ROLE_BOTH, + ) + return self.build_from_data(pkn, data) + + def preprocess(self, graph: BaseGraph, data: Data): + """Validate, prune exact directional paths, and build the flow layout.""" + self._validate_pkn(graph) + if not data.samples: + raise ValueError("BidirectionalPHONEMeS requires at least one condition.") + + condition_names = tuple(data.samples) + if any(not isinstance(name, str) or not name for name in condition_names): + raise ValueError("BidirectionalPHONEMeS condition names must be non-empty strings.") + + graph_vertex_index = {vertex: index for index, vertex in enumerate(graph.V)} + anchors_by_condition: dict[str, set[Any]] = {} + measured_by_condition: dict[str, dict[Any, float]] = {} + condition_costs: list[dict[int, float]] = [] + + for condition, sample in data.samples.items(): + anchors: set[Any] = set() + measured: dict[Any, float] = {} + costs: dict[int, float] = {} + for feature in sample.features: + if feature.mapping == "vertex": + if feature.id not in graph_vertex_index: + raise ValueError( + f"Unknown vertex {feature.id!r} in bidirectional PHONEMeS data for condition {condition!r}." + ) + role = feature.data.get("role") + if role not in { + _ROLE_REGULATED_KINASE, + _ROLE_PHOSPHOSITE, + _ROLE_BOTH, + }: + raise ValueError( + f"Vertex feature {feature.id!r} for condition {condition!r} " + f"must have role {_ROLE_REGULATED_KINASE!r}, " + f"{_ROLE_PHOSPHOSITE!r}, or {_ROLE_BOTH!r}." + ) + if role in {_ROLE_REGULATED_KINASE, _ROLE_BOTH}: + anchors.add(feature.id) + if role in {_ROLE_PHOSPHOSITE, _ROLE_BOTH}: + measured[feature.id] = validate_numeric( + feature.value, + argument="phosphosite_scores", + identifier=feature.id, + condition=condition, + ) + elif feature.mapping == "edge": + costs.update( + validate_edge_costs( + graph, + {feature.id: feature.value}, + condition=condition, + ) + ) + else: + raise ValueError( + f"Unsupported feature mapping {feature.mapping!r} in " + f"bidirectional PHONEMeS data for condition {condition!r}." + ) + if not anchors: + raise ValueError(f"regulated_kinases for condition {condition!r} must not be empty.") + if not measured: + raise ValueError(f"phosphosite_scores for condition {condition!r} must not be empty.") + anchors_by_condition[condition] = anchors + measured_by_condition[condition] = measured + condition_costs.append(costs) + + first_costs = condition_costs[0] + for condition, costs in zip(condition_names[1:], condition_costs[1:]): + if costs != first_costs: + raise ValueError( + "BidirectionalPHONEMeS edge costs are global; edge features " + "must be identical in every condition " + f"(mismatch in condition {condition!r})." + ) + + downstream = prune_to_paths( + graph, + sources=anchors_by_condition, + targets={condition: measured.keys() for condition, measured in measured_by_condition.items()}, + ) + upstream = prune_to_paths( + graph, + sources={condition: measured.keys() for condition, measured in measured_by_condition.items()}, + targets=anchors_by_condition, + ) + + retained_edge_indices = np.asarray( + sorted(set(downstream.original_edge_indices.tolist()) | set(upstream.original_edge_indices.tolist())), + dtype=int, + ) + retained_vertices = set() + for condition in condition_names: + retained_vertices.update(downstream.vertices_by_condition[condition]) + retained_vertices.update(upstream.vertices_by_condition[condition]) + retained_vertex_indices = np.asarray( + [index for index, vertex in enumerate(graph.V) if vertex in retained_vertices], + dtype=int, + ) + if retained_edge_indices.size == 0: + raise ValueError("BidirectionalPHONEMeS connectivity pruning removed every PKN interaction.") + + ordered_vertices = [graph.V[index] for index in retained_vertex_indices] + ordered_edges = retained_edge_indices.tolist() + ordered_extract = getattr(graph, "_extract_subgraph_keep_order", None) + if callable(ordered_extract): + biological_graph = ordered_extract( + vertices=ordered_vertices, + edges=ordered_edges, + ) + else: + biological_graph = graph.extract_subgraph( + vertices=ordered_vertices, + edges=ordered_edges, + ) + + vertices = tuple(biological_graph.V) + vertex_index = {vertex: index for index, vertex in enumerate(vertices)} + num_vertices = len(vertices) + num_edges = biological_graph.num_edges + num_conditions = len(condition_names) + original_to_processed_edge = { + int(original): processed for processed, original in enumerate(retained_edge_indices) + } + + anchor_mask = np.zeros((num_vertices, num_conditions), dtype=bool) + measured_mask = np.zeros((num_vertices, num_conditions), dtype=bool) + measured_downstream = np.zeros_like(measured_mask) + measured_upstream = np.zeros_like(measured_mask) + node_scores = np.zeros((num_vertices, num_conditions), dtype=float) + edge_downstream = np.zeros((num_edges, num_conditions), dtype=bool) + edge_upstream = np.zeros((num_edges, num_conditions), dtype=bool) + + for condition_index, condition in enumerate(condition_names): + down_vertices = downstream.vertices_by_condition[condition] + up_vertices = upstream.vertices_by_condition[condition] + for anchor in anchors_by_condition[condition]: + if anchor in vertex_index: + anchor_mask[vertex_index[anchor], condition_index] = True + for vertex, score in measured_by_condition[condition].items(): + if vertex not in vertex_index: + continue + index = vertex_index[vertex] + measured_mask[index, condition_index] = True + measured_downstream[index, condition_index] = vertex in down_vertices + measured_upstream[index, condition_index] = vertex in up_vertices + node_scores[index, condition_index] = score + for processed, original in enumerate(retained_edge_indices): + source, target = graph.get_edge(int(original)) + source_vertex = next(iter(source)) + target_vertex = next(iter(target)) + edge_downstream[processed, condition_index] = ( + source_vertex in down_vertices and target_vertex in down_vertices + ) + edge_upstream[processed, condition_index] = ( + source_vertex in up_vertices and target_vertex in up_vertices + ) + + source_index = np.asarray( + [vertex_index[next(iter(source))] for source, _ in biological_graph.E], + dtype=int, + ) + target_index = np.asarray( + [vertex_index[next(iter(target))] for _, target in biological_graph.E], + dtype=int, + ) + anchor_downstream = np.zeros_like(anchor_mask) + anchor_upstream = np.zeros_like(anchor_mask) + for condition_index in range(num_conditions): + down_sources = np.zeros(num_vertices, dtype=bool) + down_targets = np.zeros(num_vertices, dtype=bool) + up_sources = np.zeros(num_vertices, dtype=bool) + up_targets = np.zeros(num_vertices, dtype=bool) + down_sources[source_index[edge_downstream[:, condition_index]]] = True + down_targets[target_index[edge_downstream[:, condition_index]]] = True + up_sources[source_index[edge_upstream[:, condition_index]]] = True + up_targets[target_index[edge_upstream[:, condition_index]]] = True + anchor_downstream[:, condition_index] = anchor_mask[:, condition_index] & down_sources + anchor_upstream[:, condition_index] = anchor_mask[:, condition_index] & up_targets + measured_downstream[:, condition_index] &= down_targets + measured_upstream[:, condition_index] &= up_sources + + for condition_index, condition in enumerate(condition_names): + for anchor in anchors_by_condition[condition]: + index = vertex_index.get(anchor) + has_downstream = index is not None and anchor_downstream[index, condition_index] + has_upstream = index is not None and anchor_upstream[index, condition_index] + if self.anchor_policy == "both" and not (has_downstream and has_upstream): + missing = [] + if not has_upstream: + missing.append("upstream") + if not has_downstream: + missing.append("downstream") + raise ValueError( + f"Regulated kinase {anchor!r} in condition {condition!r} " + f"has no {' or '.join(missing)} path to a measured phosphosite." + ) + if self.anchor_policy == "downstream" and not has_downstream: + raise ValueError( + f"Regulated kinase {anchor!r} in condition {condition!r} " + "cannot reach any measured phosphosite downstream." + ) + if self.anchor_policy == "either" and not (has_downstream or has_upstream): + raise ValueError( + f"Regulated kinase {anchor!r} in condition {condition!r} " + "has no upstream or downstream path to a measured phosphosite." + ) + + processed_costs = { + original_to_processed_edge[edge]: cost + for edge, cost in first_costs.items() + if edge in original_to_processed_edge + } + processed_features = {} + for condition_index, condition in enumerate(condition_names): + features = [] + anchors = anchors_by_condition[condition] + measured = measured_by_condition[condition] + for vertex in vertices: + is_anchor = vertex in anchors + is_measured = vertex in measured and measured_mask[vertex_index[vertex], condition_index] + if not is_anchor and not is_measured: + continue + role = ( + _ROLE_BOTH + if is_anchor and is_measured + else (_ROLE_REGULATED_KINASE if is_anchor else _ROLE_PHOSPHOSITE) + ) + features.append( + { + "id": vertex, + "mapping": "vertex", + "role": role, + "value": measured[vertex] if is_measured else None, + } + ) + features.extend({"id": edge, "mapping": "edge", "value": cost} for edge, cost in processed_costs.items()) + processed_features[condition] = features + processed_data = data_from_features(processed_features) + + edge_cost_array = np.full( + num_edges, + self.default_edge_cost, + dtype=float, + ) + for edge, cost in processed_costs.items(): + edge_cost_array[edge] = cost + + flow_graph = biological_graph.copy() + for source, target in biological_graph.E: + flow_graph.add_edge( + next(iter(target)), + next(iter(source)), + type=EdgeType.DIRECTED, + auxiliary_direction="upstream", + ) + anchor_union = anchor_mask.any(axis=1) + measured_union = (measured_downstream | measured_upstream).any(axis=1) + anchor_inflow_edges = {} + measured_outflow_edges = {} + for vertex, include in zip(vertices, anchor_union): + if include: + anchor_inflow_edges[vertex] = flow_graph.add_edge( + (), + vertex, + type=EdgeType.DIRECTED, + auxiliary_direction="anchor_inflow", + ) + for vertex, include in zip(vertices, measured_union): + if include: + measured_outflow_edges[vertex] = flow_graph.add_edge( + vertex, + (), + type=EdgeType.DIRECTED, + auxiliary_direction="measurement_outflow", + ) + + flow_max = self.epsilon * max(1, num_edges) if self.max_flow is None else self.max_flow + if flow_max < self.epsilon: + raise ValueError(f"max_flow ({flow_max:g}) must be greater than or equal to epsilon ({self.epsilon:g}).") + flow_lb = np.zeros((flow_graph.num_edges, 2 * num_conditions), dtype=float) + flow_ub = np.zeros_like(flow_lb) + flow_ub[:num_edges, :num_conditions] = edge_downstream.astype(float) * flow_max + flow_ub[ + num_edges : 2 * num_edges, + num_conditions:, + ] = edge_upstream.astype(float) * flow_max + for vertex, edge in anchor_inflow_edges.items(): + index = vertex_index[vertex] + flow_ub[edge, :num_conditions] = anchor_downstream[index].astype(float) * flow_max + flow_ub[edge, num_conditions:] = anchor_upstream[index].astype(float) * flow_max + for vertex, edge in measured_outflow_edges.items(): + index = vertex_index[vertex] + flow_ub[edge, :num_conditions] = measured_downstream[index].astype(float) * flow_max + flow_ub[edge, num_conditions:] = measured_upstream[index].astype(float) * flow_max + + self._condition_names = condition_names + self._biological_graph = biological_graph + self._biological_num_edges = num_edges + self._reverse_edge_offset = num_edges + self._anchor_mask = anchor_mask + self._anchor_downstream_eligible = anchor_downstream + self._anchor_upstream_eligible = anchor_upstream + self._measured_mask = measured_mask + self._measured_downstream_mask = measured_downstream + self._measured_upstream_mask = measured_upstream + self._node_scores = node_scores + self._edge_costs = edge_cost_array + self._edge_downstream_mask = edge_downstream + self._edge_upstream_mask = edge_upstream + self._flow_max = flow_max + self._flow_lb = flow_lb + self._flow_ub = flow_ub + self._anchor_inflow_edges = anchor_inflow_edges + self._measured_outflow_edges = measured_outflow_edges + return flow_graph, processed_data + + def get_flow_bounds(self, graph: BaseGraph, data: Data): + """Return bounds for downstream and upstream flow columns.""" + return { + "lb": self._flow_lb, + "ub": self._flow_ub, + "n_flows": 2 * len(self._condition_names), + "shared_bounds": False, + } + + def create_problem(self, graph: BaseGraph, data: Data): + """Create the global vectorized bidirectional problem.""" + num_conditions = len(self._condition_names) + num_edges = self._biological_num_edges + flow_problem = self.backend.Flow( + graph, + lb=self._flow_lb, + ub=self._flow_ub, + n_flows=2 * num_conditions, + shared_bounds=False, + force_matrix=True, + ) + flow = flow_problem.expr._flow + flow_problem += self.backend.NonZeroIndicator( + flow, + tolerance=self.epsilon, + ) + positive = flow_problem.expr._flow_ipos + + flow_downstream = flow[:num_edges, :num_conditions] + flow_upstream = flow[ + self._reverse_edge_offset : self._reverse_edge_offset + num_edges, + num_conditions:, + ] + edge_downstream = positive[:num_edges, :num_conditions] + edge_upstream = positive[ + self._reverse_edge_offset : self._reverse_edge_offset + num_edges, + num_conditions:, + ] + flow_problem.register("flow_downstream", flow_downstream) + flow_problem.register("flow_upstream", flow_upstream) + flow_problem.register("edge_selected_downstream", edge_downstream) + flow_problem.register("edge_selected_upstream", edge_upstream) + + num_vertices = graph.num_vertices + anchor_downstream = self.backend.Variable( + "anchor_active_downstream", + (num_vertices, num_conditions), + vartype=VarType.BINARY, + ) + anchor_upstream = self.backend.Variable( + "anchor_active_upstream", + (num_vertices, num_conditions), + vartype=VarType.BINARY, + ) + flow_problem.register("anchor_active_downstream", anchor_downstream) + flow_problem.register("anchor_active_upstream", anchor_upstream) + flow_problem += anchor_downstream <= self._anchor_downstream_eligible.astype(float) + flow_problem += anchor_upstream <= self._anchor_upstream_eligible.astype(float) + if self.anchor_policy == "both": + flow_problem += anchor_downstream >= self._anchor_mask.astype(float) + flow_problem += anchor_upstream >= self._anchor_mask.astype(float) + elif self.anchor_policy == "downstream": + flow_problem += anchor_downstream >= self._anchor_mask.astype(float) + else: + flow_problem += anchor_downstream + anchor_upstream >= self._anchor_mask.astype(float) + + vertices = tuple(graph.V) + vertex_index = {vertex: index for index, vertex in enumerate(vertices)} + anchor_vertices = tuple(self._anchor_inflow_edges) + anchor_rows = [self._anchor_inflow_edges[vertex] for vertex in anchor_vertices] + anchor_indexes = [vertex_index[vertex] for vertex in anchor_vertices] + downstream_inflow = flow[anchor_rows, :num_conditions] + upstream_inflow = flow[anchor_rows, num_conditions:] + downstream_active = anchor_downstream[anchor_indexes, :] + upstream_active = anchor_upstream[anchor_indexes, :] + flow_problem += downstream_inflow >= self.epsilon * downstream_active + flow_problem += downstream_inflow <= self._flow_max * downstream_active + flow_problem += upstream_inflow >= self.epsilon * upstream_active + flow_problem += upstream_inflow <= self._flow_max * upstream_active + + internal_downstream = ~(self._anchor_mask | self._measured_downstream_mask) + downstream_vertices = add_vertex_selection( + self.backend, + flow_problem, + graph, + edge_downstream, + edge_indices=range(num_edges), + force_selected=anchor_downstream, + require_outgoing=internal_downstream | self._anchor_mask, + require_incoming=internal_downstream | self._measured_downstream_mask, + name="vertex_selected_downstream", + ) + internal_upstream = ~(self._anchor_mask | self._measured_upstream_mask) + upstream_vertices = add_vertex_selection( + self.backend, + flow_problem, + graph, + edge_upstream, + edge_indices=range(num_edges), + force_selected=anchor_upstream, + require_outgoing=internal_upstream | self._anchor_mask, + require_incoming=internal_upstream | self._measured_upstream_mask, + name="vertex_selected_upstream", + reverse=True, + ) + edge_selected = _pairwise_or( + self.backend, + flow_problem, + edge_downstream, + edge_upstream, + name="edge_selected", + ) + vertex_selected = _pairwise_or( + self.backend, + flow_problem, + downstream_vertices.selected, + upstream_vertices.selected, + name="vertex_selected", + ) + edge_selected_any = add_condition_union( + self.backend, + flow_problem, + edge_selected, + name="edge_selected_any", + ) + + assert self._biological_graph is not None + self.backend.Acyclic( + self._biological_graph, + flow_problem, + indicator_positive_var_name="edge_selected", + acyclic_var_name="_dag_layer", + ) + flow_problem.register("dag_layer", flow_problem.expr._dag_layer) + flow_problem.add_objective( + vertex_selected.multiply(self._node_scores).sum(), + name="phosphosite_scores", + ) + flow_problem.add_objective( + self._edge_costs @ edge_selected_any, + name="edge_costs", + ) + return flow_problem + + @staticmethod + def name() -> str: + """Return the method name.""" + return "Bidirectional PHONEMeS" + + @staticmethod + def description() -> str: + """Return a short method description.""" + return "Global upstream/downstream signaling-network inference around regulated kinase anchors" diff --git a/corneto/methods/fba.py b/corneto/methods/fba.py index 8a4e1eb72..2377f02dd 100644 --- a/corneto/methods/fba.py +++ b/corneto/methods/fba.py @@ -10,6 +10,50 @@ # from corneto.methods import expand_graph_for_flows from corneto.methods._base import FlowMethod +from corneto.methods._input_utils import ( + DEFAULT_CONDITION, + data_from_features, + legacy_data, + require_mapping, + validate_condition_keys, + validate_reaction_bounds, + validate_reaction_values, +) + + +def _fba_data(model, conditions, objectives, reaction_bounds): + objectives = objectives or {condition: {} for condition in conditions} + reaction_bounds = reaction_bounds or {condition: {} for condition in conditions} + features_by_condition = {} + for condition in conditions: + objective_values = validate_reaction_values( + model, + require_mapping(objectives[condition], argument="objectives", condition=condition), + argument="objectives", + condition=condition, + ) + bounds = validate_reaction_bounds( + model, + require_mapping(reaction_bounds[condition], argument="reaction_bounds", condition=condition), + condition=condition, + ) + feature_data = {} + for identifier, value in objective_values.items(): + feature_data.setdefault(identifier, {}).update( + value=value, + mapping="edge", + role="objective", + ) + for identifier, (lower, upper) in bounds.items(): + feature = feature_data.setdefault(identifier, {"mapping": "edge"}) + if lower is not None: + feature["lower_bound"] = lower + if upper is not None: + feature["upper_bound"] = upper + features_by_condition[condition] = [ + {"id": identifier, **attributes} for identifier, attributes in feature_data.items() + ] + return data_from_features(features_by_condition) class MultiSampleFBA(FlowMethod): @@ -40,80 +84,30 @@ class MultiSampleFBA(FlowMethod): backend (Backend): The optimization backend to use. Examples: - Basic usage with a single sample: + Basic usage with a single condition: >>> from corneto.io import import_miom_model - >>> from corneto.data import Data >>> from corneto.methods.fba import MultiSampleFBA - >>> # Load a metabolic model >>> model = import_miom_model("path/to/metabolic_model.miom") - >>> # Create data with objective function (typically biomass) - >>> data = Data.from_dict({ - ... "sample1": { - ... "EX_biomass_e": { - ... "role": "objective", - ... }, - ... } - ... }) - >>> # Initialize FBA and solve - >>> fba = MultiSampleFBA() - >>> P = fba.build(model, data) + >>> P = MultiSampleFBA().build( + ... model, + ... objectives={"EX_biomass_e": -1}, + ... ) >>> P.solve() - >>> # Access the flux values - >>> biomass_rid = next(iter(model.get_edges_by_attr("id", "EX_biomass_e"))) - >>> biomass_flux = P.expr.flow[biomass_rid].value - >>> print(f"Biomass flux: {biomass_flux}") - - Multi-sample analysis with gene knockouts: - - >>> # Create data with two samples - control and knockout - >>> data = Data.from_cdict({ - ... "control": { - ... "EX_biomass_e": { - ... "role": "objective", - ... }, + + Multi-condition analysis with a reaction knockout: + + >>> P = MultiSampleFBA().build_many( + ... model, + ... objectives={ + ... "control": {"EX_biomass_e": -1}, + ... "knockout": {"EX_biomass_e": -1}, ... }, - ... "knockout": { - ... "EX_biomass_e": { - ... "role": "objective", - ... }, - ... "MDHm": { # Malate dehydrogenase knockout - ... "lower_bound": 0, - ... "upper_bound": 0, - ... }, - ... } - ... }) - >>> # Initialize FBA and solve - >>> fba = MultiSampleFBA() - >>> P = fba.build(model, data) - >>> P.solve() - >>> # Compare biomass production between conditions - >>> rid = next(iter(model.get_edges_by_attr("id", "EX_biomass_e"))) - >>> control_flux = P.expr.flow[rid, 0].value - >>> knockout_flux = P.expr.flow[rid, 1].value - >>> print(f"Control biomass: {control_flux}") - >>> print(f"Knockout biomass: {knockout_flux}") - >>> reduction = (control_flux - knockout_flux) / control_flux * 100 - >>> print(f"Growth reduction: {reduction:.2f}%") - - Sparse FBA to minimize the number of active reactions: - - >>> # Create data with biomass lower bound constraint - >>> data = Data.from_dict({ - ... "sample1": { - ... "EX_biomass_e": { - ... "type": "objective", - ... "lower_bound": 100.80, # Enforce minimum biomass production - ... }, - ... } - ... }) - >>> # Initialize FBA with regularization for sparsity - >>> fba = MultiSampleFBA(beta_reg=1) - >>> P = fba.build(model, data) - >>> P.solve() - >>> # Count number of active reactions - >>> n_active_reactions = np.sum(np.round(P.expr.edge_has_flux.value)) - >>> print(f"Number of active reactions: {n_active_reactions}") + ... reaction_bounds={ + ... "control": {}, + ... "knockout": {"MDHm": (0, 0)}, + ... }, + ... ) """ def __init__( @@ -157,6 +151,33 @@ def __init__( self.default_flow_upper_bound = default_flow_upper_bound self.default_flow_lower_bound = default_flow_lower_bound + def build( + self, + model: BaseGraph, + data: Optional[Data] = None, + *, + objectives=None, + reaction_bounds=None, + ): + """Build a single-condition FBA problem from explicit inputs.""" + old_data = legacy_data(data, method=self.__class__.__name__) + if old_data is not None: + if objectives is not None or reaction_bounds is not None: + raise TypeError("Do not combine a Data object with explicit scientific inputs.") + return self.build_from_data(model, old_data) + return self.build_many( + model, + objectives={DEFAULT_CONDITION: objectives or {}}, + reaction_bounds={DEFAULT_CONDITION: reaction_bounds or {}}, + ) + + def build_many(self, model: BaseGraph, *, objectives=None, reaction_bounds=None): + """Build a multi-condition FBA problem from named condition mappings.""" + conditions = validate_condition_keys(objectives=objectives, reaction_bounds=reaction_bounds) + if not conditions: + raise ValueError("build_many() requires objectives or reaction_bounds with named conditions.") + return self.build_from_data(model, _fba_data(model, conditions, objectives, reaction_bounds)) + def preprocess(self, graph: BaseGraph, data: Data) -> Tuple[BaseGraph, Data]: """Preprocess the graph and data before solving. diff --git a/corneto/methods/imat.py b/corneto/methods/imat.py index 9975b5e61..88595fecd 100644 --- a/corneto/methods/imat.py +++ b/corneto/methods/imat.py @@ -12,7 +12,15 @@ from corneto.backend._base import Backend from corneto.data import Data, Feature from corneto.graph import BaseGraph -from corneto.methods.fba import MultiSampleFBA +from corneto.methods._input_utils import ( + DEFAULT_CONDITION, + legacy_data, + require_mapping, + validate_condition_keys, + validate_numeric, + validate_reaction_values, +) +from corneto.methods.fba import MultiSampleFBA, _fba_data from corneto.methods.metabolism import evaluate_gpr_expression, get_genes_from_gpr @@ -79,6 +87,92 @@ def __init__( self.use_mean_for_missing_reactions = use_mean_for_missing_reactions self.use_bigm_constraints = use_bigm_constraints + def build( + self, + model: BaseGraph, + data: Optional[Data] = None, + *, + gene_expression=None, + reaction_scores=None, + objectives=None, + reaction_bounds=None, + ): + """Build a single-condition iMAT problem from explicit inputs.""" + old_data = legacy_data(data, method=self.__class__.__name__) + if old_data is not None: + if any(value is not None for value in (gene_expression, reaction_scores, objectives, reaction_bounds)): + raise TypeError("Do not combine a Data object with explicit scientific inputs.") + return self.build_from_data(model, old_data) + return self.build_many( + model, + gene_expression=None if gene_expression is None else {DEFAULT_CONDITION: gene_expression}, + reaction_scores=None if reaction_scores is None else {DEFAULT_CONDITION: reaction_scores}, + objectives={DEFAULT_CONDITION: objectives or {}}, + reaction_bounds={DEFAULT_CONDITION: reaction_bounds or {}}, + ) + + def build_many( + self, + model: BaseGraph, + *, + gene_expression=None, + reaction_scores=None, + objectives=None, + reaction_bounds=None, + ): + """Build a multi-condition iMAT problem from named condition mappings.""" + if (gene_expression is None) == (reaction_scores is None): + raise ValueError("Provide exactly one of gene_expression or reaction_scores.") + conditions = validate_condition_keys( + gene_expression=gene_expression, + reaction_scores=reaction_scores, + objectives=objectives, + reaction_bounds=reaction_bounds, + ) + data = _fba_data(model, conditions, objectives, reaction_bounds) + + if gene_expression is not None: + known_genes = set() + for attributes in model.get_attr_edges(): + rule = attributes.get(self.gpr_field, "") + if rule: + known_genes.update(get_genes_from_gpr(rule)) + for condition in conditions: + values = require_mapping(gene_expression[condition], argument="gene_expression", condition=condition) + for identifier, value in values.items(): + if identifier not in known_genes: + raise ValueError(f"Unknown gene {identifier!r} in gene_expression for condition {condition!r}.") + score = validate_numeric( + value, + argument="gene_expression", + identifier=identifier, + condition=condition, + ) + data.samples[condition].add(Feature(id=identifier, value=score, mapping="none", role="expression")) + else: + for condition in conditions: + values = require_mapping(reaction_scores[condition], argument="reaction_scores", condition=condition) + scores = validate_reaction_values( + model, + values, + argument="reaction_scores", + condition=condition, + ) + existing = {feature.id: feature for feature in data.samples[condition].features} + for identifier, score in scores.items(): + if identifier in existing: + feature = existing[identifier] + if feature.data.get("role") == "objective": + feature.data["imat_score"] = score + else: + feature.data["value"] = score + feature.data["role"] = "expression" + else: + data.samples[condition].add( + Feature(id=identifier, value=score, mapping="edge", role="expression") + ) + return self.build_from_data(model, data) + def preprocess(self, graph: BaseGraph, data: Data) -> Tuple[BaseGraph, Data]: """Preprocess the graph and data before solving. @@ -104,7 +198,9 @@ def preprocess(self, graph: BaseGraph, data: Data) -> Tuple[BaseGraph, Data]: # Count features with mapping="edge" for feature in sample.features: - if feature.mapping == "edge": + if feature.mapping == "edge" and ( + feature.data.get("role") != "objective" or "imat_score" in feature.data + ): edge_features_count += 1 # Check if we have a significant number of edge features @@ -139,7 +235,7 @@ def _apply_gpr_rules(self, graph: BaseGraph, data: Data) -> Data: gene_scores = {} for feature in sample.features: # Check if this is a gene feature (mapping="none") - if feature.mapping == "none": + if feature.mapping == "none" and feature.data.get("role") in {None, "expression"}: gene_scores[feature.id] = float(feature.value) if feature.value is not None else 0.0 if not gene_scores: @@ -198,17 +294,25 @@ def _apply_gpr_rules(self, graph: BaseGraph, data: Data) -> Data: # Add reaction features to the result data if rxn_scores: + existing = {feature.id: feature for feature in result_data.samples[sample_name].features} for rxn_id, score in rxn_scores.items(): - # TODO: Before adding, check if there is already - # a feature for that edge, if so, update the - # value and warn. - result_data.samples[sample_name].add( - Feature( - id=rxn_id, - value=score, - mapping="edge", + if rxn_id in existing: + feature = existing[rxn_id] + if feature.data.get("role") == "objective": + feature.data["imat_score"] = score + else: + feature.data["value"] = score + feature.data["mapping"] = "edge" + feature.data["role"] = "expression" + else: + result_data.samples[sample_name].add( + Feature( + id=rxn_id, + value=score, + mapping="edge", + role="expression", + ) ) - ) return result_data @@ -248,9 +352,13 @@ def create_flow_based_problem(self, flow_problem, graph: BaseGraph, data: Data): # Get reaction values from the data (features with mapping="edge") for feature in sample_data.features: - if feature.mapping == "edge" and feature.value is not None: + if ( + feature.mapping == "edge" + and (feature.value is not None or "imat_score" in feature.data) + and (feature.data.get("role") != "objective" or "imat_score" in feature.data) + ): rxn_ids.append(feature.id) - weights.append(float(feature.value)) + weights.append(float(feature.data.get("imat_score", feature.value))) if not rxn_ids: continue diff --git a/corneto/methods/pcst.py b/corneto/methods/pcst.py index 88e79d552..97c9abe27 100644 --- a/corneto/methods/pcst.py +++ b/corneto/methods/pcst.py @@ -9,6 +9,18 @@ from corneto.data import Data from corneto.graph import Attr, BaseGraph, EdgeType from corneto.methods._base import FlowMethod +from corneto.methods._flow_utils import add_selected_flow +from corneto.methods._input_utils import ( + DEFAULT_CONDITION, + data_from_features, + legacy_data, + require_mapping, + validate_condition_keys, + validate_edge_costs, + validate_vertex_collection, + validate_vertices, +) +from corneto.methods._network_utils import augment_with_boundaries class PrizeCollectingSteinerTree(FlowMethod): @@ -81,6 +93,73 @@ def __init__( self._selected_roots: List[Any] = [] + def build( + self, + graph: BaseGraph, + data: Optional[Data] = None, + *, + prizes=None, + terminals=None, + edge_costs=None, + ): + """Build a single-condition PCST problem from explicit inputs.""" + old_data = legacy_data(data, method=self.__class__.__name__) + if old_data is not None: + if any(value is not None for value in (prizes, terminals, edge_costs)): + raise TypeError("Do not combine a Data object with explicit scientific inputs.") + return self.build_from_data(graph, old_data) + if prizes is None: + raise TypeError("build() requires prizes=.") + return self.build_many( + graph, + prizes={DEFAULT_CONDITION: prizes}, + terminals=None if terminals is None else {DEFAULT_CONDITION: terminals}, + edge_costs=None if edge_costs is None else {DEFAULT_CONDITION: edge_costs}, + ) + + def build_many(self, graph: BaseGraph, *, prizes, terminals=None, edge_costs=None): + """Build a multi-condition PCST problem from named condition mappings.""" + conditions = validate_condition_keys(prizes=prizes, terminals=terminals, edge_costs=edge_costs) + features_by_condition = {} + for condition in conditions: + prize_values = validate_vertices( + graph, + require_mapping(prizes[condition], argument="prizes", condition=condition), + argument="prizes", + condition=condition, + ) + for identifier, value in prize_values.items(): + if value <= 0: + raise ValueError( + f"Prize for vertex {identifier!r} in condition {condition!r} " + f"must be greater than zero, got {value}." + ) + terminal_values = validate_vertex_collection( + graph, + [] if terminals is None else terminals[condition], + argument="terminals", + condition=condition, + ) + cost_values = validate_edge_costs( + graph, + {} + if edge_costs is None + else require_mapping(edge_costs[condition], argument="edge_costs", condition=condition), + condition=condition, + ) + feature_data = { + identifier: {"mapping": "vertex", "value": value, "role": "prize"} + for identifier, value in prize_values.items() + } + for identifier in terminal_values: + feature_data.setdefault(identifier, {"mapping": "vertex"})["role"] = "terminal" + features = [{"id": identifier, **attributes} for identifier, attributes in feature_data.items()] + features.extend( + {"id": identifier, "mapping": "edge", "value": value} for identifier, value in cost_values.items() + ) + features_by_condition[condition] = features + return self.build_from_data(graph, data_from_features(features_by_condition)) + def preprocess(self, graph: BaseGraph, data: Data) -> Tuple[BaseGraph, Data]: """Preprocess the graph and data.""" # Reset per-run attributes @@ -91,7 +170,6 @@ def preprocess(self, graph: BaseGraph, data: Data) -> Tuple[BaseGraph, Data]: self.prized_flow_edges = dict() self._candidate_vertices_per_sample = [] - flow_graph = graph.copy() graph_vertices = tuple(graph.V) all_vertices = tuple( data.query.filter_features( @@ -195,15 +273,16 @@ def _first_vertex_choice(): if any(r is None for r in selected_roots): out_type = EdgeType.UNDIRECTED - # Create only in-edges potentially needed by fixed-root samples. - for v in in_vertices: - idx_in = flow_graph.add_edge((), v, type=in_type) - self.flow_edges_in[v] = idx_in - - # Create only out-edges potentially needed by any sample. - for v in out_vertices: - idx_out = flow_graph.add_edge(v, (), type=out_type) - self.flow_edges_out[v] = idx_out + layout = augment_with_boundaries( + graph, + inflow_vertices=in_vertices, + outflow_vertices=out_vertices, + inflow_type=in_type, + outflow_type=out_type, + ) + flow_graph = layout.graph + self.flow_edges_in = layout.inflow_edges + self.flow_edges_out = layout.outflow_edges # Backward-compatible alias used by some callers; map to out-edges. self.flow_edges = self.flow_edges_out.copy() @@ -241,18 +320,15 @@ def create_flow_based_problem(self, flow_problem: ProblemDef, graph: BaseGraph, flow_edge_ids = list(set(self.flow_edges_in.values()) | set(self.flow_edges_out.values())) edge_ids = list(set(range(graph.num_edges)) - set(flow_edge_ids)) - if self.strict_acyclic: - flow_problem += self.backend.NonZeroIndicator(flow_problem.expr._flow, tolerance=self.epsilon) - flow_problem += self.backend.Acyclic( - graph, - flow_problem, - indicator_negative_var_name="_flow_ineg", - indicator_positive_var_name="_flow_ipos", - ) - with_flow = flow_problem.expr._flow_ipos + flow_problem.expr._flow_ineg - else: - flow_problem += self.backend.Indicator(flow_problem.expr._flow, indexes=edge_ids) - with_flow = flow_problem.expr._flow_i + selected_flow = add_selected_flow( + self.backend, + flow_problem, + graph, + biological_edge_indices=edge_ids, + epsilon=self.epsilon, + acyclic=self.strict_acyclic, + ) + with_flow = selected_flow.all_edges flow_problem.register("with_flow", with_flow) self._reg_varname = "with_flow" @@ -361,38 +437,23 @@ def create_flow_based_problem(self, flow_problem: ProblemDef, graph: BaseGraph, prized_vertices.append(prized) if prized_idx: prizes = np.array([prized_terminals[prized] for prized in prized_vertices]) - if self.strict_acyclic: - selected_for_prizes = flow_problem.expr._flow_ipos + flow_problem.expr._flow_ineg - selected_for_prizes = ( - selected_for_prizes if len(selected_for_prizes.shape) == 1 else selected_for_prizes[:, i] - ) + selected_for_prizes = with_flow if len(with_flow.shape) == 1 else with_flow[:, i] selected_prized_flow_edges = selected_for_prizes[prized_idx] else: - indicator_terminal_pos = self.flow_name + f"_terminal_pos_{i}" - indicator_terminal_neg = self.flow_name + f"_terminal_neg_{i}" - - if sample_selected_root is None: - flow_edges_idxs = vertices_edgeflow_idx - indices_in_indicator = [flow_edges_idxs.index(idx) for idx in prized_idx] - selected_vec = ( - flow_problem.expr[indicator_terminal_pos] + flow_problem.expr[indicator_terminal_neg] - ) - selected_vec = selected_vec if len(selected_vec.shape) == 1 else selected_vec[:, i] - selected_prized_flow_edges = selected_vec[indices_in_indicator] - else: - flow_problem += self.backend.NonZeroIndicator( - F, - prized_idx, - i, - tolerance=self.epsilon, - suffix_pos=f"_prize_pos_{i}", - suffix_neg=f"_prize_neg_{i}", - ) - selected_prized_flow_edges = ( - flow_problem.expr[f"{self.flow_name}_prize_pos_{i}"] - + flow_problem.expr[f"{self.flow_name}_prize_neg_{i}"] - ) + flow_variable = flow_problem.expr._flow + indicator_args = (prized_idx,) if len(flow_variable.shape) == 1 else (prized_idx, i) + flow_problem += self.backend.NonZeroIndicator( + flow_variable, + *indicator_args, + tolerance=self.epsilon, + suffix_pos=f"_prize_pos_{i}", + suffix_neg=f"_prize_neg_{i}", + ) + selected_prized_flow_edges = ( + flow_problem.expr[f"{self.flow_name}_prize_pos_{i}"] + + flow_problem.expr[f"{self.flow_name}_prize_neg_{i}"] + ) flow_problem.register(f"selected_prized_flow_edges_{i}", selected_prized_flow_edges) flow_problem.add_objective(prizes @ selected_prized_flow_edges, weight=-1, name="prizes") diff --git a/corneto/methods/phonemes.py b/corneto/methods/phonemes.py new file mode 100644 index 000000000..14950551b --- /dev/null +++ b/corneto/methods/phonemes.py @@ -0,0 +1,504 @@ +"""Vectorized PHONEMeS network-inference method.""" + +from __future__ import annotations + +from numbers import Real +from typing import Any, Optional + +import numpy as np + +from corneto.backend._base import Backend, ProblemDef +from corneto.data import Data +from corneto.graph import Attr, BaseGraph, EdgeType +from corneto.methods._base import FlowMethod +from corneto.methods._flow_utils import ( + add_selected_flow, + add_vertex_selection, +) +from corneto.methods._input_utils import ( + DEFAULT_CONDITION, + data_from_features, + require_mapping, + validate_condition_keys, + validate_edge_costs, + validate_numeric, + validate_vertex_collection, + validate_vertices, +) +from corneto.methods._network_utils import augment_with_boundaries, prune_to_paths +from corneto.methods._optimization_utils import add_condition_union +from corneto.methods._phonemes_preprocessing import ( + compute_phonemes_scores, + normalize_phonemes_score_mapping, +) + +__all__ = ["PHONEMeS", "compute_phonemes_scores"] + +_ROLE_PERTURBATION = "perturbation" +_ROLE_PHOSPHOSITE = "phosphosite" +_ROLE_BOTH = "perturbation_phosphosite" + + +def _data_from_phonemes_inputs( + pkn: BaseGraph, + *, + primary_inputs, + phosphosite_scores, + edge_costs, + primary_argument: str, + primary_role: str, + overlap_role: str, +): + """Validate explicit PHONEMeS-family inputs and construct shared Data.""" + conditions = validate_condition_keys( + **{ + primary_argument: primary_inputs, + "phosphosite_scores": phosphosite_scores, + } + ) + cost_values = validate_edge_costs( + pkn, + {} if edge_costs is None else require_mapping(edge_costs, argument="edge_costs"), + condition="all conditions", + ) + features_by_condition = {} + for condition in conditions: + primary_vertices = validate_vertex_collection( + pkn, + primary_inputs[condition], + argument=primary_argument, + condition=condition, + required=True, + ) + scores = validate_vertices( + pkn, + require_mapping( + phosphosite_scores[condition], + argument="phosphosite_scores", + condition=condition, + ), + argument="phosphosite_scores", + condition=condition, + ) + if not scores: + raise ValueError(f"phosphosite_scores for condition {condition!r} must not be empty.") + + primary_set = set(primary_vertices) + measured_set = set(scores) + features = [] + for vertex in dict.fromkeys([*primary_vertices, *scores]): + is_primary = vertex in primary_set + is_measured = vertex in measured_set + role = overlap_role if is_primary and is_measured else (primary_role if is_primary else _ROLE_PHOSPHOSITE) + features.append( + { + "id": vertex, + "mapping": "vertex", + "role": role, + "value": scores[vertex] if is_measured else None, + } + ) + features.extend({"id": edge, "mapping": "edge", "value": cost} for edge, cost in cost_values.items()) + features_by_condition[condition] = features + return data_from_features(features_by_condition) + + +class PHONEMeS(FlowMethod): + """Infer acyclic signaling networks from phosphoproteomic scores. + + PHONEMeS uses one directed flow per condition. Perturbations inject flow, + measured phosphosites can extract it, and explicit binary vertex variables + attach signed phosphosite scores to every selected biological node. + + Args: + default_edge_cost: Cost assigned to unspecified PKN edges. + max_flow: Upper bound for every flow. Defaults to the number of PKN edges. + epsilon: Smallest positive flow associated with a selected edge. + backend: Optimization backend. + """ + + def __init__( + self, + default_edge_cost: float = 1e-5, + max_flow: Optional[float] = None, + epsilon: float = 1, + backend: Optional[Backend] = None, + ): + super().__init__(disable_structured_sparsity=True, backend=backend) + self.default_edge_cost = self._finite_number(default_edge_cost, argument="default_edge_cost") + self.max_flow = None if max_flow is None else self._positive_number(max_flow, argument="max_flow") + self.epsilon = self._positive_number(epsilon, argument="epsilon") + if self.max_flow is not None and self.max_flow < self.epsilon: + raise ValueError("max_flow must be greater than or equal to epsilon.") + + self._condition_names: tuple[str, ...] = () + self._biological_num_edges = 0 + self._flow_max = 0.0 + self._target_inflow_edges: dict[Any, int] = {} + self._phosphosite_outflow_edges: dict[Any, int] = {} + self._target_mask = np.empty((0, 0), dtype=bool) + self._measured_mask = np.empty((0, 0), dtype=bool) + self._node_scores = np.empty((0, 0), dtype=float) + self._edge_costs = np.empty((0,), dtype=float) + self._flow_lb = np.empty((0, 0), dtype=float) + self._flow_ub = np.empty((0, 0), dtype=float) + + @staticmethod + def _finite_number(value: Any, *, argument: str) -> float: + if isinstance(value, bool) or not isinstance(value, Real): + raise TypeError(f"{argument} must be a finite number, got {value!r}.") + number = float(value) + if not np.isfinite(number): + raise ValueError(f"{argument} must be finite, got {value!r}.") + return number + + @classmethod + def _positive_number(cls, value: Any, *, argument: str) -> float: + number = cls._finite_number(value, argument=argument) + if number <= 0: + raise ValueError(f"{argument} must be greater than zero, got {value!r}.") + return number + + def build( + self, + pkn: BaseGraph, + *, + perturbations, + phosphosite_scores, + edge_costs=None, + ): + """Build a single-condition PHONEMeS problem. + + ``phosphosite_scores`` accepts a site mapping or a pandas Series when + pandas is available. + """ + phosphosite_scores = normalize_phonemes_score_mapping( + phosphosite_scores, + many=False, + ) + return self.build_many( + pkn, + perturbations={DEFAULT_CONDITION: perturbations}, + phosphosite_scores={DEFAULT_CONDITION: phosphosite_scores}, + edge_costs=edge_costs, + ) + + def build_many( + self, + pkn: BaseGraph, + *, + perturbations, + phosphosite_scores, + edge_costs=None, + ): + """Build a PHONEMeS problem for multiple named conditions. + + ``phosphosite_scores`` accepts a named condition mapping or a pandas + DataFrame with phosphosites as rows and conditions as columns. + """ + phosphosite_scores = normalize_phonemes_score_mapping( + phosphosite_scores, + many=True, + ) + data = _data_from_phonemes_inputs( + pkn, + primary_inputs=perturbations, + phosphosite_scores=phosphosite_scores, + edge_costs=edge_costs, + primary_argument="perturbations", + primary_role=_ROLE_PERTURBATION, + overlap_role=_ROLE_BOTH, + ) + return self.build_from_data(pkn, data) + + def preprocess(self, graph: BaseGraph, data: Data): + """Validate inputs, prune unreachable PKN regions, and add boundaries.""" + self._validate_pkn(graph) + if not data.samples: + raise ValueError("PHONEMeS requires at least one condition.") + + condition_names = tuple(data.samples) + if any(not isinstance(name, str) or not name for name in condition_names): + raise ValueError("PHONEMeS condition names must be non-empty strings.") + + input_vertex_index = {vertex: index for index, vertex in enumerate(graph.V)} + targets_by_condition: dict[str, set[Any]] = {} + measured_by_condition: dict[str, dict[Any, float]] = {} + condition_costs = [] + + for condition, sample in data.samples.items(): + targets = set() + measured = {} + costs = {} + for feature in sample.features: + if feature.mapping == "vertex": + if feature.id not in input_vertex_index: + raise ValueError(f"Unknown vertex {feature.id!r} in PHONEMeS data for condition {condition!r}.") + role = feature.data.get("role") + if role not in {_ROLE_PERTURBATION, _ROLE_PHOSPHOSITE, _ROLE_BOTH}: + raise ValueError( + f"Vertex feature {feature.id!r} for condition {condition!r} must have role " + f"{_ROLE_PERTURBATION!r}, {_ROLE_PHOSPHOSITE!r}, or {_ROLE_BOTH!r}." + ) + if role in {_ROLE_PERTURBATION, _ROLE_BOTH}: + targets.add(feature.id) + if role in {_ROLE_PHOSPHOSITE, _ROLE_BOTH}: + measured[feature.id] = validate_numeric( + feature.value, + argument="phosphosite_scores", + identifier=feature.id, + condition=condition, + ) + elif feature.mapping == "edge": + costs.update(validate_edge_costs(graph, {feature.id: feature.value}, condition=condition)) + else: + raise ValueError( + f"Unsupported feature mapping {feature.mapping!r} in PHONEMeS data for condition {condition!r}." + ) + + if not targets: + raise ValueError(f"PHONEMeS perturbations for condition {condition!r} must not be empty.") + if not measured: + raise ValueError(f"PHONEMeS phosphosite_scores for condition {condition!r} must not be empty.") + self._validate_target_outgoing_edges(graph, targets, condition=condition) + targets_by_condition[condition] = targets + measured_by_condition[condition] = measured + condition_costs.append(costs) + + first_costs = condition_costs[0] + for condition, costs in zip(condition_names[1:], condition_costs[1:]): + if costs != first_costs: + raise ValueError( + "PHONEMeS edge costs are global; edge features must be identical in every condition " + f"(mismatch in condition {condition!r})." + ) + + pruning = prune_to_paths( + graph, + sources=targets_by_condition, + targets={condition: measured.keys() for condition, measured in measured_by_condition.items()}, + ) + for condition in condition_names: + unreachable_sources = pruning.unreachable_sources[condition] + if unreachable_sources: + target = next(vertex for vertex in graph.V if vertex in unreachable_sources) + raise ValueError( + f"Perturbation target {target!r} in condition {condition!r} cannot reach any measured phosphosite." + ) + + pruned_graph = pruning.graph + if pruned_graph.num_edges == 0: + raise ValueError("PHONEMeS connectivity pruning removed every PKN interaction.") + + original_to_processed_edge = { + int(original): processed for processed, original in enumerate(pruning.original_edge_indices) + } + processed_costs = { + original_to_processed_edge[edge]: cost + for edge, cost in first_costs.items() + if edge in original_to_processed_edge + } + processed_features = {} + for condition in condition_names: + condition_vertices = pruning.vertices_by_condition[condition] + targets = targets_by_condition[condition] + measured = { + vertex: score + for vertex, score in measured_by_condition[condition].items() + if vertex in condition_vertices + } + vertex_order = [vertex for vertex in graph.V if vertex in targets or vertex in measured] + features = [] + for vertex in vertex_order: + is_target = vertex in targets + is_measured = vertex in measured + role = ( + _ROLE_BOTH + if is_target and is_measured + else (_ROLE_PERTURBATION if is_target else _ROLE_PHOSPHOSITE) + ) + features.append( + { + "id": vertex, + "mapping": "vertex", + "role": role, + "value": measured[vertex] if is_measured else None, + } + ) + features.extend( + { + "id": edge, + "mapping": "edge", + "value": cost, + } + for edge, cost in processed_costs.items() + ) + processed_features[condition] = features + processed_data = data_from_features(processed_features) + + vertices = tuple(pruned_graph.V) + vertex_index = {vertex: index for index, vertex in enumerate(vertices)} + num_vertices = len(vertices) + num_conditions = len(condition_names) + target_mask = np.zeros((num_vertices, num_conditions), dtype=bool) + measured_mask = np.zeros((num_vertices, num_conditions), dtype=bool) + node_scores = np.zeros((num_vertices, num_conditions), dtype=float) + for condition_index, condition in enumerate(condition_names): + targets = targets_by_condition[condition] + measured = { + vertex: score + for vertex, score in measured_by_condition[condition].items() + if vertex in pruning.vertices_by_condition[condition] + } + target_indexes = [vertex_index[vertex] for vertex in targets] + measured_indexes = [vertex_index[vertex] for vertex in measured] + target_mask[target_indexes, condition_index] = True + measured_mask[measured_indexes, condition_index] = True + node_scores[measured_indexes, condition_index] = [measured[vertices[index]] for index in measured_indexes] + + self._condition_names = condition_names + self._biological_num_edges = pruned_graph.num_edges + self._target_mask = target_mask + self._measured_mask = measured_mask + self._node_scores = node_scores + self._edge_costs = np.full( + pruned_graph.num_edges, + self.default_edge_cost, + dtype=float, + ) + for edge, cost in processed_costs.items(): + self._edge_costs[edge] = cost + + default_max_flow = float(pruned_graph.num_edges) + self._flow_max = default_max_flow if self.max_flow is None else self.max_flow + if self._flow_max < self.epsilon: + raise ValueError( + f"max_flow ({self._flow_max:g}) must be greater than or equal to epsilon ({self.epsilon:g})." + ) + + target_union = target_mask.any(axis=1) + measured_union = measured_mask.any(axis=1) + layout = augment_with_boundaries( + pruned_graph, + inflow_vertices=(vertex for vertex, include in zip(vertices, target_union) if include), + outflow_vertices=(vertex for vertex, include in zip(vertices, measured_union) if include), + ) + flow_graph = layout.graph + self._target_inflow_edges = layout.inflow_edges + self._phosphosite_outflow_edges = layout.outflow_edges + + flow_lb = np.zeros((flow_graph.num_edges, num_conditions), dtype=float) + flow_ub = np.full((flow_graph.num_edges, num_conditions), self._flow_max, dtype=float) + auxiliary_edges = [*self._target_inflow_edges.values(), *self._phosphosite_outflow_edges.values()] + flow_ub[auxiliary_edges, :] = 0 + for vertex, edge in self._target_inflow_edges.items(): + active = target_mask[vertex_index[vertex], :] + flow_lb[edge, active] = self.epsilon + flow_ub[edge, active] = self._flow_max + for vertex, edge in self._phosphosite_outflow_edges.items(): + active = measured_mask[vertex_index[vertex], :] + flow_ub[edge, active] = self._flow_max + self._flow_lb = flow_lb + self._flow_ub = flow_ub + return flow_graph, processed_data + + @staticmethod + def _validate_pkn(graph: BaseGraph) -> None: + if graph.num_vertices == 0 or graph.num_edges == 0: + raise ValueError("PHONEMeS requires a non-empty directed PKN.") + for edge_index, ((source, target), attributes) in enumerate(zip(graph.E, graph.get_attr_edges())): + if len(source) != 1 or len(target) != 1: + raise ValueError(f"PHONEMeS does not support boundary edges or hyperedges; invalid edge {edge_index}.") + if not attributes.has_attr(Attr.EDGE_TYPE, EdgeType.DIRECTED): + raise ValueError(f"PHONEMeS requires directed edges; edge {edge_index} is not directed.") + + @staticmethod + def _validate_target_outgoing_edges(graph: BaseGraph, targets: set[Any], *, condition: str) -> None: + sources_with_outgoing = {next(iter(source)) for source, target in graph.E if source and target} + missing = [target for target in targets if target not in sources_with_outgoing] + if missing: + raise ValueError( + f"Perturbation target {missing[0]!r} in condition {condition!r} has no outgoing PKN interaction." + ) + + def get_flow_bounds(self, graph: BaseGraph, data: Data): + """Return condition-specific bounds for internal and boundary flows.""" + return { + "lb": self._flow_lb, + "ub": self._flow_ub, + "n_flows": len(self._condition_names), + "shared_bounds": False, + } + + def create_problem(self, graph: BaseGraph, data: Data): + """Create a consistently two-dimensional flow problem.""" + flow_params = self.get_flow_bounds(graph, data) + flow_problem = self.backend.Flow( + graph, + lb=flow_params["lb"], + ub=flow_params["ub"], + n_flows=flow_params["n_flows"], + shared_bounds=False, + force_matrix=True, + ) + return self.create_flow_based_problem(flow_problem, graph, data) + + def create_flow_based_problem(self, flow_problem: ProblemDef, graph: BaseGraph, data: Data): + """Add vectorized PHONEMeS selection, role, and objective terms.""" + selected_flow = add_selected_flow( + self.backend, + flow_problem, + graph, + biological_edge_indices=range(self._biological_num_edges), + epsilon=self.epsilon, + acyclic=True, + ) + edge_selected = selected_flow.biological_edges + flow_problem.register("edge_selected", edge_selected) + flow_problem.register("dag_layer", selected_flow.dag_layer) + + internal_mask = ~(self._target_mask | self._measured_mask) + require_outgoing = (internal_mask | self._target_mask).astype(float) + require_incoming = (internal_mask | self._measured_mask).astype(float) + vertex_selection = add_vertex_selection( + self.backend, + flow_problem, + graph, + edge_selected, + edge_indices=range(self._biological_num_edges), + force_selected=self._target_mask, + require_outgoing=require_outgoing, + require_incoming=require_incoming, + ) + vertex_selected = vertex_selection.selected + edge_selected_any = add_condition_union( + self.backend, + flow_problem, + edge_selected, + name="edge_selected_any", + ) + + flow_problem.add_objective( + vertex_selected.multiply(self._node_scores).sum(), + name="phosphosite_scores", + ) + flow_problem.add_objective( + self._edge_costs @ edge_selected_any, + name="edge_costs", + ) + return flow_problem + + @staticmethod + def name() -> str: + """Return the method name.""" + return "PHONEMeS" + + @staticmethod + def description() -> str: + """Return a short method description.""" + return "Acyclic signaling-network inference from phosphoproteomic scores" + + @staticmethod + def references(): + """Return PHONEMeS publication citation keys.""" + return ["terfve2015large", "gjerga2021phonemes"] diff --git a/corneto/methods/steiner.py b/corneto/methods/steiner.py index 6bfa8fc31..02a96d550 100644 --- a/corneto/methods/steiner.py +++ b/corneto/methods/steiner.py @@ -5,6 +5,15 @@ from corneto._constants import VAR_FLOW from corneto.backend._base import Backend from corneto.graph import EdgeType +from corneto.methods._input_utils import ( + DEFAULT_CONDITION, + data_from_features, + legacy_data, + require_mapping, + validate_condition_keys, + validate_edge_costs, + validate_vertex_collection, +) from corneto.methods.pcst import PrizeCollectingSteinerTree @@ -49,3 +58,49 @@ def __init__( force_flow_through_root=force_flow_through_root, backend=backend, ) + + def build( + self, + graph, + data=None, + *, + terminals=None, + edge_costs=None, + ): + """Build a single-condition Steiner tree from explicit inputs.""" + old_data = legacy_data(data, method=self.__class__.__name__) + if old_data is not None: + if terminals is not None or edge_costs is not None: + raise TypeError("Do not combine a Data object with explicit scientific inputs.") + return self.build_from_data(graph, old_data) + if terminals is None: + raise TypeError("build() requires terminals=.") + return self.build_many( + graph, + terminals={DEFAULT_CONDITION: terminals}, + edge_costs=None if edge_costs is None else {DEFAULT_CONDITION: edge_costs}, + ) + + def build_many(self, graph, *, terminals, edge_costs=None): + """Build multiple named Steiner tree conditions.""" + conditions = validate_condition_keys(terminals=terminals, edge_costs=edge_costs) + features_by_condition = {} + for condition in conditions: + terminal_values = validate_vertex_collection( + graph, + terminals[condition], + argument="terminals", + condition=condition, + required=True, + ) + cost_values = validate_edge_costs( + graph, + {} + if edge_costs is None + else require_mapping(edge_costs[condition], argument="edge_costs", condition=condition), + condition=condition, + ) + features_by_condition[condition] = [ + {"id": identifier, "mapping": "vertex", "role": "terminal"} for identifier in terminal_values + ] + [{"id": identifier, "mapping": "edge", "value": value} for identifier, value in cost_values.items()] + return self.build_from_data(graph, data_from_features(features_by_condition)) diff --git a/docs/api/corneto.methods.rst b/docs/api/corneto.methods.rst index 4f8f339a6..fad151b0d 100644 --- a/docs/api/corneto.methods.rst +++ b/docs/api/corneto.methods.rst @@ -10,9 +10,10 @@ Signaling Network methods to infer signaling networks from omics data. -``milp_carnival`` is the simple single-condition formulation. -``CarnivalILP`` is the general formulation for one or more conditions, while -``CarnivalFlow`` provides the flow-based multi-condition alternative. +``CarnivalILP.build`` and ``CarnivalFlow.build`` accept explicit perturbation +and transcription-factor mappings for one condition. Their ``build_many`` +methods accept named conditions. ``milp_carnival`` remains as a compatibility +formulation. .. autosummary:: :toctree: generated/ @@ -20,6 +21,9 @@ Network methods to infer signaling networks from omics data. CarnivalFlow CarnivalILP + BidirectionalPHONEMeS + PHONEMeS + compute_phonemes_scores milp_carnival signaling.cellnopt_ilp.cellnoptILP @@ -27,6 +31,8 @@ Metabolism ---------- Network methods for flux balance analysis in metabolic networks. +Use ``build`` with explicit objectives, bounds, or expression values; +``build_from_data`` provides the advanced generic-data interface. .. autosummary:: :toctree: generated/ diff --git a/docs/guide/index.md b/docs/guide/index.md index 141ed38f7..53197bb1c 100644 --- a/docs/guide/index.md +++ b/docs/guide/index.md @@ -15,6 +15,7 @@ The library is designed with minimal dependencies and is easily extendable, maki ```{toctree} :maxdepth: 3 +method-inputs intro/index networks/index metabolism/index diff --git a/docs/guide/method-inputs.md b/docs/guide/method-inputs.md new file mode 100644 index 000000000..77ba2e618 --- /dev/null +++ b/docs/guide/method-inputs.md @@ -0,0 +1,114 @@ +# Building method problems from explicit inputs + +CORNETO methods accept ordinary Python mappings and collections for their +common scientific inputs. You do not need to construct `Data`, `Sample`, or +`Feature` objects for standard workflows. + +## One condition + +Use `build` with a positional network and keyword-only scientific inputs: + +```python +from corneto.methods import CarnivalILP + +problem = CarnivalILP().build( + pkn, + perturbations={"EGFR": 1}, + transcription_factors={"JUN": 1, "FOXO3": -1}, +) +``` + +Metabolic and network methods expose inputs using their domain terminology: + +```python +from corneto.methods import MultiSampleFBA, SteinerTreeFlow + +fba_problem = MultiSampleFBA().build( + model, + objectives={"BIOMASS": -1}, + reaction_bounds={"EX_glc": (-10, 0)}, +) + +tree_problem = SteinerTreeFlow().build( + graph, + terminals=["EGFR", "JUN"], + edge_costs={0: 1.5, 4: 0.8}, +) +``` + +PHONEMeS uses perturbation targets and signed phosphosite scores. Because the +method minimizes its objective, negative scores favor including a site and +positive scores discourage it; zero-valued keys still identify measured sites: + +```python +from corneto.methods import PHONEMeS + +phonemes_problem = PHONEMeS().build( + pkn, + perturbations=["EGFR"], + phosphosite_scores={"ERK1_S123": -2.4, "AKT1_S473": 0.0}, +) +``` + +See the [PHONEMeS guide](signaling/phonemes.ipynb) for score interpretation, edge +costs, computing scores from differential results, optional pandas inputs, and +extracting the inferred subnetwork. + +When the starting points are activity-derived regulated kinases rather than +known experimental perturbations, use `BidirectionalPHONEMeS`. It optimizes +upstream and downstream explanations together: + +```python +from corneto.methods import BidirectionalPHONEMeS + +bidirectional_problem = BidirectionalPHONEMeS().build( + pkn, + regulated_kinases=["AKT1", "MTOR"], + phosphosite_scores={"AKT1_S473": -2.4, "RPS6_S235": -3.1}, +) +``` + +See the +[global bidirectional PHONEMeS guide](signaling/bidirectional-phonemes.ipynb) for +anchor policies, directional results, and the distinction from the original +post-hoc upside-down union. + +## Multiple named conditions + +Use `build_many` and add one outer mapping keyed by condition name: + +```python +problem = CarnivalILP().build_many( + pkn, + perturbations={ + "control": {"EGFR": 1}, + "treated": {"EGFR": -1}, + }, + transcription_factors={ + "control": {"JUN": 1}, + "treated": {"JUN": -1}, + }, +) +``` + +All per-condition arguments must contain the same condition names. CORNETO +validates condition names, graph identifiers, numeric values, bounds, and edge +indices before constructing the optimization problem. + +PHONEMeS also uses named mappings for `perturbations` and +`phosphosite_scores`. It infers one subnetwork per condition but charges edge +costs over their combined network: an interaction used by one or several +conditions is charged once. For this reason, `edge_costs` is one global mapping +rather than a mapping per condition. + +## Advanced data interface + +Use `build_from_data(graph, data)` when custom feature metadata or arbitrary +measurement roles require the general `Data` representation: + +```python +problem = CarnivalILP().build_from_data(pkn, data) +``` + +Passing `Data` as the second positional argument to `build` remains temporarily +supported with a deprecation warning. diff --git a/docs/guide/signaling/bidirectional-phonemes.ipynb b/docs/guide/signaling/bidirectional-phonemes.ipynb new file mode 100644 index 000000000..6e04c595f --- /dev/null +++ b/docs/guide/signaling/bidirectional-phonemes.ipynb @@ -0,0 +1,611 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "introduction", + "metadata": {}, + "source": [ + "# Global upstream and downstream PHONEMeS\n", + "\n", + "The signaling method `BidirectionalPHONEMeS` infers a network around kinases whose activities are known or estimated to change. It considers interactions both upstream and downstream of those kinases and chooses both parts together.\n", + "\n", + "Use ordinary [`PHONEMeS`](phonemes.ipynb) when the starting nodes are known experimental perturbations, such as drug targets. Use the bidirectional method when the starting points are regulated kinases inferred from the data and the question is:\n", + "\n", + "> Which upstream and downstream signaling interactions jointly explain the phosphoproteomic measurements around these kinases?" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "imports", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:43.855678Z", + "iopub.status.busy": "2026-07-29T08:57:43.855374Z", + "iopub.status.idle": "2026-07-29T08:57:44.906716Z", + "shell.execute_reply": "2026-07-29T08:57:44.906153Z" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "from corneto import Graph\n", + "from corneto.methods import BidirectionalPHONEMeS" + ] + }, + { + "cell_type": "markdown", + "id": "toy-example", + "metadata": {}, + "source": [ + "## A small runnable example\n", + "\n", + "Consider a regulated kinase `K`. Two measured sites can lie upstream of it, while `B_site` can be explained downstream through either a direct interaction or a two-step route. A disconnected interaction is included to show that irrelevant regions are removed during preprocessing." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "build-pkn", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:44.908689Z", + "iopub.status.busy": "2026-07-29T08:57:44.908530Z", + "iopub.status.idle": "2026-07-29T08:57:45.245824Z", + "shell.execute_reply": "2026-07-29T08:57:45.245233Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "A_site\n", + "\n", + "A_site\n", + "\n", + "\n", + "\n", + "K\n", + "\n", + "K\n", + "\n", + "\n", + "\n", + "A_site->K\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "B_site\n", + "\n", + "B_site\n", + "\n", + "\n", + "\n", + "K->B_site\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "D\n", + "\n", + "D\n", + "\n", + "\n", + "\n", + "K->D\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "C_site\n", + "\n", + "C_site\n", + "\n", + "\n", + "\n", + "C_site->K\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "D->B_site\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "noise_1\n", + "\n", + "noise_1\n", + "\n", + "\n", + "\n", + "noise_2\n", + "\n", + "noise_2\n", + "\n", + "\n", + "\n", + "noise_1->noise_2\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pkn_edges = [\n", + " (\"A_site\", \"K\"),\n", + " (\"C_site\", \"K\"),\n", + " (\"K\", \"B_site\"),\n", + " (\"K\", \"D\"),\n", + " (\"D\", \"B_site\"),\n", + " (\"noise_1\", \"noise_2\"),\n", + "]\n", + "\n", + "pkn = Graph()\n", + "pkn.add_edges(pkn_edges)\n", + "\n", + "pkn.plot(\n", + " graph_attr={\"rankdir\": \"LR\"},\n", + " node_attr={\n", + " \"fixedsize\": \"false\",\n", + " \"shape\": \"box\",\n", + " \"style\": \"rounded\",\n", + " \"margin\": \"0.08,0.04\",\n", + " },\n", + " custom_vertex_attr={\n", + " \"K\": {\"fillcolor\": \"#f3c969\", \"style\": \"rounded,filled\"}\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "score-meaning", + "metadata": {}, + "source": [ + "PHONEMeS minimizes its objective, so the sign of each phosphosite score has a direct interpretation:\n", + "\n", + "- a **negative score rewards** including the measured site;\n", + "- a **positive score penalizes** including it;\n", + "- a **zero score** marks a measured site as eligible without rewarding or penalizing it.\n", + "\n", + "Here, `A_site` and `B_site` are supported by the data, whereas `C_site` is discouraged. The direct edge from `K` to `B_site` is deliberately made more expensive than the two-step alternative." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "solve-example", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:45.247962Z", + "iopub.status.busy": "2026-07-29T08:57:45.247824Z", + "iopub.status.idle": "2026-07-29T08:57:45.292421Z", + "shell.execute_reply": "2026-07-29T08:57:45.291725Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Problem(Minimize(Expression(AFFINE, UNKNOWN, ())), [Inequality(Constant(CONSTANT, ZERO, (5, 1))), Inequality(Variable((5, 1), _dag_layer)), Inequality(Constant(CONSTANT, ZERO, (14, 2))), Inequality(Variable((14, 2), _flow)), Equality(Expression(AFFINE, UNKNOWN, (5, 2)), Constant(CONSTANT, ZERO, ())), Inequality(Expression(AFFINE, NONNEGATIVE, (14, 2))), Equality(Expression(AFFINE, NONNEGATIVE, (14, 2)), Constant(CONSTANT, ZERO, ())), Equality(Expression(AFFINE, NONNEGATIVE, (14, 2)), Constant(CONSTANT, ZERO, ())), Inequality(Expression(AFFINE, NONNEGATIVE, (14, 2))), Inequality(Variable((14, 2), _flow)), Inequality(Variable((5, 1), anchor_active_downstream, boolean=True)), Inequality(Variable((5, 1), anchor_active_upstream, boolean=True)), Inequality(Constant(CONSTANT, NONNEGATIVE, (5, 1))), Inequality(Constant(CONSTANT, NONNEGATIVE, (5, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (1, 1))), Inequality(Expression(AFFINE, UNKNOWN, (1, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (1, 1))), Inequality(Expression(AFFINE, UNKNOWN, (1, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (5, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (5, 1))), Inequality(Variable((5, 1), anchor_active_downstream, boolean=True)), Inequality(Expression(AFFINE, NONNEGATIVE, (5, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (5, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (5, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (5, 1))), Inequality(Variable((5, 1), anchor_active_upstream, boolean=True)), Inequality(Expression(AFFINE, NONNEGATIVE, (5, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (5, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (5, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (5, 1))), Inequality(Variable((5, 1), edge_selected, boolean=True)), Inequality(Variable((5, 1), vertex_selected_downstream, boolean=True)), Inequality(Variable((5, 1), vertex_selected_upstream, boolean=True)), Inequality(Variable((5, 1), vertex_selected, boolean=True)), Inequality(Expression(AFFINE, UNKNOWN, (5, 1))), Inequality(Expression(AFFINE, UNKNOWN, (5, 1)))])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "scores = {\n", + " \"A_site\": -3.0,\n", + " \"C_site\": 1.0,\n", + " \"B_site\": -3.0,\n", + "}\n", + "\n", + "method = BidirectionalPHONEMeS(anchor_policy=\"both\")\n", + "problem = method.build(\n", + " pkn,\n", + " regulated_kinases=[\"K\"],\n", + " phosphosite_scores=scores,\n", + " edge_costs={\n", + " 0: 0.2,\n", + " 1: 0.2,\n", + " 2: 2.0,\n", + " 3: 0.2,\n", + " 4: 0.2,\n", + " },\n", + ")\n", + "problem.solve(solver=\"scipy\")" + ] + }, + { + "cell_type": "markdown", + "id": "read-network", + "metadata": {}, + "source": [ + "## Reading the inferred network\n", + "\n", + "`edge_selected` is the complete biological network chosen for each condition. The directional arrays show whether an interaction is used to explain evidence upstream or downstream of an anchor. All of them use the normal biological PKN orientation, so upstream results do not need to be reversed." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "extract-results", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:45.293943Z", + "iopub.status.busy": "2026-07-29T08:57:45.293822Z", + "iopub.status.idle": "2026-07-29T08:57:45.297437Z", + "shell.execute_reply": "2026-07-29T08:57:45.296930Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Upstream: [('A_site', 'K')]\n", + "Downstream: [('K', 'D'), ('D', 'B_site')]\n", + "Combined: [('A_site', 'K'), ('K', 'D'), ('D', 'B_site')]\n" + ] + } + ], + "source": [ + "upstream = problem.expr.edge_selected_upstream.value[:, 0] > 0.5\n", + "downstream = problem.expr.edge_selected_downstream.value[:, 0] > 0.5\n", + "selected = problem.expr.edge_selected.value[:, 0] > 0.5\n", + "\n", + "# Retained biological interactions are stored first in processed_graph.\n", + "biological_edges = method.processed_graph.E[: selected.size]\n", + "\n", + "def selected_interactions(mask):\n", + " return [\n", + " (next(iter(source)), next(iter(target)))\n", + " for (source, target), keep in zip(biological_edges, mask)\n", + " if keep\n", + " ]\n", + "\n", + "print(\"Upstream:\", selected_interactions(upstream))\n", + "print(\"Downstream:\", selected_interactions(downstream))\n", + "print(\"Combined:\", selected_interactions(selected))" + ] + }, + { + "cell_type": "markdown", + "id": "result-explanation", + "metadata": {}, + "source": [ + "The solution keeps the rewarded upstream site and excludes the penalized one. Downstream, it chooses the less expensive route through `D` instead of the costly direct interaction.\n", + "\n", + "The following plot uses blue for upstream interactions, orange for downstream interactions, and purple if an interaction serves both roles." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "plot-result", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:45.299277Z", + "iopub.status.busy": "2026-07-29T08:57:45.299172Z", + "iopub.status.idle": "2026-07-29T08:57:45.621412Z", + "shell.execute_reply": "2026-07-29T08:57:45.620812Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "A_site\n", + "\n", + "A_site\n", + "\n", + "\n", + "\n", + "K\n", + "\n", + "K\n", + "\n", + "\n", + "\n", + "A_site->K\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "D\n", + "\n", + "D\n", + "\n", + "\n", + "\n", + "K->D\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "B_site\n", + "\n", + "B_site\n", + "\n", + "\n", + "\n", + "D->B_site\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selected_indices = np.flatnonzero(selected)\n", + "inferred_network = method.processed_graph.edge_subgraph(selected_indices)\n", + "\n", + "edge_style = {}\n", + "for displayed_index, original_index in enumerate(selected_indices):\n", + " if upstream[original_index] and downstream[original_index]:\n", + " color = \"#7b2cbf\"\n", + " elif upstream[original_index]:\n", + " color = \"#277da1\"\n", + " else:\n", + " color = \"#f8961e\"\n", + " edge_style[displayed_index] = {\"color\": color, \"penwidth\": \"3\"}\n", + "\n", + "inferred_network.plot(\n", + " graph_attr={\"rankdir\": \"LR\"},\n", + " node_attr={\n", + " \"fixedsize\": \"false\",\n", + " \"shape\": \"box\",\n", + " \"style\": \"rounded\",\n", + " \"margin\": \"0.08,0.04\",\n", + " },\n", + " custom_edge_attr=edge_style,\n", + " custom_vertex_attr={\n", + " \"K\": {\"fillcolor\": \"#f3c969\", \"style\": \"rounded,filled\"}\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "anchor-policy", + "metadata": {}, + "source": [ + "## Choosing how anchors participate\n", + "\n", + "The constructor's `anchor_policy` controls which side of every regulated kinase must be explained:\n", + "\n", + "| Policy | Meaning |\n", + "| --- | --- |\n", + "| `\"either\"` | Require an upstream or downstream explanation; select both when supported. This is the default. |\n", + "| `\"both\"` | Require both an upstream and a downstream explanation. |\n", + "| `\"downstream\"` | Require the downstream side and make the upstream side optional. |\n", + "\n", + "`\"either\"` is usually the safest choice for exploratory analysis because it does not force a weakly supported side into the network. Use `\"both\"` only when the experimental design requires two-sided explanations for every anchor." + ] + }, + { + "cell_type": "markdown", + "id": "multiple-conditions", + "metadata": {}, + "source": [ + "## Multiple conditions\n", + "\n", + "Use `build_many` with matching condition names. Each condition receives its own inferred network. Interaction costs apply to their union, so an interaction shared by several conditions is charged once." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "solve-many", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:45.623731Z", + "iopub.status.busy": "2026-07-29T08:57:45.623582Z", + "iopub.status.idle": "2026-07-29T08:57:45.667229Z", + "shell.execute_reply": "2026-07-29T08:57:45.666700Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Per-condition selection shape: (5, 2)\n", + "Union across conditions: [ True True False True True]\n" + ] + } + ], + "source": [ + "many_method = BidirectionalPHONEMeS(anchor_policy=\"either\")\n", + "many_problem = many_method.build_many(\n", + " pkn,\n", + " regulated_kinases={\n", + " \"control\": [\"K\"],\n", + " \"treated\": [\"K\"],\n", + " },\n", + " phosphosite_scores={\n", + " \"control\": {\"A_site\": -3.0, \"B_site\": -2.0},\n", + " \"treated\": {\"C_site\": -2.5, \"B_site\": -3.0},\n", + " },\n", + " edge_costs={0: 0.2, 1: 0.2, 2: 2.0, 3: 0.2, 4: 0.2},\n", + ")\n", + "many_problem.solve(solver=\"scipy\")\n", + "\n", + "print(\"Per-condition selection shape:\", many_problem.expr.edge_selected.shape)\n", + "print(\"Union across conditions:\", many_problem.expr.edge_selected_any.value > 0.5)" + ] + }, + { + "cell_type": "markdown", + "id": "upside-down-comparison", + "metadata": {}, + "source": [ + "## Why this differs from original upside-down PHONEMeS\n", + "\n", + "Original upside-down PHONEMeS solves a downstream problem and an upstream problem independently, then reports their union. That can be useful for exploration, but the final union is not itself an optimized solution.\n", + "\n", + "`BidirectionalPHONEMeS` chooses both sides in one optimization. Consequently:\n", + "\n", + "- a phosphosite contributes its score once even if it is relevant to both sides;\n", + "- an interaction cost is paid once when directions or conditions share it;\n", + "- upstream and downstream alternatives can be chosen jointly;\n", + "- acyclicity is checked on the complete network for each condition.\n", + "\n", + "The method also uses exact connectivity pruning: it retains every interaction that can occur on a relevant directed path, rather than restricting candidates to shortest paths or a fixed path-length cutoff." + ] + }, + { + "cell_type": "markdown", + "id": "scores-costs", + "metadata": {}, + "source": [ + "## Scores and edge costs in real analyses\n", + "\n", + "Use `compute_phonemes_scores` as described in the [ordinary PHONEMeS guide](phonemes.ipynb) to calculate scores from p-values and optional fold changes. It accepts mappings, NumPy arrays, pandas Series, and pandas DataFrames for one or many conditions.\n", + "\n", + "Pass interaction costs by original PKN edge index. Unspecified interactions use `default_edge_cost`. Negative costs reward an interaction, but selected interactions must still belong to an anchor-connected explanation.\n", + "\n", + "`edge_costs` is global in `build_many` because PHONEMeS charges the cost of the combined network: if the same interaction is used in multiple conditions or directions, its cost is paid only once." + ] + }, + { + "cell_type": "markdown", + "id": "advanced-data", + "metadata": {}, + "source": [ + "## Advanced: the general `Data` interface\n", + "\n", + "Most users should prefer `build` or `build_many`. The general interface is available for workflows that already create CORNETO `Data` objects. It uses the vertex roles `regulated_kinase`, `phosphosite`, and `regulated_kinase_phosphosite`.\n", + "\n", + "```python\n", + "from corneto import Data\n", + "\n", + "data = Data.from_dict(\n", + " {\n", + " \"tumour\": {\n", + " \"features\": [\n", + " {\n", + " \"id\": \"K\",\n", + " \"mapping\": \"vertex\",\n", + " \"role\": \"regulated_kinase\",\n", + " },\n", + " {\n", + " \"id\": \"B_site\",\n", + " \"mapping\": \"vertex\",\n", + " \"role\": \"phosphosite\",\n", + " \"value\": -2.1,\n", + " },\n", + " ]\n", + " }\n", + " }\n", + ")\n", + "\n", + "advanced_problem = BidirectionalPHONEMeS().build_from_data(pkn, data)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "advanced-implementation", + "metadata": {}, + "source": [ + "## Advanced: implementation in CORNETO\n", + "\n", + "The details in this section are useful when extending the formulation or inspecting low-level results; they are not needed for ordinary analysis.\n", + "\n", + "CORNETO first prepares exact upstream and downstream candidate regions. The optimization represents downstream paths in the PKN orientation and upstream paths through internal reversed copies of the same interactions. These internal copies are implementation details and are translated back to biological PKN orientation in every public edge-selection array.\n", + "\n", + "| Variable | Meaning |\n", + "| --- | --- |\n", + "| `edge_selected_downstream` | Direction-specific downstream selections |\n", + "| `edge_selected_upstream` | Direction-specific upstream selections in biological orientation |\n", + "| `edge_selected` | Directional union for each condition |\n", + "| `edge_selected_any` | Union across conditions |\n", + "| `vertex_selected` | Vertices used in either direction |\n", + "| `anchor_active_downstream` | Anchors activated on the downstream side |\n", + "| `anchor_active_upstream` | Anchors activated on the upstream side |\n", + "| `flow_downstream` | Internal downstream connectivity values |\n", + "| `flow_upstream` | Internal upstream connectivity values |\n", + "| `dag_layer` | Per-condition order used to exclude cycles |\n", + "\n", + "Auxiliary reversed and boundary interactions appear after the retained biological edges in `processed_graph`. They support the mathematical formulation but never appear in the biological edge-selection arrays or objective." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/guide/signaling/index.md b/docs/guide/signaling/index.md index 115d5a451..8b67a5cc9 100644 --- a/docs/guide/signaling/index.md +++ b/docs/guide/signaling/index.md @@ -7,5 +7,7 @@ Inferring signaling networks from omics data is a challenging task due to the co carnival.ipynb multisample-carnival.ipynb +phonemes.ipynb +bidirectional-phonemes.ipynb cellnopt_ILP.ipynb ``` diff --git a/docs/guide/signaling/phonemes.ipynb b/docs/guide/signaling/phonemes.ipynb new file mode 100644 index 000000000..b3201ad00 --- /dev/null +++ b/docs/guide/signaling/phonemes.ipynb @@ -0,0 +1,918 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "introduction", + "metadata": {}, + "source": [ + "# PHONEMeS\n", + "\n", + "The signaling method `PHONEMeS` identifies a directed, acyclic subnetwork that connects known perturbation targets to phosphosites supported by an experiment. Typical inputs are a directed prior-knowledge network (PKN), one or more perturbed proteins, and a score for each measured phosphosite.\n", + "\n", + "CORNETO expects differential-analysis results and a PKN to be prepared beforehand. It provides `compute_phonemes_scores` for converting p-values and fold changes into PHONEMeS scores, but it does not perform differential analysis, map phosphosites to proteins, or construct the PKN." + ] + }, + { + "cell_type": "markdown", + "id": "workflow-choice", + "metadata": {}, + "source": [ + "## Choosing the appropriate PHONEMeS workflow\n", + "\n", + "| Workflow | Starting proteins | Question answered |\n", + "| --- | --- | --- |\n", + "| `PHONEMeS` | Known experimental perturbations, such as drug targets or inhibited kinases | Which downstream interactions connect the perturbations to the phosphoproteomic measurements? |\n", + "| `BidirectionalPHONEMeS` | Kinases inferred to be regulated from the data | Which upstream and downstream interactions jointly explain the measurements around those kinases? |\n", + "| Original upside-down PHONEMeS | Kinases inferred to be regulated from the data | Which separate upstream and downstream networks are found before taking their post-hoc union? |\n", + "\n", + "Use ordinary `PHONEMeS` when the experiment provides a known causal starting point. Its `perturbations` are mandatory roots, and inferred interactions follow the PKN downstream toward measured phosphosites.\n", + "\n", + "Use [`BidirectionalPHONEMeS`](bidirectional-phonemes.ipynb) when kinase-activity analysis provides regulated kinases rather than known perturbations. CORNETO then optimizes the upstream and downstream explanations jointly." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "imports", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:39.585528Z", + "iopub.status.busy": "2026-07-29T08:57:39.585307Z", + "iopub.status.idle": "2026-07-29T08:57:41.315637Z", + "shell.execute_reply": "2026-07-29T08:57:41.314997Z" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "from corneto import Graph\n", + "from corneto.methods import PHONEMeS, compute_phonemes_scores" + ] + }, + { + "cell_type": "markdown", + "id": "score-meaning", + "metadata": {}, + "source": [ + "## Understanding phosphosite scores\n", + "\n", + "PHONEMeS minimizes its objective, so score signs have the following meaning:\n", + "\n", + "| Score | Effect on the inferred network |\n", + "| --- | --- |\n", + "| Negative | Rewards inclusion of the phosphosite |\n", + "| Positive | Penalizes inclusion of the phosphosite |\n", + "| Zero | Marks the phosphosite as measured without favoring or penalizing it |\n", + "\n", + "The magnitude controls the strength of the preference. These signs are **optimization preferences**, not activity labels. A negative score does not itself mean that a site is activated, and a positive score does not mean that it is inhibited.\n", + "\n", + "Every key identifies a measured phosphosite, including keys with value `0.0`. A positively scored site may still appear when it is needed as an intermediate in a better overall explanation." + ] + }, + { + "cell_type": "markdown", + "id": "compute-scores", + "metadata": {}, + "source": [ + "## Computing scores from differential results\n", + "\n", + "`compute_phonemes_scores` starts from\n", + "\n", + "$$\n", + "r_v = \\log_2\\left(\\frac{p_v}{p_{\\mathrm{threshold}}}\\right).\n", + "$$\n", + "\n", + "Sites satisfying the selected evidence criteria receive $-|r_v|$, rewarding inclusion. Other measured sites receive $+|r_v|$, penalizing inclusion. By default, positive and negative scores are scaled separately to $[0,1]$ and $[-1,0]$." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "compute-single-scores", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:41.317651Z", + "iopub.status.busy": "2026-07-29T08:57:41.317455Z", + "iopub.status.idle": "2026-07-29T08:57:41.321541Z", + "shell.execute_reply": "2026-07-29T08:57:41.321097Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ERK1_S123': -1.0, 'AKT1_S473': 1.0}" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "scores = compute_phonemes_scores(\n", + " {\n", + " \"ERK1_S123\": 0.001,\n", + " \"AKT1_S473\": 0.20,\n", + " },\n", + " fold_changes={\n", + " \"ERK1_S123\": 2.1,\n", + " \"AKT1_S473\": 0.3,\n", + " },\n", + " pvalue_threshold=0.05,\n", + " fold_change_threshold=1.0,\n", + " direction=\"both\",\n", + ")\n", + "scores" + ] + }, + { + "cell_type": "markdown", + "id": "toy-pkn", + "metadata": {}, + "source": [ + "## Inferring a network for one condition\n", + "\n", + "The toy PKN below contains two routes from the known perturbation `EGFR` to the supported site `ERK1_S123`, one route to the penalized site `AKT1_S473`, and a disconnected interaction. The disconnected region cannot explain a measurement and will be removed during preprocessing." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "build-and-plot-pkn", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:41.323384Z", + "iopub.status.busy": "2026-07-29T08:57:41.323282Z", + "iopub.status.idle": "2026-07-29T08:57:41.700787Z", + "shell.execute_reply": "2026-07-29T08:57:41.700134Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR\n", + "\n", + "EGFR\n", + "\n", + "\n", + "\n", + "MAP2K1\n", + "\n", + "MAP2K1\n", + "\n", + "\n", + "\n", + "EGFR->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SHC1\n", + "\n", + "SHC1\n", + "\n", + "\n", + "\n", + "EGFR->SHC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3CA\n", + "\n", + "PIK3CA\n", + "\n", + "\n", + "\n", + "EGFR->PIK3CA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ERK1_S123\n", + "\n", + "ERK1_S123\n", + "\n", + "\n", + "\n", + "MAP2K1->ERK1_S123\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GRB2\n", + "\n", + "GRB2\n", + "\n", + "\n", + "\n", + "SHC1->GRB2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GRB2->ERK1_S123\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1_S473\n", + "\n", + "AKT1_S473\n", + "\n", + "\n", + "\n", + "PIK3CA->AKT1_S473\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "noise_1\n", + "\n", + "noise_1\n", + "\n", + "\n", + "\n", + "noise_2\n", + "\n", + "noise_2\n", + "\n", + "\n", + "\n", + "noise_1->noise_2\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pkn_edges = [\n", + " (\"EGFR\", \"MAP2K1\"),\n", + " (\"MAP2K1\", \"ERK1_S123\"),\n", + " (\"EGFR\", \"SHC1\"),\n", + " (\"SHC1\", \"GRB2\"),\n", + " (\"GRB2\", \"ERK1_S123\"),\n", + " (\"EGFR\", \"PIK3CA\"),\n", + " (\"PIK3CA\", \"AKT1_S473\"),\n", + " (\"noise_1\", \"noise_2\"),\n", + "]\n", + "\n", + "pkn = Graph()\n", + "pkn.add_edges(pkn_edges)\n", + "\n", + "pkn.plot(\n", + " graph_attr={\"rankdir\": \"LR\"},\n", + " node_attr={\n", + " \"fixedsize\": \"false\",\n", + " \"shape\": \"box\",\n", + " \"style\": \"rounded\",\n", + " \"margin\": \"0.08,0.04\",\n", + " },\n", + " custom_vertex_attr={\n", + " \"EGFR\": {\"fillcolor\": \"#f3c969\", \"style\": \"rounded,filled\"},\n", + " \"ERK1_S123\": {\"fillcolor\": \"#90be6d\", \"style\": \"rounded,filled\"},\n", + " \"AKT1_S473\": {\"fillcolor\": \"#f28482\", \"style\": \"rounded,filled\"},\n", + " }\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "build-single", + "metadata": {}, + "source": [ + "Interaction costs control which explanation is preferred. Here, the two-edge route through `MAP2K1` costs `0.8`, whereas the three-edge route through `SHC1` and `GRB2` costs `0.3`. The supported phosphosite has score `-1.0`, so the cheaper route remains worthwhile." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "solve-single", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:41.702938Z", + "iopub.status.busy": "2026-07-29T08:57:41.702802Z", + "iopub.status.idle": "2026-07-29T08:57:41.778544Z", + "shell.execute_reply": "2026-07-29T08:57:41.778109Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Problem(Minimize(Expression(AFFINE, UNKNOWN, ())), [Inequality(Constant(CONSTANT, NONNEGATIVE, (10, 1))), Inequality(Variable((10, 1), _flow)), Inequality(Constant(CONSTANT, ZERO, (7, 1))), Inequality(Variable((7, 1), _dag_layer)), Equality(Expression(AFFINE, UNKNOWN, (7, 1)), Constant(CONSTANT, ZERO, ())), Inequality(Expression(AFFINE, NONNEGATIVE, (10, 1))), Equality(Expression(AFFINE, ZERO, (10, 1)), Constant(CONSTANT, ZERO, ())), Equality(Expression(AFFINE, NONNEGATIVE, (10, 1)), Constant(CONSTANT, ZERO, ())), Inequality(Expression(AFFINE, NONNEGATIVE, (10, 1))), Inequality(Variable((10, 1), _flow)), Inequality(Expression(AFFINE, UNKNOWN, (7, 1))), Inequality(Expression(AFFINE, UNKNOWN, (7, 1))), Inequality(Expression(AFFINE, UNKNOWN, (7, 1))), Inequality(Expression(AFFINE, UNKNOWN, (7, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (7, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (7, 1))), Inequality(Constant(CONSTANT, NONNEGATIVE, (7, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (7, 1))), Inequality(Expression(AFFINE, NONNEGATIVE, (7, 1)))])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "edge_costs = {\n", + " 0: 0.4,\n", + " 1: 0.4,\n", + " 2: 0.1,\n", + " 3: 0.1,\n", + " 4: 0.1,\n", + " 5: 0.1,\n", + " 6: 0.1,\n", + "}\n", + "\n", + "method = PHONEMeS()\n", + "problem = method.build(\n", + " pkn,\n", + " perturbations=[\"EGFR\"],\n", + " phosphosite_scores=scores,\n", + " edge_costs=edge_costs,\n", + ")\n", + "problem.solve(solver=\"scipy\")" + ] + }, + { + "cell_type": "markdown", + "id": "read-single", + "metadata": {}, + "source": [ + "## Reading and plotting the inferred subnetwork\n", + "\n", + "`edge_selected` and `vertex_selected` are binary solution arrays with one column per condition. Their rows follow the retained biological interactions and vertices in `method.processed_graph`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "extract-single", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:41.780394Z", + "iopub.status.busy": "2026-07-29T08:57:41.780263Z", + "iopub.status.idle": "2026-07-29T08:57:41.783908Z", + "shell.execute_reply": "2026-07-29T08:57:41.783409Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Selected vertices: ['EGFR', 'ERK1_S123', 'SHC1', 'GRB2']\n", + "Selected interactions: [('EGFR', 'SHC1'), ('SHC1', 'GRB2'), ('GRB2', 'ERK1_S123')]\n" + ] + } + ], + "source": [ + "selected_edges = problem.expr.edge_selected.value[:, 0] > 0.5\n", + "selected_vertices = problem.expr.vertex_selected.value[:, 0] > 0.5\n", + "\n", + "selected_edge_indices = np.flatnonzero(selected_edges)\n", + "selected_vertex_names = np.asarray(\n", + " method.processed_graph.V,\n", + " dtype=object,\n", + ")[selected_vertices]\n", + "inferred_network = method.processed_graph.edge_subgraph(selected_edge_indices)\n", + "\n", + "selected_interactions = [\n", + " (next(iter(source)), next(iter(target)))\n", + " for source, target in inferred_network.E\n", + "]\n", + "print(\"Selected vertices:\", selected_vertex_names.tolist())\n", + "print(\"Selected interactions:\", selected_interactions)" + ] + }, + { + "cell_type": "markdown", + "id": "plot-single", + "metadata": {}, + "source": [ + "The inferred network selects the supported ERK site through the less expensive route. It does not include the penalized AKT site or the disconnected interaction." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "plot-single-result", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:41.785427Z", + "iopub.status.busy": "2026-07-29T08:57:41.785323Z", + "iopub.status.idle": "2026-07-29T08:57:42.110027Z", + "shell.execute_reply": "2026-07-29T08:57:42.109470Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR\n", + "\n", + "EGFR\n", + "\n", + "\n", + "\n", + "SHC1\n", + "\n", + "SHC1\n", + "\n", + "\n", + "\n", + "EGFR->SHC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GRB2\n", + "\n", + "GRB2\n", + "\n", + "\n", + "\n", + "SHC1->GRB2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ERK1_S123\n", + "\n", + "ERK1_S123\n", + "\n", + "\n", + "\n", + "GRB2->ERK1_S123\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inferred_network.plot(\n", + " graph_attr={\"rankdir\": \"LR\"},\n", + " node_attr={\n", + " \"fixedsize\": \"false\",\n", + " \"shape\": \"box\",\n", + " \"style\": \"rounded\",\n", + " \"margin\": \"0.08,0.04\",\n", + " },\n", + " custom_edge_attr={\n", + " edge: {\"color\": \"#277da1\", \"penwidth\": \"3\"}\n", + " for edge in range(inferred_network.num_edges)\n", + " },\n", + " custom_vertex_attr={\n", + " \"EGFR\": {\"fillcolor\": \"#f3c969\", \"style\": \"rounded,filled\"},\n", + " \"ERK1_S123\": {\"fillcolor\": \"#90be6d\", \"style\": \"rounded,filled\"},\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "edge-costs", + "metadata": {}, + "source": [ + "## Controlling network size with edge costs\n", + "\n", + "Unspecified interactions use `default_edge_cost`, which defaults to `1e-5`. Positive costs favor smaller subnetworks. Larger costs require stronger negative phosphosite scores to justify additional interactions, so score and edge-cost scales should be chosen together.\n", + "\n", + "`edge_costs` maps zero-based indices in `pkn.E` to costs. Negative costs are accepted and reward inclusion of an interaction, but should be used deliberately because they can add valid interactions that are not required to explain a negatively scored phosphosite.\n", + "\n", + "Before optimization, CORNETO removes interactions that cannot lie on a directed path from a perturbation to a measured phosphosite. Unreachable measurements are omitted from `method.processed_data`; a perturbation that cannot reach any measured site is reported as an input error." + ] + }, + { + "cell_type": "markdown", + "id": "multiple-conditions", + "metadata": {}, + "source": [ + "## Comparing multiple conditions\n", + "\n", + "`compute_phonemes_scores` handles one or many conditions through the same function. A pandas DataFrame uses phosphosites as rows and conditions as columns. Pandas is optional for CORNETO users, but convenient in typical phosphoproteomics workflows." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "compute-many-scores", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:42.112041Z", + "iopub.status.busy": "2026-07-29T08:57:42.111899Z", + "iopub.status.idle": "2026-07-29T08:57:42.123157Z", + "shell.execute_reply": "2026-07-29T08:57:42.122688Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
controltreated
ERK1_S123-1.01.0
AKT1_S4731.0-1.0
\n", + "
" + ], + "text/plain": [ + " control treated\n", + "ERK1_S123 -1.0 1.0\n", + "AKT1_S473 1.0 -1.0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pvalues = pd.DataFrame(\n", + " {\n", + " \"control\": {\"ERK1_S123\": 0.001, \"AKT1_S473\": 0.20},\n", + " \"treated\": {\"ERK1_S123\": 0.20, \"AKT1_S473\": 0.002},\n", + " }\n", + ")\n", + "fold_changes = pd.DataFrame(\n", + " {\n", + " \"control\": {\"ERK1_S123\": 2.1, \"AKT1_S473\": 0.3},\n", + " \"treated\": {\"ERK1_S123\": 0.2, \"AKT1_S473\": 1.8},\n", + " }\n", + ")\n", + "\n", + "score_table = compute_phonemes_scores(\n", + " pvalues,\n", + " fold_changes=fold_changes,\n", + " pvalue_threshold=0.05,\n", + " fold_change_threshold=1.0,\n", + " direction=\"both\",\n", + ")\n", + "score_table" + ] + }, + { + "cell_type": "markdown", + "id": "solve-many-intro", + "metadata": {}, + "source": [ + "Pass the DataFrame directly to `build_many`, together with a named perturbation mapping. Condition names must match." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "solve-and-plot-many", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-29T08:57:42.124642Z", + "iopub.status.busy": "2026-07-29T08:57:42.124529Z", + "iopub.status.idle": "2026-07-29T08:57:42.479793Z", + "shell.execute_reply": "2026-07-29T08:57:42.479048Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR\n", + "\n", + "EGFR\n", + "\n", + "\n", + "\n", + "SHC1\n", + "\n", + "SHC1\n", + "\n", + "\n", + "\n", + "EGFR->SHC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3CA\n", + "\n", + "PIK3CA\n", + "\n", + "\n", + "\n", + "EGFR->PIK3CA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GRB2\n", + "\n", + "GRB2\n", + "\n", + "\n", + "\n", + "SHC1->GRB2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ERK1_S123\n", + "\n", + "ERK1_S123\n", + "\n", + "\n", + "\n", + "GRB2->ERK1_S123\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1_S473\n", + "\n", + "AKT1_S473\n", + "\n", + "\n", + "\n", + "PIK3CA->AKT1_S473\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "many_method = PHONEMeS()\n", + "many_problem = many_method.build_many(\n", + " pkn,\n", + " perturbations={\n", + " \"control\": [\"EGFR\"],\n", + " \"treated\": [\"EGFR\"],\n", + " },\n", + " phosphosite_scores=score_table,\n", + " edge_costs=edge_costs,\n", + ")\n", + "many_problem.solve(solver=\"scipy\")\n", + "\n", + "control = many_problem.expr.edge_selected.value[:, 0] > 0.5\n", + "treated = many_problem.expr.edge_selected.value[:, 1] > 0.5\n", + "combined = many_problem.expr.edge_selected_any.value > 0.5\n", + "\n", + "combined_indices = np.flatnonzero(combined)\n", + "combined_network = many_method.processed_graph.edge_subgraph(combined_indices)\n", + "edge_style = {}\n", + "for displayed_index, original_index in enumerate(combined_indices):\n", + " if control[original_index] and treated[original_index]:\n", + " color = \"#7b2cbf\"\n", + " elif control[original_index]:\n", + " color = \"#277da1\"\n", + " else:\n", + " color = \"#f8961e\"\n", + " edge_style[displayed_index] = {\"color\": color, \"penwidth\": \"3\"}\n", + "\n", + "combined_network.plot(\n", + " graph_attr={\"rankdir\": \"LR\"},\n", + " node_attr={\n", + " \"fixedsize\": \"false\",\n", + " \"shape\": \"box\",\n", + " \"style\": \"rounded\",\n", + " \"margin\": \"0.08,0.04\",\n", + " },\n", + " custom_edge_attr=edge_style,\n", + " custom_vertex_attr={\n", + " \"EGFR\": {\"fillcolor\": \"#f3c969\", \"style\": \"rounded,filled\"},\n", + " \"ERK1_S123\": {\"fillcolor\": \"#90be6d\", \"style\": \"rounded,filled\"},\n", + " \"AKT1_S473\": {\"fillcolor\": \"#90be6d\", \"style\": \"rounded,filled\"},\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "joint-costs", + "metadata": {}, + "source": [ + "Blue interactions are used in `control`, orange interactions in `treated`, and purple interactions would be shared.\n", + "\n", + "Each condition has its own phosphosite scores and inferred subnetwork, but PHONEMeS penalizes the size of their **combined network**. An interaction used in several conditions contributes its cost once, not once per condition. This encourages reuse of a common signaling backbone without requiring condition networks to be identical.\n", + "\n", + "Consequently, `edge_costs` defines one global cost per PKN interaction. It cannot assign different costs to the same interaction in different conditions." + ] + }, + { + "cell_type": "markdown", + "id": "advanced-implementation", + "metadata": {}, + "source": [ + "## Advanced: implementation in CORNETO\n", + "\n", + "This section explains how CORNETO represents the biological problem. It is not needed for routine analysis.\n", + "\n", + "For retained PKN edges, let $Z_{ec}$ indicate whether edge $e$ is selected in condition $c$, and let $X_{vc}$ indicate whether vertex $v$ is selected. CORNETO minimizes\n", + "\n", + "$$\n", + "\\sum_{v,c} s_{vc}X_{vc} + \\sum_e c_eY_e,\n", + "\\qquad Y_e = \\bigvee_c Z_{ec}.\n", + "$$\n", + "\n", + "Here, $s_{vc}$ is the phosphosite score, $c_e$ is the interaction cost, and $Y_e$ records whether an interaction is used by at least one condition.\n", + "\n", + "CORNETO implements connectivity with a nonnegative conserved flow. Condition-specific boundary interactions inject flow at perturbation targets and extract it at measured phosphosites. These are mathematical devices: they are not PKN interactions and do not appear in `edge_selected`, `edge_selected_any`, or the edge-cost term.\n", + "\n", + "Sparse incidence matrices connect selected interactions to their endpoint vertices. Layer variables exclude directed cycles while allowing convergent signaling, so an inferred node may have more than one parent. Constraints are constructed as vectorized matrix expressions." + ] + }, + { + "cell_type": "markdown", + "id": "advanced-variables", + "metadata": {}, + "source": [ + "### Internal solution variables\n", + "\n", + "| Expression | Meaning |\n", + "| --- | --- |\n", + "| `problem.expr.edge_selected` | Retained PKN interactions selected per condition |\n", + "| `problem.expr.vertex_selected` | Retained PKN vertices selected per condition |\n", + "| `problem.expr.edge_selected_any` | Union of selected retained interactions |\n", + "| `problem.expr.flow` | Internal connectivity values on PKN and boundary interactions |\n", + "| `problem.expr.dag_layer` | Internal acyclicity layer for each vertex |\n", + "\n", + "Most analyses only need `edge_selected` and `vertex_selected`. Flow and layer values encode feasibility of the optimization model and should not be interpreted as biological measurements or signaling strength.\n", + "\n", + "Several subnetworks may have the same optimum, so different solvers or solver settings can return different but equally good interaction sets." + ] + }, + { + "cell_type": "markdown", + "id": "advanced-data", + "metadata": {}, + "source": [ + "### Advanced `Data` interface\n", + "\n", + "Most users should use `build` or `build_many`. Use `build_from_data` when inputs already exist as CORNETO features:\n", + "\n", + "```python\n", + "from corneto import Data\n", + "\n", + "data = Data.from_dict(\n", + " {\n", + " \"treated\": {\n", + " \"features\": [\n", + " {\"id\": \"EGFR\", \"mapping\": \"vertex\", \"role\": \"perturbation\"},\n", + " {\n", + " \"id\": \"ERK1_S123\",\n", + " \"mapping\": \"vertex\",\n", + " \"role\": \"phosphosite\",\n", + " \"value\": -2.4,\n", + " },\n", + " {\"id\": 3, \"mapping\": \"edge\", \"value\": 0.01},\n", + " ]\n", + " }\n", + " }\n", + ")\n", + "\n", + "advanced_problem = PHONEMeS().build_from_data(pkn, data)\n", + "```\n", + "\n", + "A vertex that is both perturbed and measured uses role `\"perturbation_phosphosite\"`. Repeated edge-cost features in multiple samples must agree because the model defines one global cost for each PKN interaction." + ] + }, + { + "cell_type": "markdown", + "id": "reference-validation", + "metadata": {}, + "source": [ + "### Reference-data validation\n", + "\n", + "The CORNETO test suite includes a compact conversion of the MTOR inhibition example from `inst/PHONEMeS_example/Cluster/data4cluster_3.RData` in the original PHONEMeS-ILP repository. It contains a prepared 229-edge PKN, the `MTOR_HUMAN` perturbation, and 17 phosphosite scores. Tests compare the objective at solver-appropriate precision and verify reachability with both supported backends.\n", + "\n", + "This implementation covers score construction, exact connectivity pruning, and the optimization core. Differential analysis, PKN construction, downsampling, and solver-specific solution pools remain separate workflows. See the original [PHONEMeS publication](https://doi.org/10.1038/ncomms9033) and [reference implementation](https://github.com/saezlab/PHONEMeS-ILP)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/releases/migration-1.0.md b/docs/releases/migration-1.0.md index 3eb6986df..8e6f219b4 100644 --- a/docs/releases/migration-1.0.md +++ b/docs/releases/migration-1.0.md @@ -40,20 +40,21 @@ serialization functions do not have shims. ## Multi-condition convention -Modern formulations accept a `corneto.Data` object containing one `Sample` per -condition. Features use `role="input"` or `role="output"` and -`mapping="vertex"` where appropriate. A method builds one condition axis while -sharing graph structure and any configured regularization across conditions. -Single-condition use is represented by a `Data` object with one sample. +Modern formulations use explicit method-specific arguments through `build` for +one condition and named condition mappings through `build_many`. The advanced +`build_from_data(graph, data)` interface accepts a `corneto.Data` object when +custom feature metadata is needed. Passing `Data` directly to `build` is a +deprecated compatibility path. ## Choosing a CARNIVAL entry point - `milp_carnival(graph, perturbations, measurements, ...)` is the supported simple single-condition ILP and accepts two mappings directly. -- `CarnivalILP(...).build(graph, data)` is the general ILP for one or many - conditions and should be the default for new condition-aware workflows. -- `CarnivalFlow(...).build(graph, data)` is the flow-based multi-condition - formulation for workflows that require explicit network flow structure. +- `CarnivalILP(...).build(pkn, perturbations=..., transcription_factors=...)` + is the default single-condition ILP interface; use `build_many` for named + conditions. +- `CarnivalFlow` provides the same explicit inputs with a flow-based + formulation. ## Alternative-solution sampling diff --git a/docs/tutorials/README.md b/docs/tutorials/README.md index 82bb6cca6..d6444d0cb 100644 --- a/docs/tutorials/README.md +++ b/docs/tutorials/README.md @@ -55,12 +55,12 @@ matplotlib = ">=3.5" pip = "*" [pypi-dependencies] -corneto = "==0.9.2" # Use specific version, not latest +corneto = "==1.0.0rc1" # Use a specific version, not latest scanpy = ">=1.9" # Add other dependencies as needed ``` -> ℹ️ **Important**: Always specify a specific corneto version (e.g., `==0.9.2`) to ensure reproducibility and independence from the main repository. +> ℹ️ **Important**: Always specify a specific corneto version (e.g., `==1.0.0rc1`) to ensure reproducibility and independence from the main repository. --- diff --git a/docs/tutorials/carnival/multi-receptor-integration.ipynb b/docs/tutorials/carnival/multi-receptor-integration.ipynb index c31760a10..76fddc5ab 100644 --- a/docs/tutorials/carnival/multi-receptor-integration.ipynb +++ b/docs/tutorials/carnival/multi-receptor-integration.ipynb @@ -46,37 +46,37 @@ "tags": [] }, "outputs": [ - { - "data": { - "text/html": [], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, { "data": { "text/html": [ "\n", - " \n", - " \n", + "
\n", + " \n", " \n", " \n", - " \n", - "
\n", - " \n", + " \n", " \n", - " \n", - " \n", - "
Installed version:v1.0.0b0
Available backends:CVXPY v1.7.1
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, GUROBI, HIGHS, OSQP, SCIPY, SCS
Graphviz version:v0.21
Installed path:/Users/pablorodriguezmier/Documents/work/projects/corneto/docs/tutorials/carnival/.pixi/envs/default/lib/python3.10/site-packages/corneto
Repository:https://github.com/saezlab/corneto
\n", + "
Installed version:v1.0.0rc1
Available backends:CVXPY v1.7.1
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, GUROBI, HIGHS, OSQP, SCIPY, SCS
Plot backend (default):auto -> graphviz
Available plot backends:graphviz v0.21; graphviz-wasm
Installed path:/docs/tutorials/carnival/.pixi/envs/default/lib/python3.11/site-packages/corneto
Repository:https://github.com/saezlab/corneto
\n", "
" + " \n", + " \n", + " " ], "text/plain": [ - "" + "Installed version: v1.0.0rc1\n", + "Available backends: CVXPY v1.7.1\n", + "Default backend (corneto.opt): CVXPY\n", + "Installed solvers: CLARABEL, GUROBI, HIGHS, OSQP, SCIPY, SCS\n", + "Plot backend (default): auto -> graphviz\n", + "Available plot backends: graphviz v0.21; graphviz-wasm\n", + "Installed path: /docs/tutorials/carnival/.pixi/envs/default/lib/python3.11/site-packages/corneto\n", + "Repository: https://github.com/saezlab/corneto" ] }, + "execution_count": 1, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -335,7 +335,7 @@ "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 2, @@ -450,12 +450,12 @@ { "data": { "text/plain": [ - "{'edge_inhibits': edge_inhibits: Variable((25, 2), edge_inhibits, boolean=True),\n", - " '_flow': _flow: Variable((25,), _flow),\n", + "{'_flow': _flow: Variable((25,), _flow),\n", + " 'edge_inhibits': edge_inhibits: Variable((25, 2), edge_inhibits, boolean=True),\n", " 'edge_activates': edge_activates: Variable((25, 2), edge_activates, boolean=True),\n", - " 'const0x13b0fa60bb3aa529': const0x13b0fa60bb3aa529: Constant(CONSTANT, NONNEGATIVE, (10, 25)),\n", + " 'const0x14df77c05f4ea025': const0x14df77c05f4ea025: Constant(CONSTANT, NONNEGATIVE, (10, 25)),\n", " '_dag_layer': _dag_layer: Variable((10, 2), _dag_layer),\n", - " 'const0x147754b80d2a59f6': const0x147754b80d2a59f6: Constant(CONSTANT, NONNEGATIVE, (10, 25)),\n", + " 'const0x19c99d63116ef5a0': const0x19c99d63116ef5a0: Constant(CONSTANT, NONNEGATIVE, (10, 25)),\n", " 'edge_has_signal_OR': edge_has_signal_OR: Variable((25,), edge_has_signal_OR, boolean=True),\n", " 'flow': _flow: Variable((25,), _flow),\n", " 'vertex_value': Expression(AFFINE, UNKNOWN, (10, 2)),\n", @@ -715,30 +715,30 @@ "\n", "\n", "e_23_source\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_23_source->rec1\n", - "\n", - "\n", + "e_23_source->rec2\n", + "\n", + "\n", "\n", "\n", "\n", "e_24_source\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_24_source->rec2\n", - "\n", - "\n", + "e_24_source->rec1\n", + "\n", + "\n", "\n", "\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 6, @@ -990,30 +990,30 @@ "\n", "\n", "e_23_source\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_23_source->rec1\n", - "\n", - "\n", + "e_23_source->rec2\n", + "\n", + "\n", "\n", "\n", "\n", "e_24_source\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_24_source->rec2\n", - "\n", - "\n", + "e_24_source->rec1\n", + "\n", + "\n", "\n", "\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 7, @@ -1027,7 +1027,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 8, "id": "4479e432", "metadata": {}, "outputs": [ @@ -1130,33 +1130,33 @@ "\n", "\n", "e_6_source\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_6_source->rec1\n", - "\n", - "\n", + "e_6_source->rec2\n", + "\n", + "\n", "\n", "\n", "\n", "e_7_source\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_7_source->rec2\n", - "\n", - "\n", + "e_7_source->rec1\n", + "\n", + "\n", "\n", "\n", "\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 15, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -1168,7 +1168,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "47090e24", "metadata": {}, "outputs": [ @@ -1185,57 +1185,57 @@ " viewBox=\"0.00 0.00 44.00 228.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", "\n", "\n", - "\n", + "\n", "\n", - "c\n", - "\n", - "c\n", + "e_0_source\n", + "\n", "\n", - "\n", + "\n", "\n", - "tf2\n", - "\n", - "tf2\n", + "rec1\n", + "\n", + "rec1\n", "\n", - "\n", + "\n", "\n", - "c->tf2\n", - "\n", - "\n", - "\n", + "e_0_source->rec1\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "rec1\n", - "\n", - "rec1\n", + "c\n", + "\n", + "c\n", "\n", "\n", - "\n", + "\n", "rec1->c\n", "\n", "\n", "\n", "\n", - "\n", + "\n", "\n", - "e_2_source\n", - "\n", + "tf2\n", + "\n", + "tf2\n", "\n", - "\n", - "\n", - "e_2_source->rec1\n", - "\n", - "\n", + "\n", + "\n", + "c->tf2\n", + "\n", + "\n", + "\n", "\n", "\n", "\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -1247,7 +1247,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "e36a4734", "metadata": {}, "outputs": [ @@ -1349,10 +1349,10 @@ "\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -1390,8 +1390,8 @@ "end_time": "2025-06-27T17:10:07.118872", "environment_variables": {}, "exception": null, - "input_path": "/Users/pablorodriguezmier/Documents/work/repos/pablormier/corneto/docs/tutorials/carnival/modeling-with-carnival.ipynb", - "output_path": "/Users/pablorodriguezmier/Documents/work/repos/pablormier/corneto/docs/tutorials/carnival/modeling-with-carnival.ipynb", + "input_path": "multi-receptor-integration.ipynb", + "output_path": "multi-receptor-integration.ipynb", "parameters": {}, "start_time": "2025-06-27T17:08:30.009358", "version": "2.6.0" diff --git a/docs/tutorials/carnival/network-sampler-example.ipynb b/docs/tutorials/carnival/network-sampler-example.ipynb index 23640e47f..cee6eed41 100644 --- a/docs/tutorials/carnival/network-sampler-example.ipynb +++ b/docs/tutorials/carnival/network-sampler-example.ipynb @@ -38,37 +38,37 @@ "tags": [] }, "outputs": [ - { - "data": { - "text/html": [], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, { "data": { "text/html": [ "\n", - " \n", - " \n", + "
\n", + " \n", " \n", " \n", - " \n", - "
\n", - " \n", + " \n", " \n", - " \n", - " \n", - "
Installed version:v1.0.0.dev41+774fa03b
Available backends:CVXPY v1.6.6, PICOS v2.6.1
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, COPT, CVXOPT, GLPK, GLPK_MI, GUROBI, HIGHS, OSQP, PROXQP, SCIP, SCIPY, SCS
Graphviz version:v0.20.3
Installed path:/Users/pablorodriguezmier/Documents/work/repos/pablormier/corneto/corneto
Repository:https://github.com/saezlab/corneto
\n", + "
Installed version:v1.0.0rc1
Available backends:CVXPY v1.7.1
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, GUROBI, HIGHS, OSQP, SCIPY, SCS
Plot backend (default):auto -> graphviz
Available plot backends:graphviz v0.21; graphviz-wasm
Installed path:/docs/tutorials/carnival/.pixi/envs/default/lib/python3.11/site-packages/corneto
Repository:https://github.com/saezlab/corneto
\n", "
" + " \n", + " \n", + " " ], "text/plain": [ - "" + "Installed version: v1.0.0rc1\n", + "Available backends: CVXPY v1.7.1\n", + "Default backend (corneto.opt): CVXPY\n", + "Installed solvers: CLARABEL, GUROBI, HIGHS, OSQP, SCIPY, SCS\n", + "Plot backend (default): auto -> graphviz\n", + "Available plot backends: graphviz v0.21; graphviz-wasm\n", + "Installed path: /docs/tutorials/carnival/.pixi/envs/default/lib/python3.11/site-packages/corneto\n", + "Repository: https://github.com/saezlab/corneto" ] }, + "execution_count": 1, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -161,12 +161,12 @@ { "data": { "text/plain": [ - "{'edge_activates': edge_activates: Variable((3251, 1), edge_activates, boolean=True),\n", - " '_dag_layer': _dag_layer: Variable((937, 1), _dag_layer),\n", - " '_flow': _flow: Variable((3251,), _flow),\n", + "{'_flow': _flow: Variable((3251,), _flow),\n", " 'edge_inhibits': edge_inhibits: Variable((3251, 1), edge_inhibits, boolean=True),\n", - " 'const0xf61164977a1fb6a': const0xf61164977a1fb6a: Constant(CONSTANT, NONNEGATIVE, (937, 3251)),\n", - " 'const0x1d35f8e3c1977ecb': const0x1d35f8e3c1977ecb: Constant(CONSTANT, NONNEGATIVE, (937, 3251)),\n", + " 'edge_activates': edge_activates: Variable((3251, 1), edge_activates, boolean=True),\n", + " 'const0x105e54e0ec2cff1b': const0x105e54e0ec2cff1b: Constant(CONSTANT, NONNEGATIVE, (937, 3251)),\n", + " '_dag_layer': _dag_layer: Variable((937, 1), _dag_layer),\n", + " 'const0x10ba9336e862a926': const0x10ba9336e862a926: Constant(CONSTANT, NONNEGATIVE, (937, 3251)),\n", " 'flow': _flow: Variable((3251,), _flow),\n", " 'vertex_value': Expression(AFFINE, UNKNOWN, (937, 1)),\n", " 'vertex_activated': Expression(AFFINE, NONNEGATIVE, (937, 1)),\n", @@ -256,67 +256,238 @@ "output_type": "stream", "text": [ "Unreachable vertices for sample: 0\n", - "Set parameter Username\n", - "Set parameter LicenseID to value 2593994\n", - "Academic license - for non-commercial use only - expires 2025-12-02\n" + "Set parameter Username\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Set parameter LicenseID to value 2775543\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Academic license - for non-commercial use only - expires 2027-02-05\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[INFO] corneto.methods.sampler: [1/30] accepted (total accepted=1) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [2/30] accepted (total accepted=2) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=57, rel.err=0.0556 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [3/30] accepted (total accepted=3) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [4/30] accepted (total accepted=4) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [5/30] accepted (total accepted=5) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [6/30] accepted (total accepted=6) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=58, rel.err=0.0741 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [7/30] accepted (total accepted=7) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=57, rel.err=0.0556 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [8/30] accepted (total accepted=8) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [9/30] accepted (total accepted=9) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=59, rel.err=0.0926 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [10/30] accepted (total accepted=10) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [11/30] accepted (total accepted=11) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [12/30] accepted (total accepted=12) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [13/30] accepted (total accepted=13) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [14/30] accepted (total accepted=14) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=57, rel.err=0.0556 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [15/30] accepted (total accepted=15) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [16/30] accepted (total accepted=16) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [17/30] accepted (total accepted=17) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [18/30] accepted (total accepted=18) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [19/30] accepted (total accepted=19) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [20/30] accepted (total accepted=20) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [21/30] accepted (total accepted=21) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [22/30] accepted (total accepted=22) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [23/30] accepted (total accepted=23) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [24/30] accepted (total accepted=24) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [25/30] accepted (total accepted=25) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [26/30] accepted (total accepted=26) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [27/30] accepted (total accepted=27) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=57, rel.err=0.0556 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [28/30] accepted (total accepted=28) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [29/30] accepted (total accepted=29) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [30/30] accepted (total accepted=30) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: Done. accepted=30, rejected=0, solutions returned=31\n" + "[INFO] corneto.methods.sampler: [1/30] accepted (total accepted=1) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[INFO] corneto.methods.sampler: [2/30] accepted (total accepted=2) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + "[INFO] corneto.methods.sampler: [2/30] accepted (total accepted=2) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=57, rel.err=0.0556 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [3/30] accepted (total accepted=3) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [4/30] accepted (total accepted=4) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [5/30] accepted (total accepted=5) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=59, rel.err=0.0926 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [6/30] accepted (total accepted=6) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [7/30] accepted (total accepted=7) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [8/30] accepted (total accepted=8) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [9/30] accepted (total accepted=9) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [10/30] accepted (total accepted=10) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=57, rel.err=0.0556 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [11/30] accepted (total accepted=11) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [12/30] accepted (total accepted=12) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=58, rel.err=0.0741 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [13/30] accepted (total accepted=13) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [14/30] accepted (total accepted=14) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [15/30] accepted (total accepted=15) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [16/30] accepted (total accepted=16) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [17/30] accepted (total accepted=17) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [18/30] accepted (total accepted=18) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [19/30] accepted (total accepted=19) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [20/30] accepted (total accepted=20) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [21/30] accepted (total accepted=21) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [22/30] accepted (total accepted=22) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [23/30] accepted (total accepted=23) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [24/30] accepted (total accepted=24) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [25/30] accepted (total accepted=25) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [26/30] accepted (total accepted=26) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [27/30] accepted (total accepted=27) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [28/30] accepted (total accepted=28) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [29/30] accepted (total accepted=29) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[INFO] corneto.methods.sampler: [3/30] accepted (total accepted=3) -> error_sample1_0: val=2.85881e-13, rel.err=0.0003, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + "[INFO] corneto.methods.sampler: [30/30] accepted (total accepted=30) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[INFO] corneto.methods.sampler: [4/30] accepted (total accepted=4) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + "[INFO] corneto.methods.sampler: Done. accepted=30, rejected=0, solutions returned=31\n" ] } ], @@ -631,88 +802,58 @@ " \n", " \n", " \n", - " (JUN)\n", - " (SPI1)\n", - " -0.741935\n", - " 0.444803\n", - " \n", - " \n", - " (PRKCA)\n", - " (NFE2L2)\n", - " -0.741935\n", - " 0.444803\n", - " \n", - " \n", - " (MAPK1)\n", - " (MYC)\n", - " -0.709677\n", - " 0.461414\n", - " \n", - " \n", " (TBK1)\n", " (IRF3)\n", - " -0.677419\n", - " 0.475191\n", + " -0.806452\n", + " 0.401610\n", " \n", " \n", - " (MAPK8)\n", - " (STAT1)\n", - " -0.645161\n", - " 0.486373\n", + " (PRKCA)\n", + " (NFE2L2)\n", + " -0.774194\n", + " 0.425024\n", " \n", " \n", " (SKI)\n", " (SMAD5)\n", - " -0.580645\n", - " 0.501610\n", + " -0.677419\n", + " 0.475191\n", " \n", " \n", - " (CDK1)\n", - " (TP53)\n", - " -0.548387\n", - " 0.505879\n", + " (PPP1CA)\n", + " (MAPK1)\n", + " -0.677419\n", + " 0.475191\n", " \n", " \n", " (NFKB1_RELA)\n", " (EGR1)\n", - " -0.516129\n", - " 0.508001\n", - " \n", - " \n", - " (GSK3B)\n", - " (PRKCE)\n", - " -0.516129\n", - " 0.508001\n", + " -0.645161\n", + " 0.486373\n", " \n", " \n", - " (TICAM2)\n", + " (TRAF2)\n", " (TICAM1)\n", - " -0.516129\n", - " 0.508001\n", + " -0.612903\n", + " 0.495138\n", " \n", " \n", - " (PRKCE)\n", - " (TICAM2)\n", + " (MAPK8)\n", + " (STAT1)\n", " -0.516129\n", " 0.508001\n", " \n", " \n", - " (PPP1CA)\n", - " (MAPK1)\n", + " (CDK1)\n", + " (TP53)\n", " -0.516129\n", " 0.508001\n", " \n", " \n", - " (TRAF2)\n", - " (TICAM1)\n", - " -0.483871\n", - " 0.508001\n", - " \n", - " \n", - " (RELA)\n", - " (EGR1)\n", - " -0.483871\n", - " 0.508001\n", + " (MAPK1)\n", + " (JUN)\n", + " -0.451613\n", + " 0.505879\n", " \n", " \n", " (PPP2CA)\n", @@ -721,127 +862,164 @@ " 0.505879\n", " \n", " \n", - " (MAPK1)\n", - " (JUN)\n", - " -0.451613\n", - " 0.505879\n", - " \n", - " \n", - " (SMURF2)\n", - " (SMAD5)\n", + " (AKAP12)\n", + " (PRKCA)\n", " -0.419355\n", " 0.501610\n", " \n", " \n", - " (KHSRP)\n", - " (SRC)\n", - " -0.387097\n", - " 0.495138\n", + " (PRKCD)\n", + " (MAPK8)\n", + " -0.419355\n", + " 0.501610\n", " \n", " \n", " (CDK1)\n", " (AKAP12)\n", - " -0.387097\n", - " 0.495138\n", + " -0.419355\n", + " 0.501610\n", " \n", " \n", - " (MAPK14)\n", - " (KHSRP)\n", + " (PHLPP1)\n", + " (PRKCA)\n", + " -0.419355\n", + " 0.501610\n", + " \n", + " \n", + " (TICAM2)\n", + " (TICAM1)\n", " -0.387097\n", " 0.495138\n", " \n", " \n", - " (GSK3B)\n", - " (NFKB1_RELA)\n", + " (PRKCE)\n", + " (TICAM2)\n", " -0.387097\n", " 0.495138\n", " \n", " \n", - " (AKAP12)\n", - " (PRKCA)\n", + " (GSK3B)\n", + " (PRKCE)\n", " -0.387097\n", " 0.495138\n", " \n", " \n", - " (PPP2CA)\n", - " (MAPK1)\n", + " (RELA)\n", + " (EGR1)\n", " -0.354839\n", " 0.486373\n", " \n", " \n", - " (PRKCD)\n", - " (MAPK8)\n", - " -0.354839\n", - " 0.486373\n", + " (GSK3B)\n", + " (NFKB1_RELA)\n", + " -0.322581\n", + " 0.475191\n", " \n", " \n", - " (PPP2CA)\n", - " (PRKCD)\n", + " (SMURF2)\n", + " (SMAD5)\n", " -0.290323\n", " 0.461414\n", " \n", " \n", - " (PHLPP1)\n", - " (PRKCA)\n", - " -0.290323\n", - " 0.461414\n", + " (IKBKE)\n", + " (STAT1)\n", + " -0.258065\n", + " 0.444803\n", " \n", " \n", - " (MAPK8)\n", - " (MYC)\n", + " (TBK1)\n", + " (IKBKE)\n", " -0.258065\n", " 0.444803\n", " \n", " \n", - " (GSK3B)\n", - " (RELA)\n", + " (PPP2CA)\n", + " (MAPK1)\n", " -0.258065\n", " 0.444803\n", " \n", " \n", + " (MAPK14)\n", + " (KHSRP)\n", + " -0.258065\n", + " 0.444803\n", + " \n", + " \n", + " (KHSRP)\n", " (SRC)\n", - " (PDPK1)\n", " -0.258065\n", " 0.444803\n", " \n", " \n", + " (PPP2CA)\n", + " (PRKCD)\n", + " -0.225806\n", + " 0.425024\n", + " \n", + " \n", " (PRKCD)\n", " (NFE2L2)\n", - " -0.258065\n", - " 0.444803\n", + " -0.225806\n", + " 0.425024\n", " \n", " \n", - " (MAPK8)\n", - " (IRF3)\n", + " (TBK1)\n", + " (AKT1)\n", " -0.193548\n", " 0.401610\n", " \n", " \n", - " (MAP3K7)\n", - " (MAP2K6)\n", - " 0.225806\n", - " 0.425024\n", + " (PPP1CA)\n", + " (AKT1)\n", + " -0.193548\n", + " 0.401610\n", " \n", " \n", - " (MAP2K6)\n", + " (RAC1)\n", + " (MAPK8)\n", + " -0.064516\n", + " 0.442379\n", + " \n", + " \n", + " (MAP2K4)\n", " (MAPK14)\n", - " 0.225806\n", - " 0.425024\n", + " 0.193548\n", + " 0.401610\n", " \n", " \n", - " (MAPK14)\n", - " (CDKN1A)\n", - " 0.225806\n", - " 0.425024\n", + " (MAP3K7)\n", + " (MAP2K4)\n", + " 0.193548\n", + " 0.401610\n", " \n", " \n", - " (SMAD3)\n", + " (PPP2R5C)\n", + " (PPP2CA)\n", + " 0.193548\n", + " 0.401610\n", + " \n", + " \n", + " (SRC)\n", + " (PPP2CA)\n", " 0.258065\n", " 0.444803\n", " \n", " \n", - " (GSK3B)\n", - " (PHLPP1)\n", + " (AIMP1)\n", + " (SMURF2)\n", + " 0.290323\n", + " 0.461414\n", + " \n", + " \n", + " (MAPK8)\n", + " (AIMP1)\n", + " 0.290323\n", + " 0.461414\n", + " \n", + " \n", + " (MAPK14)\n", + " (SMAD3)\n", " 0.290323\n", " 0.461414\n", " \n", @@ -858,76 +1036,70 @@ " 0.475191\n", " \n", " \n", - " (SMAD3)\n", - " (SMAD4)\n", - " 0.322581\n", - " 0.475191\n", - " \n", - " \n", - " (SRC)\n", - " (PPP2CA)\n", - " 0.387097\n", - " 0.495138\n", + " (MAP3K7)\n", + " (MAP2K6)\n", + " 0.354839\n", + " 0.486373\n", " \n", " \n", - " (MAPK8)\n", - " (AIMP1)\n", - " 0.387097\n", - " 0.495138\n", + " (MAP2K6)\n", + " (MAPK14)\n", + " 0.354839\n", + " 0.486373\n", " \n", " \n", - " (AIMP1)\n", - " (SMURF2)\n", + " (MAPK14)\n", + " (CDKN1A)\n", " 0.387097\n", " 0.495138\n", " \n", " \n", - " (MAP2K4)\n", - " (MAPK14)\n", + " (GSK3B)\n", + " (PHLPP1)\n", " 0.419355\n", " 0.501610\n", " \n", " \n", - " (MAP3K7)\n", - " (MAP2K4)\n", - " 0.419355\n", - " 0.501610\n", + " (SMAD2)\n", + " (SMAD4)\n", + " 0.451613\n", + " 0.505879\n", " \n", " \n", - " (CDK1)\n", - " (PPP1CA)\n", - " 0.516129\n", - " 0.508001\n", + " (GSK3B)\n", + " (CDKN1A)\n", + " 0.451613\n", + " 0.505879\n", " \n", " \n", - " (AKT1)\n", - " (SKI)\n", - " 0.580645\n", - " 0.501610\n", + " (SMAD3)\n", + " (SMAD4)\n", + " 0.548387\n", + " 0.505879\n", " \n", " \n", - " (GSK3B)\n", - " (CDKN1A)\n", - " 0.612903\n", - " 0.495138\n", + " (PML)\n", + " (SMAD3)\n", + " 0.645161\n", + " 0.486373\n", " \n", " \n", - " (SMAD2)\n", - " (SMAD4)\n", + " (CDK1)\n", + " (PPP1CA)\n", " 0.677419\n", " 0.475191\n", " \n", " \n", - " (PML)\n", - " (SMAD3)\n", - " 0.709677\n", - " 0.461414\n", + " (AKT1)\n", + " (SKI)\n", + " 0.677419\n", + " 0.475191\n", " \n", " \n", " (MAPK8)\n", " (CTBP1)\n", - " 0.774194\n", - " 0.425024\n", + " 0.677419\n", + " 0.475191\n", " \n", " \n", "\n", @@ -935,56 +1107,56 @@ ], "text/plain": [ " mean std\n", - "(JUN) (SPI1) -0.741935 0.444803\n", - "(PRKCA) (NFE2L2) -0.741935 0.444803\n", - "(MAPK1) (MYC) -0.709677 0.461414\n", - "(TBK1) (IRF3) -0.677419 0.475191\n", - "(MAPK8) (STAT1) -0.645161 0.486373\n", - "(SKI) (SMAD5) -0.580645 0.501610\n", - "(CDK1) (TP53) -0.548387 0.505879\n", - "(NFKB1_RELA) (EGR1) -0.516129 0.508001\n", - "(GSK3B) (PRKCE) -0.516129 0.508001\n", - "(TICAM2) (TICAM1) -0.516129 0.508001\n", - "(PRKCE) (TICAM2) -0.516129 0.508001\n", - "(PPP1CA) (MAPK1) -0.516129 0.508001\n", - "(TRAF2) (TICAM1) -0.483871 0.508001\n", - "(RELA) (EGR1) -0.483871 0.508001\n", - "(PPP2CA) (TRAF2) -0.451613 0.505879\n", + "(TBK1) (IRF3) -0.806452 0.401610\n", + "(PRKCA) (NFE2L2) -0.774194 0.425024\n", + "(SKI) (SMAD5) -0.677419 0.475191\n", + "(PPP1CA) (MAPK1) -0.677419 0.475191\n", + "(NFKB1_RELA) (EGR1) -0.645161 0.486373\n", + "(TRAF2) (TICAM1) -0.612903 0.495138\n", + "(MAPK8) (STAT1) -0.516129 0.508001\n", + "(CDK1) (TP53) -0.516129 0.508001\n", "(MAPK1) (JUN) -0.451613 0.505879\n", - "(SMURF2) (SMAD5) -0.419355 0.501610\n", - "(KHSRP) (SRC) -0.387097 0.495138\n", - "(CDK1) (AKAP12) -0.387097 0.495138\n", - "(MAPK14) (KHSRP) -0.387097 0.495138\n", - "(GSK3B) (NFKB1_RELA) -0.387097 0.495138\n", - "(AKAP12) (PRKCA) -0.387097 0.495138\n", - "(PPP2CA) (MAPK1) -0.354839 0.486373\n", - "(PRKCD) (MAPK8) -0.354839 0.486373\n", - "(PPP2CA) (PRKCD) -0.290323 0.461414\n", - "(PHLPP1) (PRKCA) -0.290323 0.461414\n", - "(MAPK8) (MYC) -0.258065 0.444803\n", - "(GSK3B) (RELA) -0.258065 0.444803\n", - "(SRC) (PDPK1) -0.258065 0.444803\n", - "(PRKCD) (NFE2L2) -0.258065 0.444803\n", - "(MAPK8) (IRF3) -0.193548 0.401610\n", - "(MAP3K7) (MAP2K6) 0.225806 0.425024\n", - "(MAP2K6) (MAPK14) 0.225806 0.425024\n", - "(MAPK14) (CDKN1A) 0.225806 0.425024\n", - " (SMAD3) 0.258065 0.444803\n", - "(GSK3B) (PHLPP1) 0.290323 0.461414\n", + "(PPP2CA) (TRAF2) -0.451613 0.505879\n", + "(AKAP12) (PRKCA) -0.419355 0.501610\n", + "(PRKCD) (MAPK8) -0.419355 0.501610\n", + "(CDK1) (AKAP12) -0.419355 0.501610\n", + "(PHLPP1) (PRKCA) -0.419355 0.501610\n", + "(TICAM2) (TICAM1) -0.387097 0.495138\n", + "(PRKCE) (TICAM2) -0.387097 0.495138\n", + "(GSK3B) (PRKCE) -0.387097 0.495138\n", + "(RELA) (EGR1) -0.354839 0.486373\n", + "(GSK3B) (NFKB1_RELA) -0.322581 0.475191\n", + "(SMURF2) (SMAD5) -0.290323 0.461414\n", + "(IKBKE) (STAT1) -0.258065 0.444803\n", + "(TBK1) (IKBKE) -0.258065 0.444803\n", + "(PPP2CA) (MAPK1) -0.258065 0.444803\n", + "(MAPK14) (KHSRP) -0.258065 0.444803\n", + "(KHSRP) (SRC) -0.258065 0.444803\n", + "(PPP2CA) (PRKCD) -0.225806 0.425024\n", + "(PRKCD) (NFE2L2) -0.225806 0.425024\n", + "(TBK1) (AKT1) -0.193548 0.401610\n", + "(PPP1CA) (AKT1) -0.193548 0.401610\n", + "(RAC1) (MAPK8) -0.064516 0.442379\n", + "(MAP2K4) (MAPK14) 0.193548 0.401610\n", + "(MAP3K7) (MAP2K4) 0.193548 0.401610\n", + "(PPP2R5C) (PPP2CA) 0.193548 0.401610\n", + "(SRC) (PPP2CA) 0.258065 0.444803\n", + "(AIMP1) (SMURF2) 0.290323 0.461414\n", + "(MAPK8) (AIMP1) 0.290323 0.461414\n", + "(MAPK14) (SMAD3) 0.290323 0.461414\n", "(MAP3K7) (MAP2K3) 0.322581 0.475191\n", "(MAP2K3) (MAPK14) 0.322581 0.475191\n", - "(SMAD3) (SMAD4) 0.322581 0.475191\n", - "(SRC) (PPP2CA) 0.387097 0.495138\n", - "(MAPK8) (AIMP1) 0.387097 0.495138\n", - "(AIMP1) (SMURF2) 0.387097 0.495138\n", - "(MAP2K4) (MAPK14) 0.419355 0.501610\n", - "(MAP3K7) (MAP2K4) 0.419355 0.501610\n", - "(CDK1) (PPP1CA) 0.516129 0.508001\n", - "(AKT1) (SKI) 0.580645 0.501610\n", - "(GSK3B) (CDKN1A) 0.612903 0.495138\n", - "(SMAD2) (SMAD4) 0.677419 0.475191\n", - "(PML) (SMAD3) 0.709677 0.461414\n", - "(MAPK8) (CTBP1) 0.774194 0.425024" + "(MAP3K7) (MAP2K6) 0.354839 0.486373\n", + "(MAP2K6) (MAPK14) 0.354839 0.486373\n", + "(MAPK14) (CDKN1A) 0.387097 0.495138\n", + "(GSK3B) (PHLPP1) 0.419355 0.501610\n", + "(SMAD2) (SMAD4) 0.451613 0.505879\n", + "(GSK3B) (CDKN1A) 0.451613 0.505879\n", + "(SMAD3) (SMAD4) 0.548387 0.505879\n", + "(PML) (SMAD3) 0.645161 0.486373\n", + "(CDK1) (PPP1CA) 0.677419 0.475191\n", + "(AKT1) (SKI) 0.677419 0.475191\n", + "(MAPK8) (CTBP1) 0.677419 0.475191" ] }, "execution_count": 8, @@ -1045,36 +1217,216 @@ "name": "stderr", "output_type": "stream", "text": [ - "[INFO] corneto.methods.sampler: [1/30] accepted (total accepted=1) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [2/30] accepted (total accepted=2) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [3/30] accepted (total accepted=3) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [4/30] accepted (total accepted=4) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [5/30] accepted (total accepted=5) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [6/30] accepted (total accepted=6) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [7/30] accepted (total accepted=7) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [8/30] accepted (total accepted=8) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [9/30] accepted (total accepted=9) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [10/30] accepted (total accepted=10) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [11/30] accepted (total accepted=11) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [12/30] accepted (total accepted=12) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=58, rel.err=0.0741 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [13/30] accepted (total accepted=13) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [14/30] accepted (total accepted=14) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [15/30] accepted (total accepted=15) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [16/30] accepted (total accepted=16) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [17/30] accepted (total accepted=17) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [18/30] accepted (total accepted=18) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [19/30] accepted (total accepted=19) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [20/30] accepted (total accepted=20) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [21/30] accepted (total accepted=21) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [22/30] accepted (total accepted=22) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [23/30] accepted (total accepted=23) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [24/30] accepted (total accepted=24) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [25/30] accepted (total accepted=25) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [26/30] accepted (total accepted=26) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=57, rel.err=0.0556 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [27/30] accepted (total accepted=27) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [28/30] accepted (total accepted=28) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [29/30] accepted (total accepted=29) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=57, rel.err=0.0556 (excluded from tol. check)\n", - "[INFO] corneto.methods.sampler: [30/30] accepted (total accepted=30) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n", + "[INFO] corneto.methods.sampler: [1/30] accepted (total accepted=1) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [2/30] accepted (total accepted=2) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [3/30] accepted (total accepted=3) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [4/30] accepted (total accepted=4) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [5/30] accepted (total accepted=5) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [6/30] accepted (total accepted=6) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [7/30] accepted (total accepted=7) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [8/30] accepted (total accepted=8) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [9/30] accepted (total accepted=9) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [10/30] accepted (total accepted=10) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=57, rel.err=0.0556 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [11/30] accepted (total accepted=11) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [12/30] accepted (total accepted=12) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=57, rel.err=0.0556 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [13/30] accepted (total accepted=13) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=56, rel.err=0.0370 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [14/30] accepted (total accepted=14) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [15/30] accepted (total accepted=15) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [16/30] accepted (total accepted=16) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [17/30] accepted (total accepted=17) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [18/30] accepted (total accepted=18) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [19/30] accepted (total accepted=19) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=59, rel.err=0.0926 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [20/30] accepted (total accepted=20) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [21/30] accepted (total accepted=21) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [22/30] accepted (total accepted=22) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [23/30] accepted (total accepted=23) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [24/30] accepted (total accepted=24) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [25/30] accepted (total accepted=25) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=57, rel.err=0.0556 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [26/30] accepted (total accepted=26) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [27/30] accepted (total accepted=27) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=57, rel.err=0.0556 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [28/30] accepted (total accepted=28) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [29/30] accepted (total accepted=29) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=55, rel.err=0.0185 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] corneto.methods.sampler: [30/30] accepted (total accepted=30) -> error_sample1_0: val=0, rel.err=0.0000, regularization_edge_has_signal: val=54, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "[INFO] corneto.methods.sampler: Done. accepted=30, rejected=0, solutions returned=31\n" ] } @@ -1195,7 +1547,7 @@ " \n", " \n", " \n", - " CDK6\n", + " GTF2I\n", " 0\n", " 0\n", " 0\n", @@ -1219,7 +1571,7 @@ " 0\n", " \n", " \n", - " PIK3CG\n", + " PRKN\n", " 0\n", " 0\n", " 0\n", @@ -1243,7 +1595,7 @@ " 0\n", " \n", " \n", - " SPRY1\n", + " ADRB1\n", " 0\n", " 0\n", " 0\n", @@ -1267,7 +1619,7 @@ " 0\n", " \n", " \n", - " P59595_UBB\n", + " MRTFA\n", " 0\n", " 0\n", " 0\n", @@ -1291,7 +1643,7 @@ " 0\n", " \n", " \n", - " APAF1\n", + " GRB2\n", " 0\n", " 0\n", " 0\n", @@ -1320,19 +1672,19 @@ "" ], "text/plain": [ - " 0 1 2 3 4 5 6 7 8 9 ... 21 22 23 24 25 \\\n", - "CDK6 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 \n", - "PIK3CG 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 \n", - "SPRY1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 \n", - "P59595_UBB 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 \n", - "APAF1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 \n", + " 0 1 2 3 4 5 6 7 8 9 ... 21 22 23 24 25 26 \\\n", + "GTF2I 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", + "PRKN 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", + "ADRB1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", + "MRTFA 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", + "GRB2 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", "\n", - " 26 27 28 29 30 \n", - "CDK6 0 0 0 0 0 \n", - "PIK3CG 0 0 0 0 0 \n", - "SPRY1 0 0 0 0 0 \n", - "P59595_UBB 0 0 0 0 0 \n", - "APAF1 0 0 0 0 0 \n", + " 27 28 29 30 \n", + "GTF2I 0 0 0 0 \n", + "PRKN 0 0 0 0 \n", + "ADRB1 0 0 0 0 \n", + "MRTFA 0 0 0 0 \n", + "GRB2 0 0 0 0 \n", "\n", "[5 rows x 31 columns]" ] @@ -1437,7 +1789,7 @@ " ABI1\n", " 0\n", " 0\n", - " 0\n", + " -1\n", " 0\n", " 0\n", " 0\n", @@ -1537,7 +1889,7 @@ "text/plain": [ " 0 1 2 3 4 5 6 7 8 9 ... 21 22 23 24 25 26 \\\n", "AAK1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", - "ABI1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", + "ABI1 0 0 -1 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", "ABL1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", "ABRAXAS1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", "ACAT1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", @@ -1580,7 +1932,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAiltJREFUeJzt3Qm8VWP7//GreaI0aJCUhEqTSilDhgZKZEiGR0kyhkemMhQZEkoiIjKFMoSIDD1FPUWUBkMRpYEmmlHU/r++9++/9rPPaZ/TOXXOvdZuf96v13qds4dzzn3WWnute13ruq+7QCwWixkAAAAAAADgUUGffwwAAAAAAAAQglIAAAAAAADwjqAUAAAAAAAAvCMoBQAAAAAAAO8ISgEAAAAAAMA7glIAAAAAAADwjqAUAAAAAAAAvCMoBQAAAAAAAO8ISgEAAAAAAMA7glIAAETclClTrECBAu5rbl188cW2zz775Oi9+ht33nln/PFzzz3nnluyZEn8uRNOOMEt+U3t0N8Og9ZZjRo1LCrUFrUpL/aHdKL9VutJ+3Eqyvx5TIXPDgAAuUVQCgCAXDr99NOtZMmStmnTpizfc+GFF1rRokXtt99+s73ZL7/84i6C58yZY1G3Zs0au+6666x27dpWokQJq1ixojVr1sxuueUW27x5c9jNSwlBoDJYihcvbocddpj16tXLVq1alad/67777rO33nrLokr7jtbBE088sdu/47333tutwNPeti4BAOmrQCwWi4XdCAAAUsnYsWPtvPPOs+eff966du260+t//PGHC3icdNJJNn78+D3+ezt27LBt27a5IFfBgrm7n6QMm9dffz1HQZe//vrLChcu7JYgANG9e3dbvHhxPHNI7RC1Rb788ks76qij7Nlnn82QzbOn/vnnH7co6JEXfv/9dzvyyCNt48aNdskll7jAlAKG8+bNs3fffdd9Df7Hv//+263zYsWKWRSoXcpOCzJ+9mR/2FPBPjFgwAA7+OCD3T4zbdo0e/HFF6169er29ddfu4BtXlCG3znnnLPbmU7q4m7dutWKFClihQoVsrz0ww8/uGCctk3VqlXdOtgdCuYNHz7ctXVXn8c9+ezs6boEACC/5O4sBwAAXKbUvvvuay+//HLSoNTbb79tW7ZscdlSe0IXpUHgIa+CM9nJyd8IglH5bXcuxrPzzDPP2NKlS+2///2vtWzZMsNrClQl/l8KYkSZr/0hO6eeeqo1bdrUfX/ppZda+fLlbciQIW7fP//885P+jD4TpUqV8tbGIJMrP4wePdoFngcPHuyCPRoqmNdDPne37Xn92QEAID8xfA8AgFzS0K+zzjrLJk2aZKtXr97pdQWrFLRS8EoZOjfeeKPVr1/fZSuULl3aXdDPnTs3w88EdYLGjBljt99+u8u+UMaJAibJaghNnTrVOnfubAcddJDL6KlWrZpdf/319ueffyZt808//WTt2rVzQYEDDjjAZbpkzs7ISQ2bxJpSao+ypETZM8GQLmVj9O/f3wV3NGQus8suu8z2228/F3TLTV0cPVZmiYYh1atXz/3fRxxxhE2cONF25ccff3TZMkcfffROr2mbJAYAktWUUlbVRRdd5N6rtnfr1s1tw8w1i4IaXitWrLBOnTq57/fff3+3D2zfvj3D73zooYdcgEwBHe1TTZo0cVltu5Jsf9A20Tr59ttv7cQTT3T7jvahBx54YKef//nnn92+qX1BgRXtNx988MEe1alSVqAoqy5xPWi9t2/f3n0egiCtglM33HCD22e1DQ8//HC3LhL3R7VF71M2YrBfJWbiaf0q461SpUrx/WDUqFG7rCmVm+2THX3GFYw67bTTrEyZMu5xMp9//rn7/8uWLevWd4MGDeyRRx6Jt0VZUsH/GyzJPo/aL/T4k08+2elvPPnkk+41Zakl++xktS4nT57svn/zzTeT/n96bcaMGTleJwAA7A6CUgAA7AZdYGuIzKuvvprheQWhdIF/5plnukCDgkEKoujiVZkkN910k82fP99atWrl6jFldvfdd9uECRPcRbLqwGSVmfTaa6+5YYJXXnmlPfrooy7gpK/JMrd0sX3KKae4C3gFKRT8UNBIy56oU6eOC24FgSYN4dJy/PHHuwCO1o+GOibSsDNdYJ999tm7lQmiYVJXXXWVGz6p/0WBLf2uXdXu0tAyrQe1L7c0XK5jx472yiuvuGDUvffea7/++qv7Phn9HW0PBZsUbNG2VkbNU089leF9Ck5oSKHWoba1slsUaNT23x3r1q1z27lhw4bu72mIouplvf/++/H3KDihANLHH39s1157rd122202ffp09749oeCT6H8OaPtrPSjwpfWg7aTAkwJiDz/8sGurPhMKSulz0bt37/jPajsp2HTcccfF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L9GIESOsY8eOduCBB8Zn2tPsfCqA/s477+T21wEAAAAAACAN5Too1axZM1f0/KWXXrIFCxa457p06WIXXHCBlSpVKj/aCAAAAAAAgHQOSv39999Wu3Zte/fdd+2yyy7Lv1YBAAAAAABgr5armlJFihSxv/76K/9aAwAAAAAAgLSQ60LnV199tQ0aNMj++eef/GkRAAAAAAAA9nq5rin1xRdf2KRJk+zDDz+0+vXr71RHaty4cXnZPgAAAAAAAOyFch2U2m+//ezss8/On9YAAAAAAAAgLeQ6KPXss8/mT0sAAAAAAACQNnJdUwoAAAAAAADwniklr7/+ur366qu2dOlS27ZtW4bXZs+evceNAgAAAAAAwN4t15lSw4YNs+7du1ulSpXsq6++smbNmln58uXtp59+slNPPTV/WgkAAAAAAID0Dko9/vjj9tRTT9mjjz5qRYsWtZtvvtk++ugju/baa23Dhg3500oAAAAAAACkd1BKQ/Zatmzpvi9RooRt2rTJfX/RRRfZK6+8kvctBAAAAAAAwF4n1zWlKleubL///rtVr17dDjroIPvss8+sYcOGtnjxYovFYvnTSsTV6DMhz37Xkvs75NnvAgAAAAAAyNdMqZNOOsnGjx/vvldtqeuvv97atGljXbp0sTPPPDO3vw4AAAAAAABpKNeZUqontWPHDvf91Vdf7YqcT58+3U4//XS7/PLL86ONAAAAAAAASPegVMGCBd0SOO+889wCAAAAAAAA5GlQat68eTn+hQ0aNMjxewEAAAAAAJCechSUatSokRUoUMAVMtfX7Gzfvj3XjRg+fLg9+OCDtnLlSlc0/dFHH7VmzZolfe+4cePsvvvus0WLFtnff/9thx56qN1www1u9j8AAAAAAADsRYXONbPeTz/95L6+8cYbdvDBB9vjjz9uX331lVv0/SGHHOJey62xY8da7969rX///jZ79mwXlGrXrp2tXr066fvLlStnt912m82YMcNlcKnYupYPPvgg138bAAAAAAAAEc6Uql69evz7zp0727Bhw6x9+/YZhuxVq1bN7rjjDuvUqVOuGjBkyBDr2bOnCyzJiBEjbMKECTZq1Cjr06fPTu8/4YQTMjy+7rrr7Pnnn7dp06a5YBYAAAAAAAD2kkypRPPnz3eZUpnpuW+//TZXv2vbtm02a9Ysa9269f8aVLCge6xM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2rSpNWvWzIYOHWpbtmxxs/FJ165drWrVqjZw4ED3+LrrrrNWrVrZ4MGDrUOHDjZmzBj78ssv7amnngr5PwEAAAAAAEBOhR6U6tKli61Zs8b69evnipU3atTIJk6cGC9mvnTpUjcjX6Bly5b28ssv2+2332633nqrHXroofbWW29ZvXr1QvwvAAAAAAAAkFJBKdFQvayG602ZMmWn5zp37uyWsGlYYP/+/XcaHhimKLYpqu2iTanbpqi2izaldrtoU+q2Kartok2p3S7alLptimq7aFNqt4s2pW6botou2vR/Cqja+f//HgAAAAAAAPDif+PiAAAAAAAAAE8ISgEAAAAAAMA7glIAAAAAAADwjqAUAAAAAAAA0nP2Pewdli5dmqP3HXTQQfneFgAAAOStX3/91SZNmmTlypWz1q1bW9GiReOvbdmyxQYPHmz9+vULpW07duywggULJn1++fLl9D8BIKKYfQ95Rh2BAgUK7PS8drHgeX39559/LCrUNnVWChUqFHZTAHj0559/2qxZs9yFVd26dTO89tdff9mrr75qXbt2tXT3yy+/2JAhQ9xFZunSpTO8tmHDBrvnnnvsxhtvtEqVKoXWRiAvcEzYtS+++MLatm3r+k1///23Va1a1d566y074ogj3OurVq2yAw44wLZv3+61XRs3brRLL73U3nnnHXecuvzyy9105kHfLqx2parvvvvOnnnmGXvooYcsSrT9otJf1z715JNPeg/ADhs2LEfvu/baa/O9Ldg79qnIUFAKu2/r1q2xTZs2hdqGX375Jfbiiy/GJkyY4NqTaPPmzbG77rrLSzvmzJmTdPnqq69it9xyS6xEiRKx/fffPxaGv//+O3bbbbfFjj/++Fi/fv3ccw888ECsZMmSsaJFi8a6du2607rz4Y8//og988wzse7du8dOOeWUWPv27WO9evWKffzxx7EwrVq1KjZp0qTY+vXr3eOVK1fGBg0aFBs4cGBs3rx5obRp+/btbl116NAhdsQRR8Tq1asX69ixY+z555+P7dixIxYVJ554YmzJkiVhNyP2zz//ZHj82WefxT755JPYtm3bYlGyYcOG2OOPPx5r0qSJt7+5cOHCWPXq1WMFChSIFSxY0B0XdBwNaH/X81Gj47m2oU833HBDrGfPnlm+fvnll8duvvnmWLrvU4EZM2bEbr311tiNN94Y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Xhp/rFRKdQp0QPXp559/ztH7ssrm8NHxLV26tB1++OEu8prVXe2waP0psKBOXk4+kAiHhndp0Ykj2Z1inYx1pzgKd4sz321MzJxIV5dccon9+OOP9tFHH+10ga70agX0a9as6S5sfNDNBX32lW0juqOubKDgLqyGERxwwAHeLxSQc9qfdIND55YbbrjBfQ0u1JUloZsgytbI6q57frjrrrv2iiFQviig//LLL7vzb+L207bTMLpXXnnFa3s+++wzd3GnCwKdU0455RSLUmBKw5u1vn744QcXzDjssMNcFtW///1v1+Ygm9HXMDkFNhT0VVawbsKobdpuOQl2pEvwXFksOaEgQrrTebdx48Yuu61Xr14ZjgkKcup8rIB+dkHHvLR06dIcvS+rIcj5RddS6vcOGjTIlUbQcFXd0Av6VkqcGDp0qAvuRYUC1hpOqBs16UzXySodo6HzidlbQbbnhRdeaPfdd58rB5SWvFSuSgOaZSDs2YiQtWeeecYVAEykGSqCqek1DW3m2fl80AwHH374Yezdd99NOg0n/s+2bdtcwVIVc9TsECqKrUXf67njjz/evcen7IriBjNZhFUsO2p0bKxUqZIrZDpo0CA35a0mZBg4cKArXKop6X1+/nY1U4wKsus9iOZMP4EvvvjCzfwVTCoQTDCg52bOnBlKm6IqqucaHUfPOOMMN0uSzsP6flfH1vygGYu1/6hArwqs6/sHH3wwFgXZzUgmGzdudMVpfdAMnJpRUuvpnHPOccfxrVu3uvNwMOkOou/zzz9POptxQMf0MD6HS5YscftX4iQywSymvicmCs4pmduS+FwYRerXrFnjClHr7++7776xcePGZXj9pJNOit16663e2zVixAg3o6tmxv3ss8/cc5r4o1GjRm4ihiuuuCKW7ue+TZs2udnC27Rpk+Ga5dVXX3UF2BML2KcjglJ7CXXAr7/+ejf1tBZ9rw67T5lnrkq2aMafa665JtupoPND8+bNY6NGjYo/fv/9910navTo0bFZs2a5Kc579OjhtU2azadKlSrxk13p0qVjEydOjEXB2rVr3eySv/32W/wkqIPlXXfdle3sKPlJB3AFNBo2bOhOcCVKlHDf6zl1inWw96lYsWLuRJeMOnva3zULSpiBoGTrROtRsxL5pg6lgoiZO3iaSeaHH37w2pacBKXCnBEpStsuijP9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BwDsderVq+dmQ7vmmmts4sSJ1rFjR3v66afjhaFfe+0169u3ry1atCjspiKFbNiwwQWlNJNiIg3b0/OJgSogM4JSAIC09umnn7pA1BtvvGEHHHCAu+N39tln21FHHRV20wAAyFMlS5a07777ztUCEgULNPyqTp067vHSpUvt0EMPdYWPAcAHhu8BANKOZt977rnnXDBq48aNdu6557oOuOoh1K1bN+zmAQCQL/76668M9aKKFSvmlsTH//zzT0itA5COmF8aAJBWNFTh8MMPt3nz5rnimyrI+eijj4bdLAAA8p1qx2i4um7IaMiVHm/evNk9DhYA8InhewCAtFK4cGG79tprXaFXDVEIFClSxA1hIFMKALC3z0Ab0KVgssfUVQTgC8P3AABpZdq0aW7YXpMmTVwNDc04dN5554XdLAAA8t3kyZPDbgIAZECmFAAgLW3ZssXGjh3rpiueOXOmuys8ZMgQu+SSS2zfffcNu3kAAOQ5Dd3b1Tnuk08+sVatWnlrE4D0RlAKAJD2Fi5c6LKnXnzxRVu/fr21adPGxo8fH3azAADIUyeccIJ98MEHGYqbZw5InXbaaS54BQA+UOgcAJD2VPj8gQcesOXLl9srr7wSdnMAAMgXv/32m5txdseOHTu99umnn1qHDh3s4osvDqVtANITmVIAAAAAkAY04+xxxx1nxxxzjL3wwgvx56dOneoCUqqzOHz48FDbCCC9kCkFAAAAAGnggAMOsA8//NA+/vhju+666+ITgLRv394uuOACAlIAvCNTCgAAAADSyLx581x9qdNPP93efPNN69Kliz311FNhNwtAGiIoBQAAAABpYOPGjfHv//vf/9qZZ55pnTp1sieffNIKFCgQf6106dIhtRBAuiEoBQAAAABpoGDBghmCT8GlYPCcHuv77du3h9ZGAOmlcNgNAAAAAADkv//85z8ZglIAEDYypQAAAAAAAOAds+8BAAAAQBro16+f/fHHH/HH69atC7U9AECmFAAAAACkgUKFCtmvv/5qFStWjBc0nzNnjtWsWTPspgFIU2RKAQAAAEAayJyPQH4CgLARlAIAAAAAAIB3zL4HAAAAAGlAM+9t2rTJihcv7rKk9Hjz5s22cePGDO/TsD4A8IGaUgAAAACQBgoWLOgCUYEgMJX58fbt20NqIYB0Q6YUAAAAAKSByZMnh90EAMiATCkAAAAAAAB4R6YUAAAAAKTh8L1k9Po///zjrU0A0htBKQAAAABIA2+++WaWr82YMcOGDRtmO3bs8NomAOmN4XsAAAAAkKYWLlxoffr0sXfeeccuvPBCGzBggFWvXj3sZgFIEwXDbgAAAAAAwK9ffvnFevbsafXr13fD9ebMmWPPP/88ASkAXhGUAgAAAIA0sWHDBrvlllusVq1a9s0339ikSZNcllS9evXCbhqANERNKQAAAABIAw888IANGjTIKleubK+88oqdccYZYTcJQJqjphQAAAAApMnseyVKlLDWrVtboUKFsnzfuHHjvLYLQPoiUwoAAAAA0kDXrl2tQIECYTcDAOLIlAIAAAAAAIB3FDoHAAAAAACAdwSlAAAAAAAA4B1BKQAAAAAAAHhHUAoAAAAAAADeEZQCAADYC1188cXWqVOnsJsBAACQJYJSAAAAeRgI0nTrWooWLWq1atWyAQMG2D///OM9uPTII4/Yc889t9t/FwAAIL8Vzve/AAAAkEZOOeUUe/bZZ23r1q323nvv2dVXX21FihSxvn37Znjftm3bXOAqv5QpUybffjcAAEBeIFMKAAAgDxUrVswqV65s1atXtyuvvNJat25t48ePj2c83XvvvXbAAQfY4Ycf7t4/f/58O+mkk6xEiRJWvnx5u+yyy2zz5s3utTvvvNOef/55e/vtt+MZWFOmTHGvLVu2zM4991zbb7/9rFy5cnbGGWfYkiVLssywOuGEE+zaa6+1m2++2b1fbdTvBwAACAtBKQAAgHykYJOyomTSpEm2cOFC++ijj+zdd9+1LVu2WLt27axs2bL2xRdf2GuvvWYff/yx9erVy73/xhtvdIEnZV/9+uuvbmnZsqX9/fff7uf23Xdfmzp1qv33v/+1ffbZx70v+FvJKMBVqlQp+/zzz+2BBx5wQwvVFgAAgDAwfA8AACAfxGIxF4T64IMP7JprrrE1a9a4gNDTTz8dH7Y3cuRI++uvv+yFF15wr8ljjz1mHTt2tEGDBlmlSpVcUEtDAZXZFBg9erTt2LHD/S5lT4mGDCprSplUbdu2TdqmBg0aWP/+/d33hx56qPtbamObNm08rBEAAICMyJQCAADIQ8qAUtZS8eLF7dRTT7UuXbrEh8nVr18/Qx2p7777zho2bBgPSMkxxxzjAk7KqMrK3LlzbdGiRS5TSn9Li4bkKcD1448/ZvlzCkolqlKliq1evXoP/2MAAIDdQ6YUAABAHjrxxBPtiSeecMEn1Y4qXPh/3a3E4NOeUM2pJk2a2EsvvbTTa/vvv3+WP6eC64mUZaUAGAAAQBgISgEAAOQhBZ5q1aqVo/fWqVPHnnvuOVdbKghYqT5UwYIF44XQFdzavn17hp9r3LixjR071ipWrGilS5fOh/8CAAAg/zF8DwAAICQXXnihG+bXrVs3+/rrr23y5Mmu/tRFF13k6klJjRo1bN68eW4439q1a12Rc/1chQoV3Ix7KnS+ePFiV0tKs+stX7487H8LAAAgRwhKAQAAhKRkyZKuEPrvv/9uRx11lJ1zzjl28sknuwLkgZ49e7qsqaZNm7qhecqk0s99+umndtBBB9lZZ53lMq569OjhakqROQUAAFJFgZimhgEAAAAAAAA8IlMKAAAAAAAA3hGUAgAAAAAAgHcEpQAAAAAAAOAdQSkAAAAAAAB4R1AKAAAAAAAA3hGUAgAAAAAAgHcEpQAAAAAAAOAdQSkAAAAAAAB4R1AKAAAAAAAA3hGUAgAAAAAAgHcEpQAAAAAAAOAdQSkAAAAAAACYb/8P2MtrOQW8nacAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAArxZJREFUeJzs3XdYFNf7NvB7l94tKIoColHBrmhsUcEWsRtbNMaeWGPssfzsLTGxJlFUwK5RY0WN0diNvWHvIBawA1bq8/7By35dWXBRmNno/bmuuXTmzO7cuzvM7j575oxGRAREREREREREREQK0qodgIiIiIiIiIiIPj4sShERERERERERkeJYlCIiIiIiIiIiIsWxKEVERERERERERIpjUYqIiIiIiIiIiBTHohQRERERERERESmORSkiIiIiIiIiIlIci1JERERERERERKQ4FqWIiIiIiIiIiEhxLEoRERFlQosWLWBjY4Po6Oh01/nqq69gYWGBe/fuvff2wsPDodFosGjRokzfds+ePdBoNPjzzz/fuu7YsWOh0Wj0lvn6+sLX11dvmUajwdixY3XzFy5cwNixYxEeHp7pfJnN874ePXqE4cOHo0SJErCzs4OTkxO8vLzw9ddf48yZM7r1Fi1aBI1Gk+WP6V0ZytO5c2cUKlRIlTydO3eGRqPRTVZWVihevDjGjBmDV69eZdl27t69i7Fjx+L06dPvfB+pfwN79uzJslyvq1ChAjQaDX755Zd3vo+tW7fq/U29rlChQujcuXOm79PQ485oO0RERGphUYqIiCgTunXrhlevXmHFihUG22NiYrB+/Xo0btwYLi4u7729/Pnz49ChQ2jUqNF731dGunfvjkOHDr11vUOHDqF79+66+QsXLmDcuHFZXsAxNo+xnj17hipVqmDRokXo3r07Nm3ahOXLl+Pbb79FWFiYXuGjUaNGOHToEPLnz59l289qo0aNwvr161Xbvo2NDQ4dOoRDhw5hw4YNqFy5MsaPH49OnTpl2Tbu3r2LcePGvVdRqkKFCjh06BAqVKiQZblSnT59GqdOnQIABAUFvfP9bN26FePGjTPYtn79eowaNSrT92nocWe0HSIiIrWYqx2AiIjov8Tf3x+urq4IDg5G796907SvXLkSL1++RLdu3d5rO0lJSUhMTISVlRWqVKnyXvdljIIFC6JgwYJvXU+J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0U23bt3KugdBRERERERERETvRLWilKWlJXx8fLBjxw695Tt27EC1atUM3qZ69eq4e/cunj17plt25coVaLVaFCxY0OBtrKys4OjoqDcREREREREREZG6VCtKAcDAgQMRGBiI4OBgXLx4EQMGDEBERAR69uwJIKWXU8eOHXXrt2/fHrlz50aXLl1w4cIF7Nu3D0OGDEHXrl0NnrpHRERERERERESmSdUxpdq2bYtHjx5h/PjxiIyMRKlSpbB161Z4eHgAACIjIxEREaFb397eHjt27MB3332HihUrInfu3GjTpg0mTpyo1kMgIiIiIiIiIqJ3oBERUTuEkmJjY+Hk5ISYmBieykdEREREREREHwUlBzo3tvai6ul7RERERERERET0cWJRioiIiIiIiIiIFMeiFBERERERERERKY5FKSIiIiIiIiIiUhyLUkREREREREREpDgWpYiIiIiIiIiISHEsShERERERERERkeJYlCIiIiIiIiIiIsWxKEVERERERERERIpjUYqIiIiIiIiIiBTHohQRERERERERESmORSkiIiIiIiIiIlIci1JERERERERERKQ4c7UDEBERERERERF9SAoN25Il9xP+Y6MsuR9TxZ5SRERERERERESkOBaliIiIiIiIiIhIcSxKERERERERERGR4liUIiIiIiIiIiIixbEoRUREREREREREimNRioiIiIiIiIiIFMeiFBERERERERERKY5FKSIiIiIiIiIiUhyLUkREREREREREpDgWpYiIiIiIiIiISHEsShERERERERERkeJYlCIiIiIiIiIiIsWxKEVERERERERERIpjUYqIiIiIiIiIiBTHohQRERERERERESmORSkiIiIiIiIiIlIci1JERERERERERKQ4FqWIiIiIiIiIiEhxLEoREREREREREZHiWJQiIiIiIiIiIiLFsShFRERERERERESKU70oNWfOHHh6esLa2ho+Pj7Yv39/uuvu2bMHGo0mzXTp0iUFExMRERERERER0ftStSi1atUq9O/fHyNHjsSpU6dQo0YN+Pv7IyIiIsPbXb58GZGRkbqpaNGiCiUmIiIiIiIiIqKsoGpRavr06ejWrRu6d+8Ob29vzJw5E25ubpg7d26Gt8ubNy/y5cunm8zMzBRKTEREREREREREWUG1olR8fDxOnDiB+vXr6y2vX78+Dh48mOFty5cvj/z586NOnTrYvXt3dsYkIiIiIiIiIqJsYK7Whh8+fIikpCS4uLjoLXdxcUFUVJTB2+TPnx/z58+Hj48P4uLisHTpUtSpUwd79uxBzZo1Dd4mLi4OcXFxuvnY2NisexBEREREREREpJpCw7Zk2X2F/9goy+6LjKNaUSqVRqPRmxeRNMtSFS9eHMWLF9fNV61aFbdu3cIvv/ySblFqypQpGDduXNYFJiIiIiIiIiKi96ba6XvOzs4wMzNL0yvq/v37aXpPZaRKlSq4evVquu3Dhw9HTEyMbrp169Y7ZyYiIiIiIiIioqyhWk8pS0tL+Pj4YMeOHWjRooVu+Y4dO9CsWTOj7+fUqVPInz9/uu1WVlawsrJ6r6xEREREREREHzueKkdZTdXT9wYOHIivv/4aFStWRNWqVTF//nxERESgZ8+eAFJ6Od25cwdLliwBAMycOROFChVCyZIlER8fj2XLlmHt2rVYu3atmg+DiIiIiIiIiIgySdWiVNu2bfHo0SOMHz8ekZGRKFWqFLZu3QoPDw8AQGRkJCIiInTrx8fHY/Dgwbhz5w5sbGxQsmRJbNmyBQ0bNlTrIRARERERERER0TtQfaDz3r17o3fv3gbbFi1apDc/dOhQDB06VIFURERERERERESUnVQvShEREREREVHWM8Xxf0wxE5B1uUwxE8Dxm8h0qXb1PSIiIiIiIiIi+nixKEVERERERERERIpjUYqIiIiIiIiIiBTHohQRERERERERESmOA50TEREREZFBpjjQsilmAkxzoGwiIlPHnlJERERERERERKQ4FqWIiIiIiIiIiEhxLEoREREREREREZHiWJQiIiIiIiIiIiLFsShFRERERERERESK49X3iIiIiOijY4pXSjPVq8oRERFlF/aUIiIiIiIiIiIixb1TT6no6GgcPXoU9+/fR3Jysl5bx44dsyQYERERERERERF9uDJdlAoJCcFXX32F58+fw8HBARqNRtem0WhYlCIiIiIiIiIiorfKdFFq0KBB6Nq1KyZPngxbW9vsyEREREREHwiOk0RERETpyfSYUnfu3EG/fv1YkCIiIiIiIiIioneW6aLU559/juPHj2dHFiIiIiIiIiIi+khk+vS9Ro0aYciQIbhw4QJKly4NCwsLvfamTZtmWTgiIiIiIiIiIvowZboo9c033wAAxo8fn6ZNo9EgKSnp/VMRERERUaZx/CYiIiL6L8l0USo5OTk7chARERERERER0Uck02NKERERERERERERva93Kkrt3bsXTZo0wSeffIKiRYuiadOm2L9/f1ZnIyIiIiIiIiKiD1Smi1LLli1D3bp1YWtri379+qFv376wsbFBnTp1sGLFiuzISEREREREREREH5hMjyk1adIkTJ06FQMGDNAt+/777zF9+nRMmDAB7du3z9KARERERERERET04cl0T6kbN26gSZMmaZY3bdoUYWFhWRKKiIiIiIiIiIg+bJkuSrm5uWHnzp1plu/cuRNubm5ZEoqIiIiIiIiIiD5smT59b9CgQejXrx9Onz6NatWqQaPR4MCBA1i0aBFmzZqVHRmJiIiIiIiIiOgDk+miVK9evZAvXz5MmzYNq1evBgB4e3tj1apVaNasWZYHJCIioo9boWFbsuy+wn9slGX3lVW5sjITERER0X9JpotSANCiRQu0aNEiq7MQEREREREREdFHItNjShEREREREREREb0vo3pK5cqVC1euXIGzszNy5swJjUaT7rqPHz/OsnBERERERERERPRhMqooNWPGDDg4OOj+n1FRioiIiIiIiIiI6G2MKkp16tRJ9//OnTtnVxYiIiIiIiIiIvpIZHpMKTMzM9y/fz/N8kePHsHMzCxLQhERERERERER0Yct00UpETG4PC4uDpaWlpkOMGfOHHh6esLa2ho+Pj7Yv3+/Ubf7999/YW5ujnLlymV6m0REREREREREpC6jTt8DgNmzZwMANBoNAgMDYW9vr2tLSkrCvn374OXllamNr1q1Cv3798ecOXNQvXp1zJs3D/7+/rhw4QLc3d3TvV1MTAw6duyIOnXq4N69e5naJhERERERERERqc/ootSMGTMApPSUCggI0DtVz9LSEoUKFUJAQECmNj59+nR069YN3bt3BwDMnDkTf//9N+bOnYspU6ake7sePXqgffv2MDMzw4YNGzK1TSIiIiIiIiIiUp/RRamwsDAAgJ+fH9atW4ecOXO+14bj4+Nx4sQJDBs2TG95/fr1cfDgwXRvt3DhQly/fh3Lli3DxIkT3ysDERERERERERGpw+iiVKrdu3dnyYYfPnyIpKQkuLi46C13cXFBVFSUwdtcvXoVw4YNw/79+2Fublz0uLg4xMXF6eZjY2PfPTQREdEHrtCwLVl2X+E/Nsqy+yIiIiKiD0+mi1IAcPv2bWzatAkRERGIj4/Xa5s+fXqm7kuj0ejNi0iaZUDKuFXt27fHuHHjUKxYMaPvf8qUKRg3blymMhERERERERERUfbKdFFq586daNq0KTw9PXH58mWUKlUK4eHhEBFUqFDB6PtxdnaGmZlZml5R9+/fT9N7CgCePn2K48eP49SpU+jbty8AIDk5GSICc3NzbN++HbVr105zu+HDh2PgwIG6+djYWLi5uRmdk4iIiIiIiIiIsp42szcYPnw4Bg0ahHPnzsHa2hpr167FrVu3UKtWLbRu3dro+7G0tISPjw927Niht3zHjh2oVq1amvUdHR1x9uxZnD59Wjf17NkTxYsXx+nTp1G5cmWD27GysoKjo6PeRERERERERERE6sp0T6mLFy9i5cqVKTc2N8fLly9hb2+P8ePHo1mzZujVq5fR9zVw4EB8/fXXqFixIqpWrYr58+cjIiICPXv2BJBSALtz5w6WLFkCrVaLUqVK6d0+b968sLa2TrOciIiIiIiIiIhMW6aLUnZ2drqBw11dXXH9+nWULFkSQMrg5ZnRtm1bPHr0COPHj0dkZCRKlSqFrVu3wsPDAwAQGRmJiIiIzEYkIiIiIiIiIiITl+miVJUqVfDvv/+iRIkSaNSoEQYNGoSzZ89i3bp1qFKlSqYD9O7dG7179zbYtmjRogxvO3bsWIwdOzbT2yQiIiIiIiIiInVluig1ffp0PHv2DEBKUejZs2dYtWoVPvnkE8yYMSPLAxIRERERERER0Ycn00WpwoUL6/5va2uLOXPmZGkgIiIiIiIiIiL68GX66ntERERERERERETvy6ieUrly5cKVK1fg7OyMnDlzQqPRpLvu48ePsywcERERERERERF9mIwqSs2YMQMODg66/2dUlCIiIiIiIiIiInobo4pSnTp10v2/c+fO2ZWFiIiIiIiIiIg+Epke6NzPzw8dOnRAq1at4OTklB2ZiD5YhYZtybL7Cv+xUZbcDzMZL6tymWImgK+fsUwxE5C1uYiIiIiIlJDpgc5Lly6N//u//0O+fPnQsmVLbNiwAfHx8dmRjYiIiIiIiIiIPlCZLkrNnj0bd+7cwcaNG+Hg4IBOnTohX758+Pbbb7F3797syEhERERERERERB+YTBelAECr1aJ+/fpYtGgR7t27h3nz5uHo0aOoXbt2VucjIiIiIiIiIqIPUKbHlHpdVFQU/vjjDyxbtgxnzpxBpUqVsioXERERERERERF9wDLdUyo2NhYLFy5EvXr14Obmhrlz56JJkya4cuUKjhw5kh0ZiYiIiIiIiIjoA5PpnlIuLi7ImTMn2rRpg8mTJ7N3FBERERERERERZVqmi1IbN25E3bp1odW+03BUREREREREREREmT99r379+khOTsY///yDefPm4enTpwCAu3fv4tmzZ1kekIiIiIiIiIiIPjyZ7il18+ZNNGjQABEREYiLi0O9evXg4OCAqVOn4tWrVwgICMiOnERERERERERE9AHJdE+p77//HhUrVsSTJ09gY2OjW96iRQvs3LkzS8MREREREREREdGHKdM9pQ4cOIB///0XlpaWess9PDxw586dLAtGREREREREREQfrkz3lEpOTkZSUlKa5bdv34aDg0OWhCIiIiIiIiIiog9bpotS9erVw8yZM3XzGo0Gz549w5gxY9CwYcOszEZERERERERERB+oTJ++N2PGDPj5+aFEiRJ49eoV2rdvj6tXr8LZ2RkrV67MjoxERERERERERPSByXRRytXVFadPn8bKlStx8uRJJCcno1u3bvjqq6/0Bj7/EBQatiVL7if8x0ZZcj9A1mUCsi6XKWYCTPP1IyIiIiIiIqIUmS5KAYCNjQ26du2Krl27ZnUeIiIiIiIiIiL6CGS6KLVr1y6sW7cO4eHh0Gg0KFy4MFq2bImaNWtmRz4iIiIiIiIiIvoAZWqg8549e6Ju3bpYuXIlHj16hAcPHmDZsmXw8/PDd999l10ZiYiIiIiIiIjoA2N0UWr9+vVYuHAhgoOD8fDhQxw6dAiHDx/GgwcPsGDBAsyfPx+bNm3KzqxERERERERERPSBMLootXDhQgwcOBCdO3eGRqP53x1otejatSv69++PoKCgbAlJREREREREREQfFqOLUidPnkSLFi3SbW/ZsiVOnDiRJaGIiIiIiIiIiOjDZnRR6uHDhyhQoEC67QUKFMCjR4+yJBQREREREREREX3YjC5KxcfHw9LSMt12c3NzxMfHZ0koIiIiIiIiIiL6sJlnZuVRo0bB1tbWYNuLFy+yJBAREREREREREX34jC5K1axZE5cvX37rOkRERERERERERG9jdFFqz5492RiDiIiIiIiIiIg+JkaPKUVERERERERERJRVWJQiIiIiIiIiIiLFqV6UmjNnDjw9PWFtbQ0fHx/s378/3XUPHDiA6tWrI3fu3LCxsYGXlxdmzJihYFoiIiIiIiIiIsoKmbr6XlZbtWoV+vfvjzlz5qB69eqYN28e/P39ceHCBbi7u6dZ387ODn379kWZMmVgZ2eHAwcOoEePHrCzs8O3336rwiMgIiIiIiIiIqJ3oWpPqenTp6Nbt27o3r07vL29MXPmTLi5uWHu3LkG1y9fvjzatWuHkiVLolChQujQoQM+//zzDHtXERERERERERGR6TGqp9SZM2eMvsMyZcoYtV58fDxOnDiBYcOG6S2vX78+Dh48aNR9nDp1CgcPHsTEiRONzkdEREREREREROozqihVrlw5aDQaiAg0Gk2G6yYlJRm14YcPHyIpKQkuLi56y11cXBAVFZXhbQsWLIgHDx4gMTERY8eORffu3dNdNy4uDnFxcbr52NhYo/IREREREREREVH2Mer0vbCwMNy4cQNhYWFYu3YtPD09MWfOHJw6dQqnTp3CnDlzUKRIEaxduzbTAd4schlT+Nq/fz+OHz+OgIAAzJw5EytXrkx33SlTpsDJyUk3ubm5ZTojERERERERERFlLaN6Snl4eOj+37p1a8yePRsNGzbULStTpgzc3NwwatQoNG/e3KgNOzs7w8zMLE2vqPv376fpPfUmT09PAEDp0qVx7949jB07Fu3atTO47vDhwzFw4EDdfGxsLAtTREREREREREQqy/RA52fPntUVhV7n6emJCxcuGH0/lpaW8PHxwY4dO/SW79ixA9WqVTP6fkRE7/S8N1lZWcHR0VFvIiIiIiIiIiIidRnVU+p13t7emDhxIoKCgmBtbQ0gZdymiRMnwtvbO1P3NXDgQHz99deoWLEiqlativnz5yMiIgI9e/YEkNLL6c6dO1iyZAkA4Pfff4e7uzu8vLwAAAcOHMAvv/yC7777LrMPg4iIiIiIiIiIVJTpolRAQACaNGkCNzc3lC1bFgAQGhoKjUaDzZs3Z+q+2rZti0ePHmH8+PGIjIxEqVKlsHXrVt3pgpGRkYiIiNCtn5ycjOHDhyMsLAzm5uYoUqQIfvzxR/To0SOzD4OIiIiIiIiIiFSU6aLUp59+irCwMCxbtgyXLl2CiKBt27Zo37497OzsMh2gd+/e6N27t8G2RYsW6c1/99137BVFRERERERERPQByFRRKiEhAcWLF8fmzZvx7bffZlcmIiIiIiIiIiL6wGVqoHMLCwvExcVBo9FkVx4iIiIiIiIiIvoIZPrqe9999x1++uknJCYmZkceIiIiIiIiIiL6CGR6TKkjR45g586d2L59O0qXLp1mHKl169ZlWTgiIiIiIiIiIvowZboolSNHDrRs2TI7shARERERERER0Uci00WphQsXZkcOIiIiIiIiIiL6iGR6TCkiIiIiIiIiIqL3lemeUgDw559/YvXq1YiIiEB8fLxe28mTJ7MkGBERERERERERfbgy3VNq9uzZ6NKlC/LmzYtTp07h008/Re7cuXHjxg34+/tnR0YiIiIiIiIiIvrAZLooNWfOHMyfPx+//fYbLC0tMXToUOzYsQP9+vVDTExMdmQkIiIiIiIiIqIPTKaLUhEREahWrRoAwMbGBk+fPgUAfP3111i5cmXWpiMiIiIiIiIiog9SpotS+fLlw6NHjwAAHh4eOHz4MAAgLCwMIpK16YiIiIiIiIiI6IOU6aJU7dq1ERISAgDo1q0bBgwYgHr16qFt27Zo0aJFlgckIiIiIiIiIqIPT6avvjd//nwkJycDAHr27IlcuXLhwIEDaNKkCXr27JnlAYmIiIiIiIiI6MOT6aKUVquFVvu/DlZt2rRBmzZtsjQUERERERERERF92IwqSp05c8boOyxTpsw7hyEiIiIiIiIioo+DUUWpcuXKQaPRQESg0WgyXDcpKSlLghERERERERER0YfLqIHOw8LCcOPGDYSFhWHt2rXw9PTEnDlzcOrUKZw6dQpz5sxBkSJFsHbt2uzOS0REREREREREHwCjekp5eHjo/t+6dWvMnj0bDRs21C0rU6YM3NzcMGrUKDRv3jzLQxIRERERERER0YfFqJ5Srzt79iw8PT3TLPf09MSFCxeyJBQREREREREREX3YMl2U8vb2xsSJE/Hq1Svdsri4OEycOBHe3t5ZGo6IiIiIiIiIiD5MRp2+97qAgAA0adIEbm5uKFu2LAAgNDQUGo0GmzdvzvKARERERERERET04cl0UerTTz9FWFgYli1bhkuXLkFE0LZtW7Rv3x52dnbZkZGIiIiIiIiIiD4wmS5KAYCtrS2+/fbbrM5CREREREREREQfiXcqSl25cgV79uzB/fv3kZycrNc2evToLAlGREREREREREQfrkwXpRYsWIBevXrB2dkZ+fLlg0aj0bVpNBoWpYiIiIiIiIiI6K0yXZSaOHEiJk2ahB9++CE78hARERERERER0UdAm9kbPHnyBK1bt86OLERERERERERE9JHIdFGqdevW2L59e3ZkISIiIiIiIiKij0SmT9/75JNPMGrUKBw+fBilS5eGhYWFXnu/fv2yLBwREREREREREX2YMl2Umj9/Puzt7bF3717s3btXr02j0bAoRUREREREREREb5XpolRYWFh25CAiIiIiIiIioo9IpseUIiIiIiIiIiIiel+Z7ikFALdv38amTZsQERGB+Ph4vbbp06dnSTAiIiIiIiIiIvpwZbootXPnTjRt2hSenp64fPkySpUqhfDwcIgIKlSokB0ZiYiIiIiIiIjoA5Pp0/eGDx+OQYMG4dy5c7C2tsbatWtx69Yt1KpVC61bt850gDlz5sDT0xPW1tbw8fHB/v3701133bp1qFevHvLkyQNHR0dUrVoVf//9d6a3SURERERERERE6sp0UerixYvo1KkTAMDc3BwvX76Evb09xo8fj59++ilT97Vq1Sr0798fI0eOxKlTp1CjRg34+/sjIiLC4Pr79u1DvXr1sHXrVpw4cQJ+fn5o0qQJTp06ldmHQUREREREREREKsp0UcrOzg5xcXEAAFdXV1y/fl3X9vDhw0zd1/Tp09GtWzd0794d3t7emDlzJtzc3DB37lyD68+cORNDhw5FpUqVULRoUUyePBlFixZFSEhIZh8GERERERERERGpKNNjSlWpUgX//vsvSpQogUaNGmHQoEE4e/Ys1q1bhypVqhh9P/Hx8Thx4gSGDRumt7x+/fo4ePCgUfeRnJyMp0+fIleuXOmuExcXpyuiAUBsbKzRGYmIiIiIiIiIKHtkuig1ffp0PHv2DAAwduxYPHv2DKtWrcInn3yCGTNmGH0/Dx8+RFJSElxcXPSWu7i4ICoqyqj7mDZtGp4/f442bdqku86UKVMwbtw4o3MREREREREREVH2y3RRqnDhwrr/29raYs6cOe8VQKPR6M2LSJplhqxcuRJjx47Fxo0bkTdv3nTXGz58OAYOHKibj42NhZub27sHJiIiIiIiIiKi95bpMaUKFy6MR48epVkeHR2tV7B6G2dnZ5iZmaXpFXX//v00vafetGrVKnTr1g2rV69G3bp1M1zXysoKjo6OehMREREREREREakr00Wp8PBwJCUlpVkeFxeHO3fuGH0/lpaW8PHxwY4dO/SW79ixA9WqVUv3ditXrkTnzp2xYsUKNGrUyPjgRERERERERERkMow+fW/Tpk26///9999wcnLSzSclJWHnzp0oVKhQpjY+cOBAfP3116hYsSKqVq2K+fPnIyIiAj179gSQcurdnTt3sGTJEgApBamOHTti1qxZqFKliq6XlY2NjV4eIiIiIiIiIiIybUYXpZo3bw4gZQyoTp066bVZWFigUKFCmDZtWqY23rZtWzx69Ajjx49HZGQkSpUqha1bt8LDwwMAEBkZiYiICN368+bNQ2JiIvr06YM+ffrolnfq1AmLFi3K1LaJiIiIiIiIiEg9RhelkpOTAQCenp44duwYnJ2dsyRA79690bt3b4Ntbxaa9uzZkyXbJCIiIiIiIiIidWX66nthYWHZkYOIiIiIiIiIiD4iRg90fuTIEfz11196y5YsWQJPT0/kzZsX3377LeLi4rI8IBERERERERERfXiMLkqNHTsWZ86c0c2fPXsW3bp1Q926dTFs2DCEhIRgypQp2RKSiIiIiIiIiIg+LEYXpU6fPo06dero5v/44w9UrlwZCxYswMCBAzF79mysXr06W0ISEREREREREdGHxeii1JMnT+Di4qKb37t3Lxo0aKCbr1SpEm7dupW16YiIiIiIiIiI6INkdFHKxcVFN8h5fHw8Tp48iapVq+ranz59CgsLi6xPSEREREREREREHxyji1INGjTAsGHDsH//fgwfPhy2traoUaOGrv3MmTMoUqRItoQkIiIiIiIiIqIPi7mxK06cOBFffPEFatWqBXt7eyxevBiWlpa69uDgYNSvXz9bQhIRERERERER0YfF6KJUnjx5sH//fsTExMDe3h5mZmZ67WvWrIG9vX2WByQiIiIiIiIiog+P0UWpVE5OTgaX58qV673DEBERERERERHRx8HoMaWIiIiIiIiIiIiyCotSRERERERERESkOBaliIiIiIiIiIhIcSxKERERERERERGR4liUIiIiIiIiIiIixbEoRUREREREREREimNRioiIiIiIiIiIFMeiFBERERERERERKY5FKSIiIiIiIiIiUhyLUkREREREREREpDgWpYiIiIiIiIiISHEsShERERERERERkeJYlCIiIiIiIiIiIsWxKEVERERERERERIpjUYqIiIiIiIiIiBTHohQRERERERERESmORSkiIiIiIiIiIlIci1JERERERERERKQ4FqWIiIiIiIiIiEhxLEoREREREREREZHiWJQiIiIiIiIiIiLFsShFRERERERERESKY1GKiIiIiIiIiIgUx6IUEREREREREREpjkUpIiIiIiIiIiJSnOpFqTlz5sDT0xPW1tbw8fHB/v370103MjIS7du3R/HixaHVatG/f3/lghIRERERERERUZZRtSi1atUq9O/fHyNHjsSpU6dQo0YN+Pv7IyIiwuD6cXFxyJMnD0aOHImyZcsqnJaIiIiIiIiIiLKKqkWp6dOno1u3bujevTu8vb0xc+ZMuLm5Ye7cuQbXL1SoEGbNmoWOHTvCyclJ4bRERERERERERJRVVCtKxcfH48SJE6hfv77e8vr16+PgwYNZtp24uDjExsbqTUREREREREREpC7VilIPHz5EUlISXFxc9Ja7uLggKioqy7YzZcoUODk56SY3N7csu28iIiIiIiIiIno3qg90rtFo9OZFJM2y9zF8+HDExMToplu3bmXZfRMRERERERER0bsxV2vDzs7OMDMzS9Mr6v79+2l6T70PKysrWFlZZdn9ERERERERERHR+1Otp5SlpSV8fHywY8cOveU7duxAtWrVVEpFRERERERERERKUK2nFAAMHDgQX3/9NSpWrIiqVati/vz5iIiIQM+ePQGknHp3584dLFmyRHeb06dPAwCePXuGBw8e4PTp07C0tESJEiXUeAhERERERERERPQOVC1KtW3bFo8ePcL48eMRGRmJUqVKYevWrfDw8AAAREZGIiIiQu825cuX1/3/xIkTWLFiBTw8PBAeHq5kdCIiIiIiIiIieg+qFqUAoHfv3ujdu7fBtkWLFqVZJiLZnIiIiIiIiIiIiLKb6lffIyIiIiIiIiKijw+LUkREREREREREpDgWpYiIiIiIiIiISHEsShERERERERERkeJYlCIiIiIiIiIiIsWxKEVERERERERERIpjUYqIiIiIiIiIiBTHohQRERERERERESmORSkiIiIiIiIiIlIci1JERERERERERKQ4FqWIiIiIiIiIiEhxLEoREREREREREZHiWJQiIiIiIiIiIiLFsShFRERERERERESKY1GKiIiIiIiIiIgUx6IUEREREREREREpjkUpIiIiIiIiIiJSHItSRERERERERESkOBaliIiIiIiIiIhIcSxKERERERERERGR4liUIiIiIiIiIiIixbEoRUREREREREREimNRioiIiIiIiIiIFMeiFBERERERERERKY5FKSIiIiIiIiIiUhyLUkREREREREREpDgWpYiIiIiIiIiISHEsShERERERERERkeJYlCIiIiIiIiIiIsWxKEVERERERERERIpjUYqIiIiIiIiIiBTHohQRERERERERESmORSkiIiIiIiIiIlIci1JERERERERERKQ4FqWIiIiIiIiIiEhxqhel5syZA09PT1hbW8PHxwf79+/PcP29e/fCx8cH1tbWKFy4MAICAhRKSkREREREREREWUXVotSqVavQv39/jBw5EqdOnUKNGjXg7++PiIgIg+uHhYWhYcOGqFGjBk6dOoURI0agX79+WLt2rcLJiYiIiIiIiIjofahalJo+fTq6deuG7t27w9vbGzNnzoSbmxvmzp1rcP2AgAC4u7tj5syZ8Pb2Rvfu3dG1a1f88ssvCicnIiIiIiIiIqL3Ya7WhuPj43HixAkMGzZMb3n9+vVx8OBBg7c5dOgQ6tevr7fs888/R1BQEBISEmBhYZHmNnFxcYiLi9PNx8TEAABiY2PfmjE57sVb1zGGMdsyVlZlArIulylmAvj6GYuZjMd9yjimmAng62csZjIe9ynjmGImgK+fsZjJeNynjGOKmQC+fsZiJuN97PtUaruIZHxHopI7d+4IAPn333/1lk+aNEmKFStm8DZFixaVSZMm6S37999/BYDcvXvX4G3GjBkjADhx4sSJEydOnDhx4sSJEydOnDgpON26dSvD2pBqPaVSaTQavXkRSbPsbesbWp5q+PDhGDhwoG4+OTkZjx8/Ru7cuTPcjjFiY2Ph5uaGW7duwdHR8b3uK6uYYibANHMxk3FMMRNgmrmYyXimmIuZjGOKmQDTzMVMxjPFXMxkHFPMBJhmLmYyninmYibjmGImwDRzfeiZRARPnz6Fq6trhuupVpRydnaGmZkZoqKi9Jbfv38fLi4uBm+TL18+g+ubm5sjd+7cBm9jZWUFKysrvWU5cuR49+AGODo6msxOlMoUMwGmmYuZjGOKmQDTzMVMxjPFXMxkHFPMBJhmLmYyninmYibjmGImwDRzMZPxTDEXMxnHFDMBppnrQ87k5OT01nVUG+jc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xYuVkZGhdevWKTExUUOHDlWPHj2u+C6pM+3YsUN33HGH4uPjtXbtWo0fP17PPfec0UzvvvuuBg0apIULFyopKcl9/ujRo+rRo4d+/PFHrV69+rzLo68UzMS8dE899ZRmzJjh0UHSuXNnox0kvvj8JSQkKCIiQrNmzVJoaKjGjRun999/39j3dpf6vXfv3r29nMSTr86UqlWrlgoLCz02sTh77qoJvva6qo4/7vLqj5kvF594/3Sk9AWvWb9+vT18+HC7bt269q9+9St7xowZ9qFDh0zHqlZFRYW9ZMkS+9577zUdxbiwsDCPavw111zj0ZH0ww8/2CEhISainWPfvn32/v37jWZ47bXXLnj90KFDdvv27R1Kc0pRUZEdHR1tx8TE2JMnT7aXLl1qL1u2zJ40aZIdExNjR0dH20VFRY5m8kV8nX6aoKAge+fOnR7nQkJC7O3btxtKdK5t27bZL774oh0XF2fHxMTYR44cMR3JuIKCAvfHokWL7ODgYLtfv34e5wsKCozle+utt+zQ0FA7NzfXtu1THVIdO3a0W7Zsae/evdtYLl8SEBBg//73v7c3b97scZ5OqXP5YgeJLz5/kZGR9jfffOM+Pnr0qO1yueySkhIjeU531lzow+muc9u2bZfLZRcXFzv++16My+Wy9+7d63EuPDzc3rp1q6FEp/ja66o6/th15I+ZLxdfeP9kppSfa9++vdq3b69p06bpnXfeUWZmpsaMGaOkpCRlZGR4bBdqWkBAgJKSkjx+Unulio+P15o1axQXF6ft27dr8+bNSkhIcF/fuXOno51IZzt48KCee+45LVq0SAcOHJB0qrurf//+evnll1WvXj1H87zwwgtq0KBBtcOpjx49ql69eunw4cOOZvrFL36hdevWacSIERo3bpx7LbplWerZs6dmzJjh3tnmSsbX6aeprKw8Z1e0wMBAVVRUGEp0Lsuy3MOMq6qqTMfxCTfddJPHgGfbtpWdna133nnH4zVvasjysGHDVFJSoqSkJC1btkwvvPCCioqKtHr1akVFRRnJ5GuYiXnpduzYoV//+tfu43bt2ikwMFC7d+821kHii8/fwYMHPbp/wsLCVLt2bR08eNDIZja++n5t++iiHdu2lZyc7HEvVVpaqtTUVI8NLZzepdfXXlfSqV1dz2TbtjZt2qSjR496nPfVVT3SlT0b0xfeP1m+V8OsWbNGEyZM0Jo1a7R//35jb064sFmzZunJJ59Uv379tH79etWrV0+fffaZ+/rLL7+sL774Qjk5OY5nKykpUYcOHbRr1y4NHDhQ1113nWzb1rfffqv58+crJiZG69atc/S15evLTw4cOOAeGNqyZUv+3p0HX6eLc7lcuuuuuzy+Cc7JydGdd95p9JvgM5fvnW7xTklJUa9evdg+WZe2a+KBAwcc3Y6+OuPGjdOrr76q5s2ba/Xq1UYHG/uq48ePa+HChcrIyFBeXp4qKys1depUDRkyRHXq1DEdzycEBASoqKjIY7e0OnXq6Ouvv1ZsbKzBZL71/LlcLuXm5qp+/fruc7fffruys7M9/u45daM+ZMgQvf7667yOL5Gv7tLra6+r05lO/0DmbL62I+f5XMnL904z+f5JUaoG2LVrl+bOnavMzEwdO3bMPWPq2muvNR0NFzBnzhwtX75cV111lSZMmOBRUBk5cqS6d++u+++/3/Fcv/vd7/Txxx/r73//+zkdLEVFRerRo4e6du2qP//5z47mmj17tkaPHq33339fXbp0cXdI7d27l5/2o8bwxW+CR44cqYULF6pp06ZKSUnRoEGDjHZy+pPT2ynPmTNH+fn5Rr4hf+CBBzyOP/jgA/3yl7/0mJMiOV/o9AfMxKyerxbPz2b6+btQwd7EjXpAQID27Nnjc7Ob8NP42utKurQfzEhSs2bNvJzk59uxY4eio6ONzu/0JU6/f1KU8mPZ2dnKzMzU6tWr1bNnT6WkpCgxMZG/TDXQpEmTlJqa6siyuebNm2vWrFnq2bNntddXrFih1NRUbdu2zetZzvbqq68qLS3Nvfxkz549Wr169Tk3VwAuH5fLpaZNm6pt27YXbG83fQPqS6rbTvk3v/mN2rZt63gWXyx0+pvKykotX75cGRkZWrZsmek4xvnba8rU8+drN+q+OlAcP42vva6kUxvXjBkzRkuXLlV5ebm6deum9PR0NWzY0LEMP9X333+vRx99VLm5uaaj+DSn3j8pSvmx0zcKAwcOvOBMltGjRzuYCt4QERGh/Px8R1pKg4OD9f333593WcfOnTsVHx+v0tJSr2epDstPAGclJydf0qwFX7kBNWXnzp3KyspSRkaGjh07pr59++q//uu/2LnNTwwZMuSSHpeRkeHlJPg5fPH587UbdZfLpeLiYo9ll/A/vva6knxzR86LKSgo0M033+zTSwqd4gvvnxSl/Fjz5s0veqNgWZa2bt3qUCJ4i5PrnJs0aaJFixbpjjvuqPb6p59+qv79+2vXrl1ez3Iay08A+DKf2E4Z/xGXy6VmzZqpbdu25x28bFkW/874KF98/nztRt3lcqlu3boXvXcoKSlxKBF+Dl97XUlSixYtlJaWpv79+0uS8vLy1LFjR5WWlhpbwZOenn7B67t27dKUKVMoSsk33j8pSgF+wMmi1NChQ7VlyxatXLnynF3ATp48qZ49e6pFixaaM2eO17Oc5m9LBQBcWQIDAzV69GiNGDFCLVu2dJ+nKOU/zpydNmTIEA0aNMhjkDB8my8+f752o+5yuTRt2jTVrVv3go975JFHHEqEn8PXXleSVKtWLRUWFnr8sDg0NFSbN282tiOny+VSVFTUOfcyp5WVlamoqIiilHzj/ZOilB/74osvVFJSorvuust97i9/+YsmTJigY8eOKSkpSdOnT/cYRAn/5GRRaufOnbrlllsUHBysxx9/3D0wf+PGjZoxY4ZOnjypr776ytg/MgDgaz7//HNlZGQoOzvbYzvl6OhoilJ+5MxdJtetW6fExEQNHTpUPXr0uKK3C/cXvvb8+dqNOjOlagZfe11JvrkjZ2xsrCZPnqy+fftWez0/P1+/+tWvKEr9H9PvnxSl/FivXr3UpUsXPfPMM5Kkb775RjfffLOSk5N13XXX6bXXXtNjjz2mF1980WxQ/Mec3qa0sLBQI0eO1EcffeRu47QsS927d9cbb7yh+Ph4R3IAgD/xpe3o8Z/54YcflJWVpb/85S8qLy/Xxo0bFR4ebjoWLpEvPH++dqPO7ns1g6+9riTf3JGzT58+atGihSZPnlzt9YKCArVt21ZVVVWOZfIXJt4/A7362eFVBQUFevnll93HCxcuVPv27fXWW29JkmJiYjRhwgSKUvhJtm7dqtjYWH344Yc6cOCAvvvuO0lSfHy88VZ4APBltWvX1pAhQzRkyBD3dsqTJk3S2LFjHd+OHv8Zy7Lc26tz0+J/fOH5s21bycnJHjfqpaWlSk1NNXKjTh9CzeBrryup+iWfgwYNcuz3r87EiRN1/Pjx815v3bq1CgsLHUzkP0y8f9Ip5cdCQkL03XffuVs177jjDvXq1UvPP/+8JGnbtm264YYbdOTIEZMxcRncfffdmjNnjqKiorz+e539k7R+/fopPT39gjs8AgCqV1lZqZycHGVkZFCU8nFnLl84Pbg+JSVFvXr1ksvlMh0PF+Frzx/zMOENvK7gDabfPylK+bFmzZpp3rx56tSpk8rKylSvXj3l5OSoa9eukk4t50tISGAXDT/y0ksv6fHHHze6revZMwecXjoIAIDTzhz0mpKSokGDBqlBgwamY+ES8fwBuBRlZWUqKytjOfYZfOH9k6KUH3vsscf0zTffaPLkyVq6dKnmzp2r3bt3u3cZePvttzVt2jR9+eWXhpPibIcPHz7nnG3batSokdauXeseLh4REeF0NIpSAIArjsvlUtOmTdW2bdsLDnV1ckkMLh3PH4CzZWZmasOGDbrttts0cOBAjRs3TlOnTlVFRYXuvPNOLVy4kOK1fOP9k5lSfuzll1/WAw88oISEBIWHh2vu3Lke215mZGSoR48eBhPifCIjI6s9b9u2OnToINu2ZVmWkR0hTq8jPvscAAA11eDBg/m3zo/x/AE4U1pamtLS0nT77bdr/vz5Wrt2rZYuXaqJEyfK5XIpPT1dzz//vGbOnGk6qnG+8P5Jp1QNcOjQIYWHhysgIMDjfElJicLDwz0KVfANV199tW666SY9+eST7nW6tm2rW7dumj17tnv3jISEBMeznb2DRnW7Z0j8tBEAAACA72nZsqUmTpyoAQMG6KuvvlL79u21aNEi9enTR5L04YcfKjU1VT/88IPhpJAoSgFGlJSUaOjQoTp06JDmzZunJk2aSJKCgoJUUFCg1q1bG8vGAEUAAAAA/io4OFhbtmxxbwgWHBysr7/+Wtdcc40kadeuXYqNjVVZWZnJmPg/LN8DDKhfv76WLFmimTNnql27dpoyZYoGDBhgOpYkik0AAAAA/Fd5ebl71Yck1apVS0FBQe7jwMBAI2NSUD2KUoBBI0aMUEJCgh566CHl5OSYjgMAAAAAfm/jxo0qKiqSdGpMyqZNm3T06FFJ0v79+01Gw1lYvgf4gLKyMo0dO1arVq3S4sWL3TOlAAAAAACXzuVyybIsVVfqOH3e1KZSOBdFKQAAAAAAUCNc6gDzZs2aeTkJLgXL9wADjh8/rqeeekpLly5VeXm5unXrpvT0dDVs2NB0NAAAAADwW5GRkYqIiLjgY3JzcylK+QiX6QDAlWjChAnKyspSYmKiBgwYoJUrV2rEiBGmYwEAAACAX7vnnntUWlp63uurVq1S7969HUyEC6FTCjBg8eLFmjNnjvr37y9JGjhwoDp27KjKykoFBAQYTgcAAAAA/qmkpEQPPvigli5des691erVq3Xvvfdq2LBhhtLhbMyUAgyoVauWCgsL1aRJE/e50NBQbd68WTExMQaTAQAAAID/2r17t37961+rQ4cO+utf/+o+v2bNGiUmJio5OVnTp083mBBnYvkeYEBlZaVq1arlcS4wMFAVFRWGEgEAAACA/4uOjtZHH32k3NxcjR49WpK0du1aJSYm6uGHH6Yg5WNYvgcYYNu2kpOTFRwc7D5XWlqq1NRUhYWFuc8tXrzYRDwAAAAA8FstWrTQihUr1LlzZx0+fFhLlizRQw89pBkzZpiOhrOwfA8wICUl5ZIel5mZ6eUkAAAAAFBzHD582P3/n332me6//34lJSVp1qxZsizLfe1iO/TBGRSlAAAAAABAjeByuTyKT6dLHqfP2bYty7JUWVlpJB88sXwPAAAAAADUCLm5uR5FKfg2OqUAQ1atWqUNGzbotttuU8eOHTVr1iylpaXpxIkTSkpKUnp6ukJDQ03HBAAAAADAK9h9DzDgrbfeUvfu3TVz5kx17dpVr7zyip588kklJiaqb9++ys7O1ksvvWQ6JgAAAAD4lfHjx+v48ePu4wMHDhhMg4uhUwowoE2bNnrsscc0atQorVixQvfee69mz56tRx55RJL0zjvvaNy4cdqyZYvhpAAAAADgPwICArRnzx41btxY0qmB5vn5+YqLizOcDNWhUwowYOvWrerdu7ckqVevXrIsS+3atXNfb9++vXbs2GEqHgAAAAD4pbP7bujD8W0UpQADSktLPeZFBQcHKzg42OO4oqLCRDQAAAAAABzB7nuAAZZl6ciRIwoJCXFvSXr06FEdPnxYktz/BQAAAABcuovda50WERFhKCHOxEwpwACXy+WxTenpN8uzjysrK03EAwAAAAC/xL2Wf6FTCjBg1apVpiMAAAAAQI3DvZZ/oVMKAAAAAAAAjqNTCvARtm1r1apVOnHihG6//XZFRkaajgQAAAAAfuXs5XvVsSyLjaV8BEUpwICDBw/qiSee0IYNG3TbbbfpT3/6k+6++26tW7dOktSoUSOtXLlSN954o+GkAAAAAOA/lixZct5r69at0/Tp08WCMd/B8j3AgGHDhmnNmjUaPHiwli9fLpfLJdu2NW3aNLlcLj399NMKDw9XTk6O6agAAAAA4Nc2bdqkcePGKScnRwMHDtQf/vAHNW3a1HQsiKIUYESTJk00f/58JSQkaNeuXYqJiVFubq46d+4sScrLy1Pv3r1VVFRkNigAAAAA+Kndu3drwoQJmjt3rnr27KlXXnlFbdq0MR0LZ3CZDgBciYqLi9WqVStJpwpUISEhiomJcV9v2rSp9u3bZyoeAAAAAPitQ4cO6ZlnnlF8fLz+9a9/6eOPP1ZOTg4FKR/ETCnAgKqqKgUEBLiPAwICPIbxXWwwHwAAAADgXK+++qomT56sq666SgsWLNB9991nOhIugKIUYMjs2bMVHh4uSaqoqFBWVpYaNmwoSTpy5IjJaAAAAADgl8aOHavQ0FDFx8dr7ty5mjt3brWPW7x4scPJUB1mSgEGNG/e/JK6oQoLCx1IAwAAAAA1Q3Jy8iXda2VmZjqQBhdDUQoAAAAAAACOY9A54KN27dplOgIAAAAAAF5DUQrwMUVFRRo1apTi4+NNRwEAAAAAwGsoSgEGHDx4UAMHDlSjRo0UHR2t9PR0VVVVafz48YqLi9P69euVkZFhOiYAAAAAAF7DTCnAgJEjRyonJ0f9+vXTihUr9O2336pnz54qLS3VhAkTlJCQYDoiAAAAAABeRVEKMKBZs2aaM2eOunXrpq1btyo+Pl6jR4/WtGnTTEcDAAAAAMARFKUAA4KCgvTDDz8oOjpaklS7dm3l5eWpTZs2hpMBAAAAAOAMZkoBBlRVVSkoKMh9HBAQoLCwMIOJAAAAAABwVqDpAMCVyLZtJScnKzg4WJJUWlqq1NTUcwpTixcvNhEPAAAAAACvoygFGPDII494HA8aNMhQEgAAAAAAzGCmFOAHdu7cqejoaLlcrLgFAAAAANQM3OECfqB169batm2b6RgAAAAAAFw2FKUAP0BDIwAAAACgpqEoBQAAAAAAAMdRlAIAAAAAAIDjKEoBAAAAAADAcRSlAD9gWZbpCAAAAAAAXFYUpQA/wKBzAAAAAEBNY9nc7QI+b8eOHYqOjlZAQIDpKAAAAAAAXBZ0SgGG7NmzR3/961/1wQcfqKyszOPasWPHNHHiRPdxTEwMBSkAAAAAQI1CpxRgwJdffqkePXqoqqpK5eXluvrqq7VkyRJdf/31kqTi4mJFR0ersrLScFIAAAAAALyDTinAgGeffVYPPPCADhw4oOLiYnXv3l0JCQn63//9X9PRAAAAAABwRKDpAMCV6B//+IfefPNNuVwu1alTR2+++aaaNWumrl276m9/+5uaNm1qOiIAAAAAAF5FUQowpLS01OP46aeflsvlUo8ePZSRkWEoFQAAAAAAzqAoBRjQpk0brVu3TjfeeKPH+TFjxsi2bQ0YMMBQMgAAAAAAnMFMKcCAwYMH67PPPqv22lNPPaWJEyeyhA8AAAAAUKOx+x4AAAAAAAAcR6cUAAAAAAAAHMdMKcCAtm3byrKsiz5uw4YNDqQBAAAAAMB5FKUAA5KSktz/b9u2XnnlFaWmpqp+/frmQgEAAAAA4CBmSgE+oE6dOiooKFBcXJzpKAAAAAAAOIKZUgAAAAAAAHAcRSkAAAAAAAA4jqIUAAAAAAAAHMegc8CA9PR0j+OKigplZWWpYcOGHudHjx7tZCwAAAAAABzDoHPAgNjY2Is+xrIsbd261YE0AAAAAAA4j6IUAAAAAAAAHMdMKcAH2bat7du3m44BAAAAAIDXUJQCDAgICNATTzyhqqqqaq/v3bv3kpb4AQAAAADgryhKAQbYtq3MzEz16NFDJSUl530MAAAAAAA1FUUpwADLsrRy5Urt379ft9xyi/75z39W+xgAAAAAAGoqilKAAbZtKzY2Vp9//rluvfVWdejQQYsXLzYdCwAAAAAAx1CUAgwKDQ3VokWL9Oyzz6pfv36aMGGC6UgAAAAAADiCohTgA8aNG6dly5YpPT1d999/v44cOWI6EgAAAAAAXmXZTFMGHBcQEKA9e/aocePGHuc3b96spKQkHT9+XDt27FBlZaWhhAAAAAAAeBedUoAB56sFt2rVSl988YVuuOEGdt8DAAAAANRodEoBPmr79u1q2rSp6RgAAAAAAHgFnVKAAXl5eR5L886uDZ88eVLr1693OhYAAAAAAI6hUwow4OyZUhEREcrPz1dcXJwkqbi4WNHR0cyUAgAAAADUWHRKAQacXQuurjZMvRgAAAAAUJNRlAJ8lGVZpiMAAAAAAOA1FKUAAAAAAADguEDTAYAr1caNG1VUVCTp1FK9TZs26ejRo5Kk/fv3m4wGAAAAAIDXMegcMMDlcsmyrGrnRp0+b1kWg84BAAAAADUWnVKAAYWFhaYjAAAAAABgFJ1SgB8YOXKkJk6cqIYNG5qOAgAAAADAZUFRCvADERERys/PV1xcnOkoAAAAAABcFuy+B/gBascAAAAAgJqGohQAAAAAAAAcR1EKAAAAAAAAjqMoBQAAAAAAAMdRlAIAAAAAAIDjKEoBfmDQoEGKiIgwHQMAAAAAgMvGstnWCzDmu+++07Jly7Rt2zZZlqXY2FglJSUpLi7OdDQAAAAAALyKohRgyCuvvKLx48erqqpKjRs3lm3b2rdvnwICAvTHP/5RY8aMMR0RAAAAAACvYfkeYMCqVav0/PPP67nnntP+/fu1Z88eFRUVad++fRo7dqzGjh2rNWvWmI4JAAAAAIDX0CkFGNCvXz/Vq1dPs2bNqvb68OHDdeTIES1YsMDhZAAAAAAAOINOKcCAvLw8Pfzww+e9/vDDD2v9+vUOJgIAAAAAwFkUpQADiouL1bx58/Nej42NVVFRkXOBAAAAAABwGEUpwIDS0lLVqlXrvNeDgoJUVlbmYCIAAAAAAJwVaDoAcKWaPXu2wsPDq7125MgRh9MAAAAAAOAsBp0DBjRv3lyWZV30cYWFhQ6kAQAAAADAeRSlAAAAAAAA4DhmSgEAAAAAAMBxFKUAA+6++24dOnTIfZyWlqaDBw+6j3/88Ue1bt3aQDIAAAAAAJzB8j3AgICAAO3Zs0eNGzeWJEVERCg/P19xcXGSpOLiYkVHR6uystJkTAAAAAAAvIZOKcCAs2vB1IYBAAAAAFcailIAAAAAAABwHEUpwADLsmRZ1jnnAAAAAAC4UgSaDgBciWzbVnJysoKDgyVJpaWlSk1NVVhYmCTp5MmTJuMBAAAAAOB1DDoHDEhJSbmkx2VmZno5CQAAAAAAZlCUAgAAAAAAgOOYKQX4qL1795qOAAAAAACA11CUAgyoXbu29u3b5z7u1auX9uzZ4z4uLi5WVFSUiWgAAAAAADiCohRgQGlpqc5cOfvZZ5/pxIkTHo9hZS0AAAAAoCajKAX4KMuyTEcAAAAAAMBrKEoBAAAAAADAcRSlAAMsy/LohDr7GAAAAACAms6yGVwDOM7lcqlu3bruQtTBgwcVEREhl+tUndi2bR0+fFiVlZUmYwIAAAAA4DWBpgMAV6LMzEzTEQAAAAAAMIpOKcAPLFiwQL1791ZYWJjpKAAAAAAAXBYUpQA/EBERofz8fMXFxZmOAgAAAADAZcGgc8APUDsGAAAAANQ0FKUAAAAAAADgOIpSAAAAAAAAcBxFKQAAAAAAADiOohQAAAAAAAAcR1EK8APNmjVTUFCQ6RgAAAAAAFw2ls22XgAAAAAAAHAYnVKAIe+//76GDRump59+Wps2bfK4duDAAd15552GkgEAAAAA4H0UpQAD5s+fr/vuu09FRUX6/PPP1bZtW7399tvu62VlZVq9erXBhAAAAAAAeFeg6QDAlWjKlCn685//rFGjRkmS3n33XaWkpKi0tFRDhw41nA4AAAAAAO+jKAUYsHnzZt1zzz3u4z59+qhhw4bq3bu3ysvLdf/99xtMBwAAAACA91GUAgyIiIhQcXGxYmNj3ec6d+6snJwc3XPPPdq5c6fBdAAAAAAAeB8zpQAD2rVrpw8//PCc8wkJCcrJydG0adOcDwUAAAAAgIMoSgEG/P73v1dISEi11zp37qzly5dr8ODBDqcCAAAAAMA5lm3btukQAAAAAAAAuLLQKQUYYNu2XnvtNXXs2FHt2rXTs88+q9LSUtOxAAAAAABwDEUpwIBJkyZp7NixCgsLU1RUlKZOnarRo0ebjgUAAAAAgGNYvgcYcM011+iJJ57QyJEjJUkrVqxQUlKSTpw4IcuyDKcDAAAAAMD7KEoBBoSEhGjz5s1q2rSppFPL+UJCQrR161Y1adLEcDoAAAAAALyP5XuAAWVlZQoNDXUfW5alWrVq6eTJkwZTAQAAAADgnEDTAYAr1QsvvKDatWu7j8vKypSWlqa6deu6z02dOtVENAAAAAAAvI7le4ABnTt3vujsKMuylJub61AiAAAAAACcRVEKAAAAAAAAjmOmFAAAAAAAABxHUQow5LvvvtN7772nwsJCSdL777+vTp066dZbb1VaWppoYgQAAAAA1GQMOgcMWLJkifr27SuXyyXLsvTf//3fGj58uLp06aKIiAi9+OKLCgwM1DPPPGM6KgAAAAAAXkGnFGBAWlqann76aZWWlmrmzJlKTU3VpEmT9OGHH2r58uV68803lZWVZTomAAAAAABew6BzwIA6deooPz9fLVq0UFVVlWrVqqX8/Hy1adNGkrRt2za1bt1ax48fN5wUAAAAAADvoFMKMODYsWOqU6eOJMnlcik0NFS1a9d2Xw8NDdXJkydNxQMAAAAAwOsoSgEGWJYly7LOewwAAAAAQE3H8j3AAJfLpbp167oLUQcPHlRERIRcrlN1Ytu2dfjwYVVWVpqMCQAAAACA17D7HmBAZmam6QgAAAAAABhFpxQAAAAAAAAcx0wpwIC8vDyPpXln14ZPnjyp7Oxsp2MBAAAAAOAYOqUAAwICArRnzx41btxYkhQREaH8/HzFxcVJkoqLixUdHc1MKQAAAABAjUWnFGDA2bXg6mrD1IsBAAAAADUZRSnAR53emQ8AAAAAgJqIohQAAAAAAAAcF2g6AHCl2rhxo4qKiiSdWqq3adMmHT16VJK0f/9+k9EAAAAAAPA6Bp0DBrhcLlmWdcG5UZZlMegcAAAAAFBj0SkFGFBYWHjRxxw4cMCBJAAAAAAAmEGnFOBDDh06pLfffltz5sxRfn4+nVIAAAAAgBqLQeeAD8jNzdWgQYMUFRWl6dOn66677tJXX31lOhYAAAAAAF7D8j3AkJ07dyorK0sZGRk6duyY+vbtq/Lycr333ntq3bq16XgAAAAAAHgVnVKAAXfffbdat26tjRs3avr06dq9e7emT59uOhYAAAAAAI6hUwow4KOPPtLo0aM1YsQItWzZ0nQcAAAAAAAcR6cUYMCnn36qI0eO6JZbblH79u31xhtvaN++faZjAQAAAADgGHbfAww6fvy4Fi5cqIyMDOXl5amyslJTp07VkCFDVKdOHdPxAAAAAADwGopSgI/497//rTlz5mjevHk6ePCgunfvrv/5n/8xHQsAAAAAAK+gKAX4mMrKSuXk5CgjI4OiFAAAAACgxqIoBQAAAAAAAMcx6BwAAAAAAACOoygFAAAAAAAAx1GUAgAAAAAAgOMoSgEAAAAAAMBxFKUAAABqoBdffFE33XST6RgAAADnRVEKAADgMklOTpZlWbIsS0FBQYqLi9OYMWN07Nixn/05f25xacyYMfr4449/9u8LAADgbYGmAwAAANQkvXr1UmZmpsrLy/Xpp59q2LBhOnbsmGbOnOnxuPLycgUFBXktR3h4uMLDw732+QEAAP5TdEoBAABcRsHBwbrqqqsUExOjhx56SAMHDtTSpUvdHU8ZGRmKi4tTcHCwbNvW9u3bdd999yk8PFwRERHq27eviouLJUlZWVl66aWXVFBQ4O7AysrKkiQdOnRIw4cPV+PGjRUREaE777xTBQUF7hxnd1glJycrKSlJU6ZMUVRUlBo0aKDHH39c5eXlTn55AAAA3OiUAgAA8KLQ0FB34WfLli3Kzs7We++9p4CAAElSUlKSwsLCtHr1alVUVGjkyJHq16+fPvnkE/Xr10///Oc/tWLFCv3973+XJNWtW1e2bSsxMVH169fXBx98oLp162rWrFnq2rWrNm/erPr161ebZdWqVYqKitKqVau0ZcsW9evXTzfddJMeffRRZ74YAAAAZ6AoBQAA4CV5eXmaP3++unbtKkkqKyvTvHnz1KhRI0nSypUr9fXXX6uwsFAxMTGSpHnz5un666/Xl19+qVtvvVXh4eEKDAzUVVdd5f68ubm5+uabb7R3714FBwdLkqZMmaKlS5fq3Xff1fDhw6vNExkZqTfeeEMBAQG69tprlZiYqI8//piiFAAAMILlewAAAJfR8uXLFR4erpCQEHXo0EGdOnXS9OnTJUnNmjVzF6Qk6dtvv1VMTIy7ICVJrVu3Vr169fTtt9+e9/f4xz/+oaNHj6pBgwbu2VHh4eEqLCzU999/f95fd/3117s7tCQpKipKe/fu/U/+uAAAAD8bnVIAAACXUZcuXTRz5kwFBQUpOjraY5h5WFiYx2Nt25ZlWed8jvOdP62qqkpRUVH65JNPzrlWr1698/66swerW5alqqqq8z4eAADAmyhKAQAAXEZhYWGKj4+/pMe2bt1a27dv144dO9zdUhs3btShQ4d03XXXSZJq1aqlyspKj1938803q6ioSIGBgWrevPllzQ8AAOAUlu8BAAAY0q1bN914440aOHCgNmzYoLy8PA0ePFgJCQm65ZZbJEnNmzdXYWGh8vPztX//fp08eVLdunVThw4dlJSUpL/97W/atm2b1q1bp+eff15fffWV4T8VAADApaEoBQAAYIhlWVq6dKkiIyPVqVMndevWTXFxcVq0aJH7Mb/5zW/Uq1cvdenSRY0aNdKCBQtkWZY++OADderUSUOGDFGrVq3Uv39/bdu2Tb/4xS8M/okAAAAunWXbtm06BAAAAAAAAK4sdEoBAAAAAADAcRSlAAAAAAAA4DiKUgAAAAAAAHAcRSkAAAAAAAA4jqIUAAAAAAAAHEdRCgAAAAAAAI6jKAUAAAAAAADHUZQCAAAAAACA4yhKAQAAAAAAwHEUpQAAAAAAAOA4ilIAAAAAAABwHEUpAAAAAAAAOO7/AYJjVx8ztr1GAAAAAElFTkSuQmCC", "text/plain": [ "
" ] diff --git a/docs/tutorials/carnival/network-sampler.ipynb b/docs/tutorials/carnival/network-sampler.ipynb index 6cb2e6126..e0e785247 100644 --- a/docs/tutorials/carnival/network-sampler.ipynb +++ b/docs/tutorials/carnival/network-sampler.ipynb @@ -21,37 +21,37 @@ "id": "4ec1e578-5f40-4cbb-8282-bc1160fb3512", "metadata": {}, "outputs": [ - { - "data": { - "text/html": [], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, { "data": { "text/html": [ "\n", - " \n", - " \n", + "
\n", + " \n", " \n", " \n", - " \n", - "
\n", - " \n", + " \n", " \n", - " \n", - " \n", - "
Installed version:v1.0.0.dev5 (latest stable: v1.0.0-alpha)
Available backends:CVXPY v1.6.4, PICOS v2.6.0
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, CVXOPT, GLOP, GLPK, GLPK_MI, GUROBI, HIGHS, OSQP, PDLP, PROXQP, SCIP, SCIPY, SCS
Graphviz version:v0.20.3
Installed path:/Users/pablorodriguezmier/Documents/work/repos/pablormier/corneto/corneto
Repository:https://github.com/saezlab/corneto
\n", + "
Installed version:v1.0.0rc1
Available backends:CVXPY v1.7.1
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, GUROBI, HIGHS, OSQP, SCIPY, SCS
Plot backend (default):auto -> graphviz
Available plot backends:graphviz v0.21; graphviz-wasm
Installed path:/docs/tutorials/carnival/.pixi/envs/default/lib/python3.11/site-packages/corneto
Repository:https://github.com/saezlab/corneto
\n", "
" + " \n", + " \n", + " " ], "text/plain": [ - "" + "Installed version: v1.0.0rc1\n", + "Available backends: CVXPY v1.7.1\n", + "Default backend (corneto.opt): CVXPY\n", + "Installed solvers: CLARABEL, GUROBI, HIGHS, OSQP, SCIPY, SCS\n", + "Plot backend (default): auto -> graphviz\n", + "Available plot backends: graphviz v0.21; graphviz-wasm\n", + "Installed path: /docs/tutorials/carnival/.pixi/envs/default/lib/python3.11/site-packages/corneto\n", + "Repository: https://github.com/saezlab/corneto" ] }, + "execution_count": 1, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -90,7 +90,7 @@ "data": { "text/plain": [ "[error_sample1_0: Expression(AFFINE, UNKNOWN, ()),\n", - " multi_sample_regularization_edge_has_signal: Expression(AFFINE, NONNEGATIVE, ())]" + " regularization_edge_has_signal: Expression(AFFINE, NONNEGATIVE, ())]" ] }, "execution_count": 3, @@ -115,18 +115,19 @@ { "data": { "text/plain": [ - "{'edge_inhibits': edge_inhibits: Variable((3374, 1), edge_inhibits, boolean=True),\n", - " '_dag_layer': _dag_layer: Variable((970, 1), _dag_layer),\n", - " '_flow': _flow: Variable((3374,), _flow),\n", - " 'edge_activates': edge_activates: Variable((3374, 1), edge_activates, boolean=True),\n", - " 'const0x16b856374e4a9f30': const0x16b856374e4a9f30: Constant(CONSTANT, NONNEGATIVE, (970, 3374)),\n", - " 'const0x72fe108f440b0c6': const0x72fe108f440b0c6: Constant(CONSTANT, NONNEGATIVE, (970, 3374)),\n", - " 'flow': _flow: Variable((3374,), _flow),\n", - " 'vertex_value': Expression(AFFINE, UNKNOWN, (970, 1)),\n", - " 'vertex_activated': Expression(AFFINE, NONNEGATIVE, (970, 1)),\n", - " 'vertex_inhibited': Expression(AFFINE, NONNEGATIVE, (970, 1)),\n", - " 'edge_value': Expression(AFFINE, UNKNOWN, (3374, 1)),\n", - " 'edge_has_signal': Expression(AFFINE, NONNEGATIVE, (3374, 1))}" + "{'_flow': _flow: Variable((3251,), _flow),\n", + " 'edge_inhibits': edge_inhibits: Variable((3251, 1), edge_inhibits, boolean=True),\n", + " 'edge_activates': edge_activates: Variable((3251, 1), edge_activates, boolean=True),\n", + " 'const0x103326ca2e6db1fe': const0x103326ca2e6db1fe: Constant(CONSTANT, NONNEGATIVE, (937, 3251)),\n", + " '_dag_layer': _dag_layer: Variable((937, 1), _dag_layer),\n", + " 'const0x18ac965210dd36c7': const0x18ac965210dd36c7: Constant(CONSTANT, NONNEGATIVE, (937, 3251)),\n", + " 'flow': _flow: Variable((3251,), _flow),\n", + " 'vertex_value': Expression(AFFINE, UNKNOWN, (937, 1)),\n", + " 'vertex_activated': Expression(AFFINE, NONNEGATIVE, (937, 1)),\n", + " 'vertex_inhibited': Expression(AFFINE, NONNEGATIVE, (937, 1)),\n", + " 'edge_value': Expression(AFFINE, UNKNOWN, (3251, 1)),\n", + " 'edge_has_signal': Expression(AFFINE, NONNEGATIVE, (3251, 1)),\n", + " 'vertex_max_depth': _dag_layer: Variable((937, 1), _dag_layer)}" ] }, "execution_count": 4, @@ -281,6 +282,97 @@ "id": "80addaae", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:13 PM: Your problem has 10690 variables, 30607 constraints, and 1 parameters.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:13 PM: It is compliant with the following grammars: DCP, DQCP\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:13 PM: CVXPY will first compile your problem; then, it will invoke a numerical solver to obtain a solution.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:13 PM: Your problem is compiled with the CPP canonicalization backend.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:13 PM: Compiling problem (target solver=GUROBI).\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:13 PM: Reduction chain: CvxAttr2Constr -> Qp2SymbolicQp -> QpMatrixStuffing -> GUROBI\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:13 PM: Applying reduction CvxAttr2Constr\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:13 PM: Applying reduction Qp2SymbolicQp\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:13 PM: Applying reduction QpMatrixStuffing\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:13 PM: Applying reduction GUROBI\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:14 PM: Finished problem compilation (took 9.776e-02 seconds).\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:14 PM: (Subsequent compilations of this problem, using the same arguments, should take less time.)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:14 PM: Invoking solver GUROBI to obtain a solution.\n" + ] + }, { "name": "stdout", "output_type": "stream", @@ -288,1320 +380,2811 @@ "Unreachable vertices for sample: 0\n", "===============================================================================\n", " CVXPY \n", - " v1.6.4 \n", + " v1.7.1 \n", "===============================================================================\n", - "(CVXPY) Apr 10 07:10:17 PM: Your problem has 11092 variables, 31652 constraints, and 1 parameters.\n", - "(CVXPY) Apr 10 07:10:17 PM: It is compliant with the following grammars: DCP, DQCP\n", - "(CVXPY) Apr 10 07:10:17 PM: CVXPY will first compile your problem; then, it will invoke a numerical solver to obtain a solution.\n", - "(CVXPY) Apr 10 07:10:17 PM: Your problem is compiled with the CPP canonicalization backend.\n", "-------------------------------------------------------------------------------\n", " Compilation \n", "-------------------------------------------------------------------------------\n", - "(CVXPY) Apr 10 07:10:17 PM: Compiling problem (target solver=GUROBI).\n", - "(CVXPY) Apr 10 07:10:17 PM: Reduction chain: CvxAttr2Constr -> Qp2SymbolicQp -> QpMatrixStuffing -> GUROBI\n", - "(CVXPY) Apr 10 07:10:17 PM: Applying reduction CvxAttr2Constr\n", - "(CVXPY) Apr 10 07:10:17 PM: Applying reduction Qp2SymbolicQp\n", - "(CVXPY) Apr 10 07:10:17 PM: Applying reduction QpMatrixStuffing\n", - "(CVXPY) Apr 10 07:10:17 PM: Applying reduction GUROBI\n", - "(CVXPY) Apr 10 07:10:17 PM: Finished problem compilation (took 5.276e-02 seconds).\n", - "(CVXPY) Apr 10 07:10:17 PM: (Subsequent compilations of this problem, using the same arguments, should take less time.)\n", "-------------------------------------------------------------------------------\n", " Numerical solver \n", "-------------------------------------------------------------------------------\n", - "(CVXPY) Apr 10 07:10:17 PM: Invoking solver GUROBI to obtain a solution.\n", - "Set parameter Username\n", - "Set parameter LicenseID to value 2593994\n", - "Academic license - for non-commercial use only - expires 2025-12-02\n", - "Set parameter OutputFlag to value 1\n", - "Set parameter QCPDual to value 1\n", - "Gurobi Optimizer version 12.0.1 build v12.0.1rc0 (mac64[arm] - Darwin 24.4.0 24E248)\n", - "\n", - "CPU model: Apple M4 Pro\n", - "Thread count: 12 physical cores, 12 logical processors, using up to 12 threads\n", - "\n", - "Non-default parameters:\n", - "QCPDual 1\n", - "\n", - "Optimize a model with 31652 rows, 11092 columns and 111482 nonzeros\n", - "Model fingerprint: 0xca949f9c\n", - "Variable types: 4344 continuous, 6748 integer (6748 binary)\n", - "Coefficient statistics:\n", - " Matrix range [1e+00, 1e+03]\n", - " Objective range [1e-01, 8e+00]\n", - " Bounds range [1e+00, 1e+00]\n", - " RHS range [1e+00, 1e+03]\n", - "Found heuristic solution: objective 0.0000000\n", - "Presolve removed 18549 rows and 1627 columns\n", - "Presolve time: 0.14s\n", - "Presolved: 13103 rows, 9465 columns, 82774 nonzeros\n", - "Variable types: 3602 continuous, 5863 integer (5853 binary)\n", - "\n", - "Root relaxation: objective -2.060081e+02, 1253 iterations, 0.02 seconds (0.06 work units)\n", - "\n", - " Nodes | Current Node | Objective Bounds | Work\n", - " Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time\n", - "\n", - " 0 0 -206.00811 0 69 0.00000 -206.00811 - - 0s\n", - " 0 0 -202.60774 0 71 0.00000 -202.60774 - - 0s\n", - " 0 0 -202.32031 0 65 0.00000 -202.32031 - - 0s\n", - " 0 0 -202.32031 0 60 0.00000 -202.32031 - - 0s\n", - " 0 0 -202.27031 0 59 0.00000 -202.27031 - - 0s\n", - " 0 0 -202.27031 0 47 0.00000 -202.27031 - - 0s\n", - " 0 0 -202.27031 0 51 0.00000 -202.27031 - - 0s\n", - " 0 0 -202.27031 0 51 0.00000 -202.27031 - - 0s\n", - " 0 0 -202.27031 0 14 0.00000 -202.27031 - - 0s\n", - " 0 0 -202.27031 0 45 0.00000 -202.27031 - - 0s\n", - " 0 0 -202.25364 0 34 0.00000 -202.25364 - - 0s\n", - " 0 0 -202.23697 0 55 0.00000 -202.23697 - - 0s\n", - "H 0 0 -198.0703069 -202.23697 2.10% - 0s\n", - "H 0 0 -198.9703069 -202.22031 1.63% - 0s\n", - " 0 0 -202.22031 0 35 -198.97031 -202.22031 1.63% - 0s\n", - " 0 0 -202.20364 0 35 -198.97031 -202.20364 1.63% - 0s\n", - " 0 0 -202.15364 0 65 -198.97031 -202.15364 1.60% - 0s\n", - "H 0 0 -201.7703069 -202.15364 0.19% - 0s\n", - " 0 0 -202.15364 0 67 -201.77031 -202.15364 0.19% - 0s\n", - " 0 0 -202.10364 0 70 -201.77031 -202.10364 0.17% - 0s\n", - " 0 0 -202.10364 0 68 -201.77031 -202.10364 0.17% - 0s\n", - " 0 0 -202.09531 0 58 -201.77031 -202.09531 0.16% - 0s\n", - " 0 0 -202.07031 0 57 -201.77031 -202.07031 0.15% - 0s\n", - " 0 0 -202.07031 0 51 -201.77031 -202.07031 0.15% - 0s\n", - " 0 0 -202.07031 0 53 -201.77031 -202.07031 0.15% - 0s\n", - " 0 0 -202.07031 0 24 -201.77031 -202.07031 0.15% - 0s\n", - " 0 0 -202.07031 0 26 -201.77031 -202.07031 0.15% - 0s\n", - " 0 0 -202.07031 0 25 -201.77031 -202.07031 0.15% - 0s\n", - " 0 0 -202.07031 0 25 -201.77031 -202.07031 0.15% - 1s\n", - " 0 0 -202.07031 0 37 -201.77031 -202.07031 0.15% - 1s\n", - " 0 0 -202.07031 0 37 -201.77031 -202.07031 0.15% - 1s\n", - " 0 0 -202.07031 0 37 -201.77031 -202.07031 0.15% - 1s\n", - " 0 0 -202.07031 0 37 -201.77031 -202.07031 0.15% - 1s\n", - " 0 2 -202.07031 0 37 -201.77031 -202.07031 0.15% - 1s\n", - "H 28 16 -201.8703069 -201.97031 0.05% 22.7 1s\n", - "H 76 38 -201.9703069 -201.97031 0.00% 17.7 1s\n", - "\n", - "Cutting planes:\n", - " Learned: 2\n", - " Gomory: 5\n", - " Cover: 1\n", - " Implied bound: 26\n", - " Clique: 2\n", - " MIR: 37\n", - " Inf proof: 1\n", - " Zero half: 7\n", - " Mod-K: 2\n", - " RLT: 11\n", - " Relax-and-lift: 6\n", - "\n", - "Explored 93 nodes (8523 simplex iterations) in 1.37 seconds (2.08 work units)\n", - "Thread count was 12 (of 12 available processors)\n", - "\n", - "Solution count 6: -201.97 -201.87 -201.77 ... 0\n", - "No other solutions better than -201.97\n", - "\n", - "Optimal solution found (tolerance 1.00e-04)\n", - "Best objective -2.019703069210e+02, best bound -2.019703069210e+02, gap 0.0000%\n", - "-------------------------------------------------------------------------------\n", - " Summary \n", - "-------------------------------------------------------------------------------\n", - "(CVXPY) Apr 10 07:10:19 PM: Problem status: optimal\n", - "(CVXPY) Apr 10 07:10:19 PM: Optimal value: 1.622e+01\n", - "(CVXPY) Apr 10 07:10:19 PM: Compilation took 5.276e-02 seconds\n", - "(CVXPY) Apr 10 07:10:19 PM: Solver (including time spent in interface) took 1.406e+00 seconds\n", - "error_sample1_0 7.0169713497161865\n", - "multi_sample_regularization_edge_has_signal 92.0\n", - "Sample 1/30: Objective value = 15.9878\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 2/30: Objective value = 16.2013\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 3/30: Objective value = 16.2013\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 4/30: Objective value = 16.1317\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 5/30: Objective value = 16.1711\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 6/30: Objective value = 16.2996\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 93.0000, rel error: 0.0109\n", - "Sample 7/30: Objective value = 16.2228\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 8/30: Objective value = 16.2558\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 9/30: Objective value = 16.1316\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 10/30: Objective value = 15.8947\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 11/30: Objective value = 16.0179\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 12/30: Objective value = 15.8665\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 13/30: Objective value = 16.1839\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 14/30: Objective value = 16.2407\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 15/30: Objective value = 16.1211\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 16/30: Objective value = 16.0665\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 17/30: Objective value = 15.8804\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 18/30: Objective value = 16.2178\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 19/30: Objective value = 16.0880\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 20/30: Objective value = 16.2337\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 21/30: Objective value = 16.2322\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 22/30: Objective value = 15.8936\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 23/30: Objective value = 16.1274\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 24/30: Objective value = 16.0623\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 25/30: Objective value = 15.9696\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 93.0000, rel error: 0.0109\n", - "Sample 26/30: Objective value = 16.0228\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 27/30: Objective value = 15.9609\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 28/30: Objective value = 16.1027\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 29/30: Objective value = 16.2100\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 30/30: Objective value = 16.1709\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Generated 30 alternative solutions\n" + "Set parameter Username\n" ] }, { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789...20212223242526272829
(SMAD3)(MYOD1)0000000000...0000000000
(GRK2)(BDKRB2)0000000000...0000000000
(MAPK14)(MAPKAPK2)0000000000...0000000000
(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR)(FBXW8)0000000000...0000000000
(SLK)(MAP3K5)0000000000...0000000000
\n", - "

5 rows × 30 columns

\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 6 \\\n", - "(SMAD3) (MYOD1) 0 0 0 0 0 0 0 \n", - "(GRK2) (BDKRB2) 0 0 0 0 0 0 0 \n", - "(MAPK14) (MAPKAPK2) 0 0 0 0 0 0 0 \n", - "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 0 0 0 0 0 0 \n", - "(SLK) (MAP3K5) 0 0 0 0 0 0 0 \n", - "\n", - " 7 8 9 ... 20 21 \\\n", - "(SMAD3) (MYOD1) 0 0 0 ... 0 0 \n", - "(GRK2) (BDKRB2) 0 0 0 ... 0 0 \n", - "(MAPK14) (MAPKAPK2) 0 0 0 ... 0 0 \n", - "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 0 0 ... 0 0 \n", - "(SLK) (MAP3K5) 0 0 0 ... 0 0 \n", - "\n", - " 22 23 24 25 26 27 28 \\\n", - "(SMAD3) (MYOD1) 0 0 0 0 0 0 0 \n", - "(GRK2) (BDKRB2) 0 0 0 0 0 0 0 \n", - "(MAPK14) (MAPKAPK2) 0 0 0 0 0 0 0 \n", - "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 0 0 0 0 0 0 \n", - "(SLK) (MAP3K5) 0 0 0 0 0 0 0 \n", - "\n", - " 29 \n", - "(SMAD3) (MYOD1) 0 \n", - "(GRK2) (BDKRB2) 0 \n", - "(MAPK14) (MAPKAPK2) 0 \n", - "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 \n", - "(SLK) (MAP3K5) 0 \n", - "\n", - "[5 rows x 30 columns]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Create a fresh model\n", - "m = CarnivalFlow(lambda_reg=0.1)\n", - "P = m.build(dataset.graph, dataset.data)\n", - "\n", - "# Sample solutions by perturbing edge_has_signal\n", - "edge_results = sample_alternative_solutions(\n", - " problem=P,\n", - " target_variable=P.expr.edge_has_signal,\n", - " percentage=0.10,\n", - " scale=0.03,\n", - " rel_opt_tol=0.05,\n", - " max_samples=30,\n", - ")\n", - "\n", - "# Analyze edge-based results\n", - "df_sols = pd.DataFrame(np.concatenate(edge_results[\"selected_edges\"], axis=1), index=m.processed_graph.E).astype(int)\n", - "print(f\"Generated {df_sols.shape[1]} alternative solutions\")\n", - "df_sols.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "4e55d1fe-475a-413c-ae46-0398a3236f74", - "metadata": {}, - "outputs": [ + "name": "stdout", + "output_type": "stream", + "text": [ + "Set parameter LicenseID to value 2775543\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "Edges with highest variability across solutions:\n" + "Academic license - for non-commercial use only - expires 2027-02-05\n" ] }, { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
meanstd
(PPP2CA)(RB1)0.3000000.466092
(PML)(SMAD3)0.3000000.466092
(MAPK1)(JUN)0.3000000.466092
(GSK3B)(NFKB1_RELA)0.3000000.466092
(MAPK3)(PML)0.3333330.479463
(CTNNB1)(KLF4)0.3333330.479463
(PHLPP1)(STK4)0.3333330.479463
(GSK3B)(CDKN1A)0.3666670.490133
(MAPK3)(GSK3B)0.3666670.490133
(APC_AXIN1_GSK3B)(ROR2)0.4000000.498273
(RARB)(RXRB)0.4000000.498273
(ROR2)(MAPK8)0.4000000.498273
(THRA)(RARB)0.4000000.498273
(PRKCD)(STAT1)0.4000000.498273
(CDK1)(HMGA1)0.4000000.498273
(MAP2K1)0.4000000.498273
(WWTR1)(NKX2-1)0.4000000.498273
(MAP2K1)(MAPK3)0.4000000.498273
(ABL1)(CEBPB)0.4333330.504007
(NFKB1_RELA)(EGR1)0.4666670.507416
(SMAD2)(MEF2A)0.4666670.507416
(TP53)(ETS1)0.5000000.508548
(MAPK3)(ETS1)0.5000000.508548
(RELA)(EGR1)0.5333330.507416
(MAPK14)(MEF2A)0.5333330.507416
(HIPK2)(HMGA1)0.5333330.507416
(JUN)(SPI1)0.5333330.507416
(HIPK2)(TP53)0.5666670.504007
(SMAD3)(CEBPB)0.5666670.504007
(PPP2CA)(PRKCD)0.5666670.504007
(THRA)(RARG)0.6000000.498273
(PRKCD)(MAPK8)0.6000000.498273
(RARG)(RXRB)0.6000000.498273
(SMAD3)(NKX2-1)0.6000000.498273
(CDC25A)(MAPK3)0.6000000.498273
(MAPK8)(STAT1)0.6000000.498273
(CDK1)(CDC25A)0.6000000.498273
(MAPK14)(GSK3B)0.6333330.490133
(CDKN1A)0.6333330.490133
(MAPK1)(APC_AXIN1_GSK3B)0.6666670.479463
(CSNK1D)(WWTR1)0.6666670.479463
(APC_AXIN1_GSK3B)(CSNK1D)0.6666670.479463
(MUC1)(KLF4)0.6666670.479463
(GSK3B)(MUC1)0.6666670.479463
(CDK1)(PML)0.6666670.479463
(TBK1)(IRF3)0.6666670.479463
(MAPK14)(SMAD3)0.7000000.466092
(SMAD3)(SMAD4)0.7000000.466092
(ABL1)(RB1)0.7000000.466092
(PHLPP1)(PRKCA)0.7333330.449776
\n", - "
" - ], - "text/plain": [ - " mean std\n", - "(PPP2CA) (RB1) 0.300000 0.466092\n", - "(PML) (SMAD3) 0.300000 0.466092\n", - "(MAPK1) (JUN) 0.300000 0.466092\n", - "(GSK3B) (NFKB1_RELA) 0.300000 0.466092\n", - "(MAPK3) (PML) 0.333333 0.479463\n", - "(CTNNB1) (KLF4) 0.333333 0.479463\n", - "(PHLPP1) (STK4) 0.333333 0.479463\n", - "(GSK3B) (CDKN1A) 0.366667 0.490133\n", - "(MAPK3) (GSK3B) 0.366667 0.490133\n", - "(APC_AXIN1_GSK3B) (ROR2) 0.400000 0.498273\n", - "(RARB) (RXRB) 0.400000 0.498273\n", - "(ROR2) (MAPK8) 0.400000 0.498273\n", - "(THRA) (RARB) 0.400000 0.498273\n", - "(PRKCD) (STAT1) 0.400000 0.498273\n", - "(CDK1) (HMGA1) 0.400000 0.498273\n", - " (MAP2K1) 0.400000 0.498273\n", - "(WWTR1) (NKX2-1) 0.400000 0.498273\n", - "(MAP2K1) (MAPK3) 0.400000 0.498273\n", - "(ABL1) (CEBPB) 0.433333 0.504007\n", - "(NFKB1_RELA) (EGR1) 0.466667 0.507416\n", - "(SMAD2) (MEF2A) 0.466667 0.507416\n", - "(TP53) (ETS1) 0.500000 0.508548\n", - "(MAPK3) (ETS1) 0.500000 0.508548\n", - "(RELA) (EGR1) 0.533333 0.507416\n", - "(MAPK14) (MEF2A) 0.533333 0.507416\n", - "(HIPK2) (HMGA1) 0.533333 0.507416\n", - "(JUN) (SPI1) 0.533333 0.507416\n", - "(HIPK2) (TP53) 0.566667 0.504007\n", - "(SMAD3) (CEBPB) 0.566667 0.504007\n", - "(PPP2CA) (PRKCD) 0.566667 0.504007\n", - "(THRA) (RARG) 0.600000 0.498273\n", - "(PRKCD) (MAPK8) 0.600000 0.498273\n", - "(RARG) (RXRB) 0.600000 0.498273\n", - "(SMAD3) (NKX2-1) 0.600000 0.498273\n", - "(CDC25A) (MAPK3) 0.600000 0.498273\n", - "(MAPK8) (STAT1) 0.600000 0.498273\n", - "(CDK1) (CDC25A) 0.600000 0.498273\n", - "(MAPK14) (GSK3B) 0.633333 0.490133\n", - " (CDKN1A) 0.633333 0.490133\n", - "(MAPK1) (APC_AXIN1_GSK3B) 0.666667 0.479463\n", - "(CSNK1D) (WWTR1) 0.666667 0.479463\n", - "(APC_AXIN1_GSK3B) (CSNK1D) 0.666667 0.479463\n", - "(MUC1) (KLF4) 0.666667 0.479463\n", - "(GSK3B) (MUC1) 0.666667 0.479463\n", - "(CDK1) (PML) 0.666667 0.479463\n", - "(TBK1) (IRF3) 0.666667 0.479463\n", - "(MAPK14) (SMAD3) 0.700000 0.466092\n", - "(SMAD3) (SMAD4) 0.700000 0.466092\n", - "(ABL1) (RB1) 0.700000 0.466092\n", - "(PHLPP1) (PRKCA) 0.733333 0.449776" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Analyze variability in edge selection\n", - "df_var = pd.concat([df_sols.mean(axis=1), df_sols.std(axis=1)], axis=1)\n", - "df_var.columns = [\"mean\", \"std\"]\n", - "print(\"Edges with highest variability across solutions:\")\n", - "df_var.sort_values(by=\"std\", ascending=False).head(50).sort_values(by=\"mean\")" + "name": "stdout", + "output_type": "stream", + "text": [ + "Set parameter OutputFlag to value 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Set parameter QCPDual to value 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gurobi Optimizer version 12.0.3 build v12.0.3rc0 (mac64[arm] - Darwin 25.5.0 25F84)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU model: Apple M4 Pro\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thread count: 12 physical cores, 12 logical processors, using up to 12 threads\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Non-default parameters:\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "QCPDual 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimize a model with 30607 rows, 10690 columns and 108040 nonzeros\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model fingerprint: 0xf48e83e6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variable types: 4188 continuous, 6502 integer (6502 binary)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Coefficient statistics:\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Matrix range [1e+00, 9e+02]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Objective range [1e-01, 7e+00]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Bounds range [1e+00, 1e+00]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " RHS range [1e+00, 1e+03]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found heuristic solution: objective 0.1000000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Presolve removed 17840 rows and 1466 columns\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Presolve time: 0.24s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Presolved: 12767 rows, 9224 columns, 81311 nonzeros\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variable types: 3504 continuous, 5720 integer (5714 binary)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Root relaxation: objective -1.186277e+02, 1171 iterations, 0.05 seconds (0.07 work units)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Nodes | Current Node | Objective Bounds | Work\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.62771 0 53 0.10000 -118.62771 - - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.51700 0 62 0.10000 -118.51700 - - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -3.7564221 -118.51700 3055% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -76.6465356 -118.51700 54.6% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -76.7465356 -118.51700 54.4% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.21224 0 60 -76.74654 -118.21224 54.0% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -79.0760121 -118.21224 49.5% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -113.3642782 -118.12057 4.20% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.12057 0 55 -113.36428 -118.12057 4.20% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 41 -113.36428 -118.07057 4.15% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -113.4642782 -118.07057 4.06% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 36 -113.46428 -118.07057 4.06% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 33 -113.46428 -118.07057 4.06% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 18 -113.46428 -118.07057 4.06% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 18 -113.46428 -118.07057 4.06% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -117.5705690 -118.07057 0.43% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 18 -117.57057 -118.07057 0.43% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 13 -117.57057 -118.07057 0.43% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 13 -117.57057 -118.07057 0.43% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 2 -117.57057 -118.07057 0.43% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 37 -117.57057 -118.07057 0.43% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 25 -117.57057 -118.07057 0.43% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 20 -117.57057 -118.07057 0.43% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 2 -117.57057 -118.07057 0.43% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -117.8705690 -118.07057 0.17% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 11 -117.87057 -118.07057 0.17% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 11 -117.87057 -118.07057 0.17% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 11 -117.87057 -118.07057 0.17% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 44 -117.87057 -118.07057 0.17% - 2s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -117.9705690 -118.07057 0.08% - 2s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 38 -117.97057 -118.07057 0.08% - 2s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 31 -117.97057 -118.07057 0.08% - 2s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 23 -117.97057 -118.07057 0.08% - 2s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 22 -117.97057 -118.07057 0.08% - 2s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 22 -117.97057 -118.07057 0.08% - 2s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 22 -117.97057 -118.07057 0.08% - 2s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 13 -117.97057 -118.07057 0.08% - 2s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 13 -117.97057 -118.07057 0.08% - 2s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cutting planes:\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Implied bound: 17\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " MIR: 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Inf proof: 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Zero half: 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " RLT: 12\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Relax-and-lift: 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Explored 1 nodes (11239 simplex iterations) in 2.68 seconds (2.40 work units)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thread count was 12 (of 12 available processors)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Solution count 10: -117.971 -117.971 -117.871 ... -76.7465\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "No other solutions better than -117.971\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimal solution found (tolerance 1.00e-04)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best objective -1.179705689649e+02, best bound -1.179705689649e+02, gap 0.0000%\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:16 PM: Problem status: optimal\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:16 PM: Optimal value: 5.400e+00\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:17 PM: Compilation took 9.776e-02 seconds\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:11:17 PM: Solver (including time spent in interface) took 2.977e+00 seconds\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-------------------------------------------------------------------------------\n", + " Summary \n", + "-------------------------------------------------------------------------------\n", + "error_sample1_0 0.0\n", + "regularization_edge_has_signal 54.0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 1/30: Objective value = 5.2910\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 2/30: Objective value = 5.3342\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 3/30: Objective value = 5.2666\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 4/30: Objective value = 5.2464\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 5/30: Objective value = 5.3448\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 6/30: Objective value = 5.1948\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 7/30: Objective value = 5.3077\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 8/30: Objective value = 5.2081\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 9/30: Objective value = 5.3122\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 10/30: Objective value = 5.2652\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 11/30: Objective value = 5.2137\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 12/30: Objective value = 5.3676\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 13/30: Objective value = 5.2529\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 14/30: Objective value = 5.4194\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 15/30: Objective value = 5.2722\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 16/30: Objective value = 5.1633\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 17/30: Objective value = 5.4053\n", + " error_sample1_0: -0.0000, rel error: 315.2032\n", + " > Rejected! (315.2032 >= 0.05)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 18/30: Objective value = 5.2273\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 19/30: Objective value = 5.3283\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 20/30: Objective value = 5.1877\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 21/30: Objective value = 5.2407\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 22/30: Objective value = 5.3266\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 23/30: Objective value = 5.3726\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 24/30: Objective value = 5.3392\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 25/30: Objective value = 5.2540\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 26/30: Objective value = 5.2754\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 27/30: Objective value = 5.2294\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 28/30: Objective value = 5.2531\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 29/30: Objective value = 5.3124\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 30/30: Objective value = 5.3054\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 55.0000, rel error: 0.0185\n", + "Generated 29 alternative solutions\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0123456789...19202122232425262728
(SMAD3)(MYOD1)0000000000...0000000000
(GRK2)(BDKRB2)0000000000...0000000000
(MAPK14)(MAPKAPK2)0000000000...0000000000
(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR)(FBXW8)0000000000...0000000000
(SLK)(MAP3K5)0000000000...0000000000
\n", + "

5 rows × 29 columns

\n", + "
" + ], + "text/plain": [ + " 0 1 2 3 4 5 6 \\\n", + "(SMAD3) (MYOD1) 0 0 0 0 0 0 0 \n", + "(GRK2) (BDKRB2) 0 0 0 0 0 0 0 \n", + "(MAPK14) (MAPKAPK2) 0 0 0 0 0 0 0 \n", + "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 0 0 0 0 0 0 \n", + "(SLK) (MAP3K5) 0 0 0 0 0 0 0 \n", + "\n", + " 7 8 9 ... 19 20 \\\n", + "(SMAD3) (MYOD1) 0 0 0 ... 0 0 \n", + "(GRK2) (BDKRB2) 0 0 0 ... 0 0 \n", + "(MAPK14) (MAPKAPK2) 0 0 0 ... 0 0 \n", + "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 0 0 ... 0 0 \n", + "(SLK) (MAP3K5) 0 0 0 ... 0 0 \n", + "\n", + " 21 22 23 24 25 26 27 \\\n", + "(SMAD3) (MYOD1) 0 0 0 0 0 0 0 \n", + "(GRK2) (BDKRB2) 0 0 0 0 0 0 0 \n", + "(MAPK14) (MAPKAPK2) 0 0 0 0 0 0 0 \n", + "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 0 0 0 0 0 0 \n", + "(SLK) (MAP3K5) 0 0 0 0 0 0 0 \n", + "\n", + " 28 \n", + "(SMAD3) (MYOD1) 0 \n", + "(GRK2) (BDKRB2) 0 \n", + "(MAPK14) (MAPKAPK2) 0 \n", + "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 \n", + "(SLK) (MAP3K5) 0 \n", + "\n", + "[5 rows x 29 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create a fresh model\n", + "m = CarnivalFlow(lambda_reg=0.1)\n", + "P = m.build(dataset.graph, dataset.data)\n", + "\n", + "# Sample solutions by perturbing edge_has_signal\n", + "edge_results = sample_alternative_solutions(\n", + " problem=P,\n", + " target_variable=P.expr.edge_has_signal,\n", + " percentage=0.10,\n", + " scale=0.03,\n", + " rel_opt_tol=0.05,\n", + " max_samples=30,\n", + ")\n", + "\n", + "# Analyze edge-based results\n", + "df_sols = pd.DataFrame(np.concatenate(edge_results[\"selected_edges\"], axis=1), index=m.processed_graph.E).astype(int)\n", + "print(f\"Generated {df_sols.shape[1]} alternative solutions\")\n", + "df_sols.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "4e55d1fe-475a-413c-ae46-0398a3236f74", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Edges with highest variability across solutions:\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
meanstd
(TBK1)(AKT1)0.1724140.384426
(PPP1CA)(AKT1)0.1724140.384426
(MAPK14)(SMAD3)0.1724140.384426
(CASP3)0.2068970.412251
(PRKCA)(TP53)0.2068970.412251
(PPP1CA)(TP53)0.2068970.412251
(TBK1)(RELA)0.2068970.412251
(TAB1)(ROR2)0.2068970.412251
(MAPK8)(TP53)0.2068970.412251
(PRKCD)(MAPK8)0.2068970.412251
(MAP3K7)(MAP2K3)0.2068970.412251
(RELA)(JUN)0.2068970.412251
(MAP2K3)(MAPK14)0.2068970.412251
(TRAF6)(TAB1)0.2068970.412251
(MAPK8)(MYC)0.2413790.435494
(TRAF2)(TICAM1)0.2413790.435494
(PPP2CA)(TRAF2)0.2413790.435494
(GSK3B)(RELA)0.2413790.435494
(AIMP1)(SMURF2)0.2413790.435494
(MAPK8)(AKT1)0.2413790.435494
(AIMP1)0.2413790.435494
(SMURF2)(SMAD5)0.2413790.435494
(ROR2)(MAPK8)0.2413790.435494
(MAP2K6)(MAPK14)0.2413790.435494
(MAP3K7)(MAP2K6)0.2413790.435494
(TBK1)(NFKB1_RELA)0.2758620.454859
(MAPK14)(CDKN1A)0.2758620.454859
(CDK1)(TP53)0.3103450.470824
(MAPK1)(JUN)0.3793100.493804
(MAP3K7)(MAP2K4)0.4137930.501230
(MAP2K4)(MAPK14)0.4137930.501230
(CDK1)(AKAP12)0.4482760.506120
(PHLPP1)(PRKCA)0.4482760.506120
(GSK3B)(PHLPP1)0.4482760.506120
(SMAD3)(SMAD4)0.4482760.506120
(AKAP12)(PRKCA)0.4482760.506120
(RELA)(EGR1)0.4827590.508548
(NFKB1_RELA)(EGR1)0.5172410.508548
(SMAD2)(SMAD4)0.5517240.506120
(GSK3B)(CDKN1A)0.6896550.470824
(PPP1CA)(MAPK1)0.7241380.454859
(CDK1)(PPP1CA)0.7241380.454859
(JUN)(SPI1)0.7586210.435494
(GSK3B)(PRKCE)0.7586210.435494
(PRKCE)(TICAM2)0.7586210.435494
(MAPK8)(STAT1)0.7586210.435494
(MAPK1)(MYC)0.7586210.435494
(AKT1)(SKI)0.7586210.435494
(SKI)(SMAD5)0.7586210.435494
(TICAM2)(TICAM1)0.7586210.435494
\n", + "
" + ], + "text/plain": [ + " mean std\n", + "(TBK1) (AKT1) 0.172414 0.384426\n", + "(PPP1CA) (AKT1) 0.172414 0.384426\n", + "(MAPK14) (SMAD3) 0.172414 0.384426\n", + " (CASP3) 0.206897 0.412251\n", + "(PRKCA) (TP53) 0.206897 0.412251\n", + "(PPP1CA) (TP53) 0.206897 0.412251\n", + "(TBK1) (RELA) 0.206897 0.412251\n", + "(TAB1) (ROR2) 0.206897 0.412251\n", + "(MAPK8) (TP53) 0.206897 0.412251\n", + "(PRKCD) (MAPK8) 0.206897 0.412251\n", + "(MAP3K7) (MAP2K3) 0.206897 0.412251\n", + "(RELA) (JUN) 0.206897 0.412251\n", + "(MAP2K3) (MAPK14) 0.206897 0.412251\n", + "(TRAF6) (TAB1) 0.206897 0.412251\n", + "(MAPK8) (MYC) 0.241379 0.435494\n", + "(TRAF2) (TICAM1) 0.241379 0.435494\n", + "(PPP2CA) (TRAF2) 0.241379 0.435494\n", + "(GSK3B) (RELA) 0.241379 0.435494\n", + "(AIMP1) (SMURF2) 0.241379 0.435494\n", + "(MAPK8) (AKT1) 0.241379 0.435494\n", + " (AIMP1) 0.241379 0.435494\n", + "(SMURF2) (SMAD5) 0.241379 0.435494\n", + "(ROR2) (MAPK8) 0.241379 0.435494\n", + "(MAP2K6) (MAPK14) 0.241379 0.435494\n", + "(MAP3K7) (MAP2K6) 0.241379 0.435494\n", + "(TBK1) (NFKB1_RELA) 0.275862 0.454859\n", + "(MAPK14) (CDKN1A) 0.275862 0.454859\n", + "(CDK1) (TP53) 0.310345 0.470824\n", + "(MAPK1) (JUN) 0.379310 0.493804\n", + "(MAP3K7) (MAP2K4) 0.413793 0.501230\n", + "(MAP2K4) (MAPK14) 0.413793 0.501230\n", + "(CDK1) (AKAP12) 0.448276 0.506120\n", + "(PHLPP1) (PRKCA) 0.448276 0.506120\n", + "(GSK3B) (PHLPP1) 0.448276 0.506120\n", + "(SMAD3) (SMAD4) 0.448276 0.506120\n", + "(AKAP12) (PRKCA) 0.448276 0.506120\n", + "(RELA) (EGR1) 0.482759 0.508548\n", + "(NFKB1_RELA) (EGR1) 0.517241 0.508548\n", + "(SMAD2) (SMAD4) 0.551724 0.506120\n", + "(GSK3B) (CDKN1A) 0.689655 0.470824\n", + "(PPP1CA) (MAPK1) 0.724138 0.454859\n", + "(CDK1) (PPP1CA) 0.724138 0.454859\n", + "(JUN) (SPI1) 0.758621 0.435494\n", + "(GSK3B) (PRKCE) 0.758621 0.435494\n", + "(PRKCE) (TICAM2) 0.758621 0.435494\n", + "(MAPK8) (STAT1) 0.758621 0.435494\n", + "(MAPK1) (MYC) 0.758621 0.435494\n", + "(AKT1) (SKI) 0.758621 0.435494\n", + "(SKI) (SMAD5) 0.758621 0.435494\n", + "(TICAM2) (TICAM1) 0.758621 0.435494" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Analyze variability in edge selection\n", + "df_var = pd.concat([df_sols.mean(axis=1), df_sols.std(axis=1)], axis=1)\n", + "df_var.columns = [\"mean\", \"std\"]\n", + "print(\"Edges with highest variability across solutions:\")\n", + "df_var.sort_values(by=\"std\", ascending=False).head(50).sort_values(by=\"mean\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "63c6f80a-a32c-4e9a-8c26-0302fc91fabe", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0123456789...19202122232425262728
(SMAD3)(MYOD1)0000000000...0000000000
(GRK2)(BDKRB2)0000000000...0000000000
(MAPK14)(MAPKAPK2)0000000000...0000000000
(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR)(FBXW8)0000000000...0000000000
(SLK)(MAP3K5)0000000000...0000000000
\n", + "

5 rows × 29 columns

\n", + "
" + ], + "text/plain": [ + " 0 1 2 3 4 5 6 \\\n", + "(SMAD3) (MYOD1) 0 0 0 0 0 0 0 \n", + "(GRK2) (BDKRB2) 0 0 0 0 0 0 0 \n", + "(MAPK14) (MAPKAPK2) 0 0 0 0 0 0 0 \n", + "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 0 0 0 0 0 0 \n", + "(SLK) (MAP3K5) 0 0 0 0 0 0 0 \n", + "\n", + " 7 8 9 ... 19 20 \\\n", + "(SMAD3) (MYOD1) 0 0 0 ... 0 0 \n", + "(GRK2) (BDKRB2) 0 0 0 ... 0 0 \n", + "(MAPK14) (MAPKAPK2) 0 0 0 ... 0 0 \n", + "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 0 0 ... 0 0 \n", + "(SLK) (MAP3K5) 0 0 0 ... 0 0 \n", + "\n", + " 21 22 23 24 25 26 27 \\\n", + "(SMAD3) (MYOD1) 0 0 0 0 0 0 0 \n", + "(GRK2) (BDKRB2) 0 0 0 0 0 0 0 \n", + "(MAPK14) (MAPKAPK2) 0 0 0 0 0 0 0 \n", + "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 0 0 0 0 0 0 \n", + "(SLK) (MAP3K5) 0 0 0 0 0 0 0 \n", + "\n", + " 28 \n", + "(SMAD3) (MYOD1) 0 \n", + "(GRK2) (BDKRB2) 0 \n", + "(MAPK14) (MAPKAPK2) 0 \n", + "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 \n", + "(SLK) (MAP3K5) 0 \n", + "\n", + "[5 rows x 29 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Analyze edge values across solutions\n", + "df_edge_val = pd.DataFrame(np.concatenate(edge_results[\"edge_values\"], axis=1), index=m.processed_graph.E).astype(int)\n", + "df_edge_val.head()" + ] + }, + { + "cell_type": "markdown", + "id": "15d35b6b-0ee4-4792-9923-2db303f5fd57", + "metadata": {}, + "source": [ + "## Vertex-Based Perturbation\n", + "\n", + "Next, we'll sample solutions by perturbing vertex variables. This approach can highlight \n", + "alternative active node sets that are consistent with the data." ] }, { "cell_type": "code", - "execution_count": 8, - "id": "63c6f80a-a32c-4e9a-8c26-0302fc91fabe", + "execution_count": 9, + "id": "184db85c", "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0123456789...20212223242526272829
(SMAD3)(MYOD1)0000000000...0000000000
(GRK2)(BDKRB2)0000000000...0000000000
(MAPK14)(MAPKAPK2)0000000000...0000000000
(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR)(FBXW8)0000000000...0000000000
(SLK)(MAP3K5)0000000000...0000000000
\n", - "

5 rows × 30 columns

\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4 5 6 \\\n", - "(SMAD3) (MYOD1) 0 0 0 0 0 0 0 \n", - "(GRK2) (BDKRB2) 0 0 0 0 0 0 0 \n", - "(MAPK14) (MAPKAPK2) 0 0 0 0 0 0 0 \n", - "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 0 0 0 0 0 0 \n", - "(SLK) (MAP3K5) 0 0 0 0 0 0 0 \n", - "\n", - " 7 8 9 ... 20 21 \\\n", - "(SMAD3) (MYOD1) 0 0 0 ... 0 0 \n", - "(GRK2) (BDKRB2) 0 0 0 ... 0 0 \n", - "(MAPK14) (MAPKAPK2) 0 0 0 ... 0 0 \n", - "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 0 0 ... 0 0 \n", - "(SLK) (MAP3K5) 0 0 0 ... 0 0 \n", - "\n", - " 22 23 24 25 26 27 28 \\\n", - "(SMAD3) (MYOD1) 0 0 0 0 0 0 0 \n", - "(GRK2) (BDKRB2) 0 0 0 0 0 0 0 \n", - "(MAPK14) (MAPKAPK2) 0 0 0 0 0 0 0 \n", - "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 0 0 0 0 0 0 \n", - "(SLK) (MAP3K5) 0 0 0 0 0 0 0 \n", - "\n", - " 29 \n", - "(SMAD3) (MYOD1) 0 \n", - "(GRK2) (BDKRB2) 0 \n", - "(MAPK14) (MAPKAPK2) 0 \n", - "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0 \n", - "(SLK) (MAP3K5) 0 \n", - "\n", - "[5 rows x 30 columns]" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Analyze edge values across solutions\n", - "df_edge_val = pd.DataFrame(np.concatenate(edge_results[\"edge_values\"], axis=1), index=m.processed_graph.E).astype(int)\n", - "df_edge_val.head()" - ] - }, - { - "cell_type": "markdown", - "id": "15d35b6b-0ee4-4792-9923-2db303f5fd57", - "metadata": {}, - "source": [ - "## Vertex-Based Perturbation\n", - "\n", - "Next, we'll sample solutions by perturbing vertex variables. This approach can highlight \n", - "alternative active node sets that are consistent with the data." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "184db85c", - "metadata": {}, - "outputs": [ + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: Your problem has 10690 variables, 30607 constraints, and 1 parameters.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: It is compliant with the following grammars: DCP, DQCP\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: CVXPY will first compile your problem; then, it will invoke a numerical solver to obtain a solution.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: Your problem is compiled with the CPP canonicalization backend.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: Compiling problem (target solver=GUROBI).\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: Reduction chain: CvxAttr2Constr -> Qp2SymbolicQp -> QpMatrixStuffing -> GUROBI\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: Applying reduction CvxAttr2Constr\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: Applying reduction Qp2SymbolicQp\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: Applying reduction QpMatrixStuffing\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: Applying reduction GUROBI\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: Finished problem compilation (took 7.155e-02 seconds).\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: (Subsequent compilations of this problem, using the same arguments, should take less time.)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:00 PM: Invoking solver GUROBI to obtain a solution.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unreachable vertices for sample: 0\n", + "===============================================================================\n", + " CVXPY \n", + " v1.7.1 \n", + "===============================================================================\n", + "-------------------------------------------------------------------------------\n", + " Compilation \n", + "-------------------------------------------------------------------------------\n", + "-------------------------------------------------------------------------------\n", + " Numerical solver \n", + "-------------------------------------------------------------------------------\n", + "Set parameter OutputFlag to value 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Set parameter QCPDual to value 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gurobi Optimizer version 12.0.3 build v12.0.3rc0 (mac64[arm] - Darwin 25.5.0 25F84)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU model: Apple M4 Pro\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thread count: 12 physical cores, 12 logical processors, using up to 12 threads\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Non-default parameters:\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "QCPDual 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimize a model with 30607 rows, 10690 columns and 108040 nonzeros\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model fingerprint: 0xf48e83e6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variable types: 4188 continuous, 6502 integer (6502 binary)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Coefficient statistics:\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Matrix range [1e+00, 9e+02]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Objective range [1e-01, 7e+00]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Bounds range [1e+00, 1e+00]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " RHS range [1e+00, 1e+03]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found heuristic solution: objective 0.1000000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Presolve removed 17840 rows and 1466 columns\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Presolve time: 0.20s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Presolved: 12767 rows, 9224 columns, 81311 nonzeros\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variable types: 3504 continuous, 5720 integer (5714 binary)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Root relaxation: objective -1.186277e+02, 1171 iterations, 0.04 seconds (0.07 work units)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Nodes | Current Node | Objective Bounds | Work\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.62771 0 53 0.10000 -118.62771 - - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.51700 0 62 0.10000 -118.51700 - - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -3.7564221 -118.51700 3055% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -76.6465356 -118.51700 54.6% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -76.7465356 -118.51700 54.4% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.21224 0 60 -76.74654 -118.21224 54.0% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -79.0760121 -118.21224 49.5% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -113.3642782 -118.12057 4.20% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.12057 0 55 -113.36428 -118.12057 4.20% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 41 -113.36428 -118.07057 4.15% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -113.4642782 -118.07057 4.06% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 36 -113.46428 -118.07057 4.06% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 33 -113.46428 -118.07057 4.06% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 18 -113.46428 -118.07057 4.06% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 18 -113.46428 -118.07057 4.06% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -117.5705690 -118.07057 0.43% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 18 -117.57057 -118.07057 0.43% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 13 -117.57057 -118.07057 0.43% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 13 -117.57057 -118.07057 0.43% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 2 -117.57057 -118.07057 0.43% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 37 -117.57057 -118.07057 0.43% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 25 -117.57057 -118.07057 0.43% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 20 -117.57057 -118.07057 0.43% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 2 -117.57057 -118.07057 0.43% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -117.8705690 -118.07057 0.17% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 11 -117.87057 -118.07057 0.17% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 11 -117.87057 -118.07057 0.17% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 11 -117.87057 -118.07057 0.17% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 44 -117.87057 -118.07057 0.17% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -117.9705690 -118.07057 0.08% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 38 -117.97057 -118.07057 0.08% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 31 -117.97057 -118.07057 0.08% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 23 -117.97057 -118.07057 0.08% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 22 -117.97057 -118.07057 0.08% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 22 -117.97057 -118.07057 0.08% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 22 -117.97057 -118.07057 0.08% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 13 -117.97057 -118.07057 0.08% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -118.07057 0 13 -117.97057 -118.07057 0.08% - 1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cutting planes:\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Implied bound: 17\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " MIR: 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Inf proof: 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Zero half: 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " RLT: 12\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Relax-and-lift: 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Explored 1 nodes (11239 simplex iterations) in 1.86 seconds (2.40 work units)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thread count was 12 (of 12 available processors)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Solution count 10: -117.971 -117.971 -117.871 ... -76.7465\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "No other solutions better than -117.971\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimal solution found (tolerance 1.00e-04)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best objective -1.179705689649e+02, best bound -1.179705689649e+02, gap 0.0000%\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:02 PM: Problem status: optimal\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:02 PM: Optimal value: 5.400e+00\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:02 PM: Compilation took 7.155e-02 seconds\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:12:02 PM: Solver (including time spent in interface) took 1.910e+00 seconds\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-------------------------------------------------------------------------------\n", + " Summary \n", + "-------------------------------------------------------------------------------\n", + "error_sample1_0 0.0\n", + "regularization_edge_has_signal 54.0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 1/30: Objective value = 5.3506\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 2/30: Objective value = 5.3926\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 3/30: Objective value = 5.4280\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "Unreachable vertices for sample: 0\n", - "===============================================================================\n", - " CVXPY \n", - " v1.6.4 \n", - "===============================================================================\n", - "(CVXPY) Apr 10 07:11:09 PM: Your problem has 11092 variables, 31652 constraints, and 1 parameters.\n", - "(CVXPY) Apr 10 07:11:09 PM: It is compliant with the following grammars: DCP, DQCP\n", - "(CVXPY) Apr 10 07:11:09 PM: CVXPY will first compile your problem; then, it will invoke a numerical solver to obtain a solution.\n", - "(CVXPY) Apr 10 07:11:09 PM: Your problem is compiled with the CPP canonicalization backend.\n", - "-------------------------------------------------------------------------------\n", - " Compilation \n", - "-------------------------------------------------------------------------------\n", - "(CVXPY) Apr 10 07:11:09 PM: Compiling problem (target solver=GUROBI).\n", - "(CVXPY) Apr 10 07:11:09 PM: Reduction chain: CvxAttr2Constr -> Qp2SymbolicQp -> QpMatrixStuffing -> GUROBI\n", - "(CVXPY) Apr 10 07:11:09 PM: Applying reduction CvxAttr2Constr\n", - "(CVXPY) Apr 10 07:11:09 PM: Applying reduction Qp2SymbolicQp\n", - "(CVXPY) Apr 10 07:11:09 PM: Applying reduction QpMatrixStuffing\n", - "(CVXPY) Apr 10 07:11:09 PM: Applying reduction GUROBI\n", - "(CVXPY) Apr 10 07:11:09 PM: Finished problem compilation (took 5.829e-02 seconds).\n", - "(CVXPY) Apr 10 07:11:09 PM: (Subsequent compilations of this problem, using the same arguments, should take less time.)\n", - "-------------------------------------------------------------------------------\n", - " Numerical solver \n", - "-------------------------------------------------------------------------------\n", - "(CVXPY) Apr 10 07:11:09 PM: Invoking solver GUROBI to obtain a solution.\n", - "Set parameter OutputFlag to value 1\n", - "Set parameter QCPDual to value 1\n", - "Gurobi Optimizer version 12.0.1 build v12.0.1rc0 (mac64[arm] - Darwin 24.4.0 24E248)\n", - "\n", - "CPU model: Apple M4 Pro\n", - "Thread count: 12 physical cores, 12 logical processors, using up to 12 threads\n", - "\n", - "Non-default parameters:\n", - "QCPDual 1\n", - "\n", - "Optimize a model with 31652 rows, 11092 columns and 111482 nonzeros\n", - "Model fingerprint: 0x926525f9\n", - "Variable types: 4344 continuous, 6748 integer (6748 binary)\n", - "Coefficient statistics:\n", - " Matrix range [1e+00, 1e+03]\n", - " Objective range [1e-01, 8e+00]\n", - " Bounds range [1e+00, 1e+00]\n", - " RHS range [1e+00, 1e+03]\n", - "Found heuristic solution: objective 0.0000000\n", - "Presolve removed 18549 rows and 1627 columns\n", - "Presolve time: 0.15s\n", - "Presolved: 13103 rows, 9465 columns, 82774 nonzeros\n", - "Variable types: 3602 continuous, 5863 integer (5853 binary)\n", - "\n", - "Root relaxation: objective -2.060081e+02, 1119 iterations, 0.02 seconds (0.05 work units)\n", - "\n", - " Nodes | Current Node | Objective Bounds | Work\n", - " Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time\n", - "\n", - " 0 0 -206.00811 0 64 0.00000 -206.00811 - - 0s\n", - " 0 0 -202.60774 0 66 0.00000 -202.60774 - - 0s\n", - "H 0 0 -121.0727864 -202.45357 67.2% - 0s\n", - "H 0 0 -125.9042639 -202.45357 60.8% - 0s\n", - " 0 0 -202.32031 0 64 -125.90426 -202.32031 60.7% - 0s\n", - " 0 0 -202.27031 0 65 -125.90426 -202.27031 60.7% - 0s\n", - " 0 0 -202.27031 0 54 -125.90426 -202.27031 60.7% - 0s\n", - " 0 0 -202.27031 0 52 -125.90426 -202.27031 60.7% - 0s\n", - "H 0 0 -131.7216934 -202.27031 53.6% - 0s\n", - " 0 0 -202.27031 0 56 -131.72169 -202.27031 53.6% - 0s\n", - " 0 0 -202.27031 0 42 -131.72169 -202.27031 53.6% - 0s\n", - " 0 0 -202.27031 0 40 -131.72169 -202.27031 53.6% - 0s\n", - "H 0 0 -134.7525108 -202.27031 50.1% - 0s\n", - " 0 0 -202.25020 0 28 -134.75251 -202.25020 50.1% - 0s\n", - "H 0 0 -140.2462506 -202.22020 44.2% - 0s\n", - " 0 0 -202.22020 0 28 -140.24625 -202.22020 44.2% - 0s\n", - " 0 0 -202.22020 0 18 -140.24625 -202.22020 44.2% - 0s\n", - "H 0 0 -199.6703069 -202.20354 1.27% - 0s\n", - "H 0 0 -200.1703069 -202.20354 1.02% - 0s\n", - " 0 0 -202.20354 0 18 -200.17031 -202.20354 1.02% - 0s\n", - "H 0 0 -201.9703069 -202.13697 0.08% - 0s\n", - " 0 0 -202.13697 0 22 -201.97031 -202.13697 0.08% - 0s\n", - " 0 0 -202.13697 0 22 -201.97031 -202.13697 0.08% - 0s\n", - " 0 0 -202.07031 0 2 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 2 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 2 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 5 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 5 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 25 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 29 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 29 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 22 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 26 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 26 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 23 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 26 -201.97031 -202.07031 0.05% - 0s\n", - " 0 0 -202.07031 0 6 -201.97031 -202.07031 0.05% - 0s\n", - "\n", - "Cutting planes:\n", - " Learned: 2\n", - " Gomory: 4\n", - " Cover: 1\n", - " Implied bound: 11\n", - " Clique: 4\n", - " MIR: 9\n", - " Zero half: 7\n", - " Mod-K: 1\n", - " RLT: 10\n", - " Relax-and-lift: 1\n", - " BQP: 1\n", - " PSD: 2\n", - "\n", - "Explored 1 nodes (4497 simplex iterations) in 0.86 seconds (1.20 work units)\n", - "Thread count was 12 (of 12 available processors)\n", - "\n", - "Solution count 9: -201.97 -200.17 -199.67 ... 0\n", - "No other solutions better than -201.97\n", - "\n", - "Optimal solution found (tolerance 1.00e-04)\n", - "Best objective -2.019703069210e+02, best bound -2.019703069210e+02, gap 0.0000%\n", - "-------------------------------------------------------------------------------\n", - " Summary \n", - "-------------------------------------------------------------------------------\n", - "(CVXPY) Apr 10 07:11:10 PM: Problem status: optimal\n", - "(CVXPY) Apr 10 07:11:10 PM: Optimal value: 1.622e+01\n", - "(CVXPY) Apr 10 07:11:10 PM: Compilation took 5.829e-02 seconds\n", - "(CVXPY) Apr 10 07:11:10 PM: Solver (including time spent in interface) took 8.972e-01 seconds\n", - "error_sample1_0 7.0169713497161865\n", - "multi_sample_regularization_edge_has_signal 92.0\n", - "Sample 1/30: Objective value = 16.2117\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 2/30: Objective value = 16.2916\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 93.0000, rel error: 0.0109\n", - "Sample 3/30: Objective value = 16.2261\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 4/30: Objective value = 16.2643\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 5/30: Objective value = 16.3308\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 6/30: Objective value = 16.2693\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 7/30: Objective value = 16.3319\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 8/30: Objective value = 16.1480\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 9/30: Objective value = 16.3680\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 10/30: Objective value = 16.1878\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 11/30: Objective value = 16.0145\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 12/30: Objective value = 16.0929\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 13/30: Objective value = 16.3187\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 14/30: Objective value = 16.1250\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 15/30: Objective value = 16.1789\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 16/30: Objective value = 16.2809\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 17/30: Objective value = 16.3439\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 18/30: Objective value = 16.1387\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 19/30: Objective value = 16.1296\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 20/30: Objective value = 16.1100\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 21/30: Objective value = 16.2697\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 22/30: Objective value = 16.1848\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 23/30: Objective value = 16.0936\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 24/30: Objective value = 16.1869\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 25/30: Objective value = 16.2711\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 26/30: Objective value = 16.1187\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 27/30: Objective value = 16.2951\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 28/30: Objective value = 16.2525\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 29/30: Objective value = 16.2769\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", - "Sample 30/30: Objective value = 16.1914\n", - " error_sample1_0: 7.0170, rel error: 0.0000\n", - " multi_sample_regularization_edge_has_signal: 92.0000, rel error: 0.0000\n", + "Sample 4/30: Objective value = 5.3630\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 5/30: Objective value = 5.4156\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 6/30: Objective value = 5.3873\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 7/30: Objective value = 5.3842\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 8/30: Objective value = 5.3906\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 9/30: Objective value = 5.3064\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 10/30: Objective value = 5.4230\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 11/30: Objective value = 5.3525\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 12/30: Objective value = 5.3631\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 13/30: Objective value = 5.3528\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 14/30: Objective value = 5.3961\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 15/30: Objective value = 5.3628\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 16/30: Objective value = 5.3982\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 17/30: Objective value = 5.3655\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 55.0000, rel error: 0.0185\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 18/30: Objective value = 5.2853\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 19/30: Objective value = 5.3232\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 20/30: Objective value = 5.3768\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 21/30: Objective value = 5.2673\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 22/30: Objective value = 5.3205\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 23/30: Objective value = 5.3125\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 55.0000, rel error: 0.0185\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 24/30: Objective value = 5.3489\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 25/30: Objective value = 5.4452\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 26/30: Objective value = 5.3848\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 27/30: Objective value = 5.2272\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 28/30: Objective value = 5.3814\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 29/30: Objective value = 5.3650\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 30/30: Objective value = 5.2891\n", + " error_sample1_0: 0.0000, rel error: 0.0000\n", + " regularization_edge_has_signal: 54.0000, rel error: 0.0000\n", "Generated 30 alternative solutions\n" ] }, @@ -1651,7 +3234,7 @@ " \n", " \n", " \n", - " DIAPH1\n", + " SMAD2_SMAD4\n", " 0\n", " 0\n", " 0\n", @@ -1675,31 +3258,31 @@ " 0\n", " \n", " \n", - " PRKD1\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " NFKBIB\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", + " -1\n", " \n", " \n", - " ALDH2\n", + " MDC1\n", " 0\n", " 0\n", " 0\n", @@ -1723,7 +3306,7 @@ " 0\n", " \n", " \n", - " MDM2\n", + " BRSK1\n", " 0\n", " 0\n", " 0\n", @@ -1747,7 +3330,7 @@ " 0\n", " \n", " \n", - " RAD21\n", + " EREG\n", " 0\n", " 0\n", " 0\n", @@ -1776,19 +3359,19 @@ "" ], "text/plain": [ - " 0 1 2 3 4 5 6 7 8 9 ... 20 21 22 23 24 25 \\\n", - "DIAPH1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", - "PRKD1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", - "ALDH2 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", - "MDM2 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", - "RAD21 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", + " 0 1 2 3 4 5 6 7 8 9 ... 20 21 22 23 24 \\\n", + "SMAD2_SMAD4 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 \n", + "NFKBIB -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... -1 -1 -1 -1 -1 \n", + "MDC1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 \n", + "BRSK1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 \n", + "EREG 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 \n", "\n", - " 26 27 28 29 \n", - "DIAPH1 0 0 0 0 \n", - "PRKD1 0 0 0 0 \n", - "ALDH2 0 0 0 0 \n", - "MDM2 0 0 0 0 \n", - "RAD21 0 0 0 0 \n", + " 25 26 27 28 29 \n", + "SMAD2_SMAD4 0 0 0 0 0 \n", + "NFKBIB -1 -1 -1 -1 -1 \n", + "MDC1 0 0 0 0 0 \n", + "BRSK1 0 0 0 0 0 \n", + "EREG 0 0 0 0 0 \n", "\n", "[5 rows x 30 columns]" ] @@ -1922,30 +3505,30 @@ " \n", " \n", " ABL1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", " ...\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", - " -1\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", " \n", " \n", - " ABL2\n", + " ABRAXAS1\n", " 0\n", " 0\n", " 0\n", @@ -1969,7 +3552,7 @@ " 0\n", " \n", " \n", - " ABRAXAS1\n", + " ACAT1\n", " 0\n", " 0\n", " 0\n", @@ -2001,16 +3584,16 @@ " 0 1 2 3 4 5 6 7 8 9 ... 20 21 22 23 24 25 \\\n", "AAK1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", "ABI1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", - "ABL1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... -1 -1 -1 -1 -1 -1 \n", - "ABL2 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", + "ABL1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", "ABRAXAS1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", + "ACAT1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", "\n", " 26 27 28 29 \n", "AAK1 0 0 0 0 \n", "ABI1 0 0 0 0 \n", - "ABL1 -1 -1 -1 -1 \n", - "ABL2 0 0 0 0 \n", + "ABL1 0 0 0 0 \n", "ABRAXAS1 0 0 0 0 \n", + "ACAT1 0 0 0 0 \n", "\n", "[5 rows x 30 columns]" ] @@ -2034,7 +3617,7 @@ "outputs": [ { "data": { - "image/png": "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EzmubrzxRvucalcpuKj/g4KU2o41a9Y0119/vRkxYkSGbc3s/olHgaaff/7ZZoTp86kA9euvv37Y6/773//az4IChaplpvdQwFDTRUX/n4suuijy//VvsbRu3doG0NL2N6LPmIJyCkrGEm9bKpCpwGCstuuxGjVqmKZNm2ZqmwAAcMRUUwoAAGTN33//7VWqVMlr2rRpqsdHjx6tdA/vww8/tPf379/vHTp0KNVrVq1a5RUqVMgbOHBg5LE5c+bY36tevbr3xx9/pHq9/5z+9aV9jQwePNjLkyeP99tvv0Ue69q1q/3dW2+9NfJYSkqK17p1a69gwYLe1q1bI4/rdQMGDIjcHzdunH1M7fU1a9bM3nwLFiywr9Fr09K2adKkSarHpkyZctj/JRa1I+0wRffV5p9//jny2HfffWcfHzlyZLp/b9OmTd6xxx5rX1urVi3vpptu8iZOnOj9/vvvh71W26xq1aqR+++88479vREjRkQe0z694IILDvu/+9s7et/K6aef7jVo0CDVY2n34cGDB726devavxtNbdHfTe940D7RY+PHj488duDAAa9ixYreFVdcEXls2LBh9nXvvfde5LE///zTbpPM7Bf/mPjoo4/ssbN27Vpv0qRJ3jHHHOMVKVLEW7duXart0KdPn1S/r/fV448++miqx6+88kp77Ebv22LFiqX6f/uuv/56+9nbtm1bqsevvvpqr1SpUpHtquP2aPZPPL169fKqVKliP0cya9Ys+ze//fbbVP3DiSeeaPfdzp07U/2+/3tyyy23HHacx/s8durUyStfvrz9276NGzd6efPmTfX/ifXZibct+/bta/ui6M/Bli1bvPz586d6bwAAcgqZUgAAHAFNBVO2jqa3aJpQ9LQXZSRdeOGF9r4yFPxi1MrQUEaPMh6UHfLNN98c9neVfaMMq4xEv0bZL9u2bbNTwXQu++233x72emWUpJ0Gp6wlZZvkFGVtKavEz6LxMzCUnaHslCPRvHlzm8Hh03QoTalTRlp6tE803e6mm26yGUWjR48211xzjc3iUXZaeuu+aHqgpiL26NEj8pj26S233BL3d/Q+0ZSlkraN0ftQbdq1a5d9XazjIjN0XP3rX/+K3FcWj1aIi35f/V80rU/ZSj5lrEX/3zK7HzTtTftSnwO9t6aB6W9HUyZf2tXm9NlRllY0TefTPojO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pQAAAAAAAIDsQlAKAAAAAAAAzhGUAgAAAAAAgHMEpQAAAAAAAOAcQSkAAAAAAACEc/W9JUuWZPoPnnbaaUfTHgAAAAAAACSBTAWl6tevb/LkyWM8z7P/pufQoUPZ1TYAAAAAAAAk8/S9VatWmV9//dX++84775gTTzzRPPfcc+bbb7+1N/1co0YN+xwAAAAAAACQLZlSVatWjfzcoUMH88wzz5hWrVqlmrJXpUoV069fP9OuXbvM/EkASDjV+szIlr+zekhrE7Y2ZXe7AAAAACDbC50vXbrUZkqlpceWLVuW1T8HAAAAAACAJJTloFTt2rXN4MGDzcGDByOP6Wc9pucAAAAAAACAbJm+F2306NGmTZs25vjjj4+stKfV+VQAffr06Vn9cwAAAAAAAEhCWQ5KNW7c2BY9f/31183y5cvtYx07djTXXHONKVasWE60EQAAAAAAAMkclPrrr79MrVq1zPvvv29uuOGGnGsVAAAAAAAAcrUs1ZQqUKCA2b9/f861BgAAAAAAAEkhy4XOb7nlFvP444+bv//+O2daBAAAAAAAgFwvyzWlFixYYGbPnm1mzZplTj311MPqSE2ZMiU72wcAAAAAAIBcKMtBqdKlS5srrrgiZ1oDAAAAAACApJDloNS4ceNypiUAAAAAAABIGlmuKQUAAAAAAAA4z5SSt99+27z55ptmzZo15uDBg6me++abb466UQAAAAAAAMjdspwp9cwzz5ju3bubChUqmG+//dY0btzYHHPMMebXX381l1xySc60EgAAAAAAAMkdlHruuefMiy++aEaOHGkKFixo7r33XvPf//7X3HbbbWbXrl0500oAAAAAAAAkd1BKU/bOOuss+3ORIkXMnj177M+dO3c2b7zxRva3EAAAAAAAALlOloNSFStWNDt27LA/n3DCCebLL7+0P69atcp4npf9LQQAAAAAAECuk+Wg1AUXXGCmTZtmf1ZtqTvvvNNcdNFFpmPHjqZ9+/Y50UYAAAAAAAAk++p7qieVkpJif77llltskfN58+aZyy67zNx444050UYAAAAAAAAke1Aqb9689ua7+uqr7Q0AAAAAAADI1qDUkiVLMv0HTzvttEy/FgAAAAAAAMkpU0Gp+vXrmzx58thC5vo3PYcOHcqutgEAAAAAACCZC51rZb1ff/3V/vvOO++YE0880Tz33HPm22+/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f37M39Hj0a8XZVbFez0AAAAAAADCJ3+Qb75t2zZz6NAhU6FChVSP6/7y5ctj/s6mTZtivl6Px3LgwAF78+3atcv+u3v37gzbl3LgD5MdMvNemZVdbcrOdtGmzOOYStw2CfsvcduU2/dfGNskHFOJ2yZh/2UObco8jqnEbZOw/xK3Tbl9/4WxTZLsx9Tu//+853np/yEvQOvXr1frvHnz5qV6/J577vEaN24c83cKFCjgTZw4MdVjo0aN8sqXLx/z9QMGDLDvwY0bN27cuHHjxo0bN27cuHHjxs04u61duzbduFCgmVLlypUz+fLlM5s3b071uO5XrFgx5u/o8ay8vm/fvraQui8lJcXs2LHDHHPMMSZPnjxH1X5F/qpUqWLWrl1rSpYsacIgjG0Ka7toU+K2Kaztok2J3S7alLhtCmu7aFNit4s2JW6bwtou2pTY7aJNidumsLYrt7fJ8zyzZ88ec9xxx6X7ukCDUgULFjQNGjQws2fPtivo+UEj3e/Vq1fM32natKl9/o477og89t///tc+HkuhQoXsLVrp0qWz9f+hnRWWgyjMbQpru2hT4rYprO2iTYndLtqUuG0Ka7toU2K3izYlbpvC2i7alNjtok2J26awtqtkLm5TqVKlMnxNoEEpURZT165dTcOGDU3jxo3NiBEjzL59++xqfNKlSxdTuXJlM3jwYHv/9ttvN82aNTPDhg0zrVu3NpMmTTILFy40L774YsD/EwAAAAAAAGRW4EGpjh07mq1bt5r+/fvbYuX169c3M2fOjBQzX7NmjV2Rz3fWWWeZiRMnmgcffNDcf//95qSTTjLvvfeeqVu3boD/CwAAAAAAACRUUEo0VS/edL25c+ce9liHDh3sLWiaFjhgwIDDpgcGKYxtCmu7aFPitims7aJNid0u2pS4bQpru2hTYreLNiVum8LaLtqU2O2iTYnbprC2izb9nzyqdv7/fwYAAAAAAACc+N+8OAAAAAAAAMARglIAAAAAAABwjqAUAAAAAAAAnCMoBQAAAAAAgORcfQ8AAABA4jt06JDJly9f0M0AcpU1a9Zk6nUnnHBCjrcFyG5kSmWj77//PugmALnShg0bzN13321279592HO7du0y99xzj9m8eXMgbQubP//803z++edm2bJlhz23f/9+M378eNoEwNq3b5/59NNPg24GcomffvrJ3Hvvveb4448PuilArlOtWjVz4oknHnaLfrx69eqBtG3Pnj1m0aJFZu/evfb+N998Y7p06WI6dOhgXn/99UDalEjmzp1rx8pBWrlypXnyySdNr169zK233mqGDx9ufv31V2fvn8fzPM/Zu+VC+hC+8cYb5qWXXrIfRl0dCsNVqa+++socOHDANG3a1BQoUMBpW4YNG2auvPJKU7VqVRMmX375pZk+fbo5ePCgufDCC83FF19swnYsRX8c8+bNa4oXL+7s/QcOHJip1/Xv39+45gekXnzxxZjP33TTTaZUqVLm8ccfd9amdevWmcKFC5ty5crZ+5999pkZPXq0vZKlY/+WW26xnz/XJwQtWrSwbciTJ4/55z//aSZNmmQqVapkn1fg7rjjjnPaT4WxTYmme/fuZtCgQXY7hdGPP/5oXn75ZTuYCQP1ozNnzrRtevvtt01Y6Fh/4YUXAulD4/nuu+/MGWec4fzz98EHH5gpU6aYsmXLmuuuu87UqlUr8tzOnTvNFVdcYT7++GMTJmrvQw89ZJYsWWLCFljU+PPcc88N5P3/+OMPM3nyZDN27Fgzf/5807BhQ7v/dLEoTHRcaQyoE+Wg/P777+att96KjBN0wq6xS1BSUlLsWDPW4xrjkHETLuqv433naVz1zDPP2POGLVu2OG2XLmxceumlNiBVpkwZe16s88DKlSvbc1ONETQ+7tGjh9N2JZKCBQva/Vu7du1A3n/w4MF2bKLPfvny5e0xtXXrVrv/HnvsMXseluMUlELWffLJJ16XLl28YsWKeSeddJJ33333eV9//bXzdmzYsME7++yzvXz58nnnnnuut2PHDq9169Zenjx57O0f//iHfY1Lel+1p3nz5t6kSZO8AwcOeEF76623vLx589r9Vbp0afvz0KFDA23Tt99+611yySWR+8WLF7ft8m/ahi6PKe23ypUre6effrpXv379mDc9F4RTTjnF++yzz+I+/8UXX3h16tRx2qbGjRt706dPtz+/9957dp9ddtllti9o3769V6BAgcjzrrRr185+/rdu3eqtXLnS/nziiSd6v/32m31+06ZNtp3J3qbMWLZsmW2nS999913Mm46ld999N3I/DPbu3eu99NJLXtOmTW3foc9o0H799VfvwQcf9I4//nivUKFC9lgLk8WLF4fuWA+iTa+//rr9ftP++ec//+kVLlzYmzBhQuT5IPuE0aNHe1dccYXXqVMn78svv7SPzZ49237/FS1a1Lvpppu8sAnquJo/f753/fXXeyVLlvTq1q1r9+mnn37qhVUQ20ljAY0/5fvvv/fKlSvnHXvssV6TJk28ChUqeBUrVrTfNa7t2rXL69Chg/3slS9f3uvXr5/3999/B/oZ1LnK/fffH7mvcxuNOf1bw4YNvXXr1nmu/fTTT97bb79tv1/k/fff98455xzbnkcffdRLSUnxgvTf//7Xa9CggVeiRAlvwIAB3u7du523Qdvjuuuus/tn4MCB9jyrb9++kecfeeQRr169es7bdd5553nnn39+urcLLrjAaZuij+noW548ebzatWtH7rv08ccf28+7jh/FEXzbt2+3fYP6dsU9chpBqSzYuHGjN3jwYK9mzZq2E+/Vq5eXP39+74cffgisTZ07d/bOOussb9q0aV7Hjh3tz+oc1DHopE+d+i233OK0TfpgjRs3zmvbtq09mTrmmGO822+/3Vu6dKkXlDPOOMO78cYbI1+6jz32mFemTBkvSOrABw0alCoopcH63LlzvTlz5th9+69//ctZe1q1amUHKNpvU6dO9Q4dOuSFhU4G/CBGLHpOr3FJAU5/kKIB5pAhQ1I9P3LkSOdfLOqXlixZErmvwZJOok444QTvl19+CWSgGcY2hfUERn2n3tO/qBB98x8Pelt9/vnnXvfu3e3xr7bcdddd3o8//hhYe/bv328DGhpc6vtGbRo+fLg96XItXlDRv02ePNn5/tP3XHo3BRRct0kBnqeffjpyX9tFx5OCnBJUn6DxnY4hneCpPfpO0Xe0Agd6Lnqwnsx91ZNPPmkvAuki1t13323fX4IeD+szn95NF7aC+Pz5/aMuQl5zzTWRC7UHDx60Qb0WLVp4rt122232orUCZmPGjPGqVq1qg8R+2/QZ1PeNS7qg0LNnz1RjYrXzoYcesjeNs/R949KUKVPscV2wYEF7oePVV1+14+SLL77Ybi89l3bs58qiRYvsxX+1S+d5mzdv9oJSqlSpyHGuY0ifM79fEF2Q1P507Y477oh702evSJEizvsEHTM6fvzjWjcFg/LmzevdfPPNkcdcuuqqq7wbbrgh7vM9evTwrr766hxvB0GpTLr00kvt4E1XzxQl94MbQX8JV6pUyV6t8iOa+hL56KOPIs/rCl/16tWdtklt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Hb8pIKXnp0yZkrMNyfFS6rlEeiuh7d2716404HpVHdGKclodQlXxtcJc586d7SoRQa6so1VrtHxkz5497WpEen+trqPlcPv37+/NmTPH279/v9M2DRkyxHvwwQcj91NSUuxqHv7qAlo5QkvRuvbMM8/YZei1jbTSiW76WY+NGDHCaVu0UuLu3bsj97UyS5cuXbxixYp5J510knffffcFtuJIxYoVvQULFkTu33///XYJY9+bb77p1a5d22mb9P5t27a1n8EdO3Z4N998s129KUj+Chnxbq5W0Iim42flypWR+1rpR6uNBL3So1YDVb89b94875tvvvHat2/v1axZM9A2hbE/F71n9P7S0s7RqxQG0a4wtql06dKRfjz6ppUwdbzNmjXLc61du3Zxb23atLGrbrneTi+99JLti4455hj73scee6xdtVDb78YbbwxspVCZNGmSd80113hXXnml9/zzz3thELZ+4cMPP7RjlFNOOcWu4qb9qFXSgmpPmFcQDtu+C/O2SkSHDh3ypk+f7nScntFN4/aLL77Y9u39+vVz0q7169d71atXt8d3NK22ru9mjY+DoJVAY900Zg9KrJWfg1aoUKG445O///7bjo91HpbTwjOhMeRee+0107lzZ3ulIzp1dO/evTaLY+vWrZmucZGddFVRUVdNQdF0ON1XRommyPmZP66T4RSh1zQdrbh3xRVX2PZo/myQq92pvoefZeNPKVL0XsWqlWmjFe5Ud0rRYlc2bNhgV/PQ1X61Rxkuoimh2m4qiuuSCt0qeq+MFl0119VORcaVBaHVWbS6RlA0nzk6hVuftehVkZSJs3btWqdt0lRGrcipwv6i7J8XXnjBTjMMYuUhn44lXb0OC2WsRGdmKTOicOHCtu8M8kqRsv7UT/r1tXRVX9tNx73LTLKw9+ex3jNWG1y3KzNtck3ZrbFoX+p4U2alPp+url6LrlzHosy2+++/32Yta6qcS1qMQVN4VRD7nXfesasfPffcczYD9vjjjzdBef755+00Dq0SpfGKrgr/8ssvtm8PUtj6BWUka/q1aqTpfbV9NC7W6olB1wuMXqU3Hper9IZt34V5W2VERZaVPelq9kB6fv75ZztmUL1Fnf8p482FrCxIodkYN998s10BOacpS1nHtEqSaIVJ9fEqP6IMqWuvvdaeVwShatWqJoyiV8SNZ0pO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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAArNVJREFUeJzs3XdYFNf7NvB7l94tKIoColHB3mvsimLvJhobmtiNYonGX2yxJCbWJHYQTeyxosZo7MYSK/aOYgE7YKU+7x++7NeVBRcDMxO9P9c1l845szs37LI7++yZOToRERARERERERERESlIr3YAIiIiIiIiIiL68LAoRUREREREREREimNRioiIiIiIiIiIFMeiFBERERERERERKY5FKSIiIiIiIiIiUhyLUkREREREREREpDgWpYiIiIiIiIiISHEsShERERERERERkeJYlCIiIiIiIiIiIsWxKEVERJQBrVq1gp2dHaKjo9PcplOnTrCyssLdu3f/9f6uX78OnU6HkJCQDN929+7d0Ol0+P3339+67dixY6HT6Yzaateujdq1axu16XQ6jB071rB+7tw5jB07FtevX89wvozm+bcePnyIkSNHolixYnBwcICLiwt8fHzQuXNnnDp1yrBdSEgIdDpdpv9M78pUnm7duqFAgQKq5OnWrRt0Op1hsbGxQdGiRTFmzBi8fPky0/Zz584djB07FidPnnzn+0j5G9i9e3em5XpduXLloNPp8OOPP77zfWzZssXob+p1BQoUQLdu3TJ8n6Z+7vT2Q0REpBYWpYiIiDKgR48eePnyJZYtW2ayPyYmBuvWrUPTpk3h5ub2r/eXN29eHDx4EE2aNPnX95Wenj174uDBg2/d7uDBg+jZs6dh/dy5cxg3blymF3DMzWOup0+fokqVKggJCUHPnj2xceNGLF26FF988QXCw8ONCh9NmjTBwYMHkTdv3kzbf2b75ptvsG7dOtX2b2dnh4MHD+LgwYNYv349KleujPHjx6Nr166Zto87d+5g3Lhx/6ooVa5cORw8eBDlypXLtFwpTp48iRMnTgAAgoKC3vl+tmzZgnHjxpnsW7duHb755psM36epnzu9/RAREanFUu0ARERE/yX+/v5wd3dHcHAw+vbtm6p/+fLlePHiBXr06PGv9pOUlITExETY2NigSpUq/+q+zJE/f37kz5//rdsp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8uWoVq0anJ2dcfHiRUyZMgXOzs6pTtv8L+jRowcaNGiAvHnzIioqCnPnzsX58+cxc+ZMtaORwuLi4nD8+HH8888/WLduHaZNm8aCFBERKYZFKSIiIsoSrVq1QlRUFGrUqGGYav6/ysHBAUePHkVQUBCio6Ph4uKC2rVrY+LEiXBzc1M7XoY9efIEQ4cOxf3792FlZYVy5cphy5YtWXbqG2lXZGSkodjaq1cvDBgwQO1IRET0AeHpe0REREREREREpDhe6JyIiIiIiIiIiBSnelFq9uzZ8Pb2hq2tLcqXL499+/aluW23bt2g0+lSLf/la1QQEREREREREX2IVC1KrVy5EoMGDcKoUaNw4sQJ1KhRA/7+/oiIiDC5/cyZMxEZGWlYbt68iRw5cqBdu3YKJyciIiIiIiIion9D1WtKVa5cGeXKlcOcOXMMbb6+vmjZsiUmT5781tuvX78erVu3Rnh4OLy8vMzaZ3JyMu7cuQMnJyfodLp3zk5ERERERERERKmJCJ48eQJ3d3fo9WmPh1Jt9r34+HgcO3YMI0aMMGr38/PDgQMHzLqPoKAg1K9fP92CVFxcHOLi4gzrt2/fRrFixd4tNBERERERERERmeXmzZvInz9/mv2qFaUePHiApKSkVNMou7m5ISoq6q23j4yMxB9//IFly5alu93kyZMxbty4VO03b96Es7NzxkITEREREREREVG6YmNj4eHhAScnp3S3U60oleLNU+hExKzT6kJCQpAtWza0bNky3e1GjhyJwMBAw3rKL8bZ2ZlFKSIiIiIiIiKiLPK2+o5qRSlXV1dYWFikGhV17969VKOn3iQiCA4ORufOnWFtbZ3utjY2NrCxsfnXeYmIiIiIiIiIKPOoNvuetbU1ypcvj+3btxu1b9++HdWqVUv3tnv27MGVK1fQo0ePrIxIRERERERERERZRNXT9wIDA9G5c2dUqFABVatWxfz58xEREYHevXsDeHXq3e3bt7FkyRKj2wUFBaFy5cooUaKEGrGJiIiIiIiIiOhfUrUo1aFDBzx8+BDjx49HZGQkSpQogS1bthhm04uMjERERITRbWJiYrBmzRrMnDlTjchERERERERERJQJdCIiaodQUmxsLFxcXBATE8MLnRMRERERERERZTJzay+qXVOKiIiIiIiIiIg+XCxKERERERERERGR4liUIiIiIiIiIiIixbEoRUREREREREREimNRioiIiIiIiIiIFMeiFBERERERERERKc5S7QBERERERERERJS1CozYnGn3df27JplyPxwpRUREREREREREimNRioiIiIiIiIiIFMeiFBERERERERERKY5FKSIiIiIiIiIiUhyLUkREREREREREpDgWpYiIiIiIiIiISHEsShERERERERERkeJYlCIiIiIiIiIiIsWxKEVERERERERERIpjUYqIiIiIiIiIiBTHohQRERERERERESmORSkiIiIiIiIiIlIci1JERERERERERKQ4FqWIiIiIiIiIiEhxLEoREREREREREZHiWJQiIiIiIiIiIiLFsShFRERERERERESKY1GKiIiIiIiIiIgUx6IUEREREREREREpjkUpIiIiIiIiIiJSHItSRERERERERESkOBaliIiIiIiIiIhIcSxKERERERERERGR4lQvSs2ePRve3t6wtbVF+fLlsW/fvnS3j4uLw6hRo+Dl5QUbGxsUKlQIwcHBCqUlIiIiIiIiIqLMYKnmzleuXIlBgwZh9uzZqF69OubNmwd/f3+cO3cOnp6eJm/Tvn173L17F0FBQfjoo49w7949JCYmKpyciIiIiIiIiIj+DZ2IiFo7r1y5MsqVK4c5c+YY2nx9fdGyZUtMnjw51fZbt27FJ598gmvXriFHjhzvtM/Y2Fi4uLggJiYGzs7O75ydiIiIiIiIiOi/osCIzZl2X9e/a5Juv7m1F9VO34uPj8exY8fg5+dn1O7n54cDBw6YvM3GjRtRoUIFTJkyBfny5UORIkUwdOhQvHjxIs39xMXFITY21mghIiIiIiIiIiJ1qXb63oMHD5CUlAQ3Nzejdjc3N0RFRZm8zbVr17B//37Y2tpi3bp1ePDgAfr27YtHjx6leV2pyZMnY9y4cZmen4iIiIiIiIiI3p3qFzrX6XRG6yKSqi1FcnIydDodli5dikqVKqFx48aYNm0aQkJC0hwtNXLkSMTExBiWmzdvZvrPQEREREREREREGaPaSClXV1dYWFikGhV17969VKOnUuTNmxf58uWDi4uLoc3X1xciglu3bqFw4cKpbmNjYwMbG5vMDU9ERERERERERP+KaiOlrK2tUb58eWzfvt2offv27ahWrZrJ21SvXh137tzB06dPDW2XLl2CXq9H/vz5szQvERERERERERFlHlVP3wsMDMTChQsRHByM8+fPY/DgwYiIiEDv3r0BvDr1rkuXLobtO3bsiJw5c6J79+44d+4c9u7di2HDhiEgIAB2dnZq/RhERERERERERJRBqp2+BwAdOnTAw4cPMX78eERGRqJEiRLYsmULvLy8AACRkZGIiIgwbO/o6Ijt27djwIABqFChAnLmzIn27dtjwoQJav0IRERERERERET0DnQiImqHUFJsbCxcXFwQExMDZ2dnteMQEREREREREWW5AiM2Z9p9Xf+uSbr95tZeVJ99j4iIiIiIiIiIPjwsShERERERERERkeJYlCIiIiIiIiIiIsWxKEVERERERERERIpjUYqIiIiIiIiIiBTHohQRERERERERESmORSkiIiIiIiIiIlIci1JERERERERERKQ4FqWIiIiIiIiIiEhxLEoREREREREREZHiWJQiIiIiIiIiIiLFsShFRERERERERESKY1GKiIiIiIiIiIgUx6IUEREREREREREpjkUpIiIiIiIiIiJSHItSRERERERERESkOBaliIiIiIiIiIhIcSxKERERERERERGR4liUIiIiIiIiIiIixbEoRUREREREREREimNRioiIiIiIiIiIFMeiFBERERERERERKY5FKSIiIiIiIiIiUhyLUkREREREREREpDgWpYiIiIiIiIiISHEsShERERERERERkeJYlCIiIiIiIiIiIsWxKEVERERERERERIpjUYqIiIiIiIiIiBTHohQRERERERERESnO8l1uFB0djX/++Qf37t1DcnKyUV+XLl0ydF+zZ8/GDz/8gMjISBQvXhwzZsxAjRo1TG67e/du1KlTJ1X7+fPn4ePjk6H9EhERERERERGRejJclAoNDUWnTp3w7NkzODk5QafTGfp0Ol2GilIrV67EoEGDMHv2bFSvXh3z5s2Dv78/zp07B09PzzRvd/HiRTg7OxvWc+XKldEfg4iIiIiIiAgAUGDE5ky5n+vfNcmU+wEyLxOQebmYyXxafE5pUYZP3xsyZAgCAgLw5MkTREdH4/Hjx4bl0aNHGbqvadOmoUePHujZsyd8fX0xY8YMeHh4YM6cOeneLnfu3MiTJ49hsbCwyOiPQUREREREREREKsrwSKnbt29j4MCBsLe3/1c7jo+Px7FjxzBixAijdj8/Pxw4cCDd25YtWxYvX75EsWLF8H//938m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Z5cVGVVTYMTmTLmf6981yZT7ATIvE5B5ubSYCeDjZy5mMh+fU+bRYiYiIiIiItKeDBelAMDOzg4BAQEICAjI7DxERERERERERPQByHBRaufOnVi7di2uX78OnU6HggULok2bNqhZs2ZW5CMiIiIiIiIiovdQhi503rt3b9SvXx/Lly/Hw4cPcf/+ffz222+oU6cOBgwYkFUZiYiIiIiIiIjoPWN2UWrdunVYtGgRgoOD8eDBAxw8eBCHDh3C/fv3sWDBAsyfPx8bN27MyqxERERERERERPSeMLsotWjRIgQGBqJbt27Q6XT/uwO9HgEBARg0aBCCgoKyJCQREREREREREb1fzC5KHT9+HK1atUqzv02bNjh27FimhCIiIiIiIiIioveb2UWpBw8eIF++fGn258uXDw8fPsyUUERERERERERE9H4zuygVHx8Pa2vrNPstLS0RHx+fKaGIiIiIiIiIiOj9ZpmRjb/55hvY29ub7Hv+/HmmBCIiIiIiIiIiovef2UWpmjVr4uLFi2/dhoiIiIiIiIiI6G3MLkrt3r07C2MQEREREREREdGHxOxrShEREREREREREWUWFqWIiIiIiIiIiEhxLEoREREREREREZHiWJQiIiIiIiIiIiLFsShFRERERERERESKM2v2vVOnTpl9h6VKlXrnMERERERERERE9GEwqyhVpkwZ6HQ6iAh0Ol262yYlJWVKMCIiIiIiIiIien+ZdfpeeHg4rl27hvDwcKxZswbe3t6YPXs2Tpw4gRMnTmD27NkoVKgQ1qxZk9V5iYiIiIiIiIjoPWDWSCkvLy/D/9u1a4dZs2ahcePGhrZSpUrBw8MD33zzDVq2bJnpIYmIiIiIiIiI6P2S4Qudnz59Gt7e3qnavb29ce7cuUwJRURERERERERE77cMF6V8fX0xYcIEvHz50tAWFxeHCRMmwNfXN1PDERERERERERHR+8ms0/deN3fuXDRr1gweHh4oXbo0ACAsLAw6nQ6bNm3K9IBERERERERERPT+yXBRqlKlSggPD8dvv/2GCxcuQETQoUMHdOzYEQ4ODlmRkYiIiIiIiIiI3jMZKkolJCSgaNGi2LRpE7744ousykRERERERERERO+5DF1TysrKCnFxcdDpdFmVh4iIiIiIiIiIPgAZvtD5gAED8P333yMxMTEr8hARERERERER0Qcg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y9CkSROz90dERERERERERNphae6GEyZMQOvWrVGrVi04Ojpi8eLFsLa2NvQHBwenumj52wQGBqJz586oUKECqlativnz5yMiIgK9e/cG8OrUu9u3b2PJkiUAXhWkunTpgpkzZ6JKlSqGUVZ2dnZwcXHJ0L6JiIiIiIiIiEg9ZhelcuXKhX379iEmJgaOjo6wsLAw6l+9ejUcHR0ztPMOHTrg4cOHGD9+PCIjI1GiRAls2bIFXl5eAIDIyEhEREQYtp83bx4SExPRr18/9OvXz9DetWtXhISEZGjfRERERERERESkHrOLUinSGpGUI0eOdwrQt29f9O3b12Tfm4Wm3bt3v9M+iIiIiIiIiIhIW8y+phQREREREREREVFmYVGKiIiIiIiIiIgUx6IUEREREREREREpjkUpIiIiIiIiIiJSHItSRERERERERESkOBaliIiIiIiIiIhIcSxKERERERERERGR4liUIiIiIiIiIiIixbEoRUREREREREREimNRioiIiIiIiIiIFMeiFBERERERERERKY5FKSIiIiIiIiIiUhyLUkREREREREREpDgWpYiIiIiIiIiISHEsShERERERERERkeJYlCIiIiIiIiIiIsWxKEVERERERERERIpjUYqIiIiIiIiIiBTHohQRERERERERESmORSkiIiIiIiIiIlIci1JERERERERERKQ4FqWIiIiIiIiIiEhxLEoREREREREREZHiWJQiIiIiIiIiIiLFsShFRERERERERESKY1GKiIiIiIiIiIgUx6IUEREREREREREpjkUpIiIiIiIiIiJSHItSRERERERERESkOBaliIiIiIiIiIhIcaoXpWbPng1vb2/Y2tqifPny2LdvX5rbRkZGomPHjihatCj0ej0GDRqkXFAiIiIiIiIiIso0qhalVq5ciUGDBmHUqFE4ceIEatSoAX9/f0RERJjcPi4uDrly5cKoUaNQunRphdMSEREREREREVFmUbUoNW3aNPTo0QM9e/aEr68vZsyYAQ8PD8yZM8fk9gUKFMDMmTPRpUsXuLi4KJyWiIiIiIiIiIgyi2pFqfj4eBw7dgx+fn5G7X5+fjhw4ECm7ScuLg6xsbFGCxERERERERERqUu1otSDBw+QlJQENzc3o3Y3NzdERUVl2n4mT54MFxcXw+Lh4ZFp901ERERERERERO9G9Qud63Q6o3URSdX2b4wcORIxMTGG5ebNm5l230RERERERERE9G4s1dqxq6srLCwsUo2KunfvXqrRU/+GjY0NbGxsMu3+iIiIiIiIiIjo31NtpJS1tTXKly+P7du3G7Vv374d1apVUykVEREREREREREpQbWRUgAQGBiIzp07o0KFCqhatSrmz5+PiIgI9O7dG8CrU+9u376NJUuWGG5z8uRJAMDTp09x//59nDx5EtbW1ihWrJgaPwIREREREREREb0DVYtSHTp0wMOHDzF+/HhERkaiRIkS2LJlC7y8vAAAkZGRiIiIMLpN2bJlDf8/duwYli1bBi8vL1y/fl3J6ERERERERERE9C+oWpQCgL59+6Jv374m+0JCQlK1iUgWJyIiIiIiIiIioqym+ux7RERERERERET04WFRioiIiIiIiIiIFMeiFBERERERERERKY5FKSIiIiIiIiIiUhyLUkREREREREREpDgWpYiIiIiIiIiISHEsShERERERERERkeJYlCIiIiIiIiIiIsWxKEVERERERERERIpjUYqIiIiIiIiIiBTHohQRERERERERESmORSkiIiIiIiIiIlIci1JERERERERERKQ4FqWIiIiIiIiIiEhxLEoREREREREREZHiWJQiIiIiIiIiIiLFsShFRERERERERESKY1GKiIiIiIiIiIgUx6IUEREREREREREpjkUpIiIiIiIiIiJSHItSRERERERERESkOBaliIiIiIiIiIhIcSxKERERERERERGR4liUIiIiIiIiIiIixbEoRUREREREREREimNRioiIiIiIiIiIFMeiFBERERERERERKY5FKSIiIiIiIiIiUhyLUkREREREREREpDgWpYiIiIiIiIiISHGqF6Vmz54Nb29v2Nraonz58ti3b1+62+/Zswfly5eHra0tChYsiLlz5yqUlIiIiIiIiIiIMouqRamVK1di0KBBGDVqFE6cOIEaNWrA398fERERJrcPDw9H48aNUaNGDZw4cQJff/01Bg4ciDVr1iicnIiIiIiIiIiI/g1Vi1LTpk1Djx490LNnT/j6+mLGjBnw8PDAnDlzTG4/d+5ceHp6YsaMGfD19UXPnj0REBCAH3/8UeHkRERERERERET0b1iqteP4+HgcO3YMI0aMMGr38/PDgQMHTN7m4MGD8PPzM2pr2LAhgoKCkJCQACsr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AAAAADiOohQAAAAAAAAcR1EKAAAAAAAAjqMoBQAAcBV69tln1a1bN9MxAAAALoqiFAAAQICkpqbKsixZlqXQ0FAlJiZqypQpOn78+Pf+O79vcWnKlCl67733vvfHBQAAaGghpgMAAABcTQYPHqzs7GydPn1af/3rXzV+/HgdP35cCxYs8Hvd6dOnFRoa2mA5oqKiFBUV1WB/PwAAwA9FpxQAAEAAhYWF6ZprrlFcXJweeOABjR49WitXrvR1PGVlZSkxMVFhYWGybVu7du3S3XffraioKEVHR2vEiBEqLy+XJOXk5Oi5557Tli1bfB1YOTk5kqSKigpNmDBBbdq0UXR0tG677TZt2bLFl+PcDqvU1FQlJyfrpZdeUkxMjFq2bKlf//rXOn36tJP/ewAAAHzolAIAAGhAERERvsLPV199peXLl+vNN9+U1+uVJCUnJysyMlLr169XTU2NJk2apJEjR+r999/XyJEj9be//U1r1qzRf//3f0uSmjZtKtu2NXToULVo0UJvv/22mjZtqoULF6p///4qLi5WixYtLphl3bp1iomJ0bp16/TVV19p5MiR6tatm371q1858z8DAADgWyhKAQAANJDCwkItXbpU/fv3lyRVV1dryZIlat26tSRp7dq12rp1q0pKShQXFydJWrJkibp06aJPPvlEN998s6KiohQSEqJrrrnG9/cWFBTo888/1/79+xUWFiZJeumll7Ry5Uq98cYbmjBhwgXzNG/eXH/84x/l9XrVqVMnDR06VO+99x5FKQAAYATL9wAAAAJo9erVioqKUnh4uHr16qU+ffpo3rx5kqSEhARfQUqSvvjiC8XFxfkKUpLUuXNnNWvWTF988cVFP8Znn32myspKtWzZ0jc7KioqSiUlJfr6668v+ue6dOni69CSpJiYGO3fv/+H/HMBAAC+NzqlAAAAAqhfv35asGCBQkNDFRsb6zfMPDIy0u+1tm3Lsqzz/o6LnT+rrq5OMTExev/998+71qxZs4v+uXMHq1uWpbq6uou+HgAAoCFRlAIAAAigyMhIdejQoV6v7dy5s3bt2qXdu3f7uqW2bdumiooK/eQnP5EkNWrUSLW1tX5/7mc/+5nKysoUEhKidu3aBTQ/AACAU1i+BwAAYMiAAQN0ww03aPTo0dq8ebMKCws1ZswYJSUl6aabbpIktWvXTiUlJSoqKtLBgwd16tQpDRgwQL169VJycrL+8pe/aOfOndq4caOeeuopffrpp4b/VQAAAPVDUQoAAMAQy7K0cuVKNW/eXH369NGAAQOUmJio1157zfeae++9V4MHD1a/fv3UunVrLVu2TJZl6e2331afPn00duxYXXfddbr//vu1c+dO/ehHPzL4LwIAAKg/y7Zt23QIAAAAAAAABBc6pQAAAAAAAOA4ilIAAAAAAABwHEUpAAAAAAAAOI6iFAAAAAAAABxHUQoAAAAAAACOoygFAAAAAAAAx1GUAgAAAAAAgOMoSgEAAAAAAMBxFKUAAAAAAADgOIpSAAAAAAAAcBxFKQAAAAAAADiOohQAAAAAAAAc9/8A8Znj4VOG8u0AAAAASUVORK5CYII=", "text/plain": [ "
" ] diff --git a/docs/tutorials/carnival/pixi.lock b/docs/tutorials/carnival/pixi.lock index 85c05cecf..4029185f1 100644 --- a/docs/tutorials/carnival/pixi.lock +++ b/docs/tutorials/carnival/pixi.lock @@ -217,7 +217,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - pypi: https://files.pythonhosted.org/packages/02/3f/a6ec28c88e2d8e54d32598a1e0b5208a4baa72a8e7f6e241beab5731eb9d/interface_meta-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/4b/ab615fea52e34579d5c6c7dba86b4f9d7f3cdb6a170b348ec49f34cf4355/anndata-0.11.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/22/b493ec614582307faf3f94989be0f7f0a71932ed6f56c9a80c0bb4a3b51e/pandas-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -257,6 +256,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c5/c4/f6b7c0ec5241a2bde90c7ba1eca6ba44f8488bcedafe9072c79593015ec0/session_info-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/38/48b75c3d8d268a3f19837cb8a89155ead6e97c6892bb64837183ea41db2b/scikit_learn-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/c2/a34097e53efe70a538ae97574ff9e9866e60fc1c792c19da5fd6b56ce7b5/formulaic-1.1.1-py3-none-any.whl @@ -397,7 +397,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.3.3-h8bce59a_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda - pypi: https://files.pythonhosted.org/packages/02/3f/a6ec28c88e2d8e54d32598a1e0b5208a4baa72a8e7f6e241beab5731eb9d/interface_meta-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/06/12/b825caff9d65b101e79efe10aef2ea2724077bf70b75475e03ca9028250c/cvxpy-1.6.6-cp311-cp311-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/0a/4b/ab615fea52e34579d5c6c7dba86b4f9d7f3cdb6a170b348ec49f34cf4355/anndata-0.11.4-py3-none-any.whl @@ -439,6 +438,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a0/570e3dc53e5602b49108f62a13e529f1eec8bfc7ef37d49c825924dcf546/numba-0.66.0.tar.gz - pypi: https://files.pythonhosted.org/packages/c5/c4/f6b7c0ec5241a2bde90c7ba1eca6ba44f8488bcedafe9072c79593015ec0/session_info-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/c2/a34097e53efe70a538ae97574ff9e9866e60fc1c792c19da5fd6b56ce7b5/formulaic-1.1.1-py3-none-any.whl @@ -574,7 +574,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda - pypi: https://files.pythonhosted.org/packages/02/3f/a6ec28c88e2d8e54d32598a1e0b5208a4baa72a8e7f6e241beab5731eb9d/interface_meta-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/0a/4b/ab615fea52e34579d5c6c7dba86b4f9d7f3cdb6a170b348ec49f34cf4355/anndata-0.11.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl @@ -617,6 +616,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/8f/13650cfe25762b51175c677330e6471d5d2c5851a6fbd6df77f0681bb34e/clarabel-0.11.1-cp39-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/37/6e52dbbfedaad4534148853496741739a3430d52231638c84d65dc1a58e7/osqp-1.0.4-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/c5/c4/f6b7c0ec5241a2bde90c7ba1eca6ba44f8488bcedafe9072c79593015ec0/session_info-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/c2/a34097e53efe70a538ae97574ff9e9866e60fc1c792c19da5fd6b56ce7b5/formulaic-1.1.1-py3-none-any.whl @@ -766,7 +766,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda - pypi: https://files.pythonhosted.org/packages/02/3f/a6ec28c88e2d8e54d32598a1e0b5208a4baa72a8e7f6e241beab5731eb9d/interface_meta-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/09/2fc9dbb337e35b3e9680c0370cf8816d9ed76e87da33350656a8b88a6449/cvxpy_base-1.7.1-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/0a/4b/ab615fea52e34579d5c6c7dba86b4f9d7f3cdb6a170b348ec49f34cf4355/anndata-0.11.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl @@ -806,6 +805,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/bf/34/a42b90bff9330ac57e1dcc8c35b978cee47d6e9eee14cb71981b801fc7cf/scs-3.2.7.post2-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c5/c4/f6b7c0ec5241a2bde90c7ba1eca6ba44f8488bcedafe9072c79593015ec0/session_info-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/c2/a34097e53efe70a538ae97574ff9e9866e60fc1c792c19da5fd6b56ce7b5/formulaic-1.1.1-py3-none-any.whl @@ -7715,41 +7715,6 @@ packages: version: 1.3.0 sha256: de35dc5241431886e709e20a14d6597ed07c9f1e8b4bfcffde2190ca5b700ee8 requires_python: '>=3.7,<4.0' -- pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - name: corneto - version: 1.0.0b0 - sha256: 1ee763899597c3224b6abf82e752b752807a3ebd2cb0c50915c2103febe0ab90 - requires_dist: - - picos>=2.6.0 ; extra == 'research' - - cobra>=0.29.0 ; extra == 'research' - - cvxpy>=1.6.5 ; extra == 'ml' - - cvxpy>=1.6.5 ; extra == 'os' - - cvxpy>=1.6.5 ; extra == 'research' - - cvxpy-base>=1.6.5 - - cvxpy-base>=1.6.5 ; extra == 'vanilla' - - graphviz>=0.20.1 ; extra == 'os' - - graphviz>=0.20.1 ; extra == 'research' - - gurobipy ; extra == 'research' - - highspy>=1.9.0 ; extra == 'os' - - highspy>=1.9.0 ; extra == 'research' - - jax>=0.6.1 ; extra == 'ml' - - keras>=3.8.0 ; extra == 'ml' - - matplotlib>=3.5.2 ; extra == 'os' - - matplotlib>=3.5.2 ; extra == 'research' - - networkx>=3.2.1 ; extra == 'os' - - networkx>=3.2.1 ; extra == 'research' - - pandas>=2.2.3 ; extra == 'ml' - - pandas>=2.2.3 ; extra == 'research' - - pcst-fast>=1.0.10 ; extra == 'research' - - pyscipopt>=5.4.1 ; extra == 'os' - - pyscipopt>=5.4.1 ; extra == 'research' - - scikit-learn>=1.6.0 ; extra == 'ml' - - scipy>=1.15.2 - - scipy>=1.15.2 ; extra == 'ml' - - scipy>=1.15.2 ; extra == 'os' - - scipy>=1.15.2 ; extra == 'research' - - scipy>=1.15.2 ; extra == 'vanilla' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl name: charset-normalizer version: 3.4.2 @@ -9486,6 +9451,52 @@ packages: - pooch>=1.6.0 ; extra == 'tests' - conda-lock==3.0.1 ; extra == 'maintenance' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl + name: corneto + version: 1.0.0rc1 + sha256: 1d1203a430617690f6d1a0200d5b5fac5cd42bace112d9d4b0f93edc69306561 + requires_dist: + - picos>=2.6.0 ; extra == 'research' + - annnet[polars]>=0.2.0,<0.3 ; extra == 'annnet' + - cobra>=0.29.0 ; extra == 'research' + - cvxpy>=1.5.1 ; extra == 'ml' + - cvxpy>=1.5.1 ; extra == 'os' + - cvxpy>=1.5.1 ; extra == 'research' + - cvxpy-base>=1.5.1 + - graphviz>=0.20.1 ; extra == 'os' + - graphviz>=0.20.1 ; extra == 'research' + - gurobipy ; extra == 'research' + - highspy>=1.9.0 ; extra == 'os' + - highspy>=1.9.0 ; extra == 'research' + - jax>=0.6.1 ; extra == 'ml' + - keras>=3.8.0 ; extra == 'ml' + - matplotlib>=3.5.2 ; extra == 'os' + - matplotlib>=3.5.2 ; extra == 'research' + - myst-nb>=0.17.2 ; extra == 'docs' + - myst-parser>=0.18.1 ; extra == 'docs' + - networkx>=3.2.1 ; extra == 'os' + - networkx>=3.2.1 ; extra == 'research' + - numpy>=1.25 + - pandas>=2.2.3 ; extra == 'ml' + - pandas>=2.2.3 ; extra == 'research' + - pcst-fast>=1.0.10 ; extra == 'research' + - pydata-sphinx-theme>=0.16.1 ; extra == 'docs' + - pydot>=3.0.4 ; extra == 'docs' + - pyscipopt>=5.4.1 ; extra == 'os' + - pyscipopt>=5.4.1 ; extra == 'research' + - scikit-learn>=1.6.0 ; extra == 'ml' + - scipy>=1.14.1 + - scipy>=1.14.1 ; extra == 'ml' + - scipy>=1.14.1 ; extra == 'os' + - scipy>=1.14.1 ; extra == 'research' + - sphinx>=5.0 ; extra == 'docs' + - sphinx-autodoc-typehints>=1.21.8 ; extra == 'docs' + - sphinx-design>=0.4.1 ; extra == 'docs' + - sphinx-favicon>=1.0.1 ; extra == 'docs' + - sphinx-hoverxref>=1.3.0 ; extra == 'docs' + - sphinxcontrib-bibtex>=2.5.0 ; extra == 'docs' + - sphinxcontrib-napoleon>=0.7 ; extra == 'docs' + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl name: tqdm version: 4.67.1 diff --git a/docs/tutorials/carnival/pixi.toml b/docs/tutorials/carnival/pixi.toml index 6773742f4..6f64ae7f7 100644 --- a/docs/tutorials/carnival/pixi.toml +++ b/docs/tutorials/carnival/pixi.toml @@ -17,5 +17,5 @@ omnipath = "==1.0.9" pydeseq2 = "==0.5.1" cvxpy = "==1.6.6" highspy = "==1.11.0" -corneto = "==1.0.0b0" +corneto = "==1.0.0rc1" gurobipy = "*" diff --git a/docs/tutorials/carnival/single-sample-carnival-transcriptomics.ipynb b/docs/tutorials/carnival/single-sample-carnival-transcriptomics.ipynb index b2905c70e..33ef478ea 100644 --- a/docs/tutorials/carnival/single-sample-carnival-transcriptomics.ipynb +++ b/docs/tutorials/carnival/single-sample-carnival-transcriptomics.ipynb @@ -65,7 +65,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/pablorodriguezmier/Documents/work/repos/pablormier/corneto/docs/tutorials/carnival/.pixi/envs/default/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + "/docs/tutorials/carnival/.pixi/envs/default/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n" ] }, @@ -73,42 +73,42 @@ "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 23:52:02 | [INFO] Downloading data from `https://omnipathdb.org/queries/enzsub?format=json`\n" + "2026-07-22 16:11:14 | [INFO] Downloading data from `https://omnipathdb.org/queries/enzsub?format=json`\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 23:52:02 | [INFO] Downloading data from `https://omnipathdb.org/queries/interactions?format=json`\n" + "2026-07-22 16:11:15 | [INFO] Downloading data from `https://omnipathdb.org/queries/interactions?format=json`\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 23:52:02 | [INFO] Downloading data from `https://omnipathdb.org/queries/complexes?format=json`\n" + "2026-07-22 16:11:15 | [INFO] Downloading data from `https://omnipathdb.org/queries/complexes?format=json`\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 23:52:02 | [INFO] Downloading data from `https://omnipathdb.org/queries/annotations?format=json`\n" + "2026-07-22 16:11:15 | [INFO] Downloading data from `https://omnipathdb.org/queries/annotations?format=json`\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 23:52:02 | [INFO] Downloading data from `https://omnipathdb.org/queries/intercell?format=json`\n" + "2026-07-22 16:11:15 | [INFO] Downloading data from `https://omnipathdb.org/queries/intercell?format=json`\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 23:52:02 | [INFO] Downloading data from `https://omnipathdb.org/about?format=text`\n" + "2026-07-22 16:11:15 | [INFO] Downloading data from `https://omnipathdb.org/about?format=text`\n" ] } ], @@ -333,7 +333,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/ipykernel_49538/3092936879.py:3: DeprecationWarning: design_factors is deprecated and will soon be removed.Please consider providing a formulaic formula using the design argumentinstead.\n", + "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/ipykernel_38631/3092936879.py:3: DeprecationWarning: design_factors is deprecated and will soon be removed.Please consider providing a formulaic formula using the design argumentinstead.\n", " dds = DeseqDataSet(\n", "Fitting size factors...\n", "... done in 0.00 seconds.\n", @@ -351,10 +351,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "... done in 0.96 seconds.\n", + "... done in 1.99 seconds.\n", "\n", - "Fitting dispersion trend curve...\n", - "... done in 0.19 seconds.\n", + "Fitting dispersion trend curve...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "... done in 0.52 seconds.\n", "\n", "Fitting MAP dispersions...\n" ] @@ -363,7 +369,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "... done in 1.17 seconds.\n", + "... done in 1.10 seconds.\n", "\n", "Fitting LFCs...\n" ] @@ -372,7 +378,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "... done in 0.56 seconds.\n", + "... done in 0.54 seconds.\n", "\n", "Calculating cook's distance...\n", "... done in 0.01 seconds.\n", @@ -402,16 +408,16 @@ "\n", " pvalue padj \n", "RP11-347I19.8 4.121536e-01 5.540987e-01 \n", - "TMEM170B 1.884227e-01 3.054162e-01 \n", + "TMEM170B 1.884227e-01 3.053908e-01 \n", "RP11-91P24.6 9.096068e-02 1.682470e-01 \n", "SLC33A1 2.751015e-12 2.426415e-11 \n", - "SNORA61 5.071542e-03 1.382504e-02 \n", + "SNORA61 5.071542e-03 1.382697e-02 \n", "... ... ... \n", - "RP11-75I2.3 1.357073e-194 4.487540e-192 \n", + "RP11-75I2.3 1.357073e-194 4.412748e-192 \n", "SLC25A24 1.071704e-13 1.050701e-12 \n", "BTN2A2 3.097088e-01 4.492492e-01 \n", "RP11-101E3.5 6.111714e-01 7.290708e-01 \n", - "RP11-91I8.3 3.557244e-05 1.474126e-04 \n", + "RP11-91I8.3 3.557244e-05 1.474439e-04 \n", "\n", "[19510 rows x 6 columns]\n" ] @@ -420,7 +426,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "... done in 0.46 seconds.\n", + "... done in 0.37 seconds.\n", "\n" ] } @@ -512,7 +518,7 @@ " 0.210575\n", " -1.315260\n", " 1.884227e-01\n", - " 3.054162e-01\n", + " 3.053908e-01\n", " \n", " \n", " RP11-91P24.6\n", @@ -539,7 +545,7 @@ " 0.266470\n", " 2.802454\n", " 5.071542e-03\n", - " 1.382504e-02\n", + " 1.382697e-02\n", " \n", " \n", " ...\n", @@ -557,7 +563,7 @@ " 0.128113\n", " 29.758231\n", " 1.357073e-194\n", - " 4.487540e-192\n", + " 4.412748e-192\n", " \n", " \n", " SLC25A24\n", @@ -593,7 +599,7 @@ " 0.920191\n", " -4.134502\n", " 3.557244e-05\n", - " 1.474126e-04\n", + " 1.474439e-04\n", " \n", " \n", "\n", @@ -616,16 +622,16 @@ "\n", " pvalue padj \n", "RP11-347I19.8 4.121536e-01 5.540987e-01 \n", - "TMEM170B 1.884227e-01 3.054162e-01 \n", + "TMEM170B 1.884227e-01 3.053908e-01 \n", "RP11-91P24.6 9.096068e-02 1.682470e-01 \n", "SLC33A1 2.751015e-12 2.426415e-11 \n", - "SNORA61 5.071542e-03 1.382504e-02 \n", + "SNORA61 5.071542e-03 1.382697e-02 \n", "... ... ... \n", - "RP11-75I2.3 1.357073e-194 4.487540e-192 \n", + "RP11-75I2.3 1.357073e-194 4.412748e-192 \n", "SLC25A24 1.071704e-13 1.050701e-12 \n", "BTN2A2 3.097088e-01 4.492492e-01 \n", "RP11-101E3.5 6.111714e-01 7.290708e-01 \n", - "RP11-91I8.3 3.557244e-05 1.474126e-04 \n", + "RP11-91I8.3 3.557244e-05 1.474439e-04 \n", "\n", "[19510 rows x 6 columns]" ] @@ -1060,47 +1066,47 @@ " \n", " \n", " treatment.vs.control\n", - " -2.659861\n", - " -3.917514\n", - " -2.807826\n", - " 3.172495\n", - " 3.746244\n", - " 2.70642\n", - " 5.357512\n", - " 2.64909\n", - " -4.204186\n", - " 3.868746\n", + " -2.658269\n", + " -3.915338\n", + " -2.806407\n", + " 3.170952\n", + " 3.744263\n", + " 2.705119\n", + " 5.354716\n", + " 2.647705\n", + " -4.201891\n", + " 3.866736\n", " ...\n", - " -3.7051\n", - " 6.162749\n", - " -2.580217\n", - " -3.576216\n", - " 4.207967\n", - " -3.967803\n", - " 3.237428\n", - " 5.790396\n", - " 3.365598\n", - " -2.734615\n", + " -3.703038\n", + " 6.159527\n", + " -2.57872\n", + " -3.618243\n", + " 4.205744\n", + " -3.965664\n", + " 3.235743\n", + " 5.787311\n", + " 3.363825\n", + " -2.733078\n", " \n", " \n", "\n", - "

1 rows × 141 columns

\n", + "

1 rows × 142 columns

\n", "" ], "text/plain": [ " APEX1 ARID1A ARID4B ARNT ASXL1 \\\n", - "treatment.vs.control -2.659861 -3.917514 -2.807826 3.172495 3.746244 \n", + "treatment.vs.control -2.658269 -3.915338 -2.806407 3.170952 3.744263 \n", "\n", - " ATF6 BARX2 BCL11A BCL11B BMAL2 ... \\\n", - "treatment.vs.control 2.70642 5.357512 2.64909 -4.204186 3.868746 ... \n", + " ATF6 BARX2 BCL11A BCL11B BMAL2 ... \\\n", + "treatment.vs.control 2.705119 5.354716 2.647705 -4.201891 3.866736 ... \n", "\n", - " TBX10 TCF21 TFAP2C TP53 VEZF1 \\\n", - "treatment.vs.control -3.7051 6.162749 -2.580217 -3.576216 4.207967 \n", + " TBX10 TCF21 TFAP2C TP53 VEZF1 \\\n", + "treatment.vs.control -3.703038 6.159527 -2.57872 -3.618243 4.205744 \n", "\n", " WWTR1 ZBTB33 ZEB2 ZNF804A ZXDC \n", - "treatment.vs.control -3.967803 3.237428 5.790396 3.365598 -2.734615 \n", + "treatment.vs.control -3.965664 3.235743 5.787311 3.363825 -2.733078 \n", "\n", - "[1 rows x 141 columns]" + "[1 rows x 142 columns]" ] }, "execution_count": 10, @@ -1142,7 +1148,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1961,28 +1967,28 @@ " \n", " \n", " ABCA1\n", - " -3.200361\n", - " 0.005805\n", + " -3.208177\n", + " 0.005754\n", " \n", " \n", " ACKR3\n", - " 0.021177\n", - " 0.987421\n", + " 0.011038\n", + " 0.992936\n", " \n", " \n", " ACTR2\n", - " -0.719527\n", - " 0.610665\n", + " -0.732264\n", + " 0.600567\n", " \n", " \n", " ACVR1\n", - " 1.328386\n", - " 0.322313\n", + " 1.325987\n", + " 0.321247\n", " \n", " \n", " ACVR1B\n", - " 3.479168\n", - " 0.002621\n", + " 3.472131\n", + " 0.002690\n", " \n", " \n", " ...\n", @@ -1991,28 +1997,28 @@ " \n", " \n", " TRAF2\n", - " -3.720026\n", - " 0.001273\n", + " -3.728965\n", + " 0.001258\n", " \n", " \n", " TYRO3\n", - " -2.529414\n", - " 0.034332\n", + " -2.533851\n", + " 0.033606\n", " \n", " \n", " UTS2R\n", - " -4.141094\n", - " 0.000332\n", + " -4.147080\n", + " 0.000334\n", " \n", " \n", " VIPR1\n", - " 1.310146\n", - " 0.327957\n", + " 1.316101\n", + " 0.324505\n", " \n", " \n", " XCR1\n", - " -1.241386\n", - " 0.341352\n", + " -1.251474\n", + " 0.338022\n", " \n", " \n", "\n", @@ -2021,17 +2027,17 @@ ], "text/plain": [ " activity padj\n", - "ABCA1 -3.200361 0.005805\n", - "ACKR3 0.021177 0.987421\n", - "ACTR2 -0.719527 0.610665\n", - "ACVR1 1.328386 0.322313\n", - "ACVR1B 3.479168 0.002621\n", + "ABCA1 -3.208177 0.005754\n", + "ACKR3 0.011038 0.992936\n", + "ACTR2 -0.732264 0.600567\n", + "ACVR1 1.325987 0.321247\n", + "ACVR1B 3.472131 0.002690\n", "... ... ...\n", - "TRAF2 -3.720026 0.001273\n", - "TYRO3 -2.529414 0.034332\n", - "UTS2R -4.141094 0.000332\n", - "VIPR1 1.310146 0.327957\n", - "XCR1 -1.241386 0.341352\n", + "TRAF2 -3.728965 0.001258\n", + "TYRO3 -2.533851 0.033606\n", + "UTS2R -4.147080 0.000334\n", + "VIPR1 1.316101 0.324505\n", + "XCR1 -1.251474 0.338022\n", "\n", "[229 rows x 2 columns]" ] @@ -2083,7 +2089,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -2139,37 +2145,37 @@ "tags": [] }, "outputs": [ - { - "data": { - "text/html": [], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, { "data": { "text/html": [ "\n", - " \n", - " \n", + "
\n", + " \n", " \n", " \n", - " \n", - "
\n", - " \n", + " \n", " \n", - " \n", - " \n", - "
Installed version:v1.0.0.dev43+3455818f
Available backends:CVXPY v1.6.6
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, HIGHS, OSQP, SCIPY, SCS
Graphviz version:v0.21
Installed path:/Users/pablorodriguezmier/Documents/work/repos/pablormier/corneto/corneto
Repository:https://github.com/saezlab/corneto
\n", + "
Installed version:v1.0.0rc1
Available backends:CVXPY v1.7.1
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, GUROBI, HIGHS, OSQP, SCIPY, SCS
Plot backend (default):auto -> graphviz
Available plot backends:graphviz v0.21; graphviz-wasm
Installed path:/docs/tutorials/carnival/.pixi/envs/default/lib/python3.11/site-packages/corneto
Repository:https://github.com/saezlab/corneto
\n", "
" + " \n", + " \n", + " " ], "text/plain": [ - "" + "Installed version: v1.0.0rc1\n", + "Available backends: CVXPY v1.7.1\n", + "Default backend (corneto.opt): CVXPY\n", + "Installed solvers: CLARABEL, GUROBI, HIGHS, OSQP, SCIPY, SCS\n", + "Plot backend (default): auto -> graphviz\n", + "Available plot backends: graphviz v0.21; graphviz-wasm\n", + "Installed path: /docs/tutorials/carnival/.pixi/envs/default/lib/python3.11/site-packages/corneto\n", + "Repository: https://github.com/saezlab/corneto" ] }, + "execution_count": 19, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -2203,11 +2209,13 @@ "
  • Pablo Rodriguez-Mier, Martin Garrido-Rodriguez, Attila Gabor, Julio Saez-Rodriguez. Unified knowledge-driven network inference from omics data. bioRxiv, pp. 10 (2024).
  • Anika Liu, Panuwat Trairatphisan, Enio Gjerga, Athanasios Didangelos, Jonathan Barratt, Julio Saez-Rodriguez. From expression footprints to causal pathways: contextualizing large signaling networks with CARNIVAL. NPJ systems biology and applications, Vol. 5, No. 1, pp. 40 (2019).
" ], "text/plain": [ - "" + "- Pablo Rodriguez-Mier, Martin Garrido-Rodriguez, Attila Gabor, Julio Saez-Rodriguez. Unified knowledge-driven network inference from omics data. bioRxiv, pp. 10 (2024).\n", + " - Anika Liu, Panuwat Trairatphisan, Enio Gjerga, Athanasios Didangelos, Jonathan Barratt, Julio Saez-Rodriguez. From expression footprints to causal pathways: contextualizing large signaling networks with CARNIVAL. NPJ systems biology and applications, Vol. 5, No. 1, pp. 40 (2019)." ] }, + "execution_count": 20, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -2686,175 +2694,175 @@ " \n", " \n", " SRF\n", - " 7.384275\n", + " 7.390611\n", " \n", " \n", " MYOCD\n", - " 7.346561\n", + " 7.342673\n", " \n", " \n", " SMAD3\n", - " 7.088023\n", + " 7.084429\n", " \n", " \n", " TCF21\n", - " 6.162749\n", + " 6.159527\n", " \n", " \n", " ZEB2\n", - " 5.790396\n", + " 5.787311\n", " \n", " \n", " SMAD2\n", - " 5.617299\n", + " 5.614428\n", " \n", " \n", " JUNB\n", - " 5.613301\n", + " 5.610473\n", " \n", " \n", " FOXD1\n", - " 5.569131\n", + " 5.566138\n", " \n", " \n", " SOX5\n", - " 5.388260\n", + " 5.385469\n", " \n", " \n", " BARX2\n", - " 5.357512\n", + " 5.354716\n", " \n", " \n", " HMGA2\n", - " 4.920654\n", + " 4.918146\n", " \n", " \n", " POU3F1\n", - " 4.906394\n", + " 4.903790\n", " \n", " \n", " RORA\n", - " 4.751216\n", + " 4.748799\n", " \n", " \n", " SMAD4\n", - " 4.442445\n", + " 4.440260\n", " \n", " \n", " OVOL1\n", - " 4.282917\n", + " 4.280655\n", " \n", " \n", " MEF2A\n", - " 4.234915\n", + " 4.232877\n", " \n", " \n", " FGF2\n", - " 4.210021\n", + " 4.207762\n", " \n", " \n", " VEZF1\n", - " 4.207967\n", + " 4.205744\n", " \n", " \n", " EGR4\n", - " 4.112604\n", + " 4.110464\n", " \n", " \n", " SMAD5\n", - " -4.006291\n", + " -4.004015\n", " \n", " \n", " CIITA\n", - " -4.135616\n", + " -4.133309\n", " \n", " \n", " NFKBIB\n", - " -4.156422\n", + " -4.154074\n", " \n", " \n", " REL\n", - " -4.167478\n", + " -4.165033\n", " \n", " \n", " PITX3\n", - " -4.200405\n", + " -4.198049\n", " \n", " \n", " BCL11B\n", - " -4.204186\n", + " -4.201891\n", " \n", " \n", " IRF3\n", - " -4.275299\n", + " -4.272800\n", " \n", " \n", " PITX1\n", - " -4.343037\n", + " -4.340665\n", " \n", " \n", " PARK7\n", - " -4.447875\n", + " -4.445422\n", " \n", " \n", " KLF8\n", - " -4.469565\n", + " -4.467109\n", " \n", " \n", " DNMT3A\n", - " -4.642689\n", + " -4.622450\n", " \n", " \n", " RELB\n", - " -4.684594\n", + " -4.681916\n", " \n", " \n", " NFE2L2\n", - " -4.913963\n", + " -4.911003\n", " \n", " \n", " MECOM\n", - " -4.945115\n", + " -4.942362\n", " \n", " \n", " KLF2\n", - " -5.096991\n", + " -5.094150\n", " \n", " \n", " STAT1\n", - " -5.192426\n", + " -5.189259\n", " \n", " \n", " HOXC6\n", - " -5.261645\n", + " -5.215468\n", " \n", " \n", " IRF2\n", - " -5.272422\n", + " -5.269444\n", " \n", " \n", " KLF11\n", - " -5.272551\n", + " -5.269653\n", " \n", " \n", " SPI1\n", - " -5.425817\n", + " -5.431022\n", " \n", " \n", " NR4A3\n", - " -5.726681\n", + " -5.723505\n", " \n", " \n", " NR1H4\n", - " -6.059037\n", + " -6.055603\n", " \n", " \n", " SKIL\n", - " -7.437322\n", + " -7.433282\n", " \n", " \n", " IRF1\n", - " -9.362766\n", + " -9.357501\n", " \n", " \n", "\n", @@ -2862,49 +2870,49 @@ ], "text/plain": [ " treatment.vs.control\n", - "SRF 7.384275\n", - "MYOCD 7.346561\n", - "SMAD3 7.088023\n", - "TCF21 6.162749\n", - "ZEB2 5.790396\n", - "SMAD2 5.617299\n", - "JUNB 5.613301\n", - "FOXD1 5.569131\n", - "SOX5 5.388260\n", - "BARX2 5.357512\n", - "HMGA2 4.920654\n", - "POU3F1 4.906394\n", - "RORA 4.751216\n", - "SMAD4 4.442445\n", - "OVOL1 4.282917\n", - "MEF2A 4.234915\n", - "FGF2 4.210021\n", - "VEZF1 4.207967\n", - "EGR4 4.112604\n", - "SMAD5 -4.006291\n", - "CIITA -4.135616\n", - "NFKBIB -4.156422\n", - "REL -4.167478\n", - "PITX3 -4.200405\n", - "BCL11B -4.204186\n", - "IRF3 -4.275299\n", - "PITX1 -4.343037\n", - "PARK7 -4.447875\n", - "KLF8 -4.469565\n", - "DNMT3A -4.642689\n", - "RELB -4.684594\n", - "NFE2L2 -4.913963\n", - "MECOM -4.945115\n", - "KLF2 -5.096991\n", - "STAT1 -5.192426\n", - "HOXC6 -5.261645\n", - "IRF2 -5.272422\n", - "KLF11 -5.272551\n", - "SPI1 -5.425817\n", - "NR4A3 -5.726681\n", - "NR1H4 -6.059037\n", - "SKIL -7.437322\n", - "IRF1 -9.362766" + "SRF 7.390611\n", + "MYOCD 7.342673\n", + "SMAD3 7.084429\n", + "TCF21 6.159527\n", + "ZEB2 5.787311\n", + "SMAD2 5.614428\n", + "JUNB 5.610473\n", + "FOXD1 5.566138\n", + "SOX5 5.385469\n", + "BARX2 5.354716\n", + "HMGA2 4.918146\n", + "POU3F1 4.903790\n", + "RORA 4.748799\n", + "SMAD4 4.440260\n", + "OVOL1 4.280655\n", + "MEF2A 4.232877\n", + "FGF2 4.207762\n", + "VEZF1 4.205744\n", + "EGR4 4.110464\n", + "SMAD5 -4.004015\n", + "CIITA -4.133309\n", + "NFKBIB -4.154074\n", + "REL -4.165033\n", + "PITX3 -4.198049\n", + "BCL11B -4.201891\n", + "IRF3 -4.272800\n", + "PITX1 -4.340665\n", + "PARK7 -4.445422\n", + "KLF8 -4.467109\n", + "DNMT3A -4.622450\n", + "RELB -4.681916\n", + "NFE2L2 -4.911003\n", + "MECOM -4.942362\n", + "KLF2 -5.094150\n", + "STAT1 -5.189259\n", + "HOXC6 -5.215468\n", + "IRF2 -5.269444\n", + "KLF11 -5.269653\n", + "SPI1 -5.431022\n", + "NR4A3 -5.723505\n", + "NR1H4 -6.055603\n", + "SKIL -7.433282\n", + "IRF1 -9.357501" ] }, "execution_count": 24, @@ -2942,39 +2950,39 @@ { "data": { "text/plain": [ - "{'SRF': 7.384274933753678,\n", - " 'MYOCD': 7.346560585692566,\n", - " 'SMAD3': 7.088022567967861,\n", - " 'ZEB2': 5.790395603340423,\n", - " 'SMAD2': 5.617299171561388,\n", - " 'JUNB': 5.613301413598558,\n", - " 'HMGA2': 4.920654205164735,\n", - " 'POU3F1': 4.9063937479035795,\n", - " 'RORA': 4.751215803623851,\n", - " 'SMAD4': 4.442444690531756,\n", - " 'MEF2A': 4.234915033987421,\n", - " 'FGF2': 4.210020918905277,\n", - " 'SMAD5': -4.006290782113948,\n", - " 'CIITA': -4.135615580532372,\n", - " 'NFKBIB': -4.156422100656065,\n", - " 'REL': -4.167478417685659,\n", - " 'PITX3': -4.200405283105377,\n", - " 'IRF3': -4.275299453731299,\n", - " 'PITX1': -4.343036884101653,\n", - " 'KLF8': -4.469565287654229,\n", - " 'DNMT3A': -4.642688562638021,\n", - " 'RELB': -4.684594362576203,\n", - " 'NFE2L2': -4.913963130388188,\n", - " 'MECOM': -4.9451147439384044,\n", - " 'STAT1': -5.19242581697902,\n", - " 'HOXC6': -5.261644928875645,\n", - " 'IRF2': -5.272422064497416,\n", - " 'KLF11': -5.272550840567249,\n", - " 'SPI1': -5.425816853074546,\n", - " 'NR4A3': -5.726680520718154,\n", - " 'NR1H4': -6.059037198788599,\n", - " 'SKIL': -7.437321830844388,\n", - " 'IRF1': -9.362766415720282}" + "{'SRF': 7.3906108743123164,\n", + " 'MYOCD': 7.342672817892572,\n", + " 'SMAD3': 7.0844294103820795,\n", + " 'ZEB2': 5.787311392244455,\n", + " 'SMAD2': 5.614427728369875,\n", + " 'JUNB': 5.610473028026834,\n", + " 'HMGA2': 4.918146140281221,\n", + " 'POU3F1': 4.903790337294035,\n", + " 'RORA': 4.748799034758163,\n", + " 'SMAD4': 4.4402600755156145,\n", + " 'MEF2A': 4.232877334898612,\n", + " 'FGF2': 4.207761616198675,\n", + " 'SMAD5': -4.004015430616565,\n", + " 'CIITA': -4.133309143328191,\n", + " 'NFKBIB': -4.154074213081593,\n", + " 'REL': -4.165033347663166,\n", + " 'PITX3': -4.198048894427097,\n", + " 'IRF3': -4.272799795168503,\n", + " 'PITX1': -4.340665200624415,\n", + " 'KLF8': -4.467109049496403,\n", + " 'DNMT3A': -4.622449958822471,\n", + " 'RELB': -4.681915557899264,\n", + " 'NFE2L2': -4.911003015915443,\n", + " 'MECOM': -4.942361740804518,\n", + " 'STAT1': -5.189258911506045,\n", + " 'HOXC6': -5.2154678064628905,\n", + " 'IRF2': -5.269444375678524,\n", + " 'KLF11': -5.269652535831714,\n", + " 'SPI1': -5.431022120705177,\n", + " 'NR4A3': -5.72350500604796,\n", + " 'NR1H4': -6.055602968386476,\n", + " 'SKIL': -7.433281684514384,\n", + " 'IRF1': -9.357500631318382}" ] }, "execution_count": 25, @@ -3159,11 +3167,11 @@ "data": { "text/plain": [ "{'_flow': _flow: Variable((3251,), _flow),\n", - " 'const0x41332f448f64593': const0x41332f448f64593: Constant(CONSTANT, NONNEGATIVE, (937, 3251)),\n", - " 'const0xd5dbd53619f708b': const0xd5dbd53619f708b: Constant(CONSTANT, NONNEGATIVE, (937, 3251)),\n", - " 'edge_inhibits': edge_inhibits: Variable((3251, 1), edge_inhibits, boolean=True),\n", " 'edge_activates': edge_activates: Variable((3251, 1), edge_activates, boolean=True),\n", + " 'edge_inhibits': edge_inhibits: Variable((3251, 1), edge_inhibits, boolean=True),\n", + " 'const0x689caa490bb1d38': const0x689caa490bb1d38: Constant(CONSTANT, NONNEGATIVE, (937, 3251)),\n", " '_dag_layer': _dag_layer: Variable((937, 1), _dag_layer),\n", + " 'const0x1f364c592f0a234': const0x1f364c592f0a234: Constant(CONSTANT, NONNEGATIVE, (937, 3251)),\n", " 'flow': _flow: Variable((3251,), _flow),\n", " 'vertex_value': Expression(AFFINE, UNKNOWN, (937, 1)),\n", " 'vertex_activated': Expression(AFFINE, NONNEGATIVE, (937, 1)),\n", @@ -3209,91 +3217,91 @@ "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: Your problem has 10690 variables, 30607 constraints, and 1 parameters.\n" + "(CVXPY) Jul 22 04:11:33 PM: Your problem has 10690 variables, 30607 constraints, and 1 parameters.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: It is compliant with the following grammars: DCP, DQCP\n" + "(CVXPY) Jul 22 04:11:33 PM: It is compliant with the following grammars: DCP, DQCP\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: CVXPY will first compile your problem; then, it will invoke a numerical solver to obtain a solution.\n" + "(CVXPY) Jul 22 04:11:33 PM: CVXPY will first compile your problem; then, it will invoke a numerical solver to obtain a solution.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: Your problem is compiled with the CPP canonicalization backend.\n" + "(CVXPY) Jul 22 04:11:33 PM: Your problem is compiled with the CPP canonicalization backend.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: Compiling problem (target solver=HIGHS).\n" + "(CVXPY) Jul 22 04:11:33 PM: Compiling problem (target solver=HIGHS).\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: Reduction chain: Dcp2Cone -> CvxAttr2Constr -> ConeMatrixStuffing -> HIGHS\n" + "(CVXPY) Jul 22 04:11:33 PM: Reduction chain: Dcp2Cone -> CvxAttr2Constr -> ConeMatrixStuffing -> HIGHS\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: Applying reduction Dcp2Cone\n" + "(CVXPY) Jul 22 04:11:33 PM: Applying reduction Dcp2Cone\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: Applying reduction CvxAttr2Constr\n" + "(CVXPY) Jul 22 04:11:33 PM: Applying reduction CvxAttr2Constr\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: Applying reduction ConeMatrixStuffing\n" + "(CVXPY) Jul 22 04:11:33 PM: Applying reduction ConeMatrixStuffing\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: Applying reduction HIGHS\n" + "(CVXPY) Jul 22 04:11:34 PM: Applying reduction HIGHS\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: Finished problem compilation (took 7.566e-02 seconds).\n" + "(CVXPY) Jul 22 04:11:34 PM: Finished problem compilation (took 7.539e-02 seconds).\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: (Subsequent compilations of this problem, using the same arguments, should take less time.)\n" + "(CVXPY) Jul 22 04:11:34 PM: (Subsequent compilations of this problem, using the same arguments, should take less time.)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:23 PM: Invoking solver HIGHS to obtain a solution.\n" + "(CVXPY) Jul 22 04:11:34 PM: Invoking solver HIGHS to obtain a solution.\n" ] }, { @@ -3302,7 +3310,7 @@ "text": [ "===============================================================================\n", " CVXPY \n", - " v1.6.6 \n", + " v1.7.1 \n", "===============================================================================\n", "-------------------------------------------------------------------------------\n", " Compilation \n", @@ -3318,26 +3326,26 @@ " Bound [1e+00, 1e+00]\n", " RHS [1e+00, 1e+03]\n", "Presolving model\n", - "17788 rows, 10299 cols, 91260 nonzeros 0s\n" + "17785 rows, 10295 cols, 91250 nonzeros 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "12833 rows, 9086 cols, 69235 nonzeros 0s\n", - "12455 rows, 9011 cols, 68752 nonzeros 0s\n" + "12839 rows, 9091 cols, 69193 nonzeros 0s\n", + "12451 rows, 9010 cols, 68715 nonzeros 0s\n", + "\n", + "Solving MIP model with:\n", + " 12451 rows\n", + " 9010 cols (5622 binary, 0 integer, 0 implied int., 3388 continuous, 0 domain fixed)\n", + " 68715 nonzeros\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "Solving MIP model with:\n", - " 12455 rows\n", - " 9011 cols (5625 binary, 0 integer, 0 implied int., 3386 continuous, 0 domain fixed)\n", - " 68752 nonzeros\n", "\n", "Src: B => Branching; C => Central rounding; F => Feasibility pump; J => Feasibility jump;\n", " H => Heuristic; L => Sub-MIP; P => Empty MIP; R => Randomized rounding; Z => ZI Round;\n", @@ -3347,22 +3355,22 @@ " Nodes | B&B Tree | Objective Bounds | Dynamic Constraints | Work \n", "Src Proc. InQueue | Leaves Expl. | BestBound BestSol Gap | Cuts InLp Confl. | LpIters Time\n", "\n", - " J 0 0 0 0.00% -inf 1 Large 0 0 0 0 0.6s\n", - " 0 0 0 0.00% -35.76172711 1 3676.17% 0 0 0 924 0.7s\n" + " 0 0 0 0.00% -65.07953075 inf inf 0 0 0 0 0.5s\n", + " 0 0 0 0.00% -35.74261013 inf inf 0 0 0 916 0.6s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " C 0 0 0 0.00% -31.47852215 -1.758607953 1689.97% 169 24 0 1062 1.5s\n" + " C 0 0 0 0.00% -31.4613484 1 3246.13% 174 21 0 1033 1.2s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " L 0 0 0 0.00% -31.47852215 -30.33661578 3.76% 280 35 0 1112 2.5s\n" + " L 0 0 0 0.00% -31.4613484 -27.4613484 14.57% 337 28 0 1074 3.4s\n" ] }, { @@ -3370,11 +3378,18 @@ "output_type": "stream", "text": [ "\n", - "62.0% inactive integer columns, restarting\n", - "Model after restart has 1325 rows, 2777 cols (204 bin., 0 int., 0 impl., 2573 cont., 0 dom.fix.), and 8468 nonzeros\n", + "59.7% inactive integer columns, restarting\n", + "Model after restart has 4812 rows, 4314 cols (1316 bin., 0 int., 0 impl., 2998 cont., 0 dom.fix.), and 20181 nonzeros\n", "\n", - " 0 0 0 0.00% -31.47852215 -30.33661578 3.76% 15 0 0 5669 3.1s\n", - " 0 0 0 0.00% -31.47852215 -30.33661578 3.76% 16 5 0 6412 3.1s\n" + " 0 0 0 0.00% -31.4613484 -27.4613484 14.57% 12 0 0 6233 4.1s\n", + " 0 0 0 0.00% -31.4613484 -27.4613484 14.57% 12 10 0 6344 4.1s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " L 0 0 0 0.00% -31.4613484 -29.4613484 6.79% 282 28 0 6442 5.0s\n" ] }, { @@ -3382,45 +3397,55 @@ "output_type": "stream", "text": [ "\n", - "57.8% inactive integer columns, restarting\n", - "Model after restart has 930 rows, 2595 cols (81 bin., 0 int., 0 impl., 2514 cont., 0 dom.fix.), and 6944 nonzeros\n", + "2.5% inactive integer columns, restarting\n", + "Model after restart has 4517 rows, 4177 cols (1220 bin., 0 int., 0 impl., 2957 cont., 0 dom.fix.), and 19933 nonzeros\n", "\n", - " 0 0 0 0.00% -31.00328245 -30.33661578 2.20% 8 0 0 8365 3.3s\n", - " 0 0 0 0.00% -31.00328245 -30.33661578 2.20% 8 5 1 8932 3.3s\n", + " 0 0 0 0.00% -31.4613484 -29.4613484 6.79% 15 0 0 14641 5.3s\n", + " 0 0 0 0.00% -31.4613484 -29.4613484 6.79% 15 3 3 14727 5.3s\n", "\n", - "7.4% inactive integer columns, restarting\n", - "Model after restart has 878 rows, 2570 cols (68 bin., 0 int., 0 impl., 2502 cont., 0 dom.fix.), and 6788 nonzeros\n", + "6.6% inactive integer columns, restarting\n", + "Model after restart has 4106 rows, 3960 cols (1096 bin., 0 int., 0 impl., 2864 cont., 0 dom.fix.), and 17942 nonzeros\n", "\n", - " 0 0 0 0.00% -30.47852215 -30.33661578 0.47% 16 0 0 10659 3.5s\n", - " 0 0 0 0.00% -30.47852215 -30.33661578 0.47% 16 14 2 10964 3.5s\n" + " 0 0 0 0.00% -30.89268612 -29.4613484 4.86% 16 0 0 14945 5.4s\n", + " 0 0 0 0.00% -30.89268612 -29.4613484 4.86% 16 12 10 15011 5.4s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Symmetry detection completed in 0.0s\n", + "Found 7 generator(s)\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:27 PM: Problem status: optimal\n" + "(CVXPY) Jul 22 04:11:40 PM: Problem status: optimal\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:27 PM: Optimal value: 9.303e+01\n" + "(CVXPY) Jul 22 04:11:40 PM: Optimal value: 9.298e+01\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:27 PM: Compilation took 7.566e-02 seconds\n" + "(CVXPY) Jul 22 04:11:40 PM: Compilation took 7.539e-02 seconds\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Jun 27 11:52:27 PM: Solver (including time spent in interface) took 3.771e+00 seconds\n" + "(CVXPY) Jul 22 04:11:40 PM: Solver (including time spent in interface) took 6.124e+00 seconds\n" ] }, { @@ -3428,35 +3453,51 @@ "output_type": "stream", "text": [ "\n", - "13.2% inactive integer columns, restarting\n", - "Model after restart has 829 rows, 2548 cols (52 bin., 0 int., 0 impl., 2496 cont., 0 dom.fix.), and 6636 nonzeros\n", + "Restarting search from the root node\n", + "Model after restart has 1218 rows, 2727 cols (172 bin., 0 int., 0 impl., 2555 cont., 0 dom.fix.), and 7817 nonzeros\n", + "\n", + " 20 0 0 0.00% -30.4613484 -29.4613484 3.39% 17 0 0 18065 6.0s\n", + " R 20 0 0 0.00% -30.4613484 -30.32402383 0.45% 17 6 0 18569 6.0s\n", + "\n", + "33.7% inactive integer columns, restarting\n", + "Model after restart has 999 rows, 2632 cols (105 bin., 0 int., 0 impl., 2527 cont., 0 dom.fix.), and 7136 nonzeros\n", "\n", - " 0 0 0 0.00% -30.47852215 -30.33661578 0.47% 9 0 0 11860 3.6s\n", - " 0 0 0 0.00% -30.47852215 -30.33661578 0.47% 9 5 2 12178 3.6s\n", - " 1 0 1 100.00% -30.33661578 -30.33661578 0.00% 313 36 15 13592 3.8s\n", + " 20 0 0 0.00% -30.4613484 -30.32402383 0.45% 6 0 0 18569 6.0s\n", + " 20 0 0 0.00% -30.4613484 -30.32402383 0.45% 6 4 3 18955 6.0s\n", + "\n", + "10.5% inactive integer columns, restarting\n", + "Model after restart has 950 rows, 2611 cols (92 bin., 0 int., 0 impl., 2519 cont., 0 dom.fix.), and 6975 nonzeros\n", + "\n", + " 20 0 0 0.00% -30.4613484 -30.32402383 0.45% 5 0 0 18957 6.0s\n", + " 20 0 0 0.00% -30.4613484 -30.32402383 0.45% 5 5 8 19024 6.0s\n", + "\n", + "Symmetry detection completed in 0.0s\n", + "No symmetry present\n", + "\n", + " 31 0 6 100.00% -30.32402383 -30.32402383 0.00% 402 16 23 19451 6.1s\n", "\n", "Solving report\n", " Status Optimal\n", - " Primal bound -30.3366157837\n", - " Dual bound -30.3366157837\n", + " Primal bound -30.3240238293\n", + " Dual bound -30.3240238293\n", " Gap 0% (tolerance: 0.01%)\n", - " P-D integral 47.8825450825\n", + " P-D integral 73.2418044379\n", " Solution status feasible\n", - " -30.3366157837 (objective)\n", + " -30.3240238293 (objective)\n", " 0 (bound viol.)\n", " 0 (int. viol.)\n", " 0 (row viol.)\n", - " Timing 3.76 (total)\n", + " Timing 6.10 (total)\n", " 0.00 (presolve)\n", " 0.00 (solve)\n", " 0.00 (postsolve)\n", - " Max sub-MIP depth 5\n", - " Nodes 1\n", + " Max sub-MIP depth 7\n", + " Nodes 31\n", " Repair LPs 0 (0 feasible; 0 iterations)\n", - " LP iterations 13592 (total)\n", - " 0 (strong br.)\n", - " 1033 (separation)\n", - " 9661 (heuristics)\n", + " LP iterations 19451 (total)\n", + " 2003 (strong br.)\n", + " 1132 (separation)\n", + " 13344 (heuristics)\n", "-------------------------------------------------------------------------------\n", " Summary \n", "-------------------------------------------------------------------------------\n" @@ -3492,7 +3533,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "error_sample1_0 -> 65.03395318114363\n", + "error_sample1_0 -> 64.98036838411093\n", "penalty_indirect_rules_0 -> [0.]\n", "regularization_edge_has_signal -> 28.0\n" ] @@ -3541,8 +3582,8 @@ "\n", "\n", "MAPK14\n", - "\n", - "MAPK14\n", + "\n", + "MAPK14\n", "\n", "\n", "\n", @@ -3553,35 +3594,35 @@ "\n", "\n", "MAPK14->MAPKAPK2\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "JUNB\n", "\n", "JUNB\n", "\n", "\n", - "\n", + "\n", "MAPK14->JUNB\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "GATA2\n", "\n", "GATA2\n", "\n", "\n", - "\n", + "\n", "MAPK14->GATA2\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "NR3C1\n", "\n", "NR3C1\n", @@ -3589,20 +3630,8 @@ "\n", "\n", "MAPK14->NR3C1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "MEF2A\n", - "\n", - "MEF2A\n", - "\n", - "\n", - "\n", - "MAPK14->MEF2A\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", @@ -3617,13 +3646,13 @@ "\n", "\n", "\n", - "\n", + "\n", "PLK1\n", "\n", "PLK1\n", "\n", "\n", - "\n", + "\n", "MAPKAPK2->PLK1\n", "\n", "\n", @@ -3640,15 +3669,15 @@ "\n", "\n", "\n", - "\n", - "\n", - "IL6R\n", + "\n", + "\n", + "IL6ST\n", "\n", - "IL6R\n", + "IL6ST\n", "\n", - "\n", - "\n", - "IL6->IL6R\n", + "\n", + "\n", + "IL6->IL6ST\n", "\n", "\n", "\n", @@ -3674,60 +3703,72 @@ "\n", "\n", "TRAF6\n", - "\n", - "TRAF6\n", + "\n", + "TRAF6\n", "\n", "\n", "\n", "MAP3K7\n", - "\n", - "MAP3K7\n", + "\n", + "MAP3K7\n", "\n", "\n", "\n", "TRAF6->MAP3K7\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "MAP2K6\n", - "\n", - "MAP2K6\n", + "\n", + "MAP2K6\n", "\n", "\n", - "\n", + "\n", "MAP3K7->MAP2K6\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "NFKBIB\n", - "\n", - "NFKBIB\n", + "\n", + "NFKBIB\n", "\n", "\n", - "\n", + "\n", "MAP3K7->NFKBIB\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "JAK2\n", + "\n", + "JAK2\n", + "\n", + "\n", + "\n", + "IL6ST->JAK2\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "KAT2B\n", "\n", "KAT2B\n", "\n", "\n", - "\n", + "\n", "SMAD2\n", "\n", "SMAD2\n", "\n", "\n", - "\n", + "\n", "KAT2B->SMAD2\n", "\n", "\n", @@ -3739,135 +3780,135 @@ "SMAD3\n", "\n", "\n", - "\n", + "\n", "KAT2B->SMAD3\n", "\n", "\n", "\n", - "\n", + "\n", "\n", - "SMAD4\n", + "MEF2A\n", "\n", - "SMAD4\n", + "MEF2A\n", "\n", - "\n", + "\n", "\n", - "SMAD2->SMAD4\n", + "SMAD2->MEF2A\n", "\n", "\n", "\n", - "\n", - "\n", - "JAK2\n", - "\n", - "JAK2\n", - "\n", - "\n", - "\n", - "IL6R->JAK2\n", - "\n", - "\n", + "\n", + "\n", + "SMAD4\n", + "\n", + "SMAD4\n", "\n", - "\n", - "\n", - "MAP2K6->MAPK14\n", - "\n", - "\n", + "\n", + "\n", + "SMAD3->SMAD4\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "JAK2->STAT6\n", "\n", "\n", "\n", + "\n", + "\n", + "MAP2K6->MAPK14\n", + "\n", + "\n", + "\n", "\n", - "\n", + "\n", "TGFBR1\n", - "\n", - "TGFBR1\n", + "\n", + "TGFBR1\n", "\n", "\n", - "\n", + "\n", "TGFBR1->TRAF6\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "HMGA1\n", "\n", "HMGA1\n", "\n", "\n", - "\n", + "\n", "POU3F1\n", "\n", "POU3F1\n", "\n", "\n", - "\n", + "\n", "HMGA1->POU3F1\n", "\n", "\n", "\n", "\n", - "\n", + "\n", "PIN1\n", "\n", "PIN1\n", "\n", "\n", - "\n", + "\n", "PLK1->PIN1\n", "\n", "\n", "\n", "\n", - "\n", + "\n", "IRF3\n", "\n", "IRF3\n", "\n", "\n", - "\n", + "\n", "PIN1->IRF3\n", "\n", "\n", "\n", "\n", "\n", - "\n", + "\n", "SPI1\n", "\n", "SPI1\n", "\n", "\n", - "\n", + "\n", "GATA2->SPI1\n", "\n", "\n", "\n", "\n", "\n", - "\n", + "\n", "CAV1\n", "\n", "CAV1\n", "\n", "\n", - "\n", + "\n", "CAV1->HMGA1\n", "\n", "\n", "\n", "\n", - "\n", + "\n", "NR3C1->KAT2B\n", "\n", "\n", "\n", "\n", - "\n", + "\n", "NR3C1->CAV1\n", "\n", "\n", @@ -3875,19 +3916,19 @@ "\n", "\n", "e_3250_source\n", - "\n", + "\n", "\n", "\n", "\n", "e_3250_source->TGFBR1\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 32, @@ -3990,23 +4031,23 @@ " \n", " \n", " \n", - " P03231_UBA52\n", + " P0DTC2_UBB\n", " 0.0\n", " \n", " \n", - " GNAI1\n", + " HRH1\n", " 0.0\n", " \n", " \n", - " CDC42\n", + " ATM\n", " 0.0\n", " \n", " \n", - " RPS6KA5\n", + " TNFRSF1A\n", " 0.0\n", " \n", " \n", - " P03186_UBB\n", + " RAC1\n", " 0.0\n", " \n", " \n", @@ -4014,23 +4055,23 @@ " ...\n", " \n", " \n", - " SET\n", + " PCBP2\n", " 0.0\n", " \n", " \n", - " SYNJ1\n", + " MAF\n", " 0.0\n", " \n", " \n", - " MAP2K5\n", + " MAP3K1\n", " 0.0\n", " \n", " \n", - " IFITM3\n", + " ARHGEF7\n", " 0.0\n", " \n", " \n", - " CDK2\n", + " GAB2\n", " 0.0\n", " \n", " \n", @@ -4039,18 +4080,18 @@ "" ], "text/plain": [ - " node_activity\n", - "P03231_UBA52 0.0\n", - "GNAI1 0.0\n", - "CDC42 0.0\n", - "RPS6KA5 0.0\n", - "P03186_UBB 0.0\n", - "... ...\n", - "SET 0.0\n", - "SYNJ1 0.0\n", - "MAP2K5 0.0\n", - "IFITM3 0.0\n", - "CDK2 0.0\n", + " node_activity\n", + "P0DTC2_UBB 0.0\n", + "HRH1 0.0\n", + "ATM 0.0\n", + "TNFRSF1A 0.0\n", + "RAC1 0.0\n", + "... ...\n", + "PCBP2 0.0\n", + "MAF 0.0\n", + "MAP3K1 0.0\n", + "ARHGEF7 0.0\n", + "GAB2 0.0\n", "\n", "[937 rows x 1 columns]" ] @@ -4146,22 +4187,22 @@ " ...\n", " \n", " \n", - " (JUNB)\n", + " (REL)\n", " ()\n", " 0.0\n", " \n", " \n", - " (SRF)\n", + " (MYOCD)\n", " ()\n", " 0.0\n", " \n", " \n", - " (ZEB2)\n", + " (RORA)\n", " ()\n", " 0.0\n", " \n", " \n", - " (SMAD2)\n", + " (IRF3)\n", " ()\n", " 0.0\n", " \n", @@ -4183,10 +4224,10 @@ "(DEPTOR_EEF1A1_MLST8_MTOR_PRR5_RICTOR) (FBXW8) 0.0\n", "(SLK) (MAP3K5) 0.0\n", "... ...\n", - "(JUNB) () 0.0\n", - "(SRF) () 0.0\n", - "(ZEB2) () 0.0\n", - "(SMAD2) () 0.0\n", + "(REL) () 0.0\n", + "(MYOCD) () 0.0\n", + "(RORA) () 0.0\n", + "(IRF3) () 0.0\n", "() (TGFBR1) 1.0\n", "\n", "[3251 rows x 1 columns]" diff --git a/docs/tutorials/contrib/multi_condition_tutorial/multi_condition_carnival.ipynb b/docs/tutorials/contrib/multi_condition_tutorial/multi_condition_carnival.ipynb index 525353d8f..04d2015bc 100644 --- a/docs/tutorials/contrib/multi_condition_tutorial/multi_condition_carnival.ipynb +++ b/docs/tutorials/contrib/multi_condition_tutorial/multi_condition_carnival.ipynb @@ -66,7 +66,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/pablorodriguezmier/Documents/work/repos/pablormier/corneto/docs/tutorials/contrib/multi_condition_tutorial/.pixi/envs/default/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + "/docs/tutorials/contrib/multi_condition_tutorial/.pixi/envs/default/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n" ] }, @@ -77,79 +77,37 @@ "OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\n" ] }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-06-27 18:26:34 | [INFO] Downloading data from `https://omnipathdb.org/queries/enzsub?format=json`\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-06-27 18:26:34 | [INFO] Downloading data from `https://omnipathdb.org/queries/interactions?format=json`\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-06-27 18:26:34 | [INFO] Downloading data from `https://omnipathdb.org/queries/complexes?format=json`\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-06-27 18:26:35 | [INFO] Downloading data from `https://omnipathdb.org/queries/annotations?format=json`\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-06-27 18:26:35 | [INFO] Downloading data from `https://omnipathdb.org/queries/intercell?format=json`\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-06-27 18:26:35 | [INFO] Downloading data from `https://omnipathdb.org/about?format=text`\n" - ] - }, - { - "data": { - "text/html": [], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, { "data": { "text/html": [ "\n", - " \n", - " \n", + "
\n", + " \n", " \n", " \n", - " \n", - "
\n", - " \n", + " \n", " \n", - " \n", - " \n", - "
Installed version:v1.0.0.dev43+3455818f
Available backends:CVXPY v1.6.6
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, GUROBI, OSQP, SCIPY, SCS
Graphviz version:v0.21
Installed path:/Users/pablorodriguezmier/Documents/work/repos/pablormier/corneto/corneto
Repository:https://github.com/saezlab/corneto
\n", + "
Installed version:v1.0.0rc1
Available backends:CVXPY v1.9.2
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, SCS, GUROBI, SCIPY, OSQP
Plot backend (default):auto -> graphviz
Available plot backends:graphviz v0.21; graphviz-wasm
Installed path:/docs/tutorials/contrib/multi_condition_tutorial/.pixi/envs/default/lib/python3.11/site-packages/corneto
Repository:https://github.com/saezlab/corneto
\n", "
" + " \n", + " \n", + " " ], "text/plain": [ - "" + "Installed version: v1.0.0rc1\n", + "Available backends: CVXPY v1.9.2\n", + "Default backend (corneto.opt): CVXPY\n", + "Installed solvers: CLARABEL, SCS, GUROBI, SCIPY, OSQP\n", + "Plot backend (default): auto -> graphviz\n", + "Available plot backends: graphviz v0.21; graphviz-wasm\n", + "Installed path: /docs/tutorials/contrib/multi_condition_tutorial/.pixi/envs/default/lib/python3.11/site-packages/corneto\n", + "Repository: https://github.com/saezlab/corneto" ] }, + "execution_count": 1, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -718,7 +676,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/ipykernel_36144/3807548237.py:3: DeprecationWarning: design_factors is deprecated and will soon be removed.Please consider providing a formulaic formula using the design argumentinstead.\n", + "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/ipykernel_39621/3807548237.py:3: DeprecationWarning: design_factors is deprecated and will soon be removed.Please consider providing a formulaic formula using the design argumentinstead.\n", " dds1 = DeseqDataSet(\n", "Fitting size factors...\n", "... done in 0.01 seconds.\n", @@ -736,10 +694,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "... done in 0.51 seconds.\n", + "... done in 0.49 seconds.\n", "\n", "Fitting dispersion trend curve...\n", - "... done in 0.16 seconds.\n", + "... done in 0.14 seconds.\n", "\n", "Fitting MAP dispersions...\n" ] @@ -757,10 +715,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "... done in 0.35 seconds.\n", + "... done in 0.42 seconds.\n", "\n", "Calculating cook's distance...\n", - "... done in 0.01 seconds.\n", + "... done in 0.02 seconds.\n", "\n", "Replacing 35 outlier genes.\n", "\n", @@ -821,33 +779,33 @@ "output_type": "stream", "text": [ "Log2 fold change & Wald test p-value: condition Leukemic_spontaneous vs Normal\n", - " baseMean log2FoldChange lfcSE stat pvalue \\\n", - "ID \n", - "1810058I24Rik 2306.834064 -0.520564 0.209899 -2.480062 1.313597e-02 \n", - "Lca5 588.642616 -0.161766 0.133110 -1.215284 2.242579e-01 \n", - "Ndufa10 4117.949269 0.398850 0.069244 5.760057 8.408572e-09 \n", - "Appbp2 2465.170707 0.118539 0.079705 1.487218 1.369574e-01 \n", - "Kifc5b 690.030303 -0.424162 0.099361 -4.268891 1.964470e-05 \n", - "... ... ... ... ... ... \n", - "Cysltr2 286.562425 -4.825286 0.629909 -7.660289 1.855156e-14 \n", - "4632428C04Rik 56.421523 -2.093111 0.276118 -7.580482 3.442732e-14 \n", - "Rpl3l 139.393115 -2.158983 0.363642 -5.937118 2.900761e-09 \n", - "Zmym5 2503.994249 -0.176314 0.076212 -2.313479 2.069633e-02 \n", - "Calr 31398.387870 0.239688 0.101100 2.370808 1.774925e-02 \n", + " baseMean log2FoldChange lfcSE stat pvalue \\\n", + "ID \n", + "Itm2a 319.854773 1.040954 0.173014 6.016588 1.781313e-09 \n", + "Sergef 518.491011 1.165972 0.102390 11.387579 4.822033e-30 \n", + "Fam109a 353.074249 0.270614 0.099379 2.723045 6.468333e-03 \n", + "Dhx9 28622.656109 -0.009588 0.058553 -0.163747 8.699304e-01 \n", + "Ssu72 3007.691599 -0.047053 0.044517 -1.056967 2.905267e-01 \n", + "... ... ... ... ... ... \n", + "Ctsw 204.692803 -1.015983 0.513348 -1.979131 4.780130e-02 \n", + "Ryk 82.285327 -2.689443 0.325351 -8.266294 1.381879e-16 \n", + "Rhd 519.107839 -4.933983 0.449260 -10.982454 4.641417e-28 \n", + "Pxmp4 791.774976 -0.367077 0.068277 -5.376307 7.602927e-08 \n", + "Gm25500 9.166514 0.879435 0.429192 2.049048 4.045745e-02 \n", "\n", - " padj \n", - "ID \n", - "1810058I24Rik 1.963385e-02 \n", - "Lca5 2.674048e-01 \n", - "Ndufa10 2.596737e-08 \n", - "Appbp2 1.710551e-01 \n", - "Kifc5b 4.193482e-05 \n", - "... ... \n", - "Cysltr2 9.467430e-14 \n", - "4632428C04Rik 1.721366e-13 \n", - "Rpl3l 9.335902e-09 \n", - "Zmym5 3.000957e-02 \n", - "Calr 2.599996e-02 \n", + " padj \n", + "ID \n", + "Itm2a 5.852272e-09 \n", + "Sergef 9.577094e-29 \n", + "Fam109a 1.008288e-02 \n", + "Dhx9 8.900440e-01 \n", + "Ssu72 3.376801e-01 \n", + "... ... \n", + "Ctsw 6.506168e-02 \n", + "Ryk 8.517614e-16 \n", + "Rhd 7.596825e-27 \n", + "Pxmp4 2.123474e-07 \n", + "Gm25500 5.581542e-02 \n", "\n", "[13585 rows x 6 columns]\n" ] @@ -856,7 +814,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "... done in 0.30 seconds.\n", + "... done in 0.23 seconds.\n", "\n" ] } @@ -928,15 +886,6 @@ " \n", " \n", " \n", - " Egfl6\n", - " 958.998149\n", - " -6.296339\n", - " 0.244241\n", - " -25.779215\n", - " 1.516794e-146\n", - " 1.279074e-142\n", - " \n", - " \n", " Polm\n", " 2883.081884\n", " -7.255498\n", @@ -946,6 +895,15 @@ " 1.279074e-142\n", " \n", " \n", + " Egfl6\n", + " 958.998149\n", + " -6.296339\n", + " 0.244241\n", + " -25.779215\n", + " 1.516794e-146\n", + " 1.279074e-142\n", + " \n", + " \n", " Kdm5b\n", " 2202.514358\n", " -5.510307\n", @@ -979,16 +937,16 @@ "text/plain": [ " baseMean log2FoldChange lfcSE stat pvalue \\\n", "ID \n", - "Egfl6 958.998149 -6.296339 0.244241 -25.779215 1.516794e-146 \n", "Polm 2883.081884 -7.255498 0.281539 -25.770836 1.883068e-146 \n", + "Egfl6 958.998149 -6.296339 0.244241 -25.779215 1.516794e-146 \n", "Kdm5b 2202.514358 -5.510307 0.220788 -24.957441 1.772980e-137 \n", "Milr1 1647.365126 1.244237 0.050208 24.781408 1.422471e-135 \n", "Adgre5 10346.763067 -3.102891 0.125360 -24.751915 2.956557e-135 \n", "\n", " padj \n", "ID \n", - "Egfl6 1.279074e-142 \n", "Polm 1.279074e-142 \n", + "Egfl6 1.279074e-142 \n", "Kdm5b 8.028642e-134 \n", "Milr1 4.831069e-132 \n", "Adgre5 8.032965e-132 " @@ -1092,7 +1050,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/ipykernel_36144/3739200126.py:3: DeprecationWarning: design_factors is deprecated and will soon be removed.Please consider providing a formulaic formula using the design argumentinstead.\n", + "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/ipykernel_39621/3739200126.py:3: DeprecationWarning: design_factors is deprecated and will soon be removed.Please consider providing a formulaic formula using the design argumentinstead.\n", " dds2 = DeseqDataSet(\n", "Fitting size factors...\n", "... done in 0.01 seconds.\n", @@ -1117,10 +1075,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "... done in 0.58 seconds.\n", + "... done in 0.55 seconds.\n", "\n", "Fitting dispersion trend curve...\n", - "... done in 0.14 seconds.\n", + "... done in 0.12 seconds.\n", "\n", "Fitting MAP dispersions...\n" ] @@ -1129,7 +1087,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "... done in 0.72 seconds.\n", + "... done in 0.75 seconds.\n", "\n", "Fitting LFCs...\n" ] @@ -1138,7 +1096,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "... done in 0.38 seconds.\n", + "... done in 0.42 seconds.\n", "\n", "Calculating cook's distance...\n", "... done in 0.02 seconds.\n", @@ -1152,7 +1110,7 @@ "... done in 0.03 seconds.\n", "\n", "Fitting LFCs...\n", - "... done in 0.03 seconds.\n", + "... done in 0.04 seconds.\n", "\n" ] } @@ -1202,33 +1160,33 @@ "output_type": "stream", "text": [ "Log2 fold change & Wald test p-value: condition Leukemic_SB vs Normal\n", - " baseMean log2FoldChange lfcSE stat \\\n", - "ID \n", - "1810058I24Rik 2064.811388 -0.442806 0.118660 -3.731708 \n", - "Lca5 510.125522 -0.359272 0.149948 -2.395976 \n", - "Ndufa10 4456.508043 0.394199 0.090897 4.336742 \n", - "Appbp2 2462.624276 0.090457 0.064445 1.403626 \n", - "Kifc5b 592.263227 -0.501251 0.082228 -6.095893 \n", - "... ... ... ... ... \n", - "Cysltr2 138.715435 -5.529876 0.471282 -11.733688 \n", - "4632428C04Rik 30.799835 -2.844812 0.312001 -9.117946 \n", - "Rpl3l 105.987870 -1.395339 0.433373 -3.219718 \n", - "Zmym5 2220.329783 -0.312692 0.074025 -4.224160 \n", - "Calr 35244.098802 0.385481 0.089990 4.283597 \n", + " baseMean log2FoldChange lfcSE stat pvalue \\\n", + "ID \n", + "Itm2a 336.316323 0.710476 0.224228 3.168537 1.532084e-03 \n", + "Sergef 692.078769 1.218302 0.070644 17.245745 1.204506e-66 \n", + "Fam109a 382.268647 0.329745 0.097073 3.396873 6.816056e-04 \n", + "Dhx9 27794.304719 -0.031645 0.064081 -0.493828 6.214275e-01 \n", + "Ssu72 2994.457694 0.004410 0.061412 0.071816 9.427485e-01 \n", + "... ... ... ... ... ... \n", + "Ctsw 151.303280 -1.150780 0.374313 -3.074381 2.109398e-03 \n", + "Ryk 50.267450 -2.400835 0.309995 -7.744751 9.576951e-15 \n", + "Rhd 259.540718 -4.740190 0.424503 -11.166439 5.951916e-29 \n", + "Pxmp4 783.587183 -0.148554 0.095118 -1.561793 1.183368e-01 \n", + "Gm25500 8.618646 0.386326 0.302098 1.278810 2.009639e-01 \n", "\n", - " pvalue padj \n", - "ID \n", - "1810058I24Rik 1.901861e-04 4.137057e-04 \n", - "Lca5 1.657617e-02 2.635358e-02 \n", - "Ndufa10 1.446102e-05 3.691401e-05 \n", - "Appbp2 1.604301e-01 2.067697e-01 \n", - "Kifc5b 1.088284e-09 4.606051e-09 \n", - "... ... ... \n", - "Cysltr2 8.564356e-32 2.381673e-30 \n", - "4632428C04Rik 7.656182e-20 8.495320e-19 \n", - "Rpl3l 1.283169e-03 2.467662e-03 \n", - "Zmym5 2.398333e-05 5.918124e-05 \n", - "Calr 1.838955e-05 4.627248e-05 \n", + " padj \n", + "ID \n", + "Itm2a 2.906320e-03 \n", + "Sergef 2.409731e-64 \n", + "Fam109a 1.365860e-03 \n", + "Dhx9 6.748999e-01 \n", + "Ssu72 9.529865e-01 \n", + "... ... \n", + "Ctsw 3.916660e-03 \n", + "Ryk 6.703365e-14 \n", + "Rhd 1.323043e-27 \n", + "Pxmp4 1.573129e-01 \n", + "Gm25500 2.530503e-01 \n", "\n", "[13404 rows x 6 columns]\n" ] @@ -1237,7 +1195,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "... done in 0.28 seconds.\n", + "... done in 0.23 seconds.\n", "\n" ] } @@ -1605,53 +1563,53 @@ " \n", " \n", " ID\n", - " 1810058I24Rik\n", - " Lca5\n", - " Ndufa10\n", - " Appbp2\n", - " Kifc5b\n", - " Dusp14\n", - " Snx13\n", - " Hdhd3\n", - " Dnajb14\n", - " Tesk2\n", + " Itm2a\n", + " Sergef\n", + " Fam109a\n", + " Dhx9\n", + " Ssu72\n", + " Eif2b2\n", + " Mks1\n", + " Vps28\n", + " Setd6\n", + " Psma4\n", " ...\n", - " Emc7\n", - " B3galt5\n", - " Tmprss4\n", - " Kif4\n", - " Alpk2\n", - " Cysltr2\n", - " 4632428C04Rik\n", - " Rpl3l\n", - " Zmym5\n", - " Calr\n", + " Cd37\n", + " Rag2\n", + " Itgb1bp2\n", + " Sec23ip\n", + " Gosr1\n", + " Ctsw\n", + " Ryk\n", + " Rhd\n", + " Pxmp4\n", + " Gm25500\n", " \n", " \n", " \n", " \n", " Leukemic_spontaneous.vs.Normal\n", - " -2.480062\n", - " -1.215284\n", - " 5.760057\n", - " 1.487218\n", - " -4.268891\n", - " -4.893978\n", - " -0.736225\n", - " 3.792193\n", - " -2.018379\n", - " -9.098806\n", + " 6.016588\n", + " 11.387579\n", + " 2.723045\n", + " -0.163747\n", + " -1.056967\n", + " 7.738055\n", + " 3.636604\n", + " 2.671039\n", + " 6.008118\n", + " 3.939383\n", " ...\n", - " 1.907317\n", - " 2.085353\n", - " 9.76056\n", - " -10.189153\n", - " -1.853138\n", - " -7.660289\n", - " -7.580482\n", - " -5.937118\n", - " -2.313479\n", - " 2.370808\n", + " 3.891274\n", + " -2.875231\n", + " -0.371605\n", + " -11.321515\n", + " 2.340763\n", + " -1.979131\n", + " -8.266294\n", + " -10.982454\n", + " -5.376307\n", + " 2.049048\n", " \n", " \n", "\n", @@ -1659,20 +1617,20 @@ "" ], "text/plain": [ - "ID 1810058I24Rik Lca5 Ndufa10 Appbp2 \\\n", - "Leukemic_spontaneous.vs.Normal -2.480062 -1.215284 5.760057 1.487218 \n", + "ID Itm2a Sergef Fam109a Dhx9 \\\n", + "Leukemic_spontaneous.vs.Normal 6.016588 11.387579 2.723045 -0.163747 \n", "\n", - "ID Kifc5b Dusp14 Snx13 Hdhd3 \\\n", - "Leukemic_spontaneous.vs.Normal -4.268891 -4.893978 -0.736225 3.792193 \n", + "ID Ssu72 Eif2b2 Mks1 Vps28 \\\n", + "Leukemic_spontaneous.vs.Normal -1.056967 7.738055 3.636604 2.671039 \n", "\n", - "ID Dnajb14 Tesk2 ... Emc7 B3galt5 \\\n", - "Leukemic_spontaneous.vs.Normal -2.018379 -9.098806 ... 1.907317 2.085353 \n", + "ID Setd6 Psma4 ... Cd37 Rag2 \\\n", + "Leukemic_spontaneous.vs.Normal 6.008118 3.939383 ... 3.891274 -2.875231 \n", "\n", - "ID Tmprss4 Kif4 Alpk2 Cysltr2 \\\n", - "Leukemic_spontaneous.vs.Normal 9.76056 -10.189153 -1.853138 -7.660289 \n", + "ID Itgb1bp2 Sec23ip Gosr1 Ctsw \\\n", + "Leukemic_spontaneous.vs.Normal -0.371605 -11.321515 2.340763 -1.979131 \n", "\n", - "ID 4632428C04Rik Rpl3l Zmym5 Calr \n", - "Leukemic_spontaneous.vs.Normal -7.580482 -5.937118 -2.313479 2.370808 \n", + "ID Ryk Rhd Pxmp4 Gm25500 \n", + "Leukemic_spontaneous.vs.Normal -8.266294 -10.982454 -5.376307 2.049048 \n", "\n", "[1 rows x 13585 columns]" ] @@ -1712,42 +1670,84 @@ "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:45 | [INFO] ulm - Running ulm\n" + "2026-07-22 16:14:16 | [INFO] ulm - Running ulm\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:decoupler:ulm - Running ulm\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-07-22 16:14:16 | [INFO] Extracted omics mat with 1 rows (observations) and 13585 columns (features)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:decoupler:Extracted omics mat with 1 rows (observations) and 13585 columns (features)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-07-22 16:14:17 | [INFO] Network adjacency matrix has 4442 unique features and 640 unique sources\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:decoupler:Network adjacency matrix has 4442 unique features and 640 unique sources\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-07-22 16:14:17 | [INFO] ulm - fitting 640 univariate models of 13585 observations (targets) with 13583 degrees of freedom\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:45 | [INFO] Extracted omics mat with 1 rows (observations) and 13585 columns (features)\n" + "INFO:decoupler:ulm - fitting 640 univariate models of 13585 observations (targets) with 13583 degrees of freedom\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:45 | [INFO] Network adjacency matrix has 4442 unique features and 640 unique sources\n" + "2026-07-22 16:14:17 | [INFO] ulm - adjusting p-values by FDR\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:45 | [INFO] ulm - fitting 640 univariate models of 13585 observations (targets) with 13583 degrees of freedom\n" + "INFO:decoupler:ulm - adjusting p-values by FDR\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:45 | [INFO] ulm - adjusting p-values by FDR\n" + "2026-07-22 16:14:17 | [INFO] ulm - done\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:45 | [INFO] ulm - done\n" + "INFO:decoupler:ulm - done\n" ] }, { @@ -1797,27 +1797,27 @@ " \n", " \n", " Leukemic_spontaneous.vs.Normal\n", - " 1.452444\n", - " -0.115657\n", - " -2.245577\n", - " 0.882836\n", - " -0.298509\n", - " -0.176434\n", - " -0.632351\n", - " -0.453507\n", - " -1.821614\n", - " 0.260513\n", + " 1.452427\n", + " -0.114799\n", + " -2.245622\n", + " 0.882775\n", + " -0.297864\n", + " -0.176459\n", + " -0.632378\n", + " -0.453538\n", + " -1.821644\n", + " 0.260495\n", " ...\n", - " -1.43915\n", - " 0.110719\n", - " -1.527694\n", - " -0.947716\n", - " 1.092937\n", - " 0.530854\n", - " -0.030247\n", - " 1.945875\n", - " 1.945875\n", - " 1.025677\n", + " -1.439184\n", + " 0.110701\n", + " -1.527737\n", + " -0.94774\n", + " 1.098365\n", + " 0.530819\n", + " -0.030262\n", + " 1.943526\n", + " 1.943526\n", + " 1.024536\n", " \n", " \n", "\n", @@ -1826,19 +1826,19 @@ ], "text/plain": [ " Abl1 Ahr Aire Apex1 \\\n", - "Leukemic_spontaneous.vs.Normal 1.452444 -0.115657 -2.245577 0.882836 \n", + "Leukemic_spontaneous.vs.Normal 1.452427 -0.114799 -2.245622 0.882775 \n", "\n", " Ar Arid1a Arid1b Arid3a \\\n", - "Leukemic_spontaneous.vs.Normal -0.298509 -0.176434 -0.632351 -0.453507 \n", + "Leukemic_spontaneous.vs.Normal -0.297864 -0.176459 -0.632378 -0.453538 \n", "\n", - " Arid3b Arid4a ... Zfpm1 Zfpm2 \\\n", - "Leukemic_spontaneous.vs.Normal -1.821614 0.260513 ... -1.43915 0.110719 \n", + " Arid3b Arid4a ... Zfpm1 Zfpm2 \\\n", + "Leukemic_spontaneous.vs.Normal -1.821644 0.260495 ... -1.439184 0.110701 \n", "\n", - " Zglp1 Zgpat Zhx2 Zic1 \\\n", - "Leukemic_spontaneous.vs.Normal -1.527694 -0.947716 1.092937 0.530854 \n", + " Zglp1 Zgpat Zhx2 Zic1 \\\n", + "Leukemic_spontaneous.vs.Normal -1.527737 -0.94774 1.098365 0.530819 \n", "\n", " Zic2 Zkscan3 Zkscan4 Zkscan7 \n", - "Leukemic_spontaneous.vs.Normal -0.030247 1.945875 1.945875 1.025677 \n", + "Leukemic_spontaneous.vs.Normal -0.030262 1.943526 1.943526 1.024536 \n", "\n", "[1 rows x 640 columns]" ] @@ -1876,7 +1876,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1953,53 +1953,53 @@ " \n", " \n", " ID\n", - " 1810058I24Rik\n", - " Lca5\n", - " Ndufa10\n", - " Appbp2\n", - " Kifc5b\n", - " Snx13\n", - " Hdhd3\n", - " Dnajb14\n", - " Tesk2\n", - " Adnp\n", + " Itm2a\n", + " Sergef\n", + " Fam109a\n", + " Dhx9\n", + " Ssu72\n", + " Eif2b2\n", + " Mks1\n", + " Vps28\n", + " Setd6\n", + " Psma4\n", " ...\n", - " Emc7\n", - " B3galt5\n", - " Tmprss4\n", - " Kif4\n", - " Alpk2\n", - " Cysltr2\n", - " 4632428C04Rik\n", - " Rpl3l\n", - " Zmym5\n", - " Calr\n", + " Cd37\n", + " Rag2\n", + " Itgb1bp2\n", + " Sec23ip\n", + " Gosr1\n", + " Ctsw\n", + " Ryk\n", + " Rhd\n", + " Pxmp4\n", + " Gm25500\n", " \n", " \n", " \n", " \n", " Leukemic_SB.vs.Normal\n", - " -3.731708\n", - " -2.395976\n", - " 4.336742\n", - " 1.403626\n", - " -6.095893\n", - " -0.045633\n", - " 6.58726\n", - " 1.804979\n", - " -4.887532\n", - " 1.097428\n", + " 3.168537\n", + " 17.245745\n", + " 3.396873\n", + " -0.493828\n", + " 0.071816\n", + " 6.812841\n", + " 6.314824\n", + " 3.452622\n", + " 5.558162\n", + " 5.259825\n", " ...\n", - " 2.795666\n", - " 3.052277\n", - " 6.874866\n", - " -9.738949\n", - " 1.052295\n", - " -11.733688\n", - " -9.117946\n", - " -3.219718\n", - " -4.22416\n", - " 4.283597\n", + " 1.184029\n", + " -2.941684\n", + " -2.355503\n", + " -7.619795\n", + " 2.099912\n", + " -3.074381\n", + " -7.744751\n", + " -11.166439\n", + " -1.561793\n", + " 1.27881\n", " \n", " \n", "\n", @@ -2007,17 +2007,17 @@ "" ], "text/plain": [ - "ID 1810058I24Rik Lca5 Ndufa10 Appbp2 Kifc5b \\\n", - "Leukemic_SB.vs.Normal -3.731708 -2.395976 4.336742 1.403626 -6.095893 \n", + "ID Itm2a Sergef Fam109a Dhx9 Ssu72 \\\n", + "Leukemic_SB.vs.Normal 3.168537 17.245745 3.396873 -0.493828 0.071816 \n", "\n", - "ID Snx13 Hdhd3 Dnajb14 Tesk2 Adnp ... \\\n", - "Leukemic_SB.vs.Normal -0.045633 6.58726 1.804979 -4.887532 1.097428 ... \n", + "ID Eif2b2 Mks1 Vps28 Setd6 Psma4 ... \\\n", + "Leukemic_SB.vs.Normal 6.812841 6.314824 3.452622 5.558162 5.259825 ... \n", "\n", - "ID Emc7 B3galt5 Tmprss4 Kif4 Alpk2 \\\n", - "Leukemic_SB.vs.Normal 2.795666 3.052277 6.874866 -9.738949 1.052295 \n", + "ID Cd37 Rag2 Itgb1bp2 Sec23ip Gosr1 \\\n", + "Leukemic_SB.vs.Normal 1.184029 -2.941684 -2.355503 -7.619795 2.099912 \n", "\n", - "ID Cysltr2 4632428C04Rik Rpl3l Zmym5 Calr \n", - "Leukemic_SB.vs.Normal -11.733688 -9.117946 -3.219718 -4.22416 4.283597 \n", + "ID Ctsw Ryk Rhd Pxmp4 Gm25500 \n", + "Leukemic_SB.vs.Normal -3.074381 -7.744751 -11.166439 -1.561793 1.27881 \n", "\n", "[1 rows x 13404 columns]" ] @@ -2057,42 +2057,84 @@ "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:46 | [INFO] ulm - Running ulm\n" + "2026-07-22 16:14:17 | [INFO] ulm - Running ulm\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:decoupler:ulm - Running ulm\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-07-22 16:14:17 | [INFO] Extracted omics mat with 1 rows (observations) and 13404 columns (features)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:decoupler:Extracted omics mat with 1 rows (observations) and 13404 columns (features)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-07-22 16:14:17 | [INFO] Network adjacency matrix has 4378 unique features and 625 unique sources\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:decoupler:Network adjacency matrix has 4378 unique features and 625 unique sources\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-07-22 16:14:17 | [INFO] ulm - fitting 625 univariate models of 13404 observations (targets) with 13402 degrees of freedom\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:46 | [INFO] Extracted omics mat with 1 rows (observations) and 13404 columns (features)\n" + "INFO:decoupler:ulm - fitting 625 univariate models of 13404 observations (targets) with 13402 degrees of freedom\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:46 | [INFO] Network adjacency matrix has 4378 unique features and 625 unique sources\n" + "2026-07-22 16:14:17 | [INFO] ulm - adjusting p-values by FDR\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:46 | [INFO] ulm - fitting 625 univariate models of 13404 observations (targets) with 13402 degrees of freedom\n" + "INFO:decoupler:ulm - adjusting p-values by FDR\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:46 | [INFO] ulm - adjusting p-values by FDR\n" + "2026-07-22 16:14:17 | [INFO] ulm - done\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:46 | [INFO] ulm - done\n" + "INFO:decoupler:ulm - done\n" ] }, { @@ -2142,27 +2184,27 @@ " \n", " \n", " Leukemic_SB.vs.Normal\n", - " 1.198683\n", - " 0.664987\n", - " -0.932035\n", - " 1.417199\n", - " 0.441126\n", - " 0.676737\n", - " -1.148896\n", - " -0.229277\n", - " -1.489196\n", - " 0.92969\n", + " 1.198672\n", + " 0.664946\n", + " -0.932051\n", + " 1.41717\n", + " 0.441607\n", + " 0.676726\n", + " -1.148908\n", + " -0.229291\n", + " -1.489206\n", + " 0.929682\n", " ...\n", - " -1.618176\n", - " -0.165154\n", - " -0.623824\n", - " -1.382751\n", - " 1.35549\n", - " 0.659029\n", - " -0.049623\n", - " 1.390877\n", - " 1.390877\n", - " 1.316184\n", + " -1.618189\n", + " -0.165162\n", + " -0.623841\n", + " -1.382759\n", + " 1.355504\n", + " 0.659013\n", + " -0.049629\n", + " 1.390874\n", + " 1.390874\n", + " 1.316169\n", " \n", " \n", "\n", @@ -2170,17 +2212,17 @@ "" ], "text/plain": [ - " Abl1 Ahr Aire Apex1 Ar \\\n", - "Leukemic_SB.vs.Normal 1.198683 0.664987 -0.932035 1.417199 0.441126 \n", + " Abl1 Ahr Aire Apex1 Ar \\\n", + "Leukemic_SB.vs.Normal 1.198672 0.664946 -0.932051 1.41717 0.441607 \n", "\n", - " Arid1a Arid1b Arid3a Arid3b Arid4a ... \\\n", - "Leukemic_SB.vs.Normal 0.676737 -1.148896 -0.229277 -1.489196 0.92969 ... \n", + " Arid1a Arid1b Arid3a Arid3b Arid4a ... \\\n", + "Leukemic_SB.vs.Normal 0.676726 -1.148908 -0.229291 -1.489206 0.929682 ... \n", "\n", - " Zfpm1 Zfpm2 Zglp1 Zgpat Zhx2 \\\n", - "Leukemic_SB.vs.Normal -1.618176 -0.165154 -0.623824 -1.382751 1.35549 \n", + " Zfpm1 Zfpm2 Zglp1 Zgpat Zhx2 \\\n", + "Leukemic_SB.vs.Normal -1.618189 -0.165162 -0.623841 -1.382759 1.355504 \n", "\n", " Zic1 Zic2 Zkscan3 Zkscan4 Zkscan7 \n", - "Leukemic_SB.vs.Normal 0.659029 -0.049623 1.390877 1.390877 1.316184 \n", + "Leukemic_SB.vs.Normal 0.659013 -0.049629 1.390874 1.390874 1.316169 \n", "\n", "[1 rows x 625 columns]" ] @@ -2422,7 +2464,7 @@ " 0.054604\n", " 12.172306\n", " 4.365699e-34\n", - " 1.215328e-32\n", + " 1.212843e-32\n", " \n", " \n", " Ifngr1\n", @@ -2431,7 +2473,7 @@ " 0.120961\n", " 11.725146\n", " 9.473804e-32\n", - " 2.181384e-30\n", + " 2.174014e-30\n", " \n", " \n", " Lrrc4c\n", @@ -2459,8 +2501,8 @@ "ID \n", "Mrc1 2.943150e-73 \n", "St14 3.078982e-58 \n", - "Cd48 1.215328e-32 \n", - "Ifngr1 2.181384e-30 \n", + "Cd48 1.212843e-32 \n", + "Ifngr1 2.174014e-30 \n", "Lrrc4c 8.584311e-28 " ] }, @@ -2621,7 +2663,7 @@ " 0.916744\n", " 11.617743\n", " 3.348651e-31\n", - " 8.783820e-30\n", + " 8.801043e-30\n", " \n", " \n", "\n", @@ -2642,7 +2684,7 @@ "Ptprs 3.257906e-31 \n", "Nlgn2 1.106684e-30 \n", "Cd244 2.345945e-30 \n", - "Lrrc4c 8.783820e-30 " + "Lrrc4c 8.801043e-30 " ] }, "execution_count": 26, @@ -2694,37 +2736,37 @@ "tags": [] }, "outputs": [ - { - "data": { - "text/html": [], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, { "data": { "text/html": [ "\n", - " \n", - " \n", + "
\n", + " \n", " \n", " \n", - " \n", - "
\n", - " \n", + " \n", " \n", - " \n", - " \n", - "
Installed version:v1.0.0.dev43+3455818f
Available backends:CVXPY v1.6.6
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, GUROBI, OSQP, SCIPY, SCS
Graphviz version:v0.21
Installed path:/Users/pablorodriguezmier/Documents/work/repos/pablormier/corneto/corneto
Repository:https://github.com/saezlab/corneto
\n", + "
Installed version:v1.0.0rc1
Available backends:CVXPY v1.9.2
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, SCS, GUROBI, SCIPY, OSQP
Plot backend (default):auto -> graphviz
Available plot backends:graphviz v0.21; graphviz-wasm
Installed path:/docs/tutorials/contrib/multi_condition_tutorial/.pixi/envs/default/lib/python3.11/site-packages/corneto
Repository:https://github.com/saezlab/corneto
\n", "
" + " \n", + " \n", + " " ], "text/plain": [ - "" + "Installed version: v1.0.0rc1\n", + "Available backends: CVXPY v1.9.2\n", + "Default backend (corneto.opt): CVXPY\n", + "Installed solvers: CLARABEL, SCS, GUROBI, SCIPY, OSQP\n", + "Plot backend (default): auto -> graphviz\n", + "Available plot backends: graphviz v0.21; graphviz-wasm\n", + "Installed path: /docs/tutorials/contrib/multi_condition_tutorial/.pixi/envs/default/lib/python3.11/site-packages/corneto\n", + "Repository: https://github.com/saezlab/corneto" ] }, + "execution_count": 27, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -3243,23 +3285,23 @@ " \n", " \n", " Myc\n", - " 5.923504\n", + " 5.927294\n", " \n", " \n", " Nr3c1\n", - " -3.811319\n", + " -3.807611\n", " \n", " \n", " Klf1\n", - " -3.827703\n", + " -3.827762\n", " \n", " \n", " Pax2\n", - " -3.833334\n", + " -3.833372\n", " \n", " \n", " Pknox1\n", - " -3.854036\n", + " -3.854072\n", " \n", " \n", "\n", @@ -3267,11 +3309,11 @@ ], "text/plain": [ " Leukemic_spontaneous.vs.Normal\n", - "Myc 5.923504\n", - "Nr3c1 -3.811319\n", - "Klf1 -3.827703\n", - "Pax2 -3.833334\n", - "Pknox1 -3.854036" + "Myc 5.927294\n", + "Nr3c1 -3.807611\n", + "Klf1 -3.827762\n", + "Pax2 -3.833372\n", + "Pknox1 -3.854072" ] }, "execution_count": 33, @@ -3311,20 +3353,20 @@ { "data": { "text/plain": [ - "{'Myc': 5.9235035317894855,\n", - " 'Nr3c1': -3.8113193546675745,\n", - " 'Pax2': -3.833334174850489,\n", - " 'Pknox1': -3.8540363164880644,\n", - " 'Spi1': -3.8784486226011565,\n", - " 'Cebpb': -4.040106259374742,\n", - " 'Srf': -4.189355333236107,\n", - " 'Ets1': -4.531331302590852,\n", - " 'Stat6': -4.773632881709543,\n", - " 'Fli1': -5.33776968520547,\n", - " 'Sp3': -5.344046528477468,\n", - " 'Runx1': -5.974558044625292,\n", - " 'Gata1': -6.145310061493243,\n", - " 'Sp1': -6.183198826931179}" + "{'Myc': 5.9272938726510445,\n", + " 'Nr3c1': -3.8076109957400055,\n", + " 'Pax2': -3.833372272814152,\n", + " 'Pknox1': -3.8540720496124936,\n", + " 'Spi1': -3.870956617433766,\n", + " 'Cebpb': -4.041315700038792,\n", + " 'Srf': -4.189456236895589,\n", + " 'Ets1': -4.531838015984738,\n", + " 'Stat6': -4.762013996738547,\n", + " 'Fli1': -5.337254315751466,\n", + " 'Sp3': -5.344906237393298,\n", + " 'Runx1': -5.966766274845339,\n", + " 'Gata1': -6.145405587377315,\n", + " 'Sp1': -6.180554655220554}" ] }, "execution_count": 34, @@ -3405,23 +3447,23 @@ " \n", " \n", " Myc\n", - " 5.455686\n", + " 5.456814\n", " \n", " \n", " Phox2a\n", - " -4.102661\n", + " -4.102671\n", " \n", " \n", " Runx1\n", - " -5.481558\n", + " -5.481601\n", " \n", " \n", " Klf1\n", - " -5.749639\n", + " -5.749658\n", " \n", " \n", " Pknox1\n", - " -5.823607\n", + " -5.823616\n", " \n", " \n", "\n", @@ -3429,11 +3471,11 @@ ], "text/plain": [ " Leukemic_SB.vs.Normal\n", - "Myc 5.455686\n", - "Phox2a -4.102661\n", - "Runx1 -5.481558\n", - "Klf1 -5.749639\n", - "Pknox1 -5.823607" + "Myc 5.456814\n", + "Phox2a -4.102671\n", + "Runx1 -5.481601\n", + "Klf1 -5.749658\n", + "Pknox1 -5.823616" ] }, "execution_count": 35, @@ -3471,12 +3513,12 @@ { "data": { "text/plain": [ - "{'Myc': 5.4556864114528985,\n", - " 'Phox2a': -4.102661149717304,\n", - " 'Runx1': -5.481558125441376,\n", - " 'Pknox1': -5.823606769114178,\n", - " 'Fli1': -7.269739674233043,\n", - " 'Gata1': -8.17854383650117}" + "{'Myc': 5.4568137702067805,\n", + " 'Phox2a': -4.102671408127372,\n", + " 'Runx1': -5.481600720105362,\n", + " 'Pknox1': -5.823615535106708,\n", + " 'Fli1': -7.269774022313037,\n", + " 'Gata1': -8.17857460262512}" ] }, "execution_count": 36, @@ -3911,27 +3953,6 @@ "tags": [] }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-06-27 18:26:47 | [INFO] Set parameter Username\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-06-27 18:26:47 | [INFO] Set parameter LicenseID to value 2593994\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-06-27 18:26:47 | [INFO] Academic license - for non-commercial use only - expires 2025-12-02\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -4144,9 +4165,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Gata1 -1.0 -1.0\n", "Fli1 -1.0 -1.0\n", "Runx1 -1.0 -1.0\n", + "Gata1 -1.0 -1.0\n", "Myc 1.0 1.0\n" ] } @@ -4231,410 +4252,2139 @@ "output_type": "stream", "text": [ "Unreachable vertices for sample: 12\n", - "Unreachable vertices for sample: 7\n", + "Unreachable vertices for sample: 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Set parameter Username\n" ] }, { - "name": "stderr", + "name": "stdout", "output_type": "stream", "text": [ - "2025-06-27 18:26:48 | [INFO] Set parameter Username\n" + "Set parameter LicenseID to value 2775543\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Set parameter LicenseID to value 2593994\n" + "Academic license - for non-commercial use only - expires 2027-02-05\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:48 | [INFO] Set parameter LicenseID to value 2593994\n" + "INFO:corneto.methods.sampler:[1/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=1) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=99, rel.err=3.9500 (excluded from tol. check)\n" ] }, { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "Academic license - for non-commercial use only - expires 2025-12-02\n" + "INFO:corneto.methods.sampler:[2/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=2) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=92, rel.err=3.6000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:48 | [INFO] Academic license - for non-commercial use only - expires 2025-12-02\n" + "INFO:corneto.methods.sampler:[3/30] accepted (total accepted=1) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=69, rel.err=2.4500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:51 | [INFO] [1/30] accepted (total accepted=1) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=68, rel.err=1.1250 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[4/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=3) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=93, rel.err=3.6500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:52 | [INFO] [2/30] accepted (total accepted=2) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=89, rel.err=1.7812 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[5/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=4) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=91, rel.err=3.5500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:53 | [INFO] [3/30] accepted (total accepted=3) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=68, rel.err=1.1250 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[6/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=5) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=111, rel.err=4.5500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:55 | [INFO] [4/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=1) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=118, rel.err=2.6875 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[7/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=6) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=100, rel.err=4.0000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:56 | [INFO] [5/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=2) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=138, rel.err=3.3125 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[8/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=7) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=90, rel.err=3.5000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:58 | [INFO] [6/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=3) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=104, rel.err=2.2500 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[9/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=8) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=80, rel.err=3.0000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:26:59 | [INFO] [7/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=4) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=103, rel.err=2.2188 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[10/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=9) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=90, rel.err=3.5000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:01 | [INFO] [8/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=5) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=98, rel.err=2.0625 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[11/30] accepted (total accepted=2) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=67, rel.err=2.3500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:02 | [INFO] [9/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=6) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=82, rel.err=1.5625 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[12/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=10) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=96, rel.err=3.8000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:03 | [INFO] [10/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=7) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=96, rel.err=2.0000 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[13/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=11) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=96, rel.err=3.8000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:05 | [INFO] [11/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=8) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=0, rel.err=1.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=2, rel.err=2000000000.0000, regularization_edge_has_signal_OR: val=127, rel.err=2.9688 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[14/30] accepted (total accepted=3) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=100, rel.err=4.0000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:06 | [INFO] [12/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=9) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=123, rel.err=2.8438 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[15/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=12) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=107, rel.err=4.3500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:08 | [INFO] [13/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=10) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=61, rel.err=0.9062 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[16/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=13) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=93, rel.err=3.6500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:09 | [INFO] [14/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=11) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=98, rel.err=2.0625 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[17/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=14) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=102, rel.err=4.1000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:10 | [INFO] [15/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=12) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=86, rel.err=1.6875 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[18/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=15) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=110, rel.err=4.5000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:12 | [INFO] [16/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=13) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=88, rel.err=1.7500 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[19/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=16) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=81, rel.err=3.0500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:13 | [INFO] [17/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=14) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=114, rel.err=2.5625 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[20/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=17) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=95, rel.err=3.7500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:15 | [INFO] [18/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=15) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=99, rel.err=2.0938 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[21/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=18) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=85, rel.err=3.2500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:16 | [INFO] [19/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=16) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=99, rel.err=2.0938 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[22/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=19) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=82, rel.err=3.1000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:18 | [INFO] [20/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.6667) (total rejected=17) -> error_sample1_0: val=1, rel.err=0.6667, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=2, rel.err=2000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=98, rel.err=2.0625 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[23/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=20) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=116, rel.err=4.8000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:20 | [INFO] [21/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=18) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=87, rel.err=1.7188 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[24/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.6667) (total rejected=21) -> error_sample1_0: val=1, rel.err=0.6667, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=2, rel.err=2000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=96, rel.err=3.8000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:21 | [INFO] [22/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=19) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=84, rel.err=1.6250 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[25/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=22) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=99, rel.err=3.9500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:22 | [INFO] [23/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=20) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=118, rel.err=2.6875 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[26/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=23) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=94, rel.err=3.7000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:24 | [INFO] [24/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=21) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=103, rel.err=2.2188 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[27/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=24) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=104, rel.err=4.2000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:25 | [INFO] [25/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=22) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=102, rel.err=2.1875 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[28/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=25) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=103, rel.err=4.1500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:27 | [INFO] [26/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=23) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=110, rel.err=2.4375 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[29/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=26) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=104, rel.err=4.2000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:28 | [INFO] [27/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=24) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=89, rel.err=1.7812 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[30/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=27) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=85, rel.err=3.2500 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:30 | [INFO] [28/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=25) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=96, rel.err=2.0000 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:Done. accepted=3, rejected=27, solutions returned=4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "lambda: 0.01\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unreachable vertices for sample: 12\n", + "Unreachable vertices for sample: 7\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:31 | [INFO] [29/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=26) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=100, rel.err=2.1250 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[1/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=1) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=51, rel.err=1.8333 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:33 | [INFO] [30/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=27) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=96, rel.err=2.0000 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[2/30] accepted (total accepted=1) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=38, rel.err=1.1111 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:33 | [INFO] Done. accepted=3, rejected=27, solutions returned=4\n" + "INFO:corneto.methods.sampler:[3/30] accepted (total accepted=2) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=29, rel.err=0.6111 (excluded from tol. check)\n" ] }, { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "lambda: 0.01\n" + "INFO:corneto.methods.sampler:[4/30] accepted (total accepted=3) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=19, rel.err=0.0556 (excluded from tol. check)\n" ] }, { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "Unreachable vertices for sample: 12\n", - "Unreachable vertices for sample: 7\n" + "INFO:corneto.methods.sampler:[5/30] accepted (total accepted=4) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=40, rel.err=1.2222 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:37 | [INFO] [1/30] accepted (total accepted=1) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=33, rel.err=1.2000 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[6/30] accepted (total accepted=5) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=34, rel.err=0.8889 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:39 | [INFO] [2/30] accepted (total accepted=2) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=29, rel.err=0.9333 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[7/30] accepted (total accepted=6) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=35, rel.err=0.9444 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:41 | [INFO] [3/30] accepted (total accepted=3) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=38, rel.err=1.5333 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[8/30] accepted (total accepted=7) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=39, rel.err=1.1667 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:43 | [INFO] [4/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=1) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=38, rel.err=1.5333 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[9/30] accepted (total accepted=8) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=38, rel.err=1.1111 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:45 | [INFO] [5/30] accepted (total accepted=4) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=35, rel.err=1.3333 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[10/30] accepted (total accepted=9) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=30, rel.err=0.6667 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:47 | [INFO] [6/30] accepted (total accepted=5) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=44, rel.err=1.9333 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[11/30] accepted (total accepted=10) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=43, rel.err=1.3889 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:48 | [INFO] [7/30] rejected (tol=0.05 violated by 'error_sample2_1' with rel.err=0.5000) (total rejected=2) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=37, rel.err=1.4667 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[12/30] accepted (total accepted=11) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=55, rel.err=2.0556 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:51 | [INFO] [8/30] accepted (total accepted=6) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=41, rel.err=1.7333 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[13/30] accepted (total accepted=12) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=33, rel.err=0.8333 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:52 | [INFO] [9/30] accepted (total accepted=7) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=31, rel.err=1.0667 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[14/30] accepted (total accepted=13) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=26, rel.err=0.4444 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:54 | [INFO] [10/30] accepted (total accepted=8) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=35, rel.err=1.3333 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[15/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=2) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=41, rel.err=1.2778 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:56 | [INFO] [11/30] accepted (total accepted=9) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=46, rel.err=2.0667 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[16/30] accepted (total accepted=14) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=46, rel.err=1.5556 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:27:58 | [INFO] [12/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=3) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=1, rel.err=0.5000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=1, rel.err=1000000000.0000, regularization_edge_has_signal_OR: val=31, rel.err=1.0667 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[17/30] accepted (total accepted=15) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=29, rel.err=0.6111 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:28:00 | [INFO] [13/30] accepted (total accepted=10) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=42, rel.err=1.8000 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[18/30] accepted (total accepted=16) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=34, rel.err=0.8889 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:28:03 | [INFO] [14/30] accepted (total accepted=11) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=50, rel.err=2.3333 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[19/30] accepted (total accepted=17) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=18, rel.err=0.0000 (excluded from tol. check)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2025-06-27 18:28:04 | [INFO] [15/30] accepted (total accepted=12) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=37, rel.err=1.4667 (excluded from tol. check)\n" + "INFO:corneto.methods.sampler:[20/30] accepted (total accepted=18) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=26, rel.err=0.4444 (excluded from tol. check)\n" ] - } - ], - "source": [ - "# retrieving alternative network solutions. This snippet will take a while to run\n", - "from corneto.methods.sampler import sample_alternative_solutions\n", - "\n", - "lambda_val = [0, 0.01, 0.1, 0.2, 0.3, 0.5, 0.7, 0.9, 0.95]\n", - "other_optimal_v = dict() # collecting the vertex sampled solutions for each lambda\n", - "index = dict()\n", - "for i in lambda_val:\n", - " print(\"lambda: \", i)\n", - " c = CarnivalFlow(lambda_reg=i, indirect_rule_penalty=1)\n", - " P = c.build(G, data)\n", - " vertex_results = sample_alternative_solutions(\n", - " P,\n", - " \"vertex_value\",\n", - " percentage=0.03,\n", - " scale=0.03,\n", - " rel_opt_tol=0.05,\n", - " max_samples=30, # number of alternative solutions to sample\n", - " solver_kwargs=dict(solver=\"gurobi\", max_seconds=max_time, mip_gap=0.01, seed=seed),\n", - " )\n", - " other_optimal_v[\"lambda\" + str(i)] = vertex_results[\"vertex_value\"]\n", - " index[\"lambda\" + str(i)] = c.processed_graph.V" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[21/30] accepted (total accepted=19) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=39, rel.err=1.1667 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[22/30] accepted (total accepted=20) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=39, rel.err=1.1667 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[23/30] accepted (total accepted=21) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=58, rel.err=2.2222 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[24/30] accepted (total accepted=22) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=37, rel.err=1.0556 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[25/30] accepted (total accepted=23) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=39, rel.err=1.1667 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[26/30] accepted (total accepted=24) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=36, rel.err=1.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[27/30] rejected (tol=0.05 violated by 'error_sample1_0' with rel.err=0.3333) (total rejected=3) -> error_sample1_0: val=2, rel.err=0.3333, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=1, rel.err=1000000000.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=43, rel.err=1.3889 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[28/30] accepted (total accepted=25) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=36, rel.err=1.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[29/30] accepted (total accepted=26) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=36, rel.err=1.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[30/30] accepted (total accepted=27) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=40, rel.err=1.2222 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:Done. accepted=27, rejected=3, solutions returned=28\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "lambda: 0.1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unreachable vertices for sample: 12\n", + "Unreachable vertices for sample: 7\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[1/30] accepted (total accepted=1) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[2/30] accepted (total accepted=2) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[3/30] accepted (total accepted=3) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[4/30] accepted (total accepted=4) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[5/30] accepted (total accepted=5) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[6/30] accepted (total accepted=6) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[7/30] accepted (total accepted=7) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[8/30] accepted (total accepted=8) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[9/30] accepted (total accepted=9) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[10/30] accepted (total accepted=10) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[11/30] accepted (total accepted=11) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[12/30] accepted (total accepted=12) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[13/30] accepted (total accepted=13) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[14/30] accepted (total accepted=14) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[15/30] accepted (total accepted=15) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[16/30] accepted (total accepted=16) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[17/30] accepted (total accepted=17) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[18/30] accepted (total accepted=18) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[19/30] accepted (total accepted=19) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[20/30] accepted (total accepted=20) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[21/30] accepted (total accepted=21) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[22/30] accepted (total accepted=22) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[23/30] accepted (total accepted=23) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[24/30] accepted (total accepted=24) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[25/30] accepted (total accepted=25) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[26/30] accepted (total accepted=26) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[27/30] accepted (total accepted=27) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[28/30] accepted (total accepted=28) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[29/30] accepted (total accepted=29) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[30/30] accepted (total accepted=30) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:Done. accepted=30, rejected=0, solutions returned=31\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "lambda: 0.2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unreachable vertices for sample: 12\n", + "Unreachable vertices for sample: 7\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[1/30] accepted (total accepted=1) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[2/30] accepted (total accepted=2) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[3/30] accepted (total accepted=3) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[4/30] accepted (total accepted=4) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[5/30] accepted (total accepted=5) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[6/30] accepted (total accepted=6) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[7/30] accepted (total accepted=7) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[8/30] accepted (total accepted=8) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[9/30] accepted (total accepted=9) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[10/30] accepted (total accepted=10) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[11/30] accepted (total accepted=11) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/docs/tutorials/contrib/multi_condition_tutorial/.pixi/envs/default/lib/python3.11/site-packages/numpy/_core/fromnumeric.py:83: RuntimeWarning: invalid value encountered in reduce\n", + " return ufunc.reduce(obj, axis, dtype, out, **passkwargs)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[12/30] accepted (total accepted=12) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[13/30] accepted (total accepted=13) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[14/30] accepted (total accepted=14) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[15/30] accepted (total accepted=15) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[16/30] accepted (total accepted=16) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[17/30] accepted (total accepted=17) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[18/30] accepted (total accepted=18) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[19/30] accepted (total accepted=19) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[20/30] accepted (total accepted=20) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[21/30] accepted (total accepted=21) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[22/30] accepted (total accepted=22) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[23/30] accepted (total accepted=23) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[24/30] accepted (total accepted=24) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[25/30] accepted (total accepted=25) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[26/30] accepted (total accepted=26) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[27/30] accepted (total accepted=27) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[28/30] accepted (total accepted=28) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[29/30] accepted (total accepted=29) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[30/30] accepted (total accepted=30) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:Done. accepted=30, rejected=0, solutions returned=31\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "lambda: 0.3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unreachable vertices for sample: 12\n", + "Unreachable vertices for sample: 7\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[1/30] accepted (total accepted=1) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[2/30] accepted (total accepted=2) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[3/30] accepted (total accepted=3) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[4/30] accepted (total accepted=4) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[5/30] accepted (total accepted=5) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[6/30] accepted (total accepted=6) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[7/30] accepted (total accepted=7) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[8/30] accepted (total accepted=8) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[9/30] accepted (total accepted=9) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[10/30] accepted (total accepted=10) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[11/30] accepted (total accepted=11) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[12/30] accepted (total accepted=12) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[13/30] accepted (total accepted=13) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[14/30] accepted (total accepted=14) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[15/30] accepted (total accepted=15) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[16/30] accepted (total accepted=16) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[17/30] accepted (total accepted=17) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[18/30] accepted (total accepted=18) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[19/30] accepted (total accepted=19) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[20/30] accepted (total accepted=20) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[21/30] accepted (total accepted=21) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[22/30] accepted (total accepted=22) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[23/30] accepted (total accepted=23) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[24/30] accepted (total accepted=24) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[25/30] accepted (total accepted=25) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[26/30] accepted (total accepted=26) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[27/30] accepted (total accepted=27) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[28/30] accepted (total accepted=28) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[29/30] accepted (total accepted=29) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[30/30] accepted (total accepted=30) -> error_sample1_0: val=3, rel.err=0.0000, error_sample2_1: val=2, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=14, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:Done. accepted=30, rejected=0, solutions returned=31\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "lambda: 0.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unreachable vertices for sample: 12\n", + "Unreachable vertices for sample: 7\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[1/30] accepted (total accepted=1) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[2/30] accepted (total accepted=2) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[3/30] accepted (total accepted=3) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[4/30] accepted (total accepted=4) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[5/30] accepted (total accepted=5) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[6/30] accepted (total accepted=6) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[7/30] accepted (total accepted=7) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[8/30] accepted (total accepted=8) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[9/30] accepted (total accepted=9) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[10/30] accepted (total accepted=10) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[11/30] accepted (total accepted=11) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[12/30] accepted (total accepted=12) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[13/30] accepted (total accepted=13) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[14/30] accepted (total accepted=14) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[15/30] accepted (total accepted=15) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[16/30] accepted (total accepted=16) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[17/30] accepted (total accepted=17) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[18/30] accepted (total accepted=18) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[19/30] accepted (total accepted=19) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[20/30] accepted (total accepted=20) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[21/30] accepted (total accepted=21) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[22/30] accepted (total accepted=22) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[23/30] accepted (total accepted=23) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[24/30] accepted (total accepted=24) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[25/30] accepted (total accepted=25) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[26/30] accepted (total accepted=26) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[27/30] accepted (total accepted=27) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[28/30] accepted (total accepted=28) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[29/30] accepted (total accepted=29) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[30/30] accepted (total accepted=30) -> error_sample1_0: val=4, rel.err=0.0000, error_sample2_1: val=5, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=3, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:Done. accepted=30, rejected=0, solutions returned=31\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "lambda: 0.7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unreachable vertices for sample: 12\n", + "Unreachable vertices for sample: 7\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[1/30] accepted (total accepted=1) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[2/30] accepted (total accepted=2) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[3/30] accepted (total accepted=3) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[4/30] accepted (total accepted=4) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[5/30] accepted (total accepted=5) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[6/30] accepted (total accepted=6) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[7/30] accepted (total accepted=7) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[8/30] accepted (total accepted=8) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[9/30] accepted (total accepted=9) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[10/30] accepted (total accepted=10) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[11/30] accepted (total accepted=11) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[12/30] accepted (total accepted=12) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[13/30] accepted (total accepted=13) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[14/30] accepted (total accepted=14) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[15/30] accepted (total accepted=15) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[16/30] accepted (total accepted=16) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[17/30] accepted (total accepted=17) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[18/30] accepted (total accepted=18) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[19/30] accepted (total accepted=19) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[20/30] accepted (total accepted=20) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[21/30] accepted (total accepted=21) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[22/30] accepted (total accepted=22) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[23/30] accepted (total accepted=23) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[24/30] accepted (total accepted=24) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[25/30] accepted (total accepted=25) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[26/30] accepted (total accepted=26) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[27/30] accepted (total accepted=27) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[28/30] accepted (total accepted=28) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[29/30] accepted (total accepted=29) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[30/30] accepted (total accepted=30) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:Done. accepted=30, rejected=0, solutions returned=31\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "lambda: 0.9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unreachable vertices for sample: 12\n", + "Unreachable vertices for sample: 7\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[1/30] accepted (total accepted=1) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[2/30] accepted (total accepted=2) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[3/30] accepted (total accepted=3) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[4/30] accepted (total accepted=4) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[5/30] accepted (total accepted=5) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[6/30] accepted (total accepted=6) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[7/30] accepted (total accepted=7) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[8/30] accepted (total accepted=8) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[9/30] accepted (total accepted=9) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[10/30] accepted (total accepted=10) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[11/30] accepted (total accepted=11) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[12/30] accepted (total accepted=12) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[13/30] accepted (total accepted=13) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[14/30] accepted (total accepted=14) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[15/30] accepted (total accepted=15) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[16/30] accepted (total accepted=16) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[17/30] accepted (total accepted=17) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[18/30] accepted (total accepted=18) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[19/30] accepted (total accepted=19) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[20/30] accepted (total accepted=20) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[21/30] accepted (total accepted=21) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[22/30] accepted (total accepted=22) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[23/30] accepted (total accepted=23) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[24/30] accepted (total accepted=24) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[25/30] accepted (total accepted=25) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[26/30] accepted (total accepted=26) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[27/30] accepted (total accepted=27) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[28/30] accepted (total accepted=28) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[29/30] accepted (total accepted=29) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[30/30] accepted (total accepted=30) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:Done. accepted=30, rejected=0, solutions returned=31\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "lambda: 0.95\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unreachable vertices for sample: 12\n", + "Unreachable vertices for sample: 7\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[1/30] accepted (total accepted=1) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[2/30] accepted (total accepted=2) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[3/30] accepted (total accepted=3) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[4/30] accepted (total accepted=4) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[5/30] accepted (total accepted=5) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[6/30] accepted (total accepted=6) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[7/30] accepted (total accepted=7) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[8/30] accepted (total accepted=8) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[9/30] accepted (total accepted=9) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[10/30] accepted (total accepted=10) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[11/30] accepted (total accepted=11) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[12/30] accepted (total accepted=12) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[13/30] accepted (total accepted=13) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[14/30] accepted (total accepted=14) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[15/30] accepted (total accepted=15) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[16/30] accepted (total accepted=16) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[17/30] accepted (total accepted=17) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[18/30] accepted (total accepted=18) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[19/30] accepted (total accepted=19) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[20/30] accepted (total accepted=20) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[21/30] accepted (total accepted=21) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[22/30] accepted (total accepted=22) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[23/30] accepted (total accepted=23) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[24/30] accepted (total accepted=24) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[25/30] accepted (total accepted=25) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[26/30] accepted (total accepted=26) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[27/30] accepted (total accepted=27) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[28/30] accepted (total accepted=28) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[29/30] accepted (total accepted=29) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:[30/30] accepted (total accepted=30) -> error_sample1_0: val=5, rel.err=0.0000, error_sample2_1: val=6, rel.err=0.0000, penalty_indirect_rules_0: val=0, rel.err=0.0000, penalty_indirect_rules_1: val=0, rel.err=0.0000, regularization_edge_has_signal_OR: val=0, rel.err=0.0000 (excluded from tol. check)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:corneto.methods.sampler:Done. accepted=30, rejected=0, solutions returned=31\n" + ] + } + ], + "source": [ + "# retrieving alternative network solutions. This snippet will take a while to run\n", + "from corneto.methods.sampler import sample_alternative_solutions\n", + "\n", + "lambda_val = [0, 0.01, 0.1, 0.2, 0.3, 0.5, 0.7, 0.9, 0.95]\n", + "other_optimal_v = dict() # collecting the vertex sampled solutions for each lambda\n", + "index = dict()\n", + "for i in lambda_val:\n", + " print(\"lambda: \", i)\n", + " c = CarnivalFlow(lambda_reg=i, indirect_rule_penalty=1)\n", + " P = c.build(G, data)\n", + " vertex_results = sample_alternative_solutions(\n", + " P,\n", + " \"vertex_value\",\n", + " percentage=0.03,\n", + " scale=0.03,\n", + " rel_opt_tol=0.05,\n", + " max_samples=30, # number of alternative solutions to sample\n", + " solver_kwargs=dict(solver=\"gurobi\", max_seconds=max_time, mip_gap=0.01, seed=seed),\n", + " )\n", + " other_optimal_v[\"lambda\" + str(i)] = vertex_results[\"vertex_value\"]\n", + " index[\"lambda\" + str(i)] = c.processed_graph.V" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "id": "433c2052", "metadata": { "execution": { @@ -4643,198 +6393,780 @@ "iopub.status.idle": "2025-06-27T16:24:46.336876Z", "shell.execute_reply": "2025-06-27T16:24:46.336578Z" }, - "papermill": { - "duration": null, - "end_time": null, - "exception": null, - "start_time": null, - "status": "completed" + "papermill": { + "duration": null, + "end_time": null, + "exception": null, + "start_time": null, + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "def compute_nodes_metrics(nodes, inputs, measurements, results_df, column):\n", + " \"\"\"Computes the metrics for the nodes in the network based on the provided inputs, measurements, and results dataframe.\n", + "\n", + " Args:\n", + " nodes (pd.DataFrame): data frame containing the node scores per condition.\n", + " inputs (dict): Dictionary of input nodes with their values.\n", + " measurements (dict): Dictionary of output nodes with their values.\n", + " results_df (pd.DataFrame): DataFrame containing the results of differential expression analysis.\n", + " column (str): Column name to be used for filtering conditions.\n", + "\n", + " Returns:\n", + " sign_agreement_ratio (float): Ratio of nodes with the same sign as the DE analysis.\n", + " de_overlap_ratio (float): Ratio of DE genes that overlap with the nodes.\n", + " overall_agreement (float): Overall agreement between DE genes and nodes.\n", + " \"\"\"\n", + " nodes = nodes.loc[(nodes[column] != 0.0)][column] # nodes with a score different from 0\n", + " de = results_df.loc[results_df[\"padj\"] < 0.05].index.tolist() # de genes\n", + " in_out_nodes = set(measurements.keys()).union(\n", + " set(nodes.index[nodes.index.isin(inputs.keys())])\n", + " ) # collecting input and output nodes which we don´t want to evaluate\n", + " middle_nodes = set(nodes.index).difference(in_out_nodes)\n", + " commmon_genes = list(\n", + " set(results_df.index).intersection(middle_nodes)\n", + " ) # common genes between network and DE analysis genes\n", + " stat = results_df.loc[commmon_genes, \"stat\"]\n", + " stat_sign = np.sign(stat)\n", + " middle_nodes_sign = np.sign(nodes.loc[commmon_genes])\n", + " sign_agreement_ratio = 0\n", + " if len(middle_nodes_sign) > 0:\n", + " sign_agreement_ratio = (middle_nodes_sign == stat_sign).sum() / len(middle_nodes_sign)\n", + " de_overlap_ratio = 0\n", + " if len(middle_nodes) > 0:\n", + " de_overlap_ratio = len(set(de).intersection(middle_nodes)) / len(middle_nodes)\n", + " overall_agreement = (np.array(de_overlap_ratio) + np.array(sign_agreement_ratio)) / 2\n", + "\n", + " return sign_agreement_ratio, de_overlap_ratio, overall_agreement" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "5cbd529a", + "metadata": { + "execution": { + "iopub.execute_input": "2025-06-27T16:24:46.359822Z", + "iopub.status.busy": "2025-06-27T16:24:46.359691Z", + "iopub.status.idle": "2025-06-27T16:24:47.176230Z", + "shell.execute_reply": "2025-06-27T16:24:47.175953Z" + }, + "papermill": { + "duration": null, + "end_time": null, + "exception": null, + "start_time": null, + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Initialize metric containers\n", + "metrics_avg_1_per_lambda = []\n", + "metrics_avg_2_per_lambda = []\n", + "metrics_sd_1_per_lambda = []\n", + "metrics_sd_2_per_lambda = []\n", + "\n", + "for k in other_optimal_v.keys():\n", + " metrics1_per_sample = []\n", + " metrics2_per_sample = []\n", + "\n", + " for i in range(len(other_optimal_v[k])):\n", + " n = pd.DataFrame(\n", + " other_optimal_v[k][i],\n", + " index=index[k],\n", + " columns=[\"vertex_activity1\", \"vertex_activity2\"],\n", + " ) # retrieving node scores\n", + "\n", + " sign_agreement1, de_overlap1, overall_agreement1 = compute_nodes_metrics(\n", + " n, inputs1, d_measurements1, results_df1, \"vertex_activity1\"\n", + " )\n", + " sign_agreement2, de_overlap2, overall_agreement2 = compute_nodes_metrics(\n", + " n, inputs2, d_measurements2, results_df2, \"vertex_activity2\"\n", + " )\n", + "\n", + " metrics1_per_sample.append(\n", + " {\n", + " \"sign_agreement\": sign_agreement1,\n", + " \"de_overlap\": de_overlap1,\n", + " \"overall\": overall_agreement1,\n", + " }\n", + " )\n", + " metrics2_per_sample.append(\n", + " {\n", + " \"sign_agreement\": sign_agreement2,\n", + " \"de_overlap\": de_overlap2,\n", + " \"overall\": overall_agreement2,\n", + " }\n", + " )\n", + "\n", + " metrics1_per_sample_df = pd.DataFrame(metrics1_per_sample)\n", + " metrics2_per_sample_df = pd.DataFrame(metrics2_per_sample)\n", + " metrics_avg_1_per_lambda.append(metrics1_per_sample_df.mean().to_dict())\n", + " metrics_avg_2_per_lambda.append(metrics2_per_sample_df.mean().to_dict())\n", + " metrics_sd_1_per_lambda.append(metrics1_per_sample_df.std().to_dict())\n", + " metrics_sd_2_per_lambda.append(metrics2_per_sample_df.std().to_dict())\n", + "\n", + "# Convert lists of dictionaries to DataFrames\n", + "m_avg_df1 = pd.DataFrame(metrics_avg_1_per_lambda)\n", + "m_avg_df2 = pd.DataFrame(metrics_avg_2_per_lambda)\n", + "m_sd_df1 = pd.DataFrame(metrics_sd_1_per_lambda)\n", + "m_sd_df2 = pd.DataFrame(metrics_sd_2_per_lambda)\n", + "\n", + "##plotting metrics\n", + "import matplotlib.pyplot as plt\n", + "\n", + "metric_name = [\"sign_agreement\", \"de_overlap\", \"overall\"]\n", + "metric_label = [\"Sign agreement ratio\", \"DE overlap ratio\", \"Overall agreement\"]\n", + "\n", + "fig, axes = plt.subplots(1, 3, figsize=(25, 5), sharex=True)\n", + "for i in range(len(metric_name)):\n", + " axes[i].errorbar(\n", + " lambda_val,\n", + " m_avg_df1[metric_name[i]],\n", + " yerr=m_sd_df1[metric_name[i]],\n", + " label=\"Leukemic_spontaneous\",\n", + " marker=\"o\",\n", + " )\n", + " axes[i].errorbar(\n", + " lambda_val,\n", + " m_avg_df2[metric_name[i]],\n", + " yerr=m_sd_df2[metric_name[i]],\n", + " label=\"Leukemic_SB\",\n", + " marker=\"o\",\n", + " )\n", + " axes[i].grid()\n", + " axes[i].set_xscale(\"linear\") # adjust scale according to your results\n", + " axes[i].set_xlabel(\"Lambda\")\n", + " axes[i].set_ylabel(metric_label[i])\n", + " axes[i].set_title(metric_label[i] + \" vs Lambda\")\n", + " if i == 0:\n", + " axes[i].legend(loc=\"upper left\")" + ] + }, + { + "cell_type": "markdown", + "id": "8c64a16f", + "metadata": { + "papermill": { + "duration": null, + "end_time": null, + "exception": null, + "start_time": null, + "status": "completed" + }, + "tags": [] + }, + "source": [ + "We choose the lambda value basing on the Overall agreement metric. In this case a reasonable value of $\\lambda$ is 2" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "6be6c716", + "metadata": { + "execution": { + "iopub.execute_input": "2025-06-27T16:24:47.222512Z", + "iopub.status.busy": "2025-06-27T16:24:47.222360Z", + "iopub.status.idle": "2025-06-27T16:24:48.755251Z", + "shell.execute_reply": "2025-06-27T16:24:48.755020Z" + }, + "papermill": { + "duration": null, + "end_time": null, + "exception": null, + "start_time": null, + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: Your problem has 15944 variables, 45059 constraints, and 1 parameters.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: It is compliant with the following grammars: DCP, DQCP\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: DCP verification time: 0.0006 seconds.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: Expression tree has 11 nodes.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: CVXPY will first compile your problem; then, it will invoke a numerical solver to obtain a solution.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: Your problem is compiled with the CPP canonicalization backend.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: Compiling problem (target solver=GUROBI).\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: Reduction chain: Dcp2Cone -> CvxAttr2Constr -> EliminateZeroSized -> ConeMatrixStuffing -> GUROBI\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: Applying reduction Dcp2Cone\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: Applying reduction CvxAttr2Constr\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: Applying reduction EliminateZeroSized\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: Applying reduction ConeMatrixStuffing\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: Applying reduction GUROBI\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: Finished problem compilation (took 8.338e-02 seconds).\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: (Subsequent compilations of this problem, using the same arguments, should take less time.)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:17 PM: Invoking solver GUROBI to obtain a solution.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unreachable vertices for sample: 12\n", + "Unreachable vertices for sample: 7\n", + "===============================================================================\n", + " CVXPY \n", + " v1.9.2 \n", + "===============================================================================\n", + "-------------------------------------------------------------------------------\n", + " Compilation \n", + "-------------------------------------------------------------------------------\n", + "-------------------------------------------------------------------------------\n", + " Numerical solver \n", + "-------------------------------------------------------------------------------\n", + "Set parameter OutputFlag to value 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Set parameter QCPDual to value 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gurobi Optimizer version 12.0.2 build v12.0.2rc0 (mac64[arm] - Darwin 25.5.0 25F84)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU model: Apple M4 Pro\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thread count: 12 physical cores, 12 logical processors, using up to 12 threads\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Non-default parameters:\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "QCPDual 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimize a model with 45059 rows, 15944 columns and 159976 nonzeros\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model fingerprint: 0xad65e9b6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variable types: 3844 continuous, 12100 integer (12100 binary)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Coefficient statistics:\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Matrix range [5e-01, 7e+02]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Objective range [5e-01, 2e+00]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Bounds range [1e+00, 1e+00]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " RHS range [1e+00, 1e+03]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found heuristic solution: objective 0.0000000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Presolve removed 21164 rows and 1239 columns\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Presolve time: 0.36s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Presolved: 23895 rows, 14705 columns, 137721 nonzeros\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variable types: 3431 continuous, 11274 integer (11261 binary)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Deterministic concurrent LP optimizer: primal and dual simplex\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Showing primal log only...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Concurrent spin time: 0.01s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Solved with dual simplex\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Root relaxation: objective -1.434375e+00, 2089 iterations, 0.14 seconds (0.31 work units)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Nodes | Current Node | Objective Bounds | Work\n" + ] }, - "tags": [] - }, - "outputs": [], - "source": [ - "def compute_nodes_metrics(nodes, inputs, measurements, results_df, column):\n", - " \"\"\"Computes the metrics for the nodes in the network based on the provided inputs, measurements, and results dataframe.\n", - "\n", - " Args:\n", - " nodes (pd.DataFrame): data frame containing the node scores per condition.\n", - " inputs (dict): Dictionary of input nodes with their values.\n", - " measurements (dict): Dictionary of output nodes with their values.\n", - " results_df (pd.DataFrame): DataFrame containing the results of differential expression analysis.\n", - " column (str): Column name to be used for filtering conditions.\n", - "\n", - " Returns:\n", - " sign_agreement_ratio (float): Ratio of nodes with the same sign as the DE analysis.\n", - " de_overlap_ratio (float): Ratio of DE genes that overlap with the nodes.\n", - " overall_agreement (float): Overall agreement between DE genes and nodes.\n", - " \"\"\"\n", - " nodes = nodes.loc[(nodes[column] != 0.0)][column] # nodes with a score different from 0\n", - " de = results_df.loc[results_df[\"padj\"] < 0.05].index.tolist() # de genes\n", - " in_out_nodes = set(measurements.keys()).union(\n", - " set(nodes.index[nodes.index.isin(inputs.keys())])\n", - " ) # collecting input and output nodes which we don´t want to evaluate\n", - " middle_nodes = set(nodes.index).difference(in_out_nodes)\n", - " commmon_genes = list(\n", - " set(results_df.index).intersection(middle_nodes)\n", - " ) # common genes between network and DE analysis genes\n", - " stat = results_df.loc[commmon_genes, \"stat\"]\n", - " stat_sign = np.sign(stat)\n", - " middle_nodes_sign = np.sign(nodes.loc[commmon_genes])\n", - " sign_agreement_ratio = 0\n", - " if len(middle_nodes_sign) > 0:\n", - " sign_agreement_ratio = (middle_nodes_sign == stat_sign).sum() / len(middle_nodes_sign)\n", - " de_overlap_ratio = 0\n", - " if len(middle_nodes) > 0:\n", - " de_overlap_ratio = len(set(de).intersection(middle_nodes)) / len(middle_nodes)\n", - " overall_agreement = (np.array(de_overlap_ratio) + np.array(sign_agreement_ratio)) / 2\n", - "\n", - " return sign_agreement_ratio, de_overlap_ratio, overall_agreement" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5cbd529a", - "metadata": { - "execution": { - "iopub.execute_input": "2025-06-27T16:24:46.359822Z", - "iopub.status.busy": "2025-06-27T16:24:46.359691Z", - "iopub.status.idle": "2025-06-27T16:24:47.176230Z", - "shell.execute_reply": "2025-06-27T16:24:47.175953Z" + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time\n" + ] }, - "papermill": { - "duration": null, - "end_time": null, - "exception": null, - "start_time": null, - "status": "completed" + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] }, - "tags": [] - }, - "outputs": [], - "source": [ - "# Initialize metric containers\n", - "metrics_avg_1_per_lambda = []\n", - "metrics_avg_2_per_lambda = []\n", - "metrics_sd_1_per_lambda = []\n", - "metrics_sd_2_per_lambda = []\n", - "\n", - "for k in other_optimal_v.keys():\n", - " metrics1_per_sample = []\n", - " metrics2_per_sample = []\n", - "\n", - " for i in range(len(other_optimal_v[k])):\n", - " n = pd.DataFrame(\n", - " other_optimal_v[k][i],\n", - " index=index[k],\n", - " columns=[\"vertex_activity1\", \"vertex_activity2\"],\n", - " ) # retrieving node scores\n", - "\n", - " sign_agreement1, de_overlap1, overall_agreement1 = compute_nodes_metrics(\n", - " n, inputs1, d_measurements1, results_df1, \"vertex_activity1\"\n", - " )\n", - " sign_agreement2, de_overlap2, overall_agreement2 = compute_nodes_metrics(\n", - " n, inputs2, d_measurements2, results_df2, \"vertex_activity2\"\n", - " )\n", - "\n", - " metrics1_per_sample.append(\n", - " {\n", - " \"sign_agreement\": sign_agreement1,\n", - " \"de_overlap\": de_overlap1,\n", - " \"overall\": overall_agreement1,\n", - " }\n", - " )\n", - " metrics2_per_sample.append(\n", - " {\n", - " \"sign_agreement\": sign_agreement2,\n", - " \"de_overlap\": de_overlap2,\n", - " \"overall\": overall_agreement2,\n", - " }\n", - " )\n", - "\n", - " metrics1_per_sample_df = pd.DataFrame(metrics1_per_sample)\n", - " metrics2_per_sample_df = pd.DataFrame(metrics2_per_sample)\n", - " metrics_avg_1_per_lambda.append(metrics1_per_sample_df.mean().to_dict())\n", - " metrics_avg_2_per_lambda.append(metrics2_per_sample_df.mean().to_dict())\n", - " metrics_sd_1_per_lambda.append(metrics1_per_sample_df.std().to_dict())\n", - " metrics_sd_2_per_lambda.append(metrics2_per_sample_df.std().to_dict())\n", - "\n", - "# Convert lists of dictionaries to DataFrames\n", - "m_avg_df1 = pd.DataFrame(metrics_avg_1_per_lambda)\n", - "m_avg_df2 = pd.DataFrame(metrics_avg_2_per_lambda)\n", - "m_sd_df1 = pd.DataFrame(metrics_sd_1_per_lambda)\n", - "m_sd_df2 = pd.DataFrame(metrics_sd_2_per_lambda)\n", - "\n", - "##plotting metrics\n", - "import matplotlib.pyplot as plt\n", - "\n", - "metric_name = [\"sign_agreement\", \"de_overlap\", \"overall\"]\n", - "metric_label = [\"Sign agreement ratio\", \"DE overlap ratio\", \"Overall agreement\"]\n", - "\n", - "fig, axes = plt.subplots(1, 3, figsize=(25, 5), sharex=True)\n", - "for i in range(len(metric_name)):\n", - " axes[i].errorbar(\n", - " lambda_val,\n", - " m_avg_df1[metric_name[i]],\n", - " yerr=m_sd_df1[metric_name[i]],\n", - " label=\"Leukemic_spontaneous\",\n", - " marker=\"o\",\n", - " )\n", - " axes[i].errorbar(\n", - " lambda_val,\n", - " m_avg_df2[metric_name[i]],\n", - " yerr=m_sd_df2[metric_name[i]],\n", - " label=\"Leukemic_SB\",\n", - " marker=\"o\",\n", - " )\n", - " axes[i].grid()\n", - " axes[i].set_xscale(\"linear\") # adjust scale according to your results\n", - " axes[i].set_xlabel(\"Lambda\")\n", - " axes[i].set_ylabel(metric_label[i])\n", - " axes[i].set_title(metric_label[i] + \" vs Lambda\")\n", - " if i == 0:\n", - " axes[i].legend(loc=\"upper left\")" - ] - }, - { - "cell_type": "markdown", - "id": "8c64a16f", - "metadata": { - "papermill": { - "duration": null, - "end_time": null, - "exception": null, - "start_time": null, - "status": "completed" + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -1.43438 0 93 0.00000 -1.43438 - - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -0.93977 0 113 0.00000 -0.93977 - - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -0.93977 0 78 0.00000 -0.93977 - - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -0.92708 0 82 0.00000 -0.92708 - - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -0.92045 0 76 0.00000 -0.92045 - - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "H 0 0 -0.5000000 -0.89063 78.1% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 0 -0.89063 0 76 -0.50000 -0.89063 78.1% - 0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cutting planes:\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Gomory: 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Implied bound: 16\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Zero half: 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " RLT: 2\n" + ] }, - "tags": [] - }, - "source": [ - "We choose the lambda value basing on the Overall agreement metric. In this case a reasonable value of $\\lambda$ is 2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6be6c716", - "metadata": { - "execution": { - "iopub.execute_input": "2025-06-27T16:24:47.222512Z", - "iopub.status.busy": "2025-06-27T16:24:47.222360Z", - "iopub.status.idle": "2025-06-27T16:24:48.755251Z", - "shell.execute_reply": "2025-06-27T16:24:48.755020Z" + { + "name": "stdout", + "output_type": "stream", + "text": [ + " BQP: 1\n" + ] }, - "papermill": { - "duration": null, - "end_time": null, - "exception": null, - "start_time": null, - "status": "completed" + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] }, - "tags": [] - }, - "outputs": [], + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Explored 1 nodes (5098 simplex iterations) in 0.88 seconds (1.64 work units)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thread count was 12 (of 12 available processors)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Solution count 2: -0.5 0 \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimal solution found (tolerance 1.00e-04)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best objective -5.000000000000e-01, best bound -5.000000000000e-01, gap 0.0000%\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:18 PM: Problem status: optimal\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:18 PM: Optimal value: 1.050e+01\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:18 PM: Compilation took 8.338e-02 seconds\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "(CVXPY) Jul 22 04:23:18 PM: Solver (including time spent in interface) took 1.425e+00 seconds\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-------------------------------------------------------------------------------\n", + " Summary \n", + "-------------------------------------------------------------------------------\n" + ] + }, + { + "data": { + "text/plain": [ + "Problem(Minimize(Expression(AFFINE, UNKNOWN, (1,))), [Inequality(Constant(CONSTANT, ZERO, (2420,))), Inequality(Variable((2420,), _flow)), Inequality(Constant(CONSTANT, ZERO, (712, 2))), Inequality(Variable((712, 2), _dag_layer)), Equality(Expression(AFFINE, UNKNOWN, (712,)), Constant(CONSTANT, ZERO, ())), Inequality(Expression(AFFINE, NONNEGATIVE, (2420, 2))), Equality(Expression(AFFINE, UNKNOWN, (12,)), Constant(CONSTANT, ZERO, ())), Equality(Expression(AFFINE, NONNEGATIVE, (12,)), Constant(CONSTANT, ZERO, ())), Equality(Expression(AFFINE, NONNEGATIVE, (12,)), Constant(CONSTANT, ZERO, ())), Equality(Expression(AFFINE, UNKNOWN, (7,)), Constant(CONSTANT, ZERO, ())), Equality(Expression(AFFINE, NONNEGATIVE, (7,)), Constant(CONSTANT, ZERO, ())), Equality(Expression(AFFINE, NONNEGATIVE, (7,)), Constant(CONSTANT, ZERO, ())), Inequality(Expression(AFFINE, NONNEGATIVE, (712, 2))), Inequality(Expression(AFFINE, UNKNOWN, (2406,))), Inequality(Expression(AFFINE, UNKNOWN, (2406,))), Inequality(Constant(CONSTANT, NONNEGATIVE, (688,))), Inequality(Expression(AFFINE, UNKNOWN, (2406,))), Inequality(Expression(AFFINE, UNKNOWN, (2406,))), Inequality(Constant(CONSTANT, NONNEGATIVE, (688,))), Inequality(Expression(AFFINE, NONNEGATIVE, (2420, 2))), Inequality(Expression(AFFINE, NONNEGATIVE, (2413, 2))), Inequality(Expression(AFFINE, NONNEGATIVE, (2413, 2))), Equality(Expression(AFFINE, NONNEGATIVE, (3,)), Constant(CONSTANT, ZERO, ())), Equality(Expression(AFFINE, NONNEGATIVE, (3,)), Constant(CONSTANT, ZERO, ())), Inequality(Expression(AFFINE, NONNEGATIVE, (2420,))), Inequality(Variable((2420,), edge_has_signal_OR, boolean=True))])" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "c = CarnivalFlow(lambda_reg=0.5, indirect_rule_penalty=1)\n", "P = c.build(G, data)\n", @@ -4845,7 +7177,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 54, "id": "2e53f8f2", "metadata": { "execution": { @@ -4863,7 +7195,19 @@ }, "tags": [] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "error_sample1_0 4.0\n", + "penalty_indirect_rules_0 [0.]\n", + "error_sample2_1 5.0\n", + "penalty_indirect_rules_1 [0.]\n", + "regularization_edge_has_signal_OR 3.0\n" + ] + } + ], "source": [ "# optimization metrics\n", "for o in P.objectives:\n", @@ -4872,7 +7216,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 55, "id": "5e2e6dba", "metadata": { "execution": { @@ -4890,7 +7234,82 @@ }, "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
edge_activity1edge_activity2
(Mapk14)(Mapkapk2)0.00.0
(Map2k3)(Dyrk1b)0.00.0
(Akt1)(Chuk)0.00.0
(Cdkn1a)(Cdk1)0.00.0
(Mdc1)(Rnf8)0.00.0
\n", + "
" + ], + "text/plain": [ + " edge_activity1 edge_activity2\n", + "(Mapk14) (Mapkapk2) 0.0 0.0\n", + "(Map2k3) (Dyrk1b) 0.0 0.0\n", + "(Akt1) (Chuk) 0.0 0.0\n", + "(Cdkn1a) (Cdk1) 0.0 0.0\n", + "(Mdc1) (Rnf8) 0.0 0.0" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# having a look to edge values per condition\n", "pd.DataFrame(\n", @@ -4902,7 +7321,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 56, "id": "15d239a6", "metadata": { "execution": { @@ -4920,7 +7339,76 @@ }, "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
vertex_activity1vertex_activity2
Fus0.00.0
Pstpip10.00.0
Ppp1r1b0.00.0
Arhgap330.00.0
Lrrk20.00.0
\n", + "
" + ], + "text/plain": [ + " vertex_activity1 vertex_activity2\n", + "Fus 0.0 0.0\n", + "Pstpip1 0.0 0.0\n", + "Ppp1r1b 0.0 0.0\n", + "Arhgap33 0.0 0.0\n", + "Lrrk2 0.0 0.0" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# having a look to node values per condition\n", "pd.DataFrame(\n", @@ -4949,7 +7437,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 57, "id": "6843e1d2", "metadata": { "execution": { @@ -4967,7 +7455,73 @@ }, "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Ifngr1\n", + "\n", + "Ifngr1\n", + "\n", + "\n", + "\n", + "Jak2\n", + "\n", + "Jak2\n", + "\n", + "\n", + "\n", + "Ifngr1->Jak2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Myc\n", + "\n", + "Myc\n", + "\n", + "\n", + "\n", + "Jak2->Myc\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "e_2416_source\n", + "\n", + "\n", + "\n", + "\n", + "e_2416_source->Ifngr1\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "sol_edges1 = np.flatnonzero(np.abs(P.expr.edge_value.value[:, 0]) > 0.5)\n", "c.processed_graph.plot_values(\n", @@ -4996,7 +7550,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "id": "f913c744", "metadata": { "execution": { @@ -5014,7 +7568,73 @@ }, "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Ifngr1\n", + "\n", + "Ifngr1\n", + "\n", + "\n", + "\n", + "Jak2\n", + "\n", + "Jak2\n", + "\n", + "\n", + "\n", + "Ifngr1->Jak2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Myc\n", + "\n", + "Myc\n", + "\n", + "\n", + "\n", + "Jak2->Myc\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "e_2416_source\n", + "\n", + "\n", + "\n", + "\n", + "e_2416_source->Ifngr1\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "sol_edges2 = np.flatnonzero(np.abs(P.expr.edge_value.value[:, 1]) > 0.5)\n", "c.processed_graph.plot_values(\n", @@ -5066,8 +7686,8 @@ "end_time": "2025-06-27T16:28:05.209251", "environment_variables": {}, "exception": null, - "input_path": "/Users/pablorodriguezmier/Documents/work/repos/pablormier/corneto/docs/tutorials/contrib/multi_condition_tutorial/multi_condition_carnival.ipynb", - "output_path": "/Users/pablorodriguezmier/Documents/work/repos/pablormier/corneto/docs/tutorials/contrib/multi_condition_tutorial/multi_condition_carnival.ipynb", + "input_path": "multi_condition_carnival.ipynb", + "output_path": "multi_condition_carnival.ipynb", "parameters": {}, "start_time": "2025-06-27T16:26:31.070155", "version": "2.6.0" diff --git a/docs/tutorials/contrib/multi_condition_tutorial/pixi.lock b/docs/tutorials/contrib/multi_condition_tutorial/pixi.lock index ffc1129a9..16815d1cc 100644 --- a/docs/tutorials/contrib/multi_condition_tutorial/pixi.lock +++ b/docs/tutorials/contrib/multi_condition_tutorial/pixi.lock @@ -232,6 +232,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/29/28/83df019db913031ce826e3ed3fa655df9663d58cc1f083d1adc78a1bb528/decoupler-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2b/9f/7ba6f94fc1e9ac3d2b853fdff3035fb2fa5afbed898c4a72b8a020610594/more_itertools-10.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/9a/17d45ac78ac8abe79f03b5e44053a4ea1cbf4663cc70cee2c2a507f7e3b2/cvxpy_base-1.9.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3a/3b/a3332b0f79375bff9a14863f9b32d98428f9300fc171e29b6e4df4850986/osqp-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/40/7b/639411281256c84e8111bf6cb9676c44dbf5d8ad4cb042f4359b7e7b9e74/formulaic_contrasts-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/44/8e/250fab1cafeea43f4eb11f1d64cd6313f639965ff62cb0d9da3883655781/docrep-0.3.2.tar.gz @@ -249,15 +250,18 @@ environments: - pypi: https://files.pythonhosted.org/packages/8a/eb/427ed2b20a38a4ee29f24dbe4ae2dafab198674fe9a85e3d6adf9e5f5f41/inflect-7.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/9b/ad67f03d74554bed3aefd56fe836e1623a50780f7c998d00ca128924a499/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/67/d45bd634b1755d50f3a333baa7e016227c2ac9a516da1fef4d08ae9417f5/cvxpy-1.6.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9b/36/9c969e55589c022de50c8b76ffa1df4526faa5458d485be3efce25c2a85b/sparsediffpy-0.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b4/b0/9fc566b0fe08b282c850063591a756057c3247b2362b9286429ec5bf1721/wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c5/c4/f6b7c0ec5241a2bde90c7ba1eca6ba44f8488bcedafe9072c79593015ec0/session_info-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/38/48b75c3d8d268a3f19837cb8a89155ead6e97c6892bb64837183ea41db2b/scikit_learn-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/c2/a34097e53efe70a538ae97574ff9e9866e60fc1c792c19da5fd6b56ce7b5/formulaic-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/98/9578ce1d8ae951cf44e6b7434854824f0eae12d54b270e80014f8ab1971c/session_info2-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/34/bf8e999e13e00946660a1e9009e67d5718356c06b9a2b2905f10829a7c45/scs-3.2.7.post2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ea/e1/33203651c73e126bba82788e3d7813330e987df1e3c31ab36f47dd5878d6/qdldl-0.1.9.post1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -403,6 +407,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/02/3f/a6ec28c88e2d8e54d32598a1e0b5208a4baa72a8e7f6e241beab5731eb9d/interface_meta-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/06/12/b825caff9d65b101e79efe10aef2ea2724077bf70b75475e03ca9028250c/cvxpy-1.6.6-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/09/68/e4c9090172596b6325fad8be5a3742f4a86dc258f2019bd1889a932c592a/cvxpy_base-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/12/9c/2bb1f981aa42dd983eb26276d45a4e835a3a319bad24080e8f7748ce814b/gurobipy-12.0.2-cp311-cp311-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/b3/ecaa1638cf8c177f1fe8b79d7c715a2693c61158b47bf3a5269453d0eefe/osqp-1.0.4-cp311-cp311-macosx_10_9_x86_64.whl @@ -414,6 +419,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/34/f7/f82698b6d00a40a80c67e9a32b2628886aadfaf7f7b32daa12a463e44571/clarabel-0.11.1-cp39-abi3-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/40/7b/639411281256c84e8111bf6cb9676c44dbf5d8ad4cb042f4359b7e7b9e74/formulaic_contrasts-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/fd/7610d618eef6ab2bf5fc5048d0af76507561f3d72ea8fb12222e366f9744/qdldl-0.1.9.post1-cp311-cp311-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/44/8e/250fab1cafeea43f4eb11f1d64cd6313f639965ff62cb0d9da3883655781/docrep-0.3.2.tar.gz - pypi: https://files.pythonhosted.org/packages/50/ff/149aba8365fdacef52b31a258c4dc1c57c79759c335eff0b3316a2664a64/wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/53/1c/8feedd607cc14c5df9aef74fe3af9a99bf660743b842a9b5b1865326b4aa/adjustText-1.3.0-py3-none-any.whl @@ -429,8 +435,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/86/92/bd62fb14acf1f74ed021b3e2f105466a6b47b0ebedc5daddada4b88b47b4/legendkit-0.3.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/c7/4102536de33c19d090ed2b04e90e7452e2e3dc653cf3323208034eaaca27/stdlib_list-0.11.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/eb/427ed2b20a38a4ee29f24dbe4ae2dafab198674fe9a85e3d6adf9e5f5f41/inflect-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9c/73/f7548cd9decfca281820fe3a99465afaebbc1140533e3d8ec796ae49c598/sparsediffpy-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/c4/f6b7c0ec5241a2bde90c7ba1eca6ba44f8488bcedafe9072c79593015ec0/session_info-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/c2/a34097e53efe70a538ae97574ff9e9866e60fc1c792c19da5fd6b56ce7b5/formulaic-1.1.1-py3-none-any.whl @@ -573,6 +581,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda - pypi: https://files.pythonhosted.org/packages/02/3f/a6ec28c88e2d8e54d32598a1e0b5208a4baa72a8e7f6e241beab5731eb9d/interface_meta-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/12/24/8fc849d3dc3eb136d1395bdcaccdfae752466262cd8165c73e38f2facad7/cvxpy_base-1.9.2-cp311-cp311-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/12/9c/2bb1f981aa42dd983eb26276d45a4e835a3a319bad24080e8f7748ce814b/gurobipy-12.0.2-cp311-cp311-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/a9/e3aee762739c1d7528da1c3e06d518503f8b6c439c35549b53735ba52ead/typeguard-4.4.4-py3-none-any.whl @@ -580,6 +589,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/1f/e4/b757b7926cc3355ba41ba747afb5e4d6c553d05be840ea25dc47b47b47b1/scs-3.2.7.post2-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/29/28/83df019db913031ce826e3ed3fa655df9663d58cc1f083d1adc78a1bb528/decoupler-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2b/9f/7ba6f94fc1e9ac3d2b853fdff3035fb2fa5afbed898c4a72b8a020610594/more_itertools-10.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/30/29/dc00c99535bd5d96638f17e3cf99bda16ca2d99f5a3bed225dac3ca9640b/sparsediffpy-0.3.0-cp311-cp311-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/40/7b/639411281256c84e8111bf6cb9676c44dbf5d8ad4cb042f4359b7e7b9e74/formulaic_contrasts-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/44/8e/250fab1cafeea43f4eb11f1d64cd6313f639965ff62cb0d9da3883655781/docrep-0.3.2.tar.gz @@ -601,10 +611,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/8f/13650cfe25762b51175c677330e6471d5d2c5851a6fbd6df77f0681bb34e/clarabel-0.11.1-cp39-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/37/6e52dbbfedaad4534148853496741739a3430d52231638c84d65dc1a58e7/osqp-1.0.4-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/c5/c4/f6b7c0ec5241a2bde90c7ba1eca6ba44f8488bcedafe9072c79593015ec0/session_info-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/c2/a34097e53efe70a538ae97574ff9e9866e60fc1c792c19da5fd6b56ce7b5/formulaic-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/98/9578ce1d8ae951cf44e6b7434854824f0eae12d54b270e80014f8ab1971c/session_info2-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/c5/7d7c8f2f5aa581408c8bae8d3615fdf1e9adf6258c27c30c8b14385d2d50/qdldl-0.1.9.post1-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e9/62/59d0634be0ef33b46108d83e62847c5cb2dfa117915495d2b8271b999547/cvxpy-1.6.6-cp311-cp311-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl win-64: @@ -768,6 +780,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/44/8e/250fab1cafeea43f4eb11f1d64cd6313f639965ff62cb0d9da3883655781/docrep-0.3.2.tar.gz - pypi: https://files.pythonhosted.org/packages/47/f8/fb1773491a253cbc123c5d5dc15c86041f746ed30416535f2a8df1f4a392/wrapt-1.17.2-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/53/1c/8feedd607cc14c5df9aef74fe3af9a99bf660743b842a9b5b1865326b4aa/adjustText-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/53/7b/3de5ee5408f5d86f763f007c55618a1bb9f0ab1444c00fa82105d2a6a378/cvxpy_base-1.9.2-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/80/da1508e745faf701e1c0d96cedd292037e6b17748c770ff32dacf77190b8/marsilea-0.5.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl @@ -779,10 +792,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/8a/eb/427ed2b20a38a4ee29f24dbe4ae2dafab198674fe9a85e3d6adf9e5f5f41/inflect-7.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a1/85/19e2b49117f7ea20d94129d67c9b982e788ded90c561e0029c42fc7eb0ea/osqp-1.0.4-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/a3/fb/9574b71c156ca8d49fe22f5f0951a46dd57460339a5f8e463fbf35e6a1b8/sparsediffpy-0.3.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/05/5e33dbef7e2f773d672b6d79f10ec633d4a71cd96db6673625838a4fd532/charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/bf/34/a42b90bff9330ac57e1dcc8c35b978cee47d6e9eee14cb71981b801fc7cf/scs-3.2.7.post2-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c5/c4/f6b7c0ec5241a2bde90c7ba1eca6ba44f8488bcedafe9072c79593015ec0/session_info-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl @@ -790,6 +805,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/db/98/9578ce1d8ae951cf44e6b7434854824f0eae12d54b270e80014f8ab1971c/session_info2-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/5a/ba91b8c57aa37dbd80d5ff958576a9a8c14317b04b671ae7f0d09b00993a/scikit_learn-1.7.0-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f9/c9/a3ac897afef956b0606e17baa680f9bd957304c7d85fc5dc46a6dcef55e5/qdldl-0.1.9.post1-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 @@ -8980,6 +8996,46 @@ packages: - sphinx-design ; extra == 'doc' - sphinx-immaterial>=0.11.7 ; extra == 'doc' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/09/68/e4c9090172596b6325fad8be5a3742f4a86dc258f2019bd1889a932c592a/cvxpy_base-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl + name: cvxpy-base + version: 1.9.2 + sha256: a32bdec8d161a7ea003c0dce63fd8affdc21aeada08ccf07faaed2d40708a2f1 + requires_dist: + - numpy>=2.0.0 + - scipy>=1.13.0 + - qdldl>=0.1.7.post0 + - sparsediffpy>=0.3.0,<0.4.0 + - cylp>=0.91.5 ; extra == 'cbc' + - coptpy>=8.0.3 ; extra == 'copt' + - cvxopt ; extra == 'cvxopt' + - diffcp ; extra == 'diffcp' + - ecos ; extra == 'ecos' + - ecos ; extra == 'ecos-bb' + - ortools>=9.7,<9.15 ; extra == 'glop' + - cvxopt ; extra == 'glpk' + - cvxopt ; extra == 'glpk-mi' + - gurobipy ; extra == 'gurobi' + - highspy ; extra == 'highs' + - mosek ; extra == 'mosek' + - ortools>=9.7,<9.15 ; extra == 'pdlp' + - piqp ; extra == 'piqp' + - proxsuite ; extra == 'proxqp' + - qoco ; extra == 'qoco' + - qpalm~=1.2.5 ; extra == 'qpalm' + - pyscipopt ; extra == 'scip' + - scipy ; extra == 'scipy' + - xpress>=9.5 ; extra == 'xpress' + - daqp ; extra == 'daqp' + - knitro ; extra == 'knitro' + - unopy ; extra == 'uno' + - pytest ; extra == 'testing' + - hypothesis ; extra == 'testing' + - sphinx ; extra == 'doc' + - sphinxcontrib-jquery ; extra == 'doc' + - sphinx-inline-tabs ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - sphinx-immaterial>=0.11.7 ; extra == 'doc' + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/0e/eb/86a5e22c20447e7621d74b3b1e7c96885c5278805ea1b64b30a5b904cad6/gurobipy-12.0.2-cp311-cp311-win_amd64.whl name: gurobipy version: 12.0.2 @@ -8988,6 +9044,46 @@ packages: - numpy ; extra == 'matrixapi' - scipy ; extra == 'matrixapi' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/12/24/8fc849d3dc3eb136d1395bdcaccdfae752466262cd8165c73e38f2facad7/cvxpy_base-1.9.2-cp311-cp311-macosx_10_9_universal2.whl + name: cvxpy-base + version: 1.9.2 + sha256: 8434e15d1a78986237669557e8b3080c9ef5d3bba30c2d5a6ee6986dd07f84a4 + requires_dist: + - numpy>=2.0.0 + - scipy>=1.13.0 + - qdldl>=0.1.7.post0 + - sparsediffpy>=0.3.0,<0.4.0 + - cylp>=0.91.5 ; extra == 'cbc' + - coptpy>=8.0.3 ; extra == 'copt' + - cvxopt ; extra == 'cvxopt' + - diffcp ; extra == 'diffcp' + - ecos ; extra == 'ecos' + - ecos ; extra == 'ecos-bb' + - ortools>=9.7,<9.15 ; extra == 'glop' + - cvxopt ; extra == 'glpk' + - cvxopt ; extra == 'glpk-mi' + - gurobipy ; extra == 'gurobi' + - highspy ; extra == 'highs' + - mosek ; extra == 'mosek' + - ortools>=9.7,<9.15 ; extra == 'pdlp' + - piqp ; extra == 'piqp' + - proxsuite ; extra == 'proxqp' + - qoco ; extra == 'qoco' + - qpalm~=1.2.5 ; extra == 'qpalm' + - pyscipopt ; extra == 'scip' + - scipy ; extra == 'scipy' + - xpress>=9.5 ; extra == 'xpress' + - daqp ; extra == 'daqp' + - knitro ; extra == 'knitro' + - unopy ; extra == 'uno' + - pytest ; extra == 'testing' + - hypothesis ; extra == 'testing' + - sphinx ; extra == 'doc' + - sphinxcontrib-jquery ; extra == 'doc' + - sphinx-inline-tabs ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - sphinx-immaterial>=0.11.7 ; extra == 'doc' + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/12/9c/2bb1f981aa42dd983eb26276d45a4e835a3a319bad24080e8f7748ce814b/gurobipy-12.0.2-cp311-cp311-macosx_10_9_universal2.whl name: gurobipy version: 12.0.2 @@ -9098,11 +9194,58 @@ packages: - numpy - scipy requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/30/29/dc00c99535bd5d96638f17e3cf99bda16ca2d99f5a3bed225dac3ca9640b/sparsediffpy-0.3.0-cp311-cp311-macosx_10_9_universal2.whl + name: sparsediffpy + version: 0.3.0 + sha256: 90be888d51592aabbb366534fa1778d8e25d5ec4cfe735b5e922227903520a1b + requires_dist: + - numpy>=2.0.0 + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl name: threadpoolctl version: 3.6.0 sha256: 43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/34/9a/17d45ac78ac8abe79f03b5e44053a4ea1cbf4663cc70cee2c2a507f7e3b2/cvxpy_base-1.9.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: cvxpy-base + version: 1.9.2 + sha256: 517af221d0fbaf6adc60c8abd5e630fa990bb9ac4f30394c8249542e596e3963 + requires_dist: + - numpy>=2.0.0 + - scipy>=1.13.0 + - qdldl>=0.1.7.post0 + - sparsediffpy>=0.3.0,<0.4.0 + - cylp>=0.91.5 ; extra == 'cbc' + - coptpy>=8.0.3 ; extra == 'copt' + - cvxopt ; extra == 'cvxopt' + - diffcp ; extra == 'diffcp' + - ecos ; extra == 'ecos' + - ecos ; extra == 'ecos-bb' + - ortools>=9.7,<9.15 ; extra == 'glop' + - cvxopt ; extra == 'glpk' + - cvxopt ; extra == 'glpk-mi' + - gurobipy ; extra == 'gurobi' + - highspy ; extra == 'highs' + - mosek ; extra == 'mosek' + - ortools>=9.7,<9.15 ; extra == 'pdlp' + - piqp ; extra == 'piqp' + - proxsuite ; extra == 'proxqp' + - qoco ; extra == 'qoco' + - qpalm~=1.2.5 ; extra == 'qpalm' + - pyscipopt ; extra == 'scip' + - scipy ; extra == 'scipy' + - xpress>=9.5 ; extra == 'xpress' + - daqp ; extra == 'daqp' + - knitro ; extra == 'knitro' + - unopy ; extra == 'uno' + - pytest ; extra == 'testing' + - hypothesis ; extra == 'testing' + - sphinx ; extra == 'doc' + - sphinxcontrib-jquery ; extra == 'doc' + - sphinx-inline-tabs ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - sphinx-immaterial>=0.11.7 ; extra == 'doc' + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/34/f7/f82698b6d00a40a80c67e9a32b2628886aadfaf7f7b32daa12a463e44571/clarabel-0.11.1-cp39-abi3-macosx_10_12_x86_64.whl name: clarabel version: 0.11.1 @@ -9164,6 +9307,13 @@ packages: - numpy ; extra == 'test' - pytest ; extra == 'test' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/40/fd/7610d618eef6ab2bf5fc5048d0af76507561f3d72ea8fb12222e366f9744/qdldl-0.1.9.post1-cp311-cp311-macosx_10_9_x86_64.whl + name: qdldl + version: 0.1.9.post1 + sha256: 133ee44b5afea5b57eec6c3455c93bba0229add840dbbdbc33a6fdb66058641c + requires_dist: + - numpy>=1.7 + - scipy>=0.13.2 - pypi: https://files.pythonhosted.org/packages/41/e6/4eee3062088c221e5a18b054e51c69f616e0bb0dc1b0a1a5e0fe90dfa18e/clarabel-0.11.1-cp39-abi3-win_amd64.whl name: clarabel version: 0.11.1 @@ -9242,6 +9392,46 @@ packages: - numpy - matplotlib - scipy +- pypi: https://files.pythonhosted.org/packages/53/7b/3de5ee5408f5d86f763f007c55618a1bb9f0ab1444c00fa82105d2a6a378/cvxpy_base-1.9.2-cp311-cp311-win_amd64.whl + name: cvxpy-base + version: 1.9.2 + sha256: 9d40459ebb92c29c97db5e0820d2aa3e9b57adef45f501e48049f0890c701513 + requires_dist: + - numpy>=2.0.0 + - scipy>=1.13.0 + - qdldl>=0.1.7.post0 + - sparsediffpy>=0.3.0,<0.4.0 + - cylp>=0.91.5 ; extra == 'cbc' + - coptpy>=8.0.3 ; extra == 'copt' + - cvxopt ; extra == 'cvxopt' + - diffcp ; extra == 'diffcp' + - ecos ; extra == 'ecos' + - ecos ; extra == 'ecos-bb' + - ortools>=9.7,<9.15 ; extra == 'glop' + - cvxopt ; extra == 'glpk' + - cvxopt ; extra == 'glpk-mi' + - gurobipy ; extra == 'gurobi' + - highspy ; extra == 'highs' + - mosek ; extra == 'mosek' + - ortools>=9.7,<9.15 ; extra == 'pdlp' + - piqp ; extra == 'piqp' + - proxsuite ; extra == 'proxqp' + - qoco ; extra == 'qoco' + - qpalm~=1.2.5 ; extra == 'qpalm' + - pyscipopt ; extra == 'scip' + - scipy ; extra == 'scipy' + - xpress>=9.5 ; extra == 'xpress' + - daqp ; extra == 'daqp' + - knitro ; extra == 'knitro' + - unopy ; extra == 'uno' + - pytest ; extra == 'testing' + - hypothesis ; extra == 'testing' + - sphinx ; extra == 'doc' + - sphinxcontrib-jquery ; extra == 'doc' + - sphinx-inline-tabs ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - sphinx-immaterial>=0.11.7 ; extra == 'doc' + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/5a/42/c6b41711c2bee01c4800ad8da2862c0b6d2956a399d23ce4d77f2ca7f0c7/scikit_learn-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl name: scikit-learn version: 1.7.0 @@ -9566,6 +9756,20 @@ packages: - sphinx-design ; extra == 'doc' - sphinx-immaterial>=0.11.7 ; extra == 'doc' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/9b/36/9c969e55589c022de50c8b76ffa1df4526faa5458d485be3efce25c2a85b/sparsediffpy-0.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: sparsediffpy + version: 0.3.0 + sha256: 7ad6e232bc2fda5302ff9da612805b1d6293ad7ba1418deb657d7a0dc6b10d27 + requires_dist: + - numpy>=2.0.0 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/9c/73/f7548cd9decfca281820fe3a99465afaebbc1140533e3d8ec796ae49c598/sparsediffpy-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl + name: sparsediffpy + version: 0.3.0 + sha256: 75180fc2ded0215ad73d727398c3e7470bcf71d293e3d05ac5fea33d3270d366 + requires_dist: + - numpy>=2.0.0 + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/a1/85/19e2b49117f7ea20d94129d67c9b982e788ded90c561e0029c42fc7eb0ea/osqp-1.0.4-cp311-cp311-win_amd64.whl name: osqp version: 1.0.4 @@ -9644,6 +9848,13 @@ packages: - pooch>=1.6.0 ; extra == 'tests' - conda-lock==3.0.1 ; extra == 'maintenance' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a3/fb/9574b71c156ca8d49fe22f5f0951a46dd57460339a5f8e463fbf35e6a1b8/sparsediffpy-0.3.0-cp311-cp311-win_amd64.whl + name: sparsediffpy + version: 0.3.0 + sha256: d9a6af38f1bb24eccfd9cc089263e7d652b0c8e97e19385258e6ee83c40f7d68 + requires_dist: + - numpy>=2.0.0 + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl name: urllib3 version: 2.5.0 @@ -9767,6 +9978,52 @@ packages: - pooch>=1.6.0 ; extra == 'tests' - conda-lock==3.0.1 ; extra == 'maintenance' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl + name: corneto + version: 1.0.0rc1 + sha256: 1d1203a430617690f6d1a0200d5b5fac5cd42bace112d9d4b0f93edc69306561 + requires_dist: + - picos>=2.6.0 ; extra == 'research' + - annnet[polars]>=0.2.0,<0.3 ; extra == 'annnet' + - cobra>=0.29.0 ; extra == 'research' + - cvxpy>=1.5.1 ; extra == 'ml' + - cvxpy>=1.5.1 ; extra == 'os' + - cvxpy>=1.5.1 ; extra == 'research' + - cvxpy-base>=1.5.1 + - graphviz>=0.20.1 ; extra == 'os' + - graphviz>=0.20.1 ; extra == 'research' + - gurobipy ; extra == 'research' + - highspy>=1.9.0 ; extra == 'os' + - highspy>=1.9.0 ; extra == 'research' + - jax>=0.6.1 ; extra == 'ml' + - keras>=3.8.0 ; extra == 'ml' + - matplotlib>=3.5.2 ; extra == 'os' + - matplotlib>=3.5.2 ; extra == 'research' + - myst-nb>=0.17.2 ; extra == 'docs' + - myst-parser>=0.18.1 ; extra == 'docs' + - networkx>=3.2.1 ; extra == 'os' + - networkx>=3.2.1 ; extra == 'research' + - numpy>=1.25 + - pandas>=2.2.3 ; extra == 'ml' + - pandas>=2.2.3 ; extra == 'research' + - pcst-fast>=1.0.10 ; extra == 'research' + - pydata-sphinx-theme>=0.16.1 ; extra == 'docs' + - pydot>=3.0.4 ; extra == 'docs' + - pyscipopt>=5.4.1 ; extra == 'os' + - pyscipopt>=5.4.1 ; extra == 'research' + - scikit-learn>=1.6.0 ; extra == 'ml' + - scipy>=1.14.1 + - scipy>=1.14.1 ; extra == 'ml' + - scipy>=1.14.1 ; extra == 'os' + - scipy>=1.14.1 ; extra == 'research' + - sphinx>=5.0 ; extra == 'docs' + - sphinx-autodoc-typehints>=1.21.8 ; extra == 'docs' + - sphinx-design>=0.4.1 ; extra == 'docs' + - sphinx-favicon>=1.0.1 ; extra == 'docs' + - sphinx-hoverxref>=1.3.0 ; extra == 'docs' + - sphinxcontrib-bibtex>=2.5.0 ; extra == 'docs' + - sphinxcontrib-napoleon>=0.7 ; extra == 'docs' + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl name: tqdm version: 4.67.1 @@ -9858,6 +10115,13 @@ packages: - pytest-subprocess ; extra == 'test' - testing-common-database ; extra == 'test' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e6/c5/7d7c8f2f5aa581408c8bae8d3615fdf1e9adf6258c27c30c8b14385d2d50/qdldl-0.1.9.post1-cp311-cp311-macosx_11_0_arm64.whl + name: qdldl + version: 0.1.9.post1 + sha256: d3d4ac1885bc99d214044671121b9e95f96fb9caa63e2a1d6ac30bae9f8266a8 + requires_dist: + - numpy>=1.7 + - scipy>=0.13.2 - pypi: https://files.pythonhosted.org/packages/e7/34/bf8e999e13e00946660a1e9009e67d5718356c06b9a2b2905f10829a7c45/scs-3.2.7.post2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: scs version: 3.2.7.post2 @@ -9903,6 +10167,13 @@ packages: - sphinx-design ; extra == 'doc' - sphinx-immaterial>=0.11.7 ; extra == 'doc' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ea/e1/33203651c73e126bba82788e3d7813330e987df1e3c31ab36f47dd5878d6/qdldl-0.1.9.post1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: qdldl + version: 0.1.9.post1 + sha256: e6d333d1de8f39ca3c34d0d88ee00a3d1b0d90f54dafad8d554b646c6110c7dd + requires_dist: + - numpy>=1.7 + - scipy>=0.13.2 - pypi: https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: markupsafe version: 3.0.2 @@ -9969,6 +10240,13 @@ packages: - pooch>=1.6.0 ; extra == 'tests' - conda-lock==3.0.1 ; extra == 'maintenance' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f9/c9/a3ac897afef956b0606e17baa680f9bd957304c7d85fc5dc46a6dcef55e5/qdldl-0.1.9.post1-cp311-cp311-win_amd64.whl + name: qdldl + version: 0.1.9.post1 + sha256: 1f61b59fec8e5b9230bfa8dd471d6f5c2ae4ed8b3b63ca224def1e432325deb0 + requires_dist: + - numpy>=1.7 + - scipy>=0.13.2 - pypi: https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl name: platformdirs version: 4.3.8 diff --git a/docs/tutorials/contrib/multi_condition_tutorial/pixi.toml b/docs/tutorials/contrib/multi_condition_tutorial/pixi.toml index 073193c20..a9260b60c 100644 --- a/docs/tutorials/contrib/multi_condition_tutorial/pixi.toml +++ b/docs/tutorials/contrib/multi_condition_tutorial/pixi.toml @@ -19,3 +19,4 @@ decoupler = "==2.2.0" omnipath = "==1.0.9" pydeseq2 = "==0.5.1" cvxpy = "==1.6.6" +corneto = "==1.0.0rc1" diff --git a/docs/tutorials/fba/context-specific-metabolic-omics.ipynb b/docs/tutorials/fba/context-specific-metabolic-omics.ipynb index dc57b1a05..32b506175 100644 --- a/docs/tutorials/fba/context-specific-metabolic-omics.ipynb +++ b/docs/tutorials/fba/context-specific-metabolic-omics.ipynb @@ -42,37 +42,37 @@ "tags": [] }, "outputs": [ - { - "data": { - "text/html": [], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, { "data": { "text/html": [ "\n", - " \n", - " \n", + "
\n", + " \n", " \n", " \n", - " \n", - "
\n", - " \n", + " \n", " \n", - " \n", - " \n", - "
Installed version:v1.0.0.dev43+3455818f
Available backends:CVXPY v1.6.6
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, HIGHS, OSQP, SCIPY, SCS
Graphviz version:v0.21
Installed path:/Users/pablorodriguezmier/Documents/work/repos/pablormier/corneto/corneto
Repository:https://github.com/saezlab/corneto
\n", + "
Installed version:v1.0.0rc1
Available backends:CVXPY v1.7.1
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, HIGHS, OSQP, SCIPY, SCS
Plot backend (default):auto -> graphviz
Available plot backends:graphviz v0.21; graphviz-wasm
Installed path:/docs/tutorials/fba/.pixi/envs/default/lib/python3.11/site-packages/corneto
Repository:https://github.com/saezlab/corneto
\n", "
" + " \n", + " \n", + " " ], "text/plain": [ - "" + "Installed version: v1.0.0rc1\n", + "Available backends: CVXPY v1.7.1\n", + "Default backend (corneto.opt): CVXPY\n", + "Installed solvers: CLARABEL, HIGHS, OSQP, SCIPY, SCS\n", + "Plot backend (default): auto -> graphviz\n", + "Available plot backends: graphviz v0.21; graphviz-wasm\n", + "Installed path: /docs/tutorials/fba/.pixi/envs/default/lib/python3.11/site-packages/corneto\n", + "Repository: https://github.com/saezlab/corneto" ] }, + "execution_count": 1, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -108,14 +108,16 @@ { "data": { "text/html": [ - "
  • Tomer Shlomi, Moran N Cabili, Markus J Herrgård, Bernhard Ø Palsson, Eytan Ruppin. Network-based prediction of human tissue-specific metabolism. Nature biotechnology, Vol. 26, No. 9, pp. 1003--1010 (2008).
  • Pablo Rodriguez-Mier, Martin Garrido-Rodriguez, Attila Gabor, Julio Saez-Rodriguez. Unified knowledge-driven network inference from omics data. bioRxiv, pp. 10 (2024).
" + "
  • Tomer Shlomi, Moran N Cabili, Markus J Herrgård, Bernhard Ø Palsson, Eytan Ruppin. Network-based prediction of human tissue-specific metabolism. Nature biotechnology, Vol. 26, No. 9, pp. 1003--1010 (2008).
  • Pablo Rodriguez-Mier, Martin Garrido-Rodriguez, Attila Gabor, Julio Saez-Rodriguez. Unifying multi-sample network inference from prior knowledge and omics data with CORNETO. Nature Machine Intelligence, pp. 1--19 (2025).
" ], "text/plain": [ - "" + "- Tomer Shlomi, Moran N Cabili, Markus J Herrgård, Bernhard Ø Palsson, Eytan Ruppin. Network-based prediction of human tissue-specific metabolism. Nature biotechnology, Vol. 26, No. 9, pp. 1003--1010 (2008).\n", + " - Pablo Rodriguez-Mier, Martin Garrido-Rodriguez, Attila Gabor, Julio Saez-Rodriguez. Unifying multi-sample network inference from prior knowledge and omics data with CORNETO. Nature Machine Intelligence, pp. 1--19 (2025)." ] }, + "execution_count": 2, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -1027,8 +1029,8 @@ "text/plain": [ "{'_flow': _flow: Variable((91,), _flow),\n", " 'edge_has_flux': edge_has_flux: Variable((91,), edge_has_flux, boolean=True),\n", - " '_flow_ineg': _flow_ineg: Variable((91,), _flow_ineg, boolean=True),\n", - " '_flow_ipos': _flow_ipos: Variable((91,), _flow_ipos, boolean=True),\n", + " '_flow_ipos_s0': _flow_ipos_s0: Variable((42,), _flow_ipos_s0, boolean=True),\n", + " '_flow_ineg_s0': _flow_ineg_s0: Variable((42,), _flow_ineg_s0, boolean=True),\n", " 'flow': _flow: Variable((91,), _flow)}" ] }, @@ -1125,7 +1127,7 @@ "text": [ "1.0\n", "1.0\n", - "61.0\n" + "60.000000810072194\n" ] } ], @@ -1182,23 +1184,23 @@ " \n", " \n", " EX_ac_b\n", - " 5.226570e-02\n", + " 3.952761\n", " \n", " \n", " EX_akg_b\n", - " -5.204170e-18\n", + " 0.000000\n", " \n", " \n", " EX_co2_b\n", - " 1.108361e+01\n", + " 0.000000\n", " \n", " \n", " EX_etoh_b\n", - " 1.123012e+01\n", + " 4.082816\n", " \n", " \n", " EX_for_b\n", - " 4.553438e-01\n", + " 8.283732\n", " \n", " \n", " ...\n", @@ -1206,23 +1208,23 @@ " \n", " \n", " TALA\n", - " -1.000000e-02\n", + " 0.010000\n", " \n", " \n", " THD2\n", - " 5.008158e+00\n", + " 0.830454\n", " \n", " \n", " TKT1\n", - " -1.000000e-02\n", + " 0.010000\n", " \n", " \n", " TKT2\n", - " -3.690516e-02\n", + " -0.010000\n", " \n", " \n", " TPI\n", - " 6.141758e+00\n", + " 4.383736\n", " \n", " \n", "\n", @@ -1230,18 +1232,18 @@ "" ], "text/plain": [ - " flux\n", - "EX_ac_b 5.226570e-02\n", - "EX_akg_b -5.204170e-18\n", - "EX_co2_b 1.108361e+01\n", - "EX_etoh_b 1.123012e+01\n", - "EX_for_b 4.553438e-01\n", - "... ...\n", - "TALA -1.000000e-02\n", - "THD2 5.008158e+00\n", - "TKT1 -1.000000e-02\n", - "TKT2 -3.690516e-02\n", - "TPI 6.141758e+00\n", + " flux\n", + "EX_ac_b 3.952761\n", + "EX_akg_b 0.000000\n", + "EX_co2_b 0.000000\n", + "EX_etoh_b 4.082816\n", + "EX_for_b 8.283732\n", + "... ...\n", + "TALA 0.010000\n", + "THD2 0.830454\n", + "TKT1 0.010000\n", + "TKT2 -0.010000\n", + "TPI 4.383736\n", "\n", "[91 rows x 1 columns]" ] @@ -1293,7 +1295,7 @@ }, { "data": { - "image/png": "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Ovfcc1VaWqrLL79cCxYs0E9/+lMdO3ZMy5Yt0913363MzMz4Dp8EduzYoZ07d+raa69VVlaWGhoa9MADD+gb3/iGxo8fH+/xEt7SpUu1YMECzZgxQ7NmzdLTTz+t5uZm3XvvvfEeLeksW7ZMZWVlGj9+vFpbW7V27Vq1tbVp4cKF8R4tKZw8eVL79+8P329qatKePXt0/vnna/z48aqoqFBlZaXy8vKUl5enyspKeTwelZeXx3Hqs0ycf9sGn7Fw4UJHUr/bG2+8Ed7nwIEDzk033eSkp6c7559/vrNkyRLnk08+id/QSWT37t1OQUGBk5WV5YwcOdK59NJLndWrVzsdHR3xHi1pPP74486ECROcESNGOFdddZVTV1cX75GS0q233uqMGzfOSUtLc3w+nzNv3jynsbEx3mMljTfeeOO0X6sXLlzoOM6nv267evVqx+v1Om632/na177m7N27N75Dn2VcjuM48QofAACQevhtFwAAYIr4AAAApogPAABgivgAAACmiA8AAGCK+AAAAKaIDwAAYIr4AAAApogPAABgivgAAACmiA8AAGDq/wE2xM6sx6FUnAAAAABJRU5ErkJggg==", + "image/png": "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", "text/plain": [ "
" ] @@ -1367,7 +1369,7 @@ { "data": { "text/plain": [ - "np.float64(61.0)" + "np.float64(60.000000810072194)" ] }, "execution_count": 18, @@ -1447,1739 +1449,1766 @@ "\n", "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", "\n", "\n", "e_0_target\n", - "\n", + "\n", "\n", "\n", "\n", "ac_b\n", - "\n", - "ac_b\n", + "\n", + "ac_b\n", "\n", "\n", "\n", "ac_b->e_0_target\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "e_1_target\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "co2_b\n", - "\n", - "co2_b\n", + "etoh_b\n", + "\n", + "etoh_b\n", "\n", - "\n", + "\n", "\n", - "co2_b->e_1_target\n", - "\n", - "\n", + "etoh_b->e_1_target\n", + "\n", + "\n", "\n", "\n", "\n", "e_2_target\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "etoh_b\n", - "\n", - "etoh_b\n", + "for_b\n", + "\n", + "for_b\n", "\n", - "\n", + "\n", "\n", - "etoh_b->e_2_target\n", - "\n", - "\n", + "for_b->e_2_target\n", + "\n", + "\n", "\n", "\n", "\n", "e_3_target\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "for_b\n", - "\n", - "for_b\n", + "glc_D_b\n", + "\n", + "glc_D_b\n", "\n", - "\n", + "\n", "\n", - "for_b->e_3_target\n", - "\n", - "\n", + "glc_D_b->e_3_target\n", + "\n", + "\n", "\n", "\n", "\n", "e_4_target\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "glc_D_b\n", - "\n", - "glc_D_b\n", + "h2o_b\n", + "\n", + "h2o_b\n", "\n", - "\n", + "\n", "\n", - "glc_D_b->e_4_target\n", - "\n", - "\n", + "h2o_b->e_4_target\n", + "\n", + "\n", "\n", "\n", "\n", "e_5_target\n", - "\n", + "\n", "\n", "\n", "\n", "h_b\n", - "\n", - "h_b\n", + "\n", + "h_b\n", "\n", "\n", "\n", "h_b->e_5_target\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "e_6_target\n", - "\n", + "\n", "\n", "\n", "\n", "pi_b\n", - "\n", - "pi_b\n", + "\n", + "pi_b\n", "\n", "\n", "\n", "pi_b->e_6_target\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "e_7_target\n", - "\n", + "\n", "\n", "\n", "\n", "succ_b\n", - "\n", - "succ_b\n", + "\n", + "succ_b\n", "\n", "\n", "\n", "succ_b->e_7_target\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "atp_c\n", - "\n", - "atp_c\n", + "\n", + "atp_c\n", "\n", "\n", "\n", "e_8_center\n", - "\n", + "\n", "\n", "\n", "\n", "atp_c->e_8_center\n", - "\n", + "\n", "\n", "\n", "\n", "e_12_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "atp_c->e_12_center\n", - "\n", + "\n", "\n", "\n", "\n", "e_13_center\n", - "\n", + "\n", "\n", "\n", "\n", "atp_c->e_13_center\n", - "\n", + "\n", "\n", "\n", "\n", "e_15_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "atp_c->e_15_center\n", - "\n", + "\n", "\n", - "\n", - "\n", - "e_42_center\n", - "\n", + "\n", + "\n", + "e_43_center\n", + "\n", "\n", - "\n", - "\n", - "atp_c->e_42_center\n", - "\n", + "\n", + "\n", + "atp_c->e_43_center\n", + "\n", "\n", - "\n", - "\n", - "e_45_center\n", - "\n", + "\n", + "\n", + "e_46_center\n", + "\n", "\n", - "\n", - "\n", - "atp_c->e_45_center\n", - "\n", + "\n", + "\n", + "atp_c->e_46_center\n", + "\n", "\n", - "\n", - "\n", - "e_50_center\n", - "\n", + "\n", + "\n", + "e_51_center\n", + "\n", "\n", - "\n", - "\n", - "atp_c->e_50_center\n", - "\n", + "\n", + "\n", + "atp_c->e_51_center\n", + "\n", "\n", "\n", "\n", "ac_c\n", - "\n", - "ac_c\n", + "\n", + "ac_c\n", "\n", "\n", "\n", "ac_c->e_8_center\n", - "\n", - "\n", - "\n", - "\n", - "actp_c\n", - "\n", - "actp_c\n", + "\n", "\n", "\n", - "\n", + "\n", "adp_c\n", - "\n", - "adp_c\n", + "\n", + "adp_c\n", "\n", "\n", "\n", "e_14_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "adp_c->e_14_center\n", - "\n", + "\n", "\n", - "\n", - "\n", - "e_52_center\n", - "\n", + "\n", + "\n", + "e_53_center\n", + "\n", "\n", - "\n", - "\n", - "adp_c->e_52_center\n", - "\n", + "\n", + "\n", + "adp_c->e_53_center\n", + "\n", "\n", - "\n", - "\n", - "e_8_center->actp_c\n", - "\n", - "\n", + "\n", + "\n", + "actp_c\n", + "\n", + "actp_c\n", "\n", "\n", - "\n", + "\n", "e_8_center->adp_c\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "e_8_center->actp_c\n", + "\n", + "\n", "\n", "\n", "\n", "cit_c\n", - "\n", - "cit_c\n", + "\n", + "cit_c\n", "\n", "\n", "\n", "icit_c\n", - "\n", - "icit_c\n", + "\n", + "icit_c\n", "\n", "\n", "\n", "cit_c->icit_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "e_35_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "icit_c->e_35_center\n", - "\n", + "\n", "\n", "\n", "\n", "e_36_center\n", - "\n", + "\n", "\n", "\n", "\n", "icit_c->e_36_center\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "ac_e\n", - "\n", - "ac_e\n", + "h_e\n", + "\n", + "h_e\n", "\n", - "\n", - "\n", - "ac_e->ac_b\n", - "\n", - "\n", + "\n", + "\n", + "h_e->h_b\n", + "\n", + "\n", "\n", "\n", "\n", "e_10_center\n", - "\n", - "\n", - "\n", - "\n", - "ac_e->e_10_center\n", - "\n", - "\n", - "\n", - "\n", - "h_e\n", - "\n", - "h_e\n", - "\n", - "\n", - "\n", - "h_e->h_b\n", - "\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "h_e->e_10_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "h_e->e_14_center\n", - "\n", + "\n", "\n", - "\n", - "\n", - "e_19_center\n", - "\n", + "\n", + "\n", + "e_18_center\n", + "\n", "\n", - "\n", - "\n", - "h_e->e_19_center\n", - "\n", + "\n", + "\n", + "h_e->e_18_center\n", + "\n", "\n", "\n", "\n", "e_57_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "h_e->e_57_center\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "ac_e\n", + "\n", + "ac_e\n", + "\n", + "\n", + "\n", + "ac_e->ac_b\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ac_e->e_10_center\n", + "\n", "\n", "\n", "\n", "h_c\n", - "\n", - "h_c\n", + "\n", + "h_c\n", "\n", "\n", "\n", "e_11_center\n", - "\n", + "\n", "\n", "\n", "\n", "h_c->e_11_center\n", - "\n", + "\n", "\n", - "\n", - "\n", - "h_c->e_52_center\n", - "\n", + "\n", + "\n", + "h_c->e_53_center\n", + "\n", "\n", "\n", "\n", "e_55_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "h_c->e_55_center\n", - "\n", + "\n", "\n", "\n", "\n", "e_10_center->ac_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "e_10_center->h_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "nadh_c\n", - "\n", - "nadh_c\n", + "\n", + "nadh_c\n", "\n", "\n", "\n", "nadh_c->e_11_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "nadh_c->e_57_center\n", - "\n", + "\n", "\n", "\n", "\n", "accoa_c\n", - "\n", - "accoa_c\n", + "\n", + "accoa_c\n", "\n", "\n", "\n", "accoa_c->e_11_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "accoa_c->e_15_center\n", - "\n", + "\n", "\n", - "\n", - "\n", - "e_17_center\n", - "\n", + "\n", + "\n", + "e_16_center\n", + "\n", "\n", - "\n", - "\n", - "accoa_c->e_17_center\n", - "\n", + "\n", + "\n", + "accoa_c->e_16_center\n", + "\n", "\n", "\n", "\n", "e_37_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "accoa_c->e_37_center\n", - "\n", + "\n", "\n", - "\n", - "\n", - "e_51_center\n", - "\n", + "\n", + "\n", + "e_52_center\n", + "\n", "\n", - "\n", - "\n", - "accoa_c->e_51_center\n", - "\n", + "\n", + "\n", + "accoa_c->e_52_center\n", + "\n", "\n", "\n", "\n", "coa_c\n", - "\n", - "coa_c\n", - "\n", - "\n", - "\n", - "e_41_center\n", - "\n", + "\n", + "coa_c\n", "\n", - "\n", - "\n", - "coa_c->e_41_center\n", - "\n", + "\n", + "\n", + "e_42_center\n", + "\n", "\n", - "\n", - "\n", - "e_43_center\n", - "\n", + "\n", + "\n", + "coa_c->e_42_center\n", + "\n", "\n", - "\n", - "\n", - "coa_c->e_43_center\n", - "\n", + "\n", + "\n", + "e_44_center\n", + "\n", "\n", - "\n", - "\n", - "etoh_c\n", - "\n", - "etoh_c\n", + "\n", + "\n", + "coa_c->e_44_center\n", + "\n", "\n", "\n", - "\n", + "\n", "nad_c\n", - "\n", - "nad_c\n", + "\n", + "nad_c\n", "\n", "\n", - "\n", + "\n", "nad_c->e_15_center\n", - "\n", + "\n", "\n", - "\n", - "\n", - "e_32_center\n", - "\n", + "\n", + "\n", + "e_31_center\n", + "\n", "\n", - "\n", - "\n", - "nad_c->e_32_center\n", - "\n", + "\n", + "\n", + "nad_c->e_31_center\n", + "\n", "\n", "\n", "\n", "e_38_center\n", - "\n", + "\n", "\n", "\n", "\n", "nad_c->e_38_center\n", - "\n", + "\n", "\n", "\n", "\n", "e_39_center\n", - "\n", + "\n", "\n", "\n", "\n", "nad_c->e_39_center\n", - "\n", + "\n", "\n", - "\n", - "\n", - "e_40_center\n", - "\n", - "\n", - "\n", - "\n", - "nad_c->e_40_center\n", - "\n", + "\n", + "\n", + "e_41_center\n", + "\n", "\n", "\n", - "\n", + "\n", "nad_c->e_41_center\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "nad_c->e_42_center\n", + "\n", + "\n", + "\n", + "\n", + "etoh_c\n", + "\n", + "etoh_c\n", "\n", "\n", "\n", "e_11_center->coa_c\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_11_center->etoh_c\n", - "\n", - "\n", + "e_11_center->nad_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_11_center->nad_c\n", - "\n", - "\n", + "e_11_center->etoh_c\n", + "\n", + "\n", "\n", "\n", "\n", "amp_c\n", - "\n", - "amp_c\n", + "\n", + "amp_c\n", "\n", "\n", - "\n", + "\n", "amp_c->e_12_center\n", - "\n", + "\n", "\n", "\n", "\n", "e_12_center->adp_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "h2o_c\n", - "\n", - "h2o_c\n", + "\n", + "h2o_c\n", "\n", "\n", "\n", "h2o_c->e_13_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "h2o_c->e_15_center\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "h2o_c->e_17_center\n", - "\n", + "h2o_c->e_16_center\n", + "\n", "\n", - "\n", - "\n", - "e_29_center\n", - "\n", + "\n", + "\n", + "e_28_center\n", + "\n", "\n", - "\n", - "\n", - "h2o_c->e_29_center\n", - "\n", + "\n", + "\n", + "h2o_c->e_28_center\n", + "\n", "\n", "\n", - "\n", + "\n", "h2o_c->e_37_center\n", - "\n", - "\n", - "\n", - "\n", - "e_46_center\n", - "\n", + "\n", "\n", - "\n", - "\n", - "h2o_c->e_46_center\n", - "\n", - "\n", - "\n", + "\n", "\n", - "e_49_center\n", - "\n", + "e_47_center\n", + "\n", "\n", - "\n", - "\n", - "h2o_c->e_49_center\n", - "\n", + "\n", + "\n", + "h2o_c->e_47_center\n", + "\n", + "\n", + "\n", + "\n", + "e_50_center\n", + "\n", "\n", "\n", - "\n", + "\n", "h2o_c->e_50_center\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "h2o_c->e_51_center\n", + "\n", "\n", "\n", "\n", "pi_c\n", - "\n", - "pi_c\n", + "\n", + "pi_c\n", "\n", "\n", - "\n", + "\n", "pi_c->e_14_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "pi_e\n", - "\n", - "pi_e\n", + "\n", + "pi_e\n", "\n", "\n", - "\n", + "\n", "pi_c->pi_e\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", - "\n", - "pi_c->e_32_center\n", - "\n", + "\n", + "\n", + "pi_c->e_31_center\n", + "\n", "\n", - "\n", - "\n", - "pi_c->e_51_center\n", - "\n", + "\n", + "\n", + "pi_c->e_52_center\n", + "\n", "\n", "\n", - "\n", + "\n", "e_13_center->adp_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_13_center->h_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_13_center->pi_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_14_center->atp_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_14_center->h_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "e_14_center->h2o_c\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "akg_c\n", - "\n", - "akg_c\n", - "\n", - "\n", - "\n", - "akg_c->e_15_center\n", - "\n", - "\n", - "\n", - "\n", - "oaa_c\n", - "\n", - "oaa_c\n", + "oaa_c\n", + "\n", + "oaa_c\n", "\n", "\n", "\n", "oaa_c->e_15_center\n", - "\n", + "\n", "\n", - "\n", - "\n", - "oaa_c->e_17_center\n", - "\n", + "\n", + "\n", + "oaa_c->e_16_center\n", + "\n", "\n", - "\n", + "\n", + "\n", + "f6p_c\n", + "\n", + "f6p_c\n", + "\n", + "\n", + "\n", + "f6p_c->e_15_center\n", + "\n", + "\n", + "\n", + "\n", + "f6p_c->e_43_center\n", + "\n", + "\n", + "\n", "\n", + "e4p_c\n", + "\n", + "e4p_c\n", + "\n", + "\n", + "\n", + "e4p_c->e_15_center\n", + "\n", + "\n", + "\n", + "\n", + "e_59_center\n", + "\n", + "\n", + "\n", + "\n", + "e4p_c->e_59_center\n", + "\n", + "\n", + "\n", + "\n", + "nadph_c\n", + "\n", + "nadph_c\n", + "\n", + "\n", + "\n", + "nadph_c->e_15_center\n", + "\n", + "\n", + "\n", + "\n", + "nadph_c->e_41_center\n", + "\n", + "\n", + "\n", + "\n", + "3pg_c\n", + "\n", + "3pg_c\n", + "\n", + "\n", + "\n", + "3pg_c->e_15_center\n", + "\n", + "\n", + "\n", + "\n", + "3pg_c->e_46_center\n", + "\n", + "\n", + "\n", + "\n", "r5p_c\n", - "\n", - "r5p_c\n", + "\n", + "r5p_c\n", "\n", "\n", - "\n", + "\n", "r5p_c->e_15_center\n", - "\n", + "\n", "\n", "\n", "\n", "ru5p_D_c\n", - "\n", - "ru5p_D_c\n", + "\n", + "ru5p_D_c\n", "\n", "\n", - "\n", + "\n", "r5p_c->ru5p_D_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_58_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "r5p_c->e_58_center\n", - "\n", - "\n", - "\n", - "\n", - "f6p_c\n", - "\n", - "f6p_c\n", - "\n", - "\n", - "\n", - "f6p_c->e_15_center\n", - "\n", - "\n", - "\n", - "\n", - "f6p_c->e_42_center\n", - "\n", - "\n", - "\n", - "\n", - "g6p_c\n", - "\n", - "g6p_c\n", - "\n", - "\n", - "\n", - "g6p_c->f6p_c\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "g6p_c->e_15_center\n", - "\n", - "\n", - "\n", - "\n", - "e_31_center\n", - "\n", - "\n", - "\n", - "\n", - "g6p_c->e_31_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "g3p_c\n", - "\n", - "g3p_c\n", + "\n", + "g3p_c\n", "\n", "\n", - "\n", + "\n", "g3p_c->e_15_center\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "g3p_c->e_32_center\n", - "\n", + "g3p_c->e_31_center\n", + "\n", "\n", "\n", "\n", "e_56_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "g3p_c->e_56_center\n", - "\n", + "\n", "\n", - "\n", - "\n", - "nadph_c\n", - "\n", - "nadph_c\n", + "\n", + "\n", + "pyr_c\n", + "\n", + "pyr_c\n", "\n", - "\n", - "\n", - "nadph_c->e_15_center\n", - "\n", + "\n", + "\n", + "pyr_c->e_15_center\n", + "\n", "\n", - "\n", - "\n", - "nadph_c->e_40_center\n", - "\n", + "\n", + "\n", + "pyr_c->e_42_center\n", + "\n", "\n", - "\n", - "\n", - "e4p_c\n", - "\n", - "e4p_c\n", + "\n", + "\n", + "pyr_c->e_44_center\n", + "\n", "\n", - "\n", - "\n", - "e4p_c->e_15_center\n", - "\n", + "\n", + "\n", + "pyr_c->e_51_center\n", + "\n", "\n", - "\n", - "\n", - "e_59_center\n", - "\n", + "\n", + "\n", + "g6p_c\n", + "\n", + "g6p_c\n", "\n", - "\n", - "\n", - "e4p_c->e_59_center\n", - "\n", + "\n", + "\n", + "g6p_c->f6p_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "pyr_c\n", - "\n", - "pyr_c\n", + "\n", + "\n", + "g6p_c->e_15_center\n", + "\n", "\n", - "\n", - "\n", - "pyr_c->e_15_center\n", - "\n", + "\n", + "\n", + "e_30_center\n", + "\n", "\n", - "\n", - "\n", - "pyr_c->e_41_center\n", - "\n", + "\n", + "\n", + "g6p_c->e_30_center\n", + "\n", "\n", - "\n", - "\n", - "pyr_c->e_43_center\n", - "\n", + "\n", + "\n", + "akg_c\n", + "\n", + "akg_c\n", "\n", - "\n", - "\n", - "pyr_c->e_50_center\n", - "\n", + "\n", + "\n", + "akg_c->e_15_center\n", + "\n", "\n", "\n", - "\n", + "\n", "pep_c\n", - "\n", - "pep_c\n", + "\n", + "pep_c\n", "\n", "\n", - "\n", + "\n", "pep_c->e_15_center\n", - "\n", - "\n", - "\n", - "\n", - "e_33_center\n", - "\n", + "\n", "\n", - "\n", - "\n", - "pep_c->e_33_center\n", - "\n", - "\n", - "\n", - "\n", - "pep_c->e_49_center\n", - "\n", - "\n", - "\n", - "\n", - "pep_c->e_52_center\n", - "\n", + "\n", + "\n", + "e_32_center\n", + "\n", "\n", - "\n", - "\n", - "3pg_c\n", - "\n", - "3pg_c\n", + "\n", + "\n", + "pep_c->e_32_center\n", + "\n", "\n", - "\n", - "\n", - "3pg_c->e_15_center\n", - "\n", + "\n", + "\n", + "pep_c->e_50_center\n", + "\n", "\n", - "\n", - "\n", - "3pg_c->e_45_center\n", - "\n", + "\n", + "\n", + "pep_c->e_53_center\n", + "\n", "\n", "\n", "\n", "nadp_c\n", - "\n", - "nadp_c\n", + "\n", + "nadp_c\n", "\n", - "\n", - "\n", - "nadp_c->e_31_center\n", - "\n", + "\n", + "\n", + "nadp_c->e_30_center\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_34_center\n", - "\n", + "e_33_center\n", + "\n", "\n", - "\n", - "\n", - "nadp_c->e_34_center\n", - "\n", + "\n", + "\n", + "nadp_c->e_33_center\n", + "\n", "\n", "\n", - "\n", + "\n", "nadp_c->e_35_center\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "e_40_center\n", + "\n", + "\n", + "\n", + "\n", + "nadp_c->e_40_center\n", + "\n", "\n", "\n", - "\n", + "\n", "nadp_c->e_57_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_15_center->adp_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_15_center->h_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_15_center->nadh_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_15_center->coa_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_15_center->pi_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_15_center->nadp_c\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", - "\n", - "co2_e\n", - "\n", - "co2_e\n", - "\n", - "\n", - "\n", - "co2_e->co2_b\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "co2_c\n", - "\n", - "co2_c\n", - "\n", - "\n", - "\n", - "co2_e->co2_c\n", - "\n", - "\n", + "\n", + "\n", + "e_16_center->cit_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "co2_c->e_49_center\n", - "\n", + "\n", + "\n", + "e_16_center->h_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_17_center->cit_c\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "e_17_center->h_c\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "e_17_center->coa_c\n", - "\n", - "\n", + "e_16_center->coa_c\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "2pg_c\n", - "\n", - "2pg_c\n", + "\n", + "2pg_c\n", "\n", "\n", - "\n", + "\n", "2pg_c->3pg_c\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_18_center\n", - "\n", + "\n", + "\n", + "e_17_center\n", + "\n", + "\n", + "\n", + "\n", + "2pg_c->e_17_center\n", + "\n", "\n", - "\n", + "\n", "\n", - "2pg_c->e_18_center\n", - "\n", + "e_17_center->h2o_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_18_center->h2o_c\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "e_18_center->pep_c\n", - "\n", - "\n", + "e_17_center->pep_c\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "etoh_e\n", - "\n", - "etoh_e\n", + "\n", + "etoh_e\n", "\n", "\n", - "\n", + "\n", "etoh_e->etoh_b\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "etoh_e->e_19_center\n", - "\n", + "etoh_e->e_18_center\n", + "\n", "\n", - "\n", - "\n", - "e_19_center->h_c\n", - "\n", - "\n", + "\n", + "\n", + "e_18_center->h_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_19_center->etoh_c\n", - "\n", - "\n", + "\n", + "\n", + "e_18_center->etoh_c\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "for_e\n", - "\n", - "for_e\n", + "\n", + "for_e\n", "\n", "\n", - "\n", + "\n", "for_e->for_b\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "for_c\n", - "\n", - "for_c\n", + "\n", + "for_c\n", "\n", "\n", - "\n", + "\n", "for_e->for_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "glc_D_e\n", - "\n", - "glc_D_e\n", + "\n", + "glc_D_e\n", "\n", "\n", - "\n", + "\n", "glc_D_e->glc_D_b\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", - "\n", - "glc_D_e->e_33_center\n", - "\n", + "\n", + "\n", + "glc_D_e->e_32_center\n", + "\n", + "\n", + "\n", + "\n", + "h2o_e\n", + "\n", + "h2o_e\n", + "\n", + "\n", + "\n", + "h2o_e->h2o_b\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "h2o_e->h2o_c\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "pi_e->pi_b\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "succ_e\n", - "\n", - "succ_e\n", + "\n", + "succ_e\n", "\n", "\n", - "\n", + "\n", "succ_e->succ_b\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "fdp_c\n", - "\n", - "fdp_c\n", + "\n", + "fdp_c\n", "\n", - "\n", - "\n", - "e_28_center\n", - "\n", + "\n", + "\n", + "e_27_center\n", + "\n", + "\n", + "\n", + "\n", + "fdp_c->e_27_center\n", + "\n", "\n", "\n", - "\n", + "\n", "fdp_c->e_28_center\n", - "\n", - "\n", - "\n", - "\n", - "fdp_c->e_29_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "dhap_c\n", - "\n", - "dhap_c\n", + "\n", + "dhap_c\n", "\n", "\n", - "\n", + "\n", "dhap_c->g3p_c\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_28_center->g3p_c\n", - "\n", - "\n", + "e_27_center->g3p_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_28_center->dhap_c\n", - "\n", - "\n", + "\n", + "\n", + "e_27_center->dhap_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_29_center->pi_c\n", - "\n", - "\n", + "\n", + "\n", + "e_28_center->pi_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_29_center->f6p_c\n", - "\n", - "\n", + "e_28_center->f6p_c\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "6pgl_c\n", - "\n", - "6pgl_c\n", + "\n", + "6pgl_c\n", "\n", - "\n", - "\n", - "6pgl_c->e_46_center\n", - "\n", + "\n", + "\n", + "6pgl_c->e_47_center\n", + "\n", "\n", - "\n", - "\n", - "e_31_center->h_c\n", - "\n", - "\n", + "\n", + "\n", + "e_30_center->h_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_31_center->nadph_c\n", - "\n", - "\n", + "e_30_center->nadph_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_31_center->6pgl_c\n", - "\n", - "\n", + "\n", + "\n", + "e_30_center->6pgl_c\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "13dpg_c\n", - "\n", - "13dpg_c\n", + "\n", + "13dpg_c\n", "\n", - "\n", - "\n", - "e_32_center->h_c\n", - "\n", - "\n", + "\n", + "\n", + "e_31_center->h_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_32_center->nadh_c\n", - "\n", - "\n", + "e_31_center->nadh_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_32_center->13dpg_c\n", - "\n", - "\n", + "\n", + "\n", + "e_31_center->13dpg_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_33_center->g6p_c\n", - "\n", - "\n", + "e_32_center->pyr_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_33_center->pyr_c\n", - "\n", - "\n", + "\n", + "\n", + "e_32_center->g6p_c\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "6pgc_c\n", - "\n", - "6pgc_c\n", + "\n", + "6pgc_c\n", "\n", - "\n", + "\n", "\n", - "6pgc_c->e_34_center\n", - "\n", + "6pgc_c->e_33_center\n", + "\n", "\n", - "\n", - "\n", - "xu5p_D_c\n", - "\n", - "xu5p_D_c\n", + "\n", + "\n", + "co2_c\n", + "\n", + "co2_c\n", "\n", - "\n", - "\n", - "ru5p_D_c->xu5p_D_c\n", - "\n", - "\n", + "\n", + "\n", + "co2_c->e_50_center\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_34_center->nadph_c\n", - "\n", - "\n", + "e_33_center->nadph_c\n", + "\n", + "\n", "\n", - "\n", + "\n", + "\n", + "e_33_center->co2_c\n", + "\n", + "\n", + "\n", + "\n", "\n", - "e_34_center->co2_c\n", - "\n", - "\n", + "e_33_center->ru5p_D_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_34_center->ru5p_D_c\n", - "\n", - "\n", + "\n", + "\n", + "e_35_center->nadph_c\n", + "\n", + "\n", "\n", "\n", "\n", "e_35_center->akg_c\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "e_35_center->nadph_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "e_35_center->co2_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "succ_c\n", - "\n", - "succ_c\n", + "\n", + "succ_c\n", "\n", "\n", - "\n", + "\n", "succ_c->e_55_center\n", - "\n", + "\n", "\n", "\n", "\n", "glx_c\n", - "\n", - "glx_c\n", + "\n", + "glx_c\n", "\n", "\n", - "\n", + "\n", "glx_c->e_37_center\n", - "\n", + "\n", "\n", "\n", "\n", "e_36_center->succ_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "e_36_center->glx_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "mal_L_c\n", - "\n", - "mal_L_c\n", + "\n", + "mal_L_c\n", "\n", "\n", "\n", "mal_L_c->e_38_center\n", - "\n", + "\n", "\n", "\n", "\n", "mal_L_c->e_39_center\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "mal_L_c->e_40_center\n", + "\n", "\n", "\n", "\n", "e_37_center->h_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_37_center->coa_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_37_center->mal_L_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "e_38_center->h_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_38_center->nadh_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_38_center->oaa_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_39_center->nadh_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_39_center->pyr_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "e_39_center->co2_c\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_40_center->nadh_c\n", - "\n", - "\n", - "\n", - "\n", + "\n", "\n", - "e_40_center->nadp_c\n", - "\n", - "\n", + "e_40_center->nadph_c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "e_40_center->pyr_c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "e_40_center->co2_c\n", + "\n", + "\n", "\n", "\n", "\n", "e_41_center->nadh_c\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_41_center->accoa_c\n", - "\n", - "\n", - "\n", - "\n", + "\n", "\n", - "e_41_center->co2_c\n", - "\n", - "\n", + "e_41_center->nadp_c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "e_42_center->nadh_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_42_center->adp_c\n", - "\n", - "\n", + "e_42_center->accoa_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_42_center->h_c\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "e_42_center->fdp_c\n", - "\n", - "\n", + "e_42_center->co2_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_43_center->accoa_c\n", - "\n", - "\n", + "e_43_center->adp_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_43_center->for_c\n", - "\n", - "\n", + "e_43_center->h_c\n", + "\n", + "\n", "\n", - "\n", + "\n", + "\n", + "e_43_center->fdp_c\n", + "\n", + "\n", + "\n", + "\n", "\n", - "e_45_center->adp_c\n", - "\n", - "\n", + "e_44_center->accoa_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_45_center->13dpg_c\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "e_46_center->h_c\n", - "\n", - "\n", + "e_44_center->for_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_46_center->6pgc_c\n", - "\n", - "\n", + "e_46_center->adp_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_49_center->h_c\n", - "\n", - "\n", + "\n", + "\n", + "e_46_center->13dpg_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_49_center->pi_c\n", - "\n", - "\n", + "\n", + "\n", + "e_47_center->h_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_49_center->oaa_c\n", - "\n", - "\n", + "\n", + "\n", + "e_47_center->6pgc_c\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_50_center->h_c\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "e_50_center->amp_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_50_center->pi_c\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", - "\n", - "e_50_center->pep_c\n", - "\n", - "\n", + "\n", + "\n", + "e_50_center->oaa_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_51_center->actp_c\n", - "\n", - "\n", + "e_51_center->h_c\n", + "\n", + "\n", "\n", - "\n", + "\n", + "\n", + "e_51_center->amp_c\n", + "\n", + "\n", + "\n", + "\n", "\n", - "e_51_center->coa_c\n", - "\n", - "\n", + "e_51_center->pi_c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "e_51_center->pep_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_52_center->atp_c\n", - "\n", - "\n", + "e_52_center->actp_c\n", + "\n", + "\n", "\n", - "\n", + "\n", "\n", - "e_52_center->pyr_c\n", - "\n", - "\n", + "e_52_center->coa_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "xu5p_D_c->e_58_center\n", - "\n", + "\n", + "\n", + "e_53_center->atp_c\n", + "\n", + "\n", "\n", - "\n", - "\n", - "xu5p_D_c->e_59_center\n", - "\n", + "\n", + "\n", + "e_53_center->pyr_c\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_55_center->h_e\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_55_center->succ_e\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n", "s7p_c\n", - "\n", - "s7p_c\n", + "\n", + "s7p_c\n", "\n", "\n", - "\n", + "\n", "s7p_c->e_56_center\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_56_center->f6p_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_56_center->e4p_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_57_center->h_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_57_center->nad_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_57_center->nadph_c\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "xu5p_D_c\n", + "\n", + "xu5p_D_c\n", + "\n", + "\n", + "\n", + "xu5p_D_c->e_58_center\n", + "\n", + "\n", + "\n", + "\n", + "xu5p_D_c->e_59_center\n", + "\n", "\n", "\n", - "\n", + "\n", "e_58_center->g3p_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_58_center->s7p_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_59_center->f6p_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "e_59_center->g3p_c\n", - "\n", - "\n", + "\n", + "\n", "\n", "\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 20, @@ -3210,7 +3239,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "id": "0c52e3b1-67a5-482f-b4f3-035653931ac0", "metadata": { "execution": { @@ -3228,7 +3257,57 @@ }, "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
@article{shlomi2008network,\n",
+       "    title={Network-based prediction of human tissue-specific metabolism},\n",
+       "    author={Shlomi, Tomer and Cabili, Moran N and Herrg{\\aa}rd, Markus J and Palsson, Bernhard {\\O} and Ruppin, Eytan},\n",
+       "    journal={Nature biotechnology},\n",
+       "    volume={26},\n",
+       "    number={9},\n",
+       "    pages={1003--1010},\n",
+       "    year={2008},\n",
+       "    publisher={Nature Publishing Group US New York}\n",
+       "}\n",
+       "\n",
+       "@article{rodriguez2025unifying,\n",
+       "  title={Unifying multi-sample network inference from prior knowledge and omics data with CORNETO},\n",
+       "  author={Rodriguez-Mier, Pablo and Garrido-Rodriguez, Martin and Gabor, Attila and Saez-Rodriguez, Julio},\n",
+       "  journal={Nature Machine Intelligence},\n",
+       "  pages={1--19},\n",
+       "  year={2025},\n",
+       "  publisher={Nature Publishing Group UK London}\n",
+       "}
" + ], + "text/plain": [ + "@article{shlomi2008network,\n", + " title={Network-based prediction of human tissue-specific metabolism},\n", + " author={Shlomi, Tomer and Cabili, Moran N and Herrg{\\aa}rd, Markus J and Palsson, Bernhard {\\O} and Ruppin, Eytan},\n", + " journal={Nature biotechnology},\n", + " volume={26},\n", + " number={9},\n", + " pages={1003--1010},\n", + " year={2008},\n", + " publisher={Nature Publishing Group US New York}\n", + "}\n", + "\n", + "@article{rodriguez2025unifying,\n", + " title={Unifying multi-sample network inference from prior knowledge and omics data with CORNETO},\n", + " author={Rodriguez-Mier, Pablo and Garrido-Rodriguez, Martin and Gabor, Attila and Saez-Rodriguez, Julio},\n", + " journal={Nature Machine Intelligence},\n", + " pages={1--19},\n", + " year={2025},\n", + " publisher={Nature Publishing Group UK London}\n", + "}" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "MultiSampleIMAT.show_bibtex()" ] diff --git a/docs/tutorials/fba/pixi.lock b/docs/tutorials/fba/pixi.lock index a52247066..2eeadd7c3 100644 --- a/docs/tutorials/fba/pixi.lock +++ b/docs/tutorials/fba/pixi.lock @@ -188,7 +188,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - pypi: https://files.pythonhosted.org/packages/02/3f/a6ec28c88e2d8e54d32598a1e0b5208a4baa72a8e7f6e241beab5731eb9d/interface_meta-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/4b/ab615fea52e34579d5c6c7dba86b4f9d7f3cdb6a170b348ec49f34cf4355/anndata-0.11.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl @@ -234,6 +233,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c5/c4/f6b7c0ec5241a2bde90c7ba1eca6ba44f8488bcedafe9072c79593015ec0/session_info-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/38/48b75c3d8d268a3f19837cb8a89155ead6e97c6892bb64837183ea41db2b/scikit_learn-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/c2/a34097e53efe70a538ae97574ff9e9866e60fc1c792c19da5fd6b56ce7b5/formulaic-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/d6/249ac205426fca2273db6cf0c37e9223e7326047525dc31059ccb7bed5df/highspy-1.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -343,7 +343,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.3.3-h8bce59a_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda - pypi: https://files.pythonhosted.org/packages/02/3f/a6ec28c88e2d8e54d32598a1e0b5208a4baa72a8e7f6e241beab5731eb9d/interface_meta-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/06/12/b825caff9d65b101e79efe10aef2ea2724077bf70b75475e03ca9028250c/cvxpy-1.6.6-cp311-cp311-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/0a/4b/ab615fea52e34579d5c6c7dba86b4f9d7f3cdb6a170b348ec49f34cf4355/anndata-0.11.4-py3-none-any.whl @@ -393,6 +392,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/c4/f6b7c0ec5241a2bde90c7ba1eca6ba44f8488bcedafe9072c79593015ec0/session_info-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/c2/a34097e53efe70a538ae97574ff9e9866e60fc1c792c19da5fd6b56ce7b5/formulaic-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl @@ -495,7 +495,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda - pypi: https://files.pythonhosted.org/packages/02/3f/a6ec28c88e2d8e54d32598a1e0b5208a4baa72a8e7f6e241beab5731eb9d/interface_meta-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/4b/ab615fea52e34579d5c6c7dba86b4f9d7f3cdb6a170b348ec49f34cf4355/anndata-0.11.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl @@ -544,6 +543,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/c4/f6b7c0ec5241a2bde90c7ba1eca6ba44f8488bcedafe9072c79593015ec0/session_info-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/c2/a34097e53efe70a538ae97574ff9e9866e60fc1c792c19da5fd6b56ce7b5/formulaic-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl @@ -665,7 +665,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda - pypi: https://files.pythonhosted.org/packages/02/3f/a6ec28c88e2d8e54d32598a1e0b5208a4baa72a8e7f6e241beab5731eb9d/interface_meta-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/09/2fc9dbb337e35b3e9680c0370cf8816d9ed76e87da33350656a8b88a6449/cvxpy_base-1.7.1-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/0a/4b/ab615fea52e34579d5c6c7dba86b4f9d7f3cdb6a170b348ec49f34cf4355/anndata-0.11.4-py3-none-any.whl @@ -711,6 +710,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bf/34/a42b90bff9330ac57e1dcc8c35b978cee47d6e9eee14cb71981b801fc7cf/scs-3.2.7.post2-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c5/c4/f6b7c0ec5241a2bde90c7ba1eca6ba44f8488bcedafe9072c79593015ec0/session_info-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/c2/a34097e53efe70a538ae97574ff9e9866e60fc1c792c19da5fd6b56ce7b5/formulaic-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/8c/74240a4de3ec4296e44c5c9c5d58a0d5ea9d1c5d500c9eec35b6d124ac6c/highspy-1.11.0-cp311-cp311-win_amd64.whl @@ -6819,41 +6819,6 @@ packages: version: 1.3.0 sha256: de35dc5241431886e709e20a14d6597ed07c9f1e8b4bfcffde2190ca5b700ee8 requires_python: '>=3.7,<4.0' -- pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - name: corneto - version: 1.0.0b0 - sha256: 1ee763899597c3224b6abf82e752b752807a3ebd2cb0c50915c2103febe0ab90 - requires_dist: - - picos>=2.6.0 ; extra == 'research' - - cobra>=0.29.0 ; extra == 'research' - - cvxpy>=1.6.5 ; extra == 'ml' - - cvxpy>=1.6.5 ; extra == 'os' - - cvxpy>=1.6.5 ; extra == 'research' - - cvxpy-base>=1.6.5 - - cvxpy-base>=1.6.5 ; extra == 'vanilla' - - graphviz>=0.20.1 ; extra == 'os' - - graphviz>=0.20.1 ; extra == 'research' - - gurobipy ; extra == 'research' - - highspy>=1.9.0 ; extra == 'os' - - highspy>=1.9.0 ; extra == 'research' - - jax>=0.6.1 ; extra == 'ml' - - keras>=3.8.0 ; extra == 'ml' - - matplotlib>=3.5.2 ; extra == 'os' - - matplotlib>=3.5.2 ; extra == 'research' - - networkx>=3.2.1 ; extra == 'os' - - networkx>=3.2.1 ; extra == 'research' - - pandas>=2.2.3 ; extra == 'ml' - - pandas>=2.2.3 ; extra == 'research' - - pcst-fast>=1.0.10 ; extra == 'research' - - pyscipopt>=5.4.1 ; extra == 'os' - - pyscipopt>=5.4.1 ; extra == 'research' - - scikit-learn>=1.6.0 ; extra == 'ml' - - scipy>=1.15.2 - - scipy>=1.15.2 ; extra == 'ml' - - scipy>=1.15.2 ; extra == 'os' - - scipy>=1.15.2 ; extra == 'research' - - scipy>=1.15.2 ; extra == 'vanilla' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl name: h11 version: 0.16.0 @@ -8532,6 +8497,52 @@ packages: requires_dist: - colorama>=0.4.6 ; extra == 'windows-terminal' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl + name: corneto + version: 1.0.0rc1 + sha256: 1d1203a430617690f6d1a0200d5b5fac5cd42bace112d9d4b0f93edc69306561 + requires_dist: + - picos>=2.6.0 ; extra == 'research' + - annnet[polars]>=0.2.0,<0.3 ; extra == 'annnet' + - cobra>=0.29.0 ; extra == 'research' + - cvxpy>=1.5.1 ; extra == 'ml' + - cvxpy>=1.5.1 ; extra == 'os' + - cvxpy>=1.5.1 ; extra == 'research' + - cvxpy-base>=1.5.1 + - graphviz>=0.20.1 ; extra == 'os' + - graphviz>=0.20.1 ; extra == 'research' + - gurobipy ; extra == 'research' + - highspy>=1.9.0 ; extra == 'os' + - highspy>=1.9.0 ; extra == 'research' + - jax>=0.6.1 ; extra == 'ml' + - keras>=3.8.0 ; extra == 'ml' + - matplotlib>=3.5.2 ; extra == 'os' + - matplotlib>=3.5.2 ; extra == 'research' + - myst-nb>=0.17.2 ; extra == 'docs' + - myst-parser>=0.18.1 ; extra == 'docs' + - networkx>=3.2.1 ; extra == 'os' + - networkx>=3.2.1 ; extra == 'research' + - numpy>=1.25 + - pandas>=2.2.3 ; extra == 'ml' + - pandas>=2.2.3 ; extra == 'research' + - pcst-fast>=1.0.10 ; extra == 'research' + - pydata-sphinx-theme>=0.16.1 ; extra == 'docs' + - pydot>=3.0.4 ; extra == 'docs' + - pyscipopt>=5.4.1 ; extra == 'os' + - pyscipopt>=5.4.1 ; extra == 'research' + - scikit-learn>=1.6.0 ; extra == 'ml' + - scipy>=1.14.1 + - scipy>=1.14.1 ; extra == 'ml' + - scipy>=1.14.1 ; extra == 'os' + - scipy>=1.14.1 ; extra == 'research' + - sphinx>=5.0 ; extra == 'docs' + - sphinx-autodoc-typehints>=1.21.8 ; extra == 'docs' + - sphinx-design>=0.4.1 ; extra == 'docs' + - sphinx-favicon>=1.0.1 ; extra == 'docs' + - sphinx-hoverxref>=1.3.0 ; extra == 'docs' + - sphinxcontrib-bibtex>=2.5.0 ; extra == 'docs' + - sphinxcontrib-napoleon>=0.7 ; extra == 'docs' + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/d1/67/eac43fc67942e3f795c4d9938488eebcd825783ff49b35151422ee09df5f/pydeseq2-0.5.1-py3-none-any.whl name: pydeseq2 version: 0.5.1 diff --git a/docs/tutorials/fba/pixi.toml b/docs/tutorials/fba/pixi.toml index e67c06a0b..19c91b586 100644 --- a/docs/tutorials/fba/pixi.toml +++ b/docs/tutorials/fba/pixi.toml @@ -15,4 +15,4 @@ pydeseq2 = "==0.5.1" cvxpy = "==1.6.6" highspy = "==1.11.0" cobra = "==0.29.1" -corneto = "==1.0.0b0" +corneto = "==1.0.0rc1" diff --git a/docs/tutorials/ml/kpnn-with-sc.ipynb b/docs/tutorials/ml/kpnn-with-sc.ipynb index 6ff7a840f..8d9cf31da 100644 --- a/docs/tutorials/ml/kpnn-with-sc.ipynb +++ b/docs/tutorials/ml/kpnn-with-sc.ipynb @@ -84,15 +84,21 @@ "output_type": "stream", "text": [ "Effective URL: https://medical-epigenomics.org/papers/fortelny2019/\n", - "Downloading https://medical-epigenomics.org/papers/fortelny2019/TCR_Edgelist.csv to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpgy9f05hv/TCR_Edgelist.csv\n", - "Downloading https://medical-epigenomics.org/papers/fortelny2019/TCR_ClassLabels.csv to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpgy9f05hv/TCR_ClassLabels.csv\n" + "Downloading https://medical-epigenomics.org/papers/fortelny2019/TCR_Edgelist.csv to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpbv4ljrn2/TCR_Edgelist.csv\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Downloading https://medical-epigenomics.org/papers/fortelny2019/TCR_Data.h5 to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpgy9f05hv/TCR_Data.h5\n" + "Downloading https://medical-epigenomics.org/papers/fortelny2019/TCR_ClassLabels.csv to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpbv4ljrn2/TCR_ClassLabels.csv\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading https://medical-epigenomics.org/papers/fortelny2019/TCR_Data.h5 to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpbv4ljrn2/TCR_Data.h5\n" ] }, { @@ -100,9 +106,9 @@ "output_type": "stream", "text": [ "Downloaded files:\n", - "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpgy9f05hv/TCR_Edgelist.csv\n", - "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpgy9f05hv/TCR_ClassLabels.csv\n", - "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpgy9f05hv/TCR_Data.h5\n" + "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpbv4ljrn2/TCR_Edgelist.csv\n", + "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpbv4ljrn2/TCR_ClassLabels.csv\n", + "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpbv4ljrn2/TCR_Data.h5\n" ] } ], @@ -175,7 +181,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/pablorodriguezmier/Documents/work/projects/corneto/docs/tutorials/ml/.pixi/envs/default/lib/python3.10/site-packages/anndata/_core/anndata.py:1758: UserWarning: Variable names are not unique. To make them unique, call `.var_names_make_unique`.\n", + "/docs/tutorials/ml/.pixi/envs/default/lib/python3.11/site-packages/anndata/_core/anndata.py:1758: UserWarning: Variable names are not unique. To make them unique, call `.var_names_make_unique`.\n", " utils.warn_names_duplicates(\"var\")\n" ] } @@ -1136,19 +1142,20 @@ " style=\"width:100%;max-width:100px;\" />\n", " \n", " \n", - "
Installed version:v1.0.0b2.post25.dev0+fe9ca1ee
Available backends:CVXPY v1.7.5
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, HIGHS, OSQP, SCIPY, SCS
Graphviz version:v0.21
Installed path:/Users/pablorodriguezmier/Documents/work/projects/corneto/corneto
Repository:https://github.com/saezlab/corneto
\n", + "
Installed version:v1.0.0rc1
Available backends:CVXPY v1.7.5
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, HIGHS, OSQP, SCIPY, SCS
Plot backend (default):auto -> graphviz
Available plot backends:graphviz v0.21; networkx v3.4.2+mpl v3.10.8; graphviz-wasm
Installed path:/docs/tutorials/ml/.pixi/envs/default/lib/python3.11/site-packages/corneto
Repository:https://github.com/saezlab/corneto
\n", " \n", " \n", " \n", " " ], "text/plain": [ - "Installed version: v1.0.0b2.post25.dev0+fe9ca1ee\n", + "Installed version: v1.0.0rc1\n", "Available backends: CVXPY v1.7.5\n", "Default backend (corneto.opt): CVXPY\n", "Installed solvers: CLARABEL, HIGHS, OSQP, SCIPY, SCS\n", - "Graphviz version: v0.21\n", - "Installed path: /Users/pablorodriguezmier/Documents/work/projects/corneto/corneto\n", + "Plot backend (default): auto -> graphviz\n", + "Available plot backends: graphviz v0.21; networkx v3.4.2+mpl v3.10.8; graphviz-wasm\n", + "Installed path: /docs/tutorials/ml/.pixi/envs/default/lib/python3.11/site-packages/corneto\n", "Repository: https://github.com/saezlab/corneto" ] }, @@ -1458,7 +1465,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/ipykernel_13781/3016726407.py:2: FutureWarning: DataFrame.groupby with axis=1 is deprecated. Do `frame.T.groupby(...)` without axis instead.\n", + "/var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/ipykernel_39622/3016726407.py:2: FutureWarning: DataFrame.groupby with axis=1 is deprecated. Do `frame.T.groupby(...)` without axis instead.\n", " df_expr = df_expr.groupby(df_expr.columns, axis=1).max()\n" ] }, @@ -2250,7 +2257,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpflwx1756/weights_0.keras\n" + "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpsvm30spu/weights_0.keras\n" ] }, { @@ -2258,7 +2265,7 @@ "output_type": "stream", "text": [ "\r", - "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m10s\u001b[0m 1s/step" + "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m11s\u001b[0m 1s/step" ] }, { @@ -2266,7 +2273,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step" + "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 48ms/step" ] }, { @@ -2274,7 +2281,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 113ms/step" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 149ms/step" ] }, { @@ -2282,7 +2289,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 113ms/step\n" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 149ms/step\n" ] }, { @@ -2308,7 +2315,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpflwx1756/weights_1.keras\n" + "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpsvm30spu/weights_1.keras\n" ] }, { @@ -2316,7 +2323,7 @@ "output_type": "stream", "text": [ "\r", - "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m10s\u001b[0m 1s/step" + "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m11s\u001b[0m 1s/step" ] }, { @@ -2324,7 +2331,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 19ms/step" + "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 20ms/step" ] }, { @@ -2332,7 +2339,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 111ms/step" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 137ms/step" ] }, { @@ -2340,14 +2347,14 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 111ms/step\n" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 137ms/step\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " > Fold 1 validation ROC-AUC=0.978\n", + " > Fold 1 validation ROC-AUC=0.983\n", "Building DAG NN model with CORNETO using Keras with JAX...\n", " > N. inputs: 12459\n", " > N. outputs: 1\n" @@ -2366,7 +2373,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpflwx1756/weights_2.keras\n" + "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpsvm30spu/weights_2.keras\n" ] }, { @@ -2374,7 +2381,7 @@ "output_type": "stream", "text": [ "\r", - "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m10s\u001b[0m 1s/step" + "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m12s\u001b[0m 1s/step" ] }, { @@ -2382,7 +2389,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 18ms/step" + "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step" ] }, { @@ -2390,7 +2397,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 110ms/step" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 122ms/step" ] }, { @@ -2398,14 +2405,14 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 110ms/step\n" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 122ms/step\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " > Fold 2 validation ROC-AUC=0.988\n", + " > Fold 2 validation ROC-AUC=0.977\n", "Building DAG NN model with CORNETO using Keras with JAX...\n", " > N. inputs: 12459\n", " > N. outputs: 1\n" @@ -2424,7 +2431,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpflwx1756/weights_3.keras\n" + "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpsvm30spu/weights_3.keras\n" ] }, { @@ -2440,7 +2447,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 20ms/step" + "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 77ms/step" ] }, { @@ -2448,7 +2455,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 112ms/step" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 163ms/step" ] }, { @@ -2456,14 +2463,14 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 112ms/step\n" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 163ms/step\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " > Fold 3 validation ROC-AUC=0.993\n", + " > Fold 3 validation ROC-AUC=0.992\n", "Building DAG NN model with CORNETO using Keras with JAX...\n", " > N. inputs: 12459\n", " > N. outputs: 1\n" @@ -2482,7 +2489,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpflwx1756/weights_4.keras\n" + "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpsvm30spu/weights_4.keras\n" ] }, { @@ -2498,7 +2505,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 19ms/step" + "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 16ms/step" ] }, { @@ -2506,7 +2513,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 112ms/step" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 119ms/step" ] }, { @@ -2514,20 +2521,20 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 113ms/step\n" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 119ms/step\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " > Fold 4 validation ROC-AUC=0.993\n", + " > Fold 4 validation ROC-AUC=0.995\n", "Validation metrics:\n", " - accuracy: 0.961\n", " - precision: 0.967\n", - " - recall: 0.954\n", + " - recall: 0.953\n", " - f1: 0.960\n", - " - roc_auc: 0.989\n" + " - roc_auc: 0.988\n" ] } ], @@ -2692,74 +2699,71 @@ " \n", " \n", " \n", - " 2\n", - " SUZ12.EZH2\n", - " -2.319227\n", - " 2.319227\n", - " 5.378813\n", - " \n", - " \n", " 3\n", " TCR\n", - " -2.314526\n", - " 2.314526\n", - " 5.357029\n", + " -2.239990\n", + " 2.239990\n", + " 5.017553\n", " \n", " \n", - " 1\n", - " ZAP70\n", - " -2.168838\n", - " 2.168838\n", - " 4.703859\n", + " 4\n", + " SUZ12.EZH2\n", + " -2.131501\n", + " 2.131501\n", + " 4.543296\n", " \n", " \n", " 2\n", + " NfKb.p65.p50\n", + " -2.116935\n", + " 2.116935\n", + " 4.481413\n", + " \n", + " \n", + " 0\n", " TCR\n", - " 2.163686\n", - " 2.163686\n", - " 4.681535\n", + " 2.072657\n", + " 2.072657\n", + " 4.295907\n", " \n", " \n", - " 3\n", - " NfKb.p65.p50\n", - " -2.100779\n", - " 2.100779\n", - " 4.413271\n", + " 4\n", + " ZAP70\n", + " -1.976060\n", + " 1.976060\n", + " 3.904812\n", " \n", " \n", - " 4\n", - " SUZ12.EZH2\n", - " -1.978842\n", - " 1.978842\n", - " 3.915815\n", + " TCR\n", + " -1.879853\n", + " 1.879853\n", + " 3.533846\n", " \n", " \n", - " 3\n", - " ZAP70\n", - " 1.965354\n", - " 1.965354\n", - " 3.862615\n", + " LCK\n", + " -1.862840\n", + " 1.862840\n", + " 3.470172\n", " \n", " \n", - " 4\n", - " PRC2\n", - " -1.936076\n", - " 1.936076\n", - " 3.748389\n", + " NfKb.p65.p50\n", + " -1.861053\n", + " 1.861053\n", + " 3.463519\n", " \n", " \n", - " 0\n", + " 1\n", " TCR\n", - " 1.794367\n", - " 1.794367\n", - " 3.219754\n", + " 1.772437\n", + " 1.772437\n", + " 3.141535\n", " \n", " \n", - " 1\n", + " 0\n", " NfKb.p65.p50\n", - " -1.788792\n", - " 1.788792\n", - " 3.199777\n", + " -1.715750\n", + " 1.715750\n", + " 2.943798\n", " \n", " \n", "\n", @@ -2768,16 +2772,16 @@ "text/plain": [ " bias abs_bias pow2_bias\n", "fold gene \n", - "2 SUZ12.EZH2 -2.319227 2.319227 5.378813\n", - "3 TCR -2.314526 2.314526 5.357029\n", - "1 ZAP70 -2.168838 2.168838 4.703859\n", - "2 TCR 2.163686 2.163686 4.681535\n", - "3 NfKb.p65.p50 -2.100779 2.100779 4.413271\n", - "4 SUZ12.EZH2 -1.978842 1.978842 3.915815\n", - "3 ZAP70 1.965354 1.965354 3.862615\n", - "4 PRC2 -1.936076 1.936076 3.748389\n", - "0 TCR 1.794367 1.794367 3.219754\n", - "1 NfKb.p65.p50 -1.788792 1.788792 3.199777" + "3 TCR -2.239990 2.239990 5.017553\n", + "4 SUZ12.EZH2 -2.131501 2.131501 4.543296\n", + "2 NfKb.p65.p50 -2.116935 2.116935 4.481413\n", + "0 TCR 2.072657 2.072657 4.295907\n", + "4 ZAP70 -1.976060 1.976060 3.904812\n", + " TCR -1.879853 1.879853 3.533846\n", + " LCK -1.862840 1.862840 3.470172\n", + " NfKb.p65.p50 -1.861053 1.861053 3.463519\n", + "1 TCR 1.772437 1.772437 3.141535\n", + "0 NfKb.p65.p50 -1.715750 1.715750 2.943798" ] }, "execution_count": 32, @@ -2835,17 +2839,17 @@ "data": { "text/plain": [ "gene\n", - "TCR 3.567696\n", - "ZAP70 2.803867\n", - "SUZ12.EZH2 2.255738\n", - "NfKb.p65.p50 2.109870\n", - "PRKCD 1.688119\n", + "TCR 3.731767\n", + "NfKb.p65.p50 2.869271\n", + "DUSP3 1.426607\n", + "SUZ12.EZH2 1.408031\n", + "TEAD4 1.342012\n", " ... \n", - "CBX3 0.000156\n", - "KMT2D 0.000054\n", - "HMT 0.000016\n", - "GATA3 0.000015\n", - "SRY 0.000011\n", + "RBBP5 0.000911\n", + "CBX3 0.000815\n", + "REST 0.000393\n", + "SRY 0.000071\n", + "GATA3 0.000004\n", "Name: pow2_bias, Length: 308, dtype: float32" ] }, @@ -2893,7 +2897,7 @@ }, { "data": { - "image/png": "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IhgBAABOEYwAAACnjnT755GtJiMWhD7/4bi+rGQAQKlGywgAAHCKYAQAADhFMAIAAJwiGAEAAE4RjAAAAKcIRgAAgFMEIwAAwCmCEQAA4BTBCAAAcIpgBAAAOEUwAgAAnCIYAQAAThGMAAAApwhGAABA2QpGli1bZvr162fq169vKlSoYObNmxf6+qVLl9rXJd+2bduWzXIDAIDyGozs37/ftG3b1kyePDmt923YsMFs3bq16Fa7du10/zQAAChAR6b7hj59+thbuhR8HHPMMWm/DwAAFLYSyxlp166dqVevnunVq5d55ZVXQl974MABs2fPnmI3AABQmPIejCgAmTp1qnniiSfsrVGjRqZ79+7mzTffDHzP2LFjTc2aNYtueg8AAChMaXfTpKt58+b25unSpYt57733zMSJE81DDz2U8j0jR440w4cPL7qvlhECEgAAClPeg5FUOnbsaF5++eXA56tUqWJvAACg8DkJRtasWWO7b1A6NBmxIPT5D8f1LbFlAQCUP2kHI/v27TMbN24suv/BBx/Y4KJWrVrmxBNPtF0sH3/8sXnwwQft83fffbdp2rSpOe2008wXX3xhpk+fbl544QXz3HPP5fabAACA8hGMrFy50vTo0aPovpfbMWjQIDNz5kxbQ2TTpk1Fzx88eNBce+21NkCpVq2aadOmjXn++eeLfQYAACi/0g5GNBImkUgEPq+AxO/666+3NwAAgFSYmwYAADhFMAIAAJwiGAEAAE4RjAAAAKcIRgAAgFMEIwAAwCmCEQAA4BTBCAAAcIpgBAAAOEUwAgAAnCIYAQAAThGMAAAApwhGAACAUwQjAADAKYIRAADgFMEIAABwimAEAAA4RTACAACcOtLtn0chaDJiQejzH47rW2LLAgAoe2gZAQAAThGMAAAApwhGAACAUwQjAADAKYIRAADgFMEIAABwimAEAAA4RTACAACcIhgBAABOEYwAAACnCEYAAIBTBCMAAMApghEAAOAUwQgAAHDqSLd/Hvh/moxYELoqPhzXl1UFAAWKlhEAAOAUwQgAAHCKbhoUBLp5AKDsomUEAACUrWBk2bJlpl+/fqZ+/fqmQoUKZt68eZHvWbp0qTn99NNNlSpVTLNmzczMmTMzXV4AAFDeg5H9+/ebtm3bmsmTJ8d6/QcffGD69u1revToYdasWWOuueYaM2TIELNo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", + "image/png": "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sWOHzfFIRrkks2bNKnHfzJkzA3NMAABA8dk53e6Tnj17mr322sts3rzZTJo0ycyePdvMmDHDPt6vXz/TqFEjm/Mhl112menWrZsZNWqU6dWrl0141ZDgBx98MD/fBgAAlO9gZO3atTbgWLVqlU0sVQE0BSLHHHOMfXzFihWmYsX/NbZ07drVBiw33nijuf76681+++1npk6dalq3bp37bwIAAIqzzkhpoM4IAACFJ+91RgAAAHKBYAQAADhFMAIAAJwiGAEAAE4RjAAAgMKqwFpepJr1V5j5FwCA/KNlBAAAOEUwAgAAnCIYAQAAThGMAAAApwhGAACAUwQjAADAKYIRAADgFMEIAABwimAEAAA4RTACAACcIhgBAABOEYwAAACnCEYAAIBTBCMAAMApghEAAOAUwQgAAHCKYAQAADhFMAIAAJwiGAEAAE4RjAAAAKcIRgAAgFMEIwAAwCmCEQAA4BTBCAAAcIpgBAAAOEUwAgAAnCIYAQAAThGMAAAApwhGAACAUwQjAACgcIKRESNGmIMPPtjstttupm7duqZv375m+fLloa+ZMGGCqVChQolb1apVs11uAABQjMHInDlzzMUXX2zefPNNM3PmTPPzzz+bY4891mzdujX0dTVq1DCrVq2K37766qtslxsAAJQTO6fz5JdeeulXrR5qIVm4cKE54ogjAl+n1pD69etnvpQAAKDcyipnZOPGjfbf2rVrhz5vy5YtZu+99zZNmjQxffr0McuWLQt9/rZt28ymTZtK3AAAQPmUcTCyY8cOc/nll5vDDjvMtG7dOvB5LVq0MOPHjzfTpk0zjz32mH1d165dzddffx2am1KzZs34TUEMAAAonzIORpQ7snTpUjN58uTQ53Xp0sX069fPtG/f3nTr1s08/fTTZs899zQPPPBA4GsGDx5sW12828qVKzNdTAAAUJ5yRjyXXHKJmT59upk7d65p3LhxWq+tVKmS6dChg/n0008Dn1OlShV7AwAA5V9aLSOxWMwGIs8884x59dVXTbNmzdL+wO3bt5slS5aYBg0apP1aAABQ5C0j6pqZNGmSzf9QrZHVq1fb+5XXUa1aNft/dck0atTI5n3I0KFDTefOnU3z5s3Nhg0bzB133GGH9g4YMCAf3wcAAJTnYOT++++3/3bv3r3E/Q8//LA599xz7f9XrFhhKlb8X4PL+vXrzcCBA23gsvvuu5tOnTqZefPmmVatWuXmGwAAgOIJRtRNk8rs2bNL/D169Gh7AwAASIa5aQAAgFMEIwAAwCmCEQAA4BTBCAAAcIpgBAAAOEUwAgAAnCIYAQAAThGMAAAApwhGAACAUwQjAADAKYIRAADgFMEIAABwimAEAAA4RTACAACcIhgBAABOEYwAAACnCEYAAIBTBCMAAMApghEAAOAUwQgAAHCKYAQAADhFMAIAAJwiGAEAAE4RjAAAAKcIRgAAgFMEIwAAwCmCEQAA4BTBCAAAcIpgBAAAOEUwAgAAnCIYAQAAThGMAAAApwhGAACAUwQjAADAKYIRAADgFMEIAAAonGBkxIgR5uCDDza77babqVu3runbt69Zvnx5ytdNmTLFtGzZ0lStWtW0adPGvPDCC9ksMwAAKNZgZM6cOebiiy82b775ppk5c6b5+eefzbHHHmu2bt0a+Jp58+aZM844w/Tv398sWrTIBjC6LV26NBfLDwAAClyFWCwWy/TF69atsy0kClKOOOKIpM85/fTTbbAyffr0+H2dO3c27du3N2PHjo30OZs2bTI1a9Y0GzduNDVq1LD3Nb3u+dDXfDmyV+jjqV4f5T0AAEB65++c54zozaV27dqBz5k/f77p0aNHifuOO+44e3+Qbdu22S/gvwEAgPIp42Bkx44d5vLLLzeHHXaYad26deDzVq9eberVq1fiPv2t+8NyUxRJebcmTZpkupgAAKC8BiPKHVHex+TJk3O7RMaYwYMH21YX77Zy5cqcfwYAACgbds7kRZdcconNAZk7d65p3Lhx6HPr169v1qxZU+I+/a37g1SpUsXeAABA+ZdWy4hyXRWIPPPMM+bVV181zZo1S/maLl26mFmzZpW4TyNxdD8AAMDO6XbNTJo0yUybNs3WGvHyPpTXUa1aNfv/fv36mUaNGtm8D7nssstMt27dzKhRo0yvXr1st86CBQvMgw8+yNoHAADptYzcf//9Noeje/fupkGDBvHb448/Hn/OihUrzKpVq+J/d+3a1QYwCj7atWtnnnzySTN16tTQpFcAAFA80moZiVKSZPbs2b+679RTT7U3AACARMxNAwAAnCIYAQAAThGMAAAApwhGAACAUwQjAADAKYIRAADgFMEIAABwimAEAAA4RTACAACcIhgBAABOEYwAAACnCEYAAIBTBCMAAMAp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XBkaX6TVMlJa1PLib03ZsWOH+e6778wee+xhKlSo8KvnK/Jq0qSJWblypalRo0ZGn5nte7AMrAe2h7K5X+TiPVgG1gPbQ2b7hVpENm/ebBo2bGjCpBWM1KlTx+y0005mzZo1Je7X3/Xr10/6Gt2fzvOlSpUq9uZXq1atlMunlZHpwSpX78EysB7YHsrmfpGL92AZWA9sD+nvFzVr1jQ5TWCtXLmy6dSpk5k1a1aJVgv93aVLl6Sv0f3+58vMmTMDnw8AAIpL2t006j4555xzzEEHHWQOOeQQc/fdd5utW7fa0TXSr18/06hRIzNixAj792WXXWa6detmRo0aZXr16mUmT55sFixYYB588MHcfxsAAFD+g5HTTz/drFu3ztx0001m9erVpn379uall14y9erVs4+vWLHCjrDxdO3a1UyaNMnceOON5vrrrzf77befHUnTunXrnH0Jdemo7kli105pvgfLwHpgeyib+0Uu3oNlYD2wPeRnv/BUUBZr1u8CAACQIeamAQAAThGMAAAApwhGAACAUwQjAADAqXIVjPz444/mzjvvdL0YAACgPAcjGlY8ffp08/LLL5vt27fb+37++Wc7O3DTpk3NyJEjTbG65ZZbzH/+8x/Xi1Gu/PLLL3a4eqHS5JZbtmxxvRhI4B27Emlbi3JD2fDZZ5+Zo446yukybN261cydO9cUvFgBee2112I1a9aMVahQIVaxYkU7Od+yZcti++23X+yAAw6I3X///bHvv/8+Vii2b98eeP9XX30V+LqNGzf+6rZhwwY7KeFbb70Vv6/Q6Tvcd999sU6dOoU+T9vAhRdeGGvfvn2sfv369qb/6z49lo3Fixfbba0QjB8/PnbJJZfEHnvsMfv3ddddF6tcubJd/h49esT+85//5H0ZNJlmKv/6179iZdncuXNj27ZtC3z8hx9+iD3yyCMZvffy5cvtxKLaRpPxjm2JN//9O+20U6ws+PTTT2NHHnlkXj9D27N+j2ysWbMm5XMy/YxcHB927NgRe+GFF2K/+93vnC2DrFixIvbHP/4x5kpBBSPdunWLnXHGGbElS5bErrrqKruD7r///rEpU6ak/V7ZnsA++OADe/D/8MMP7d/694ILLrA/5qxZs1KeZE899dRY1apV7ezFf/nLX2K//PJL/PHVq1eHblzJDlb+A5b3bzbS2cAVACpQTLbeMjlwv/rqq7E//OEPserVq8caNGgQu+iiiwKfq51YJ9zOnTvb2Z4VvOim/3ft2jVWpUqV2EsvvRTLVK529C1btsTmzJmT9uuaNWsW+/jjj1M+79Zbb41Vq1bNBh21a9e226K26ZEjR8Zuv/32WOPGje19+T5YHXjggbH169eHBiIKmkvjBLhq1arY1KlTY2PHjrU3/V/3paL959BDD419++23SR9PtX8m2rp1qz1W/OY3v7GBhN5bv0nQ9pbstmjRoti1115rf+M999wzrROxjke6WPGW/a9//WtsxIgRsffffz/y++Rr30j1e3rHMl1waluO8vsl0voKOkfo2PXnP/85cJu85557Qm/XXHNNxuvg888/j914441236xSpUqsV69eTo9Rri+8CioY0UHWO+FpI9KK0wEmXdmewF588UX7ei2PAgr9rQ1eJ4KjjjrKHnDCApJLL700HkQ99NBDsb333ttuiN7VmA4Y2gmDNGrUyD5fJ+3Zs2fb27///W/7uQ8//HD8vmw3zLBl8F/pafm9g8YRRxxR4iAe9cD99ddf2xPqvvvuG9tjjz3sayZPnmyvGsK0bdvWBnNB9Ju2adMm8PEOHTqE3lq2bFkqO3rQwU6/6eDBg+N/B2nevHls0qRJ9v/vvPOO/awnn3yyxDa/11575fU7SPfu3e1+pRNwoscffzy28847B56Ic7UMCvzOOussu+70eQr4ddP/dZ8C3WTL59G2rG2mYcOGsTfffPNXj0fdpufPnx/r379/rEaNGrHWrVvbz87kCnzmzJm2dXC33Xaz2/OmTZsivU7HhF122cV+HwWmWnc68enE3qJFC3ucmzFjRuDr83kijvp7atlfeeWV2GWXXRarU6eODRp++9vfxp577rnAluVEd955pw3ifv/738e+++67+P36LXS80fp4/fXXAz9f20HTpk2T3vRYOuvgxx9/tC2XCsD0XfTau+66K7Qle/fddw+9afuKsgzTpk0LvY0ePTrl+/z000+2ZU/r7eCDD4794x//yCpQ9yuoCqwqM68S9HXr1rV/77bbbmbx4sVm3333Tet92rVrZ/r06WOGDh2a9PGbb77ZPP300+b9999P+rhK3Kuf8NZbb7Vz7Vx00UXmwgsvNLfddpt9fPDgwWbhwoU2ryWZvffe2zzyyCOme/fu9m/leWjeHs1M/Oyzz5oNGzbY6ZaD+pW/++47079/f7Nx40bz6KOP2rmApFKlSua9994zrVq1SrkOTj755NDH9d6zZ88OXAbPSSedZHN2JkyYYJf78ssvNx988IF97V577WVnaA77Lk899ZT5xz/+Yfs8e/bsaf7whz/Yf3fZZZdI36VatWp2G2jRokXSx5cvX26nLPjhhx+SPl61alXz+9//3jRr1izp46tWrTIPPfRQyvWQir5Lx44dA99H27Z+x513LjlDw1dffWXXn37bChUqmM8//zzp61WO+dNPP7XTeXt/a/v11ss333xjv6NySIJo2wujz77yyitD14XyU7Rd165d2zz//PN2uWXKlCn2t9U+d+211wa+/m9/+1voMuh7KEk9bBkGDBhgt6d7773X9OjRw840LnqNJu3885//bI444gj7uyaj53/55Zd2WR977DFz3333xefeklTbtObhGj9+vN2HzjjjDPu9dcxJZ/+Ud999166r1157zX4nTcHhHfuiOPzww+3nKo9u7Nixdh6xvn37mr///e/28auvvtrMmzfPvPHGG4HbZIMGDewEqcloW9LxOOy3yPb39B/zdZx55pln7Lp95ZVX7BQk5557rv1tmjdvHvo5OiZpTjV9npZJ61S/q47bf/3rX+1xJBntM3r8tNNOS/q4jj2aPDbV8UHnAx3n/vWvf9llPfvss+3UKo0bN065Teyyyy52Odu0aZP0cR0jlC+Yahm0LnUMCTvl6/Gw99G5UdvSVVddZY/32pb0PR544IH4vqFtRhPopi1WQBSlKtp/77337E1R//PPPx//27ulotaMjz76KPBxPabnBFEk+sknn9j/KzrXFde7774bf1zdSPXq1Qt8vaJ0NdH56WqnS5cutmVFj0WJLtWao8jcuyLWckTNkdBze/bsGTv33HOT3nT1EWUZdMXpb+5VS4a6A3QV/tlnn6WMlHW1eP311//qai/qd1HLxahRowIf12O6CgyiK06txyBqHo+yHrK9ejn//PNtN6G6/zJZD9o3/H3ju+66q13/6Vyx+Lv5gm5R1sXatWvt73LKKafY7UEtgLoKvO222yJ9j2yvRGvVqhV74403Ah/XVbCeE2VdjhkzxraCqjXTuxKPuk37u17T+S3VdXHaaafZ91G3tP93TIe2Ob2X/Pzzz/bztT171P2nHLwgWt9qzcpm38j290zcrj3KqVMrkVpl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7xtuuMHMmTPHvP766/bvKVOm2JLxH3zwgeMlRbZoGQEAlEnr16839erVi/+tQKRnz57xvw8++GCzcuVKR0uHXCIYAQCUSQpEvJEyP/30k3n33XdN586d449raG+lSpUcLiFyhWAEAFAmnXDCCTY35LXXXjODBw821atXN4cffnj88ffff9/su+++TpcRuUHRMwBAmTRs2DBz8sknm27dutnCZ4888oipXLly/PHx48ebY4891ukyIjdIYAUAlGkbN260wYhm8fX77rvv7P3+AAWFiWAEAAA4Rc4IAABwimAEAAA4RTACAACcIhgBAABOEYwAAACnCEYAAIBTBCMAAMApghEAWdMcIWeddZbZZZdd7Eyro0ePNt27dzeXX365fXzbtm3mqquuMo0aNbLPOfTQQ83s2bPjr58wYYKpVauWmTFjhjnggANsIavjjz/erFq1qsTnjBs3zj5etWpV07JlS3Pffffx6wHlAMEIgKwNGjTIvPHGG+bZZ581M2fOtHOJaFIzzyWXXGLmz59vJk+ebOcTOfXUU22w8cknn8Sf8/3335s777zTPProo2bu3LlmxYoVNoDx/POf/zQ33XSTue2228yHH35ohg8fbv7yl7/YEuEAClwMALKwadOmWKVKlWJTpkyJ37dhw4ZY9erVY5dddlnsq6++iu20006xb775psTrjj766NjgwYPt/x9++OGYDkeffvpp/PExY8bE6tWrF/973333jU2aNKnEewwbNizWpUsXfj+gwDFRHoCsfP755+bnn382hxxySPy+mjVrmhYtWtj/L1myxGzfvt3sv//+JV6nrps99tgj/rdmZPXPwKrunrVr19r/b9261Xz22Wemf//+ZuDAgfHn/PLLL/azABQ2ghEAebVlyxY7wdnChQt/NdGZckM8lSpVKvFYhQoV1HIbfw956KGHbL6JX+J7Aig8BCMAsrLPPvvYQOKdd94xe+21V3yW1Y8//tgcccQRpkOHDrZlRK0chx9+eEafUa9ePdOwYUPbCqNEWQDlC8EIgKzstttu5pxzzjFXX321qV27tqlbt64ZMmSIqVixom3dUPeMAoh+/fqZUaNG2eBk3bp1ZtasWaZt27amV69ekT7nlltuMZdeeqntllHyq7p5FixYYNavX28TaAEULkbTAMjaXXfdZbp06WJOPPFE06NHD3PYYYfFh+DKww8/bIORK6+80uaS9O3bt0RLShQDBgywQ3v1Xm3atDHdunWzQ4KbNWvGLwgUuArKYnW9EADKFyWcqqaIWkKUdAoAYeimAZC1RYsWmY8++siOqFG+yNChQ+39ffr0Ye0CSIlgBEBOqGDZ8uXLTeXKlU2nTp1s4bM6deqwdgGkRDcNAABwigRWAADgFMEIAABwimAEAAA4RTACAACcIhgBAABOEYwAAACnCEYAAIBTBCMAAMC49H/ILzEpINxoXwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -2929,7 +2933,7 @@ "outputs": [ { "data": { - "image/png": "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Nm3M77//nqPBfeGFFxrXbN261T7fTZs2NXXq1LHHeu2115oo+Pbbb03Lli1NXFm7dq2ZMmWKXR+w8TPvuWTu3Lnm77//Tvl5VIYgayPmkDiB06p27dqmWbNmdm3QvHlz89NPP2V9zlzSvXv30L8XaxPWjGeeeWao+8UI+/rrr00cM06jutY8N8cdd5wpXbq03RirGcOZKzC2WZe/9957ad8vtsYnn3ySdLvhhhtsv+r99tvPhMGff/5pxyzOfa1atezxYoesXr3ayf4GDBhgTj755Dw5ytMKfbrF/9G8eXPv3HPP9RYvXuxdf/31XqFChbxDDz3UmzRpkvPTdMQRR3i33nprys8HDhzo1atXz8m+e/funXWcjz32mFetWjXv1FNP9f766y/7+dq1a+25cMG0adO8YsWKeccee6w9xkceecRu/Hz88cd7xYsX99544w0n+96xY4c9To6tQYMG3jnnnOOdffbZ9lrwXocOHTxXLFu2zJ5n9lO4cGGvWbNm3po1a7I+55zzfrqZPn26Pd/77befV6JECfu6bNmyXqtWrbyWLVt6e+yxhzdz5kwvCj777DMnxwzvvvuut9dee9nzXaFCBbuvypUre4cccohXq1Yte5+9+eabXtjwPVw9W8l45513vK5du3p77rmnd+CBB3o9e/Z0sp+///7bu+GGG7waNWp4Rx11lPf4449n+9zV/R3lfdaiRQs7jm3ZsmWnz55//nmvSJEi3j333OO54v333/cuueQSr1SpUl7dunXtszxnzhwvSlw+07nxzTffeCeeeKKTv/3HH394559/vj3HXNdy5crZjZ95j2cs2X2QDhgvjjnmmGzzRX54tlxd63333TfHjfvd1fF27NjRrhF++eUX7+uvv7Y/H3TQQd4PP/wQyblesWKFN2DAADt3MWfxfVxw//33J924t2+++eas165Yt26dN3XqVDsnb9++PWtOGTVqlFe+fHlv//33j821Zs3J+vPBBx+04xX7aNy4sXfVVVd5q1at8sLkrbfe8o488khvn332sWvwTZs2Od3fRx995F122WX2GW7YsKE3YsQIe48tXbrU6X5//PFHr127dnb8GD9+vBcWMroTwBDxL/bWrVvtzT958uRQLgYG0FdffZXycz7jd1xQtWpVa5T4MOgcffTRXps2bbxt27Y5nViidDY88cQTdnDBEEkE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fuqpp4aini6EEEIIIYQQ6UZGt8gTCJm56pP95ptvmiVLluxkWM+dO9dGuFFWf/DBB3WlhBBCCCGEEAUOGd0iT7z11ltWUM0F9OAmvfztt9+27cFg3rx5pl27dua8884zDz/8sK6SEEIIIYQQokAi9XJhefXVV5OeiY0bN9q08v/97392c0WNGjXMG2+8Yeu72ecrr7xizj33XDNmzBhdISGEEEIIIUSBRUJqIqtuOxmoiteqVctce+215pxzznFytjZt2pT18/z5802nTp1Mx44dzdixY7P18C5VqpSulhBCCCGEEKJAIaNb5AuDP2hce55n//Xf4zU///vvv5F9RyGEEEIIIYTYFZReLizvv/++VRFHuMxn3LhxZuDAgWbLli028oyYWfHixdN+xt59911dBSGEEEIIIUQskdEtLLfffrs58cQTs4zuxYsXm0suucQqiteuXdsMHz7cCp4NGjQorWeMtPU77rjDqqPTHuz44483RYrothRCCCGEEELEA6WXC8uBBx5opk6daho3bmxf33LLLWb27NlWRRwmTZpko95ffPFFWs9Y0aJFzerVq0358uXNHnvsYX766SdTrlw5XRUhhBBCCCFELFBIUVh+++03a/j6YHC3bds26/VRRx1lVq1alfazVb16dfPAAw+YNm3a2Npt0tz33XffpL/brFkzXS0hhBBCCCFEgUKRbmGpVq2aGT9+vDVs//77b1OmTBkb+T7ppJOy0s2bN29uNmzYkNYzNnnyZHPFFVeYdevWWbE0X0RtpxtVQmpCCCGEEEKIAkjyPlEi42jXrp256aabzNy5c83NN99s9txzT9O0adOszxctWmR7aacbBNrWrl1r24ZhcC9btsxG3RO3dBv7QgghhBBCCBEGSi8XFsTMOnfubKPZe++9t3n66adNsWLFss7OE088YVPAXcE+Z82aZQ466CAJqQkhhBBCCCFig9LLRTY2btxoDWBEzYIQaeb9oCHuqk930hu1UCGzfft2XS0hhBBCCCFEgUJGt4icKVOmpPwMYTWE1nbs2GG2bdsW6vcSQgghhBBCiN1FRrfIl1DbTY05Ym7nn3++GTx4sBV7E0IIIYQQQoiChITURL5izZo1pkePHqZevXo2nfyzzz6z9eUyuIUQQgghhBAFERndIt/Ukvfr18/UrFnTLF261MycOdNGuevWrRv1VxNCCCGEEEKIXUbq5SJy7rnnHnP33XebChUqmOeee8506NAh6q8khBBCCCGEEGlBNd0iclAvL1mypGnVqtVOqulBXn755VC/lxBCCCGEEELsLop0i8i58MILc20ZJoQQQgghhBAFEUW6hRBCCCGEEEIIR0hITQghhBBCCCGEcISMbiGEEEIIIYQQwhEyuoUQQgghhBBCCEfI6BZCCCGEEEIIIRwho1sIIYQQQgghhHCEjG4hhBAihqxdu9b06dPH1KxZ05QoUcKUL1/eNGnSxIwePdps3bo16q8nhBBCZAzq0y2EEELEjBUrVlgDu0yZMmbIkCGmXr16pnjx4mbx4sXm0UcfNZUqVTKnn3561F9TCCGEyAgU6RZCCCFiRs+ePU2RIkXMwoULzVlnnWVq165tDj74YNOhQwfz+uuvm/bt29vf+/33382ll15qypYta0qVKmVatmxpPv/886y/M2jQINOgQQMzfvx4U716dVO6dGlzzjnnmM2bN2f9zo4dO8zQoUPNQQcdZEqWLGnq169vXnzxxUiOWwghhMiPyOgWQgghYsT69evNjBkzzFVXXWX22muvpL9TqFAh+2+XLl3MunXrzPTp083HH39sGjVqZE466SSzYcOGrN/99ttvzeTJk81rr71mt9mzZ5thw4ZlfY7BPW7cODNmzBizdOlS07dvX9O1a1f7e0IIIYRQerkQQggRK7755hvjeZ6pVatWtvcPOOAAs23bNvszBjnR7o8++sga3aSew4gRI6yBTaT6sssuy4pkP/XUU2afffaxry+44AIzc+ZMc9ddd5m//vrLpq+//fbb5rjjjrOfE1GfN2+eGTt2rGnevHnIRy+EEELkP1TTLYQQQmQAGNgY0Oeff741lkkj/+OPP8z++++f7ff+/PNPG932Ia3cN7jhwAMPtIa6b+Ajyta6detsf+Pvv/82DRs2dH5MQgghREFARrcQQggRI1ArJ3182bJl2d4nAg3UXQMGNwb0rFmzdvobCLD5FC1aNNtn/G2Md/9vAHXiiLMF8aPnQgghRKYjo1sIIYSIEUSuiTw/9NBDplevXinruqnfpq0YgmtEs3eFOnXqWON65cqVSiUXQgghUiCjWwghhIgZjzzyiG0Z1rhxY6tAfsQRR5jChQubBQsWmK+++soceeSRplWrVrYOu2PHjuaee+4xhx56qFmzZo2NWnfq1Mn+39wg7fz666+34mlEv0844QSzceNGM3/+fKuG3q1bt1COVwghhMjPyOgWQgghYkaNGjXMp59+akXObr75ZrN69WobkSYyjZFMSzHSxKdNm2ZuueUW0717d/PLL7+YChUqmGbNmpny5cvneV933HGHbTmGijn9wUlNJ4rev39/p8cohBBCFBQKeUicCiGEEEIIIYQQIu2oT7cQQgghhBBCCOEIGd1CCCGEEEIIIYQjZHQLIYQQQgghhBCOkNEthBBCCCGEEEI4Qka3EEIIIYQQQgjhCBndQgghhBBCCCGEI2R0CyGEEEIIIYQQjpDRLYQQQgghhBBCOEJGtxBCCCGEEEII4QgZ3UIIIYQQQgghhCNkdAshhBBCCCGEEI6Q0S2EEEIIIYQQQhg3/D/i59hu5CvYXQAAAABJRU5ErkJggg==", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnQeYG8XZx19J18937r3bgCsGbDqYEjqYFkiowZiSEFroYDqEDgl8dEhoCb0XQwATmukE0wwuuPdeztfvpP2ed6TZW+mksw5r3tFp/7/nkXUnyTfa3dmZ+c/bAo7jOAQAAAAAAAAAAICME8z8nwQAAAAAAAAAAABENwAAAAAAAAAAYBBYugEAAAAAAAAAAENAdAMAAAAAAAAAAIaA6AYAAAAAAAAAAAwB0Q0AAAAAAAAAABgCohsAAAAAAAAAADAERDcAAAAAAAAAAGAIiG4AAAAAAAAAAMAQEN0AAACMEwgE6Nprr835M71ixQo6+uijqXPnzuqY77rrrlb/jZNPPpnatWtHbR2b13yvvfZSDwAAACAbgOgGAADQah5//HElqryPbt260d57703/+c9/fHtGzz//fHrnnXdo4sSJ9O9//5sOPPDApJ+rrq5WgvTDDz8kW7z11lu+2AgBAAAAbJNn+wsAAABou1x//fU0cOBAchxHWXlZjB988MH0xhtv0Lhx49zP1dTUUF5e7k8577//Ph1++OF00UUXtfg5Ft3XXXed+tmWRZZF93333WdMePvlmgMAAACbArMhAACAX81BBx1E22+/vfv7qaeeSt27d6dnnnkmTnQXFRX54iyvXLmSOnToQLlGY2MjRSIRKigoSPv/+OWaZxLejCkpKbH9NQAAAGQYuJcDAADIGCw4i4uLm1k4E+N7FyxYQGeeeSYNGTJEfZ5joH/3u9/R/Pnz4/5fQ0ODsghvueWWSsTx53bffXeaPHly3OdmzJihYqk7deqkPscbAa+//vqv+lvJmDt3rvp+/PdZFO2888705ptvNnO3Z4s/W4+1y30y+Bi7du2qfubvoz+baHFesmQJHXHEESq+mz/P1vNwOBz3GRbCHDc+YsQIdUy84fGnP/2J1q1bt8m4cf6ejDdEQH8//vmOO+5Qf3vw4MFUWFhIP//8M9XX19PVV19NY8aMofbt21NpaSmNHTuWPvjgg2ZtJB4T/8yvzZ49W7XPfYX/xoQJE5TYTOTJJ59U7XD/4PN+7LHH0qJFi5p97uGHH1bfkT+344470pQpU1o89sTvePbZZ9Orr75KI0eOVMfJ5/Ltt99u9lm+Hqeccoo6x/pzjz76aNxndD9I7MccRsCve8MJ2MOB2/zmm29ojz32UP3q8ssvdzdv9AYWX9dtttmGnnjiibi/6b1O+hzw99phhx3o66+/jvvs8uXL1Xnu06eP+kzPnj2VR0bi9wQAAGAGWLoBAAD8ajZs2ECrV69WYpOFwj333EOVlZV04okntvj/WBR89tlnSkixEODF/wMPPKCECIs7be1joXbzzTfTaaedpgRVRUUF/e9//6OpU6fSfvvtpz7z008/0W677Ua9e/emyy67TAnB559/XgnWl156iY488si0/1Yy2G1+1113VcLw3HPPVWKdBdBhhx1GL774ovr7LJo4hvsPf/iD+lsnnXRSyr/HApqP9c9//rP6v7/97W/V66NGjXI/w+L6gAMOoJ122kmJqvfee4/+9re/KWHF/0/DApuFHgsq/m7z5s2je++9l7799lv69NNPKT8/P+l34P+3dOlSteHA3zsZjz32GNXW1tIf//hHJdRY+PI5++c//0nHHXccnX766bRx40Z65JFH1Hf96quvaNttt6VN8fvf/16FJPC14HPPf4/zAdx6663uZ2688Ua66qqr1Gf5eq1atUr1LT7PfGzam4Db5mPh63PeeeepzRG+Lvxd+/btS+nwySef0Msvv6w2gcrKyujuu++mo446ihYuXKiute4DvNGiRTpfQ85dwMKYzwm3/WtYs2aN8hbh+4DvGRbZ7JbP9wFvTnBbfK5eeOEFtVGxfv16+stf/hL3N55++ml1Hfg88Pe77bbbVJ/ic6GvPx8P3yfnnHMODRgwQN2rfO35GPl3AAAAhnEAAACAVvLYY485PIUkPgoLC53HH3+82ef5vWuuucb9vbq6utlnPv/8c/W5f/3rX+5r22yzjXPIIYe0+F322WcfZ+utt3Zqa2vd1yKRiLPrrrs6W265Zav+VjLOO+889b2mTJnivrZx40Zn4MCBzoABA5xwOBx3nGedddYm/+aqVauanRPN+PHj1XvXX3993OvbbbedM2bMGPd3/j78uaeeeiruc2+//XbS1xPh75lsGTBv3jz1enl5ubNy5cq49xobG526urq419atW+d0797d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5+VAIJB0vtSv8zOvjUDb55xzzqHf//73NHbsWNtfJWuYM2cOnX766fT++++TX8D6JPPA0p0Ai60tt9ySDjvsMDrooINo1113pZ9//plGjBhBDz30EF177bW0aNEiylWmT59Ojz32GM2YMUP9zs9//vOf6ZRTTjE22LD45QG+tLSUunfvTldffXWcCOFNkIEDB2a83Y4dOzZ7dOrUSS0cdtllF+rQoYN6zdZgx5s9pqipqVF9nft2Mm+Of/3rXyQN94MHHniAtt9+eyN/n4/1zDPPpO2224569uypHvwzv5bsPPgBGzvZgwYNol9++cVoGzyG8cLxqaeeUr9PnDiRysrKqH379rTffvvRmjVrKNfYf//9af369S0K7pNOOolykeXLl9Nrr72m5mh+8M/8mkmmTJmiNnFSITWOVldXq/7OAmn48OHqfr7gggsy2sa3335LU6dOTfq4+OKLVV1bnjtNs3LlSrUO2bBhg/p9xYoVdNttt9Ett9xCP/74I9kSY7/5zW8ol7jvvvtor732oq222opuvfVW4/dSsuuczv0nSWVlJX300UdkA97c+s9//kNHH300+YlFixYp7ZFTcJ1u0MSee+7pHHfccc6PP/7oXHTRRU4gEHC22mor54UXXhA7TT/99JPz5z//2dl2222dHj16qAf/zK/xe6b4z3/+4xQUFDidOnVyioqK1O9du3Z19t13X+c3v/mNEwqFnP/+978Zb/fcc891z/E//vEPp3///s4hhxzi1NXVqfeXL1+urkOm6d27t2rn/fffdz788EP1+OCDD9RxPvbYY+5rNvjuu++MHDMzc+ZMdY757weDQWePPfZwli5d6r7P55tfl4LP/4knnuiUlJQ4PXv2dM4888yMt/HWW2+pvr3zzjs711xzjXP//ferB/+86667OoWFhc7bb7+d8Xa32267Fh9Dhw4VPdfJ+pmp9v/v//4v6YPvr4kTJ7q/Z5obbrjBKS4uVuMWj2VnnHGGGkNvueUW57bbbnP69OmjXrPBwoULnQkTJhj523vttZfq31VVVc3ee+6555y8vDx1/DaYPXu2s/fee2f871ZWVjonnHCC6lN8fN26dVMP/plf43El2fnIBDx+7rTTTnFjpxfT4+jnn3/unHrqqU55ebkzcuRIdbwff/yxI8XkyZOdMWPGOGVlZWocraioMNoez82lpaXqvPP9zGMX38tbbrmlM2TIEDWGv/POO04ujaG27is+x++9957zl7/8xenSpYuTn5/vHHbYYc4bb7zhhMNhxzS87ky15q6urnbOOecc9Z0k5iv9uOSSS8Sv89y5c50rr7xS9XPu37xezSQdO3Zs8cFjS66uT+rr652LL77YGTx4sLPDDjs4jzzyiMj4DffyBDp37qx20HjHmK2B7Ir48ssv0+GHHy6yCcK7WUcccYRyOT3ggAOU5Vfv6E6ePJm++eYbtYvP72Uaturzju0NN9ygrCJsAWQr94033uhai7j9d999N6Pt9u/fn5544gm1s8qw6/4hhxyiLM2vv/66st6w22SmXXDXrl1Lp556qto1Z3e83r17q9fz8/OVpZn7gCl++9vftvg+f6cPP/zQiNvxkUceqcIlHn/8cXVuzzvvPGXp5fbYhZ/7monz7WXJkiWqfbbQ8HdYt24dPf3008rjIZkb4+ayzTbbqHv4+uuvT/o+e7Dwff7DDz9ktN2ioiLlzpvKU4NdQP/xj39Ycy836T7GLql8T+Xl5cW9vmDBAtW/+D7jaz137tyMtsueSnydjzvuOPrf//5HO+20Ez3//PN01FFHuWPsGWecob5HLp1vtsTwGMoWxzfffFOdX+aFF16gE088UZ2TSy+9lGxg6rhPO+00Zdm95557aN9993W9g7id//73v8rbYY899lD3mIn+PXLkSOU1wWMH9zMvpsbRv/3tb/Too4+qOYL7OF9bHt8k5i2Grdvcj3idxOefPdO6detGpmFLPh8nW7UffPBBuuuuu9Ra6d5771Xvs8X9s88+o08//TSj7d59992bnMs4z4+NMdzUfcV9m63bfF15rfDKK6+oPvfee++pNenJJ59MEyZMoC222IJMwH38qquuUnM2h3Vqj0Puc9wufz9eO+y2224Za5P/Jnu/cVhpMtirhc+J6etcV1dHL774Ij3yyCPKG5Hb4/7Fa9VMhzqydymv8bfeeuuk7/McyTmOTB3z66+/3uL7vDa48MILjbTPaz4eRy666CK1BuVx5JhjjlGeUnr85v7A4a2ZBKK7hcGGYZfE7777jgYPHkwS2BIHDLtesqjmgZQ7GruMffXVV8oFl5k2bZpa2GTa1aikpIR++umnOGGyceNGtbFQXFysYtT4O5m68dmlmTcaeGDjRYzE4oXbYDdXvamSbENg0qRJ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", "text/plain": [ "
" ] @@ -3011,68 +3015,68 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/pablorodriguezmier/Documents/work/projects/corneto/docs/tutorials/ml/.pixi/envs/default/lib/python3.10/site-packages/cvxpy/problems/problem.py:167: UserWarning: Objective contains too many subexpressions. Consider vectorizing your CVXPY code to speed up compilation.\n", + "/docs/tutorials/ml/.pixi/envs/default/lib/python3.11/site-packages/cvxpy/problems/problem.py:167: UserWarning: Objective contains too many subexpressions. Consider vectorizing your CVXPY code to speed up compilation.\n", " warnings.warn(\"Objective contains too many subexpressions. \"\n", - "(CVXPY) Feb 04 03:37:37 PM: Your problem has 127931 variables, 332945 constraints, and 0 parameters.\n" + "(CVXPY) Jul 22 04:26:24 PM: Your problem has 127931 variables, 332945 constraints, and 0 parameters.\n" ] }, { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "===============================================================================\n", - " CVXPY \n", - " v1.7.5 \n", - "===============================================================================\n" + "(CVXPY) Jul 22 04:26:24 PM: It is compliant with the following grammars: DCP, DQCP\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:37:37 PM: It is compliant with the following grammars: DCP, DQCP\n" + "(CVXPY) Jul 22 04:26:24 PM: (If you need to solve this problem multiple times, but with different data, consider using parameters.)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:37:37 PM: (If you need to solve this problem multiple times, but with different data, consider using parameters.)\n" + "(CVXPY) Jul 22 04:26:24 PM: CVXPY will first compile your problem; then, it will invoke a numerical solver to obtain a solution.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:37:37 PM: CVXPY will first compile your problem; then, it will invoke a numerical solver to obtain a solution.\n" + "(CVXPY) Jul 22 04:26:24 PM: Your problem is compiled with the CPP canonicalization backend.\n" ] }, { - "name": "stderr", + "name": "stdout", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:37:37 PM: Your problem is compiled with the CPP canonicalization backend.\n" + "===============================================================================\n", + " CVXPY \n", + " v1.7.5 \n", + "===============================================================================\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:37:38 PM: Compiling problem (target solver=HIGHS).\n" + "(CVXPY) Jul 22 04:26:24 PM: Compiling problem (target solver=HIGHS).\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:37:38 PM: Reduction chain: Dcp2Cone -> CvxAttr2Constr -> ConeMatrixStuffing -> HIGHS\n" + "(CVXPY) Jul 22 04:26:24 PM: Reduction chain: Dcp2Cone -> CvxAttr2Constr -> ConeMatrixStuffing -> HIGHS\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:37:38 PM: Applying reduction Dcp2Cone\n" + "(CVXPY) Jul 22 04:26:24 PM: Applying reduction Dcp2Cone\n" ] }, { @@ -3088,35 +3092,35 @@ "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:37:38 PM: Applying reduction CvxAttr2Constr\n" + "(CVXPY) Jul 22 04:26:25 PM: Applying reduction CvxAttr2Constr\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:37:38 PM: Applying reduction ConeMatrixStuffing\n" + "(CVXPY) Jul 22 04:26:25 PM: Applying reduction ConeMatrixStuffing\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:38:54 PM: Applying reduction HIGHS\n" + "(CVXPY) Jul 22 04:27:49 PM: Applying reduction HIGHS\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:38:54 PM: Finished problem compilation (took 7.700e+01 seconds).\n" + "(CVXPY) Jul 22 04:27:49 PM: Finished problem compilation (took 8.490e+01 seconds).\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:38:54 PM: Invoking solver HIGHS to obtain a solution.\n" + "(CVXPY) Jul 22 04:27:49 PM: Invoking solver HIGHS to obtain a solution.\n" ] }, { @@ -3140,22 +3144,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "61423 rows, 50344 cols, 162081 nonzeros 0s\n", - "41020 rows, 42186 cols, 129115 nonzeros 0s\n" + "62024 rows, 50344 cols, 163279 nonzeros 0s\n", + "41001 rows, 42167 cols, 129201 nonzeros 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "39333 rows, 38152 cols, 131120 nonzeros 0s\n", - "Presolve reductions: rows 39333(-293612); columns 38152(-89779); nonzeros 131120(-497170) \n", + "39345 rows, 38161 cols, 131128 nonzeros 0s\n", + "Presolve reductions: rows 39345(-293600); columns 38161(-89770); nonzeros 131128(-497162) \n", "Objective function is integral with scale 1\n", "\n", "Solving MIP model with:\n", - " 39333 rows\n", - " 38152 cols (18820 binary, 0 integer, 0 implied int., 19332 continuous, 0 domain fixed)\n", - " 131120 nonzeros\n", + " 39345 rows\n", + " 38161 cols (18824 binary, 0 integer, 0 implied int., 19337 continuous, 0 domain fixed)\n", + " 131128 nonzeros\n", "\n", "Src: B => Branching; C => Central rounding; F => Feasibility pump; H => Heuristic;\n", " I => Shifting; J => Feasibility jump; L => Sub-MIP; P => Empty MIP; R => Randomized rounding;\n", @@ -3165,154 +3169,154 @@ " Nodes | B&B Tree | Objective Bounds | Dynamic Constraints | Work \n", "Src Proc. InQueue | Leaves Expl. | BestBound BestSol Gap | Cuts InLp Confl. | LpIters Time\n", "\n", - " 0 0 0 0.00% 19719 inf inf 0 0 0 0 0.9s\n" + " 0 0 0 0.00% 19712 inf inf 0 0 0 0 0.9s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 0 0 0 0.00% 19719 inf inf 0 0 5 16346 1.8s\n" + " 0 0 0 0.00% 19712 inf inf 0 0 2 16183 1.8s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 0 0 0 0.00% 24886.380366 inf inf 6492 5461 58 75101 22.7s\n" + " L 0 0 0 0.00% 24925.269981 25090 0.66% 7107 5683 52 37108 15.7s\n", + "\n", + "0.2% inactive integer columns, restarting\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " L 0 0 0 0.00% 24924.373044 25087 0.65% 8224 5729 113 77722 36.5s\n", + "Model after restart has 39266 rows, 38118 cols (18787 bin., 0 int., 1 impl., 19330 cont., 0 dom.fix.), and 130936 nonzeros\n", "\n", - "0.2% inactive integer columns, restarting\n" + " 0 0 0 0.00% 24925.269981 25090 0.66% 5526 0 0 89730 16.1s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Model after restart has 39257 rows, 38106 cols (18777 bin., 0 int., 0 impl., 19329 cont., 0 dom.fix.), and 130968 nonzeros\n", - "\n", - " 0 0 0 0.00% 24924.373044 25087 0.65% 5499 0 0 142175 36.9s\n" + " 0 0 0 0.00% 24925.269986 25090 0.66% 5526 5430 6 161347 31.1s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 0 0 0 0.00% 24924.373059 25087 0.65% 5499 5433 4 254650 69.2s\n" + "\n", + "Symmetry detection completed in 6.0s\n", + "Found 2479 generator(s) and 1 full orbitope(s) acting on 2 columns\n", + "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "Symmetry detection completed in 4.6s\n", - "Found 2475 generator(s)\n", - "\n" + " 18 0 1 0.00% 24927.270705 25090 0.65% 7860 5601 81 241495 62.4s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 48 0 1 0.00% 24927.248967 25087 0.64% 8027 5631 99 322948 100.7s\n" + " 112 109 2 0.00% 24999.05974 25090 0.36% 7895 5601 144 259108 74.4s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 192 188 1 0.00% 24996.054495 25087 0.36% 8054 5631 170 337853 113.6s\n" + " 132 108 3 0.00% 24999.05974 25090 0.36% 8073 5691 150 308729 101.8s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 232 187 2 0.00% 24996.054495 25087 0.36% 8482 5712 180 410758 151.7s\n" + " T 132 103 3 0.00% 24999.05974 25078 0.31% 8087 5691 187 308729 111.2s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 370 309 6 0.00% 24996.054495 25087 0.36% 8831 5745 211 429962 162.5s\n" + " T 221 182 4 0.00% 25002.04224 25075 0.29% 8278 5476 210 331347 120.2s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " T 401 239 7 0.00% 24996.054495 25079 0.33% 8831 5745 216 430098 166.5s\n" + " 346 260 6 0.00% 25004.03809 25075 0.28% 8309 5487 218 377035 137.6s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 503 359 9 0.00% 24996.054495 25079 0.33% 9205 5774 225 451338 176.4s\n" + " 487 415 10 0.01% 25008.0326 25075 0.27% 8389 5500 245 384729 144.7s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " T 503 311 9 0.00% 24996.054495 25073 0.31% 9205 5774 229 451338 178.6s\n" + " L 487 293 10 0.01% 25008.0326 25067 0.24% 8424 5513 245 384785 156.8s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " L 577 331 10 0.00% 24996.054495 25067 0.28% 9409 5474 231 453184 185.6s\n" + " 499 293 11 0.01% 25008.0326 25067 0.24% 8424 5513 246 435699 163.8s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 630 331 11 0.00% 24996.054495 25067 0.28% 9411 5474 239 479529 192.5s\n" + " 589 387 12 0.01% 25008.03426 25067 0.24% 8483 5530 262 465438 180.1s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 766 430 13 0.00% 24997.054475 25067 0.28% 9497 5488 261 501683 205.1s\n" + " 632 428 12 0.01% 25008.03426 25067 0.24% 8522 5463 269 491798 196.4s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 853 595 13 0.00% 24997.054485 25067 0.28% 9676 5515 283 529168 220.8s\n" + " 679 473 12 0.01% 25008.03426 25067 0.24% 8569 5478 274 524273 209.9s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 905 594 14 0.00% 24997.054485 25067 0.28% 10056 5493 293 561558 236.5s\n" + " 717 509 12 0.01% 25008.03426 25067 0.24% 8631 5490 284 554553 222.8s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " L 935 632 14 0.00% 24997.054485 25066 0.28% 10295 5510 299 563727 244.6s\n" + " 734 508 13 0.01% 25008.03426 25067 0.24% 8748 5496 286 612051 241.5s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 984 632 15 0.00% 24997.054485 25066 0.28% 10295 5510 308 589295 249.6s\n" + " 825 607 14 0.01% 25008.03426 25067 0.24% 8941 5485 305 644906 257.8s\n" ] }, { @@ -3323,48 +3327,70 @@ " Nodes | B&B Tree | Objective Bounds | Dynamic Constraints | Work \n", "Src Proc. InQueue | Leaves Expl. | BestBound BestSol Gap | Cuts InLp Confl. | LpIters Time\n", "\n", - " 1068 692 16 0.00% 24997.054485 25066 0.28% 10386 5524 323 649063 279.6s\n" + " 871 651 14 0.01% 25008.03426 25067 0.24% 9095 5498 312 649869 262.9s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 1139 776 17 0.00% 24997.054485 25066 0.28% 10392 5538 336 685024 299.3s\n" + " 914 691 14 0.01% 25008.03426 25067 0.24% 9160 5511 316 673435 274.9s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 1151 838 18 0.00% 25006.0518 25066 0.24% 10392 5538 341 687194 300.0s\n", + " 951 725 14 0.01% 25011.03409 25067 0.22% 9357 5524 321 690262 283.2s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 1032 800 14 0.01% 25017.03253 25067 0.20% 9294 5491 332 701864 290.0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 1140 900 14 0.01% 25024.0294 25067 0.17% 8954 5534 343 709309 295.3s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 1182 899 34 0.01% 25038.00958 25067 0.12% 8191 5514 372 718650 300.5s\n", + " 1182 899 34 0.01% 25038.00958 25067 0.12% 8191 5514 372 718650 300.5s\n", "\n", "Solving report\n", " Status Time limit reached\n", - " Primal bound 25066\n", - " Dual bound 25007\n", - " Gap 0.235% (tolerance: 0.01%)\n", - " P-D integral 1.06568195332\n", + " Primal bound 25067\n", + " Dual bound 25039\n", + " Gap 0.112% (tolerance: 0.01%)\n", + " P-D integral 0.974082103545\n", " Solution status feasible\n", - " 25066 (objective)\n", + " 25067 (objective)\n", " 0 (bound viol.)\n", - " 0 (int. viol.)\n", + " 1.31794575253e-11 (int. viol.)\n", " 0 (row viol.)\n", - " Timing 300.02\n", - " Max sub-MIP depth 10\n", - " Nodes 1151\n", + " Timing 300.49\n", + " Max sub-MIP depth 7\n", + " Nodes 1182\n", " Repair LPs 0\n", - " LP iterations 687194\n", - " 146288 (strong br.)\n", - " 95062 (separation)\n", - " 193529 (heuristics)\n" + " LP iterations 718650\n", + " 148429 (strong br.)\n", + " 53906 (separation)\n", + " 255356 (heuristics)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "/Users/pablorodriguezmier/Documents/work/projects/corneto/docs/tutorials/ml/.pixi/envs/default/lib/python3.10/site-packages/cvxpy/problems/problem.py:1539: UserWarning: Solution may be inaccurate. Try another solver, adjusting the solver settings, or solve with verbose=True for more information.\n", + "/docs/tutorials/ml/.pixi/envs/default/lib/python3.11/site-packages/cvxpy/problems/problem.py:1539: UserWarning: Solution may be inaccurate. Try another solver, adjusting the solver settings, or solve with verbose=True for more information.\n", " warnings.warn(\n" ] }, @@ -3372,28 +3398,28 @@ "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:43:55 PM: Problem status: user_limit\n" + "(CVXPY) Jul 22 04:32:50 PM: Problem status: user_limit\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:43:55 PM: Optimal value: 2.507e+04\n" + "(CVXPY) Jul 22 04:32:50 PM: Optimal value: 2.507e+04\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:43:55 PM: Compilation took 7.700e+01 seconds\n" + "(CVXPY) Jul 22 04:32:50 PM: Compilation took 8.490e+01 seconds\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "(CVXPY) Feb 04 03:43:55 PM: Solver (including time spent in interface) took 3.001e+02 seconds\n" + "(CVXPY) Jul 22 04:32:50 PM: Solver (including time spent in interface) took 3.006e+02 seconds\n" ] }, { @@ -3451,7 +3477,7 @@ { "data": { "text/plain": [ - "((12767, 38388), (12607, 25066))" + "((12767, 38388), (12608, 25067))" ] }, "execution_count": 37, @@ -3532,7 +3558,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " > N. parameters: 12754\n", + " > N. parameters: 12756\n", "Compiling...\n", "Fitting...\n" ] @@ -3541,7 +3567,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpflwx1756/pruned_weights_0.keras\n" + "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpsvm30spu/pruned_weights_0.keras\n" ] }, { @@ -3549,7 +3575,7 @@ "output_type": "stream", "text": [ "\r", - "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m5s\u001b[0m 539ms/step" + "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m5s\u001b[0m 510ms/step" ] }, { @@ -3557,15 +3583,15 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 10ms/step " + "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 9ms/step " ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 53ms/step" + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 51ms/step" ] }, { @@ -3573,14 +3599,14 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 53ms/step\n" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 51ms/step\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " > Fold 0 validation ROC-AUC=0.988\n", + " > Fold 0 validation ROC-AUC=0.986\n", "Building DAG NN model with CORNETO using Keras with JAX...\n", " > N. inputs: 12459\n", " > N. outputs: 1\n" @@ -3590,7 +3616,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " > N. parameters: 12754\n", + " > N. parameters: 12756\n", "Compiling...\n", "Fitting...\n" ] @@ -3599,7 +3625,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpflwx1756/pruned_weights_1.keras\n" + "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpsvm30spu/pruned_weights_1.keras\n" ] }, { @@ -3607,7 +3633,7 @@ "output_type": "stream", "text": [ "\r", - "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m5s\u001b[0m 525ms/step" + "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m5s\u001b[0m 530ms/step" ] }, { @@ -3615,15 +3641,15 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 10ms/step " + "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 9ms/step " ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 53ms/step" + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 54ms/step" ] }, { @@ -3631,14 +3657,14 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 53ms/step\n" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 54ms/step\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " > Fold 1 validation ROC-AUC=0.980\n", + " > Fold 1 validation ROC-AUC=0.977\n", "Building DAG NN model with CORNETO using Keras with JAX...\n", " > N. inputs: 12459\n", " > N. outputs: 1\n" @@ -3648,7 +3674,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " > N. parameters: 12754\n", + " > N. parameters: 12756\n", "Compiling...\n", "Fitting...\n" ] @@ -3657,7 +3683,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpflwx1756/pruned_weights_2.keras\n" + "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpsvm30spu/pruned_weights_2.keras\n" ] }, { @@ -3665,7 +3691,7 @@ "output_type": "stream", "text": [ "\r", - "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m5s\u001b[0m 544ms/step" + "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m5s\u001b[0m 516ms/step" ] }, { @@ -3673,7 +3699,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 11ms/step " + "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 10ms/step " ] }, { @@ -3681,7 +3707,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 53ms/step" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 54ms/step" ] }, { @@ -3689,14 +3715,14 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 53ms/step\n" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 54ms/step\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " > Fold 2 validation ROC-AUC=0.987\n", + " > Fold 2 validation ROC-AUC=0.972\n", "Building DAG NN model with CORNETO using Keras with JAX...\n", " > N. inputs: 12459\n", " > N. outputs: 1\n" @@ -3706,7 +3732,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " > N. parameters: 12754\n", + " > N. parameters: 12756\n", "Compiling...\n", "Fitting...\n" ] @@ -3715,7 +3741,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpflwx1756/pruned_weights_3.keras\n" + "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpsvm30spu/pruned_weights_3.keras\n" ] }, { @@ -3723,7 +3749,7 @@ "output_type": "stream", "text": [ "\r", - "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m5s\u001b[0m 513ms/step" + "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m5s\u001b[0m 529ms/step" ] }, { @@ -3731,15 +3757,15 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 11ms/step " + "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 9ms/step " ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 53ms/step" + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 55ms/step" ] }, { @@ -3747,14 +3773,14 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 53ms/step\n" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 55ms/step\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " > Fold 3 validation ROC-AUC=0.992\n", + " > Fold 3 validation ROC-AUC=0.993\n", "Building DAG NN model with CORNETO using Keras with JAX...\n", " > N. inputs: 12459\n", " > N. outputs: 1\n" @@ -3764,7 +3790,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " > N. parameters: 12754\n", + " > N. parameters: 12756\n", "Compiling...\n", "Fitting...\n" ] @@ -3773,7 +3799,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpflwx1756/pruned_weights_4.keras\n" + "Weights saved to /var/folders/b4/gwkwsdb93sv11rtztqbm3l040000gn/T/tmpsvm30spu/pruned_weights_4.keras\n" ] }, { @@ -3781,7 +3807,7 @@ "output_type": "stream", "text": [ "\r", - "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m5s\u001b[0m 526ms/step" + "\u001b[1m 1/11\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m4s\u001b[0m 494ms/step" ] }, { @@ -3789,15 +3815,15 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 10ms/step " + "\u001b[1m10/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━\u001b[0m \u001b[1m0s\u001b[0m 9ms/step " ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 54ms/step" + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 53ms/step" ] }, { @@ -3805,20 +3831,20 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 54ms/step\n" + "\u001b[1m11/11\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 53ms/step\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " > Fold 4 validation ROC-AUC=0.994\n", + " > Fold 4 validation ROC-AUC=0.993\n", "Validation metrics:\n", - " - accuracy: 0.963\n", - " - precision: 0.969\n", - " - recall: 0.954\n", - " - f1: 0.962\n", - " - roc_auc: 0.988\n" + " - accuracy: 0.954\n", + " - precision: 0.964\n", + " - recall: 0.943\n", + " - f1: 0.953\n", + " - roc_auc: 0.984\n" ] } ], @@ -3892,91 +3918,91 @@ " \n", " \n", " \n", - " 2\n", - " ZAP70\n", - " -2.833718\n", - " 2.833718\n", - " 8.029957\n", + " 4\n", + " NFYA\n", + " 3.065814\n", + " 3.065814\n", + " 9.399217\n", + " \n", + " \n", + " 0\n", + " NFYA\n", + " -2.624697\n", + " 2.624697\n", + " 6.889035\n", " \n", " \n", " 3\n", - " SUZ12.EZH2\n", - " -2.608386\n", - " 2.608386\n", - " 6.803678\n", + " NFYA\n", + " -2.572750\n", + " 2.572750\n", + " 6.619040\n", " \n", " \n", - " 4\n", + " 1\n", " PRKCD\n", - " -2.220839\n", - " 2.220839\n", - " 4.932124\n", + " -2.546224\n", + " 2.546224\n", + " 6.483256\n", " \n", " \n", " 3\n", - " TCR\n", - " 2.169856\n", - " 2.169856\n", - " 4.708274\n", - " \n", - " \n", - " 4\n", - " TCR\n", - " -2.168031\n", - " 2.168031\n", - " 4.700360\n", + " PRKCD\n", + " -2.433494\n", + " 2.433494\n", + " 5.921891\n", " \n", " \n", - " ZAP70\n", - " 2.140123\n", - " 2.140123\n", - " 4.580125\n", + " 1\n", + " NFYA\n", + " -2.403039\n", + " 2.403039\n", + " 5.774594\n", " \n", " \n", - " 3\n", - " ZAP70\n", - " 2.107303\n", - " 2.107303\n", - " 4.440725\n", + " 0\n", + " PRKCD\n", + " -2.151819\n", + " 2.151819\n", + " 4.630327\n", " \n", " \n", - " 2\n", - " NFYA\n", - " 2.093171\n", - " 2.093171\n", - " 4.381363\n", + " p38\n", + " -2.094165\n", + " 2.094165\n", + " 4.385529\n", " \n", " \n", - " 1\n", - " NFYA\n", - " 2.036027\n", - " 2.036027\n", - " 4.145407\n", + " 4\n", + " TCR\n", + " -1.995883\n", + " 1.995883\n", + " 3.983549\n", " \n", " \n", " 2\n", - " MAX\n", - " -2.015005\n", - " 2.015005\n", - " 4.060244\n", + " NFYA\n", + " -1.943627\n", + " 1.943627\n", + " 3.777687\n", " \n", " \n", "\n", "" ], "text/plain": [ - " bias abs_bias pow2_bias\n", - "fold gene \n", - "2 ZAP70 -2.833718 2.833718 8.029957\n", - "3 SUZ12.EZH2 -2.608386 2.608386 6.803678\n", - "4 PRKCD -2.220839 2.220839 4.932124\n", - "3 TCR 2.169856 2.169856 4.708274\n", - "4 TCR -2.168031 2.168031 4.700360\n", - " ZAP70 2.140123 2.140123 4.580125\n", - "3 ZAP70 2.107303 2.107303 4.440725\n", - "2 NFYA 2.093171 2.093171 4.381363\n", - "1 NFYA 2.036027 2.036027 4.145407\n", - "2 MAX -2.015005 2.015005 4.060244" + " bias abs_bias pow2_bias\n", + "fold gene \n", + "4 NFYA 3.065814 3.065814 9.399217\n", + "0 NFYA -2.624697 2.624697 6.889035\n", + "3 NFYA -2.572750 2.572750 6.619040\n", + "1 PRKCD -2.546224 2.546224 6.483256\n", + "3 PRKCD -2.433494 2.433494 5.921891\n", + "1 NFYA -2.403039 2.403039 5.774594\n", + "0 PRKCD -2.151819 2.151819 4.630327\n", + " p38 -2.094165 2.094165 4.385529\n", + "4 TCR -1.995883 1.995883 3.983549\n", + "2 NFYA -1.943627 1.943627 3.777687" ] }, "execution_count": 40, @@ -4014,18 +4040,18 @@ "data": { "text/plain": [ "gene\n", - "ZAP70 4.356112\n", - "TCR 3.455697\n", - "NFYA 3.271365\n", - "SUZ12.EZH2 2.938754\n", - "PRKCD 2.340390\n", - " ... \n", - "ZNF217 0.003361\n", - "MLL.SET.subcomplex 0.002986\n", - "REST 0.000634\n", - "ASH2L 0.000447\n", - "GATA3 0.000002\n", - "Name: pow2_bias, Length: 148, dtype: float32" + "NFYA 6.491914e+00\n", + "PRKCD 4.609087e+00\n", + "p38 2.618869e+00\n", + "TCR 2.506049e+00\n", + "RUNX1 2.171145e+00\n", + " ... \n", + "ATF2 5.205700e-03\n", + "MLL.SET.subcomplex 4.449616e-03\n", + "ZNF217 2.427842e-03\n", + "ASH2L 1.096316e-04\n", + "GATA3 1.853837e-07\n", + "Name: pow2_bias, Length: 149, dtype: float32" ] }, "execution_count": 41, @@ -4072,7 +4098,7 @@ }, { "data": { - "image/png": "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LnTSCBJnOSqKzz//3Dz66KPmiy++sH/r54UXXmjOPvts89ZbbxXE/lkatA60n44dOzY9L1etWrVsye1DDz3U/Pbbb1mfp7k+Tj/9dLPDDjvYYpfari6++GJ7/m3evLk58MADY80w62x2U5deeeWVVLVq1VL77ruvnQH1gQcesDf9vt9++6WqV6+eeu211wKff+CBB6ZOOeWU1Pz581NXXXVVqlKlSqmdd945NX78+MTL9tZbb6VOP/30VM2aNVPbbbdd6qKLLgr83xUrVqROOOGEVI0aNVINGjRI3XDDDan169enH//pp59SlStXjnzPDRs2pB555JFU9+7dU7vuumtqt912Sx111FGpxx57LLVx48bI52+zzTaBn33t2rWpSy65JFW1atXQ1/j5559Tb775Zur3339PL/u///3v1JAhQ1Lz5s1LxfHZZ5+lRo0alfr888/t3/p5wQUXpM466yz72kmtXr06NXXq1BI//4cffrDLUhJz586N9V1m8+2336auv/76VOPGje22re+5JCZPnmy3e21vdevWjfz/JUuWpJ5//vnU8OHD7U2/674o2p/0Wf/xj3+khg4dGus52dx///2pQw45xO4jWna/X375JdW8efNUEn///Xfq+++/L/Hzo77TL7/8MrXDDjuk18cBBxyQ+vHHH3Pav7U/L1++PPDxJ598MnLf1Pt36NChyHv7xT3OZNL6X7BgQSqJgw46KPXdd9+lSsOrr75qzxva9rUP6G8d+7p06ZI6+OCDU1WqVCnRcSbX/VPniDvuuCP1zjvv2L+1bzVp0iRVv379VO/eve0xN4yO63FuQW6++ebU5ptvbj+31oWOsdtuu63dV2+77Tb7OXRfNn369Em1atUq9Z///CfVuXPn1DHHHGPPN/osOra2bt06dd1116WSKLPAok2bNvYkHEQBxu677x74uFbmp59+an/Xl6idSgfNkvrf//5nv6wWLVqk6tWrZ1/vqaeeijypX3rppemAZsSIEfYgpI1y3bp16R1eB4Uweg89R/+3xx57pE4++eTUSSedZNeR7tMXH0UbuTY0PXfZsmXp+6dNm2Y/k04Q3k6Qzdtvv53aYost7PtpA9UBVxunnteyZUu7s73++utlstO7OrlHPX/rrbcOvdWuXTun9/7zzz9TTzzxhD3w6sSh59555502GM01GBo0aFCqWbNm9jVOPfVUu27/+uuv0ADstNNOs+t8s802s0Gvbvpd9ylwXrNmTeDztR0oELjsssvswVLLf/TRR6deeuklGwTHcc8999jg/OKLL7bvp23j1ltvTXwyzGV70LoOu02fPj30+T169LD7poKgr776yv6uk7EXzMT5DDp46wIq2/p++umn7Xeik0EYfR86HjZq1Cg1c+bMYo9HLYe+i2w3bQv9+/dP/x3mhRdeyHrTa9x3333pv8Nom7366qvtMWnvvfe2F1O5fI6OHTumBgwYkA7ItF/6T4L9+vVLHXrooal87p8PP/yw/cw77bSTPS5qm9axUydyXYTWrl07de2114a+xlZbbRV402fSvhK2HvTe48aNs7/PmjXL/u+zzz5b5MK9adOmWZ+rAEiBkSxevNhuW9qvPRMnTrTH/HIZWOjE88UXXwQ+rsf0P0G0MnSF7dlyyy1TX3/9dc7LoS+jW7dudsM4/vjjbXCioEA7uxe4hNGXp5OyRwegffbZJ9W1a1e74cY58OgKv1atWukv208nYj0WFr16tLzt27e3rSwKdBT06HOotSIqgv6///s/ewJYtWpV6vbbb09tv/329m+PWoXUkhTG5U5f0hNJ0MHPu911112Bz9dJ8Morr0yNHj06600n9zgnwg8//DB14YUX2oOEvg8dsLUdxN2mvAPwM888Y7cjBYzHHnus/U7jvsY555xjg0K1+vlb0PS7AkQFw7qyirN/aVl0AjzssMPsAVUnN32vOtGG0ZXP2LFj03+/++67NtD0LihKI7DwWhqCbt7jQRSM+VvrdBGgE4j2+2+++SbWZ9A+1a5dO7vt+4NBfb86gegqM4reQwGmvjMdF3XM8ItaDn1OXSgoOPXfdL/2df0e1XrkrSv9DLpFrQtdMDZs2NAeY3SsqFOnTuq8884r8jnCLsR00va2OwW42h/mzJmTflwt2Hr9fO6faoHS1b4owNfzdHzwf68tWrRIlYRapM4//3wb6Gh/C6LtRtuD/2//+VQXykGtYAqG/M/VcU8tcx61Pum+chlYqClm2LBhgY/rsbCoSRufTugff/yxvSkwePnll9N/e7coOlDqILly5coi98fdyHTQVzOan15LJ1ldpeuxqJ1NBxx1NwS55ZZb7AkmDp041Nqh91SwNWXKlFjP0w7rBWZqXtbn/+ijj9KPq7lUB4Go10i60ydtNUhy8FPgdPfddyduLdE2dfnllxcLnHMJLHQC7tSpU+qhhx4q0gIV9zV00NSJPIhar/Q/cQN3j67UdXJQy1zUutC+sXDhwiL3eduAgsw4J+U999wz9KbjSNhraHtRd572g2w3tTKGPV9Bvbr3Mino1olaLYJxtomlS5faZdXFi4ITBYk68GvfjsP/fah7SScSXTh4rUdR61InK7WGZn6WXLbJww8/3LbYZG4XubyGrrT9V8c6Xui+M888066XqM/hP06JjnEK8PwnxbALUhf7p7Zrf9ePvkf/ev3+++/t95MLnTMUaOnzqMsr20Vm1IW1fz2ErUddGMyePTv9t7pW/a/1ySef2GNtEjlPQubKTTfdZE499VQzZcoU06VLl/QkZspM1TTsmths3Lhxoa9xyCGH2GQbz5FHHml/VqpUyd6vn95okSDnnHOOuf/+++1ynHHGGXaSta233jr252jatKlNJlLSi0cJNBqp0rVrV3PsscdGvsa8efPMbbfdFvi4klP/85//RL6ORsRoEpnnnnvOfg6tw1tvvdW0aNHCNG7cOPS51apVswlgomQeJZ16f3sJbFWrVo1cBq1zqVy5sqlRo4ZNJPKvlxUrVoQ+f926dTYRa/fdd8/6+Pfff28GDRoU+HwlID3wwAPmmGOOyfr43LlzTbt27bI+1r17d5sUGaRu3bqmZ8+eJoq2y0ceecQm1GqbOuyww9LrJa7169fb5+hWpUoVkyt9f/pOg+ixoITjqO1didHaziZPnhz6v/Xr17cJ1Bqh5dltt91sgt3BBx8cK6lRCZMnn3xykf3Lb8mSJWbBggWBz99rr73sTyWkZbPVVlsVOYZkatWqlfnwww/NLrvsUuR+L3FWyeNxbLPNNvaY8H//9382sU7JmJrI8brrrjO5UnK71uMJJ5xgPv30UzN+/PjI5wwfPtxMmDDBbovXXHON6dOnT87vq6TGu+66yyazax/zjre5WLx4sV12z0477WSPvdoetK+EHQdF29JXX31lj2kyY8YMu016lCivY0A+908dFzfffPP035q0yz9xV/Xq1e3+G4eO2ffee689TterV88mZMZNHNW+oYlARduwkli9ESG//vpr4PPatGljZs2ald43Ms+zeixze89ZqgzpikpX12pWVISnm37Xfe+9917ocxUxxrnFoW4CNWUpMUvNROpLVlSrq6so6mbQ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MufKAatXr15ZLx4qGAILAFknMfLXOBg8eLAdRZHZUnHppZey9srhpHReYrQCxk1xfibkF4EFgGLijMJRPpGm30b5CCw0ikcTr3lOOeUUO0mbv6idZs0EkiKwyLNvvvnGzq6o6ZsBoKwCiziBIrlgcCF6a0Miq1evNlOnTmUtokL53//+Z84777yyXgzEpByvqJu6vAAXGG7qsC86aE4FoKL57bffbC2Lhx9+uKwXBQmpIq4qkN522202DwNIisAiIY3rV/nuoIp1yqoHgLIOHm688UZbIEvHqmuuucZO9KhaFhp6qkqcV1xxBV8SnCCwSGiHHXawMx+eeOKJWR+fO3euadeuXdK3AYASY9ZglCZyLBJS0DB79uzQhCjmeQNQlsaPH2/GjBljnn32WfPGG2/YJM3169fb4aYnn3xysblDgCQYFZKQJhxTsZn27dtnfVx1+VXdTi0bQHmdATKTJtxTUjKjCMoHZg1GaaIrJCGvkl2QqlWrElSg3PHXOwh6vGfPnqW2PEhGAaA/D0xzhWg2UyAfaLFI6PHHH7clj+vWrZv1cZVBHjZsmO3jBICywKzBKE0EFg52WJXEff7557NOQ6xa/EybDqAsnXXWWbH+79FHH837sqDiI7BwEFhoUqaZM2ea0aNHF+ubJrBAeXT22WdH/o8Sk1XLAgD8CCwSUjb1kiVLzIgRI8zAgQPNgAEDzKBBg9KPE1igPDr22GND++snT55sayOQvAkgE8mbCXlDSRVQtG3b1px++ulm3rx55oknnjBbbLFF0pcHysSECROy3q9p06+77jpTvXp18oYAZEUdC4eOPPJI2yXy+eefmw4dOjDzIyqMd99913Tq1MmceuqpdjvXrKb9+vUr68UCUIAILBJSP7Nfq1atzAcffGCHmO699962GA1Qnuu0HHXUUaZz585m5513Nl9++aWtNLv11luX9aIBKFAEFgllq6pZu3ZtM3HiRHP++eebM888M+lbAKVu0aJFdiSBuvdU80Dde0rUbNy4Md8GgFAkbyakg69mOK1Vq1bWx5955hkzfPhw89ZbbyV9K6DU1KxZ07bG9enTx+y///6B/3f00UfzrQAogsACQNZh1FEUeDAqBEAmAos8zamgksfqk+7du7fZZpttkr4NAADlAoFFniraaZImzRyon9OmTctalRMAgIqGwCKPNm7caM4991yz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", + "image/png": "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rrvuSt58883063/+85/J6aefnowZMyZ59NFHc39v2223Tb70pS8ljz32WHL00Ucnffr0SdZee+3k2muvTWKaM2dOcs899ySt9Ic//CHp169f8rGPfSxdkfa8885LH/z/4x//eNK/f//ktttua+n7eOqpp5LVV1893Y+LLLJIss022ySvvPJKx/N8Lny/sx555JGGf3/u3LnJxRdfnGy11VZJ3759ky222CL58Y9/nDTjpZdeSvbff//Cn+HYLfPoyn3R6O+vuOKKuefCW2+9lRx22GHJYostlvv7M2fOTPbaa69k8cUXT1ZaaaXk+OOPT/73v/81fTw899xzyQ9/+MNk1VVXTY9r2o1a1l9//eSCCy7oaJfYjnPPPbfj+UsuuSRZb731Gv77jWxDrM+C52nnMgMGDEieffbZJKZ33303efHFF3P/fq1Hdq5n/7ZyG/gblfugVV5//fVOn5vbb7998sILL9T9uVNPPTVZYoklkh133DFZfvnlk29961vJKquskowdOzZtnziu+F4zpk6dmm5PZ7RFYPHyyy+nO2rNNddMVlhhhfQAGz9+fKmggJ/hpOSg+fCHP5zsvffeyRe/+MVko402Sr+32267Ff7+n//852SppZZKf5YPhpOUD+VDH/pQss4666Qn/e23317zd/lAH3/88Y6Gku3+/e9/n8RWpuF455130uXr2YebbbZZGmhVqtcIs79ouPMQYGy44YZJK9/H7rvvnn6W//73v5Nnnnkm/f+wYcM6Gop672G55ZYrfCyzzDKlG6+JEycmBxxwQPo7BKoEFRMmTEi66vNcdtllcx+8F4LAote44YYbCh8//elPWx5YnHHGGWnjxzlJY5thP3Kcco7dd999ub9/+OGHdwTqF154YRp0ckzMmzev43jgvC3j7bffTq644oq0oSSYYdvPOuusNHjJw7ZXXqT4PW4iMs8//3x6A1RWZ7ah7GdRbz9UX1SXXnrp6IFF0THxwQ9+MP3sCNDuvvvu9EHby3lFgJZ9r5XbwD749a9/XffcaOU2ZPL+NvvjF7/4Rd1tWWuttZKrrroq/f9DDz2U/r3f/va3C9worrbaakkzmrn5aPmy6UWuu+668Ktf/SrtUmUo4cwzz0z/XWqppcKGG25Yc1n1apdeemn6+yyEVt3NzXgoXZd0n++77741f//4448PX/va19JciPPP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Pjp88IMfTH9miy22CHfffXfH71966aVh2WWXDbfffntYb7310loTO++8c3j11VcX+DsXXXRR+vziiy8e1l133XDeeef5SUi9gIGFpAUcddRR4S9/+Uu48cYbwx133JGW1Gadjsyhhx4aJk6cGMaPH5+W1d5rr73SwOGZZ57p+Jm33nornHHGGeHyyy8PEyZMCC+99FIajGSuvPLK8KMf/Sicdtpp4cknnwyjR48Oxx9/fFpdU1IPl0jS/5k1a1ay2GKLJddee23HPnnzzTeTJZdcMjniiCOSF198Menbt28yffr0BfbZDjvskIwaNSr9/yWXXJLQtEydOrXj+XPPPTdZeeWVO75ec801k6uuumqB1zjllFOSESNG+FlIPZxrhUjq8Nxzz4V33303bL755h3fGzhwYFhnnXXS/z/22GPhvffeC2uvvfYCe43hkRVWWKHjaxYMq1wgjCGVGTNmpP+fO3duePbZZ8MBBxwQDjrooI6f+d///pf+LUk9m4GFpNLmzJmTrtkxZcqU963dQS5Fpno58z59+tA72vEauPDCC9P8jErVrymp5zGwkNRhjTXWSIOChx56KKy22modi4A9/fTTYZtttgkf+chH0h4Leh8qlzBvxMorrxwGDx6c9o6QJCqpdzGwkNRhwIABYb/99gvHHHNMWH755cNKK60UTjjhhLDIIoukvQ4MgRAM7LvvvuHMM89MA41///vf4a677gobbbRR2GWXXUrtzZNOOikcfvjh6dAHiZ8MpUyePDm88cYbafKopJ7LWSGSFnDWWWeFESNGhF133TXsuOOOYcstt+yYFopLLrkkDSy++93vprkXu++++wI9HGUceOCB6XRTXmvDDTcM2267bTpNddiwYX4aUg/nsumSCpFsSc0KeihIuJSkIg6FSFrAX//61/CPf/wjnRlCfsXJJ5+cfn+33XZzT0mqy8BC0vtQ3Oqpp54K/fr1C5tssklaJOsDH/iAe0pSXQ6FSJKkaEzelCRJ0RhYSJKkaAwsJElSNAYWkiQpGgMLSZIUjYGFJEmKxsBCkiRFY2AhSZKiMbCQJEnR/D8VekwLLjuXCAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -4108,7 +4134,7 @@ "outputs": [ { "data": { - "image/png": "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f7zYvHlz0rd50003iR9//FGeYxircd9C1h/GmM8//1zes3Af1QL6dJNIPvjgA6d8+fLOUUcd5YwfP955/PHH5QO/9+jRw8nKynI++uijpB+2Pn36OP/85z+dhQsXOjfccIOTlpbmtG7d2pk2bZq1r2jWrFnOueee61SqVMlp2LChc/nllyd9G1dffbW7n08//bRz8MEHO6eccoqTk5Mj31+3bp08FjoIhUJyW/j/O3fu7Jx11lnOmWee6XTs2FG+9o9//MPRRd26deN+t3v27HGuuuoqp1y5cknf7ueff+5UrlxZ7l+DBg2c+fPnO02aNHFatWrltGnTRp7fH3/8saODDz/8UF5btWrVcipUqCCf4zj079/f6devn5ORkeF89tlnjg1wHNLT061s+6+//nIuvPDCpP6fNWvWTPioVq2a8f1dvny5c/PNN8vzDecZrj0Tx/a2225zmjVrJvf37LPPluddbm5u0re1a9cu55xzzpHncWZmplOvXj35wO94DWPp7t27k75dXMuffvqpc8011zh16tSR48bgwYOd9957zykoKHB08tBDD8n7wxVXXCH3D9f3nXfe6b6P8dvWdaXrmt6+fXvCx9y5c7Xt85AhQ+R1s3HjRue3336Tvzdv3tz5888/tR/vvn37ynlRrHP4tddek+f5xIkTtWwb53j37t2dNWvWxHxf537jHI/1wDU9duxY93myeeedd2I+sN1HH33Ufa4DjI833nij07JlS+fII490nnnmGSPH++ijj3bGjRsnf3/llVfkveqmm25y3x8zZoxz/PHHO368Z2G+fe+99zpffvmlfD5p0iSnadOmckwfMWKEnBfqoEaNGnEfOP4Y03V813fccYdTsWJFOf/DnPCyyy6Tc9K77rpLjiM45ngt2eCY4liD1atXy7EF90rFjBkz5FxYBxTdMYDg+s9//hP3oEF8d+jQIelfBk66RYsWyd9xceEknz59umOav//+W14MGGxr164tP8err74qBaoODjroICkEFZhMdOvWzTnhhBOc7OxsrTfTZ5991qlatap7AXqB+MN7zz//vJZtY3DFgAOhv2XLFvf1OXPmyGMPEawG32TSq1cvOUHeuXOnc8899ziNGzeWzxVY8MHikg7K2g21rIhuHduGEBo1apQzZcqUmA8IURP7i2v4pZdeco499lgpBrHN+++/X4oT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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnQecHGX9/79b7vZ6kkvvuQTSCVWQkgCCoJKfYKWEIiCiqFgAFUFUOiLq30KTKoSigqJRqrSEDqGkk94u9e5yve3O/F/f78wzOzs7s7d7N88zd7vf9+t12bu9yc3OMzPPPJ9vDem6rgPDMAzDMAzDMAzDML4T9v9PMgzDMAzDMAzDMAzDopthGIZhGIZhGIZhJMKeboZhGIZhGIZhGIaRBItuhmEYhmEYhmEYhpEEi26GYRiGYRiGYRiGkQSLboZhGIZhGIZhGIaRBItuhmEYhmEYhmEYhpEEi26GYRiGYRiGYRiGkQSLboZhGIZhGIZhGIaRBItuhmEYRjqhUAh+8Ytf5P1I79q1C7785S/D0KFD6Zh/97vf5fw3vva1r0FFRQUMdII858cddxx9MQzDMEx/gEU3wzAMkzMPPPAAiSr714gRI+D444+Hp59+umBH9Ac/+AE8++yzcOWVV8JDDz0En/nMZ1y3a2trI0H68ssvQ1D897//LQhDCMMwDMMETTToD8AwDMMMXK699lqoqakBXdfJy4ti/HOf+xz8+9//hvnz51vbtbe3QzSa/4+cF198EU499VS4/PLLM26HovuXv/wlfR+URxZF95/+9CdpwrtQzjnDMAzD9AQ/DRmGYZhe89nPfhYOO+ww6+cLL7wQRo4cCY8++miK6C4pKSmIUd69ezcMHjwY8o14PA6apkFxcXHW/6dQzrmfoDGmrKws6I/BMAzD+AyHlzMMwzC+gYKztLQ0zcPpzO/dvHkzXHLJJTBt2jTaHnOgv/KVr8CmTZtS/l93dzd5hPfff38ScbjdMcccA88//3zKdqtXr6Zc6urqatoODQH/+te/evW33NiwYQN9Pvz7KIo++clPwn/+85+0cHv0+KP3WITcu4HHOHz4cPoeP4/Y1ulx3r59O5x22mmU343bo/c8kUikbINCGPPGZ82aRceEBo+LL74YGhoaeswbx8+J2FMExOfD73/961/T354yZQrEYjFYuXIldHV1wTXXXAOHHnooDBo0CMrLy2Hu3Lnw0ksvpe3DeUz4Pb63bt062j9eK/g3zj//fBKbTh5++GHaD14fOO5nnHEGbN26NW27u+++mz4jbnf44YfD4sWLMx678zN+5zvfgX/+858we/ZsOk4cy2eeeSZtWzwfF1xwAY2x2O6+++5L2UZcB87rGNMI8H17OgFGOOA+33vvPZg3bx5dVz/96U8t440wYOF5PfDAA+HBBx9M+Zv28yTGAD/XJz7xCXjnnXdStt25cyeN87hx42ib0aNHU0SG83MyDMMwcmBPN8MwDNNrGhsbYe/evSQ2USj84Q9/gJaWFjj77LMz/j8UBa+//joJKRQCuPi/4447SIiguBPePhRqN910E3z9618nQdXU1ATvvvsuLF26FD796U/TNitWrICjjz4axo4dCz/5yU9ICP71r38lwfrEE0/AF77whaz/lhsYNn/UUUeRMLz00ktJrKMA+vznPw9///vf6e+jaMIc7nPOOYf+1rnnnuv591BA47F+61vfov/7xS9+kd6fM2eOtQ2K65NPPhmOOOIIElUvvPAC3HbbbSSs8P8JUGCj0ENBhZ9t48aN8Mc//hHef/99eO2116CoqMj1M+D/q62tJYMDfm437r//fujo6IBvfOMbJNRQ+OKY3XPPPXDmmWfCRRddBM3NzXDvvffSZ3377bfhoIMOgp746le/SikJeC5w7PHvYT2AW265xdrmhhtugJ/97Ge0LZ6vPXv20LWF44zHJqIJcN94LHh+vv/975NxBM8Lftbx48dDNixZsgSefPJJMgJVVlbC73//e/jSl74EW7ZsoXMtrgE0tAiRjucQaxegMMYxwX33hrq6OooWwfsA7xkU2RiWj/cBGidwXzhWf/vb38hQsW/fPvje976X8jceeeQROg84Dvj5fvWrX9E1hWMhzj8eD94n3/3ud2HSpEl0r+K5x2PEnxmGYRjJ6AzDMAyTI/fff7+OjxDnVywW0x944IG07fF3P//5z62f29ra0rZ54403aLu//OUv1nsHHnigfsopp2T8LCeccIJ+wAEH6B0dHdZ7mqbpRx11lL7//vvn9Lfc+P73v0+fa/HixdZ7zc3Nek1NjT5p0iQ9kUikHOe3v/3tHv/mnj170sZEcN5559Hvrr322pT3Dz74YP3QQw+1fsbPg9stXLgwZbtnnnnG9X0n+DndlgEbN26k96uqqvTdu3en/C4ej+udnZ0p7zU0NOgjR47UL7jggpT3nceH3+N7zu2+8IUv6EOHDrV+3rRpkx6JRPQbbrghZbtly5bp0WjUer+rq0sfMWKEftBBB6V8prvvvpv2c+yxx2Y8fvEZi4uL9XXr1lnvffjhh/T+H/7wB+u9Cy+8UB89erS+d+/elP9/xhln6IMGDbKuZ3Ff4Bjaeemll+h9fBXg58P37rzzzpRtf/e739H7Dz/8sPUeHuuRRx6pV1RU6E1NTSnnCceuvr7e2vapp56i9//9739b5wd/vvXWW3scD4ZhGEYOHF7OMAzD9BoMUUaPGX5hODBWL0fPJHoOM4GhwPawb/T47bfffuTBRO+nAH9GD93atWtd/059fT0VL0OPKHr70OuOX/j30PuK/w/DgrP5W5kKjqFnHEPRBRjyjR5g9NCjZ14G3/zmN1N+xjBu9F4K0PuJ4dnoWRfHjV8Yko2fzy3kOxfQOyrC4AWRSMTK68bQdhx/zPfGcH77ecv1uPB8occYwWsH/zaeU/txjRo1ilIDxHFhlAJ6bPHv2XPN0SOM45ItJ554IkUQCDDioKqqyhpr1OYYMfF///d/9L39M+E1htEe2R67E4wgwCgF5/WGx4rRBAL0WGMkA0aRvPLKKynbn3766TBkyJCU8UTE58d7DccHQ9t7SjtgGIZh5MDh5QzDMEyvQTFqL6SGQuHggw+msFgspOZVeAtDaDG8GEOYURQbTkcDFDH26uiYezp16lTKf8UWXBjCLUKxMQQX/y+GIuOXGyjMMPS8p7/lBeafY5i3kxkzZli/x7/nJ5jH6xS8KKzsogmNBzhWGJrtddx9AcOa3cDQegx1xzx6NJj0tL2TCRMmpPwsBCMeG4pdPC48pyiw3RAh0zjuiHM7/P3kyZOz+ixun8c51hjajmHdmDeNX36ONV6XznsEjwuPKRwOe15v2Y6nEPYYun/ZZZdR+DqGyeO9iSkQKO4ZhmEY+bDoZhiGYXwDhQJ6u//f//t/JJ6w2JQbmFuKghtzYY888kjyTGI+Kua2opdTgDm869evh6eeegqee+45yv/97W9/C3feeSd51MW2WGQMvY5uoAc9m7/Vn0CPck/gsaPgXrhwoevvnaI9V+zRCAKMZkBPMubLX3HFFbR//KxoQMGx7cuxCcMLHhdeC5gz7bYtevH9JJvPg2DO9Xnnnee6rTDceBXPcxbAyzTGfn9+BO8z9NRjwTjsI48GKjxnGCWCRjKGYRhGLiy6GYZhGF/BcGMEQ2G9wAJkKGDQYyrAol3oUXSCRbEwBBe/8G+ieMaiaCiUhUcTvZsYJtwTmf6WFxMnToQ1a9akvY+eXvH7XPESZ7mAIdFYYA2LyPVGvPXmM+B5wzHHEHD7///5z38OfoHHhYIRPecYleCFGHc07nzqU5+y3kfvOxaUw4rffoDGCyywhsK5p2tMeJmd17HTO50JPK6PPvqIxL7d292X602MK3q78QvHDIve4f2HhhSGYRhGLpzTzTAMw/gGCh70ImPIrAiH9fLO2T1xCFandnoEMdfX6eVEz3VnZyf9jJ5WrPR81113wY4dO9L2g6HB2f4tLz73uc9RZe433njDeq+1tZVCjbHy88yZMyFXRHV2NyNDtmDOM47Xdddd52r46OlvY5X3XD+D8Kraz91bb72VMjZ9BStv436wnZrzGsGfxXnEtAYUxBipgK3MBFjNvS/j6gQ/C+a3Y1738uXLM15jIjf81Vdftd7Dc+QVlu51vWGLr8cffzzlfOL9gdfssccem9Pnx6r7aNCyg58TDQk9XfsMwzCMP7Cnm2EYhuk1GAIsPHCY14rti9CLhq27MD/XC8wpxVZVGFaOohVFG3ptRYsmAf4ORTUWB0MvNRbPQm8r5ozbi7lhkbMDDjiA2lihJxZbPOHf3LZtG3z44YdZ/y038FgeffRRau2Exazw/2JeM3pTUYg5c2+zAT3T+HlQWKE3F/8m5oXnkhuO4gvbRGGY8AcffAAnnXQSefxx/LHIGob4Y+9yL3AcEDwmDM1HcYnh/ZnA84Zebmx1dsopp9AYoOjFY8kU2ZALKAivv/56uPLKK6lQHYayo0DEff3jH/+gAnaYToDHitvhGKCnGwuK4TaYtpBLTnc23HzzzVTADXP78RrD48UiclhADa9b/B7BdArMmcbPju/heX3ssces6I9swONDIxKG8WMPbzTs4HWKLeCwbzqORS58/PHHcMIJJ5CRBj93NBqlccR7pKfzzTAMw/iEpKroDMMwTIG1DCspKaH2TXfccQe17MrUPgrbGJ1//vn6sGHDqA3SySefrK9evVqfOHEitcwSXH/99frhhx+uDx48WC8tLdWnT59OLaOwhZKd9evX6+eee64+atQovaioSB87dqw+f/58/e9//3vOf8sN/Ptf/vKX6f/iceLfWbRoUdp22bYMQ15//XVqAYYtq+zjg8dfXl6etr1oueUEW2Th38FjqqyspPZpP/rRj/Ta2tqM+8f2X9/97nf14cOH66FQyPrbohWVW4spPK833ngjnSdsD4dtzHAc8DPje9m0DMN2aXa82mw98cQT+jHHHENjgV94vnBs16xZk7Ld7bffTu3b8PMcdthh+quvvkrtuLJtGeZ2vpzXIbJr1y7advz48XSN4bWG7epw/J3XyoknnkifB1up/fSnP9Wff/5515Zhs2bNcv1cuC9xf+D1gecUx8lOpvNkH3tsc4afG8cPxxFbnB1xxBH6X//61x7Hh2EYhvGHEP7jl4BnGIZhGIZhGIZhGCYJ53QzDMMwDMMwDMMwjCRYdDMMwzAMwzAMwzCMJFh0MwzDMAzDMAzDMIwkWHQzDMMwDMMwDMMwjCRYdDMMwzAMwzAMwzCMJFh0MwzDMAzDMAzDMIwkolBAaJoGtbW1UFlZCaFQKOiPwzAMwzAMwzAMwwxQsPt2c3MzjBkzBsJhb392QYluFNzjx48P+mMwDMMwDMMwDMMwecLWrVth3Lhxnr8vKNGNHm4xKFVVVUF/HIZhGIZhGIZhGGaA0tTURE5doTO9KCjRLULKUXCz6GYYhmEYhmEYhmH6Sk+py1xIjWEYhmEYhmEYhmEkwaKbYRiGYRiGYRiGYSTBopthGIZhGIZhGIZhJMGim2EYhmEYhmEYhmEkwaKbYRiGYRiGYRiGYSTBopthGIZhGIZhGIZhJMGim2EYhmEYhmEYhmEkwaKbYRiGYRiGYRiGYSTBopthGIZhGIZhGIZhJMGim2EYhmEYhmEYhmEkwaKbYRiGYRiGYRiGYSTBopthGIZhGIZhGIZhJMGim2EYhmEYhmEYhmEkwaKbYRiGYRiGYRiGYSTBopthGIZhGIZhGIZhJMGim2EYhmEYhmEYhmEkwaI7S7q7u+GZZ56BhoYGWeeCYRiGYRiGYRiGyTNYdGfJCy+8ADfffDP89re/lXtGGIZhGIZhGIZhmLyBRXeW1NbW0utbb70l83wwDMMwDMMwDMMweQSLboZhGIZhGIZhGIaRBItuhmEYhmEYhmEYhpEEi+4c0XVdzplgGIZhGIZhGIZh8g4W3TkSCoXknAmGYRiGYRiGYRgm72DRzTAMwzAMwzAMwzCSYNHNMAzDMAzDMAzDMJJg0Z0jnNPNMAzDMAzDMAzDZAuL7hzhnG6GYRiGYRiGYRgmW1h0MwzDMAzDMAzDMIwkWHQzDMMwDMMwDMMwjCRYdOcYVs453QzDMAzDMAzDMEy2sOjOEc7pZhiGYRiGYRiGYfJSdG/fvh3OPvtsGDp0KJSWlsIBBxwA7777btAfi2EYhmEYhmEYhmFcicIAoaGhAY4++mg4/vjj4emnn4bhw4fD2rVrYciQIUF/NIZhGIZhGIZhGIYZ2KL7lltugfHjx8P9999vvVdTU6P8c3BON8MwDMMwDMMwDJN34eX/+te/4LDDDoOvfOUrMGLECDj44IPhz3/+s/LPwTndDMMwDMMwDMMwTN6J7g0bNsAdd9wB+++/Pzz77LPwrW99Cy699FJ48MEHPf9PZ2cnNDU1pXwxDMMwDMMwDMMwjCoGTHi5pmnk6b7xxhvpZ/R0L1++HO68804477zzXP/PTTfdBL/85S8Vf1KGYRiGYRiGYRiGGWCe7tGjR8PMmTNT3psxYwZs2bLF8/9ceeWV0NjYaH1t3bq1z5+Dc7oZhmEYhmEYhmGYvPN0Y+XyNWvWpLz38ccfw8SJEz3/TywWoy8/EGKbc7oZhmEYhmEYhmGYvPN0/+AHP4A333yTwsvXrVsHjzzyCNx9993w7W9/O+iPxjAMwzAMwzAMwzADW3R/4hOfgH/84x/w6KOPwuzZs+G6666D3/3ud7BgwYKgPxrDMAzDMAzDMAzDDOzwcmT+/Pn0FSSc080wDMMwDMMwDMPknac7aEQuN+d0MwzDMAzDMAzDMNnCopthGIZhGIZhGIZhJMGim2EYhmEYhmEYhmEkwaI7Rzinm2EYhmEYhmEYhskWFt05wjndDMMwDMMwDMMwTLaw6GYYhmEYhmEYhmEYSbDoZhiGYRiGYRiGYRhJsOjOEc7pZhiGYRiGYRiGYbKFRXeOcE43wzAMwzAMwzAMky0surOEPdwMwzAMwzAMwzBMrrDoZhiGYRiGYRiGYRhJsOjOEfZ4MwzDMAzDMAzDMNnCojtHOKebYRiGYRiGYRiGyRYW3QzDMAzDMAzDMAwjCRbdOcLh5QzDMAzDMAzDMEy2sOjOEQ4vZxiGYRiGYRiGYbKFRXeOsKebYRiGYRiGYRiGyRYW3QzDMAzDMAzDMAwjCRbdOcKeboZhGIZhGIZhGCZbWHTnKLY5p5thGIZhGIZhGIbJFhbdWcIeboZhGIZhGIZhGCZXWHRniaZp9MqeboZhGIZhGIZhGCZbWHTnCHu8GYZhGIZhGIZhmGxh0Z0l7OlmGIZhGIZhGIZhcoVFd5awh5thGIZhGIZhGIbJFRbdWcKim2EYhmEYhmEYhskVFt05im4W3wzDMAzDMAzDMEy2sOjOEu7TzTAMwzAMwzAMw+QKi+4sYQ83wzAMwzAMwzAMkyssunOsXs4wDMMwDMMwDMMw2cKiO0fY480wDMMwDMMwDMNkC4vuLOE+3QzDMAzDMAzDMEyusOjOEvZwMwzDMAzDMAzDMLnCojtLWHQzDMMwDMMwDMMwucKiO0u4TzfDMAzDMAzDMAyTKyy6B0Cf7rq6OnjjjTfY284wDMMwDMMwDDPAYNE9AMLLr732Wrjyyith+fLlgX0GhmEYhmEYhmEYJndYdA+APt0ffvghvTY2Ngb2GRiGYRiGYRiGYZjcYdGdI1xQjWEYhmEYhmEYhskWFt0DqE83C36GYRiGYRiGYZiBBYvuASR4gxT8DMMwDMMwDMMwTO6w6GYYhmEYhmEYhmEYSbDozjG8PEiPd3/wtjMMwzAMwzAMwzDZw6I7S1jwMgzDMAzDMAzDMLnCojtLWHQzDMMwDMMwDMMwucKiO0fRzcXMGIZhGIZhGIZhmGxh0Z2j6GaPN8MwDMMwDMMwDJMtLLqzhD3dDMMwDMMwDMMwTK6w6M6S/uDh7g+fgWEYhmEYhmEYhskeFt0DSPD2h8/AMAzDMAzDMAzDZA+L7gGU082im2EYhmEYhmEYZmAxYEX3zTffTJXEv//976sVvKEQBIWmaYHtm2EYhmEYhmEYhikQ0f3OO+/AXXfdBXPmzCkoL3N/+AwMwzAMwzAMwzBMHovulpYWWLBgAfz5z3+GIUOGFJTg7Q+fgWEYhmEYhmEYhslj0f3tb38bTjnlFDjxxBN73LazsxOamppSvvoseAMUvhxezjAMwzAMwzAMM7CIwgDiscceg6VLl1J4eTbcdNNN8Mtf/jJvcrrZ080wDMMwDMMwDDOwGDCe7q1bt8L3vvc9WLhwIZSUlGT1f6688kpobGy0vvBvDGTY080wDMMwDMMwDDOwGDCe7vfeew92794NhxxyiPVeIpGAV199Ff74xz9SKHkkEkn5P7FYjL58FbwBplWz6GYYhmEYhmEYhhlYDBjRfcIJJ8CyZctS3jv//PNh+vTp8OMf/zhNcMsL7eY+3QzDMAzDMAzDMEyeie7KykqYPXt2ynvl5eUwdOjQtPdlEmT9cM7pZhiGYRiGYRiGGVgMmJzuoOHq5YXD008/TfUAamtrg/4oDMMwDMMwDMMMcAaMp9uNl19+WbnoDtLbzDndarjlllvo9YgjjoDTTjtN0V4ZhmEYhmEYhslH2NOdq+juB5+hEEADw0cffQRtbW2BfQYs1McwDMMwDMMwDNMXWHTnSoDCt5BEIFalv/TSS+G2224L7DPE4/HA9s0wDMMwDMMwTH7AonsAhZcXkqdb5FP/73//C+wzcDg/wzAMwzAMwzB9hUX3AAovZxGolkKKLGAYhmEYhmEYRg4sugdQ9fJC8nT3Bzi8nGEYhmEYhmGYvsKiO0e4ennhwJ5uhmEYhmEYhmH6CovuAQSLQLWwp5thGIZhGIZhmL7ConsAhXb3h89QSLCRg2EYhmEYhmGYvsKiuxeCNyjxy4XU1MKeboZhGIZhGIZh+gqL7gEkutnzqhYW3QzDMAzDMAzD9BUW3QMIDi9XC4tuhmEYhmEYhmH6CovuXsDh5fmLPZqARTfDMAzDMAzDMH2FRfcACi8PIqf7o48+gtWrVyvfb1BjbBfaLLoZhmEYhmEYhukr0T7/BSZvRXd3dzdceuml9P3LL78MhQAes4BFN8MwDMMwDMMwfYU93QMonzoI0R0UQRWNswvtrq6uQD4DwzAMwzAMwzD5A4vuAST2VYvuIA0NQbVHswtt9nQzDMMwDMMwDNNXWHT385xuu/hULUSD7Ase1L7tQjtITz/DMAzDMAzDMPkBi+5+TpCiuxA93XahzeHlDMMwDMMwDMP0FRbdvaAQPd2qBXhQOd12oc2eboZhGIZhGIZh+gpXL8+GVYvgymHPw6iR+2BTawmE1vwX4IDTIN9Ft1344vfRaDTvRbddaLPoZhiGYRiGYRimr7CnuydWLQJ4fAHUFNdDaUSDGVVtEH3ia8b7eV5Irb8IfpWwp5thGIZhGIZhGD9h0d0Ti29LeysEOsCS34Bq8cmiWz5273ZnZ6eCPTIMwzAMwzAMk8+w6O6JPavd39/t8X6e5nSr9jz3h5ZhHF7OMAzDMAzDMExfYdHdE8Onu78/wuP9PAovD9LL3h/Cy7l6OSPzvq6trYWOjg4eZIZhGIZhmDyHRXdPzL2MAsrt6PgzvV84wle1CO4PorvT9j0jj3feeQduv/122L17d8EM8yOPPAJnnXUWXHDBBUF/FIZhGIZhGEYyLLp7YsZ8gNMfhg1d1dCeCMPKpjKIf+kBgOmngGpPt+q2XYVeSE3XNIjH44F8jkLimmuugb/+9a/w/PPPQ6Gwfft2ekVvN8MwDMMwDJPfsOjOhhnz4cbdJ8BnFx8IlyydBtrUz0Ih5FUXsqdbmDe4mJp82tvbU8a+ELAfa1D1CxiG8ReM1tm2bVtBDeuePXvgmWeegZaWlqA/CsMwTL+GRXc/x74gV+3pDlJ0B+VhtkR2JFZwQjBoCqlwnd2Yw9cYw+QHZ555Jpx99tmwb98+KBR+9atfwc033wx/+9vfgv4oDMMw/RoW3b1ApfjlPt3BiCE9aohu9nSro5BC+e0F1LiYGsPkh4FcGKebmpqgUNi4cWPBHTPDMExvYNHdz+kvhdRUC6LAw8ujxfTKolsdherpVn2NPfbYY3DqaafBypUrle6XYfIZ+zOykAyIQUXiMQzDDDRYdPdzgiyk1l8Ef5Ce7kIJ/a2vr4c//OEP8MEHHwT2GQpJdNu92yKnXRV33nknNO7bBytWrFC6X4bJZ+xCO6jnV5BwbQqGYZjMsOju5/SXCuJBerpVHrclus2c7kLxdC9evBieeOIJuPbaawP7DIUkuu1CO6jwcvZMMYycZ5bquQyLt2H7wT//+c8QFIXo3WcYhskFFt39nCBFd5CW+6CKuBVqTrfw6KPHOyjhV0iiu62tzfX7fAbnkxdeeAGeffZZ5REkra2t8Nprr8GGDRuU7rdQwYiZU089Da6//nrl+25uboZly5Ypv8bs85dqAbp8+XK6thcuXAhBEURUGEbrvP7668r3yzAM0xuivfpfTEEUUusvLcNwAVNUVKRYdJek/JzvBBUOad9voYTyI21t7YGFlwc1nyxdutQSYcXFxXD88ccr2/e9994LTz75JIRCIeoHH43yo0+2GGps3EdGlquvvhpU8uMf/5jqFZxxxhnwzW9+MxDRrdqAGKSXWaxRgjCafvvb36ZXrJw+fPhw5ftnGIbJBfZ093P6S8uwIMPLg/R0F0pl6aAL1xWSpxvv6Y6O9hQvbCGc84aGBtfvVVBXV2fNoYUSWRAkQd7LmzZtote9e/cq3W+him40ZAVtNOV7mmGYgQCL7n5OkJ7uIMPLg6oES6I7FAI9UlRQnu6gFm32hVqheLrRs22/r4NaMKo+53bjgmpDgz2agBfo8gnyXg5KBAZpQAzSyKGZc1mQz0rV6xM81y+++CKsXbtW6X4ZhhnYcIxdP6e/eLoLJaebPNvhqPHFols6hSi6heDUikoh3N0emKdbtejGXFu371VgF9pBhfMXEnYRiM+wcFidfV88J1VHKdmPOUjBr5quzq5APoN9PaR6ffLyyy/DjTfeaH3PMAyTDezp7ucUak53UF52tNbr4Sh9iZ8Lgf7g6S6UsW5paaFXvbgi5WfVFJLoZk83FIzXVzwnVc8nQRoQ7ftTbZzv7OwIxJgVZF/0xsZGpftjGCY/YNHdz+kv1csLJacbvSN6OFJwnu6g+6IXkqdbiGwtVliiu6mpyfV7FdijCYIa70LCfl+rnENRcHaa80ihim6VRg58boj9qT5m+/yl2rBjj6LgVmkMw2QLi+5+jt1qrdqCXYiimzzdoaSnu1AKqQUleO0L40IZ66Torkz5WTWqF6p279C+ffuU7rvZNsZBhfMXEkGJbpzHdNM4rXo+CdKAGNR42/dVSJ5u+7XF6SoMw2QLi+5+Dud0q32gdnR0AkQ4pzsQ0V0gUQUitFo3Rbdqr29QC1WqWB4pAq2oTGn1cpxD29jTXRAiMEgxFKSnOyjBbx9j1eMdZLX4II+bYZiBC4vuPlRHLaTq5aoX6HGbd1vVcVNoYieGl6OnO1JQ3tegqt+mLBYLRHQLka1FS0mEqs5vDuqc19fX0zHrRaVQr1B0o2cb7209bHQkUD3er7zyCvzyl7+EDRs2QKFgnzdVzqFBFsyzi90gvewqjRz2MabULIXReEGuT7gwI8MwvYFFdz+HPd3qHqi4HxpvDC2PFFZOd1Ci27k4V51CEQSW6IsWgxaJBebpVukRw/sKvdtYsV0vKoOO9nZlrbssI0dJZSCi+ze/+Q289NJL8Oyzz0KhEJToDtIDaT9O1c+N/jDemAamck4Jsliffe7iFoQMw2QLi+5+TqF6uhO2/ak6brFYKcTq5fZFi0rh61wYF0IxNZHbrEdLQI/GoLEx/0U3Cm5clOvFZaAVl9F7e/fuVSu6Y4MCqTwsRH4hXNv9ydONc5pKMRbUMQeZW+0UnCr3HWSLNi7MyDBMb2DR3Q9DyvtLIbVC69NtLVxs1csLMbxcbQ69aeiAUMHkxwkRiIIbhXd7e5sycWA3YKkUJHv27KFXvbicvuzvyUYUbdNKgxHdQUeTBEF7ezC51c4ieSqL5gUpup1h3kGJbpXjHWROtz1ahgszMgyTLSy6+zlBhpf3l+rlqvZt93RDKExfheLpDqoIkDXmRaUpPxeGpxtFd4y+VxViHtRCdffu3fSqFZWDZopu8Z6q8aZq8eGI8srpgkLydKMhqdBEd1DCN8hwZzG+eqRI+b6DDC9vbk52QwgqPYhhmIEHi+5+TqG2DAuiP3mKp5teowUhAoNcwIiFqhDdheDpRtFHYjsUBr2ohN5TVc3bfp5VGpR27txJr3qsAvTiipT3ZCPGFqMKtGgJNDQEI7oLydPd1hZMbrUQgVgh3/5zvldODyqX3Rpv855W2f4wSE93U3NSaAdVCJNhmIEHi+5+TpA53UGFl+MxB+HpFiJE5HNjBfNC9HQH0eKnkEQ3FRSLllhCEFHlfQ2qtZAQ2Fqsgr7s7ykT3VjELVoK9fV1EASFMpcYBbWSx6rS+ylEHxp3Cim8vDUgT7c13gGI7qAqtuN6pLWlBfRIcaDpKgzDDDxYdPdzCtHT7TQuqPd0C9HNnm7Vnu58rwSL1zIu0oTYFsetSnQHZVypra21QrwppzsUtt5T0arMEt1FpXTcKq8zvcBEtxhbrFRv/1kFQvRpxeor1dsNhqrnMXsfepWGBsvTHYCRI6i5LNkNYTC9suhmGCZbWHT3c4JsoRSUp9u5L1X7TuZ0R6zXjo7CWCgH5TVwLtDz3dONCzYU3kJsC/GtKrw8KE83Cmw6VvQOhcIUjrp9+3blolsrLk15TzZorNRNo2GhiW5sDadaiAmRHUR7OOu4qTiiunkMryu6ziIx5YLfGu+APd0q5zJhIE2UDVY6dzOFBz43165dqzzKFQ1Jt9xyC/ztb39Tut9CYMCI7ptuugk+8YlPQGVlJYwYMQJOO+00WLNmDeQ7hdgyzHmc6quXG55uCEWh0xYmmc90BCS6k57usoIQ3clQ55IUY0MQoluVQQnv3+21taCVVFnvoShC4atCIGBrMhpvyqFX264sKG9ckCTzfMuDE4GxgEQ3GpSiJYEUM9Ni5cqNHMlwfvXjHZSh2DLioaEhUsyim5ECPqPOOussuOiii+D5559XOspLly6Fp59+Gv70pz8p3W8hMGBE9yuvvALf/va34c0336QLEAtnnHTSSXnfrqEQw8udIlt1eLk9p7urQBbKXQF7ugslp1t4STC3OOicblUGJczdTsTjoJUYLbvsPbO3bdsmff979uylqumIEN11dWryuu25vYUmukVrOJXPaKsdnykCVVaWxrmLqnhHilIKyeVzMbNkqLV60R1Ux41k5EwZaEUlUKcoaoYpLHbt2mV9v2PHDqX7tj+3VDv78h3Tpdf/eeaZZ1J+fuCBB8jj/d5778G8efMKpE93YYSXB5/TnaxejvtGg0M0OmBulQEVqkeiO1IcSMuZILCHOttfVYU7O71DOL/Intu2bt1KrymebrNnNv5u6tSp0vaN1xO2r9IHDTX2q7hHeEpF6wLphBC46I4UWxEkykV3uAj0SBS6WjvpmRmJmM8SiQihK4rHqRTdtO9IkWVEVDneqVE76u4tYbDDawyr5Dc07FZ2rgsZnLMx0rWkxDBU5zv2+1jlPe1m0CqUMVfBgPF0OxHFK6qrqzNOyvgQsH8NNFK923pB5nQH6em2v5+v4HjbIxlUeptRFGnhKC1Wxc+FJLpxwYrGnSBEN+Yaq4hg2bx5c0rhIeN7Q3Rv2bJF6r6FuBZiWy8uC0x0d+R5FEea6Ma2eJEipQtGXBdo0WIrgkTlM7+1tY2Mh3q4WOlcZolujOIIR5R6m6lGRSQGerS4YMLLRWoKziU45jiPcl63XJYtWwZf+cpXKNS6ULDPm6rb0gXZiSHfGZCiG0XY97//fTj66KNh9uzZGfPABw0aZH2NHz8eBhSrFsGBb/8Anp77IdxxyBo4rDIZbqKCINp2BZnTbVn3QklPdyGIbufxqfR0Y6sbEZJJP+d5uohYnAlPnPheleh2GlRUPFCF6E6kiO7BKb+Txe7du1O8rqo93SkVrQtEdFt5vuhxjhQrD3dOFuwLKa0s3dbWasxj5lymynhpH2/8Ui26ybiCz8pwNDBPdyCiGwV3sdoaEYWKCK8WUVOFgH3uUl0hvxBFd0dHB1x++eXwjW98g4w8shiQohtzu5cvXw6PPfZYxu2uvPJKuljF14C6YVctAnh8AVQ2fQylEQ1mVLXB5eM+MN5XhF3sqszrcOauq9q3JTat8PLC8HRbHn4Iqfd0o8hG75DZ87TgPN2m6G7Yt09JzQbrXIfCyh6o5M3GImZmnq3VvitSDJs2bVIiuoXYBqzwHI4q6xFuv5cwr12l8TIonCJQlejGaxuvZxLdoRC9qlqs4rMD68zoAcxlVh57NEZe58ZGNcIXr2U8RhLdeI9FY0rFQVDCgOaUcISuL1ErQswzjBxUOgL6C0GKbvtzq1BE9/r16+Hdd9+Fjz/+GF577TVp+xlwovs73/kOLFq0CF566SUYN25cxm1jsRhUVVWlfA0YFt+W9lYYNdGS3xRMeLkQgapFtzO8PN8nfKtVmrl4UnW8eJ4pr5gWqoURXp6sXp4U3egxQUGmwkuUPNclSh6oaEjYuHEjJDCfO2x73IRCoJUOhq3btkkVopan28x3xf0misuVLZKdBqx8LxToJbpVGJSSRQrNzgCRmLIChVZBSDOnW2XUjhVeHi2hObylpVnJeAshIJ4b2LKsMSBPt8pnNM4dmMtNhh2zYjyLbrnYn1Mq16JBYo9+U52+kBKhledrMoE9QkjmWmzAiG58iKDg/sc//gEvvvgi1NTUQF6zZ7X7+7s93s+j8HJrwWB64wLzdIcKTHSbbaxUCQNroYqeoQIR3fQgxeMVbelsAlzFgzXZok2N6MawSxQfWsmQtN9huDkaG2T26xYebcvTbbb6QTGmIoLFeT3n+/WdKgKLAaLFNH+rmFOSIrDEusYp51jB8yN1LitWKrqTx4257DF6bqu4zpIednO8ozFobWlRtlZIRmip88ZhNAPO4aJSvHhl0Z2fqQRBIgr2JUoH0/cquxfZ549CMBSrjCwID6SQ8ocffhgeeeQRqmCIiyn8ytsLYvh09/dHeLyfR+Hl1r7MqsqqJhvL022K7cLzdJcofahZi1LKvwyTEM33nG5sL4NtZuwI0a2ijZW1UDWrDcueP60iaqXJfG6BVmoIcfSEy227EgLdDAOl/Sr0TonFC3nGCkR0W+HkWGALw/kVFQKyPN1FpucVw381Tcm+k3NZMmpH1VxmF7/C66wiasYe1i72j6hKJ7A/t1Q9s7AWBK5HROSMqBWhKl2lUAmqUn2QUJ2ASBHVP0Fjj8oQc/vcle9rMoHd6SHTATJgRPcdd9xBF91xxx0Ho0ePtr4ef/xxJftX3SMb5l5Gi0U7mi7eL5BCakF7uk1vZKGJblUPNXtIJr1Sf9v8FSV4He9raLAEmEBl2zDVnm4hqIXAtiOEuMy8bhTdGhY7soW2o6db/E5dH/qygvR0i6rWKoSYEN2aaVAS85mKEPOkpzuZ063e0x1TeszpkQWG+FYV0p80IJYoa8cn5gzh4aZjD0eVzCWFTCHmGO/atRsSReWWYUdV8U/n3KW6XVlQ2NdfMtdiA0Z0k3XR5etrX/sa5CUz5gOc/jA0VU6F9kQYVjaVwS2b5wBMP6VgCqmJYk+qPd1W9XJz/wUjuk3xp+qhlmwtVGwtWFVaVfG6uu666+CXv/ylkuub2hlpmrVIFQiRoCK8XLWBRQjqTJ5uWRXMcf6i/EtbaLl9wazCO2V5us3PUDCiG729WDwvEE93MrwcUeEhsuYyymNXW72cPM5m9XAwvc4qjjlNdJuvqjxyNHfhMxr7oivydIsq2lpKjYgK2MGebqkUWo4xXtuNjftIcGsBRFPYhXaheLr3iPaisUqKMpC1JhwworsgmTEflh56K3x28YFwydJp8E7TcKW7N0R3SHnxCmd4ufpCaqnh5Rjak8/0G093uBhaFE7wuFj93//+R0UZVSwUk0XU3D3danO61RhYSFCHwqBhITUHooK5rPByDNfHeUsvrkzdr7lgVuGdssSYuXAqhAUMCmxsFYao7N9s3V8OEagigsQSAtQyTJ13XxgbNFE8TmF/8rRCaopFN3m6w1EqfEoFORUY54XwEdEy9H2sApoaGwtCDAaFfWwLYZytWiSxCut5pVJ0NykqKtbvRHcoDImyoRTZK2s9xqKb8YSEtik8VYru5MMzoPBy08MtPN4FI7oVhRy75UHS/iNF0NHeruxas6dMqDjHSdHtntOt0tMt+oTL9MZR5fJNm4zK5eKesoMVzEvkVTC3QkHNHG6np1ul6BbeikII1cMFm/Bwq/R0WyLQvLbFa757uvc1NiaFb1GA4eUKQ9sRag9nevhxrlERkZb0dCcNecLrzXnd8ig00V1bW0uvWqyKvhCZBUed4HwtuviomLvt/OUvf6EaXli/SyV4b+NzWrQ2lXU/s+jurznd/eAzUChsWJHwxf7jdx8PcMNoGPXvM+GYYfuUF1KzFv4irN18zXfRbXk/o0FVL0+Kbvv7srGfVxU1C9zahRk/l6j3dCs413g8WM0YhbUXidJBVMFcxgNOiGq7V8r42Wj3E4SnO98XjPicaGtttXk/C8vTTTndZuSOCgML9SZvb0+G1Cv0NieNHMnq5So9Y+Tdxn7ZCmuvkOjGtAmcQ0yEAGfRLY9CC3fetm0bveolSdEt3pMN3kc4p4j9qvR067oOCxcuhBUrVsDCRx5RtvbHuQQj4/BeFvezMLD5DYtuxhNDaCsQ3Si4H18AULsUoLsNYntXwLWzNsIx1fKrOaeJMBTaptgXXv6C8XSj6A1HlYluu3eIMF9V7d9+XpV6uh053ZSLGSlS5+mmENgi6VENW7ZsoVetZJDnNkKQi23leLpTRTeFuxeVS3uopl/jIWuRnu8LRjw+qrdi1WlQnNNt3kuB5XSj4Fbo6Q7S2xx0eHkHie6o9ZxWMd7CG2aP3BHpKyrmk0Kl0Ap7pTw7I1G65mQ8I90QIls8t1WK7l27dlkFEtFgr6Kjiz2KwIgsqJRq5GDRzXhCQhsFKIaByhTdi29LvzBDAGeP3Urfq7J2kfASlcsR88GqqnI7Hue9994LDz74IKjEEl5mfpzqnO5keLnaXEi70FbhJRGLURHabQdzMRsULJRxYYrnWHiHZC5UxUMrs+g2fidjQZHMvyxP32+sgoqlyL638VqmKt6Kr+2gsNpImWJbFPZSVb1cM/dHn8EsUKhCgFr3ka1lmIqohsBFtyjgZhPfynK68Tml0NONf596dDuMeGKRLkKCGf+xzx/5Poem1EIxry00TmNRUKVzCq5TIsVKW5WtXbvW2Lc5h4qfVRo5ZK5JEBbdA4ggwsuNQmohuXm2e1a7vj2prFV5eLkIKaf9Ks7pxgf6Qw89BPfff7/SPBq7p1ul6HZ6ulXnQtoXaSrOsVVd2SYMBLhYbtzXqFB0y/d0W9ZjlyJqAgyfs28rpRqpI7yc9otVYTVNeugxie5wso1Uvi8YrXlLeLoVh5cLoZ28z0JKIkiScxlWbY/QglnFAtlZsV1UjVcVXp5q5FBXxE3kcIucbkR2r270wuF+NUdhRs7pVpRjbH6f73Mo1ULZuAkSGN5tOoFE9w9ZnT685hS8v1XVaEAwrBzpGjEz5WfZiHHFcSYjfaRI2liz6M4Su/DrD/ndynK6TU+31GMePt317U3t5epzuu0Fn8wwc1WebtWe17Q8X9MDGlROt/B4qwrBtY+xSk93Wni5+V5XV6f0sReiG0PWxM+yEEJaFCZxQyxYZYRmomeAhJe4vuz7Nb3fuI1MsBq/6n7VQSKOT3UhNcptxsJa9iKF+NyKxpQIUGsOReMK7jdSpER0J1NWSm3HXKLM050yl+GcEo4oGW98VtK6gJ5ZhjCRbSy2Imec8xnNMcWc0y3xXNO9HUCOcRCgsbilpRm0MqOlJpIw22tu2LBBoXOghOYV/FnVGvy9996jOaR75Cxaiy9dulTJfkUHFWpjim0ASwaT6Jax9mfRzXiSDCmXHF4+9zKrNZm1bx3godqJgXq6VYeXqy7slR5ejvmIAYSXh4MppGYX2rK9JAgtRtGQI3LYbagqQkTnFj2vpndI5rmmRSouil2MDBb4+6IyKaJ7F/bodrRnE4iQc+ENl1pUDM83XeOhvM/ptkS3aWQgT004Kl10exm0KG2jQWF4uQi1VmS8tFJWbMeN3++THDWDzyecp51RO1okpkQUifmaBLei8HJ7GycnieJyFt3Sc4wLQ3QLYU0C0EQrq075nTJPd1EJrUtVrMnq6uoonDxeMZL2Ha8YAatWrVZiQFy7bh3NZaLIbaKsmuY4GSHmLLp7gUpPd5BedWPfCjzdM+YDnP4wwNhDAYrKoWPoLPjZ8hpY0jDC9jnkc3BpLdx1wAewpOwyeLDkVji2xMgnUdXCSnW4s5enW1XP07Tq5WG1otsutFV4unGxQJ4/UahPsejG65g8ROSRkh/Kv3PXLkhgaLfL8Tq9zuSV9vGaw+PCQixu+dy0zyL5opuiCrComPB+RosKyNOdNCzh97KP21nUy9p3UQk0NzdJ775BcxYaaU2vK85lanO6bWHeRTHylMk03AojStp4U2RBk8L2nhErDUz2HJ7shpA+p2AvZTSoqbi/0QOHFZ5lR+n0FyzDEkYYhEJKc4yDQOQxY79oAYWXh0JKcpxF9IwWLVXaWeX111+n1/jgCebreNB1Dd544w2p+8V5unb7dmO8zbWKMHKsW7fO9/2x6GZ6LqQm29MthPdFLwJcVQtbTn4AXqvDHJbMi3VfWbUILh+3FGZUtkBpqAtmR7bALUOeoNZlqkR3UOHllvik/LgiEgoqPL/OharKqr+I/RhVHC/2L7bnQNoRi1eZHkErd5/OM1bpD0vzdON4NmH4qcsC9bjIh2TUEsato4c10rXvp0Ubi6Qhmq21jx1RTVxsJwNrAS5qFoSL897T7SbGNKWiO9XTjZ8Dn12yx50MLPY0hohaT7c9rF5FbrVVMC9NdJdAa2uL9PWCeD7aq5eryOn2qhEh3lMhhH/729/Cn//8Z+V9jIPCfm+rShcJEiGsNZvoxrUZhjyvXbtO+r0l6pyg1xej0OzvyeSll16i1/gQI8I1PmRSyvsyxxvXvHYjR6JsGL2uWbPG9/2x6M6SgsnptvXLvmHS63DMkDrQQwF5903NrWTfHhXUz5qwKxBPt/KcbhK/YSVhx14LVdXh5fZFmorjbUFB4hJabvcMyhTdyRBYEc4vTxhYD26H6EXBfVvJPWTUEsatGye9RcYtP9uDiL8lFg1OxPsyW5I4vb4Yco2Gl0LzdGNRNXXh5Q4RaOaUy16oU86pOXfSfsNFNL/IXiC7GRtUiG7LuCKq1Fv7LqbntWwjh/V8tIWXyxbdhqBOtv+zI4yLKkS3MBSqMk47z7tqD7vdsKQidSJoPv74Y0PwOq4zFOHt7W1Sio661onAz2DOJbJF9549e+D999+HeOUo617C2gmJ8uHw7rvvSt3/qlWr6FUrN4S25ekOha3f+QmL7gGEdO3p6Je9X2kTXD9tBRxT3RCQoUGhp9ujgnpNeYd8L3/AopvCyc3CWqLAljLRbQpARHyfj55uPJ9UbVfkujoQYkGmRzBZpd7MOw3Jy99Phqileh4v1J7wNG756elOWuu9RHeJdNFtVbS2elYXG3mweWy0tcSWI7wcQ51l3mOZwp3tv5fFAcVb4M45H1rRG3OH7FEyrxiCJLVOhIq2YWI851bVpkStzB28R8l420W3KKQmOyULhcFRI9vgwdLbrONFI6K9MKPMdBUnKtcICDofvvrVr9LXpk2blO03WSwQPd0l0NTUqMwRohq8Z7F2gPC02kmUy/O+pj07qdhqkfX8lB1e/r///Y+ei/GhU1Le7x46hdbf+HtZCGGNAt8iHKG8bvSC+z2vsOjOknxeKPXk7V0wfnv+H79HBfWNrSXKJni7AFIR7mzfLwowRKWnmwSIEPuIgoraduzHKPt4LQEW9vJ0y6/cbu/HTkj0dHuF+9bEGj2NW356I5PWeo8ibqEwfTaZi4k0T3ekGHQsrqYokqP/5HQXSTcoeYU7iz7hUosvrVoEP5n4EcysaLaiN26oeYeiN2TPK0YF8dQ6ESrqQ+C5xOP71ejnUqNWJrxG78tOJ7DCy6k9m/zwclz/TNXWwo0zVqcc762xe0l4C3EiM13FiaqCp/b9ieeFKCqnAmc1bTwX+VpMDb3cdoFtR7y3erW7g8gvqBe9WVBMhXFa13V45plnjKrlZki5oHvoZHpWP/vss9L2jW3JMKoA6zLYSZSPIMHtdx49i+4cTo7b93mFZ79soyCQKoIY399/UEwV0+3gzws3jzQmhDzMMU6taG0KMUWhegg9wB0hmdbnUYBdcMreZ1p7NCcKisglK/4mDSydnXK8JdaiOxqDsuX/gPL3H6WvTa0lnsYtP71jyYVasm+zE6zM2iDRG5gmQM3XfM7rdhfdMenXtrNVmVJPd4bUJNnzaFNTep0IVaJ7wQQjx9ntuFWJblWebjye08dsS3s/HNLh/KLnrdoRKnJfhRNAtfFOpZHaM9xZYWGvIBCC2k10i5BnmZ5uXHvXNzRYolt0/5B5XX/88ccUOdGNBdTSjKYl0D1oPBU0k1G5HVMl0FAWLzeKNttJVIyQ0iucRXcvyFsB6tUvu61MWYh1ULy0owyuWVEDK5vKoDMRgvZEGLq1EJw9cRccUuZ/O6P+0MIqNR9RVN1V0/NUFGuzh5cLAZ6Pnm6xQJo3aGdKOKYIT1SRz57m6Q5jeHm7dCNDqLsD5g3eAXfN+QAml6MBz9245ed5d2ul5AQ9JyjGZM1tzlBrIUTzuYK5URwxlCyOqCiKI61VmbVv+YYOPUNqkmzvK4baQgCiG8/zpPIOz+OWalhatQj2f/lieHruh3DP+H/BsaXrpItuFHlexzs5vMNqNSTTIyhoa2sPRHTb52eV+eRWqhKJ7tK8Ft1CUNvzi1OKqZUOJpEqqzMBzhkJbJ1rim0x3jJF93PPPUev3UP3Syuyij/Hh+1Hv5fh7V6+fHmKwLYj3lu2bJmv+2TRnSUF4en26Jf98LZxECSqxnvJ3sHwyJaREIvoUBrR6HVGVRtcM+1jI989jzyvdmhhqNjTnVIx3USEmqs6dpWiG48Xwy5vHv+KIzzxHjh58x+hZP3L1nYyP4PT040PbxnpE/ZK6cdU18H1szfSvYT3lFsHMXzPz4WcEBzHln7sauSgzxaJUbi3LIFgpRSIlngKxGfQ4LGJFmkWCoSvawE3RYYObehUz+gNmfcz3mN4/6Z59yPyvft4LjNFrUg712bdmYrGNfSMnlWyB24Z8iTNrTJznDFyxut4N2ijjUilcESJGMTq8EHMI4GKbiz0iuk5BSC6sT6AOE4n6AHHOWXr1q1S9p+shWJe6/jMCkeljXc8HjfyuYtKYW51XVqRVUzfOGZoPRkScTu/1ypCUCcqR6X9DsPNsSvBsuXLfdUgLLqzJG+FdoZ+2R+3VsJVa2fDa/XVwRx/D/19ZeAVMgdLfpOX4Vt4XqnAl02IqRDdzqJehJmbF0R4uexFBB6T17X1rUmbIJTokn7sSU93RPq5trxO4QicMz5ztVURkuqnp0rknN5W/hdXIweGvAuvqCxxkhTdqZ7ufM7ppjoN9ugVRVEc1t92pG8oiSA57BLP1CSZ86gwJBxTvSfFsDTP9PzKFN04ngu3jAQNW5u4HLe08c4Qyi/T042RM8bxpr6PP9/XfRKtVTCqRnauMV5PwsvZolh020W+SsFv5RjTGMv3vAYFRklgqLNbaLlAK5Ob150M5U8WIMWxlzXe77//Phm0uofUwPnFz7unbxT/j3K9cWw++ugj/0V3OApaqdGX283b3VBfD7W1tb7tk0V3P/d0p+wXFOzX1i/7io8PgyUN6WEX+YxXCBnsllu8wim4VFmSk7lxaj3daaHOCIWlRpWF1tvHWLYQwnH2urbGlXbCMdXGQ02mt8bp6ZbZ3zYZsh2CSWU9j63fXQJwUehl5PjZtLUwt3K7dA+sU3QLQagyvBw/g8qiQ61UHDEg0Y3XM3rE7CiILmidcDylJq1oq4a2RIRSlK5ePR1eqxssPc+YomcmvpFqWKp8lN6Xecw4d2Jk2BWtZ8PKlipKx8LXHzV8kY5b2vMrQyi/zLkTRTce74/3zofliYnWeb5q7Rx4JTHHus8bG+Xea/a5A1tQqlyLBim6RUHOfM7ptkLLXSqXC4QgFwXXZFaKF6AXGt+Xca29ZPbgxoJpU8I7PdM34tWTU7b3617CPPE4Vi0Pu0vhROXIlDB0P7CteJlsKQivd4GON4aQYRhsGiPc890Huqc7KcRSc7pVhZeL/Qnw5yBEt2wjBy4Iva4ttDWcPX47vL57f3kLx1WL4JPLroan526GDfFauE//P3hTooHFfs9iTYgZlZmFJoak+nmfU87pMPd7CMNSr5+xBq6sHQtv7ZInBp3eVyE+VbbE+8IXvwhdnZ3wxBNPwNChQ6Xu7/zzz4emxkYIh8JUNA/TCjDKYdK4Ntg0pASadiwBgJOlth/E9IHzi56jBdx6bRTcr82D9ySPOd6zKMheDB0Bkda9EGmrowJEYWiTLrrdDUs6eX7vk+jpFuP5cuJAeHvNDjrmRNlQ6JgwE8pho7zxxroz2NLUZf6QledqF7uvdM2EFztOhrIVT1nHDGONbTAEtrVlH81jIUlRevboBTRS4jiXlbm3RZS5b1WGQzw+qjkzyBCb+RxejsXCkES59zytlQ4hw6LfFbUFwqMtCqjR99FSurfwnFdWVvq2r+7ubnjl1VcphFsrH07zNRoN3dI3UPyi9/2VV16FSy+9FKLRvkvXlStX0r0qhLUbiQrjd+hhP/lkf55d7OnOkoLI6c5AoRyzWwgZHXp7g/S8bpWeV7cqsPYQb9k9QK2/b+5PgF5YpeHleNwK9okPLby2vG4j4Q2WsnA08yCHtG008iBjuyhXam7VDmmiOxIR51WHh7aOTbun3EJSk//Hn3PrlYMpPN7nDjXyuWSde2fFehVFvZzeORTcokqrbLCl0h2HrIFnjnkfFh7yLtw4cw0ZW/CaQ2PT4Zv+IG0OxRzHYwbvSs8JrHiYvL4yDXmWsE7xsoekz6M9FTOT+QyxnlX2SCVEdl0O17ozIZo/ZI61uGdLN7xKBqVwmyFO8BV/pnQVzDnWdakGHmfUisooFrvolt2HPa0LhdXCKn/Dy4XopirlXmD/6JJBsG79eikFQJPjbfd0l6T8zi+WLl0KrS0tEMc2YaEQ3N99kku6SshM3whTiHlj4z744IMPpBdRs/ZfOpjuaz8rmLPozpJ8r96dmVCgAl+l4EePBYYKbm1LFuQho3X9BoDHz5YqvIMoVBKUp9vqs+pctIUiUr1DbvmnKIpkGzlQTOO1ta3dvU93SVgjwTIdjAev/DxIHc6tNh5eMsa7qMgMMdYSsKR+qNUZAMNQ8d7a2hYzQlKbK+BH+75CIanFxe5j0xuwFdrDW0ZlFPs1xQ1Sr3XrmnKkbqgyqCmNnFm1CK6sWUbiGkX2+LJ0ARTC9ChJtTGwwM7ZE3a6Glcunrxd6vFbhjK7AdF8ZMr0vmYsZtZWJvU6M+bvUFo4v/SaIGbdmbqSGpo/lneNphB32aH8YiznDtlFXRiemfsBzddzhzVAON5OHRpE20eZz24hdnXzAlMlfp37Et0hZGN5XkXrR7y+IkW+C8D+wPr16822aJkjF1CUd7S3w44dO6T2RBeI7/0e8xdffJFeu6trrKiZKzovTElXubzz61b6Rrza6OH98stG0Vk/PN2iH7cnoTCF9G/evNm3e43DyweSAFfsbTZyyNUXM0uidt+333679f2wFy4AqF/l2MJcNOKDXwL2RZIqb2+ax1lBz9OU/bqFl0v2sqe2SouSVaVNspFDzBl3bRgL187aaBTns4E/o2CZpr9gGHb8vMY88iAnlbZKWyDHYkYF5WNjq+GCAz8iTz4KhBtWTSTjgwAXUx2Tp0AZrPNVdB9WvgO+PGontf0rCutp441s7B4q9VqnxTd6uc1QU+Hxzsfq/G6GHZW1MdAw610zoQumtsvJgbRfP7ozn1zyPIrXF0bPOOcT9A49vH0CtGptkjteYA69cyJTUBNkxnx4Zmkj/PnPf4a2qSeTCKmA5VINHHj/YMQEdmGwPkZVG409GhRf3VdqFQWVKbqtVoglVRDpaFQmfp2iS9V+3Tyv+MzIN0833i9YrCtRkV5F20mitBqKYD31th471sxt8AlxXkXbQVmiu7OzE159dTFoscqU9miUrrJyk5W60TbLENwi1FsvLoeXX34Fvve97yUN+71cj61atQoSJYMBHG0mnSTKh0O0qZZy7g877DDoK+zpzuEkFVqodSETa0w+XFUVVLOLblXeMHuV6SDCy3Vzf6I/43OHvQy37v+ukhZtougTervbzd6nsuePs659BLYfczO0V8+0vBXSK+VjHqQLmGstSxiUlpbSIvXWYf9KCTHGRSq+byeU6Lb+jy+sWgQ/m7raalGGY+rWG/yBRuMBKqNlWjLPOKq0oFhg84mHYUdlbQwvry/qwk8V+ROS6IYl9lKK8YSkXlv2YmY/rjs1zTu0uHEUecNkgQWIdC2eFmqNuc4qjLb2kH4RnSXzmYV/26swI+bPGz/I/xwinFwrGUSvQYhurGatKqc6WU07+WxAAY6fJZ/W4Vu2bKHjoZxt23rIrdUlhjwj6H2Vcn2Z7dkEQoD7GVXx2muvQXt7G3RjgbRs6x+EQtBVPRlaWprhjTfe6NP+t2/fTpFCrv3QXUS3vdBdX2FPd5YEdYP3l1zyYCq2q/V0X3LJJdb3dxwShhlVaheNtDDGhbmWUC66hfgVCxiViyZ8oGAupmBaRYsRyo/t6yRFFSC0KC0aRB6q9nZ1i5fmscfS1/QnjodQokO+YQfzIHE8bd0PUHQ+vG2ctHONBVcyLVLt3m4w26VVVFRI87ric12LlNA3nVU1cN0SDV4t3w9KoVay6LZZ400BrsrTrVR0exS4skNxU5STKwf0+l43a6PrGm5URN79bV0/Lp5u2d5X5JWuGfDmhtYU71BZeAt0dMgrdoXHNXfYPlgwYQ1FGKDBA8df3NeyjbbWc4u87RHpY437y5Q/T5ifQ3brsqBEN3mXQ2Had2PjLhpvPwpa5RrujK3ZcN84p5WXl0M+sG3bNiuCwbkeotoU4Xsp9Bo9weLcy+jVjaKbao/YJlEhuv2sH/D000/Ta/ew/XL6f/Fh+0Fs5zL473//C/Pmzev1/kUhOmfRurRCnN0nwSvlxmf0q3gde7p7ITpVhpfnkzUv12N21FQIvKAaGQEkLhrFIl1FjrFbmDdOOA8MuQeenvshfGHP76V6m5PeoQhcqD3hsoW8/E+xf+pPjkaOSJQWzrIXisKwI77WNHhMv34bdsw8yB3hsaY3rBJ+tryGcq1lLRKrqqp6XqSahOMd1v+R6nUNhWD1F1+EjSfeC0vqq7O3sPcpfSGZPqErFt1KW/zMvcy1h7GVu99UBo/q/wcw/RRpohcF33aPmgm1cZ+urQz7TzUSh6QLQSuE21kXwxSjeF/LWqscPdQItRY5/M4oFpnHnWq0TbaJkyl28Xg88+fN93VzPpF57JboNr2dKkV3XZ3RL5vyjnVdyb6T4c7yc4yDRPSBRtGNos+1X3WR0cdaL66gZ5efvaMFTc3NcPTwphQv+7zyjb56umtra+Hdd9+FeOUo0E0DQrZgJAB6nt96623YtSvdqJ9L/jz9Pew+YCKMHSmFOGP3wrEl68jwsG6d8X/6CovuAeZxLixCgY23KKgmij/B2EMBzlgoZdGYUtgrEqXFuapCamKBMK9iM004s4q20yJqZGK71MJxf/rTn+g1tvUdqIk1Kg/lF8IHx1p4I2WKIbfK3G6GHfpZhmFnxnx4qORr8NnFB8LFKw6jwkNCdMpYrA4ePLjHRaogZIpu/D8yw+lX14csgwcheV7poLxXu6dbbU63XWhLb/EzYz7ctH6mNV/iKxp2znl7Jl1zlyydBh91GpEVfmOPVLhzQ3qlfPx50b6pUvZt339KTndIvoHeq+2iXYjLMiSeNX5HxlBrZaIbQ/pxHsPqxhJFN65BvOZrrJxOmOdf5jkPytONx19XV5dS6Gvv3r3S95spx1ilwUE2O3futAR1pn7VRDhMLb3E//GTOUVb4MZpK1KE568G/Z2MaX6J7n/+8590PXXbntNY/R9TVbw6A9jpGjEddF2Df//7373+DJgPjyRKh1j7/nr3Y+7GjuLnabvttdt9mU9ZdGeJfSINytNdKFrfOmZRgCigA0fhjYvF094+HOCiF6UK7hRPd1idp1ssVM6rfFupt1kcX0jrhr2dHiFqEkP5LeGDQkiBBzKcku+ZbthpM4XKgx2flnadJRelqR5eGQvk6urqnhep4tN0GQYm3/pIe3hdnfsV4fZ+tiqz9qdp0I2RFHZBZAoEVX3o7UJbRV/dN/YNpflSiGwy7NiQJQDtzwensRRfr15eA0vbRoMsfvMbY46M1X5gLRhDncZ4L1y4UF09Dhuy04R6imKRvUZypkXhGMiOVHJeW9iFoba9GK6euRnuOvAjmFfuf46tExKamMceq1QqPHH+6OrqJLGnFRsh3SjCZSNCmlNaWEkIdw6aPXv20CuOLYY1u4H9qgW43V40gvi4NsZ76vQxRpi7U3iiMc2PaKn29nb4z3//S4ab+JCJlof57plvw7NHvkmdAbAjgOh2YXUGsBGvrqHr4al//avXz1LKoUfjTTRGf3/e4B1GWqOHsUMrGQy6plEueF/hnO4s0fqBp9uoJp7/BNkyLCiovyeGo5ZXQSgUhrY2NQ8UIbhqSluUe5sRtKC6tReSnf9pebqx4qxp3JEZXeCV+4YLOfzCPDUMs/7kJ3PLccqFdHEtLxyyrKwM3m0dDVevrYSzx2yCSaUtVLjt4a3jYEljtfXkwYdnqLsVQuEwDBliFJHpMzPmww3rZsCXRm4mEYCedRTcThEY0gwPpYy8xGTaRvJv4+Li64esgcnlHwLcvcyIaJBYs8C+KO0PC1RZosgp8MQ9ZZ9LJpbLE4EHFG2GXxyy2TW3WeacIu5bS3jakRxyjceJIeVeUSyqRLcwOGCUgYr0IHFtpVUyr2yBmypehGsajPZHskCRjWJBCE9Vonv37t30itWj9eKylPdkQvMWnuNwNJlvO7kWNo0oho6NLwB88pOQD1DBOEp1K6I8YszhRrGb1q/aBEVromU3jc+gQbmFaGdyhGQypvkhup955hnqzd019hArpZHy10vSOwKk1H2xE45C1/Dp0Fz7ATz//PMwf35uz1Ccm7DdmhYz+qEfU10H18/0KJxsGju0kkorNL6mpm/3OIvuLEErh/2kBUIBiM/+5OlWCeV/4nWF1bRxAdHaSWGLMrxwbgs3FES4cFDlbRbn1K3YFv1+cA2EJEYWJD3dSdEt09OdrbCTWZgmKa7le7qRkSNGwGvbdXh27A0AOLSoA9C4bRi4Lco/+hsMra729djfax0FLywtNXpDe6Eb83hfWo94cfHFF9NrpGk7ha7hg/3GmWusxQUVHZNcLNAutFX08+1pnpZdnDET0p4hqxbB1fslW0tmtWj0vT+4S8Ci+Z6se3vhllFw7awNjlZlyWgS2WskZ6tLNDzIvL5C5jNCtBWtoZai7uH1uktUk1+gyNZQcKO3O1qszJgmBLZWXEFfSF9yarMF5y0s7OUsLjajKg76ml8DrDpIquFSFXReI4Yh5e0PN8DVlVPh7PHbjVabprH63foVUFa0HtpmfyHF6OKn6K7NYExrT/TNgIhzwhNPPEFiu3v4NHrPPX/dpdiqg+4R0yG24yP4+9//Dqeccop1f2Zr4MB5UasyIjbOGe/tvcY5DY0duo/XPIeX93NPd2HnkvcP0Z3LDd1bhEfEyDGW3+9TIBZlD20fr7xwHOJlWQ21yn2gp+Z0y+8t6+xBjZ6SOw5ZQ0Xr8PWYamMF52evaideVbqlie6RI418bbMlmCu6DuGuVhg1quf+pLlQUuKeT24npMWz3jYnVi2Cq0b8j87tnQevotC1c8ZtVV4s0L4gDzr/UQ9YdEubw10q5ae0kZJIsmp6+rGJol6yKvNj1IgzjB9z+J3RJNJbTorQ+nAEOiV6up0GQa+WougRlGU4RdHS3NJiCS49ElMmuoXYMDzd5co83RjWrkWKXYuthiTPnyppaWk1qobjcXV3wOu7y+CRzcNhc2sJ1JS1wTnjttBzRIRai239LJCJayL3lLAQLNw6ts9OCSyetm3bNmr7JVrAeeWvO4utOkFPf3d1DeVmf/BBbu0gRVqEXmRcx2jYcAPH4epV0+GVxBxKq7D/377Anu5eeLpl9t7sVzndAYldy0peYJ5uBPO5Q6YtDN/zrY1ST5V/64fRIuqsSXUUar43NBzGn/Vb6XnsXmGKieqpUicn1Z5uu5hOC02saoPrZ6yBa7QaqaI76Rkz35C8MB892shBC3e1WP1HnYS6WsnjLEd09zBvmKI7FksW6ekzWHjw8QUwtTzV89mthZSnb4j8T1wwqBDdQXm63eol4D2GUTQi5Pu5dv+jGTJVyu9p0ehXr1sEe2OH4p0pxYdAT0hfqzjD+O3Ifmbbu27Q/tB7pkB0iyKMXi1F0SNYIiFyRggsXIcKwUWiW0EEi110a7EKo5BaKCylkJeT1tY2gKKqQIqtqqSjox2gpDTjGgGfI1evKoZn8Q0JdWjQ6YD385Xbj4PzBi+ldeDG9gq4J3o6vLdvBdSU980psWiRUZS3e8QM6z3MX8dibT0VW3Wja8QMKKpbTwXVDj744Nzb0BXFMkZ5rm4uM7qcTEzWFPDjOcqe7l54ulWSIroDyenGyqBBHXO44EQ3tq+iPGNFVY7tizKccC9e+QkqhPSnri9KF9yIV7Gt9sO+pchTosbTbfemZupf7bvXtcfWRvJFd6jDe2EY7jR+N2bMGN9zykMZIwvqIGR64H3t9erh+dS8JlGJxQJxcYG1AnDBELSnG685WdeZ04stFqz2dlbfHfG2nE4MHpXys1k09pVPVO6ia/nZI9+COw9ZTcdtFR8y6xUE9eyUHR1Gc7VZtdzYYRQ6O+WJbqcxNFORSFmebqsYovB0R4uho71deqV4BHNgaZ9YwC0UohDzHTvkim6jrWcntfVE8ad6/lQJHqu9+8HFk7e7Pkcw5Nz4wf9CiWL982pbDVy88nCj08nKw8nTi+kbfVkfYZrA66+/DonSatDKh1nvY/46etLd7iPxzMYCa9i6DFMMUrYrHw6J0sGweMmSnAoPi+gANFohD20d23PhVR8jC1h09/Oc7hTRrTiX3OqXrfi5LcZXhMgFlkOvEHt4uYpq2sj5559v5aiRx5E8JUblyA8/TJ3gZOFWbRjDFLunJIuGSPeUmA8wmYV4SkuTVuxMxUrs2/mN130kSwyNHTuWXsOdTT2KbrGtX9iFtJsIw8iCeWUbLYEu2/MZBl15+gaKbhTcWHgJ5xLZ80mPnm5J4kDUvcC5DL+umpcueCn3WEYoataV8n1m1SL4xfS1Kdf0dbM2wsOHr7B6ZQeJW/SBn9BcbStSiJ5uFGiqRHfac6u5Aq7cfBSF1/saOeMiupOebuNVRacT6gmNBmqzXZcWq4T6+jqphmprTRQpgodrJ6XdZ/Sj5PQ3FSTnTWO9iwZht+Ky9lBoXULq5U033USvxTuXp7XtCnW39cmo9fbbb5NhIT40tQjZy4kD4YrOC+n+sa//cOlvf2aLntkpwjsUgviQGopweeedd3oRVWo8N5bUD+0xVUY4Zvx4hnJ4eZYUbMswvLcV5DS7h5fL73vZX3K6rYcXPtjMCVXqInnVIvjp8Odh3LjWlIq7ovCU1PzLVYvgtzM/hAmlbda+scWQnR8qCk80Jt6QUtGdqfKvdNHtlv8paawt0d3hLbpDHY1SRLc9LcMrsuCcYSvhzY2T/E3hQM8nFklzsL61FB7ZMpKiGci4MuFgY8EosT0chaNWDbIWyijC/Q7jz4WEZNHdU76tlFDUHirlS/M0u0RU4K09rqyLwlB/tiIMr+11iX/OI0+3WAgT4SgZD3FhL8PT7BaBZA+v16KlkKgcBUWwUZroFuIaRShhvuJ9XlUl91zX1u6ARKzCen6g6BYe8EmTJklPAVu8b4SV/kYpI81RWFp2HJytIBpPxb1i3C96j4W9cCsUnq9LMG4Jo46odeJM0XlyT++rdi9dajwT44PGpf0Ohfc7H66EO39vzGkLPAsV6nB+0fO0vQD/Xqz2fXj//ffh2GOPzbEWRjirVBn7tn44KNjTnSWazcwWmOhWHF5uXy+oDFNziu5CCC8XoptEoOxwZzPvdP+yZstLggs1JR4Sc9/YEzHTvmUv2lKq3yrwdNu9qZlCE2WKbuOBYR9XuZEkKKTxPIY7vUObhRd83Lj0h3FfsC9CPSMLSppo0eKr6CbPi3u4HD7URR9ruOhFqekbVt5atNQqWkNtaQIkLrkWCubb4teahrDSUNQ3e+hPLgWPiAphUFowYacyg3EQnm4S3bZWacJrJctQHWhhxrRouKKUV9kFVzE0uKWlGbRYck4Vops84NLXRFFb+tvhMLf1VrrPPujw11AbJEVFxVZKiFdhLwTXTOjxnVe6gX6WZeBxiw67cvKKXqforF27lta1mkdtFydehlPsmW1HKxtKOoH+fpb0bk7UfZtP2dOdJZp5QxRUeLnRLVn5MVv7Mh+kKgvXBUWqpzshV3RnqLgru82N176vmlcKG080Qt1x4Sx7sTh0z5uULzSpYhlsiA+DRxtLpXr3Rbgz5m29um80FURJaQmybRy8XlcKx0gsnGd4utMXw7LuL1wQjBgxAnY0ZAgv72iCiopK39qeuIlur8iCTe1lUFFZ6e+1hu1rTn8Y1tz3TZhQ0urZI1w2QmBjeLlmFoEJWnSrmsfRqIWGPGc7q3AehKL2FFEhmFRuCDFZ8yj+XfvaxOkVe6t4OMgEhWaqp7vIembKKD6alZDWumlcZAkhe90Xv0NeM7F9+/ZkPreJ+F78TvaaKAV8hoXCSmreqAKN7e1d3Znbt9o8vudWfwhvwQRfDTz2+9krOoxSdHrRom3nrl2QwLZbIW9jnChSmKlQIfbMTv1QYaovkEsrL6tFqE3Tec1jD20bbxSuM9uL+hFF06u/sHXrVppchHcC4/UfeeQRmDlzJnzjG9+AfCSo8HL7vlR7fJMiP5jwcr2fhJerwAp3DkWseUma5zXAirte+441pVo2pYruVYvgyM1/ADAn9VnFO+HaWZjbg3lBX5ayS5yscTHWFq2Etpmfp4mcJnOzf3VRbCWUwJv+FvVy5O9v2bKFHjQiXytk5lM/+eSTcO6550rZ7/jx42HXrncxtthaLFroGkQ6m2D8tKm+n+/Bgwf3KMIe3joWhti2840Z8+Hy1Qdn7I2Nc7nMazwpukvJ2233fgeFTKOxXQSKfFsRyo+Gj3dic+G8PAhFTcklf2xByjVtZ1NrqWvovQzcKi1P058zvGKSeii3o+CKJOdK3TxOWV7fbOo+YGFGFE+y7utBO5ZYhuL1+hh4qGp/eGun3AKgdm+28G7T9yXyPd3JNZGLUMNq9QG2IPSbysoKaNhVbxX2wpojXvc2UlNsRI9VVibPiZ94RYf1NkWnE+/XaOYUCLvg3dsZNQylKc/sEPXMdoLpFrnc9yKaUESm9NRVprPzQ3ila/+U/9sXehUDdNZZZ8FLL71E32PbgE9/+tMkvK+66iq49tprIR+xC96gPN2qK6gbu1PftiuZc9E/PN0qQvRSCnuZxy3toRJgxV2vfa+uD1nhodLH3MPbPqPuaXn7NPOMQwl3Q4p4X9ZDdKq2Fv544Eqjd7St0jEi02OAohtxCzGn4n1awvfQcrvoxhBMI7JgGhVraTOLHl21dja8vqssRZyrRPYzRAhso3q5mvDyjM+IkNrnpj2UH1/XRqZCXjFjPly7Zn/Y2lacVuuFDEpbRkkX3YEUrjOvM1zEi/BqY4dFUueybEW3r0UZ7axaBAevudUI9w3HqbDUTaP/R/O4zLSoFNFdYg8vr5IuuoWWKN69Kq2wl56I55XoxkivcLyDFt32wl7pxTcNNnUY0Rx+R4hZf99rLdjLFB2K/nCIXDtYPM4ezi4KyW1ti9Eze3liIlze+XWqpO4kpHVDLJb92lVEwog2i0imeQzzyMW2fqzPeuXpXr58ORx++OH0/V//+leYPXs29Yx87rnn4Jvf/CZcc801kE/gJB+U6E7xdCuvXq4ZZhlsEaFw35bILqDw8mQP5QjoIcnFzDDM8vGzU/oYOyvuSjOyZLFv6TmBHt72wV2p+UJ+gxP23kb3NitiUpfSl33VIriyZpn1o8ijxwe77HQCS3R3NBn5VzZEgTWxjZ8MGWLkjnWNmg1dYw9OiywIjWiHitpHobq6GoIA51OZgijV050spNZf6qLIDnfuqfp0PvBGw1B4eWcFCS+7V5/SGeqHYJM2ae2r7EZRpYXrTGFN59pevdwsKiarkndWoltD0T1YeUpYg+SWYSKE3J7TjUXccG7Zvl2e6BaFveZW700J+cXIpcV7BytplaYKeg7hets0vovCXnhvp0dpheCh7RNJyMqqAeN3is7IkSOhaf1Gw5Pn4lBxKx6H+26OR2DB0kOh9eAz3f+wpkG4qxVG1kzNeW0Q6k71jsf2rXPdfv/wdgjF21P+b1/o1coWxYDIW3nhhRfg85//PH0/ffp0q59fPuEUfUGJbvX7FjndwYhuURwlnyZXL4TAnle2Hu4b9Rh5JI9cfpWc3rJm3unHrVWeLRKkIXJeWyoy7ltqWKSHt70hKrfND+YZhxKdrm0IhOiWUoU2w4JNNpkqmIfNyuUyRLcQ084Hq0C8L0t092S0UuXpJtHdL3K68Rkiz3jaU2SMrOJW/aHQp9Orb8ylxmeSJbqDLFyXVsVbQVGxbNJ+0NMtKz0oU0qY7PURebPRqIU5uTYSsUrYsXOHNKcI3lduBb2MwquNebUuHD7cqIEQ7mox6nBES+krLUqrpYo8vq/vKYfhw0dIiwj0auWqTf1sr/7e1KlTydMdNiMWnHgVj+sp5THctpei5aZNS+1+k4mhQw3jP7ZBE+A81tntfh0nIAyhrraU/9sXejUjz5o1C+6880445ZRT4Pnnn4frrrvOujn9+FD9jSCFr/OBjvuWXRk0ua+EYZVSHBpoTaamJbsQwsvxGOkBM/R9673Stg2GV/j0h/3PjZsxH3687t5gFuIz5sMPVx1ErU68kHqNz70M9MfPtsKrEbQvvVd2HPTukZIdJKjxfk50A0RTPW9+hi/1pxz+pKc7PbxcCHEZ4eVuD1Y74v2gPN2yhVqyennM8nQ3NnpXkVdBkNI0Hz3d2TyXVHi63bxiZK6XVLjO3r/ZInBPt06iQpro9iich5ENstdmY5reh28euh4mlV8B67VRcH/3SdS2SY9VQaJlN+zevRtGj3YUuPIJr4JeWJ3/2trshVZ/R7RyDHe2QNvsL6T8LiVKC++x7jhUdr8Lo0aNlPpMsrfRwrz6kK71Wn984hOfgP/85z8QbdgEXeXpGtGreFxPKY/Rhs3W388WjCbE+7m5M3V/ETPC1EkE0JveYnns+0qvVra33HIL3HXXXXDcccfBmWeeCQceaPRN+9e//mWFnecTzklNpQgMWvBjz2gdwkrzyYXoFp7uoEW3CvAY3R4w9DCXlBvXn5HpoUHR/8ygs8l626YVwfLusWTFXV8kxzMjEF7sEOZuOUDRjVU1pYSLBZjDj9XLMWpBFG1zaxfmd49u8WBFoRX2Et2m5XrYsGEQBMo83Si4cR6NFAceXu4W4ZEPnu7+7AW3KvVKxM0r9lTJ6dJa4lnGWrun29azWgbZimlpohsNxR6tCGXOJd3L/gE/nvghzMAWn6EuyiXHllXYK1pF2zCvgl74fiKPCuyOGTOGXt2ek07C5jYynpuyOPLII+neKN671rVqOBaP82qj6okWh+K6dVBZVZWT6MZnBY5dpKs55Zm0vsV97bVWG2s5CPwY816JbhTbe/fupa/77rvPeh8rl6MHPN/oD6JbVHBU3i+bPN0hpceczOk2HqT5FEaU6Zj9rhg5kJEdzbEuOo1CMY+tuxrOb7yYQjJlCyFR9MRewEMQSnQY4ecyoiqw0nGuDzQfjSdoxY+4LCZwgYGFzGQUH8JxREHtFV4uxHg+RmZZXm0S28YcqkVjsC9gT7dM+qvoDvKYQ+GwXONlhhD3reUHSNuXENZ6JBm9IL6X5enuWUzrckX3jPmwZOw3k4bixET48e7PSU8J0175tWvLqgu0JyzRLTOl1KugF76vusaRTES0l1tEmBOxTRCiu7drJExHnj9/PkWYFdWl504vbh5rhdF3JkJkvOvWQnD2pD1wzAh3Q0TR3rX0fD/185/POZKJIvAS3SmRcBix47ZOworpOOZowEQnQl/p9coWvRfOpPJJkyb58qH6G/0ip9sU3arEL+6XBD492EOgJdSHl4s+lEGLbhXh5TjWfleM7M/0NKayRXeyQr4RyZHynnTR7e7pllZJe8Z8uGXTAWn5Wap6R6MVnx5u2DZMoOskxIWFXwYouklcmz02+5OnW7bxFEU3Vi639heNQVPQ4eUBerpl9U7uv+hQLNHL3dN4y/Swu4luYVwSxbfyztONBc0qDyKDxnE7fwjndVwOi9sng2yiDWtd36+JNVm9umWKbi8h9PDmUXnVShafg7jmyUp0txvbTJgwAQbSHP7Vr36V5uFY7QdGip0NDKl/duJ34N6iMyAW0Sl/H18x5Pz6/ZdTZEUKiS76OxgZ+OUv597mdeLEifQabt9n5dC7dzk5AF6JHwCRjn003n7UGuq1GfTvf/87VS7H3q/OlgVLl6bnngxkghTdSXGgtmd1cj9h5Z5uUVRMN/v65lNriEzj7ZYbR0k8knLjChnx8CDBbS4gAxPdukaiW1b7D+TtpuHw7GY1Xi/PfLWuFtBKDaFPIlzXpOUCWoIa+2HHO0AvSvWmCwt3vorupqZm0COxFNHd2bqXevoGJUBVGC8LqZBaxvHUgzU0yMyhF8I61dMdkyq6e4oYCJnXgLSWYW4ouO6aYmNgSFt6dfpN7eWWpxvbBstOXUirzl83GKqHBJu64ff9gp7rLTv29LgtCkW7cBwoYFTZGWecAQ8++CAU134AXePTQ8LPL3rONbIC23ZhHQFBbPv75OVecN7Xe+WsmDzZMFhhYTd7Dr2zywmMNUP+E93W/+krvXIn/f73v4fzzz+fksrff/99yuPGAd2wYQN89rMySxEFg3MxHkh4uZnfrEp0p4j9UFhq5VknlsgmT3eoIEQ3LtzwAfPjfV+B5V2jySO5NzYR4IyF0nLjChm7p1uIbnXh5amiW4SbyxTdQSJEd8gsRkLfm0VMxO9kVoQNdabneWKbkZLSUjkt2vrBtX1QyTa4a/a7sKTsMniw5FY4Zshe+l1zc885gwORQgwvD1L4BunptkS3rRil+F6W6M7WaKRUdCswZr0dm+vqaX6odhJ1RsC14a5du6Qas9yr88ttQRgENTU1tDbwSokShNsb6Nkl89npRV+1z1lnnUWG9tiu5RBurUv7/ZSwuwFncjgZTRFu2QPFu1ZSiDh6z3vDlClT6DXS7l5N3U6krS7l/wQiurGR+N133w1/+MMfaGL/0Y9+RFXML7300sArpOZbTndSHKgtKmaFeGP4bSgM8QA83XTM4UjgoltVeDnycuc0uKDua/SAeXrcFXkruDONqYrxTqZtoOhWE14uLLKhbofoNn+WFl4esKdOVPzEyqx20YvITEcSXmy3Ymr43ghTlOfbmHd++ARcP3sDzCxvtIof3TjxTeqOEKjolnhf99fw8uBC6vVADQ0yRbd1DbvkdMu8vnsab9nh5cldqRObbzUOJ0/z8vh4aNOLqWUVpiYt2TeC7metuFyqp7uQsHtfPdE0CnWejAI9gMihvjomYrEYXHHFFXQNl2xanFZUDavju7FBMyPitDiUblpMjxL8O701LKLwx3vVTfg7Eedjv/3269W+0v5eb/4ThpQfddRR9D3G1IuJ7pxzzoFHH30U8o1+kdNt5riqFt3C052Ix5WF0Vnh5eEI6OFwWvoCw/ibthFSK7rTPN3Bim7ZCGEdMoW2/XvhjZbq6bbtl9AS5E0IKrRcNtE3fu/Zlz1I0R1ccHkBhpdLNjT0tG+ZXnZxDWPKhAVGxYXCwYluXb6n22v/MsUXtgNbUlcN53VcAXPbboOLVx6eUgsERXddfX0gdXd0l1odAxnhSc0kusMd+ygtyy+va67zmB9rpEMOOQROPfVUiLTVU5i5HWxHp+nOKv0hKmaGxLYvpfD6L37xizBnzpxefwa8Z7B3eARz6B355U4irXuTvcaDEt0Y1lBfb1wYmFz+5ptv0vcbN24MvEWGDMSFJiqIB+Hp1k1PtyrB7xTd9s8iG0tk4zGHgvd0M/nn6U5ey8nwclWiO+z0dMfb81p0u/XMFt5nNaI71dMtwvdk7jtIovUexY/KO6SG3/aEzPu6v4aXBybIA+5NLrNquiW6bTULqCAmFgtsMlr75LWnWyF79uwBDetheBy7XlxOVcSFHlBJvoWXZxPy7LfXNXv8TcG7+OKLYfSYMRDb8RGEW3Zb72Pe9hWdF1J1foyswNfLO78OryTmQKR5JxTvXE5h5dgpq69Mm4Z93nUrfNwVLPjaVgejRo+2Wr4GIro/9alPUU9uBHO7f/CDH8CnP/1pOP300+ELX0ht7J4PBBXinSJ+FfesTuZVo/A1LhNV4leIbvRyo7EhaE93kAWAGAXVyxUZlTAqCMMu0zzdpgjP15xuIbrDtlw1IXyrq6uVh5cLz3e+errbKye5vo9FiIIT3brUjgT9NbxcJkEaGoLM6RbC2p7TjWiRWIDh5ck5XrUBR5YjBvdXV1cHerG3954EOQBtp5p883SjM7O0tCyjp1sIchme7mzwK6KhrKwMfnrllWTLKd2IYebxFOGN1fkxsgJfUXCjN7pkI4aVh+HKK6/0ZT43RDdkDDHHtQKuVWZM96+DUK+egpjPfdVVV9H33/72t6lX94wZM+Daa6+FO+64A2Typz/9iVqT4QPliCOOgLfffhuUeZtN4asylMbp6Va1byvEOxS2jlu16MaQMdx3ZyeHl+cb/cXTTYJbkejG40JvdqGFl+NcjYVf7AVi8HscD5mGBiHoQ92p4eVChAcpumV6QDeN/6JnX3bRbqnQjJcyRXd/DS8P0tMtXXRjOLnZUlSAIrypuVna+QhadDs72YhXWceL44zrTQ0LpnlAxdQAAvF0J/KoZRiCRskpUyYbIc8ehYvDbQ306lclbTvZXEd+6o8DDjiACqFhm7Ti7e9n3JbCyjub4ayzzoSZM2f6sn8RLh5pM8LH3RBecCHQAxPdeHHYw4ewDDxWNP/ud78rdaJ//PHH4Yc//CH8/Oc/p7ZkBx54IJx88smUdyITa7JTXEE81dMdDcbTHVLv6ca2NgiJ/XAUOruMn/N5sei2D/awq7i+1bUME8I6bFYrLxTRjQxxGBvw+8rKSqlhqLjwJyNHV3u/ahcmW6htKZtjFD/qHGmF6P2o4UuUixlYdWfdWDcEsu88LaTWE0HmdMu8r1EMavZ8bhM9WkK1Z9rbM1d/lnN968pFNxa5lbku27dvX4qw7leiO4S6NL9EtxU2rmtG7raHpxuLgAVRJR/xO+r0ggsugDFjxxrVzD08/OHWvUa18gkT4LzzzvO1N3pFRSX9fS/CPudz09/MdsOPPvrIEpv4faYvWfzmN7+Biy66iELa0dpx55130sWHnvZ8DS8Pysue9DYbFcRT3lMkukX18s4OR19jJq9RYWxI1ixQa1QiYZ3oSrFkh7o78150Yz6U3diA36sIp8fQ9nDcGV7eJj20vSexJVOMobDGNjsX7D03GaIXn239LihCeSq6+6unO1/7dGOHnJQiagLzvSA76MgU3VbaneXpjqgR3VHvNAXxO7GtuvsqBAmFbWzVVzA3PNp2KDqsu11aaHnG8ZZk4InFYvDDH/yAjFaxLW+mV+YX74NO2/k5rxjF1PbPWExNeLr3339/3/abtTnyoIMOotYAWIkWv8cP7HaS8H0ZohQnnPfee4/i+QVoOT/xxBPhjTfeyOlvYYhdJGJMWHbwPXselAjFQ8sqHlNC0yGSSND7aE21T7CZwvbwc9q3bWtr87zAcfzsVizcj7FvDcKJBH0WsS+3bTN54e1FPnra1l5BHAtW4L5xYnUrJmD/ux0dHRnPP35esVhAce1mRMCFIf4NDKnXw1HaJtOYITi+wpOC10qmycFtW9yH2+e2e2d6+rt47YjrCrfLZKTAyUZ4A3BbMW5adxeAnqDv8T081/Zt8XNaRgkXcFISoX09bWs//zi2zuvBfk3j3xQTnvhsXti3xb/p5nmgazqRoGtBjLH4DPie2/2EYyAWkrgtXhNe9LQt/kyfId5liIFQsh98pnvZa47I5r7HbfFnOs/tTaCb+XBaRwsdN3p+ezNH5LKt2zWO14k4jlzmiFzue5o3MG9LS4CGX13tdH7cxi+bOSLbbXFMtc52SHS2Qri4lHLCMLccjwvPhdf5y2U+sd/32cwn4vPmOkdkuy2KDuOZgfYd4/7HORzfQ48U/q1s5wj7fNLTfW+/Vo4e2gALJuyCmooO2NhSAg9tGgkfdpVZ453NHCHIZlsx3m7zCYJj5zzXucwnme57MZcJnJ8h1zki2229rjE30Z3rmiPb+95r/2K8c5kjstkWj5k83YPGWu9p8W4q5hXXw7ROwXWqfZ2Sy3yS6b53nmf7vYxzGs5t+Hu3c+g2R+S6jkiuQ3H+7KT2UXhOxf2byxyRzX0vjBdauNiaRzCSAOi5Gaf3dD1E14rYNpe1QS7ziXN9ood0Ou+4VsRzkMt84uc6ordrA69tMa+brrHm3ZCoGp+cT4qKqT83Mm7cOM+/3Ret4by+7eB5joaSDjE/tcZhhx0GRx99NLz22msQqtsI8arkvR3dtwVCjTvgqLlz07zNfmgNLAT+zjvvQKi1DvSqUSnzCdG8C4YNH07jKsbca47IOnVLz5JNmzbpmqZZ32f6ksH27dvxytFff/31lPevuOIK/fDDD3f9Px0dHXpjY6P1tXXrVvobXl+f+9znUv5/WVmZ57bHHntsyrbDhg3z3Pawww5L2XbixIme286cOTNl2+HDh3tui3/HDu7Ha1v8fHbw83tti8f9zjvv0DafPOuH+uDREzKOm50vf/nLGbdtaWmxtj3vvPMybnvAJX/Qjzr1HPoc3/jGNzJuu3HjRuvvXn755Rm3Xb58ubXtz3/+84zbHnzwwfrnP/952vZXv/pVxm1feukl6+/+8Y9/zLjtokWLrG3vv//+jNv+9a9/tbbF7zNti39LgPvItO2cOXNobPHrwAMPzLgtHrvg7bffzrgtjqkAxzrTtuPGjbM+wxFHHJFx20suucT6u7t37864LV5bArzmMm07eOon9GOPP0G/+OKLafsg5ohBgwb1eo7An3uaI0477TT6PJWVlb7NEXZwXHq6JvDvHfq9O/XB+3vPU7nOEXgdCPD6yLTtrIt+rR9y+YP60f93Fl13fs0ReD8Iepoj8D7Dcaivr5c2R5x//vm+zRH4GQU4v2Xadtq0aXRsV33pQF3/eVXKV+KaSv3UadGU6yHbOQLncwHO85m2HTNmjDWfHHnkkb7NEfhcs5Np2+rqauszHH/88dLWEaWlpZ7b4j5/97vf5TRH5LKO+OxnP0ufHectv+aIXNYRR8w/i+5l/KqedYxvc0Qu64jLTpmur/zBKL3t6sH6+5cMSbm++zJH5LKOmD17tv7AAw9IWUf8+9//pnM866DM8/V+++2n33jjjVnNEbmsI/Dvivso0zWZ6xyRyzri3HPP1Z966in9kUce0Z988knf5ohc1hEV46bTdX7EOT/q8Z7ri9YoLy/33DZWUkL7fu+997KeI3JZR2zcuFE/7rjj9CHDR/k2R+Syjjjkq5da88mwg07o0xyBWjMTWXu6J06caH1fUVFhVaTdunUr/PnPfyZrxuc//3mYO3cu9Bduuukm+OUvfxn0xxiQJCuIo8U1wOrdARSvc8K51fkPXudBVsl3i7zJJyzLN4ZxBVx1FkP0igIsMiW7LoisnNZsuP3226HmhQsAHOl54VAIrjwmBk+tCW4eLzTysWK7INq4HYrff9T4vn6D8v2fOi0Kvz6s1vr5oOEAT55eCl98vF35NS4rZcT6u1qcjvenc2Mwa3gYVuzR4MbFnSnHKeMz9If2w7t27aK0VtVppW6E2xsDXytkikzoC5MmTSLtKDM9ORPY+1vVqiRkWmSyYtmyZfB///d/JLQxxv2xxx6Dz3zmM+RWF+73v//973Daaaf5/kFxQYzhAs6/j4n1GPb81FNPpf0fDCmwh9BgeA72eKutrXUNk/YK+cCibT/96U8p7CHatB3OOecc+lIRXv6jH/2Iwuc7R86mYgM33ngjNZd329bPkA+sCo8Gi46JR4He2ULVBW+++WZKLcj0d/0I+cCc/e11jdB+8FlQsuk1KN77Mdx///2U2iArvByLAbrlJeF2Q4YMgX/+859Sw8uxPsFf//pXaJ32WQhpCShb+xxdYwsWLJAWXn7WWWdZYWHO8C087v/+97/SwsvFeLuFg+L/FS0JZYWFff3rX4etu+qg5YCvQCgcgsoV/4BxwwbBI488IjW8fNGiRfDHP/4R2mvmQXwItnbSofL9hTBr5gy6BmSFl2Mrx4aGBtd70z7essLL8f7Fubt11qmQ0ENQvuwJOOmkk6gwpszw8ieffJK6bbRNPh704ZMpvLzig8dg7PDBZCz2oq/h5V/84hddr08RkvrEE0/QM0hGeLl4ZjQfdCZAOFlFuuLDx2DKxHFwzz33SAkv/9KXvkQL1OlPHA/hRPp27YkIaD/ZKiW8/Ctf+Qq1i/IKL3/66afTjKd+hY7Onz8/5bqzfwb8Hu95GeHluBbLlEuLz1EsVCQjvPxzn/uclaLjxm233QazZs3yPbx8+fLlcPnll1v30THD9sGCCTthUrmRxvDwphFwwFevJAeQ3+HlOIeKa++uw9bCzEEuaVOjD4aOs/8jJbz8iiuugGXLlkPzIQuoHBN2Zaha8Q+aR7GbkN/h5Q899BD85S9/gaOGNcONs9eldUO4+qOJ8Mq+kRBJdFKIMN77foaX4xxqFdVNCy8PQ0jXqLgy1gaRFV6OHZneeust6B4yCaL1G+GEE06Ayy67TFp4OfKTn/wEPvjgA2g++CyAUNQKLy9d/V8oat0NTz7xhGduc1+0xvHHH+95b+jhIoiGNPjZz35GY+Cn1ig3t33//ffhe9/7HnRWT4HOiUdByaYlUFS/AX7961/D7NmzpWgNvGdOPfVUiFeOgo4Zp6SElxftXgkl294l7Tdv3rwe5wjUl1icDdfUmXp651RiEh/mWOZ94cKFdEPiw+aUU06xFi9YvRyFmQzRjRfZoYceCv/73/+sv48nEn/+zne+4/p/8MZys/biibOfPC/ENrhvvEm04hi94pezYEY2f0+QS+VBvGhon7FSesXP4rWvXIp49LStmAwxpzpUZDwE8LP0dJy59Ab1Oj94EYeLSowbxqzajhNHtmOMY5RtwQWxLU7EPVkQc/m7+BDItm2K2JbOc3EJiW78Hj+T85jxvWwrw/a0rT1fXVxn9t95jTdul+258Po7buNtXetZ/P1srsVM24prLFJsPnzDUWg3r/lc7uVct0XDEZ3bkA467jvRDZFwKK2oVy5zRC7bul3jXucol/mkp/ve+j1d28a1jg+mnsbPa47IdlvMkcN9FYUS0I0FiHSdKqfjeAc5n+CzqzdzRDag+IwUFUOkpCLl/XCsDNra21P+Ti7zSU/3JV5Hl1xyCdxxSBhmuKw5tndVwn4u/z/TXOPHfCKi8/yaTxD7tviZvM51Ls8t59/tiZ6uMft5zmWOyOa+F4tZr/1jLQXnseSyNvDaFhfZYp8ouK+fvdH6HYrg6+dshpcb3oXy8jP7PJ8473scTyFqayrcBWtk78c9nsPeriNwUR8uKYdIsXl+okV0HkSP7FzmiGzueyFGz5m4I+134RDA2TV7YMlHYwGXEUI05rI26Glbu5HMuT7Bej8hPeG6RsplPsl032/btg3efvsdSJQPh44px0N5ewMsXryY2iSLSN9M9Pa+r6mpIQdnUaILtLLk+5HOJhg5ciQ5gWStDbwEuo5jn9Csa8JPrSHAblT4vN5VXwvxSBhKWnbAmPHj4fDDD3eNNvVDa4i87i079lg/h6PGPVQUb6cxwXZhXufSfi9nGwmRUzlRTDi/4YYbKOkdrQ/oMcaHLF7k+IWie/Xq1SAL9IqgwH/wwQdh1apV8K1vfYtudrToKqt0rDjUWewLRYHKfVsWSFs/TFmhJU5I/JgeGj0SDTxkUmXfaCzoJVqBBB3OlM/jjdeTHrEtUMJFSq4xUSwtZFbyFq/2Imr5iHgwhcxiaqrCX0WFdDHOIrw96ErxMsPL0dKuuVQcxorPjfvkV3ZeuGWka5/wf+/zrwJsf0oBCrJSfVC9sntCVns46tFtgoX60vYbAphZ/wzIZlOrx4J/xHQp+8NraPeePaAV2xb/4TC17JLVMld4mSeVuT8Xa8qTjhkZa8Ns7huZa9J7770XdF2DrlEH0LoMX9FY/8ADD4BMxo41ComFOpuTb2px6roxzvydDHqqFo9kigrwY844+uij6VldvGsFdXk55phjpM/tGP1M7UwdrVzDnY20b3E+/CKnmRErn6IlQliOUf3brS74PVrZZXH66aeT2L/mmmsozBlDMJ555hmy/qhp26W2V7YlssnjK7c9hKenOxK1jluF6BbVOIXYFuI7SNEdVF/0IPPY8xkKKXOIbvy+w+wUoFR0JwpLdKPgxkiOlPeUiO6OlNdM4V8DXXQ3NOxzbfOjR0uhq6tTeh9jbFeGfcJXNpVBeyJMr1cvr4GPuoxqvIVWkyOoeTxI0S0r79S+vsSQcjeq4+li3O/ryMuwBHPdQ4/7Cq69uzo7QStOfU5oxRVUrV3Gc0uI7k1t7p7KjabhAb3OmULVZbawkrUmffPNN+Gll16CRMUIiA8x6ll1D9sPtNIhlC6CnmhZYIgyEraJ7nCnkTOPPbplkY2RQ6boRkTqbHHth/SK0c2ycRtv+rmjGYYNG+67cyDc1weY6gcahpJv3ryZbnLMtTjiiCPUPTQDEN0kxkiIBSO66Zgj6oQvCW5ckDo83aq87EFhRTSg4FZsYCk0yMuN15hDdKt4qFji2hTboXhX4KJbhSdOCADMwxOF1LINa+4LQlw7Iwtk9wjvaUxliW6cJ9vb28gDlrZP8z1cwMsGhfclS6fBZxcfSK+v1Q1Wcr6DoKdzHdSzK8jxluXptotuL2/zLi378NtcECkK6IRYvHeIZVhqMw1LdzQcAzDdyAv1Gwx1RrQSh+guqaK1gwxvtwilf2jrOFcDw8LNI21FSLvzRgRiuP7Nt9xCzo+OSUdbAh9/bp90NLWSvv6GG6Q5GIUTMdyVLE4X6kq2FJNFpvEW0ZdZt8XqJTNnzqRXTB1Apk+XEzliR4ypMGwQugbh7lYYM8Z/I0fOM+PXvvY1KnCAX/gw+eY3v2n9LIp25BvJEG/14eUkvDCMSLH3UwhsFCMqPd1iEhViGws42N/PVyxLcThClmMkyGraQSLbkCcqreoRmwUzGpNaCTbd092V4unuKed0oGMJAJvoVlGF1RpXa7y7+sV4yxLdIr9TCGw7QoiLbVSCdzSL7vzxdPc0R6sQ3V7e5v+2GAt3v8EiUkjXyFmglVWTYeni1UfB3I7/B5e8PwNW65NBFps2baJX9LTa0UoGp/zeT4TRf0l9dVrkys+W15AhjQiFobtb9VpFTrgzHjMWEN7X0AAd4w9PH++KEdA55iDYtXMnpdrKcMANHz48RWjbvxe/k/E8yia8XPb6qLq6morylZaWwSc/eaR047jdyIGFCe0dTtC6ImO8czKFYqVwO2effXbaNueeey7kG9aNFZDoJhFmPsRUeT8t0W3zdKsQvnaxTyj0sgeJVaUTC9eZE1yQ3v3+0K5DFmLhpkeT4c16pFjJQ0UUNhHiT4hB2SIw6PNpCWzFohtToFAgCONGfwnnlxUttXfvXnrVi9IL6OhmPuiePcmiMSqFmEzRHVQIeTbGk6CeXUEaOWSdD/v8LNIYzpqwi/KLMdz54c0jobZyCFwsuy6FHXNOk1mjYv369fTqFIGJsmrr90ceeaS0OQrHGr9cCYWlzGfZPLP89Lzi/n73u99R26ru6snQPWKG63ZdYw6ESOseCkHHThAXX+zv1YZCE5+NcRR+JuFuY+3tLLjqF9nOUbLXR6FQiFKIVTJs2DBj311JfSO+F7/zk5xmZWz7UogkPd3JNitqRXdYeXi5NZmh6DUXFipEt7UPEV5uetnzXXRbxxcusqIa8v2Yg1pAi2I89rxX8b1ooSYLo/NBGbSYojuEhb1yrHQ6EAV5qudLVya6RQuVuDnO/WG8ZYpuEWYqBLYdrbhMqujuiXz0dGdjGA3KeBpkP18VottNDOoQghFhOSGwlqg2Q18tFBSG/Pjjj8npIzzb1q7LjCraa9asCW6OCoVAS2hqDVoSwp2x/dh//vMfSJQPg46aY5Jh5Wn7DkP75OOgfNUiePTRR6kQF7bQ8/OZhYU+97S0p3peJYrunsW0mvDyIBBFVcM2I0coLm+88+8pqMDTrT6nOxlerkp0W2HeKH4jWuCe7nwPL6fJDK8vFCd6/k5w/QHR2zZFdBcZ32fqe+sX5eVl0NqcGu4sWwQG7em2FuG6BiHzs6jyTuLYtjR1pkQW5NJKRcZ4yxbdWiw9ckIvNt7btUt+oSnE6KG8iwpeYf7t2zE5oZG5fi4/YdGtNrw8m3VAS4uc52bS05167wrPt6zCkBgFt3bdOkiUDrUiHgV6cRl9rVy5kuYcP6/17J8ZIdCccf6K9u9XXvUbb7wBd911Fxkr2/c70arf5Em0GNr2P5GE9223/QbGjRsHc+bMAT+F4N59W62fRQFQWV03slprRorzck0qxtTqcEJGDnnjLWdmzDOcbbtUim7M6zXCy9Xm+Rri1+iTrarIlH0fIqpA5b6DBC2NIsSZ2oZFiqWH8hQqDQ0Nnp5u8TvpIc9aqudVtggMWpCnLgZ1qQtzJ+jptsZbC368ZUZLYSVjxFnl2C7Ed+xI77vrN6KH8oyqNiiNaPR6TvFzAKsWQT6RTdXmoDzdqu4vleCiP+NsFQpBR0e7lJoJlifbGV4u2dONXuxEPA6JCnejVbx8BNVpkGFMw/v4rgOXwdNzP4Q7DllDP7uhZz4r/hf28jHHePv27XDd9dfTOhuFNBoxkOMiH8KDJbfCkrLL6BV/TvkMJVXQvt+nIKFp1FHJz1oZWACUDPJmKpYQhLK6bmQzjlqkKC/XpCUlJRSFlSK6Jaah5d+srKB6udLwctwXCu4Awssp5xUXywqFb0pYuy3XNt9FN4Y8a7bCXjj2Mtvv9WfPqGwPqKjebK/wrLKyMwo+IbbBFIEF4+kOAEN0G3O2eMX3gkSW4ba2tpZe9ZjL9RQppl7dKkS3Vw9lWPIbyCeyEdQy2in1d9Et63431gGhHuc6GYaOpOhWG16OOcZIotK9Na54X2znF7MimwzDWWWLZTi7dtZGV+Et6tD4RY/OJXN3fV0j4TyMBdHaWlupMrkI1z95+91wW8k9MDuyBUpDXfR6a+weOHnzH6Fs+T+S/79yFBVcwwi5m2++2bfnrFXjxUqL6qLrS1aKTjYebHIE5aGnOxQKGeMt6uzYnCEyau2w6M6lT3ckANGNk08oYlVOVxleLrzN1Dc6HA0mvLwAqpejVR5FNy6I7Z5XFaHOhYhbhWdReEqF6EbLKnlLMBwwEU++VzCebrXQ2OJDFI/THG+Z+ZfZjKmsZ8j22lrQMJ/bIzxSi1WS6JbhCbSfY68eyrB7NeQT/dnTHeQ9J2vfPdc5CUmrh+JVSC2ky51TPvjgA3qNV7q3i0pUGm2N3n//fV/3e0KxsV+n4eyqeaVw++2305fA79Pds5gO+SK6//3vf1NofvfQKRAfOsV6/5zRG12P/VuTNlmhxwIsuBYfNB7eeecdePHFF8Hfgqvmej/RDWUSDfPZrK9xTY7GiXykDB0hpgPEPu4yjPMsurPAErqKPd24cKNCamixVuzpNsKd7X2M1YQ7C4ub8HCLz5CPuSQCfHBQywYzrxjRo6W0oCvEYmqyF4tWhWczjIy+NwW4+J1MLIGNizdzopftec0YqpfHlepTxhvzybXgjRyyPN34bMAQUxTWXmixKvIiyb7OvXoowwj5fVdVwp5utXN4R0d2UQMyDB3oZYygp9EZXp6Ql9ONa4CPPlpmVCm3pUPZwYrmaKR/7733fJ3LR4XdU61iTU5BqkPI56gKUezUG7y+Qllsl3lsH3jwQYoA6hx/eMrvJpW5i9BxpZ1wTHVdekrDxCMpIvXe++7zZW4X64FkWlQcyiSuEbJyakWKSPvkYyvbkpKSVGOaOe4y1gksunPJ6TaFryrRjTcvTaLk6TZOlYoLHvfZip5ukWNs5nOoEL7WzW95uo189nz2dAvPq73Nj8pwZ9W9hIMGqzdTVIHdG4j90YtKlVR2FhM5TvJiopfteQ2aIIV9Si6mGQoqq+hRkKIbQ8t1TQOtxDvvTysx+p5u27ZNqtBy66FMeZhzL4NC83QHtUgN0tMti87Ojsxu1ZDc6IKSWMyzkJoMwyl6Ybu6OiFROcZ7o1AI4lWjqYgi5if7xS7dvXLz6voQXHLJJfRF6DqEfb7WsvFg9zUF77XXXqN+3J3Dp6ekmiGb2txrfuBhnj0+fYz1WAV0Dd0Pardvh6VLl4J/hvmEdY3JNBRn5ek2o07z0REUc9zXIYnrBBbduSyQqHVXWJnoFg9rCi03Bb+KBzguJLBwB1oALcjTrU50p3jZw0V5LbrdeusKL6wKz6sXKtMoVIKLE63IpaVSURnsRkEuWSCmerrj5D2R3U4pqGra7qgVA0VFxlwSon668tv7ZDPeMiKWtmzZkiKs3RCCfOvWZGVcvxBFftA4vXjvEOqhvLKpDNoSYXp9umoBwPRTIJ/I5nkcVE53volufB71bAgOSV0nGR6x1HtXpuH03Xffpdf4oDGZ5++qMSnb+8Er2mFphjP8eeFmR245im4z/VGp6I70TXS//vrr9BoflgwrFzy0dSxlI7nh5QWPD93PEvO+PbOE6NY16z0ZZGWkMp0UQaXLyITG1ixaR5jzDIvuwMPLgxHdwtub8p5ERBi53dON36PFVXZ4u7N6ubHvorws4JDW5sfWW1f02RW/C4J8FN14bVO9ApdCUzj+He3t0gvYicUZPlDxK6bA69qTCMzHkDGBtVjB8TYfrLKNHEcOqadqv15Vf2XcW8J7nVl0D0oR6H7yxz/+kV7jg8eDVlZN/ZMvXn0UHLv3Krhk6TTYXnkQ5BvZ3DeqUsL6EzIEfy5zlKwxJ2+2GU5uITFlhUR0KAyJCvd8bkFcguheE9rPMJw1V0C7aTj72fIaeK3O2UZJ970nfDapjHokBs19SHlctXo1heU7e58jS+qHwrZ29+eylxc8UT6c1ul+9Ey3nllCCGoJqc8sLyGNzy18fj175Jvw5yn/o5/zUXRHcWzJKG+ukySuE7hPdxZYCyTT063KK2Q9ZGyF1FQsjq286mhqTrf4naxeganh5XbBn9+ebtHqA0OUBJrknrr9WXTL9NCI8RTj69XHWFZrjhTrKVqxUXSXBh9ajt64oCt6yyJlAWN6uqWK7lWL4BfTP7Z+FFV/cQGLQhSR8QzJztMtT3RbhabMMRYIQ4dMT01QZPM8zmeDVn99HskS3eTp1uMpDbJkhZdjvvLHH38McRTcZhFfL/RYJdVrwGJqOLf4IYLxb7y8dzC8um8UhM0+0e4714xcd9WiO1oMHU176brIdT5HIzS2V9RKqj3TFe7aMJbmbeq6YPP0P7x1HMBEl/8QDkOiuBJqa/veHcI6f0J065rUZxbOUSiosesEFsHEmhxLGypgwcSk02dmWT1cO6sedq5/DmDiRZBPRKzxxnRerMUvT3RzeHku1ctDYfpSZbl2Cy9XsW9XTze2D/OpL2J2hdRSBT95J/O04JNo4WMvgCR66ooWQEGQjx6aTKJbjLnodSxddOvoeU0oESOF7OkWD1QjvBxDIcNy2yktvi1j1V9ZBi0KGcdnVIZCalgrA1NXZISX2yMKUsjjugXiPAqPkFtkQ1DzaJDh5TLur+Q9E+pxzGU5Rqj9oNPTLanSMQponLdF6HhPoLcb109r1671Zf/ZCg6cV6M+e7qzbWGV7bZufx9TKDWP4nQIGkhFiozd07+kvtr7MxWVQHNzU5/XqkmjiW55X2U+sya2LzPaw1W1We3hzrIJbvtzbMjy+yDfiFjjLYwc8sacPd1ZYD00A8rpNvp0qyukZglrR3h5yu8kQR5tWzg9ES6iAkHojQu66rAMSFjjYjklpxsFYEhJT91CEt1CUNujCgS6ItGdkq+la0qKevW0CMjHkDE3rwEuEP0OhUxjz+oeq/7KyulOxCqhbMVTaW1t7IvCRMkg2LVrJ82nfgphqu4ciUA8rdBUIm893XgeUezhgtUrsiEf03SCEPRCSB8ztAG+NXkrjCvrShvzn62Mwmt7KqSJbmrlRN5HXXp7IatVWJXREqwnElWjaO5BsT59et+7BGQ9T0rwwmYlpE3HDK4ZBw3yju7JqmCvB3j/iugki0yHGi6iugP4PO3L9WCJPXpuyxfdn+hYnPae1x1e3JjeTi2vPN2SRTd7unMKL4+Qp1t1eDlVTceHXDiqpCiL5em29Y0GhaLbns9dCG3DMBczEatKDXMKRyjHWIZHKlvyWXS7tVUS78kO6bcWKNTCSm6uVrZIm1dWLQK4+3g44a1zyBs1r3R9yoJV+QNVhegePj1j1V/E72cIhqLiF4aPo+AOx9vpa97gHXDXnA8oJw9f51ZuBy02iIwwflY6FhQVF6eFlwvPdz56uvE8YkimV2QDko+iOwhRjtcsGjhumL0+RXDbx3zBeCMyTFZUnOifLBblcwfvhnvHP0Xe9umLLzHmO5/46KOPaM2nlQ3LanvRr5v+nw8kn0uZxzKk674/w7BCdqZIhr5W03a2pvULv9aqyfsHn1nO9/xnqJZ915bOqkmQv+gpryy6A69eHiKPZHcQnm4zzFxteHlRWni57CJTOFnpjvwl8TnyMa+7sbHRXCyn5xDjAhqrlwfVoiEfF4vJUH6X8HIz5Fx2dEFqkRS5VUkDDS/HBejjCwBql0JU6yRv1C3D/wPzStYq9ZY5Q/VCZtSQNOZe1mPVX79FtyiiptvyuYUH1h4yeP2MNVafWRmiO1YcSw8v1/tHmzYZ4HnEHMhMkQ352noxE7K8cm4GDjuTytuViW68v26c+hHMLK2j+6u0fiXA42f7IrxxrbNhwwaIlw8zCvhmAba9QsPxipUrfTn+rIW07r/heELbR2lzF0Yy2IW3WCf2Zn3U0GD0IMdCan6CkUT2v+8nMp+XdWF3w47u8hzbNfVsyDci7OnuXwihK3K644pzuq1Q61BErac7EvMlf6avnm4M2cnX/oDCk21fLDuLHgXl7c7HXEQS1GjEsV3bFtEYXeeyRbdYoGCoc0iTWyAlW6TMKx65zedVvg2BYIbqhSOSRfeM+fDL1fun5QLaq/76bdASAtoeweHlgT136LKU/+MnxbFilz7G+e3pxqJDXpENYptCQ9Yc7mXgEGxqLZW6//Jy0fVC9zAA6ABLftPn/WBeNuVzY0XsHMDtmxobfUmRyj6n239P9ye7jXZemepiiBZWvTEYi1o5bsZ3J2ked9No6YZWXOlLLR7V6RtvFh3jbijeMsJq+7iifRg9x5rHzoN8I5Q23rq0cxD8am+AhZcbOd2KC6mFopanW63oTs/plu3pbmtvBx0rShaIp1tUEcY8SydaqbFI37x5M0ydOlX5Z8vH8PIdO3eCriWg/IPH3DfQErRgwQWPrEk3tTKp/+1W3OjJ8yFlXvHIbZ5chIuW0XKLmdlI7sf0dCvoE/56/RB4ZZf3gs5vIeYsxogLxWmVbRnGf5QU41IJCmutJTVX0iyklo+ebmThlpGuVY5FZEO+FgDNhJSwzHCYDBzo9XTDqCxthFjLmruFpxuFpqcBYLf7vJcL69djGg6AVjbU2O/yf2Ss09A2+wv0faJsKBTVb4B169bB6NHZ5YL3nAalPqd7BNT1WBeD0i57Kbqt8S0dknE7t3oNGC3U2fkhvJw40HPNhn//2GOPhd6ies7YGJsJ17xXQ8XTJpW1032G89eSuiGgby2hawxbQcbqPoIF/cBJIGu+QkfIsZEP4cLpr0NNSTOlxmHkGhrS/SL/Rk9qeLkopKbGcm0thG3h5Ur7dJsh5cb3MemebhR5WFHSWdwin0X3pk2bUiZrN083iu4gyDfRjdd1K17boTDluwqcrTJwEY3GJVltw1JEt4oc46BEN+Y21y5Ne3tDt7GQVHHcbgvwsF0dBTTefnu6k7UKKsgTc/1M72I3G7RR0moXFJs53W4tlfJVdIsqx2dN2AU15R2w0VywisiGQhTdMu5tXBi7GThweLe2F8Nd68fCaw1DIARxaQY94enWistgY3sFzKxoSt9oRN+LmIlnvhCFKLixPgM+pyaXt4MGIYiEdFjfUgoPbRsPz5r/TysbYv3/uXPn9ukzZJ32JKEDx05tCEyI7PGuixEttYoL98aAuXz5cqNuTgbRjR71mhcuAKhPfR+vvfOLnncV3QlMBxB/32dkziN4/nAee3bk10ALV0PZ6qcg0lYHWlk1tM06lbaJbXk7bwtiRsz56tii5XBbyV+Sv8D1C6aMnP6wb8KbC6nl5OnGYmZhiDtbRqhoGUb7jwRWvVxFITUhqtPCyyP5G16eUXSbD4SgRHe+5XRbIXc2EeaW94qLuuZ3PDzhvhf2UuPpDsTAghZih1cZvVEPNn2Cvlfl6bZEt7lokZ7TnQV+5/nu3m20d9GLy+Gc8d5h4zj+93WfTEZUGVX6MYTcGV4ucrzzsfOEnZDt1W7nCap1l8z9ir/tVexKSqudaJSEwc9W7g8rmyso5BVDX69eXgPnvD0bFjeOBt0MOZYlDCoqjOiV7mH7w73Rr4KmO8c4ZM57PqWLlJiRK2hIM59TsYhOz6risG55Xo+LfGhsjwVZfWo1anXZyOjqNp5hfo/3/7oO7LEuhrjJchXdaFDHSIB4+YjULjkuxDwqdU8Oe0QJRWOQKK2G5ctXDCinhWUQdc7ddvT8NZ5GzDXYBbEXpaWMCIJffQwASHyQlztk5HSrLqRmhtHgA6VTpadbccswS1Q7Pd3mgzQfRffGjZuoSnmKgcMEQ3qw0MeGjcG0aMi33s1Jz164x7zXyg//rEAEasoW5YF4utEyjBbisYdCIlJCC+Qf7zoZXm2roV+rNjYE17VYvujes2ePURQoHIVJZe4RQRhYf/Wq6fBKYg5oRWWwZ+9e8BvK2zY924WQ0433rpfhTgjQIPtly+KIQXvh4cNXeB63jDoVQti90j0DzgnfBHM7/h9cvPooiihAj1zrwWdCt+llllUnQ4juUKKLPJ1XdF5IBoAOLULzHJyxEGD6Kb7ez0gmQxo+ry4tesoyuon/31dyEdJ+j/ey7omuPbLtdTF66wFGLzTly1caET9eoEd9TYO7RNqgjc7Yuq2rqxPWrFkDvqBg+hDtzURUkuvHMJ2N+Wg8jZhrkcmRXdJSRgQsunMR3QgWU9M0JRVJxUJYiE60ymH4tezCLBRC7uiVraJtlxDVXi3D8k1041ju2bPb1cstSJQOJqu1ilz+tH3nWQEgS3TbFsFeeXllLZvl5w8p6L+ZLdKs8ii8L3oR3j7xn3DJ0mmwuHUS5U0hqgrIOUVPf9BAft9b9fX1oBUZC6dNbWaFZQermkphSb1RL0MvKqNUC78Na0lhbVsI53F4Od67XoY7DDdHgopkkSb2Vy2Cq6as8Gzbhcct45gtEZhp7WUaeGRda5bojhvHjsL7kvdnwPd3f5XmOT8EN9Kwbx9oZiVsxMuQJpgQ3mN4u3HNFimmrigqRbff4433FUY1PLJlJKV8YdrG2RN3wUU12ymiAlsg3jvmCTLw5Hqdr15tCKhExYget8V0BjeP+33dJ3n+nwR60AH8E926OtF9bNFKeLDkVnju0BdpnLElnoXZj96q4J9HRM21yIaExzXhQ8qItS/f/lIeQwskm+gWQlz2IsKterlYIMt8kKM3O61/IQr/UFiJp9syMtj3nYei2wotL/HOK8IQc715JxVc23///RV+uvzzdAvrv72UlldhnrrwcLAFsvmKJbL7kadb9rm2V2zXzePuD2H1QeFnfh4+n2jOrjA8Nw9tHUshp16FvWj/5oIeF+fDh+dWITkT1jPRdniib7dKT7e9TsNmrC6ObZx8LIYjwGvYy3CHQkFsEwTS5hWXrgTO45ZxzDiH4N+NZ/LGSRbdlZWVlqebwP1pcet9v2jHVLvi5LoADWkzKr3XXiFbnrEWKfLFOZIcw57nKr/HG8+zWxEz+7N6VmQ3XDsL4OM6zDWem3vRSZfitQIM5z9n3Fa6t2vbi2kEhsXiVK/h4W0T4JWJczz/r1Y6qM8h/mOa3ifRO6liOazXR8NjwyLQJXGdgMYkGu9h71vvUepC5UdW0Ti85nFOyUfRXWQamO5vnQe/qnoMwiHd95QRQfAulgEAilwMK0fEq4oQc7c+3Yhsr6fRK9th5cTQ+kiR1GJmHR3m4sXZp9sU3dbv8wSRq43ebC+EF1xUOVdJvnm6rZA728PLy5L9UuJQZTnG/cHTLXs+S1bC1SxPlXpPt9EyrD/gZ6QUCW5dt4pdLqkf2mNopmgH6Xc3imToYbqnW2ZYol1gOsO9p+NC3af+yW6LNa+WYXs7i/JTdHt0JRCgMJG1b7yGMoXAyr7WLNEd70wR38ID7ud8rNueC2hIcz6nPPOMfUqBzE5I61JENz4beurJjqBhcdymv/YugtSxzhRgxMCNM9dY8wdGdIwt7YIbVk2kaC0RLeSFiNTs9Tp91SI4euufjP2Hu2F2ZAulbcyKGE4aGWDRWK+IHTTmiGu+rLw8L43lRSJ1pXOqtJQRAXu6exFebr0nGWtyMD3cQnzL9koZojv9IYKiW6an+5ZbbqHX4h3LoGjXKttvtLwU3ZmKqAm0ksEp2+aT91M1e11yWNMqD7eVwcLNI6Bl7BA4Q/YHUljVOOhznQwNTViFzPKxCqpAZcVqyxBqM5TidY1fXsjqCGF5s+3HL9n76OSbk93yX3WA56/x3duN4sCtojYytrSTDABBhdVLM+Z5dCWwR1TcIGfPJKabW71TYUKa3BDYpKe7M0V8+93pgs6d7R4ShjR8Tk2vbEu71lLyjHXdl3OfvJdT30/p9tFWSs9Lv6NY8O9NCme33ittzi0VbMgQI4Ig3NUKGubNOzi/6Dn3HuEzcD+bKergnshM1+rl4u8igwd7z7+5RpLg/j9VlPRC+82gQYM8I3aEMScU74DB1ZlbrA1Uis05Gg16eF7f/XAF1IwbBQ9c+4Dv+2LRnaXHTw9AdHt5umUukPFYUdzqVek3lx4uhtZWeZ5uIejnVu9Ja+GEC8h8E93Cey2EtRv2Xt2qyTdPN+a9Ulito+KsXaBo0VLy0owvce8TKifHOPgkY9nn2qqEi+2k9Eje5vgGQVrtj2yQFD3kFpIqPJOqwsvHlHo8Hxv8L0iJx4tzx/b2GIwv63TNb35LwXXu1vZQmuieexlojy1Ib9vVUQJ3rhsDbzbIW5ijmA41ec/NITPvVOSo+g3+3Ug0CnFTbIP56nd4Od4rXQ6PvnhGXTx5O4wrxVDf5O+wirrIM8b7zY97zS1aIC3ku7KVDE7Pwzrwe5w37fPuyW6ne/BkyMX3OnPmTPjnP/8J0X3boMvsg25nSti9qwN6vREM879Vv5c8om7CO9q4zdqPn5EkI0INIAs0EHil2pExBw058Q7LYJFvxMT9YhqIcZ0i63kVfFzjAKA7IE93esuwqPTw8mRetUs17UgRtLe3SfXiZKoEm2+e161bt4KOxY9s/dCdYAVTzK/fts2YyAdyL+GgaWhoIFHdE1jABgW6mnDn/pHTLftcp7QkMR9sQXm6+4ORQ0oRPBERlQUidNXv8+4a1qvFSajkY1iiON5hJe5GK4yekW1c8npmDtqxRM4OZ8yH7i/eR2kLbYkILE9MhMs6L4IvaLfCkpbxMHRoupDxs0+28Ga7kuima03WmOPcUVlRYQsvlyO60fOInkUBGouPGtFG53l8WVJwGz3KS+Hyzq9TVwJ8Az+TH573pOEi+ezwCkE+pO0V8Ps8u6V+OR9j+Pu2Q7+V098++uijoaS0FIp3r7KKg9lZr2Wuao5gzq8Iu04h3gHFe9eQiD3ssMOg15EkLuyGzGHtfaG6utoj1c405uB1rmu0XT5SYs7jZCDGiywRl5aiwqI72/waR063Ci9g0tOdrF6OyOz/lwxVdPGaRIrouGWJXxQGmSrB5pOnG68pLOiRyFDMgwiFQCupItGtomJ+vnq6cbwp99UlnMwJboP3gSwhWoiebrvoVu35TKF/pHTLMajkdB0Z2/o9p4hzGrKtjrG4lco2M9vbPQTXEKNVnYzj3dg1xDO/WZbXNVM4PT4zRy+7Xdo+o7NPo/zWkz78DJzXcbkh+BCfvKyZxBgJJbMYoxPMsS5Hb7jEORUFcdjM5ZYVXo6Gi3B3u6Uy22Z/Ac6all5IFg+zsXiENf4h8//4Yfhwu269QpCHdLt7h3sL5shTT/ZVtp7szRXw8Lax5s8RWNE6hGpVFB1wWs7X0JlnnAGh7jaIbX0n7ff3d5/UY/68a69uXYeSzW8AxLvg3HPP7b3hZ+5lVOzVDn6eJaEjQGYEyXutY+DqtXPIiNamF9OrMOaEuwxdINOgFiTWtU5zC66FdGnzNoeXZwG26bK8CEGEl4fUhZdbnm5nITVbgQjcRsaDFRePmSrBdnfJMzaoZufOnbTg1WM9W8i1WBV0te6lnOQRI3puc+EX+eTppjoFuk5VSc8btoJasNhTF+yIglRNTU2SLbvqFaBbGCoev2zRnbQkJ1N18jm8vKdFv5+iwFmYL0i8WobFSuQaWNCzhJEseigEd2yqSaveTpx0ne/7FQuzB+sOgJvGvJRS9VbkNx99Ykkg4fRFLd69nfsKRi1gPruzkrjMsMyUgmUoel0MqCi6K6t7mUubJSiwQ1u2Gl5lU3SjEPeTUaNGUT/pUFcr6LGKjGHPdvEX7jQKI44e7d1HOlusvHjbvOIVgtxcOg78DDwW4/lC5Xx4JjwZAJeF+NgQj+MOgNLV/4Wi1t2GISZHzjzzTHj11Vdh/frVkCgfBvHhU63fYcj41WsPgLNHb6R1QsgWWp6pV3fRrhVQVL8R5syZA6eeeir0mhnz4YNpl0PsnT/BpIpu2KCNgkdXRaHsEP/aVrkxfPgweK1Wg2fHXpT2OzRQGNv41+miPyGudYyikZ2iwp7uflxILT28XH71cq9e2TKL79jxqgSLHoMgelXLFN2IlpXorkj5P76wahHcOvU9eHruh9SaAsVYPnu60cuNx3hzzVuUk+VMXbAj2uXJ7EkfBJlSN2RHUSQ93XHlLaSCiizAccV7y+0e8zPf1grb9vD+uSF6pfsd4m95tFM83RiqJ/dc33///VBRUUntF5+d+B24ovPr5KnB6u1bEsMBznjE1wq0ArEwW9w0hnI87V6iH+/+LFWMD67FjlwjTMylkrhf+cQ9Vw93NzSgB9rvSuJOyKtNXRjiluj2e58TJkyg13DHvh7Dnu3iT2wv/n9fcBOzXt0+ttWcDn4iipCFur2jG/F3g6qqejWX4vPouuuug8qqKijd/BpE9qV2h3l27DfgnPBNMLfj/8HV3RdQmLUdew49Eq1bDyVb34Zhw4bDz3/+8z6n0uwbdTRFknxq8zfga03fonlEdrcPdOhQSoOZ/uVWHC5fRXepOY+T4Jbcj5xFdxbE4/Y+3aHAPd0yw8utXtgunm5ZxXcE6In0mtTRYyDzuFWza5cRRl+0ezWUv/+o61fZ8n/QNsIbLv5Pn8HWOY8vgKnlzRnFp+pwdpmgocgrdeGqeaVw++230xdhim6ZxqUguGpeievx47k/o/kuKS2V0sOO45QvhSgJOV61CE6pvY2E7/3V98HcIbut0GqZHFXd4GngQPzMb7bGMVMrJSeSQvzdohdkez9T9m0adNBbdV7r9+Cziw+EO+JfkSK4U4RJotvYZ8flMLftNnpd0jyOfiVbdHuF08cr+y68MlHqFN0kROWmEiRFt8saBMVCotv3UG/vz9Bp5XT77eneb7/96DXSWucIe84s/sLm9lOmTOnzZ7AMCZjiFi2lr8V7h1jtCEXIN4Z4d046AfxEFOyicHkPwvH2PoU7jxkzBm65+Waam8rWvQgRswCaE7yvnQY1K4ceBXf9Bijd+CqN169+dYsvIdj2bh+ixabsyDARRYnRFU5CnUaR45EjR0I+UmGLoBFtAHsTQZENHF6eBYlEHPTioHK6Q8lcPQXh5UJQW951G6Kvoczc6rQWThgCu3kkWfqmDu3Ou/ZVuGjBm9wt7PfVfYYFWysqS+0z3Vc8WlKg+Nx4oiE8L7nkkrwS3RglMcUjdSHWlFrVWFz7+VRDAO1YsUb36s147kclao1exqc/7HtbJbGIII8E5nSDopxu07hEtvkIwKzIDrh+6g64dYv8gl5njd/hWZsC5zg/RbcVGmcuFrJBhND5LQjd+nSHEnK9n4JYrBhCLbZoKAURFWJh5jr2khdv6A3EaJy7NoxNa1mGhurmo34ksfSS4R0KNdoMk6aHTGYOuxDUwsNsRwhg2aLb+gyJTmk53dOmTaPXcOueNPGHBbwwpBw93Ci4rXx6Eul7SJzV1PS9fgHeN8XFMWgvqoK2mf9H75WteAqW7NXhlbYp0DbrVIhtexuK65bDeRJy2jOKbjPKoK/pX1hh/OabboIf//gnAOv+B21TPgWJwePTtsOxd61UjoJ7wys0j/7617+GyZMng68trPSEYahWILoxpUGkKCRKUs9nuKslZZt8o9w2j4tno6yIGRbdWXhfSWAHFV6OAsAU3aJft0zRbYVwh7093bLCvEVBILces/ibfPJ019UZFmnMQZzrbMNhesWuXlUMz1LlUmNh7FtFbY+WFLF966DmhQtInN1xSBi2t3wI+QLeM175aKvrQ2RkILC6uQLjVhA9ndc0hGFGxrURVmv5jRTRjSHdsVgJdCe6rSIx0oWYh3Hpi8P973nvZGKZ+2IRDYmIn6JbLA6E6MgG4Sn0Wyy49+mWVwnWue+QnozWwfoBshermUS3CIGWtXjDkHpc6C9atAiuaF4A55cvITG2sb0cHlk/GH546WcBZItum6dbdi6k3aPsKrrNUGS/vc4ZPd3mOfa7ejmKThQ4O/buNu4lcw3oJf6syu1t9TDjwDm+hSIPGlQFHU3e84osQ8ewYcNSwprT9msW9vIj3Pnggw+GW265GX7yk58ArH8R2vY7ARKDjCiVTETrN1qC+ze33QbTp0+X08LKnMdkPy8t0d3VAk6XYqizmboC5GshtQrxDI1jTreclBEBh5f3gOXRdohuFZ5uFJkpHmcF4eV/+tOf6DW27Z20cOcibLFgD0FXnAeZT4W99u0zjuuY6ga4asZmV3Fw9nijEA71lgaAxsZGf3bu0ZIirHVBaf0qCCc6SJyeUPeA1JBjleC1kyl1wY7KaBZV4JLN7fjT2O1ukPGDktISw0OhddMCQlof4R6MS+NL5Ofqb25zFx4YueN3LjUusDGf2Z7/mGkelSlQ0j3dxqsaT3csNdxZQZV8HPvS0rKMnleZOcbCoPBq1zQrtP0ba4+jyDDZnjES11Tt1zzXmnzRbeX6uoSXi3MgtlHhbccvbD8lI9/2wAMPpOMMt6fXW3Ej0ow1X3T6f36BY+kaym8iPNF+zyN4zw4aNBhCpofViRDjfhWWNYT3LVAcjULZuv+ZY+lNZN9WaYI7VXTj81KNp1sU30OB7STS2QIjR4zIy7aPKYY0NJ5KNpay6O6l6Fbm6bb3XlXg6RbFo9BqPW/wDrhrzgfw7JFv0uvcwXuk7v/IIfUZ8iBDeSW6RWGvG2euca2MiWDlTHs17ebm9MmwV8y9LC2v1c3ZGhKezzwAvckYPfGTnSdRHhoWWMK8NMxHwwWqinZKQSNSN/C4PcX3iOnyc0Ap71NuG6VMxqVtnXILLSGPbhuT0cDjdwGzYcOwxZAxX2CF/kz55KIaLQp1vwVp0tMNKa8qPN20D9FnVfRclSwCkaqqyoyebpnhzvZWfNZ+FS3SjdQE3TJuyEpZcPV0uxTYCsXlCMCecrqrfPZyCw499FB6jTRlV4U+2lRrCUi/OHroPrjzwGWwpOwyeLDkVpg7GGtiJMHzgPedjHts1KiREEFx7bI4EWLczxzjgw46CG688QaIhEJQtu4FCLW7OznCrXuhbP1LECsuglt/9SvfBXda32hF85gQ3aICvgUK/+42Xyri91dwrkTDGaWMsKe7f4huDAMmzFdlnm4h9inXNCxddItQV7dKx9fNXEvvy9r/GWO3e+YaI4lE/oggNG4smJj6AHOCV9pxkQ8NY0soTELdFzB8+PSHYU1rpSU+u7SQcs9nELzaOgm++eEcKrCE1UHTBbdKQoEIbzxuFN/pwjtkGmTkhqOip1t2NWsv4xIe81P1RpEimbzXOsowcIges01lcPXyybBk33ApotuoPNtJnsdv1Wz2zCe3fu5qhZEj/W8/GLSnmxboZmV2zCVXsW8U1WE3Tzd6QUtKfD/XrgUKUzz88sPqU0LrTQ+3EN2ycthTCmyZAhvBNcldM9+Gl8f+gaI6pnSvVuQVMxbofoeWO0V3tDE70Y3iHK+32bNn+/MBVi2Cr5U8Z6wBQ10wO7IFrt//ozTjnayQYwp3ptztdAOLEIZ+5xgfdthhcOWVPyFvJwpvUcnaIt5JRdew+8MvfvELmDVrFsiupi3mMdmGS8yPxznDKbrDZhE1LDyXr4RCIapkDxJTRgTs6e4By7tqil8hgmV7Xc8//3xqEYWVBEV4d+mGV+l3jz76KMjGq9IzLtxkie5JHnmQotAVFrTLFzAv3ut4BWjsuDV2LxwX/Yjy6X0d9xnz4Yo1h1jic0NrqXLPp0pEKLNolZQR0/CUT6FUePyYS40VaPEVxffPVkyGlc3lZHjZGR0HcMZCaVWexaLBKBwYl261txuX6kpq6BiXd42Gq1dPhw86xkrf9bHHHktjfG7XlXDye5+ie2xx+2ToGH+EFEEkvBDHwzswvrQjYz45LSwSXVKK4qT16dbVie60Ku6amsUqebLR0+2IjAklOqR7XVNyPx1tu2S3xrM82nEhuruke7pF6HjY9HSj5xWdAzMrmqA0HCeBOGv5TVLTopw53bIW5yhm999/f4i27EwXf245t+37SKj7ZuTxqIlhGe90vc8VxDMhRJ5buLOf/cidnHjiiXD66adDuKMRYlvfSfldyebXyct+4YUXwJFHHgmysJ6PppFaRRcEXCPgeDpFd6iziV7HjpX/3AwSjFjBloOyiiMKWHT305xuzPlFrzOG+OLEhqHeGOaDOXo3T3lLeq4tVtH2WrjJOvZNHnmQWOgq38J9MYphU1vPk2g4pFO1UjT2yIxwcMv31SV7PnvKO/UTayGShegWfaRle4pUQg/MohJoPfhM0MqMiq+vtk2G89ovJ8PLP4Z+R6rgthYSWL080aVGdCMz5sPL+/+MjvHC3Qvgtfpq+bnkKR7I1LlSVo9ysSA6v+Qlz21EPjkuJu3/R05rOPWe7pReq4oKe6WEPDsK2aH3W7boToah2kQZim4F4fxpReQkV2sXwoMMCqan++wxm5SnRVlFlzqNVDxZohv55Cc/SXNmpCm9G4Kd6L6tye0l18QQxjvK59Z1ab2bPcOdzfewsJesfX/961+HmprJULxnNYWTI3gOiuo3UiTBWWedBer6RqtrsYmGDhKdprdXtoGjP4H3sb0NIOd0By661YeXC5yh3tMqWo32PhKEtwgvx0rPbuztLJJWyO2x7ZnzIFVVeVYBGhAe2j6+58JWAFSRFq87v49fTCp6OJref7OpDJ4dcq40IXZ41Z4e8079pKdexsIAgPUL7h33T/pZuuhWeD1jvtIxQ/ZSXt5zh75Ix0r5eaYRQmYIbNo50DV1otsesUChx7qSCAZ7IRwcZxxvHPd7R/+Nri2/F1DjxxttbiZHjQWiE902jwrRPWGC/32c047LvMZVLBit1mlCgCryELnmGZs9o2WLbus+skWB4fFj/QTZJKvmGwt02a127GGwooBXTWmL8rQocXyijZJM0S28qdHGLepFt0dNjI3tFaCVDLL6OcsSvsLTHe4wPK12UAiOHjVa2lyOz8NLL/0ufV9c+4Hxun0pvX7ve9+TbrjF/aNRAecwVZ7ulDE3vdt20Z3P4eXWfa1r1tzC4eUFWL08U6i31d5HEksbKlw1wdjSThi1710p+3y9vtoSfm6FrrQ8Et0Y+rekfihcvWqadbz45Qb24xT/x0+uueYaeu0aMYO8nxgOe/Hqo+DYvVdROOzWsgNAFl8euanHvFMplmO7R8gU2w8dviLFADCztI4MAEP3vAkqkB0GihxWsQtumPkx5eUJIwfm5x1XbHQkkFF914ldeKkQYemiW6MvFaJbHN9xRSvgxqkfWdfWrJI9dG2NqHvb1/1NmjSJXjd2uAuAbe0xWNw4mjohYBiq/f/IahmG99bdByylSJbT9vxeenSWtSh1eLplL1bdKmqL72VX0k4puCT2rSh9w+npDinwdAvRHTa9rBs7BylPi0p6upulHy8W6cI89qJ927yNtIluiDbvoFB0XwXw3Mus9o4CTQ/BPdHToWPKcZbRwa8K4k5EJE6apxvznLvbYexYuSIQC9KhV7to3xYo/+hvEG3ZRUYQHGcVlJeVmTndaiJ2UkV3cszDHYXj6RbHi/3pZTldOLw820Jq5uQjXlWKbq9Qb1nW3IeuOp2KfLlpARRG0/c8DbILPfWPQlfyoEqJWFG7fqh1vDesmuji6Q/Bfd0nkVjwWxhZec49/F4G42OtmfNOZXnBbLlxIoJkfFmX63U+dOUDUj6L2Pd94/5BguRbkb9KFySfq1zpeoznlb+mLJTevmhQKbqt+wat2IpF99cqjPF1jvuo9f7W5cAqvti66OFt42jOsIM//zZ8LqUWtM3+AoTb6+n9mpoakOGhwXnjmKFmJ4qKZjI2DOvcLC06y+seVy66TQ+J8b0a0Z30dCfnNRTgKhboaZ5uyQWI7KKbDGiJLrg3/KW06112QUicT6jloWlYkSm68V5CoYcFy8Jtdd5Vy3UNjjrqKH93PmM+dHz+z2b0WwSWJybC5Z1fh1cSc+jXIbPAlozaEELM41g7Pd3i53Hjeu6l3Ve++tWv0jlAEYqf5ctf/jKoAq8rI7xcbgsr97ZhyQgSNC5hfrOK/fcL0d3dChWV8o6VRfcA8HR7hXrLsOZiCPOwVQ9m3GZQl9Gawm+Oqq5XluObwqpF8Kv931G6X9FTFj1PWNwKv17dN9rwfIuKxy1V1kNOFMeR4mF15DmLYmMyRffWzvKMeacye6tmjiBJEm1YJ+WzDNvzplH8p2QPCZJx4d3SBcmoiHv7ExGOrCK8PCjR7fR0q/Dqi2P1CveONW7wdX94r+43ZQq8vqMYrug4nxbIbXpx2kIZibTVw6jRo6WIBZxTYrESOHt8rfLorDTDmhnVItvzmqyobfd0t6f8TllIPV7jWlxJKKq1CBf5n2YupApPN4Le7pcTB8IVnRfSdY6RYpu6h0ovCImUlycX5bKP1woxN0PI3XpG27fzk9JDvkIFV09+9zjqA2+fR8JdciqI2+dt9LzaQ51pvwoLe82bNw+effZZ+nrmmWesivIqwHsY72uVnu60PHpMx+pqyXsvN2I3KshqA4iw6O4Bq3hXgDndbkWupFpz96zJ+OvGYgk34KpF8IvpazP3lpXRYgmFzuMLYP+yZiW5xQJaFCW64fA5k+H2I7fBs0e/S6+dk+fCOeGbYG7H/4NzQjcYDznMD9QSvi+kkh4/XXn17r/vmpQxf99v0GBhFODp6DmCRDBihpTPMmHL35ULkt26sVB1sgEXqSpbOgXo6Q4pFN3iXt3Q7T7uieqpvu9z6tSpdHyvNo+nBfLcttvSFsqhrjbyyE6VGCKJ7eBUR2eliB9HuHMg4eWm11uVp9syNCjy7qd6ujtTxlu2R0xUy0bvL4LC+7yW71K02L3hBdIFN1Jenhxf2WONQg/ze6ON29J/qetQ1LSNjDt0/0sABRcKL2d4u2glJUt0C2FN95W9sFeH2mraaJDGZ5eK54abp1tFK7400W0aVGjstbjUc9xfsI+vzDmMRXfOnm41lbTtRbMw5Nqe67y6uVyqNdfTs24Ko2WDT/J/pz21p8CfI+FA9isDvKmPGdYAt5XeY+TZmn0wqUUY9ua2IRYzfoftpXgA7Zg/yxTdH4f3h+s+NvLZk32Mjfx9WeGJ9gI82VznIUlGrfLWLcoFyWvhT7qmLjy471BlIjionG7Li29WElfh1RcL8QfrD3IJ9wbQjv6+7/sUi+6IWW3XDVGJd9q0aSALPLebAmhB6BVerszT7RJeLtvTbS0OFYfU2/dtjbcpjFR5uu3jTTneNkEuG/v4yj5e3NecAw6ASOseAEfP6nB7AxnSDj/8cGmRaZTna2ulZA87RqOSzGstmdfdVHAtrGhczcJeuBZT1XZx0KDBVni57BSC/oT9PpaaMiLtL+cJSY+2WDip6dOdKdf50mWzpVpzXdtH6QBb22JU2GxredJzoqo9hTRPdxb7lQE+rNx7oRstwuzIyg8MUnTff//9MPLYC+iaPvmdefS6pHFUSoE3v8EFGS7O9KIYhfM/tG2853V+V+M8afdYW8UE5YJkS9kBZLhbHh+XEna8uHVC3otuy9NthuCq9HQvbh5nhb/iuK9sHQTXrJgMRQecJqXoEhLGxbkHtHC3bSsDXBy65ZbLzrVNK+ylSAS6iW6R76ssvFxxBXFnv2rxGXCsZddMSIpuw9Nt/178TjZ2oanCwPGJT3yCXqOO1mERzOfGQpmHHaYgz9dW0AxrY3Q2S69obYluW143hj6jgSHfhaA1n3W3GqHmCgquIqNGjYQIVqbHPuxmsTysGZLvVNjmTJn3tNp4iYFcSM0RXq7S053L7/xYMKHAv3rVVMrLm1TWRv2kH946DpbsG043oRQfCbanqDVaMnjl+EaikUD2KwNcHExq6vBuEWZDLCj8XsAJj19Ic8/pli1OvCzzshZtw4YNo8VC+7TPgl5UCs8CQGfnh2TkwDHHKvH3dRwHS9/5CObNO1jKZ0C21ZwO0z64niIqVAkSDEP9797B8GzDaVafbqRY+0iZCLZb6lVY7dOuc1OQqPB02wXgy4kjKAQWKVvxFFSFOqR4pbAFWGlpGSQyeLqF6JYViiqupde2VJGx4QL9nzC5uB70YdOg7OSfSTUWOwt7oXcOx1n2tY3nGufKRLf68PLkddadcuyBFFJLdELlELlF1Jw53c7xDkJ0q5g7DznkEKtXdLw6WQBRiHDxe9ltpLQKozo6etfxWSpbdLtV0450NJEIVB3urRpxjeF1XlatTvTi2K5Zs4ZqNIQKSHSX2e5pmUbL/L5qJfTp1hWJ7qA4+eST4W9/+xs8P/wseDY8FADXEbg+nAgQGVILZWuekRPGNPcy0B5bkCJEnDm+EUn7pSJWtrxmmbnFAmztsWlFCeWQe7UIE8jqh2mv6pyCot7NXteRLIuuaG2CIVMouhEUQ0IQ0WdqrYNy+EhaGxSkYeTR5HU+c0ozCZK6yAgYd8ZvpAoSaxHu7FOuMBw1qJxu6zo2j1VFpfY0AWhC3sBB5dLupxkzpsPSpUuNY4047l8sitO6l8S5zArTdG61OLwcnwNvbOuE4p3L4a677pIa0u6V0015kZI9RPj30SC6q6ldeSE1nMPxek7YDA2qPN14P+O9lYinjrdsLE93V3Ci227UUGHgwDZVOEdrzTuh0+5tbtlF97PMsHq31l3ie9kh3uLvW152LU5OiLFjZ0K+oyrc2YlYZ4a7WukLkbke6i/Y10Ay72kOL8+6kJoYqvwW3cmK1i7edPM9KYuYGfPhpg2zUnJ8MZR9Sd0QCgXGYZciAmfMBzj9YVjfOcTqDS5yi3VzISvDW4GWQ7cwfqtFmA0R4uN3OJUlPnRHUUAz91WaOMHidXcfD+dtv5Kqxc8dvEeJp1uMnxhPN0QBEZmWXTw+jCa5aPPnKF3kgeg50ov/OMNQBaGARLcK4Zvu6e5S5ulOq+xsgp9BpuCdOXNmikfbTrijkfY/Y4acAoFpBhWcV0wjjwojS1qOcaJbWZsbFNcipJz23d1B95SKiA5akDvCy1Ut0ml8sZCarlM4v+x2YanV4tNzulWJbvv1rEJ04zMDe0aHO/ZZed2Uz53ogjlzJKT79RjirSavGp/DuN4UIl8UbyuEatqqUxicohudPRTRIMHh0x9h0d1fc7oDaBmmMrw8mefrJrrl5voOOuIsyu09tv7ncPHqo0j4Yigs9peFaIm8XLEZ82HKTZtg/emL4ZEtI+GcSXuofdidh6yBz+8fpvxjv8GHBgqvn245OmN7H0Q8cGSJ7vTwcokFp8xq8RjSX6R3kaf/+mkrzGrxxjUnqyCMWw9KJ8KiLvOhnjRsGeOsIlfLGYZqfRZzsa5ikR5UeLl1nSsOL8fzmmLkQGGS6JIqBIWgjrS4iG5TiAthLl2QoFcqoU50J6/xZI6xKtFNYg+vL9PIgJ5X2V5uAR5j2BFerkp0o8gO4z7N/asQ3Xj/YgvI1MJ1anO67fOXCtGNoOi239viddasWVL3i4IL1172nO5Qh/G97PByPNfDhg+31kDiM+R7PrfzugpCdKMhK9zdRtE0gwYNgnynVFH0CoeXZ+D888+HvXuN/LjincugaPdqS5D8/e9/hwULFgxIYZ2JZJ6M2/7ltpKyFsPOcGd6LyE9h6eq9lXqnyxAQTit8h1DKKJH3EdQ1IXCYViytwqeH3Z5xm3Rwoxj43eIT3K84+o83Rmqxb+6b6TU68uem+ZFWMFiwjIqKOiH7lVkykJRWyXn9RSE6BZ9hFWIbjynOKZN9vHGQm66rkR0uxVTE4t02aJbnFsS3Ao93ThvlJSWQmvcGGdV4c4pbcO6O0AvLievt0rRHUrsUNq2K3Xf2y1Dh6rxRnHduG2n9bMQ4KrG3H49q4raEcUPMYolMXi8dY/LjlzBdReK3G27G6z3xDNUtuhGRo8aBXv2LKPnpayov/5IUJ7uZPpGG31R1xdFRdyCRFWh1wERXr5p0ya48MILoaamhiwQU6ZMgZ///OfQ1eVYQPrMvn37oLm5mbxwdx60Ap498k2488Bl9HNHh9zq1kGRrPSb7skXHlFZ4renfcteLA9f/VDae5RjLqF/Mh4LPkwiHY2ZN8QKkh2NMG7cON/FGf49/Bzzqmrhrplvk3cfX+eVrpcnjDJVizftPLJENxk6MFTNFibnRMViwjo+8zpXKbqFyBaoDEcNPry8W6ngR6+fvc2OqKYt0xuICyQ0zkVxQe4w3OJivbg4Rs9RNZ7uhDWXq8rhr6Detl2GgUOhCEyK7nbjHtM16UXUBCSw0biBz2fFnm5j3wlL9KrwdCMkBDDM2jRc4v4rKiqVGNSCqk8hih+G2+rpNdJWT59j/Pjx0veNz0OKJjCNaOh5xn2rMHJQqhca0VAEFlALK1Xhzk5EfQC8p8LxdmVt+IJG1T09IET36tWrKYcai7GsWLECfvvb38Kdd94JP/3pT6XvGwU2ej/R61ka0ej12lkb4ZOD6yAf8SyuZXtP1oPNM8cY0RLSF+qxxg1K+ydPnDjRWKw4+l/awd/jIhKLpchg3shmuHG/D2BmRRNd3/h686jn6LqXMt5YLd6Fje0VVuEnWaIbjwcFSWZPdxOFV8mcdMXxiSrxslvsuOW7CoQ3UIXwt88bKkW3FV5uil5VC3MMgaXQWxPhDZQtTNCTTfOGraUSLpYj7Q0wder+0iOGxL1DLdq0bjJ0qTrfhucVewqr9fhaojveYYhBBZXL3Yr2qTDsuO1beCCDiCyg/cc7oLpajZfbuUBXVUUbj7m6eijdx1RErWMfTJ48WcnzQ6RbWbnVXS2GEFfgAbUKoBZYYS/VdQMEwpBC6yQtoSxlI2hUpb8NCNH9mc98hvJqTzrpJJpkPv/5z8Pll18OTz75pPR9u/dSBjh97HYICpmh58mQYxfhKzPX11wco9i7f+j98NyhL5pFtnYbFnzQpS/cugZPVto/edKkSfQaacd8ZnewWIp9W785Y8x2z3BvKcKT2mKlPqixmNw90dMhYbYjkbmIQa8APbgd4tP4IHFaTMj2HDg93SoWbc6eunYhqGqhbL9/VQlf+36F6FXp6RZeT/vYyxZEokq4vZhauM1YqMvsz50uuuP0heOtKjzREt2Kw6xFziOJ7m61otsexaI6p9sS/J2GGFJZuM4qpqZrNOaqQsudc5nK0NvJk2uMPtW4LtAS0tYFGeuhxNG406nM25zMMW4lQyIaiAtBCKoKd3aC93AkGrXWnqrmsaCxG68KXnS70djYqOTGm4Rhry5MLE1v9ZQPOd1exbWM9+RWtZ7YvoyiCmYV77SiCq7f/yM4LvK+1P0KGmZf6FJNXAhF/xFhnmJycyNsCnI0NslgfEmr+2cr75Az8ZjV4mHsoRAPx6ha/I/3ft4oHmde87JFN+Lm7RZh57KiCtI93erCy63FsUs1bfTIqsAutFWKbivH2AyNVCW6xbiKMReiW/Z4W2GorclorEjbXun9ud0KqeFXLKZuwUhik0RYe2Ce13CQnm7FxgYxvqo93Zbo7u4w7ytdqehWOX+5Pb+i+7YpeVa5df5QnVc9bNgwesXwcjSY47pfhXc/aOzebZWiG41IgzBKy5xDC6GImkBoDJnackB4up2sW7cO/vCHP8DFF1+ccbvOzk5oampK+cqVTa3uF/vmdnWFDVRiLUid/XzpPbmie/qe/7p6Xc8v/l/qZ5NEx6QTqH/yivahVE18ZVM53LVvrrR2TkJIixwtNyLtxu9k5WHWdrsLgI2tJfJCmlB4X/QiPHfYA1St/tV206BgegRlim6xSAm3p+fSY+48gvnzeevpNr29hMI2P0GKbue+VO3bGldTbKvydGNPXyTSlhTdQoCL36kycmAxtdJSxaLbDEW1/6w2vLxT6WLVKbpxPlFlWHKOdyGE86tOj7Ejao1EmrYradklEC000dMdCkh0G9W0262f852gPN1Ow7Aqo3x/4MEHH4Q//elPVrRY3onun/zkJ0ZblQxfmM9tZ/v27RRu/pWvfAUuuuiijH//pptuogef+OpN2Kh7L2WAx7armexU4/QKHRf5EB4suRWWlF0G9419gsK/ZT3QK9sN662TyZFdSiYe9DhS/+SNJ8Hcttvgkg9mwPL4RGn7w5xuDOMRwtr1M7XVQ3EsJu3h+kLnHNfre+HmkdLziCyxaYrPkErRjf1OPUS3Kk+3VZRGgacb71lcKKaEl5tesXwX3fgcKQqgcrrl6bZaWKnxdOPfx5xH+7yC3+MYqCi6ZM3TiThFc6hcMAbleU2Gl3daIlDVYtUSvhhRobBNmn3fItc2iMgC1eH8QXq6RZh3tHmnUuErcqjJ020WMxNCXFk1bYxE0+IFWdhLZbePQhbdo0ePphZ8MlNGAm0Zdtlll8HXvva1jNvYw2pra2vh+OOPh6OOOgruvvvuHv/+lVdeCT/84Q+tn9HTneuiA0UYej8xxxVDbtEDiILkvVaJoe2rFsFt09+n0F/0tKPwx8+hAntoIAru20rusX43s2QPXDtrD2ytexsADvN9320VE6Gy6eO09zfEhyuZeNJ6lGPlcImCCB/ckyZOhPWbthj7dN7omlEsZcq0qdLCqdZGpsE1K7bAGTM0mBzeARu00fDw5hHwZl0crpEsuq2q0qJon+SaAami28XTbXq/0RiiJLxcoadbiOuOFns1bTWeV4H9GlZ1zAI0OHSb3S5UeamcefQqi1xhh4/db7xheNkjxVQ3YtKUGiXjnpLTnehWWgQoKE938lx3AMRjSj3dqTnd3VBRMSSw8VbV2ijp6W63jBwqw2DF/kW+sSqcBcRUFRQTId1xs40UosrjLMZaGBELJcc4iAr5AvszStX6oFAIVHTjhJXtpIUebhTchx56KBVVy0YM4UXrh1BDwesUvdLuAewJ/fgCmGo+R0W1dBT+KoS3fcF0ftHzruHeIz9+GODkS3zf9+5p50D52z8z2nSZaHoI7m89GuWh9MVbuujWpOcO7bfffrB+/XoIdTaDXpJqUSRhqCVoG1ngmL66dzA83bIAIGrcK6UN/4Wi8G7p4iStUj4aGaJRqVZGXCiUlpZBwk10dxhRHLIXUk5Pt6r8NLRY722stX5W7ZELqk837a84Bq3QolR0J3O6TUOHQnGA6ShvvPEGVTrWisroWpPdKswrp1tlKG7S89qmvKAYrknwXOuK7yt7eDlWy1fZ01fsS+Sxq9p3amRBp3IxduCBB1IXHVXh3QK7lxeflaoMDVS8bOhQ2NXYCrrZFUGVwQHnD7yPW1ubC1Z0q05nsEfLqJpDC4UBkdONgvu4444jL9Wvf/1r2LNnD+zcuZO+gkJaobPFt6W9hSL0qnmlcPvtt9OXTCxhq8VhSth9fIu9Wmv1kc6aE82c6mGUU708MREu7/w6LG6fosTal9LKyTy/KkS3M/9SEDbfkym6xSLJ3koKvy8rLZVeldV6kFjh5QnpYXt4TBMmjIcIhqrZ72Fdh0inEQkjO9zb2Y9eldcXRQB5W83jVlXYy76IuPrqq+FHP/qR8oVTSYn6UL10T7fxqiL8V0RroOFORHXIjuBIS1EyjzdIT7cqEYjzSmVlFaUQqL6vrDkc90uebnXh5c7xVTXedoOWauMhgs+Igw8+WHnrKpw3xXNzxPDhSiunDxs6lHKqRStClRXE7caFQinsZRfaqkW3/T5WacQrBAL1dGfL888/T8XT8MtZ5CioKt/S2OPeEzrWtFHJ7sUCCYXXem0UzI5sSdtGGzpVirUG943e/BfDR0LnxCOt9yMJ4zOo83RrlvdVtgATgpqKqVWneqIiZoE1VaJb3EkUElopf6FsiU/Rnk5LQJECAYrGuzVr1tDCXI+ZXiJcSCS6lQiTZC57XLnoxiq/lMsdjSkXB8iJJ54IhbKASc/p7qL5RIUosqr0o3EpYVxnKvK5U6KlzOtL5YJRPCPCpjBQuWCsqqqEfTvrQI92QSgcVrZvy7sfwDEHJbqpNRzW/bEVriuE3FNco9xyyy2wYcMGmD17ttJ9k8jWEmTEw7FWmdeOQhvTS8X3hYB9XRCk6GZPdwF6ujHvG8W121feMdy9j+rq+hBccskl9CXzuO2i+/7ukyi821lkSzv6B3IFoKNyekjrVvJATwkvV9C+SuRe0r5dKpiH2+toYSEzLNQaU3OMxXirEAbWg8TK6daUPFySgqRReeXyVE93dwCi2+Z5VVTYqz8QqOi2ebrJG6rAOyWqHGPxIdEeT1UobFJ0dyj3dCeNiF3KBajVIzzeCeVl5UoKJAaZx+52blXlnuKzury8IiW8vBDmMQQ97F/60pekVlh2Q3i2sWieyvZsiH09Uig5xvbnhOrCffb7WuX8XQgMCNFdUFBP6HShi8XbBDIXbdYiJdENLycOhCs6L6Qwb2qh1ToIrlk5BYoOOE36vu2I0Gelnm7QlISX40Jh2PDhEHZWMMdw57YGWjzLXDgmjSzJ/s2qih8le8Kb4eVaInDRrcIbaBWQCyC83C6GVLc2KjTR7RZejt5QFeA5xdoF4a5mCHc2p1Q+Vhde3qE8f985V6pcMJIwwOJx8Q6lwsAyNCjOY3eOL55nVYYGBO8lo02a2oKQhYr9OaE6PahQc4xxbRhEwb4g25XlOwMivLygwB7Gpz8Ma+77JkwoabWqpb9Wp2aSS3qbDRGGwhu/6HfL/wmDIt3SRL/dy56C+bPsydbK6UbBraB9lWC/KVNg75tvGpWGzWJmoiqr8ITLL8JjjjketxZX4um2rLe2nG4VC3ThzabQWxPxvUpPt2ortr34kP21EBargYpuUxSEE53Kxhrn6FGjRsKGrbWg6RoZXFR5fZ3h5SpFt1Nkq/Z0I5j3WlEhfx5JK2YWQHi5fUGu2iNGxet27QEtbqRtsEcuf/Oq7esRlTULguYvDz4IbW1tynuTs+iWB4vu/siM+XD56oOhudnwUKgEhSfecK1xh/A1hXh5VblUMYIL4oTN62rsV42n215NW0XPaAGGj7/55ptUaThRafTdDLc1pLXMU1JITVFUQWp4eTyZ061AgIowWxF2q1p0O48xsPDyAFrtFJLoxv2g4EzgeFMl74RSAwf20d24cSOEE90wfIyayuVunm6VnhL7vrC6s8qwTLtRWKU3Dq8zPNaE2ZJOpfgMcnFO91Kim+YzkePN5Gfv5s997nNQX19PIe6TJk2CQgHXZ0EUMpszZw45fHBtqrq9Z77Do5klxwzbBwsm7IJJ5R3UO/vxWnWWbNXggqGtNVX4IkYPULlWRpxg2juc4eVdShYyKS2sNDXh5XZhHW7flxTd7Ybolt3mx97j1T7WKnO6Q+ZYq/J04zU2pLoa6lqTohtbtlUNGqTkuNErg1+aedyqhIFbjrH9/XzGPsYqi9KgMGhv7lLao9vZXggNiCrDE5053UF5ulWLwCAr/mK3CWGkV7lvvK+waJyuacrHO9kergUqqtVWES9EguzdPGPGDLjhhhuU7rOQwWKz9957b9AfIy/hnO4sBff1szdSz+zSiEav10z72OiprWDfdxyyBp6e+yG94s+ywQk1LcRb12nhKFuUkMXaVtQLEZ9FtugWYsgopKbO0y0st0JoG98b51m2VdcqwuMQ3SoWbtZiHL2AOOaKPN3I2DFjaLFmVKrXIdLVTO+pIhotCs7TLappxzsp77cQLNlBtV8x5tJg8k7tLX1UtvfB6wmFWMgsRhmUp7s0IBEYiOi27U+lpxu9y2IeVy26rdQoRelQhU6hhngzjJ+w6O4B7It91bwS197ZsOQ3oFrsXztrIxw9NCnOpAlf9ILZq6RTRXFduvDFxUPYEV6uKqfbWjBqCaXh5WhVxMVLuCNpUIl07CMvu+yKw0nR3a3UwJFWSM1sG6bKKzZq1CgjjaCrzWgXpiWsis8qKCpKXleBeboT6gp7BY19jFWGHBsVrbHCsroIEoG9wrDKwkckxGyGDZWe7iBzjIP0dNuPVfW+Y8Ux5ec5yHD+QiVIoxLD5AssurMg1ujRI3u3e09tvxYuGM7uJvbPHLcTZEILQwqxNvsnKyy6RPtG4WcT/Cq9rySybX26VYhuXKxg/mVqYa9GEtyy9+/0dIswc7Utw4x815T3JCMqOaO3O9TZkhTieezpdlbTDse7CiK03Cm0VXr2acwxSshs56TS020/t6rz9mOxpPhVKcbs+1ItAoNssxNkWH00Ggm8lzCLQLXXGBs5GKZ3sOjuAeyLvabBY5hGuPfU7jOrFsGvpy2F6ZVGNVInk8rbQU1Fa2NxbnyvRowlc4xtfaMTXVBSWqokvzqKi3Ob6FblFcNWVdj/EhJxqmKOwkhF+6q0nG7TI6fioYrn04osMHuzq1ooo5EDQcFNYea29/LV051STRuv70ThiG67IFBZcMmqaG1eYyoXq/bIDZVRHEgsFkw4P84nWFQsCNEdpJc9yIJm4n5SLbq5lzAUjGGHYfIFFt1ZsHDLSOqVbYccsTXz/D8jmCf++AKYWt4MXmvDTW2lihbntt7NpndMlehO7RvdBRWKFqtFAXi6nRW1hcdbdmh5avXy1JxuVeKAFsbo5TY93aoWyiNGGIV30NBBxg7be/ka7iyqaeO9HERhryBRGVLuOp+Z0RQqw8ux+NA999wDd955Jxx99NGgkiA9zsVFxYGLbtWipD+0+GFPd36Dz4oRI0dSlNbEiROD/jgMMyDJ/wo6PrBk72B4dMsIWDBxt/UeCeIlvwMYe5jRW9svFt+W8dco/h/dOhquBXVhqHYxJnuRbhfdekrVdDWFgKgaq95l5BkrXKwnRXezJUBVeKfQqEAt4gLI6bYWxm1x5Z5uUc051N1q2R5VVngOKsdYVNOGAAp7BUlQxeKSFZZblXu60QO53377QdACTLX4FcZq1SKwUEW3bqaCBenpZs+rmjn0kYULqeuG6nPNMPkCe7qzLGj2xXF7XX6j+19MbY97njg+11Y2lcHPltfA201yxYG1ELcXNFPUXigZ2p7q6Va1WCUBRIW91Hq6RT6xEe7cnJJ3rKbYk/qcboQ8r+TpViu6hw0bRq9GIbXWlPfyXXQbhb3URK4Uuqfbms8CCC8PEvt9rHqBHlS4c6De/QCNHKLlpWhRVwjh/IUKrodYcDNM72FPd5YVxD3xu5ja8OkAtUvT3l7VWgUXbfo0FNVvgMMOmw2g3NOtsJAaIkQgijEtoUwcUI4xGlMU53QL0U25n6anW1VhLxzbPY27AgsvD+n7rMgCVQtGPGZcPCSwcjmE6byrzG8OVnRjC6vCCi8PytNtpW/QdVaYolu1CBSoFgdBtaULerx/8YtfwPr162H6dEk1brIQ3UFdYwzDMLnAnu4ecKsgLrWY2tzLcImW8pamh+Ce6OnQUXOMkgWks7WQ8b2aRbrlGTL3pzrcmcLLqWVYQuli3Qp3tuUYqwp3RmEQRJ/upKc7rtzTjd4w7F0c6u6AULwdhuD3Cgts2a8rlYLQ6EygW9dYoXi6Aw8vN+fSQqmybBedQUUZFJLwDTKyAK/xOXPmBDreHF7OMMxAgEV3D0wq78jw25Apkn0E88NPfxi6R8yB9kQYVrRVw+WdX4dXEnMs76vsKt6ZCqnJ9gamFVJT3N/WaBmG4c5qPd3Y0gf3hWIIw51xHFQt0GnMzWJmwsiharxpsaRhTrfalmGij3E43gHh7nYYorCPcdB9o4Mq7FWIotsZ9lqIolu1ABXPR9ViP8gWbUF62Qs5moJhGCYXOLw8A4MHD4atHWUwtdxYoNpBQVy64GGA6aeA78yYD00jjoQvfelL0F09GTqmzDHeVyS6k57ujsDCy4Oqpm3kdGP1crWF1NDLijnF2+uaycs+dLS6ol5JQ0c3hfVjyx1VCzfaDxYsMM+zytw8WhibHna811USlKc7WdirsHKM+4voLhSPXFBGJeSss86Cf//733DEEUco3S9Gzvz+97+H9vZ2mD1bbgqYE/t8HdS1rpogvfsMwzC9gT3dGbj//vshfuT30tqF4c8vVS+QI7idD05TaCMhRXnGzhBv43s1otvp6VbVH1xgjK2uvHq5WLSFu7GwVzt9rwp7r24U3vizqlBrIULE9aVy8WT3RqnuVx2UKLHurwILL5dtqPTC7tkuKS2FcLgwHrlBiu4zzjgDFi5cCEcddRSoBsOsUeyrTFUJMoS/UKMpGIZhekNhrAD6QP2Io+CaFTWwomMEtOnFsLx7LFUQ31p2gJqHqE10i5DnYHK6O2nRKHvflgiwcrrVVlm2xt0Ms1a5mCFvq3m+MfQ5CE83iW6FIbBisSSuNZWewCDDQQPN6ba1sCqUcOegRHdKheUC8XL3l5zuQqJQIijs8DXGMMxAozDikPoAeiawT/cLpSdD96hZEG7ZA+V1/4aJki3ZYiEuCnoRitpY4SLJ6N2c2qd70GD53sB0T7faHGOxQAxp6kW3XfipFIFWhWWtm75UhhwnRXeHco+FPWpDtcfXfl2pFN3Wue4qrGra/SG8vJDaGtmvbw79lc+8efNgy5YtMGPGDCgU+BpjGGagwaK7B5JhYnrKq+wwwSDDy5HKqipoa2xP7jvRCVVV8ltYpfXpDqKQmk3sF4LoTg0v71Lq/bREt2ngUSm67deUatFtF4EqvbCW6DaNeezpVueBLCRvpH3eDCrKoJDAeiDf//73oZAIMoWBYRimN7Do7gFLXGOxJ/urgv3iYiVuhpQb+1aXZ1xVWQm76xvN/WqU362ipy+KERReiSALqSEBiO6gRKDwwIW7O+j6LgswvFyl6LYfp2qPb9B9owvN+4qFrQ455BD49Kc/rXS/hVph2T5vqs5vZgqDoKKFGIZhegvPVD0gFgwh08MtXlVY7/Gh0mUPL1fYxgoFNgkhW2VpFaIb+f/t3Qe4FNX5x/FzkSoINlQERRDEWEGa2LAbFAv2WKJYsSR2BcsfDCoWLNg19oYlKkkQY++9dzFqCCpGUBRQlHbn//yOzDp32d27F+bM2Z35fp5nH7h3ldmZnXLec877npatWpnZP83zEnSHUyHD7WYh6P5tynHyeb4+g+5oxXKfOd1JigbZTZs2y8wo5EorrWQuueSSxLcbnVqdpZFugiAkeY4x0g2gGhB01+O3aeR1R7qTqEJrHyTzo9PLkxvpzgXYmnI8P9mgu1XLlua7mdO8jnT7yOmO7qOXoHvezx6D7l8Sz//s1auXOfnkk+3f+/TpY7IWdDdvkZ0g0GenrZ4VtbW1mcptJgiCa9EZFFlJkwFQ3Qi6Gzq9PBzxTmDKXJMmTY2Z9+s6wtbCZaySaLyFAbaC3qSWCwvZJasWTKkzzTvxoHvhdpNsKLdt27bg35MLumd7DLrnJj4aqMB34MCBJqvVtJfOyNTySpGl6eVZmUEBvy699FIzY8YM0759e74KABWPoHsxc7qTaFQ0a9bU1Pw4x0tO929rdc9JfK1su53a+XY6vQ36a2oSyz3Nz+lOckRSa7xefvnl9pzr1q2bh5zu2Ynn+eam8y88t7MyGuhrJDCrhb0qQVbObWGkG0no0aMHBxpA1SDobuj08oSql4eNtLBiudQszOlOYsSkzkj3gmRHunMjr3bb8+zPSRzvQiPdSTYe1bmgwDtpYZAdTi9PMhjLP5ezMhroa3o5Qbc/WQq6yekGAKCuZCKZKpYb0fYw0m0DvjrrdPsY6f4tpzupKd657WjdaAXdCVaW/i3oTr6Qmi/5QbeP6eV2+40aZaax7mv6bVaraVeCLNxLQkwvBwCgLoLusoPu2sQLqdmRbk2zXqgmwZzu/LWbk5xeHm7bjnTXzjMtEwwCcw1jD4XUvAfdC8/xJEe6o+dyswyNBBJ0Z0dY/yML95IQQTcAAHURdNcjDK5rFgbbNaY2saDbjkQp0A5H2RcG4EmMUOVGuhVwJxx0/za9XCPdcxMdec2NdC885lloKOefT76C7qYZGnn1FZRE71uMdCcjyNC9JJSVGSsAAJSLoLvsxnHy08tzAUk4yp7gSHc06A6nlycVdOcKeWm7tQsSm9ZeqGGchYayzuUmntYTrjPdmZHuRBF0JytLgSgj3QAA1EXQXdHVy5vVGeFOssJznaB7YVGxpEe6fVTTjgbZ+o6TKuDmW/NI8OtrpDsLHRyVFJRk6Xj7tMIKK2SukFpW7psAAJSLJ2ODc7prEx/pDnO5w+A7yZzucIq3JDXN2+e60dFAJEsjU9FAO8kR0OjxzlJQUglBd5aOt0+nnnqq2WGHHczWW29tsqISzm8AACpJdqKKuIJu42N6+YI6wXcSQVEu0FXAXTvPjlwkNQKaC7rn+h3pbtIkO0GJr6Wk6uR0ZygIrISghJHuZPTu3du+sqRLly6mXbt2ZsCAAb4/CgAAFYGgu8zGcc3CYDus8Jzk9HJVMLdb9xB0/zq9fK5psfTSuSq8roVBdiMPS1jVDbqzc3nUqSLOSLdzBN1IMwXcY8eO9f0xAACoGEwvr+Dp5b/ldIcj3clVL9f+aTu/Ti9Pdtmu/HWj/Y10ZyfnNXpOJTninNXj7VM4zblz586+PwoAAEAmZGcobzHl8nrz1ulOeqQ76ZzucIR59s/zbdC99NK/FgNKQji9OQy6k5zuHM3jzlIQ6Guad1YLqfl01llnmVNOOSXRziwAAIAsY6S77JHuwFshtd9GupObXh4G3TW182zQn2QDPRd0z/+lzs9JyOrIa52luzxNL8/S8fZJaSIE3AAAAMlhpLuBI91hTncSla1zwWc40h0kN71c1DCvWTDVjrAnmVed2++FBeSSDBCi32uWqpf7Cn6zOrOga9eu9jzfZ599fH8UAAAAOJadqGJJC6nl5XQnEZAtmtO9wAYmSa2B+mvQPS/xwDd/W4x0uxcNeJMqmJe/rSwF3aruPGHCBNYzBgAAyACmlzd4ennyOd1hLrf+bJrg1N9o8Jtk0J2fU5zkdOdoZ0olVJhOSiUs15WlmQWSVOcZAAAA/KLVt5jVy5Mc6f6tkNoC0zzBANTX2s0a/fSVYxz9XishEE1KJYwyV8JnAAAAAOJG0F1GALiUArEKWTIsyeDX10h3fqDta3p5lka6KyHgzdpINwAAALKBoLsMjZdaKpfTXeNxpFs53UmO+voabbbbiwTaSY44RwPtSghEk1IJ+0rQDQAAgDQi6C43GPAwvTw3wpsLuucnGvz6ml4uzSKBtq/p5VkKAithX7M0swAAAADZQdBdhsaNm3jO6V7wawG3hKeXR0eYk85vjgbaSW47q4XUKiHoroTPAAAAAMSNoLsMjRsv5XWdbjvSvXDN6qxML/cV8DPS7Q9BNwAAANKIoLvMYCC3TndtckF3GGzanO7a7AbdSW47OrqdpSCwEkb1s3S8AQAAkB0E3eUWmfKc0x0WU8vK9PJoYa8kgzFVq/exXd8qYV8rIfAHAAAA4kbQ3dCR7oXTvBPP6V4YdCcZ/FZK0B0NhJOUpSCQoBsAAABwg6C7gdXLa1TQLKEllrRdG/hFRrqTnGod3cekl5SqhCWsshR0++rYyOrxBgAAQHb4n1NapSPdSQUITZs2M3PtSPeCxKeX+wy6kx5Zr9TR36R07tzZntN77rmnt89A0A0AAIA0qrqR7jlz5pju3bvbkbm33347ueBrYdAbjngnFSA0b97M20i3z+nllRDwNmpUdZfHYtM19cgjj5ijjjoq06PtAAAAQNyqLqo49dRTzaqrruqnkFoQ2BFv/ZxUgKAg21f18qxPL6+EwD8L+3vMMceY9u3bm3XWWcfL9gEAAACXqirofvjhh82jjz5qRo8e7SkYCeySYY0bJxcQ2qA7WJC5nO5KmGpcCZ8hC/baay9z5513mi5duvj+KAAAAEDsqmYo75tvvjGHH364GTdunFl66aX9BN1aoztYYBo3Ti4Y+3Wk20/18ujIZ9KjoJUw0k3QDQAAACATQXcQBObggw82Q4YMMb169TKTJk0qO/9br9DMmTOXLABUEbVAI93JHTYbZNuc7uSnl/sMuithajdBNwAAAICqnl4+dOhQmxtd6vXxxx+bK664wsyaNcsMGzasQf/+qFGjTJs2bXKv1VZbbYkCQOVzhzndSbFBtvLJa+f99rOHwDfpALQSAt4sFVIDAAAA4IbX4cSTTjrJjmDXt5TRk08+aV566aVFAk6Neu+///7m1ltvLfj/Kkg/8cQT64x0L07g/dtIt6aXewi6FfDPn1vn56SD7qSnezPSDQAAACANvAbdbdu2ta/6XH755eacc87J/TxlyhSzww47mHvuucf07du36P+nADWOIPW3nO4Ffka6FXQvmJN4Tnd0tDmLI92V8BkAAAAAVDf/ibNlWH311ev83KpVK/vnmmuuaTp06OB8+9Hp5RrpTjIYC4PscKQ7yaB7pZVWMt26dTPNW7TIHfOkhMXyNNPBF4JuAAAAAJkIun3LjXQrp7t2QaIj3bmge0Hy08u1reuuu874oJkMyqnu2bOn8YWcbgAAAACZDLrXWGMNW9E8Kfk53UnmG/+W05389HKfNLI+aNAgr59BhfwAAAAAYElQnrkhQbeW7QpqEw18c9vyMNKddUwvBwAAALCkCLobEHTX1M63f2YlpzvrmF4OAAAAYEkRdJchDLLDoNtnTnfSS3dl0Y477mj/bN++ve+PAgAAAKDKEXQ3aHr5r0F3kjnduVH2YIH9k5Fu90455RQzYcIEs9566yWwNQAAAABpRtDdkCXDFszzNtIdjriTZ5xMAbVwyTIAAAAAWBIE3Q0a6Z6X+Eh3NOhmajkAAAAAVBeC7gaNdPvL6U56uwAAAACAJUfQvRjVy33kdAv53AAAAABQXQi6y5ALshfmdBN0AwAAAADKQdDdkOnlHnK6oyPdTC8HAAAAgOpC0N2gQmoLEg9+CboBAAAAoHoRdJchXKYrXDKMkW4AAAAAQDkIuhs00u23kBrTywEAAACguhB0V3hOd3RbBN0AAAAAUF0Iuit8ne7otsJp7gAAAACA6kDQ3ZDR5oXTy5MMfhnpBgAAAIDqRdDdoOnlfke6k5zWDgAAAABYcgTdizHS7Sunm6AbAAAAAKoLQXcDRptrglr7J4XUAAAAAADlIOguQ34Ot6+gm0JqAAAAAFBdCLrLkB9kJxl0RwNtppcDAAAAQHUh6C5DfuG0JEecCboBAAAAoHoRdJchP8hOsnp5TU1N7u+MdAMAAABAdSHorvDp5VHkdAMAAABAdSHoLjPYjY44+wp+CboBAAAAoLoQdFdRbjVBNwAAAABUF4LuMkUDbYJuAAAAAEA5CLoXY5SZ6eUAAAAAgHIQdJdpKUa6AQAAAAANRNBdpsaMdAMAAAAAGoigu0zkdAMAAAAACLodIacbAAAAANBQjHQvxkg3hdQAAAAAAOXws+B0FfI50j1ixAjzyiuvmH79+iW6XQAAAADAkiHoLlM00E56ne4tt9zSvgAAAAAA1YXp5VWU0w0AAAAAqC4E3WUi6AYAAAAANBRBdwOD7pqaGtOoEYcNAAAAAFA/oscGBt1MLQcAAAAAlIugu0xhsM0oNwAAAACgXATdZcqNcNfUlH1wAQAAAADZRtDd0KA7CBx+HQAAAACANCHoXoxCagAAAAAAlIOgu0wUUAMAAAAANBRBd7kHimXCAAAAAAANRNDdwJHugJxuAAAAAECZCLobONJNTjcAAAAAoFwE3eUeKKaXAwAAAAAaiKC7TBRSAwAAAAA0FEF3A0e6yekGAAAAAJSLoLvcA0VONwAAAAAgzUH3Qw89ZPr27WtatGhhlltuObPbbrsltm1yugEAAAAADdXYVIn777/fHH744ea8884zW2+9tZk/f755//33E9s+Od0AAAAAgFQG3QqwjzvuOHPRRReZQw89NPf7ddZZJ7HPQE43AAAAACCV08vffPNN89VXX9nAt0ePHqZdu3ZmwIAB9Y50z5kzx8ycObPOa3GxPjcAAAAAIJVB9+eff27/HDFihDnzzDPN+PHjbU73lltuaaZPn170/xs1apRp06ZN7rXaaqst9mdgejkAAAAAoKqC7qFDh9oR5FKvjz/+2NTW1tr//owzzjB77LGH6dmzp7n55pvt+/fdd1/Rf3/YsGFmxowZudcXX3yx2J+VkW4AAAAAQFXldJ900knm4IMPLvnfdO7c2Xz99deL5HA3a9bMvjd58uSi/6/+G73iQE43AAAAAKCqgu62bdvaV300sq3geeLEiWazzTazv5s3b56ZNGmS6dixYwKf9LeRbka8AQAAAACpql7eunVrM2TIEDN8+HCbl61AW5XMZa+99vL98QAAAAAAqN6gWxRkN27c2Bx44IHm559/Nn379jVPPvmkLaiWhHCEO5xmDgAAAABAaoLuJk2amNGjR9uXD2uvvbZp3LiJ2Xvvvb1sHwAAAABQfWqCIAhMRmidbi0dpkrmmrLeUDpU5HQDAAAAAGaWGV8yV7oBCLgBAAAAAA1B0A0AAAAAgCME3QAAAAAAOELQDQAAAACAIwTdAAAAAAA4QtANAAAAAIAjBN0AAAAAADhC0A0AAAAAgCME3QAAAAAAOELQDQAAAACAIwTdAAAAAAA4QtANAAAAAIAjBN0AAAAAADhC0A0AAAAAgCME3QAAAAAAOELQDQAAAACAI41NhgRBYP+cOXOm748CAAAAAKhiYVwZxpnFZCronjVrlv1ztdVW8/1RAAAAAAApiTPbtGlT9P2aoL6wPEVqa2vNlClTzDLLLGNqamoa3IuhYP2LL74wrVu3dvYZK2nbWdxnn9vO4j5nddtZ3Gef287iPvvcdhb32ee2s7jPPredxX32ue0s7rPPbWdxn5d02wqlFXCvuuqqplGj4pnbmRrp1oHo0KHDEv0b+iKSPhF8bzuL++xz21nc56xuO4v77HPbWdxnn9vO4j773HYW99nntrO4zz63ncV99rntLO7zkmy71Ah3iEJqAAAAAAA4QtANAAAAAIAjBN1latasmRk+fLj9MyvbzuI++9x2Fvc5q9vO4j773HYW99nntrO4zz63ncV99rntLO6zz21ncZ99bjuL+5zUtjNVSA0AAAAAgCQx0g0AAAAAgCME3QAAAAAAEHQDAAAAAFBdGOkGAAAAAMARgm5UtF9++cWMHj3a98cAnPjpp5/Ms88+6/XoLliwwOv2AQCV7+yzzzbffvut748BVC2Cbng3bdo0M378ePPoo4/mAoB58+aZMWPGmDXWWMOcf/75vj8i4MSnn35qttpqKy9H95NPPjGnnnqq6dChg5ftI1udOy7V1tYW/f3kyZNNmuhZ+X//93/mhRdesD8/+eSTZscddzS///3vzfXXX+/746WOjvXs2bNzP3///fcm7WbOnLnIa8aMGebcc881n3/+ee53adK5c2fz3Xff+f4YMMbMnTvX/Pjjj6k8FgTdDaQbzTXXXGN69epl0mjq1Kn2Ia4brHzzzTfmwgsvtIHve++9F/v2nn/+edO1a1ezyy67mAEDBphNNtnEfPjhh2bdddc11113nRkxYoT54osvjC9pbazqGB999NGmR48epl27dvalv+t3ei+Nx/vnn3+251uh/dOMittuu82knRqPN998s9l8883NOuusY4/1iSee6PtjZYbuZYccckjqOnf03KjPc8895+R5vPfee5uWLVualVde2QZI0Zkb6tDt1KmTSZpWYn344YfNnnvuGeu/q2fioEGDzIQJE2ygfccdd5jddtvNtG/f3nZQH3/88baz2gdX+1yOd955xyy11FJO/m0FmtEAoGPHjjbwrATz58930qm03HLLLfJafvnl7fb69etnll12Wfu7NO33pEmTmPWVZ+uttzb//e9/jUs333yz+dOf/mTuvPNO+/OwYcPMMsssY9q0aWO222679HWEaJ1u1O/JJ58MDjjggGDppZcO2rVrFxx99NHODtuCBQuCG2+8Mdhpp52CddddN1hvvfWCnXfeObj11luD2tpaZ9t96qmngpYtWwY1NTXBKqusErz99ttBhw4dgq5duwbdunULmjVrFjzyyCOxbrN///7BH/7wh+C9994LTj75ZLvttdZaK7jvvvuCSqBj0KhRIyf/9ty5c4NTTjklWHPNNYPevXvb7zzqf//7n5NtT5gwIWjatGmw8cYbB8OHDw+uvvpq+9LfN9lkE/s9/+tf/wrSdLwnTpwYdOzY0Z5f+ve32GKLYMqUKc6P9XLLLVfy1bp1a2fnV9RLL70UHHrooXZ7up8stdRSwbPPPhv4NHny5GDw4MFO/m3dK8t5pel+4nO7bdu2LXrPnj17dvCnP/0paNKkSezb/fOf/5x7Xvz1r3+117iem3PmzMld17rmk/L5558HZ555pn1u6j6qzxKnddZZJ7j++utzbZLmzZsHV111Ve79m2++Ofjd734XJMn1Ppd7frv6nvXvfvPNN7mfW7VqFXz22WdBJXB1Xbdv395+jzrHnn76aftS+1DPDZ1j4e/StN/533OlmT59urNn1t///veCL33fV155Ze7nuJ1zzjlBixYtgm233TZYfvnlgyFDhtjY4/zzzw8uvPBCe0/R73z49NNPg6222ir2f9fepXwH/pXqq6++Mrfccovtifnhhx/stKK77rrL9qzX1NQ42aa+jp133tn2ZG+44YZm7bXXtr/76KOP7EizRoTHjRvnZNsa/dI2Nap97bXXmssuu8z2ol955ZX2/VNOOcW8+OKLuWltcVhhhRXsCIhG3TQS2apVK/PAAw+YXXfd1VQC9aBvtNFGTnpANYqv43zyySfb80vHeZ999rGjGeEsA41AF5s6ubj0Hev4/uUvfyn6ufQdvPvuuyYtx1ujQ0pZ0PWsY60RIY14P/3002b11Ve3x3rVVVeNfbsagTvqqKPM+uuvX/B99SIrT85VXvXFF19sbrrpJjtz5Q9/+IM54IAD7PffpEkTe6x13aXx2io1CqN7t2ZUaLQk7m3/4x//KPm+RshOOumk2LerUahStD2N1rk8z8466yx7X7n66qtzx1/39sGDB5tGjRrZ5+imm24a63Y16njrrbeaLbfc0v6sfNOddtrJjsTpu9C17uK6jpozZ47529/+Zm688UY7k0bbUh2SQw891LRu3TrWbS299NLm448/tvcsadq0qXnzzTfNeuutlxut0ywxnd8uJbnPsvvuu5d8X/c33ctdfM86d//3v/+ZlVZayf6sUTjduzQd2TdX99Dp06fb71LH9fbbb7czKaQSnhuu9lvfs+4lGmEtRW3wtD0vte96LpYKB/V+3Nvu2rWrbYeqbfL666+bvn37mnvvvdfsscce9n3NnBkyZIjz0fYkj3fjWP+1lLj//vvtw0RTLzXlWQ0K/akGtBrPrgJuUVCg7T7xxBOLTAfUtG8FwZoG+8c//jH2bSvI0vYV+Coo0TSPww47LPf+EUccYf7617/Guk11ZKy44or27y1atLCNirABkYRyGquuaDrNDTfcYAYOHGh/Pvjgg+15pkaqAiVxca4pl3f//fcv+r5ugBdccIFJ0/FWZ9Hjjz9uzzW9/vnPf9qp9Opoeuqpp+y17UL37t3NaqutZg466KCiN3YF3a6cdtpp9qUHm6vpl0sSgLpSLO/y66+/tsdb15emrsVN9+dyGi8ugqByOndcUUeC7l06zxX0XX755TbgVgCuz6X7ie7vcdP0cQXeIV3bus532GEHO/1a91dX3njjDdtOGDt2rOnSpYs58MAD7d9VI0HbdxF8qpNa36WC7ilTpuSm2YbPTL1X3z222vZZdL/W9aoUgqSf07peZ82aZZo3b26va/2sDqz8nGYX+65GfykaqHBB59CDDz5oUyn79OljO1TULkiKr/0u9px2GXiG6suR1znoiq5dtQ/0XAw7l5LoZJk8ebLZbLPN7N+Vstu4ceM67f8NNtjAPrNd0DOqvkFXFwi6C9Booxqq99xzj+3VTJIeYKeffnrB/DvlVwwdOtQGay6CbvWaK7c1LGSgEdbw5/BGp4swbhpxVE+y6KE2ceLERXrqdfG54LOxqos6eoNRI0a99fqe1ZhRLr0Lyv176KGHTLdu3Qq+r/eiDdk0HG+du7qhRx+ealAce+yxpn///nYGiwsaddNoW6nGjYtrOTRy5Eg7wqjRCjWadF4l1anlKwAt1mBR4Kd8VwWFjzzyiJMcZ81MUaBZbKbO22+/bXr27Jm6zh1Rw+zll1+2HXp6hqoDVQGwri9XFHxqFlg0b1vPbBXl3H777e0MF1c0KqNcRO1zsXtp3HReaQRS37M6tXTvUIdHOFKl2Wja7zTts/zud7+zo1/a92LXlQrMuaD711prrVXnZ9U/if7sKhhT22jfffctWpdAAYk60V3Rs1rX73777Wc7PpLia7+jMxqSptk5pZ6H4XnmgkaUL730Uhv46vkVDgS5Nm/ePNOsWbM6MUg0xlCbzVUnhwYW9bzWNgtRDORE7BPWU+CII44I2rRpY/Nbr7nmGptLIY0bNw4++OADp9teeeWVg7feeqvo+2+++ab9b1zYddddg4EDBwbPP/+8PQa9evWyeT0//vhj8NNPPwV77rln8Pvf/z7WbYY5tvoz/xX+3mUuor7jyy67zEsuZKdOnYLHH398kd9/9dVXNk9xu+22c7Lte++9157LqhMwZsyY4O6777Yv/X2XXXax+d5/+9vfgjQdb+XM33bbbQXfO+aYY4Jll13WS65tUpR/98c//tHWpNhggw1srpauc5dWXXXVYNy4cUXf133O9TFX3YSLL744WGGFFRKpFaFr6qyzzko89/Tcc88NRowYUTJ//uCDDw5cH+thw4bZ3G3V6VDNgu233z744osvnG1TueJ6LhUyc+bMoG/fvs7OMe3bMsssE+y3337Bww8/nKu34rKdoGfx4Ycfbusy6Bmt3PWLLrrI3rN1Xm255ZZO81J97LPo3C1VR+fDDz8M1lhjDSfbDvOX63u50LNnT1tvxec9VHSenXDCCUH37t1tDr9rPvbbd0636q1ccMEFRc8v1axw/V3ruKpuhO4tavO7vq5rampsrYB33nnHvlRT6qGHHsr9/MQTTzjbZ90v7rnnnsSvLYLuIlT85ZZbbrEFl1QcRMGIGqoq+OWSGizRAk+FAjI9YF345JNPbNE0XQgqxvLll1/a/daFp5eK5bzxxhuxbnPSpEllvVzx2VhVYatDDjmk4Hs69l26dHF2w3nhhReCffbZJ1h99dXt+aSX/q7fvfjii0Hajvd5550XDBgwoOj7Rx11VKIFl0J6yOuYJEWByLXXXhv06dPH3s/69etng9I0BaCiYED3b53TCv6vu+66YP78+YFrKk6nYKRU0OSzAJEraqAoEFRHooovhfcwXXPqwL7hhhucbFcd4u+//37J893l8db96uyzz7YNOHWGq7CbnpUKApP0888/231Ngo99/uWXX2wQkDU6tscdd1zJYk/qaEkbH/tdTtA9duzYwBXtj4JuH8/L/NjnyCOPtLGA2giug+5Gngbd9thjj+DUU09N/HgTdJcZjKoHX4039UapF//+++8PXNAJNnXq1KLvu6qyHPXtt9/W+Vmjsf/85z8X+T2WjDoTSlUJVweLAgekl69q1vLuu+/aho0609IWgCoA1Kj+aaedFnz99dfBjBkzCr4QD3XaaQR21qxZi7ynERo9N0t1eqXBo48+atsGqiiuBqvaDHF3UleaLO5zPu2vj4rtLh144IF1OnH0nNJM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xrqY2bi453j0fZd1OXw499xz7WvTTTe193G1lTQwohhDbVGtXnTmmWc6S2NQGzs8jzVzQoF+SB0u+XWtYuG8VFsV8rkuoyqDljJz5sxgk002cfoZtGB8fhVamThxon0v7mOt9UW1/miplyvHH3980dehhx5q1wx0VTFS+661jLUWfCGu1tZVFdjJkyfX+Z2qg37xxReBa1dffXVuPcQNN9zQ7p/WSHRN29E1fc4559jqmP/3f/9X532X6xg///zzweDBg+19ZKONNrLXuKr9qnK5azrWWtd0zJgxJV+utp1k9f8o3VPuvPPOwLeffvrJrtut1TB03qlq/4UXXpjY9rX6xjrrrGOPh9bQdkXftSrcqlL6brvtVvCl91xsV9ey1u/985//HCxYsCCx69rn2ugvvvhicNhhhwWtW7cOevfuHVxzzTXOqrSX2mdVi/e9Lrq+80MOOSQYOHCgk39/9dVXt6s8yJw5c2yb4PHHH8+9r7XCXbVRtO2nnnoq97NWgejTp49dmeCXX35xdo7ttdde9potZpdddrHrZ/viopL3Sy+9ZK8pndM6xldccYU93q4r84d0HeXfvyqFq8rpXbp0Ce666y7799dee81uI7rCyoQJE+w14IJWX+jevXud+3f+6gAu1uwm6C5AB1ul4/UQ03JGSS5D0rx58+DWW28t+N6PP/5oA+5u3boFLh177LF2+Zd8Wtro6KOPjnVbOrnV6L/llltKvpI0b9684LLLLrPLt+mmMHbsWCfb0b4rGFODsVBni6sHqv7N/GBINxxXS65EKQAYMWJE7ufbb7/dydJNpRqLutmq80iNCl1TrhvIoVmzZgXXX3990K9fP/t5ttxyS/uzy8BU29HyPr6Wu4kuY1Xs5UK47J8aht99912QNDXg1GmnoGi99dazAfezzz6b2PbV0aNAX9eWlsqbPn260+3puaDAQ40Y3c+TOubhda1lCFdaaaVgm222qbPttAbd0U4dPR8VeLds2dJ54O1zQKK+oKBdu3ZO/u0hQ4bYe7auXy1ZtsIKK9jgO3THHXcEvXr1crJtBfj5z2UNvOjzbL311vY9F+eY76VcfS6fpTbBjTfeGGy66aa2babtqD2o457EwEBIS6SVWn4yTvU9o7faaqtEBoCaNm0afPzxx7mfv/zyS/sduLDzzjvb77nYveyCCy4IBgwYEPt2yeku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f80f8Q1pCZawyjeqV6VVLwcAlI/p5QCQclkrIJc1U6dOLZmbr7znadOmJfqZEL9wSR0AQPVp5PsDAACAxde+fXvz/vvvF31fufvh2tVZ8tlnn9klrdJC0+QZ5QaA6kTQDQBAlRfMO+uss+ySh4UqfGst9oEDB5qs+fHHH+0yeQAA+EZONwAAVeybb74xG220kc351XJZ3bp1y+VyX3XVVWbBggW2snl0zfY0UIG4Ur766iszevRou/8AAPhE0A0AQJX773//a4466ihbUC3M/dV6zjvssIMNvDt16mTSRtW8NW2+WCFArU2vat8E3QAA3wi6AQBIie+//958+umnNvDu2rWrWW655UxaqSNBa9DvvffeBd9/++23Tc+ePQm6AQDekdMNAEBKKMju3bu36dOnT6oDblFA/cYbbxR9XyP9VPwGAFQCRroBAEDV+fDDD83s2bNNr169Cr4/b948M2XKFNOxY8fEPxsAAFEE3QAAAAAAOML0cgAAUHVuv/12M3369KLv//TTT+Yvf/lLop8JAIBCGOkGAABVWb28c+fOZty4cWa99dYruJTaqquuSiE1AIB3jHQDAICqpKB7k002MQ888IDvjwIAQFEE3QAAoOqoOvkdd9xhTjvtNLts2PDhw31/JAAACiLoBgAAVSdcDuyMM86wU8zHjBljBg0aZHO5AQCoJATdAACgqg0cONC8/PLL5qOPPjJ9+/Y1n3/+ue+PBABADkE3AACoyunlUWuvvbZ59dVX7brcvXv3No8++qi3zwYAQBRBNwAAqNrp5VGtW7c248ePN0ceeaQ5+OCDvXwuAADyEXQDAICqc9BBB5kWLVoUHAE/77zzzNixY03//v29fDYAAKJYpxsAAAAAAEcau/qHAQAAXNl9990L/r5NmzZmrbXWMocddphp27YtXwAAwDtGugEAQNUZPHhwwd//8MMP5p133rF/Pvvss2a99dZL/LMBABBF0A0AAFKltrbWHH744Wbq1Knmn//8p++PAwDIOIJuAACQOhrtHjBggJkyZYrvjwIAyDiqlwMAgNRp2bKlmT17tu+PAQAAQTcAAEifxx57zBZUAwDAN6qXAwCAqvOPf/yj4O9nzJhh3njjDXPDDTfYFwAAvpHTDQAAqk6jRoUz5JZZZhnTrVs3c+KJJ5p999038c8FAEA+gm4AAAAAAByhkBoAAKg6L730khk/fnyd3912222mU6dOZqWVVjJHHHGEmTNnjrfPBwBAiKAbAABUnbPPPtt88MEHuZ/fe+89c+ihh5ptt93WDB061K7PPWrUKK+fEQAAYXo5AACoOu3atbOBda9evezPZ5xxhnnmmWfM888/b3++7777zPDhw82HH37o+ZMCALKOkW4AAFB1vv/+e7PyyivnflbAPWDAgNzPvXv3Nl988YWnTwcAwG8IugEAQNVRwP2f//zH/n3u3LnmzTffNBtvvHHu/VmzZpkmTZp4/IQAAPyKoBsAAFSdHXfc0eZuP/fcc2bYsGFm6aWXNptvvnnu/XfffdesueaaXj8jAADSmMMAAACqzciRI83uu+9u+vfvb1q1amVuvfVW07Rp09z7N910k9l+++29fkYAAIRCagAAoGrNmDHDBt1LLbVUnd9Pnz7d/j4aiAMA4ANBNwAAAAAAjpDTDQAAAACAIwTdAAAAAAA4QtANAAAAAIAjBN0AAAAAADhC0A0AAAAAgCME3QAApND//vc/c9xxx5kuXbqY5s2bm5VXXtlsuumm5pprrjGzZ8/2/fEAAMiMxr4/AAAAiNfnn39uA+xll13WnHfeeWb99dc3zZo1M++99565/vrrTfv27c0uu+zCYQcAIAGMdAMAkDJHH320ady4sXn99dfN3nvvbX73u9+Zzp07m1133dU89NBDZuedd7b/3Q8//GAOO+ww07ZtW9O6dWuz9dZbm3feeSf374wYMcJ0797d3H777WaNNdYwbdq0Mfvuu6+ZNWtW7r+pra01o0aNMp06dTItWrQwG264ofnb3/7mZb8BAKhEBN0AAKTId999Zx599FFzzDHHmJYtWxb8b2pqauyfe+21l5k6dap5+OGHzRtvvGE22mgjs80225jp06fn/tvPPvvMjBs3zowfP96+nnnmGXP++efn3lfAfdttt5lrr73WfPDBB+aEE04wBxxwgP3vAAAA08sBAEiVTz/91ARBYLp161bn9yuuuKL55Zdf7N8VkGu0+9VXX7VBt6aey+jRo22ArZHqI444IjeSfcstt5hlllnG/nzggQeaJ554wpx77rlmzpw5dvr6448/bvr162ff14j6888/b6677jrTv3//hPceAIDKQ043AAAZoABbAfT+++9vg2VNI//xxx/NCiusUOe/+/nnn+3odkjTysOAW9q1a2cD9TDAV1G27bbbrs6/MXfuXNOjRw/n+wQAQDUg6AYAIEVUrVzTxydOnFjn9xqBFuVdiwJuBdBPP/30Iv+GCrCFmjRpUuc9/dsK3sN/Q5QnruJsUeHoOQAAWUfQDQBAimjkWiPPV155pfnTn/5UNK9b+dtaVkwF1zSavTjWWWcdG1xPnjyZqeQAABRB0A0AQMpcffXVdsmwXr162QrkG2ywgWnUqJF57bXXzMcff2x69uxptt12W5uHvdtuu5kLL7zQrLXWWmbKlCl21HrQoEH2/62Ppp2ffPLJtniaRr8322wzM2PGDPPCCy/YaugHHXRQIvsLAEAlI+gGACBl1lxzTfPWW2/ZImfDhg0zX375pR2R1si0gmQtKaZp4hMmTDBnnHGGGTx4sJk2bZpZZZVVzBZbbGFWXnnlsrc1cuRIu+SYqphrfXBNTdco+umnn+50HwEAqBY1gUqcAgAAAACA2LFONwAAAAAAjhB0AwAAAADgCEE3AAAAAACOEHQDAAAAAOAIQTcAAAAAAI4QdAMAAAAA4AhBNwAAAAAAjhB0AwAAAADgCEE3AAAAAACOEHQDAAAAAOAIQTcAAAAAAI4QdAMAAAAAYNz4f5/KWvx+o1wrAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -4160,7 +4186,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Parameter compression: 51.39%\n" + "Parameter compression: 51.38%\n" ] } ], @@ -4194,7 +4220,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Degradation in ROC-AUC after compression (positive = decrease in performance, negative = increase in performance): 0.11%\n" + "Degradation in ROC-AUC after compression (positive = decrease in performance, negative = increase in performance): 0.44%\n" ] } ], @@ -4238,8 +4264,8 @@ "end_time": "2026-02-04T14:49:08.626862", "environment_variables": {}, "exception": null, - "input_path": "/Users/pablorodriguezmier/Documents/work/projects/corneto/docs/tutorials/ml/kpnn-with-sc.ipynb", - "output_path": "/Users/pablorodriguezmier/Documents/work/projects/corneto/docs/tutorials/ml/kpnn-with-sc.ipynb", + "input_path": "kpnn-with-sc.ipynb", + "output_path": "kpnn-with-sc.ipynb", "parameters": {}, "start_time": "2026-02-04T14:25:54.223366", "version": "2.6.0" diff --git a/docs/tutorials/ml/pixi.lock b/docs/tutorials/ml/pixi.lock index a8abbf57a..d8da71c76 100644 --- a/docs/tutorials/ml/pixi.lock +++ b/docs/tutorials/ml/pixi.lock @@ -143,7 +143,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda - - pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/4b/ab615fea52e34579d5c6c7dba86b4f9d7f3cdb6a170b348ec49f34cf4355/anndata-0.11.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl @@ -201,6 +200,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c2/f3/20c5d1ef4f4748e52d60771b8560cf00b69d5c6368b5c2e9311bcfa2a08b/contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d7/ba/704f9e56ae80ef66cf0534e23dac22ada34845f86b5e5b8b3294649d96b6/omnipath-1.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/5d/493b1b5528ab5072feae30821ff3a07b7a0474213d548efb1fdf135f85c1/array_api_compat-1.13.0-py3-none-any.whl @@ -287,7 +287,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/4b/ab615fea52e34579d5c6c7dba86b4f9d7f3cdb6a170b348ec49f34cf4355/anndata-0.11.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl @@ -342,6 +341,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c6/5e/712092cfe7e5eb667b8ad9ca7c54442f21ed7ca8979745f1000e24cf8737/ml_dtypes-0.5.4-cp311-cp311-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/f6/5377f265a8dcd61edabf8b87b657d78fca9051eeaf311ed77f73b43526a9/optree-0.18.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/d7/ba/704f9e56ae80ef66cf0534e23dac22ada34845f86b5e5b8b3294649d96b6/omnipath-1.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/5d/493b1b5528ab5072feae30821ff3a07b7a0474213d548efb1fdf135f85c1/array_api_compat-1.13.0-py3-none-any.whl @@ -438,7 +438,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxpm-3.5.18-hba3369d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxt-1.3.1-h0e40799_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/ad/37dd1ae5fa6e01612a1fbb954f0927681f282925a86e86198ccd7b15d515/fonttools-4.61.1-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/08/b2/cc5834e4b277582ae831e2b5b2a4dd1f571c6ea1db605222082d74794681/osqp-1.1.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/0a/4b/ab615fea52e34579d5c6c7dba86b4f9d7f3cdb6a170b348ec49f34cf4355/anndata-0.11.4-py3-none-any.whl @@ -496,6 +495,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bf/cc/018f14ecb58c6cb89de9d52695740b7d1f5a982aa9ea312483ea3c3d5f77/statsmodels-0.14.6-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/a3/91942b7e6e365f4e05d196dbbb52909aae11f1e2f4b4c8aee5b506f93877/optree-0.18.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d7/ba/704f9e56ae80ef66cf0534e23dac22ada34845f86b5e5b8b3294649d96b6/omnipath-1.0.12-py3-none-any.whl @@ -3933,41 +3933,6 @@ packages: purls: [] size: 388453 timestamp: 1764777142545 -- pypi: https://files.pythonhosted.org/packages/03/15/cbf90370161f01d3d4480ed7d4e4f54583f34917f34bb6b73ae2e93cb04f/corneto-1.0.0b0-py3-none-any.whl - name: corneto - version: 1.0.0b0 - sha256: 1ee763899597c3224b6abf82e752b752807a3ebd2cb0c50915c2103febe0ab90 - requires_dist: - - picos>=2.6.0 ; extra == 'research' - - cobra>=0.29.0 ; extra == 'research' - - cvxpy>=1.6.5 ; extra == 'ml' - - cvxpy>=1.6.5 ; extra == 'os' - - cvxpy>=1.6.5 ; extra == 'research' - - cvxpy-base>=1.6.5 - - cvxpy-base>=1.6.5 ; extra == 'vanilla' - - graphviz>=0.20.1 ; extra == 'os' - - graphviz>=0.20.1 ; extra == 'research' - - gurobipy ; extra == 'research' - - highspy>=1.9.0 ; extra == 'os' - - highspy>=1.9.0 ; extra == 'research' - - jax>=0.6.1 ; extra == 'ml' - - keras>=3.8.0 ; extra == 'ml' - - matplotlib>=3.5.2 ; extra == 'os' - - matplotlib>=3.5.2 ; extra == 'research' - - networkx>=3.2.1 ; extra == 'os' - - networkx>=3.2.1 ; extra == 'research' - - pandas>=2.2.3 ; extra == 'ml' - - pandas>=2.2.3 ; extra == 'research' - - pcst-fast>=1.0.10 ; extra == 'research' - - pyscipopt>=5.4.1 ; extra == 'os' - - pyscipopt>=5.4.1 ; extra == 'research' - - scikit-learn>=1.6.0 ; extra == 'ml' - - scipy>=1.15.2 - - scipy>=1.15.2 ; extra == 'ml' - - scipy>=1.15.2 ; extra == 'os' - - scipy>=1.15.2 ; extra == 'research' - - scipy>=1.15.2 ; extra == 'vanilla' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/07/ad/37dd1ae5fa6e01612a1fbb954f0927681f282925a86e86198ccd7b15d515/fonttools-4.61.1-cp311-cp311-win_amd64.whl name: fonttools version: 4.61.1 @@ -5816,6 +5781,52 @@ packages: - pytest>=8.4.2 ; extra == 'test' - mypy>=1.18.2 ; extra == 'type' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ce/15/b100495df43fc9cf71bb322da4e196772ceb3c0408b16ac82d6cc2584a1b/corneto-1.0.0rc1-py3-none-any.whl + name: corneto + version: 1.0.0rc1 + sha256: 1d1203a430617690f6d1a0200d5b5fac5cd42bace112d9d4b0f93edc69306561 + requires_dist: + - picos>=2.6.0 ; extra == 'research' + - annnet[polars]>=0.2.0,<0.3 ; extra == 'annnet' + - cobra>=0.29.0 ; extra == 'research' + - cvxpy>=1.5.1 ; extra == 'ml' + - cvxpy>=1.5.1 ; extra == 'os' + - cvxpy>=1.5.1 ; extra == 'research' + - cvxpy-base>=1.5.1 + - graphviz>=0.20.1 ; extra == 'os' + - graphviz>=0.20.1 ; extra == 'research' + - gurobipy ; extra == 'research' + - highspy>=1.9.0 ; extra == 'os' + - highspy>=1.9.0 ; extra == 'research' + - jax>=0.6.1 ; extra == 'ml' + - keras>=3.8.0 ; extra == 'ml' + - matplotlib>=3.5.2 ; extra == 'os' + - matplotlib>=3.5.2 ; extra == 'research' + - myst-nb>=0.17.2 ; extra == 'docs' + - myst-parser>=0.18.1 ; extra == 'docs' + - networkx>=3.2.1 ; extra == 'os' + - networkx>=3.2.1 ; extra == 'research' + - numpy>=1.25 + - pandas>=2.2.3 ; extra == 'ml' + - pandas>=2.2.3 ; extra == 'research' + - pcst-fast>=1.0.10 ; extra == 'research' + - pydata-sphinx-theme>=0.16.1 ; extra == 'docs' + - pydot>=3.0.4 ; extra == 'docs' + - pyscipopt>=5.4.1 ; extra == 'os' + - pyscipopt>=5.4.1 ; extra == 'research' + - scikit-learn>=1.6.0 ; extra == 'ml' + - scipy>=1.14.1 + - scipy>=1.14.1 ; extra == 'ml' + - scipy>=1.14.1 ; extra == 'os' + - scipy>=1.14.1 ; extra == 'research' + - sphinx>=5.0 ; extra == 'docs' + - sphinx-autodoc-typehints>=1.21.8 ; extra == 'docs' + - sphinx-design>=0.4.1 ; extra == 'docs' + - sphinx-favicon>=1.0.1 ; extra == 'docs' + - sphinx-hoverxref>=1.3.0 ; extra == 'docs' + - sphinxcontrib-bibtex>=2.5.0 ; extra == 'docs' + - sphinxcontrib-napoleon>=0.7 ; extra == 'docs' + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl name: colorama version: 0.4.6 diff --git a/docs/tutorials/ml/pixi.toml b/docs/tutorials/ml/pixi.toml index 1e5e29f4c..550c61c63 100644 --- a/docs/tutorials/ml/pixi.toml +++ b/docs/tutorials/ml/pixi.toml @@ -18,4 +18,4 @@ highspy = "==1.13.0" cvxpy = "==1.7.5" keras = "==3.12.1" jax = "==0.6.2" -corneto = "==1.0.0b0" +corneto = "==1.0.0rc1" diff --git a/pixi.toml b/pixi.toml index 9fe9d98b0..0f41219fc 100644 --- a/pixi.toml +++ b/pixi.toml @@ -11,6 +11,7 @@ python-graphviz = "*" networkx = "*" pandas = "*" matplotlib = "*" +nbconvert = "*" [pypi-dependencies] sphinx = ">=5.0" diff --git a/tests/graph/test_plotting.py b/tests/graph/test_plotting.py index 1e683fdea..764d66ece 100644 --- a/tests/graph/test_plotting.py +++ b/tests/graph/test_plotting.py @@ -35,6 +35,26 @@ def test_to_dot_source_generates_basic_dot(): assert 'arrowhead="normal"' in src +def test_to_dot_source_honors_global_biological_node_shape(): + g = Graph() + g.add_edge((), "A") + g.add_edge("A", "B") + + src = to_dot_source( + g, + node_attr={ + "fixedsize": "false", + "shape": "box", + "style": "rounded", + }, + ) + + assert 'node [fixedsize="false", shape="box", style="rounded"]' in src + assert '"A" [shape="circle"]' not in src + assert '"B" [shape="circle"]' not in src + assert '"e_0_source" [shape="point"]' in src + + def test_dot_wasm_html_accepts_raw_dot_source(): html = dot_wasm_html('digraph {"A" -> "B";}') assert DEFAULT_WASM_GRAPHVIZ_JS_URL in html diff --git a/tests/methods/data/phonemes_mtor.json b/tests/methods/data/phonemes_mtor.json new file mode 100644 index 000000000..1898410bc --- /dev/null +++ b/tests/methods/data/phonemes_mtor.json @@ -0,0 +1,954 @@ +{ + "provenance": { + "repository": "https://github.com/saezlab/PHONEMeS-ILP", + "commit": "1117662a0128454a66e250100c613e6caf34dd69", + "file": "inst/PHONEMeS_example/Cluster/data4cluster_3.RData", + "sha256": "203f87c308942cdb70c18f56a90d39524e9168e5ed1072f6f71e8abe1137cc7e", + "experiment_rows": [ + "MTOR1 - Control", + "MTOR2 - Control" + ], + "conversion": "createSIF plus buildDataMatrix semantics from the reference R package" + }, + "target": "MTOR_HUMAN", + "edge_cost": 0.0001, + "expected_objective": -518.2647202564655, + "expected_selected_edges": 23, + "edges": [ + [ + "MK01_HUMAN", + "MYC_HUMAN.S.62" + ], + [ + "CDK1_HUMAN", + "KS6B1_HUMAN.S.447" + ], + [ + "MTOR_HUMAN", + "KS6B1_HUMAN.S.447" + ], + [ + "KS6A1_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "MTOR_HUMAN", + "4EBP1_HUMAN.S.65" + ], + [ + "KS6A1_HUMAN", + "BAD_HUMAN.S.99" + ], + [ + "PAK1_HUMAN", + "BAD_HUMAN.S.99" + ], + [ + "AAPK1_HUMAN", + "ACACA_HUMAN.S.80" + ], + [ + "CDK1_HUMAN", + "PTN2_HUMAN.S.304" + ], + [ + "KAPCB_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "KAPCG_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "KS6A5_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "AKT1_HUMAN", + "BAD_HUMAN.S.99" + ], + [ + "KS6A5_HUMAN", + "BAD_HUMAN.S.99" + ], + [ + "PP2BB_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "PP2BC_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "KPCD_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "CSK21_HUMAN", + "MDC1_HUMAN.S.376" + ], + [ + "AURKA_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "KPCB_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "RAF1_HUMAN", + "BAD_HUMAN.S.99" + ], + [ + "MK03_HUMAN", + "4EBP1_HUMAN.S.65" + ], + [ + "CDK1_HUMAN", + "FOXK2_HUMAN.S.428" + ], + [ + "KPCD1_HUMAN", + "BAD_HUMAN.S.99" + ], + [ + "SGK1_HUMAN", + "RICTR_HUMAN.T.1135" + ], + [ + "CDK2_HUMAN", + "PTN2_HUMAN.S.304" + ], + [ + "CDK2_HUMAN", + "LARP1_HUMAN.S.774" + ], + [ + "CDK2_HUMAN", + "FOXK2_HUMAN.S.428" + ], + [ + "MK01_HUMAN", + "4EBP1_HUMAN.S.65" + ], + [ + "MK01_HUMAN", + "KS6B1_HUMAN.S.447" + ], + [ + "KPCL_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "MTOR_HUMAN", + "EF2K_HUMAN.S.74" + ], + [ + "MTOR_HUMAN", + "AKTS1_HUMAN.S.183" + ], + [ + "MTOR_HUMAN", + "MYC_HUMAN.S.62" + ], + [ + "MTOR_HUMAN", + "4EBP1_HUMAN.T.41" + ], + [ + "MTOR_HUMAN", + "LARP1_HUMAN.S.774" + ], + [ + "KPCE_HUMAN", + "BAD_HUMAN.S.99" + ], + [ + "KS6B1_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "KS6B1_HUMAN", + "RICTR_HUMAN.T.1135" + ], + [ + "MK09_HUMAN", + "MYC_HUMAN.S.62" + ], + [ + "KPCA_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "MK08_HUMAN", + "MYC_HUMAN.S.62" + ], + [ + "BRAF_HUMAN", + "BAD_HUMAN.S.99" + ], + [ + "KPCG_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "MK10_HUMAN", + "MYC_HUMAN.S.62" + ], + [ + "M4K5_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "AKT1_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "AKT1_HUMAN", + "RICTR_HUMAN.T.1135" + ], + [ + "Q499G7_HUMAN", + "4EBP1_HUMAN.S.65" + ], + [ + "Q1HBJ4_HUMAN", + "4EBP1_HUMAN.S.65" + ], + [ + "MK14_HUMAN", + "4EBP1_HUMAN.S.65" + ], + [ + "AKT1_HUMAN", + "4EBP1_HUMAN.S.65" + ], + [ + "KS6A5_HUMAN", + "4EBP1_HUMAN.S.65" + ], + [ + "Q9UG98_HUMAN", + "4EBP1_HUMAN.S.65" + ], + [ + "SGK3_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "Q5H9Q5_HUMAN", + "GSK3B_HUMAN.S.9" + ], + [ + "B7Z3D6_HUMAN", + "PTN2_HUMAN.S.304" + ], + [ + "SGK1_HUMAN", + "MK01_HUMAN.S.29" + ], + [ + "MTOR_HUMAN", + "SGK1_HUMAN.S.422" + ], + [ + "WEE1_HUMAN", + "CDK1_HUMAN.Y.15" + ], + [ + "AKT1_HUMAN", + "WEE1_HUMAN.S.642" + ], + [ + "MTOR_HUMAN", + "AKT1_HUMAN.S.473" + ], + [ + "MTOR_HUMAN", + "AKT1_HUMAN.T.450" + ], + [ + "M3K8_HUMAN", + "CDK1_HUMAN.T.161" + ], + [ + "AKT1_HUMAN", + "M3K8_HUMAN.S.400" + ], + [ + "AKT1_HUMAN", + "M3K8_HUMAN.S.413" + ], + [ + "M3K8_HUMAN", + "KS6A1_HUMAN.S.380" + ], + [ + "MK01_HUMAN", + "KS6A1_HUMAN.S.363" + ], + [ + "MK01_HUMAN", + "KS6A1_HUMAN.T.359" + ], + [ + "MK01_HUMAN", + "KS6A1_HUMAN.T.368" + ], + [ + "MK01_HUMAN", + "KS6A1_HUMAN.S.372" + ], + [ + "OXSR1_HUMAN", + "PAK1_HUMAN.T.84" + ], + [ + "WNK1_HUMAN", + "OXSR1_HUMAN.T.185" + ], + [ + "WNK1_HUMAN", + "OXSR1_HUMAN.S.325" + ], + [ + "MTOR_HUMAN", + "WNK1_HUMAN.S.2032" + ], + [ + "STK11_HUMAN", + "PAK1_HUMAN.T.109" + ], + [ + "KS6B1_HUMAN", + "STK11_HUMAN.S.428" + ], + [ + "MTOR_HUMAN", + "KS6B1_HUMAN.T.390" + ], + [ + "MTOR_HUMAN", + "KS6B1_HUMAN.S.394" + ], + [ + "MTOR_HUMAN", + "KS6B1_HUMAN.S.434" + ], + [ + "MTOR_HUMAN", + "KS6B1_HUMAN.T.412" + ], + [ + "MK01_HUMAN", + "PAK1_HUMAN.T.212" + ], + [ + "CDK2_HUMAN", + "PAK1_HUMAN.T.212" + ], + [ + "AKT1_HUMAN", + "CDK2_HUMAN.T.39" + ], + [ + "STK11_HUMAN", + "AAPK1_HUMAN.T.174" + ], + [ + "STK11_HUMAN", + "AAPK1_HUMAN.T.183" + ], + [ + "MK01_HUMAN", + "KS6A5_HUMAN.S.360" + ], + [ + "MK01_HUMAN", + "KS6A5_HUMAN.T.581" + ], + [ + "MK01_HUMAN", + "KS6A5_HUMAN.S.376" + ], + [ + "AKT1_HUMAN", + "MTOR_HUMAN.T.2446" + ], + [ + "AKT1_HUMAN", + "MTOR_HUMAN.S.2448" + ], + [ + "PP1A_HUMAN", + "KPCD_HUMAN.T.507" + ], + [ + "PP1A_HUMAN", + "KPCD_HUMAN.S.645" + ], + [ + "PP1A_HUMAN", + "KPCD_HUMAN.S.664" + ], + [ + "AKT1_HUMAN", + "PP1A_HUMAN.T.320" + ], + [ + "MK01_HUMAN", + "CSK21_HUMAN.S.362" + ], + [ + "MK01_HUMAN", + "CSK21_HUMAN.T.360" + ], + [ + "CDK2_HUMAN", + "CSK21_HUMAN.T.360" + ], + [ + "CDK2_HUMAN", + "CSK21_HUMAN.T.344" + ], + [ + "CDK2_HUMAN", + "CSK21_HUMAN.S.362" + ], + [ + "CDK2_HUMAN", + "CSK21_HUMAN.S.370" + ], + [ + "PP1A_HUMAN", + "AURKA_HUMAN.T.288" + ], + [ + "AKT1_HUMAN", + "RAF1_HUMAN.S.259" + ], + [ + "MP2K4_HUMAN", + "MK03_HUMAN.Y.204" + ], + [ + "MP2K4_HUMAN", + "MK03_HUMAN.T.202" + ], + [ + "AKT1_HUMAN", + "MP2K4_HUMAN.S.80" + ], + [ + "PP1A_HUMAN", + "KPCD1_HUMAN.NA.NA" + ], + [ + "GSK3B_HUMAN", + "KPCE_HUMAN.S.346" + ], + [ + "SGK1_HUMAN", + "GSK3B_HUMAN.S.21" + ], + [ + "KS6B1_HUMAN", + "MTOR_HUMAN.T.2446" + ], + [ + "KS6B1_HUMAN", + "MTOR_HUMAN.S.2448" + ], + [ + "MP2K4_HUMAN", + "MK09_HUMAN.Y.185" + ], + [ + "MP2K4_HUMAN", + "MK09_HUMAN.T.404" + ], + [ + "MP2K4_HUMAN", + "MK09_HUMAN.S.407" + ], + [ + "MP2K4_HUMAN", + "MK08_HUMAN.Y.185" + ], + [ + "MP2K4_HUMAN", + "MK08_HUMAN.T.183" + ], + [ + "M3K5_HUMAN", + "MK08_HUMAN.T.183" + ], + [ + "M3K5_HUMAN", + "MK08_HUMAN.Y.185" + ], + [ + "AKT1_HUMAN", + "M3K5_HUMAN.S.83" + ], + [ + "AKT1_HUMAN", + "BRAF_HUMAN.S.365" + ], + [ + "AKT1_HUMAN", + "BRAF_HUMAN.S.429" + ], + [ + "SGK1_HUMAN", + "BRAF_HUMAN.S.365" + ], + [ + "MP2K4_HUMAN", + "MK10_HUMAN.Y.223" + ], + [ + "MP2K4_HUMAN", + "MK10_HUMAN.T.221" + ], + [ + "MP2K4_HUMAN", + "MK10_HUMAN.T.183" + ], + [ + "MP2K4_HUMAN", + "MK10_HUMAN.Y.185" + ], + [ + "MP2K4_HUMAN", + "MK10_HUMAN.T.76" + ], + [ + "MP2K4_HUMAN", + "MK10_HUMAN.Y.78" + ], + [ + "RAF1_HUMAN", + "Q499G7_HUMAN.S.29" + ], + [ + "PTN1_HUMAN", + "Q499G7_HUMAN.Y.187" + ], + [ + "AKT1_HUMAN", + "PTN1_HUMAN.S.50" + ], + [ + "A8K3M3_HUMAN", + "Q499G7_HUMAN.Y.187" + ], + [ + "AKT1_HUMAN", + "A8K3M3_HUMAN.S.50" + ], + [ + "MK01_HUMAN", + "Q499G7_HUMAN.T.185" + ], + [ + "MK01_HUMAN", + "Q499G7_HUMAN.Y.187" + ], + [ + "MK01_HUMAN", + "Q499G7_HUMAN.S.41" + ], + [ + "RAF1_HUMAN", + "Q1HBJ4_HUMAN.S.29" + ], + [ + "PTN1_HUMAN", + "Q1HBJ4_HUMAN.Y.187" + ], + [ + "A8K3M3_HUMAN", + "Q1HBJ4_HUMAN.Y.187" + ], + [ + "MK01_HUMAN", + "Q1HBJ4_HUMAN.T.185" + ], + [ + "MK01_HUMAN", + "Q1HBJ4_HUMAN.Y.187" + ], + [ + "MK01_HUMAN", + "Q1HBJ4_HUMAN.S.41" + ], + [ + "MP2K4_HUMAN", + "MK14_HUMAN.T.180" + ], + [ + "MP2K4_HUMAN", + "MK14_HUMAN.Y.182" + ], + [ + "M3K5_HUMAN", + "MK14_HUMAN.T.180" + ], + [ + "M3K5_HUMAN", + "MK14_HUMAN.Y.182" + ], + [ + "MK01_HUMAN", + "Q9UG98_HUMAN.T.581" + ], + [ + "MK01_HUMAN", + "Q9UG98_HUMAN.S.376" + ], + [ + "WEE1_HUMAN", + "B7Z3D6_HUMAN.Y.15" + ], + [ + "KS6B1_HUMAN.S.447", + "KS6B1_HUMAN" + ], + [ + "GSK3B_HUMAN.S.9", + "GSK3B_HUMAN" + ], + [ + "MK01_HUMAN.S.29", + "MK01_HUMAN" + ], + [ + "SGK1_HUMAN.S.422", + "SGK1_HUMAN" + ], + [ + "CDK1_HUMAN.Y.15", + "CDK1_HUMAN" + ], + [ + "WEE1_HUMAN.S.642", + "WEE1_HUMAN" + ], + [ + "AKT1_HUMAN.S.473", + "AKT1_HUMAN" + ], + [ + "AKT1_HUMAN.T.450", + "AKT1_HUMAN" + ], + [ + "CDK1_HUMAN.T.161", + "CDK1_HUMAN" + ], + [ + "M3K8_HUMAN.S.400", + "M3K8_HUMAN" + ], + [ + "M3K8_HUMAN.S.413", + "M3K8_HUMAN" + ], + [ + "KS6A1_HUMAN.S.380", + "KS6A1_HUMAN" + ], + [ + "KS6A1_HUMAN.S.363", + "KS6A1_HUMAN" + ], + [ + "KS6A1_HUMAN.T.359", + "KS6A1_HUMAN" + ], + [ + "KS6A1_HUMAN.T.368", + "KS6A1_HUMAN" + ], + [ + "KS6A1_HUMAN.S.372", + "KS6A1_HUMAN" + ], + [ + "PAK1_HUMAN.T.84", + "PAK1_HUMAN" + ], + [ + "OXSR1_HUMAN.T.185", + "OXSR1_HUMAN" + ], + [ + "OXSR1_HUMAN.S.325", + "OXSR1_HUMAN" + ], + [ + "WNK1_HUMAN.S.2032", + "WNK1_HUMAN" + ], + [ + "PAK1_HUMAN.T.109", + "PAK1_HUMAN" + ], + [ + "STK11_HUMAN.S.428", + "STK11_HUMAN" + ], + [ + "KS6B1_HUMAN.T.390", + "KS6B1_HUMAN" + ], + [ + "KS6B1_HUMAN.S.394", + "KS6B1_HUMAN" + ], + [ + "KS6B1_HUMAN.S.434", + "KS6B1_HUMAN" + ], + [ + "KS6B1_HUMAN.T.412", + "KS6B1_HUMAN" + ], + [ + "PAK1_HUMAN.T.212", + "PAK1_HUMAN" + ], + [ + "CDK2_HUMAN.T.39", + "CDK2_HUMAN" + ], + [ + "AAPK1_HUMAN.T.174", + "AAPK1_HUMAN" + ], + [ + "AAPK1_HUMAN.T.183", + "AAPK1_HUMAN" + ], + [ + "KS6A5_HUMAN.S.360", + "KS6A5_HUMAN" + ], + [ + "KS6A5_HUMAN.T.581", + "KS6A5_HUMAN" + ], + [ + "KS6A5_HUMAN.S.376", + "KS6A5_HUMAN" + ], + [ + "MTOR_HUMAN.T.2446", + "MTOR_HUMAN" + ], + [ + "MTOR_HUMAN.S.2448", + "MTOR_HUMAN" + ], + [ + "KPCD_HUMAN.T.507", + "KPCD_HUMAN" + ], + [ + "KPCD_HUMAN.S.645", + "KPCD_HUMAN" + ], + [ + "KPCD_HUMAN.S.664", + "KPCD_HUMAN" + ], + [ + "PP1A_HUMAN.T.320", + "PP1A_HUMAN" + ], + [ + "CSK21_HUMAN.S.362", + "CSK21_HUMAN" + ], + [ + "CSK21_HUMAN.T.360", + "CSK21_HUMAN" + ], + [ + "CSK21_HUMAN.T.344", + "CSK21_HUMAN" + ], + [ + "CSK21_HUMAN.S.370", + "CSK21_HUMAN" + ], + [ + "AURKA_HUMAN.T.288", + "AURKA_HUMAN" + ], + [ + "RAF1_HUMAN.S.259", + "RAF1_HUMAN" + ], + [ + "MK03_HUMAN.Y.204", + "MK03_HUMAN" + ], + [ + "MK03_HUMAN.T.202", + "MK03_HUMAN" + ], + [ + "MP2K4_HUMAN.S.80", + "MP2K4_HUMAN" + ], + [ + "KPCD1_HUMAN.NA.NA", + "KPCD1_HUMAN" + ], + [ + "KPCE_HUMAN.S.346", + "KPCE_HUMAN" + ], + [ + "GSK3B_HUMAN.S.21", + "GSK3B_HUMAN" + ], + [ + "MK09_HUMAN.Y.185", + "MK09_HUMAN" + ], + [ + "MK09_HUMAN.T.404", + "MK09_HUMAN" + ], + [ + "MK09_HUMAN.S.407", + "MK09_HUMAN" + ], + [ + "MK08_HUMAN.Y.185", + "MK08_HUMAN" + ], + [ + "MK08_HUMAN.T.183", + "MK08_HUMAN" + ], + [ + "M3K5_HUMAN.S.83", + "M3K5_HUMAN" + ], + [ + "BRAF_HUMAN.S.365", + "BRAF_HUMAN" + ], + [ + "BRAF_HUMAN.S.429", + "BRAF_HUMAN" + ], + [ + "MK10_HUMAN.Y.223", + "MK10_HUMAN" + ], + [ + "MK10_HUMAN.T.221", + "MK10_HUMAN" + ], + [ + "MK10_HUMAN.T.183", + "MK10_HUMAN" + ], + [ + "MK10_HUMAN.Y.185", + "MK10_HUMAN" + ], + [ + "MK10_HUMAN.T.76", + "MK10_HUMAN" + ], + [ + "MK10_HUMAN.Y.78", + "MK10_HUMAN" + ], + [ + "Q499G7_HUMAN.S.29", + "Q499G7_HUMAN" + ], + [ + "Q499G7_HUMAN.Y.187", + "Q499G7_HUMAN" + ], + [ + "PTN1_HUMAN.S.50", + "PTN1_HUMAN" + ], + [ + "A8K3M3_HUMAN.S.50", + "A8K3M3_HUMAN" + ], + [ + "Q499G7_HUMAN.T.185", + "Q499G7_HUMAN" + ], + [ + "Q499G7_HUMAN.S.41", + "Q499G7_HUMAN" + ], + [ + "Q1HBJ4_HUMAN.S.29", + "Q1HBJ4_HUMAN" + ], + [ + "Q1HBJ4_HUMAN.Y.187", + "Q1HBJ4_HUMAN" + ], + [ + "Q1HBJ4_HUMAN.T.185", + "Q1HBJ4_HUMAN" + ], + [ + "Q1HBJ4_HUMAN.S.41", + "Q1HBJ4_HUMAN" + ], + [ + "MK14_HUMAN.T.180", + "MK14_HUMAN" + ], + [ + "MK14_HUMAN.Y.182", + "MK14_HUMAN" + ], + [ + "Q9UG98_HUMAN.T.581", + "Q9UG98_HUMAN" + ], + [ + "Q9UG98_HUMAN.S.376", + "Q9UG98_HUMAN" + ], + [ + "B7Z3D6_HUMAN.Y.15", + "B7Z3D6_HUMAN" + ] + ], + "phosphosite_scores": { + "KS6B1_HUMAN.S.447": -8.56006541613947, + "GSK3B_HUMAN.S.9": -78.85064638666, + "KPCD_HUMAN.S.664": 1.30786429137397, + "MK03_HUMAN.Y.204": 9999.0, + "PTN1_HUMAN.S.50": -2.77925346115516, + "MYC_HUMAN.S.62": -7.82540038942784, + "4EBP1_HUMAN.S.65": -7.99863129082714, + "BAD_HUMAN.S.99": -5.30972597375123, + "ACACA_HUMAN.S.80": -28.3636742773633, + "PTN2_HUMAN.S.304": -14.6550048292548, + "MDC1_HUMAN.S.376": 12.0033959201041, + "FOXK2_HUMAN.S.428": -6.20531016420672, + "RICTR_HUMAN.T.1135": -31.219150208065, + "LARP1_HUMAN.S.774": -0.0198721747754812, + "EF2K_HUMAN.S.74": -34.4489113627345, + "AKTS1_HUMAN.S.183": -276.135514126882, + "4EBP1_HUMAN.T.41": -15.8958601952228 + } +} diff --git a/tests/methods/test_bidirectional_phonemes.py b/tests/methods/test_bidirectional_phonemes.py new file mode 100644 index 000000000..a4403c682 --- /dev/null +++ b/tests/methods/test_bidirectional_phonemes.py @@ -0,0 +1,449 @@ +import itertools + +import numpy as np +import pytest + +from corneto import Data, Graph +from corneto.methods import BidirectionalPHONEMeS, PHONEMeS + + +def _solve(problem): + problem.solve() + assert all(objective.value is not None for objective in problem.objectives) + + +def _objective_value(problem): + return sum(float(objective.value) * float(weight) for objective, weight in zip(problem.objectives, problem.weights)) + + +def _is_dag(vertices, edges): + successors = {vertex: [] for vertex in vertices} + indegree = {vertex: 0 for vertex in vertices} + for source, target in edges: + successors[source].append(target) + indegree[target] += 1 + queue = [vertex for vertex, degree in indegree.items() if degree == 0] + visited = 0 + while queue: + source = queue.pop() + visited += 1 + for target in successors[source]: + indegree[target] -= 1 + if indegree[target] == 0: + queue.append(target) + return visited == len(vertices) + + +def _direction_feasible(edges, selected, anchor, measured, *, reverse): + traversal = [ + (target, source) if reverse else (source, target) for (source, target), active in zip(edges, selected) if active + ] + if not traversal: + return False + selected_vertices = {vertex for edge in traversal for vertex in edge} + if anchor not in selected_vertices: + return False + incoming = {vertex: 0 for vertex in selected_vertices} + outgoing = {vertex: 0 for vertex in selected_vertices} + for source, target in traversal: + outgoing[source] += 1 + incoming[target] += 1 + for vertex in selected_vertices: + if vertex == anchor and outgoing[vertex] < 1: + return False + if vertex in measured and vertex != anchor and incoming[vertex] < 1: + return False + if vertex != anchor and vertex not in measured: + if incoming[vertex] < 1 or outgoing[vertex] < 1: + return False + + reachable = {anchor} + while True: + previous = len(reachable) + reachable.update(target for source, target in traversal if source in reachable) + if len(reachable) == previous: + break + if any(source not in reachable or target not in reachable for source, target in traversal): + return False + return any(vertex in measured and vertex in reachable for vertex in selected_vertices) + + +def _brute_force_both(graph, anchor, scores, costs): + edges = [(next(iter(source)), next(iter(target))) for source, target in graph.E] + best = np.inf + for downstream in itertools.product((0, 1), repeat=len(edges)): + if not _direction_feasible( + edges, + downstream, + anchor, + scores, + reverse=False, + ): + continue + for upstream in itertools.product((0, 1), repeat=len(edges)): + if not _direction_feasible( + edges, + upstream, + anchor, + scores, + reverse=True, + ): + continue + union = np.maximum(downstream, upstream) + selected_edges = [edge for edge, active in zip(edges, union) if active] + if not _is_dag(graph.V, selected_edges): + continue + vertices = {anchor} | {vertex for edge in selected_edges for vertex in edge} + objective = sum(score for vertex, score in scores.items() if vertex in vertices) + costs @ union + best = min(best, objective) + return best + + +def test_bidirectional_matches_independent_global_bruteforce(backend): + graph = Graph() + graph.add_edges( + [ + ("u", "K"), + ("u", "x"), + ("x", "K"), + ("K", "d"), + ("K", "y"), + ("y", "d"), + ] + ) + scores = {"u": -3.0, "d": -4.0} + costs = np.array([1.1, 0.2, 0.2, 1.0, 0.3, 0.3]) + + method = BidirectionalPHONEMeS( + anchor_policy="both", + backend=backend, + ) + problem = method.build( + graph, + regulated_kinases=["K"], + phosphosite_scores=scores, + edge_costs=dict(enumerate(costs)), + ) + _solve(problem) + + assert _objective_value(problem) == pytest.approx(_brute_force_both(graph, "K", scores, costs)) + + +def test_bidirectional_selects_both_sides_and_reports_biological_orientation( + backend, +): + graph = Graph() + graph.add_edges([("A", "K"), ("K", "B")]) + method = BidirectionalPHONEMeS( + default_edge_cost=0, + anchor_policy="both", + backend=backend, + ) + problem = method.build( + graph, + regulated_kinases=["K"], + phosphosite_scores={"A": -2, "B": -2}, + ) + _solve(problem) + + assert np.asarray(problem.expr.edge_selected_upstream.value)[:, 0].tolist() == pytest.approx([1, 0]) + assert np.asarray(problem.expr.edge_selected_downstream.value)[:, 0].tolist() == pytest.approx([0, 1]) + assert np.asarray(problem.expr.edge_selected.value)[:, 0].tolist() == pytest.approx([1, 1]) + selected = method.processed_graph.edge_subgraph([0, 1]) + assert list(selected.E) == list(graph.E) + + +@pytest.mark.parametrize( + ("policy", "scores", "expected_down", "expected_up"), + [ + ("either", {"A": -2, "B": 1}, 0, 1), + ("both", {"A": -2, "B": 1}, 1, 1), + ("downstream", {"A": 1, "B": -2}, 1, 0), + ], +) +def test_anchor_policies(policy, scores, expected_down, expected_up, backend): + graph = Graph() + graph.add_edges([("A", "K"), ("K", "B")]) + problem = BidirectionalPHONEMeS( + default_edge_cost=0, + anchor_policy=policy, + backend=backend, + ).build( + graph, + regulated_kinases=["K"], + phosphosite_scores=scores, + ) + _solve(problem) + vertex_index = {vertex: index for index, vertex in enumerate(graph.V)} + assert problem.expr.anchor_active_downstream.value[vertex_index["K"], 0] == pytest.approx(expected_down) + assert problem.expr.anchor_active_upstream.value[vertex_index["K"], 0] == pytest.approx(expected_up) + + +def test_multicondition_union_cost_is_paid_once(backend): + graph = Graph() + graph.add_edges([("A", "K"), ("K", "B")]) + method = BidirectionalPHONEMeS( + default_edge_cost=0, + anchor_policy="either", + backend=backend, + ) + problem = method.build_many( + graph, + regulated_kinases={"one": ["K"], "two": ["K"]}, + phosphosite_scores={ + "one": {"A": -3, "B": 2}, + "two": {"A": -3, "B": 2}, + }, + edge_costs={0: 1.5, 1: 1.5}, + ) + _solve(problem) + + assert np.asarray(problem.expr.edge_selected_upstream.value)[0].tolist() == pytest.approx([1, 1]) + assert np.asarray(problem.expr.edge_selected_any.value).reshape(-1).tolist() == pytest.approx([1, 0]) + assert float(problem.objectives[1].value) == pytest.approx(1.5) + + +def test_global_solution_improves_on_two_independent_directional_solves(backend): + graph = Graph() + graph.add_edges( + [ + ("u", "K1"), + ("K1", "x"), + ("x", "K2"), + ("K2", "d"), + ] + ) + anchors = ["K1", "K2"] + costs = dict.fromkeys(range(4), 1.0) + + global_problem = BidirectionalPHONEMeS( + anchor_policy="both", + backend=backend, + ).build( + graph, + regulated_kinases=anchors, + phosphosite_scores={"u": -10, "d": -10}, + edge_costs=costs, + ) + _solve(global_problem) + + downstream = PHONEMeS(backend=backend).build( + graph, + perturbations=anchors, + phosphosite_scores={"d": -10}, + edge_costs=costs, + ) + _solve(downstream) + reversed_graph = Graph() + reversed_graph.add_edges([(next(iter(target)), next(iter(source))) for source, target in graph.E]) + upstream = PHONEMeS(backend=backend).build( + reversed_graph, + perturbations=anchors, + phosphosite_scores={"u": -10}, + edge_costs=costs, + ) + _solve(upstream) + + assert _objective_value(global_problem) == pytest.approx(-16) + assert _objective_value(global_problem) < (_objective_value(downstream) + _objective_value(upstream)) + + +def test_anchor_phosphosite_overlap_is_scored_once(backend): + graph = Graph() + graph.add_edges([("A", "K"), ("K", "B")]) + problem = BidirectionalPHONEMeS( + default_edge_cost=0, + anchor_policy="both", + backend=backend, + ).build( + graph, + regulated_kinases=["K"], + phosphosite_scores={"A": -1, "K": -5, "B": -1}, + ) + _solve(problem) + + assert np.asarray(problem.expr.vertex_selected.value)[:, 0].tolist() == pytest.approx([1, 1, 1]) + assert float(problem.objectives[0].value) == pytest.approx(-7) + + +def test_combined_direction_selection_is_acyclic(backend): + graph = Graph() + graph.add_edges([("A", "K"), ("K", "A")]) + method = BidirectionalPHONEMeS( + default_edge_cost=-1, + anchor_policy="either", + backend=backend, + ) + problem = method.build( + graph, + regulated_kinases=["K"], + phosphosite_scores={"A": -4}, + ) + _solve(problem) + + assert np.asarray(problem.expr.edge_selected.value)[:, 0].sum() == pytest.approx(1) + + +def test_exact_pruning_retains_non_shortest_paths(backend): + graph = Graph() + graph.add_edges( + [ + ("K", "m"), + ("K", "a"), + ("a", "b"), + ("b", "m"), + ] + ) + method = BidirectionalPHONEMeS( + anchor_policy="downstream", + backend=backend, + ) + problem = method.build( + graph, + regulated_kinases=["K"], + phosphosite_scores={"m": -5}, + edge_costs={0: 4, 1: 0.1, 2: 0.1, 3: 0.1}, + ) + _solve(problem) + + assert method._biological_num_edges == 4 + assert np.asarray(problem.expr.edge_selected_downstream.value)[:, 0].tolist() == pytest.approx([0, 1, 1, 1]) + + +def test_exposed_shapes_and_auxiliary_edges(backend): + graph = Graph() + graph.add_edges([("A", "K"), ("K", "B")]) + method = BidirectionalPHONEMeS(backend=backend) + problem = method.build( + graph, + regulated_kinases=["K"], + phosphosite_scores={"A": -2, "B": -2}, + ) + + assert problem.expr.flow.shape == (7, 2) + assert problem.expr.flow_downstream.shape == (2, 1) + assert problem.expr.flow_upstream.shape == (2, 1) + assert problem.expr.edge_selected_downstream.shape == (2, 1) + assert problem.expr.edge_selected_upstream.shape == (2, 1) + assert problem.expr.edge_selected.shape == (2, 1) + assert problem.expr.edge_selected_any.shape in {(2,), (2, 1)} + assert problem.expr.vertex_selected.shape == (3, 1) + assert problem.expr.dag_layer.shape == (3, 1) + assert method.processed_graph.num_edges == 7 + + +def test_constraint_blocks_are_vectorized(backend): + def build_problem(length, conditions): + graph = Graph() + graph.add_edges( + list(itertools.pairwise(["u", *(f"a{i}" for i in range(length)), "K"])) + + list(itertools.pairwise(["K", *(f"b{i}" for i in range(length)), "d"])) + ) + names = [f"c{i}" for i in range(conditions)] + return BidirectionalPHONEMeS( + anchor_policy="both", + backend=backend, + ).build_many( + graph, + regulated_kinases={name: ["K"] for name in names}, + phosphosite_scores={name: {"u": -2, "d": -2} for name in names}, + ) + + small = build_problem(1, 2) + large = build_problem(10, 4) + assert len(small.constraints) == len(large.constraints) + assert len(small.constraints) == len({id(constraint) for constraint in small.constraints}) + + +@pytest.mark.parametrize( + ("kwargs", "message"), + [ + ( + {"regulated_kinases": [], "phosphosite_scores": {"m": 0}}, + "must not be empty", + ), + ( + {"regulated_kinases": ["missing"], "phosphosite_scores": {"m": 0}}, + "Unknown vertex", + ), + ( + {"regulated_kinases": ["K"], "phosphosite_scores": {}}, + "must not be empty", + ), + ( + {"regulated_kinases": ["K"], "phosphosite_scores": {"m": np.inf}}, + "must be finite", + ), + ( + { + "regulated_kinases": ["K"], + "phosphosite_scores": {"m": 0}, + "edge_costs": {99: 1}, + }, + "Invalid edge index", + ), + ], +) +def test_bidirectional_validates_explicit_inputs(kwargs, message, backend): + graph = Graph() + graph.add_edge("K", "m") + with pytest.raises((TypeError, ValueError), match=message): + BidirectionalPHONEMeS(backend=backend).build(graph, **kwargs) + + +def test_anchor_path_validation_and_data_edge_costs(backend): + graph = Graph() + graph.add_edges([("K", "m"), ("u", "K")]) + with pytest.raises(ValueError, match="no upstream path"): + BidirectionalPHONEMeS( + anchor_policy="both", + backend=backend, + ).build( + graph, + regulated_kinases=["K"], + phosphosite_scores={"m": -1}, + ) + + data = Data.from_dict( + { + "one": { + "features": [ + { + "id": "K", + "mapping": "vertex", + "role": "regulated_kinase", + }, + { + "id": "m", + "mapping": "vertex", + "role": "phosphosite", + "value": -1, + }, + {"id": 0, "mapping": "edge", "value": 1}, + ] + }, + "two": { + "features": [ + { + "id": "K", + "mapping": "vertex", + "role": "regulated_kinase", + }, + { + "id": "m", + "mapping": "vertex", + "role": "phosphosite", + "value": -1, + }, + {"id": 0, "mapping": "edge", "value": 2}, + ] + }, + } + ) + with pytest.raises(ValueError, match="edge costs are global"): + BidirectionalPHONEMeS(backend=backend).build_from_data(graph, data) + + +def test_invalid_anchor_policy(): + with pytest.raises(ValueError, match="anchor_policy"): + BidirectionalPHONEMeS(anchor_policy="unknown") diff --git a/tests/methods/test_carnival.py b/tests/methods/test_carnival.py index c0e865ce0..02d325c91 100644 --- a/tests/methods/test_carnival.py +++ b/tests/methods/test_carnival.py @@ -1,5 +1,7 @@ """Tests for the retained public CARNIVAL implementations.""" +from itertools import pairwise + import numpy as np from corneto.data import Data @@ -58,3 +60,20 @@ def test_carnival_ilp_supports_multiple_conditions(backend): assert problem.expr.vertex_values.shape == (2, 2) assert np.allclose(vertex_values[input_index], [1, -1]) assert np.allclose(vertex_values[output_index], [1, -1]) + + +def test_carnival_ilp_constraint_blocks_are_vectorized(backend): + def build_problem(num_vertices, condition_names): + vertices = [f"v{i}" for i in range(num_vertices)] + graph = Graph.from_tuples([(source, 1, target) for source, target in pairwise(vertices)]) + perturbations = {condition: {vertices[0]: 1} for condition in condition_names} + outputs = {condition: {vertices[-1]: 1} for condition in condition_names} + return CarnivalILP(beta_weight=0, backend=backend).build_many( + graph, + perturbations=perturbations, + transcription_factors=outputs, + ) + + small = build_problem(3, ["one"]) + large = build_problem(30, ["one", "two", "three"]) + assert len(small.constraints) == len(large.constraints) diff --git a/tests/methods/test_phonemes.py b/tests/methods/test_phonemes.py new file mode 100644 index 000000000..67013736c --- /dev/null +++ b/tests/methods/test_phonemes.py @@ -0,0 +1,315 @@ +import itertools +import json +from pathlib import Path + +import numpy as np +import pytest + +from corneto import Data, Graph +from corneto.graph import EdgeType +from corneto.methods import PHONEMeS + + +def _is_acyclic(vertices, selected_edges): + successors = {vertex: [] for vertex in vertices} + indegree = {vertex: 0 for vertex in vertices} + for source, target in selected_edges: + successors[source].append(target) + indegree[target] += 1 + queue = [vertex for vertex, degree in indegree.items() if degree == 0] + visited = 0 + while queue: + source = queue.pop() + visited += 1 + for target in successors[source]: + indegree[target] -= 1 + if indegree[target] == 0: + queue.append(target) + return visited == len(vertices) + + +def _feasible_subsets(graph, targets, measured): + edges = [(next(iter(source)), next(iter(target))) for source, target in graph.E] + target_set = set(targets) + measured_set = set(measured) + internal_set = set(graph.V) - target_set - measured_set + feasible = [] + for bits in itertools.product((0, 1), repeat=graph.num_edges): + selected_edges = [edge for edge, selected in zip(edges, bits) if selected] + selected_vertices = target_set | {vertex for edge in selected_edges for vertex in edge} + if not _is_acyclic(graph.V, selected_edges): + continue + incoming = {vertex: 0 for vertex in graph.V} + outgoing = {vertex: 0 for vertex in graph.V} + for source, target in selected_edges: + outgoing[source] += 1 + incoming[target] += 1 + if any(outgoing[target] < 1 for target in target_set): + continue + if any(incoming[vertex] < 1 or outgoing[vertex] < 1 for vertex in internal_set & selected_vertices): + continue + if any(incoming[vertex] < 1 for vertex in measured_set & selected_vertices): + continue + feasible.append((np.array(bits), selected_vertices)) + return feasible + + +def _brute_force_objective(graph, perturbations, scores, edge_costs): + conditions = tuple(perturbations) + candidates = [_feasible_subsets(graph, perturbations[condition], scores[condition]) for condition in conditions] + best = np.inf + for selection in itertools.product(*candidates): + edge_union = np.maximum.reduce([candidate[0] for candidate in selection]) + node_cost = sum( + sum(value for vertex, value in scores[condition].items() if vertex in selection[index][1]) + for index, condition in enumerate(conditions) + ) + best = min(best, node_cost + edge_costs @ edge_union) + return best + + +def _objective_value(problem): + return sum(float(objective.value) * float(weight) for objective, weight in zip(problem.objectives, problem.weights)) + + +def _solve(problem): + problem.solve() + assert all(objective.value is not None for objective in problem.objectives) + + +def test_phonemes_matches_reference_mtor_case(backend): + fixture_path = Path(__file__).parent / "data" / "phonemes_mtor.json" + fixture = json.loads(fixture_path.read_text()) + graph = Graph() + graph.add_edges(fixture["edges"]) + + assert graph.num_edges == 229 + assert len(fixture["phosphosite_scores"]) == 17 + assert fixture["provenance"]["commit"] == "1117662a0128454a66e250100c613e6caf34dd69" + + method = PHONEMeS( + default_edge_cost=fixture["edge_cost"], + backend=backend, + ) + problem = method.build( + graph, + perturbations=[fixture["target"]], + phosphosite_scores=fixture["phosphosite_scores"], + ) + _solve(problem) + + assert round(_objective_value(problem), 2) == round(fixture["expected_objective"], 2) + selected = np.asarray(problem.expr.edge_selected.value)[:, 0] > 0.5 + assert selected.any() + + reachable = {fixture["target"]} + selected_edges = [ + (next(iter(source)), next(iter(target))) + for (source, target), is_selected in zip( + method.processed_graph.E[: len(selected)], + selected, + ) + if is_selected + ] + while True: + previous_size = len(reachable) + reachable.update(target for source, target in selected_edges if source in reachable) + if len(reachable) == previous_size: + break + assert all(source in reachable and target in reachable for source, target in selected_edges) + + +def test_phonemes_matches_single_condition_bruteforce(backend): + graph = Graph() + graph.add_edges([("r", "a"), ("r", "b"), ("a", "m"), ("b", "m"), ("a", "b")]) + scores = {"condition": {"m": -4.0}} + perturbations = {"condition": ["r"]} + costs = np.array([0.7, 0.6, 0.3, 0.4, -0.2]) + + method = PHONEMeS(backend=backend) + problem = method.build( + graph, + perturbations=perturbations["condition"], + phosphosite_scores=scores["condition"], + edge_costs=dict(enumerate(costs)), + ) + _solve(problem) + + expected = _brute_force_objective(graph, perturbations, scores, costs) + assert _objective_value(problem) == pytest.approx(expected) + + +def test_phonemes_matches_multicondition_bruteforce_and_union_cost(backend): + graph = Graph() + graph.add_edges([("r1", "a"), ("r2", "a"), ("a", "m")]) + perturbations = {"first": ["r1"], "second": ["r2"]} + scores = {"first": {"m": -3.0}, "second": {"m": -3.0}} + costs = np.array([0.4, 0.5, 2.0]) + + method = PHONEMeS(backend=backend) + problem = method.build_many( + graph, + perturbations=perturbations, + phosphosite_scores=scores, + edge_costs=dict(enumerate(costs)), + ) + _solve(problem) + + expected = _brute_force_objective(graph, perturbations, scores, costs) + assert _objective_value(problem) == pytest.approx(expected) + assert np.asarray(problem.expr.edge_selected_any.value).reshape(-1).tolist() == pytest.approx([1, 1, 1]) + assert float(problem.objectives[1].value) == pytest.approx(costs.sum()) + + +def test_phonemes_supports_convergent_dag_and_rejects_cycle(backend): + graph = Graph() + graph.add_edges([("r", "a"), ("r", "b"), ("a", "m"), ("b", "m"), ("a", "b"), ("b", "a")]) + method = PHONEMeS(default_edge_cost=-0.1, backend=backend) + problem = method.build(graph, perturbations=["r"], phosphosite_scores={"m": -5}) + _solve(problem) + + selected = np.asarray(problem.expr.edge_selected.value)[:, 0] + assert selected[2] + selected[3] == pytest.approx(2) + assert selected[4] + selected[5] <= 1 + 1e-6 + + +def test_internal_nodes_cannot_extract_flow(backend): + graph = Graph() + graph.add_edges([("r", "m"), ("r", "dead")]) + method = PHONEMeS(default_edge_cost=0, backend=backend) + problem = method.build( + graph, + perturbations=["r"], + phosphosite_scores={"m": -1}, + edge_costs={1: -10}, + ) + _solve(problem) + + assert problem.expr.edge_selected.shape[0] == 1 + assert "dead" not in method.processed_graph.V + assert "dead" not in method._phosphosite_outflow_edges + + +def test_zero_scored_site_is_sink_and_measured_site_can_be_intermediate(backend): + graph = Graph() + graph.add_edges([("r", "middle"), ("middle", "sink")]) + method = PHONEMeS(default_edge_cost=0, backend=backend) + problem = method.build( + graph, + perturbations=["r"], + phosphosite_scores={"middle": 0, "sink": -1}, + ) + _solve(problem) + + vertex_index = {vertex: index for index, vertex in enumerate(graph.V)} + selected = np.asarray(problem.expr.vertex_selected.value)[:, 0] + assert selected[vertex_index["middle"]] == pytest.approx(1) + assert selected[vertex_index["sink"]] == pytest.approx(1) + assert set(method._phosphosite_outflow_edges) == {"middle", "sink"} + + +def test_target_phosphosite_overlap_satisfies_both_roles(backend): + graph = Graph() + graph.add_edges([("r1", "r2"), ("r2", "m")]) + method = PHONEMeS(default_edge_cost=0, backend=backend) + problem = method.build( + graph, + perturbations=["r1", "r2"], + phosphosite_scores={"r2": 0, "m": -1}, + ) + _solve(problem) + + assert np.asarray(problem.expr.edge_selected.value)[:, 0].tolist() == pytest.approx([1, 1]) + + +def test_auxiliary_edges_are_excluded_and_shapes_are_stable(backend): + graph = Graph() + graph.add_edges([("r", "a"), ("a", "m")]) + method = PHONEMeS(backend=backend) + problem = method.build(graph, perturbations=["r"], phosphosite_scores={"m": -1}) + + assert problem.expr.flow.shape == (4, 1) + assert problem.expr.edge_selected.shape == (2, 1) + assert problem.expr.vertex_selected.shape == (3, 1) + assert problem.expr.edge_selected_any.shape in {(2,), (2, 1)} + assert problem.expr.dag_layer.shape == (3, 1) + assert method.processed_graph.num_edges == graph.num_edges + 2 + + +def test_constraint_blocks_do_not_scale_with_graph_or_conditions(backend): + def build_problem(num_internal): + graph = Graph() + path = ["r", *(f"v{i}" for i in range(num_internal)), "m"] + graph.add_edges(list(itertools.pairwise(path))) + return PHONEMeS(backend=backend).build_many( + graph, + perturbations={"a": ["r"], "b": ["r"], "c": ["r"]}, + phosphosite_scores={"a": {"m": -1}, "b": {"m": -1}, "c": {"m": -1}}, + ) + + assert len(build_problem(1).constraints) == len(build_problem(12).constraints) + + +@pytest.mark.parametrize( + ("kwargs", "message"), + [ + ({"perturbations": [], "phosphosite_scores": {"m": 0}}, "must not be empty"), + ({"perturbations": ["missing"], "phosphosite_scores": {"m": 0}}, "Unknown vertex"), + ({"perturbations": ["r"], "phosphosite_scores": {}}, "must not be empty"), + ({"perturbations": ["r"], "phosphosite_scores": {"m": np.inf}}, "must be finite"), + ( + {"perturbations": ["r"], "phosphosite_scores": {"m": 0}, "edge_costs": {99: 1}}, + "Invalid edge index", + ), + ], +) +def test_phonemes_validates_explicit_inputs(kwargs, message, backend): + graph = Graph() + graph.add_edge("r", "m") + with pytest.raises((TypeError, ValueError), match=message): + PHONEMeS(backend=backend).build(graph, **kwargs) + + +def test_phonemes_rejects_invalid_graphs_and_sink_targets(backend): + undirected = Graph() + undirected.add_edge("r", "m", type=EdgeType.UNDIRECTED) + with pytest.raises(ValueError, match="requires directed edges"): + PHONEMeS(backend=backend).build( + undirected, + perturbations=["r"], + phosphosite_scores={"m": 0}, + ) + + directed = Graph() + directed.add_edge("r", "m") + with pytest.raises(ValueError, match="has no outgoing PKN interaction"): + PHONEMeS(backend=backend).build( + directed, + perturbations=["m"], + phosphosite_scores={"m": 0}, + ) + + +def test_build_from_data_requires_global_edge_costs(backend): + graph = Graph() + graph.add_edge("r", "m") + data = Data.from_dict( + { + "one": { + "features": [ + {"id": "r", "mapping": "vertex", "role": "perturbation"}, + {"id": "m", "mapping": "vertex", "role": "phosphosite", "value": 0}, + {"id": 0, "mapping": "edge", "value": 1}, + ] + }, + "two": { + "features": [ + {"id": "r", "mapping": "vertex", "role": "perturbation"}, + {"id": "m", "mapping": "vertex", "role": "phosphosite", "value": 0}, + {"id": 0, "mapping": "edge", "value": 2}, + ] + }, + } + ) + with pytest.raises(ValueError, match="edge costs are global"): + PHONEMeS(backend=backend).build_from_data(graph, data) diff --git a/tests/methods/test_phonemes_preprocessing.py b/tests/methods/test_phonemes_preprocessing.py new file mode 100644 index 000000000..5ecde0d77 --- /dev/null +++ b/tests/methods/test_phonemes_preprocessing.py @@ -0,0 +1,170 @@ +import numpy as np +import pytest + +from corneto import Graph +from corneto.methods import PHONEMeS, compute_phonemes_scores + + +def test_compute_phonemes_scores_flat_mapping(): + scores = compute_phonemes_scores( + { + "supported": 0.005, + "threshold": 0.05, + "unsupported": 0.5, + }, + scale=False, + ) + + expected = np.log2(10) + assert scores == pytest.approx( + { + "supported": -expected, + "threshold": 0, + "unsupported": expected, + } + ) + + +def test_compute_phonemes_scores_uses_fold_change_direction(): + scores = compute_phonemes_scores( + {"up": 0.001, "down": 0.001, "small": 0.001}, + fold_changes={"up": 2, "down": -2, "small": 0.2}, + fold_change_threshold=1, + direction="up", + scale=False, + ) + + assert scores["up"] < 0 + assert scores["down"] > 0 + assert scores["small"] > 0 + + +def test_compute_phonemes_scores_nested_mapping_scales_per_condition(): + scores = compute_phonemes_scores( + { + "a": {"site_1": 0.005, "site_2": 0.5}, + "b": {"site_1": 0.0005, "site_2": 0.005}, + } + ) + + assert scores["a"] == pytest.approx({"site_1": -1, "site_2": 1}) + assert scores["b"]["site_1"] == pytest.approx(-1) + assert -1 < scores["b"]["site_2"] < 0 + + +def test_compute_phonemes_scores_preserves_numpy_shape(): + pvalues = np.array([[0.005, 0.5], [0.05, 0.005]]) + scores = compute_phonemes_scores(pvalues, scale=False) + + assert isinstance(scores, np.ndarray) + assert scores.shape == pvalues.shape + assert scores[0, 0] < 0 + assert scores[0, 1] > 0 + assert scores[1, 0] == pytest.approx(0) + + +def test_compute_phonemes_scores_preserves_pandas_labels(): + pd = pytest.importorskip("pandas") + pvalues = pd.DataFrame( + { + "control": [0.005, 0.5], + "treated": [0.0005, 0.005], + }, + index=["site_1", "site_2"], + ) + + scores = compute_phonemes_scores(pvalues) + + assert isinstance(scores, pd.DataFrame) + assert scores.index.equals(pvalues.index) + assert scores.columns.equals(pvalues.columns) + assert scores.loc["site_1", "control"] == pytest.approx(-1) + assert scores.loc["site_2", "control"] == pytest.approx(1) + + +def test_phonemes_accepts_pandas_scores_directly(backend): + pd = pytest.importorskip("pandas") + graph = Graph() + graph.add_edge("r", "m") + method = PHONEMeS(default_edge_cost=0, backend=backend) + + single = method.build( + graph, + perturbations=["r"], + phosphosite_scores=pd.Series({"m": -1.0}), + ) + assert single.expr.vertex_selected.shape == (2, 1) + + many = method.build_many( + graph, + perturbations={"control": ["r"], "treated": ["r"]}, + phosphosite_scores=pd.DataFrame({"control": {"m": -1.0}, "treated": {"m": -0.5}}), + ) + assert many.expr.vertex_selected.shape == (2, 2) + + +@pytest.mark.parametrize( + ("kwargs", "message"), + [ + ({"pvalues": {"site": np.nan}}, "finite"), + ({"pvalues": {"site": 1.1}}, "between 0 and 1"), + ( + { + "pvalues": {"site": 0.01}, + "fold_change_threshold": 1, + }, + "fold_changes is required", + ), + ( + { + "pvalues": {"site": 0.01, "condition": {"site": 0.02}}, + }, + "uniformly nested", + ), + ], +) +def test_compute_phonemes_scores_validates_inputs(kwargs, message): + with pytest.raises((TypeError, ValueError), match=message): + compute_phonemes_scores(**kwargs) + + +def test_phonemes_prunes_unreachable_measurements_and_remaps_costs(backend): + graph = Graph() + graph.add_edges( + [ + ("r", "dead"), + ("r", "middle"), + ("middle", "measured"), + ("other", "unreachable"), + ] + ) + method = PHONEMeS(default_edge_cost=0, backend=backend) + problem = method.build( + graph, + perturbations=["r"], + phosphosite_scores={"measured": -1, "unreachable": -10}, + edge_costs={0: -100, 1: 0.2, 2: 0.3, 3: -100}, + ) + + biological_edges = method.processed_graph.E[: problem.expr.edge_selected.shape[0]] + assert biological_edges == ( + (frozenset({"r"}), frozenset({"middle"})), + (frozenset({"middle"}), frozenset({"measured"})), + ) + assert method._edge_costs.tolist() == pytest.approx([0.2, 0.3]) + assert "dead" not in method.processed_graph.V + assert "unreachable" not in method.processed_graph.V + assert all(feature.id != "unreachable" for feature in method.processed_data.samples["condition"].features) + assert problem.expr.edge_selected.shape == (2, 1) + + +def test_phonemes_rejects_perturbation_without_measured_path(backend): + graph = Graph() + graph.add_edges([("r1", "m"), ("r2", "dead")]) + + with pytest.raises(ValueError, match="cannot reach any measured phosphosite"): + PHONEMeS(backend=backend).build( + graph, + perturbations=["r1", "r2"], + phosphosite_scores={"m": -1}, + ) diff --git a/tests/methods/test_user_inputs.py b/tests/methods/test_user_inputs.py new file mode 100644 index 000000000..4093c3717 --- /dev/null +++ b/tests/methods/test_user_inputs.py @@ -0,0 +1,170 @@ +"""Tests for method-specific user input interfaces.""" + +import pytest + +from corneto.data import Data +from corneto.graph import EdgeType, Graph +from corneto.methods import ( + CarnivalILP, + MultiSampleFBA, + MultiSampleIMAT, + PrizeCollectingSteinerTree, + SteinerTreeFlow, +) + + +def _metabolic_model(): + graph = Graph() + graph.add_edge("A", "B", id="R1", default_lb=0, default_ub=10, GPR="G1") + return graph + + +def _network_graph(): + graph = Graph() + graph.add_edge("A", "B", type=EdgeType.UNDIRECTED, value=1.0) + graph.add_edge("B", "C", type=EdgeType.UNDIRECTED, value=2.0) + return graph + + +def test_carnival_explicit_single_and_many_inputs(backend): + pkn = Graph.from_tuples([("EGFR", 1, "JUN")]) + single = CarnivalILP(beta_weight=0, backend=backend) + single.build( + pkn, + perturbations={"EGFR": 1}, + transcription_factors={"JUN": -1}, + ) + + features = {feature.id: feature for feature in single.processed_data.samples["condition"].features} + assert features["EGFR"].data["role"] == "input" + assert features["JUN"].data["role"] == "output" + + many = CarnivalILP(beta_weight=0, backend=backend) + many.build_many( + pkn, + perturbations={"control": {"EGFR": 1}, "treated": {"EGFR": -1}}, + transcription_factors={"control": {"JUN": 1}, "treated": {"JUN": -1}}, + ) + assert list(many.processed_data.samples) == ["control", "treated"] + + +def test_carnival_rejects_mismatched_conditions(backend): + pkn = Graph.from_tuples([("EGFR", 1, "JUN")]) + with pytest.raises(ValueError, match="Condition names in transcription_factors must match perturbations"): + CarnivalILP(backend=backend).build_many( + pkn, + perturbations={"control": {"EGFR": 1}}, + transcription_factors={"treated": {"JUN": 1}}, + ) + + +def test_fba_explicit_inputs_and_validation(backend): + model = _metabolic_model() + method = MultiSampleFBA(backend=backend) + method.build(model, objectives={"R1": -1}, reaction_bounds={"R1": (1, 8)}) + + feature = method.processed_data.samples["condition"].features[0] + assert feature.data == { + "id": "R1", + "value": -1.0, + "mapping": "edge", + "role": "objective", + "lower_bound": 1.0, + "upper_bound": 8.0, + } + + with pytest.raises(ValueError, match="Unknown reaction 'missing' in reaction_bounds"): + method.build(model, reaction_bounds={"missing": (0, 1)}) + with pytest.raises(ValueError, match=r"Lower bound 2\.0 exceeds upper bound 1\.0"): + method.build(model, reaction_bounds={"R1": (2, 1)}) + + many = MultiSampleFBA(backend=backend) + many.build_many( + model, + objectives={"control": {"R1": -1}, "treated": {"R1": -1}}, + reaction_bounds={"control": {}, "treated": {"R1": (0, 0)}}, + ) + assert list(many.processed_data.samples) == ["control", "treated"] + + +def test_imat_separates_objectives_and_expression(backend): + model = _metabolic_model() + method = MultiSampleIMAT(backend=backend) + method.build(model, reaction_scores={"R1": 2}, objectives={"R1": -1}) + + feature = method.processed_data.samples["condition"].features[0] + assert feature.data["role"] == "objective" + assert feature.data["value"] == -1.0 + assert feature.data["imat_score"] == 2.0 + assert {objective.name for objective in method.problem.objectives} >= { + "objective_condition__R1", + "imat_fit_pos_condition_0", + } + + gene_method = MultiSampleIMAT(backend=backend) + gene_method.build(model, gene_expression={"G1": 2}, objectives={"R1": -1}) + gene_feature = next( + feature for feature in gene_method.processed_data.samples["condition"].features if feature.id == "R1" + ) + assert gene_feature.data["role"] == "objective" + assert gene_feature.data["imat_score"] == 2.0 + + many = MultiSampleIMAT(backend=backend) + many.build_many( + model, + reaction_scores={"control": {"R1": 2}, "treated": {"R1": -2}}, + ) + assert list(many.processed_data.samples) == ["control", "treated"] + + with pytest.raises(ValueError, match="exactly one"): + method.build(model, gene_expression={"G1": 1}, reaction_scores={"R1": 1}) + with pytest.raises(ValueError, match="Unknown gene 'missing'"): + method.build(model, gene_expression={"missing": 1}) + + +def test_pcst_and_steiner_explicit_inputs(backend): + graph = _network_graph() + + pcst = PrizeCollectingSteinerTree(root_vertex="A", strict_acyclic=False, backend=backend) + pcst.build(graph, prizes={"C": 5}, terminals=["A"], edge_costs={0: 1, 1: 2}) + pcst_features = {feature.id: feature for feature in pcst.processed_data.samples["condition"].features} + assert pcst_features["C"].data["role"] == "prize" + assert pcst_features["A"].data["role"] == "terminal" + + steiner = SteinerTreeFlow(root_vertex="A", strict_acyclic=False, backend=backend) + steiner.build(graph, terminals=["A", "C"], edge_costs={0: 1, 1: 2}) + terminals = { + feature.id + for feature in steiner.processed_data.samples["condition"].features + if feature.data.get("role") == "terminal" + } + assert terminals == {"A", "C"} + + with pytest.raises(ValueError, match="Invalid edge index 2"): + steiner.build(graph, terminals=["A", "C"], edge_costs={2: 1}) + + pcst_many = PrizeCollectingSteinerTree(root_vertex="A", strict_acyclic=False, backend=backend) + pcst_many.build_many( + graph, + prizes={"first": {"C": 5}, "second": {"B": 3}}, + terminals={"first": ["A"], "second": ["A"]}, + edge_costs={"first": {0: 1}, "second": {1: 2}}, + ) + assert list(pcst_many.processed_data.samples) == ["first", "second"] + + steiner_many = SteinerTreeFlow(root_vertex="A", strict_acyclic=False, backend=backend) + steiner_many.build_many( + graph, + terminals={"first": ["A", "B"], "second": ["A", "C"]}, + ) + assert list(steiner_many.processed_data.samples) == ["first", "second"] + + +def test_legacy_data_path_warns_and_named_path_does_not(backend): + model = _metabolic_model() + data = Data.from_cdict({"sample": {"R1": {"value": -1, "role": "objective"}}}) + method = MultiSampleFBA(backend=backend) + + with pytest.warns(DeprecationWarning, match="build_from_data"): + method.build(model, data) + method.build_from_data(model, data) diff --git a/tests/test_api_contract.py b/tests/test_api_contract.py index 5f15567f5..21fc32036 100644 --- a/tests/test_api_contract.py +++ b/tests/test_api_contract.py @@ -55,20 +55,27 @@ def test_backend_api_surface(): def test_methods_api_surface_and_identity(): """Canonical method imports expose the exact documented objects.""" assert methods.__all__ == [ + "BidirectionalPHONEMeS", "CarnivalFlow", "CarnivalILP", "MultiSampleFBA", "MultiSampleIMAT", + "PHONEMeS", "PrizeCollectingSteinerTree", "SteinerTreeFlow", + "compute_phonemes_scores", "create_multisample_shortest_path", "milp_carnival", "shortest_path", "solve_shortest_path", ] + from corneto.methods.bidirectional_phonemes import BidirectionalPHONEMeS + from corneto.methods.phonemes import compute_phonemes_scores from corneto.methods.shortest_path import create_multisample_shortest_path + assert methods.BidirectionalPHONEMeS is BidirectionalPHONEMeS + assert methods.compute_phonemes_scores is compute_phonemes_scores assert methods.create_multisample_shortest_path is create_multisample_shortest_path