def _get_line_graph(core_parse): """ line graph is a non-directional graph. Nodes are indexed by intersection points. Note that angles, triangles, and quadrilaterals can be parsed from this graph. :param core_parse: :param eps: :return: """ eps = LINE_EPS line_graph = nx.Graph() for key0, key1 in itertools.combinations(core_parse.intersection_points, 2): p0, p1 = core_parse.intersection_points[ key0], core_parse.intersection_points[key1] line = instantiators['line'](p0, p1) v0, v1 = core_parse.point_variables[key0], core_parse.point_variables[ key1] var = FormulaNode(signatures['Line'], [v0, v1]) if instance_exists(core_parse, line): points = {} for key in set(core_parse.intersection_points).difference( {key0, key1}): point = core_parse.intersection_points[key] if distance_between_line_and_point(line, point) <= eps: points[key] = point line_graph.add_edge(key0, key1, instance=line, points=points, variable=var) return line_graph
def _get_arc_graph(core_parse, circle, circle_variable, circle_points): """ Directional arc graph. :param core_parse: :param circle: :return: """ eps = CIRCLE_EPS arc_graph = nx.DiGraph() for key0, key1 in itertools.permutations(circle_points, 2): p0, p1 = circle_points[key0], circle_points[key1] arc = instantiators['arc'](circle, p0, p1) v0, v1 = core_parse.point_variables[key0], core_parse.point_variables[ key1] var = FormulaNode(signatures['Arc'], [circle_variable, v0, v1]) if instance_exists(core_parse, arc): arc_points = {} for key in set(circle_points).difference({key0, key1}): point = circle_points[key] if distance_between_arc_and_point(arc, point) <= eps: arc_points[key] = point arc_graph.add_edge(key0, key1, instance=arc, points=arc_points, variable=var) return arc_graph
def _get_line_graph(core_parse): """ line graph is a non-directional graph. Nodes are indexed by intersection points. Note that angles, triangles, and quadrilaterals can be parsed from this graph. :param core_parse: :param eps: :return: """ eps = LINE_EPS line_graph = nx.Graph() for key0, key1 in itertools.combinations(core_parse.intersection_points, 2): p0, p1 = core_parse.intersection_points[key0], core_parse.intersection_points[key1] line = instantiators['line'](p0, p1) v0, v1 = core_parse.point_variables[key0], core_parse.point_variables[key1] var = FormulaNode(signatures['Line'], [v0, v1]) if instance_exists(core_parse, line): points = {} for key in set(core_parse.intersection_points).difference({key0, key1}): point = core_parse.intersection_points[key] if distance_between_line_and_point(line, point) <= eps: points[key] = point line_graph.add_edge(key0, key1, instance=line, points=points, variable=var) return line_graph
def _get_arc_graph(diagram_parse, circle, circle_points): """ Directional arc graph. :param diagram_parse: :param circle: :return: """ eps = CIRCLE_EPS arc_graph = nx.DiGraph() for key0, key1 in itertools.permutations(circle_points, 2): p0, p1 = circle_points[key0], circle_points[key1] arc = instantiators['arc'](circle, p0, p1) if instance_exists(diagram_parse, arc): arc_points = {} for key in set(circle_points).difference({key0, key1}): point = circle_points[key] if distance_between_arc_and_point(arc, point) <= eps: arc_points[key] = point arc_graph.add_edge(key0, key1, instance=arc, points=arc_points) return arc_graph
def _get_arc_graph(core_parse, circle, circle_variable, circle_points): """ Directional arc graph. :param core_parse: :param circle: :return: """ eps = CIRCLE_EPS arc_graph = nx.DiGraph() for key0, key1 in itertools.permutations(circle_points, 2): p0, p1 = circle_points[key0], circle_points[key1] arc = instantiators['arc'](circle, p0, p1) v0, v1 = core_parse.point_variables[key0], core_parse.point_variables[key1] var = FormulaNode(signatures['Arc'], [circle_variable, v0, v1]) if instance_exists(core_parse, arc): arc_points = {} for key in set(circle_points).difference({key0, key1}): point = circle_points[key] if distance_between_arc_and_point(arc, point) <= eps: arc_points[key] = point arc_graph.add_edge(key0, key1, instance=arc, points=arc_points, variable=var) return arc_graph