Coverage report: 98%

Files Functions Classes

coverage.py v7.13.3, created at 2026-02-16 21:32 +0000

File function   statements missing excluded   coverage
src / graphable / __init__.py (no function)   10 0 0   100%
src / graphable / cli / __init__.py (no function)   0 0 0   100%
src / graphable / cli / bare_cli.py run_bare   125 6 0   95%
src / graphable / cli / bare_cli.py (no function)   9 1 0   89%
src / graphable / cli / commands / __init__.py (no function)   0 0 0   100%
src / graphable / cli / commands / core.py get_parser   4 1 0   75%
src / graphable / cli / commands / core.py get_exporter   1 1 0   0%
src / graphable / cli / commands / core.py load_graph   9 1 0   89%
src / graphable / cli / commands / core.py info_command   7 3 0   57%
src / graphable / cli / commands / core.py check_command   7 0 0   100%
src / graphable / cli / commands / core.py reduce_command   2 0 0   100%
src / graphable / cli / commands / core.py convert_command   5 0 0   100%
src / graphable / cli / commands / core.py checksum_command   2 0 0   100%
src / graphable / cli / commands / core.py verify_command   8 1 0   88%
src / graphable / cli / commands / core.py write_checksum_command   2 0 0   100%
src / graphable / cli / commands / core.py diff_command   3 0 0   100%
src / graphable / cli / commands / core.py diff_visual_command   4 0 0   100%
src / graphable / cli / commands / core.py render_command   4 0 0   100%
src / graphable / cli / commands / core.py paths_command   5 0 0   100%
src / graphable / cli / commands / core.py (no function)   19 0 0   100%
src / graphable / cli / commands / serve.py Server.__init__   4 0 0   100%
src / graphable / cli / commands / serve.py Server.index   6 0 0   100%
src / graphable / cli / commands / serve.py Server.websocket_endpoint   7 0 0   100%
src / graphable / cli / commands / serve.py Server.watch_file   4 0 0   100%
src / graphable / cli / commands / serve.py serve_command   6 0 0   100%
src / graphable / cli / commands / serve.py (no function)   20 0 0   100%
src / graphable / cli / rich_cli.py info   17 0 0   100%
src / graphable / cli / rich_cli.py check   5 0 0   100%
src / graphable / cli / rich_cli.py reduce   3 0 0   100%
src / graphable / cli / rich_cli.py convert   3 0 0   100%
src / graphable / cli / rich_cli.py render   7 0 0   100%
src / graphable / cli / rich_cli.py checksum   5 0 0   100%
src / graphable / cli / rich_cli.py verify   11 0 0   100%
src / graphable / cli / rich_cli.py write_checksum   6 0 0   100%
src / graphable / cli / rich_cli.py diff   28 0 0   100%
src / graphable / cli / rich_cli.py paths   12 12 0   0%
src / graphable / cli / rich_cli.py serve   7 0 0   100%
src / graphable / cli / rich_cli.py (no function)   34 1 0   97%
src / graphable / enums.py (no function)   9 0 0   100%
src / graphable / errors.py GraphCycleError.__init__   2 0 0   100%
src / graphable / errors.py (no function)   5 0 0   100%
src / graphable / graph.py Graph.__init__   11 0 0   100%
src / graphable / graph.py Graph.clone   15 0 0   100%
src / graphable / graph.py Graph.neighbors   5 0 0   100%
src / graphable / graph.py Graph.internal_dependents   1 0 0   100%
src / graphable / graph.py Graph.internal_depends_on   1 0 0   100%
src / graphable / graph.py Graph.discover   7 0 0   100%
src / graphable / graph.py Graph._invalidate_cache   4 0 0   100%
src / graphable / graph.py Graph.__contains__   3 0 0   100%
src / graphable / graph.py Graph.__getitem__   4 0 0   100%
src / graphable / graph.py Graph.__iter__   1 0 0   100%
src / graphable / graph.py Graph.__len__   1 0 0   100%
src / graphable / graph.py Graph.is_equal_to   3 1 0   67%
src / graphable / graph.py Graph.checksum   18 0 0   100%
src / graphable / graph.py Graph.validate_checksum   1 0 0   100%
src / graphable / graph.py Graph.write_checksum   5 0 0   100%
src / graphable / graph.py Graph.read_checksum   4 0 0   100%
src / graphable / graph.py Graph.read   12 2 0   83%
src / graphable / graph.py Graph.write   10 0 0   100%
src / graphable / graph.py Graph.parallelized_topological_order   14 1 0   93%
src / graphable / graph.py Graph.subgraph_between   6 1 0   83%
src / graphable / graph.py Graph.diff_graph   33 5 0   85%
src / graphable / graph.py Graph.diff_graph.get_or_create   10 0 0   100%
src / graphable / graph.py Graph.transitive_closure   11 0 0   100%
src / graphable / graph.py Graph.suggest_cycle_breaks   10 0 0   100%
src / graphable / graph.py Graph.suggest_cycle_breaks.dfs   10 1 0   90%
src / graphable / graph.py Graph.parallelized_topological_order_filtered   6 0 0   100%
src / graphable / graph.py Graph.parallelized_topological_order_tagged   1 0 0   100%
src / graphable / graph.py Graph.__eq__   1 0 0   100%
src / graphable / graph.py Graph.__hash__   1 0 0   100%
src / graphable / graph.py Graph.check_cycles   6 0 0   100%
src / graphable / graph.py Graph.check_consistency   2 0 0   100%
src / graphable / graph.py Graph._check_node_consistency   6 0 0   100%
src / graphable / graph.py Graph.add_edge   11 0 0   100%
src / graphable / graph.py Graph.add_node   10 0 0   100%
src / graphable / graph.py Graph.remove_edge   5 0 0   100%
src / graphable / graph.py Graph.remove_node   9 0 0   100%
src / graphable / graph.py Graph.ancestors   1 0 0   100%
src / graphable / graph.py Graph.descendants   1 0 0   100%
src / graphable / graph.py Graph.bfs   16 2 0   88%
src / graphable / graph.py Graph.dfs   1 0 0   100%
src / graphable / graph.py Graph._traverse   6 0 0   100%
src / graphable / graph.py Graph._traverse.discover   8 1 0   88%
src / graphable / graph.py Graph.sinks   1 0 0   100%
src / graphable / graph.py Graph.sources   1 0 0   100%
src / graphable / graph.py Graph.parse   1 0 0   100%
src / graphable / graph.py Graph.from_csv   2 0 0   100%
src / graphable / graph.py Graph.from_graphml   2 0 0   100%
src / graphable / graph.py Graph.from_json   2 0 0   100%
src / graphable / graph.py Graph.from_toml   2 0 0   100%
src / graphable / graph.py Graph.from_yaml   2 0 0   100%
src / graphable / graph.py Graph.subgraph_filtered   2 0 0   100%
src / graphable / graph.py Graph.subgraph_tagged   2 0 0   100%
src / graphable / graph.py Graph.upstream_of   4 1 0   75%
src / graphable / graph.py Graph.downstream_of   4 1 0   75%
src / graphable / graph.py Graph.cpm_analysis   21 1 0   95%
src / graphable / graph.py Graph.critical_path   2 0 0   100%
src / graphable / graph.py Graph.longest_path   23 2 0   91%
src / graphable / graph.py Graph.all_paths   2 0 0   100%
src / graphable / graph.py Graph.all_paths.find_all_paths   10 0 0   100%
src / graphable / graph.py Graph.diff   22 1 0   95%
src / graphable / graph.py Graph.diff.get_edges   6 0 0   100%
src / graphable / graph.py Graph.topological_order   5 0 0   100%
src / graphable / graph.py Graph.topological_order_filtered   1 0 0   100%
src / graphable / graph.py Graph.topological_order_tagged   1 0 0   100%
src / graphable / graph.py Graph.to_networkx   2 0 0   100%
src / graphable / graph.py Graph.transitive_reduction   22 0 0   100%
src / graphable / graph.py Graph.render   2 0 0   100%
src / graphable / graph.py Graph.export   17 0 0   100%
src / graphable / graph.py (no function)   84 0 0   100%
src / graphable / graphable.py GraphObserver._invalidate_cache   0 0 1   100%
src / graphable / graphable.py Graphable.__init__   8 0 0   100%
src / graphable / graphable.py Graphable._notify_change   2 0 0   100%
src / graphable / graphable.py Graphable._register_observer   1 1 0   0%
src / graphable / graphable.py Graphable._unregister_observer   1 1 0   0%
src / graphable / graphable.py Graphable.duration   1 0 0   100%
src / graphable / graphable.py Graphable.duration   2 0 0   100%
src / graphable / graphable.py Graphable.status   1 0 0   100%
src / graphable / graphable.py Graphable.status   2 0 0   100%
src / graphable / graphable.py Graphable.__eq__   1 0 0   100%
src / graphable / graphable.py Graphable.__hash__   1 0 0   100%
src / graphable / graphable.py Graphable.__lt__   3 0 0   100%
src / graphable / graphable.py Graphable.__le__   3 0 0   100%
src / graphable / graphable.py Graphable.__gt__   3 0 0   100%
src / graphable / graphable.py Graphable.__ge__   3 0 0   100%
src / graphable / graphable.py Graphable.add_dependencies   3 0 0   100%
src / graphable / graphable.py Graphable.add_dependency   9 0 0   100%
src / graphable / graphable.py Graphable.add_dependent   9 0 0   100%
src / graphable / graphable.py Graphable.add_dependents   3 0 0   100%
src / graphable / graphable.py Graphable._add_dependent   4 0 0   100%
src / graphable / graphable.py Graphable._add_depends_on   4 0 0   100%
src / graphable / graphable.py Graphable._remove_dependent   4 0 0   100%
src / graphable / graphable.py Graphable._remove_depends_on   4 0 0   100%
src / graphable / graphable.py Graphable._register_observer   1 0 0   100%
src / graphable / graphable.py Graphable._unregister_observer   1 0 0   100%
src / graphable / graphable.py Graphable.add_tag   3 0 0   100%
src / graphable / graphable.py Graphable.dependents   1 0 0   100%
src / graphable / graphable.py Graphable.depends_on   1 0 0   100%
src / graphable / graphable.py Graphable.is_tagged   2 0 0   100%
src / graphable / graphable.py Graphable.edge_attributes   5 0 0   100%
src / graphable / graphable.py Graphable.set_edge_attribute   9 0 0   100%
src / graphable / graphable.py Graphable.find_path   18 0 0   100%
src / graphable / graphable.py Graphable.provides_to   2 0 0   100%
src / graphable / graphable.py Graphable.reference   1 0 0   100%
src / graphable / graphable.py Graphable.requires   2 0 0   100%
src / graphable / graphable.py Graphable.tags   1 0 0   100%
src / graphable / graphable.py Graphable.remove_tag   4 0 0   100%
src / graphable / graphable.py (no function)   53 0 3   100%
src / graphable / parsers / __init__.py (no function)   0 0 0   100%
src / graphable / parsers / csv.py load_graph_csv   24 1 0   96%
src / graphable / parsers / csv.py (no function)   11 0 0   100%
src / graphable / parsers / graphml.py load_graph_graphml   37 9 0   76%
src / graphable / parsers / graphml.py (no function)   10 0 0   100%
src / graphable / parsers / json.py load_graph_json   14 0 0   100%
src / graphable / parsers / json.py (no function)   10 0 0   100%
src / graphable / parsers / toml.py load_graph_toml   23 7 0   70%
src / graphable / parsers / toml.py (no function)   9 0 0   100%
src / graphable / parsers / utils.py build_graph_from_data   25 2 0   92%
src / graphable / parsers / utils.py is_path   8 2 0   75%
src / graphable / parsers / utils.py extract_checksum   12 3 0   75%
src / graphable / parsers / utils.py (no function)   8 0 0   100%
src / graphable / parsers / yaml.py load_graph_yaml   18 3 0   83%
src / graphable / parsers / yaml.py (no function)   9 0 0   100%
src / graphable / registry.py register_parser   2 0 0   100%
src / graphable / registry.py register_parser.decorator   4 0 0   100%
src / graphable / registry.py register_view   2 0 0   100%
src / graphable / registry.py register_view.decorator   6 0 0   100%
src / graphable / registry.py (no function)   10 0 2   100%
src / graphable / views / __init__.py (no function)   15 0 0   100%
src / graphable / views / asciiflow.py create_topology_ascii_flow   23 0 0   100%
src / graphable / views / asciiflow.py export_topology_ascii_flow   3 0 0   100%
src / graphable / views / asciiflow.py (no function)   15 0 0   100%
src / graphable / views / csv.py create_topology_csv   11 0 0   100%
src / graphable / views / csv.py export_topology_csv   3 0 0   100%
src / graphable / views / csv.py (no function)   12 0 0   100%
src / graphable / views / cytoscape.py create_topology_cytoscape   18 0 0   100%
src / graphable / views / cytoscape.py export_topology_cytoscape   3 0 0   100%
src / graphable / views / cytoscape.py (no function)   18 0 0   100%
src / graphable / views / d2.py _check_d2_on_path   3 0 0   100%
src / graphable / views / d2.py _format_styles   7 0 0   100%
src / graphable / views / d2.py create_topology_d2   40 0 0   100%
src / graphable / views / d2.py create_topology_d2.get_cluster   4 0 0   100%
src / graphable / views / d2.py export_topology_d2   3 0 0   100%
src / graphable / views / d2.py export_topology_d2_image   20 0 0   100%
src / graphable / views / d2.py (no function)   28 0 0   100%
src / graphable / views / graphml.py create_topology_graphml   17 0 0   100%
src / graphable / views / graphml.py export_topology_graphml   3 0 0   100%
src / graphable / views / graphml.py (no function)   16 0 0   100%
src / graphable / views / graphviz.py _check_dot_on_path   3 0 0   100%
src / graphable / views / graphviz.py _escape_dot_string   1 0 0   100%
src / graphable / views / graphviz.py _format_attrs   4 0 0   100%
src / graphable / views / graphviz.py create_topology_graphviz_dot   41 0 0   100%
src / graphable / views / graphviz.py create_topology_graphviz_dot.get_cluster   4 0 0   100%
src / graphable / views / graphviz.py export_topology_graphviz_dot   3 0 0   100%
src / graphable / views / graphviz.py export_topology_graphviz_image   14 0 0   100%
src / graphable / views / graphviz.py (no function)   29 0 0   100%
src / graphable / views / html.py create_topology_html   7 0 0   100%
src / graphable / views / html.py export_topology_html   3 0 0   100%
src / graphable / views / html.py (no function)   20 0 0   100%
src / graphable / views / json.py create_topology_json   14 0 0   100%
src / graphable / views / json.py export_topology_json   3 0 0   100%
src / graphable / views / json.py (no function)   17 0 0   100%
src / graphable / views / markdown.py wrap_in_markdown   1 0 0   100%
src / graphable / views / markdown.py export_markdown_wrapped   3 0 0   100%
src / graphable / views / markdown.py (no function)   5 0 0   100%
src / graphable / views / mermaid.py _get_node_style   5 2 0   60%
src / graphable / views / mermaid.py _get_link_style   4 1 0   75%
src / graphable / views / mermaid.py _check_mmdc_on_path   3 0 0   100%
src / graphable / views / mermaid.py _cleanup_on_exit   3 0 0   100%
src / graphable / views / mermaid.py _create_mmdc_script   5 0 0   100%
src / graphable / views / mermaid.py create_mmdc_script_content   2 0 0   100%
src / graphable / views / mermaid.py _escape_mermaid_string   1 0 0   100%
src / graphable / views / mermaid.py create_topology_mermaid_mmd   36 0 0   100%
src / graphable / views / mermaid.py create_topology_mermaid_mmd.link_style   3 1 0   67%
src / graphable / views / mermaid.py create_topology_mermaid_mmd.node_style   3 0 0   100%
src / graphable / views / mermaid.py create_topology_mermaid_mmd.get_cluster   4 0 0   100%
src / graphable / views / mermaid.py _execute_build_script   8 0 0   100%
src / graphable / views / mermaid.py export_topology_mermaid_mmd   3 0 0   100%
src / graphable / views / mermaid.py export_topology_mermaid_image   17 2 0   88%
src / graphable / views / mermaid.py _write_mermaid_config   5 0 0   100%
src / graphable / views / mermaid.py _write_puppeteer_config   5 0 0   100%
src / graphable / views / mermaid.py (no function)   46 0 0   100%
src / graphable / views / networkx.py to_networkx   12 0 0   100%
src / graphable / views / networkx.py (no function)   4 0 0   100%
src / graphable / views / plantuml.py _check_plantuml_on_path   3 0 0   100%
src / graphable / views / plantuml.py create_topology_plantuml   27 0 0   100%
src / graphable / views / plantuml.py create_topology_plantuml.get_cluster   4 0 0   100%
src / graphable / views / plantuml.py export_topology_plantuml   3 0 0   100%
src / graphable / views / plantuml.py export_topology_plantuml_image   14 0 0   100%
src / graphable / views / plantuml.py (no function)   24 0 0   100%
src / graphable / views / texttree.py create_topology_tree_txt   8 0 0   100%
src / graphable / views / texttree.py create_topology_tree_txt.create_topology_subtree_txt   18 0 0   100%
src / graphable / views / texttree.py export_topology_tree_txt   3 0 0   100%
src / graphable / views / texttree.py (no function)   15 0 0   100%
src / graphable / views / tikz.py create_topology_tikz   24 0 0   100%
src / graphable / views / tikz.py export_topology_tikz   3 0 0   100%
src / graphable / views / tikz.py (no function)   18 0 0   100%
src / graphable / views / toml.py create_topology_toml   19 3 0   84%
src / graphable / views / toml.py export_topology_toml   3 0 0   100%
src / graphable / views / toml.py (no function)   15 0 0   100%
src / graphable / views / utils.py wrap_with_checksum   24 8 0   67%
src / graphable / views / utils.py detect_engine   5 0 0   100%
src / graphable / views / utils.py get_image_exporter   14 0 0   100%
src / graphable / views / utils.py (no function)   5 0 0   100%
src / graphable / views / yaml.py create_topology_yaml   19 3 0   84%
src / graphable / views / yaml.py export_topology_yaml   3 0 0   100%
src / graphable / views / yaml.py (no function)   16 0 0   100%
tests / unit / cli / __init__.py (no function)   0 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_info   4 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_check_valid   4 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_check_invalid   4 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_reduce   3 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_convert   3 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_render   3 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_checksum   4 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_verify_success   4 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_verify_mismatch   5 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_verify_no_checksum   4 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_write_checksum   3 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_diff_default   7 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_diff_visual   3 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_serve   3 0 0   100%
tests / unit / cli / test_bare_cli.py test_bare_cli_no_command   3 0 0   100%
tests / unit / cli / test_bare_cli.py (no function)   19 0 0   100%
tests / unit / cli / test_commands.py test_info_command   7 0 0   100%
tests / unit / cli / test_commands.py test_check_command   9 0 0   100%
tests / unit / cli / test_commands.py test_convert_command   6 0 0   100%
tests / unit / cli / test_commands.py test_convert_command_error_on_images   6 0 0   100%
tests / unit / cli / test_commands.py test_reduce_command   7 0 0   100%
tests / unit / cli / test_commands.py test_checksum_command   6 0 0   100%
tests / unit / cli / test_commands.py test_write_checksum_command   8 0 0   100%
tests / unit / cli / test_commands.py test_verify_command   13 0 0   100%
tests / unit / cli / test_commands.py test_diff_command   6 0 0   100%
tests / unit / cli / test_commands.py test_diff_visual_command   8 0 0   100%
tests / unit / cli / test_commands.py test_render_command_explicit_engine   16 0 0   100%
tests / unit / cli / test_commands.py test_render_command_auto_detection   9 0 0   100%
tests / unit / cli / test_commands.py test_render_command_invalid_engine   3 0 0   100%
tests / unit / cli / test_commands.py (no function)   23 0 0   100%
tests / unit / cli / test_enhancements.py test_load_graph_slicing   19 0 0   100%
tests / unit / cli / test_enhancements.py test_paths_command   4 0 0   100%
tests / unit / cli / test_enhancements.py test_info_command_slicing   7 0 0   100%
tests / unit / cli / test_enhancements.py (no function)   8 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_info   10 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_info_error   5 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_check_valid   4 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_check_invalid   5 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_reduce   4 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_convert   4 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_render   6 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_render_error   5 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_checksum   4 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_checksum_error   5 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_verify_success   5 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_verify_mismatch   4 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_verify_no_checksum   4 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_verify_error   5 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_write_checksum   4 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_write_checksum_error   5 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_diff   10 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_diff_visual   4 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_diff_identical   4 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_diff_error   5 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_serve   4 0 0   100%
tests / unit / cli / test_rich_cli.py test_rich_cli_serve_error   5 0 0   100%
tests / unit / cli / test_rich_cli.py (no function)   50 0 0   100%
tests / unit / cli / test_serve.py TestServer.test_init   6 0 0   100%
tests / unit / cli / test_serve.py TestServer.test_index_success   8 0 0   100%
tests / unit / cli / test_serve.py TestServer.test_index_error   8 0 0   100%
tests / unit / cli / test_serve.py TestServer.test_websocket_endpoint   6 0 0   100%
tests / unit / cli / test_serve.py TestServer.test_watch_file   11 2 0   82%
tests / unit / cli / test_serve.py test_serve_command   8 0 0   100%
tests / unit / cli / test_serve.py (no function)   24 0 0   100%
tests / unit / parsers / __init__.py (no function)   0 0 0   100%
tests / unit / parsers / test_csv.py test_load_graph_csv_roundtrip   14 0 0   100%
tests / unit / parsers / test_csv.py test_load_graph_csv_with_header   5 0 0   100%
tests / unit / parsers / test_csv.py test_load_graph_csv_from_file   6 0 0   100%
tests / unit / parsers / test_csv.py (no function)   6 0 0   100%
tests / unit / parsers / test_generic.py test_graph_roundtrip_json   8 0 0   100%
tests / unit / parsers / test_generic.py test_graph_roundtrip_yaml   8 0 0   100%
tests / unit / parsers / test_generic.py test_graph_roundtrip_toml   8 0 0   100%
tests / unit / parsers / test_generic.py test_graph_roundtrip_csv   10 0 0   100%
tests / unit / parsers / test_generic.py test_graph_roundtrip_graphml   8 0 0   100%
tests / unit / parsers / test_generic.py test_graph_parse_generic   4 0 0   100%
tests / unit / parsers / test_generic.py test_graph_from_json   4 0 0   100%
tests / unit / parsers / test_generic.py test_graph_from_yaml   4 0 0   100%
tests / unit / parsers / test_generic.py test_graph_from_toml   4 0 0   100%
tests / unit / parsers / test_generic.py test_graph_from_csv   5 0 0   100%
tests / unit / parsers / test_generic.py test_graph_from_graphml   4 0 0   100%
tests / unit / parsers / test_generic.py test_graph_from_json_invalid_ref_type   4 0 0   100%
tests / unit / parsers / test_generic.py (no function)   19 0 0   100%
tests / unit / parsers / test_graphml.py test_load_graph_graphml_roundtrip   12 0 0   100%
tests / unit / parsers / test_graphml.py test_load_graph_graphml_from_file   9 0 0   100%
tests / unit / parsers / test_graphml.py (no function)   5 0 0   100%
tests / unit / parsers / test_json.py test_load_graph_json_roundtrip   12 0 0   100%
tests / unit / parsers / test_json.py test_load_graph_json_orphaned_nodes   6 0 0   100%
tests / unit / parsers / test_json.py test_load_graph_json_from_file   6 0 0   100%
tests / unit / parsers / test_json.py (no function)   7 0 0   100%
tests / unit / parsers / test_toml.py test_load_graph_toml_roundtrip   12 0 0   100%
tests / unit / parsers / test_toml.py test_load_graph_toml_from_file   9 0 0   100%
tests / unit / parsers / test_toml.py test_load_graph_toml_wrapped   5 0 0   100%
tests / unit / parsers / test_toml.py (no function)   6 0 0   100%
tests / unit / parsers / test_yaml.py test_load_graph_yaml_roundtrip   12 0 0   100%
tests / unit / parsers / test_yaml.py test_load_graph_yaml_from_file   7 0 0   100%
tests / unit / parsers / test_yaml.py test_load_graph_yaml_wrapped   5 0 0   100%
tests / unit / parsers / test_yaml.py (no function)   6 0 0   100%
tests / unit / test_graph.py TestGraph.nodes   4 0 0   100%
tests / unit / test_graph.py TestGraph.test_initialization   2 0 0   100%
tests / unit / test_graph.py TestGraph.test_add_node   5 0 0   100%
tests / unit / test_graph.py TestGraph.test_add_edge   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_sinks_and_sources   6 0 0   100%
tests / unit / test_graph.py TestGraph.test_topological_order   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_subgraph_filtered   11 0 0   100%
tests / unit / test_graph.py TestGraph.test_subgraph_tagged   6 0 0   100%
tests / unit / test_graph.py TestGraph.test_topological_order_filtered   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_topological_order_tagged   8 0 0   100%
tests / unit / test_graph.py TestGraph.test_graph_factory   10 0 0   100%
tests / unit / test_graph.py TestGraph.test_topological_order_caching   12 0 0   100%
tests / unit / test_graph.py TestGraph.test_checksum_caching   12 0 0   100%
tests / unit / test_graph.py TestGraph.test_parallelized_topological_order_caching   15 0 0   100%
tests / unit / test_graph.py TestGraph.test_node_tag_invalidates_all_caches   12 0 0   100%
tests / unit / test_graph.py TestGraph.test_node_dependency_change_invalidates_all_caches   12 0 0   100%
tests / unit / test_graph.py TestGraph.test_node_edge_removal_invalidates_graph_cache   8 0 0   100%
tests / unit / test_graph.py TestGraph.test_multiple_graphs_observing_same_node   10 0 0   100%
tests / unit / test_graph.py TestGraph.test_subgraph_filtering_in_topological_order   8 0 0   100%
tests / unit / test_graph.py TestGraph.test_external_node_change_does_not_affect_checksum   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_internal_node_change_invalidates_cache   8 0 0   100%
tests / unit / test_graph.py TestGraph.test_discover_pulls_in_external_nodes   14 0 0   100%
tests / unit / test_graph.py TestGraph.test_add_edge_self_loop   6 0 0   100%
tests / unit / test_graph.py TestGraph.test_add_edge_simple_cycle   10 0 0   100%
tests / unit / test_graph.py TestGraph.test_add_edge_complex_cycle   13 0 0   100%
tests / unit / test_graph.py TestGraph.test_add_edge_cycle_with_shared_path   10 0 0   100%
tests / unit / test_graph.py TestGraph.test_add_node_with_existing_cycle   10 0 0   100%
tests / unit / test_graph.py TestGraph.test_init_with_cycle   8 0 0   100%
tests / unit / test_graph.py TestGraph.test_check_cycles_manual   10 0 0   100%
tests / unit / test_graph.py TestGraph.test_consistency_broken_depends_on   5 0 0   100%
tests / unit / test_graph.py TestGraph.test_consistency_broken_dependents   5 0 0   100%
tests / unit / test_graph.py TestGraph.test_init_with_inconsistency   4 0 0   100%
tests / unit / test_graph.py TestGraph.test_container_len   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_container_iter   5 0 0   100%
tests / unit / test_graph.py TestGraph.test_container_contains   6 0 0   100%
tests / unit / test_graph.py TestGraph.test_container_getitem   6 0 0   100%
tests / unit / test_graph.py TestGraph.test_remove_edge   6 0 0   100%
tests / unit / test_graph.py TestGraph.test_remove_node   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_ancestors_descendants   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_ancestors_diamond   8 0 0   100%
tests / unit / test_graph.py TestGraph.test_upstream_downstream_of   11 0 0   100%
tests / unit / test_graph.py TestGraph.test_cpm_and_longest_path   31 0 0   100%
tests / unit / test_graph.py TestGraph.test_all_paths   13 0 0   100%
tests / unit / test_graph.py TestGraph.test_suggest_cycle_breaks   15 0 0   100%
tests / unit / test_graph.py TestGraph.test_subgraph_between   10 0 0   100%
tests / unit / test_graph.py TestGraph.test_diff_graph   15 0 0   100%
tests / unit / test_graph.py TestGraph.test_transitive_closure   10 0 0   100%
tests / unit / test_graph.py TestGraph.test_transitive_reduction_simple   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_transitive_reduction_diamond   10 0 0   100%
tests / unit / test_graph.py TestGraph.test_transitive_reduction_preserves_tags   8 0 0   100%
tests / unit / test_graph.py TestGraph.test_graph_render_convenience   6 0 0   100%
tests / unit / test_graph.py TestGraph.test_graph_export_convenience   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_checksum_deterministic   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_parallelized_topological_order   9 0 0   100%
tests / unit / test_graph.py TestGraph.test_validate_checksum   5 0 0   100%
tests / unit / test_graph.py TestGraph.test_read_write_auto_detect   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_standalone_checksum_io   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_embedded_checksum_io   8 0 0   100%
tests / unit / test_graph.py TestGraph.test_embedded_checksum_json_wrapping   11 0 0   100%
tests / unit / test_graph.py TestGraph.test_clone   13 0 0   100%
tests / unit / test_graph.py TestGraph.test_checksum_includes_metadata   13 0 0   100%
tests / unit / test_graph.py TestGraph.test_export_fallback   5 0 0   100%
tests / unit / test_graph.py TestGraph.test_export_fallback.mock_exporter   2 0 0   100%
tests / unit / test_graph.py TestGraph.test_bfs_dfs   13 0 0   100%
tests / unit / test_graph.py TestGraph.test_write_unsupported_extension   3 0 0   100%
tests / unit / test_graph.py TestGraph.test_write_image_logic   6 0 0   100%
tests / unit / test_graph.py TestGraph.test_diff_graph_complex   12 0 0   100%
tests / unit / test_graph.py TestGraph.test_parallelized_topological_order_filtered   7 0 0   100%
tests / unit / test_graph.py TestGraph.test_parallelized_topological_order_tagged   9 0 0   100%
tests / unit / test_graph.py (no function)   76 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_initialization   6 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_dependencies_new   5 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_dependencies_existing   12 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_add_dependency_and_dependent_new_items   21 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_add_dependents_multiple   18 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_add_dependencies_multiple   10 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_tags   7 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_remove_tag_existing   6 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_remove_tag_non_existent   5 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_reference_property_access   8 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_dependents_property_is_copy   5 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_depends_on_property_is_copy   5 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_provides_to_alias   5 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_requires_alias   5 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_cycle_detection   12 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_cycle_detection_dependent   8 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_find_path   12 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_ordering   23 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_total_ordering_decorator   6 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_edge_attributes   8 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_node_duration_and_status   7 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_comparison_not_implemented   9 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_edge_attributes_key_error   4 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_set_edge_attribute_upstream   6 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_set_edge_attribute_key_error   4 0 0   100%
tests / unit / test_graphable.py TestGraphable.test_observer_discard_not_present   3 0 0   100%
tests / unit / test_graphable.py (no function)   31 0 0   100%
tests / unit / views / __init__.py (no function)   0 0 0   100%
tests / unit / views / test_asciiflow.py TestAsciiFlow.graph_fixture   5 0 0   100%
tests / unit / views / test_asciiflow.py TestAsciiFlow.test_create_topology_ascii_flow_default   6 0 0   100%
tests / unit / views / test_asciiflow.py TestAsciiFlow.test_create_topology_ascii_flow_with_tags   6 0 0   100%
tests / unit / views / test_asciiflow.py TestAsciiFlow.test_create_topology_ascii_flow_custom_text   5 0 0   100%
tests / unit / views / test_asciiflow.py TestAsciiFlow.test_create_topology_ascii_flow_multiple_dependents   9 0 0   100%
tests / unit / views / test_asciiflow.py TestAsciiFlow.test_export_topology_ascii_flow   6 0 0   100%
tests / unit / views / test_asciiflow.py (no function)   14 0 0   100%
tests / unit / views / test_csv.py TestCSV.graph_fixture   5 0 0   100%
tests / unit / views / test_csv.py TestCSV.test_create_topology_csv_default   4 0 0   100%
tests / unit / views / test_csv.py TestCSV.test_create_topology_csv_no_header   4 0 0   100%
tests / unit / views / test_csv.py TestCSV.test_export_topology_csv   6 0 0   100%
tests / unit / views / test_csv.py (no function)   12 0 0   100%
tests / unit / views / test_cytoscape.py test_cytoscape_registration   1 0 0   100%
tests / unit / views / test_cytoscape.py test_cytoscape_config_defaults   6 0 0   100%
tests / unit / views / test_cytoscape.py test_create_topology_cytoscape_simple   16 0 0   100%
tests / unit / views / test_cytoscape.py test_create_topology_cytoscape_with_tags   7 0 0   100%
tests / unit / views / test_cytoscape.py test_export_topology_cytoscape   8 0 0   100%
tests / unit / views / test_cytoscape.py test_create_topology_cytoscape_custom_data   11 0 0   100%
tests / unit / views / test_cytoscape.py (no function)   11 0 0   100%
tests / unit / views / test_d2.py TestD2.graph_fixture   5 0 0   100%
tests / unit / views / test_d2.py TestD2.test_create_topology_d2_default   5 0 0   100%
tests / unit / views / test_d2.py TestD2.test_create_topology_d2_custom_config   8 0 0   100%
tests / unit / views / test_d2.py TestD2.test_create_topology_d2_edge_style_empty   5 0 0   100%
tests / unit / views / test_d2.py TestD2.test_export_topology_d2   6 0 0   100%
tests / unit / views / test_d2.py TestD2.test_check_d2_on_path_success   2 0 0   100%
tests / unit / views / test_d2.py TestD2.test_check_d2_on_path_failure   3 0 0   100%
tests / unit / views / test_d2.py TestD2.test_export_topology_d2_image_svg_success   9 0 0   100%
tests / unit / views / test_d2.py TestD2.test_export_topology_d2_image_png_success   9 0 0   100%
tests / unit / views / test_d2.py TestD2.test_export_topology_d2_image_with_config   12 0 0   100%
tests / unit / views / test_d2.py TestD2.test_export_topology_d2_image_failure   5 0 0   100%
tests / unit / views / test_d2.py TestD2.test_export_topology_d2_image_generic_exception   5 0 0   100%
tests / unit / views / test_d2.py TestD2.test_create_topology_d2_clustering   19 0 0   100%
tests / unit / views / test_d2.py (no function)   34 0 0   100%
tests / unit / views / test_graphml.py TestGraphML.graph_fixture   6 0 0   100%
tests / unit / views / test_graphml.py TestGraphML.test_create_topology_graphml_default   7 0 0   100%
tests / unit / views / test_graphml.py TestGraphML.test_create_topology_graphml_custom_config   5 0 0   100%
tests / unit / views / test_graphml.py TestGraphML.test_export_topology_graphml   6 0 0   100%
tests / unit / views / test_graphml.py (no function)   12 0 0   100%
tests / unit / views / test_graphviz.py TestGraphviz.graph_fixture   5 0 0   100%
tests / unit / views / test_graphviz.py TestGraphviz.test_create_topology_graphviz_dot_default   6 0 0   100%
tests / unit / views / test_graphviz.py TestGraphviz.test_create_topology_graphviz_dot_custom_config   8 0 0   100%
tests / unit / views / test_graphviz.py TestGraphviz.test_export_topology_graphviz_dot   6 0 0   100%
tests / unit / views / test_graphviz.py TestGraphviz.test_check_dot_on_path_success   2 0 0   100%
tests / unit / views / test_graphviz.py TestGraphviz.test_check_dot_on_path_failure   3 0 0   100%
tests / unit / views / test_graphviz.py TestGraphviz.test_export_topology_graphviz_image_svg   10 0 0   100%
tests / unit / views / test_graphviz.py TestGraphviz.test_export_topology_graphviz_image_png   10 0 0   100%
tests / unit / views / test_graphviz.py TestGraphviz.test_export_topology_graphviz_image_failure   5 0 0   100%
tests / unit / views / test_graphviz.py TestGraphviz.test_export_topology_graphviz_image_generic_exception   5 0 0   100%
tests / unit / views / test_graphviz.py TestGraphviz.test_create_topology_graphviz_dot_clustering   21 0 0   100%
tests / unit / views / test_graphviz.py (no function)   30 0 0   100%
tests / unit / views / test_html.py TestHtml.graph_fixture   5 0 0   100%
tests / unit / views / test_html.py TestHtml.test_create_topology_html_default   9 0 0   100%
tests / unit / views / test_html.py TestHtml.test_create_topology_html_custom_config   6 0 0   100%
tests / unit / views / test_html.py TestHtml.test_export_topology_html   6 0 0   100%
tests / unit / views / test_html.py (no function)   12 0 0   100%
tests / unit / views / test_json.py TestJSON.graph_fixture   6 0 0   100%
tests / unit / views / test_json.py TestJSON.test_create_topology_json_default   12 0 0   100%
tests / unit / views / test_json.py TestJSON.test_create_topology_json_custom_data   6 0 0   100%
tests / unit / views / test_json.py TestJSON.test_export_topology_json   6 0 0   100%
tests / unit / views / test_json.py (no function)   13 0 0   100%
tests / unit / views / test_markdown.py TestMarkdown.test_wrap_in_markdown   5 0 0   100%
tests / unit / views / test_markdown.py TestMarkdown.test_export_markdown_wrapped   6 0 0   100%
tests / unit / views / test_markdown.py (no function)   6 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.graph_fixture   5 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_create_topology_mermaid_mmd_default   4 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_create_topology_mermaid_mmd_custom_config   8 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_create_topology_mermaid_mmd_link_style   4 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_export_topology_mermaid_mmd   6 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_check_mmdc_on_path_success   2 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_check_mmdc_on_path_failure   3 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_create_mmdc_script   6 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_execute_build_script_success   2 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_execute_build_script_failure   2 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_execute_build_script_not_found   2 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_cleanup_on_exit_exists   4 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_cleanup_on_exit_not_exists   4 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_export_topology_mermaid_image_svg   12 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_export_topology_mermaid_image_png   12 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_export_topology_mermaid_image_failure   11 0 0   100%
tests / unit / views / test_mermaid.py TestMermaid.test_create_topology_mermaid_mmd_clustering   19 0 0   100%
tests / unit / views / test_mermaid.py (no function)   47 0 0   100%
tests / unit / views / test_networkx.py TestNetworkX.test_to_networkx   12 0 0   100%
tests / unit / views / test_networkx.py TestNetworkX.test_to_networkx_missing_library   8 0 0   100%
tests / unit / views / test_networkx.py TestNetworkX.test_to_networkx_missing_library.mock_import   3 0 0   100%
tests / unit / views / test_networkx.py (no function)   7 0 0   100%
tests / unit / views / test_plantuml.py TestPlantUML.graph_fixture   5 0 0   100%
tests / unit / views / test_plantuml.py TestPlantUML.test_create_topology_plantuml_default   7 0 0   100%
tests / unit / views / test_plantuml.py TestPlantUML.test_create_topology_plantuml_custom_config   6 0 0   100%
tests / unit / views / test_plantuml.py TestPlantUML.test_export_topology_plantuml   6 0 0   100%
tests / unit / views / test_plantuml.py TestPlantUML.test_check_plantuml_on_path_success   2 0 0   100%
tests / unit / views / test_plantuml.py TestPlantUML.test_check_plantuml_on_path_failure   3 0 0   100%
tests / unit / views / test_plantuml.py TestPlantUML.test_export_topology_plantuml_image_svg_success   9 0 0   100%
tests / unit / views / test_plantuml.py TestPlantUML.test_export_topology_plantuml_image_png_success   9 0 0   100%
tests / unit / views / test_plantuml.py TestPlantUML.test_export_topology_plantuml_image_failure   5 0 0   100%
tests / unit / views / test_plantuml.py TestPlantUML.test_export_topology_plantuml_image_generic_exception   5 0 0   100%
tests / unit / views / test_plantuml.py TestPlantUML.test_create_topology_plantuml_clustering   19 0 0   100%
tests / unit / views / test_plantuml.py (no function)   34 0 0   100%
tests / unit / views / test_texttree.py TestTextTree.graph_fixture   7 0 0   100%
tests / unit / views / test_texttree.py TestTextTree.test_create_topology_tree_txt_simple   5 0 0   100%
tests / unit / views / test_texttree.py TestTextTree.test_create_topology_tree_txt_custom_config   6 0 0   100%
tests / unit / views / test_texttree.py TestTextTree.test_create_topology_tree_txt_circular_or_revisited   19 0 0   100%
tests / unit / views / test_texttree.py TestTextTree.test_export_topology_tree_txt   6 0 0   100%
tests / unit / views / test_texttree.py (no function)   13 0 0   100%
tests / unit / views / test_tikz.py TestTikZ.graph_fixture   5 0 0   100%
tests / unit / views / test_tikz.py TestTikZ.test_create_topology_tikz_graphs_lib   6 0 0   100%
tests / unit / views / test_tikz.py TestTikZ.test_create_topology_tikz_standard   7 0 0   100%
tests / unit / views / test_tikz.py TestTikZ.test_export_topology_tikz   6 0 0   100%
tests / unit / views / test_tikz.py (no function)   12 0 0   100%
tests / unit / views / test_toml.py TestTOML.graph_fixture   6 0 0   100%
tests / unit / views / test_toml.py TestTOML.test_create_topology_toml_default   12 0 0   100%
tests / unit / views / test_toml.py TestTOML.test_create_topology_toml_custom_data   6 0 0   100%
tests / unit / views / test_toml.py TestTOML.test_export_topology_toml   6 0 0   100%
tests / unit / views / test_toml.py (no function)   13 0 0   100%
tests / unit / views / test_utils.py test_detect_engine_priority   8 0 0   100%
tests / unit / views / test_utils.py test_detect_engine_none_available   3 0 0   100%
tests / unit / views / test_utils.py test_get_image_exporter_explicit   6 0 0   100%
tests / unit / views / test_utils.py test_get_image_exporter_auto   5 0 0   100%
tests / unit / views / test_utils.py test_get_image_exporter_invalid   2 0 0   100%
tests / unit / views / test_utils.py (no function)   12 0 0   100%
tests / unit / views / test_yaml.py TestYAML.graph_fixture   6 0 0   100%
tests / unit / views / test_yaml.py TestYAML.test_create_topology_yaml_default   12 0 0   100%
tests / unit / views / test_yaml.py TestYAML.test_create_topology_yaml_custom_data   6 0 0   100%
tests / unit / views / test_yaml.py TestYAML.test_export_topology_yaml   6 0 0   100%
tests / unit / views / test_yaml.py (no function)   13 0 0   100%
Total     4936 98 6   98%

No items found using the specified filter.