def visit_LoadVar(self, node): label = node.name node_id = self.node_id() node_label = " LoadVar(" + str(label) + ")" node_text = get_node_text(node_id, node_label) self.dot.node(node_id, node_text) return node_id
def visit_Statement(self, node): node_id = self.node_id() node_label = " stmt" node_text = get_node_text(node_id, node_label) stmt = self.visit(node.statement) self.dot.edge(node_id, stmt) self.dot.node(node_id, node_text) return node_id
def visit_GroupParent(self, node): #obsoleto node_id = self.node_id() node_label = " Group " node_text = get_node_text(node_id, node_label) expr = self.visit(node.expr) self.dot.edge(node_id, expr) self.dot.node(node_id, node_text) return node_id
def visit_PrintValue(self, node): #obsoleto node_id = self.node_id() node_label = " Print " node_text = get_node_text(node_id, node_label) value_id = self.visit(node.value) self.dot.edge(node_id, value_id) self.dot.node(node_id, node_text) return node_id
def visit_Expression(self, node): node_id = self.node_id() node_label = " expr" node_text = get_node_text(node_id, node_label) expr = self.visit(node.expression) self.dot.edge(node_id, expr) self.dot.node(node_id, node_text) return node_id
def visit_UnaryOp(self, node): node_id = self.node_id() node_label = " UnaryOp (" + node.op + ") " node_text = get_node_text(node_id, node_label) left_id = self.visit(node.right) self.dot.edge(node_id, left_id) self.dot.node(node_id, node_text) return node_id
def visit_ReturnValue(self, node): node_id = self.node_id() node_label = " Return " node_text = get_node_text(node_id, node_label) self.dot.node(node_id, node_text) value_id = self.visit(node.value) self.dot.edge(node_id, value_id) return node_id
def visit_BinaryOp(self, node): node_id = self.node_id() node_label = str(node.op) node_text = get_node_text(node_id, node_label) self.dot.node(node_id, node_text) l = self.visit(node.left) r = self.visit(node.right) self.dot.edge(node_id, l) self.dot.edge(node_id, r) return node_id
def visit_PrList(self, node): node_id = self.node_id() node_label = "Print" node_text = get_node_text(node_id, node_label) self.dot.node(node_id, node_text) for obj in node.prlist: if not (node.__class__.__name__ == "Empty"): list_obj = self.visit(obj) self.dot.edge(node_id, list_obj) return node_id
def visit_ArgList(self, node): node_id = self.node_id() node_label = "Args" node_text = get_node_text(node_id, node_label) self.dot.node(node_id, node_text) for node in node.arglist: if not (node.__class__.__name__ == "Empty"): list_obj = self.visit(node) self.dot.edge(node_id, list_obj) return node_id
def visit_Literal(self, node): label = node.value node_id = self.node_id() node_label = str(label) node_text = get_node_text(node_id, node_label) if label == '\n': label = 'NEWLINE' self.dot.node(node_id, node_text) return node_id
def visit_StatementList(self, node): node_id = self.node_id() node_label = "Statements" node_text = get_node_text(node_id, node_label) self.dot.node(node_id, node_text) for node in node.statements: if not (node.__class__.__name__ == "Empty"): list_obj = self.visit(node) self.dot.edge(node_id, list_obj) return node_id
def visit_ProgList(self, node): node_id = self.node_id() node_label = "Program" node_text = get_node_text(node_id, node_label) self.dot.node(node_id, node_text) for node in node.proglist: if not (node.__class__.__name__ in ["Empty", "Comment"]): list_obj = self.visit(node) self.dot.edge(node_id, list_obj) return node_id
def visit_Calls(self, node): node_id = self.node_id() node_label = " Calls " + str(node.n_params) node_text = get_node_text(node_id, node_label) self.dot.node(node_id, node_text) function_id = self.visit(node.function) arglist_id = self.visit(node.arglist) self.dot.edge(node_id, function_id) self.dot.edge(node_id, arglist_id) return node_id
def visit_FuncDef(self, node): node_id = self.node_id() node_label = " Def " + str(node.n_params) node_text = get_node_text(node_id, node_label) self.dot.node(node_id, node_text) function_id = self.visit(node.function) formals_id = self.visit(node.formals) stmt_id = self.visit(node.stmt) self.dot.edge(node_id, function_id) self.dot.edge(node_id, formals_id) self.dot.edge(node_id, stmt_id) return node_id
def visit_IfStatement(self, node): node_id = self.node_id() node_label = " If " node_text = get_node_text(node_id, node_label) self.dot.node(node_id, node_text) cond_id = self.visit(node.cond) then_stmt_id = self.visit(node.then_stmt) else_stmt = node.else_stmt if else_stmt: else_stmt_id = self.visit(node.else_stmt) self.dot.edge(node_id, else_stmt_id) self.dot.edge(node_id, cond_id) self.dot.edge(node_id, then_stmt_id) return node_id
def visit_SymTab(self, node): node_id = self.node_id() node_label = node.name node_text = get_node_text(node_id, node_label) node_text += "\n-------------\n" for p in node.entries.keys(): node_text += p + "\n" # if len(node.errors)>0: # print "===========Errores Semanticos===============" # for error in node.errors: # print error # print node_text self.dot.node(node_id, node_text) for child in node.children: child_id = self.visit(child) self.dot.edge(node_id, child_id) return node_id
def get_graph_plot_colored_by_election_results(pipeline, year, df, data, keep_layout): '''Function make plot of US with counties colored by winner of election Parameters ---------- pipe : MapperPipeline The Mapper pipeline to compute the mapper-graph year : np.int Color by election results from year `year` df : pandas data frame Data frame containing info of winner per county, year of election and number of electors in county data : ndarray (n_samples x n_dim) Data used for mapper keep_layout : list of two dicts, with keys 'x', 'y', and such that values are 1d arrays Positions of lines (keep_layout[0]) and markers respectively (keep_layout[1]) for the mapper graph Returns ------- fig: igraph object ''' node_elements = pipeline.fit_transform( data)['node_metadata']['node_elements'] # set node color to percentage of number of electors won by republicans node_color = np.array([ 100 * (df[df['year'] == year]['winner'].values * df[df['year'] == year]['n_electors'].values)[x].sum() / df[df['year'] == year]['n_electors'].values[x].sum() for x in node_elements ]) data_cols = utils.get_cols_for_mapper() columns_to_color = dict(zip(data_cols, range(len(data_cols)))) node_text = utils.get_node_text( dict(zip(range(len(node_elements)), node_elements)), utils.get_n_electors( node_elements, df[df['year'] == year]['n_electors'].reset_index(drop=True)), node_color, 'Percentage of Electors Won by Republicans') plotly_kwargs = { 'node_trace_marker_colorscale': 'RdBu', 'node_trace_marker_reversescale': True, 'node_trace_marker_cmin': 0, 'node_trace_marker_cmax': 100, 'node_trace_text': node_text, 'node_trace_marker_size': utils.get_n_electors( node_elements, df[df['year'] == year]['n_electors'].reset_index(drop=True)), 'node_trace_marker_sizeref': .5 / max( utils.get_n_electors( node_elements, df[df['year'] == year]['n_electors'].reset_index(drop=True))) } fig = plot_static_mapper_graph(pipeline, data, 'kk', layout_dim=2, node_color_statistic=node_color, color_by_columns_dropdown=True, plotly_kwargs=plotly_kwargs) if keep_layout is not None: fig._data[0].update(keep_layout[0]) fig._data[1].update(keep_layout[1]) return fig
def _parse_xml_metadata(element): """Extract metadata from an xml.dom.Element object (ELEMENT_NODE) The "<metadata>" tag has a lot of metadatas about the epub this method inspect and store into object attributes (like "title" or "creator"). """ metadata = Metadata() for node in element.getElementsByTagName('dc:title'): metadata.add_title(get_node_text(node), node.getAttribute('xml:lang')) for node in element.getElementsByTagName('dc:creator'): metadata.add_creator(get_node_text(node), node.getAttribute('opf:role'), node.getAttribute('opf:file-as')) for node in element.getElementsByTagName('dc:subject'): metadata.add_subject(get_node_text(node)) for node in element.getElementsByTagName('dc:description'): metadata.description = get_node_text(node) # Custom change to support description in some books not starting with dc: if metadata.description in [None, ""]: for node in element.getElementsByTagName('description'): metadata.description = get_node_text(node) for node in element.getElementsByTagName('dc:publisher'): metadata.publisher = get_node_text(node) for node in element.getElementsByTagName('dc:contributor'): metadata.add_contributor(get_node_text(node), node.getAttribute('opf:role'), node.getAttribute('opf:file-as')) for node in element.getElementsByTagName('dc:date'): metadata.add_date(get_node_text(node), node.getAttribute('opf:event')) for node in element.getElementsByTagName('dc:type'): metadata.dc_type = get_node_text(node) for node in element.getElementsByTagName('dc:format'): metadata.format = get_node_text(node) for node in element.getElementsByTagName('dc:identifier'): metadata.add_identifier(get_node_text(node), node.getAttribute('id'), node.getAttribute('opf:scheme')) for node in element.getElementsByTagName('dc:source'): metadata.source = get_node_text(node) for node in element.getElementsByTagName('dc:language'): metadata.add_language(get_node_text(node)) for node in element.getElementsByTagName('dc:relation'): metadata.relation = get_node_text(node) for node in element.getElementsByTagName('dc:coverage'): metadata.coverage = get_node_text(node) for node in element.getElementsByTagName('dc:rights'): metadata.right = get_node_text(node) for node in element.getElementsByTagName('meta'): metadata.add_meta(node.getAttribute('name'), node.getAttribute('content')) return metadata
def visit_Empty(self, node): node_id = self.node_id() node_label = "Empty" node_text = get_node_text(node_id, node_label) self.dot.node(node_id, node_text) return node_id
def _parse_xml_metadata(element): """Extract metadata from an xml.dom.Element object (ELEMENT_NODE) The "<metadata>" tag has a lot of metadatas about the epub this method inspect and store into object attributes (like "title" or "creator"). """ metadata = Metadata() for node in element.getElementsByTagName('dc:title'): metadata.add_title(get_node_text(node), node.getAttribute('xml:lang')) for node in element.getElementsByTagName('dc:creator'): metadata.add_creator(get_node_text(node), node.getAttribute('opf:role'), node.getAttribute('opf:file-as')) for node in element.getElementsByTagName('dc:subject'): metadata.add_subject(get_node_text(node)) for node in element.getElementsByTagName('dc:description'): metadata.description = get_node_text(node) for node in element.getElementsByTagName('dc:publisher'): metadata.publisher = get_node_text(node) for node in element.getElementsByTagName('dc:contributor'): metadata.add_contributor(get_node_text(node), node.getAttribute('opf:role'), node.getAttribute('opf:file-as')) for node in element.getElementsByTagName('dc:date'): metadata.add_date(get_node_text(node), node.getAttribute('opf:event')) for node in element.getElementsByTagName('dc:type'): metadata.dc_type = get_node_text(node) for node in element.getElementsByTagName('dc:format'): metadata.format = get_node_text(node) for node in element.getElementsByTagName('dc:identifier'): metadata.add_identifier(get_node_text(node), node.getAttribute('id'), node.getAttribute('opf:scheme')) for node in element.getElementsByTagName('dc:source'): metadata.source = get_node_text(node) for node in element.getElementsByTagName('dc:language'): metadata.add_language(get_node_text(node)) for node in element.getElementsByTagName('dc:relation'): metadata.relation = get_node_text(node) for node in element.getElementsByTagName('dc:coverage'): metadata.coverage = get_node_text(node) for node in element.getElementsByTagName('dc:rights'): metadata.right = get_node_text(node) for node in element.getElementsByTagName('meta'): metadata.add_meta(node.getAttribute('name'), node.getAttribute('content')) return metadata
def get_graph_plot_colored_by_election_results(graph, year, df, data, layout=None): '''Function make plot of US with counties colored by winner of election Parameters ---------- graph : igraph object Mapper graph df : pandas data frame Data frame containing info of winner per county, year of election and number of electors in county data : ndarray (n_samples x n_dim) Data used for mapper layout : igraph.layout.Layout (default: None) Layout of graph Returns ------- fig: igraph object ''' node_elements = graph['node_metadata']['node_elements'] if layout is None: layout = graph.layout('kk', dim=2) # set node color to percentage of number of electors won by republicans node_color = [ 100 * (df[df['year'] == year]['winner'].values * df[df['year'] == year]['n_electors'].values)[x].sum() / df[df['year'] == year]['n_electors'].values[x].sum() for x in node_elements] data_cols = utils.get_cols_for_mapper() columns_to_color = dict(zip(data_cols, range(len(data_cols)))) node_text = utils.get_node_text( dict(zip(range(len(node_elements)), node_elements)), utils.get_n_electors(node_elements, df[df['year'] == year]['n_electors'] .reset_index(drop=True)), node_color, 'Percentage of Electors Won by Republicans') plotly_kwargs = { 'node_trace_marker_colorscale': 'RdBu', 'node_trace_marker_reversescale': True, 'node_trace_marker_cmin': 0, 'node_trace_marker_cmax': 100, 'node_trace_text': node_text, 'node_trace_marker_size': utils.get_n_electors(node_elements, df[df['year'] == year]['n_electors'] .reset_index(drop=True)), 'node_trace_marker_sizeref': .5 / max(utils.get_n_electors(node_elements, df[df['year'] == year]['n_electors'] .reset_index(drop=True)))} return visualization.create_network_2d(graph, data, layout, node_color, columns_to_color=columns_to_color, plotly_kwargs=plotly_kwargs)