Coverage report: 86%

Files Functions Classes

coverage.py v7.16.1, created at 2026-09-17 19:08 +0000

File function   statements missing excluded   coverage
klayout_pex/__init__.py (no function)   0 0 0   100%
klayout_pex/common/__init__.py (no function)   0 0 0   100%
klayout_pex/common/capacitance_matrix.py CapacitanceMatrix.__getitem__   1 0 0   100%
klayout_pex/common/capacitance_matrix.py CapacitanceMatrix.__setitem__   1 1 0   0%
klayout_pex/common/capacitance_matrix.py CapacitanceMatrix.dimension   1 0 0   100%
klayout_pex/common/capacitance_matrix.py CapacitanceMatrix.parse_csv   10 1 0   90%
klayout_pex/common/capacitance_matrix.py CapacitanceMatrix.write_csv   9 0 0   100%
klayout_pex/common/capacitance_matrix.py CapacitanceMatrix.averaged_off_diagonals   11 0 0   100%
klayout_pex/common/capacitance_matrix.py (no function)   16 0 0   100%
klayout_pex/common/path_validation.py validate_files   16 16 0   0%
klayout_pex/common/path_validation.py (no function)   12 0 0   100%
klayout_pex/env.py EnvVar.default_value   9 1 0   89%
klayout_pex/env.py EnvVar.help_epilog_table   1 0 0   100%
klayout_pex/env.py Env.__init__   1 0 0   100%
klayout_pex/env.py Env.from_os_environ   7 0 0   100%
klayout_pex/env.py Env.default_magicrc_path   4 0 0   100%
klayout_pex/env.py Env.default_pdk   8 0 0   100%
klayout_pex/env.py Env.__getitem__   1 0 0   100%
klayout_pex/env.py Env.__contains__   1 1 0   0%
klayout_pex/env.py Env.__repr__   1 1 0   0%
klayout_pex/env.py (no function)   28 0 0   100%
klayout_pex/extraction_engine.py (no function)   6 0 0   100%
klayout_pex/fastcap/__init__.py (no function)   0 0 0   100%
klayout_pex/fastcap/fastcap_runner.py run_fastcap   25 25 0   0%
klayout_pex/fastcap/fastcap_runner.py fastcap_parse_capacitance_matrix   27 2 0   93%
klayout_pex/fastcap/fastcap_runner.py (no function)   9 0 0   100%
klayout_pex/fastcap/output_interpreter.py FastCapOutputInterpreter.signal_name_from_conductor_name   1 1 0   0%
klayout_pex/fastcap/output_interpreter.py (no function)   3 0 0   100%
klayout_pex/fastercap/__init__.py (no function)   0 0 0   100%
klayout_pex/fastercap/fastercap_input_builder.py FasterCapInputBuilder.__init__   5 0 0   100%
klayout_pex/fastercap/fastercap_input_builder.py FasterCapInputBuilder.dbu   1 0 0   100%
klayout_pex/fastercap/fastercap_input_builder.py FasterCapInputBuilder.gds_pair   7 2 0   71%
klayout_pex/fastercap/fastercap_input_builder.py FasterCapInputBuilder.shapes_of_net   7 1 0   86%
klayout_pex/fastercap/fastercap_input_builder.py FasterCapInputBuilder.shapes_of_layer   7 1 0   86%
klayout_pex/fastercap/fastercap_input_builder.py FasterCapInputBuilder.top_cell_bbox   1 0 0   100%
klayout_pex/fastercap/fastercap_input_builder.py FasterCapInputBuilder.build   112 39 0   65%
klayout_pex/fastercap/fastercap_input_builder.py FasterCapInputBuilder.build.format_terminal   3 3 0   0%
klayout_pex/fastercap/fastercap_input_builder.py (no function)   17 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelBuilder.__init__   11 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelBuilder.add_material   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelBuilder.add_dielectric   3 1 0   67%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelBuilder.add_conductor   3 1 0   67%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelBuilder._norm2z   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelBuilder._z2norm   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelBuilder._add_layer   11 1 0   91%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelBuilder.generate   26 1 0   96%
klayout_pex/fastercap/fastercap_model_generator.py HDielKey.__str__   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py HDielKey.topic   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py HDielKey.reversed   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py HCondKey.__str__   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py HCondKey.topic   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py Point.__sub__   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py Point.sq_length   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py Point.to_fastcap   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py vector_product   2 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py dot_product   2 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py Triangle.reversed   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py Triangle.outside_reference_point   6 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py Triangle.to_fastcap   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py Triangle.__len__   1 1 0   0%
klayout_pex/fastercap/fastercap_model_generator.py Triangle.__getitem__   5 1 0   80%
klayout_pex/fastercap/fastercap_model_generator.py Edge.vector_of_edge   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py Edge.reversed   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.__init__   16 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.reset   2 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.add_in   4 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.add_out   4 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.finish_z   103 6 0   94%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.next_z   45 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.generate_hdiel   10 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.generate_v_surface   10 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.generate_vdiel   6 1 0   83%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.generate_hcond_in   10 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.generate_hcond_out   11 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.generate_vcond   6 1 0   83%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.triangulate   6 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.triangulate.convert_point   3 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.finalize   24 1 0   96%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.write_fastcap   49 10 0   80%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator._write_fastercap_geo   11 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.check   13 1 0   92%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator._check_tris   14 4 0   71%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator._normed_edges   8 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator._normed_edges.normed_dbu   1 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator._point2s   1 1 0   0%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator._edge2s   1 1 0   0%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator._is_antiparallel   5 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator._split_edges   33 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator.dump_stl   8 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator._write_as_stl   14 1 0   93%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator._merge_events   24 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator._collect_diel_tris   10 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py FasterCapModelGenerator._collect_cond_tris   5 0 0   100%
klayout_pex/fastercap/fastercap_model_generator.py (no function)   120 0 0   100%
klayout_pex/fastercap/fastercap_runner.py run_fastercap   28 3 0   89%
klayout_pex/fastercap/fastercap_runner.py fastercap_parse_capacitance_matrix   21 2 0   90%
klayout_pex/fastercap/fastercap_runner.py (no function)   8 0 0   100%
klayout_pex/fastercap/output_interpreter.py FasterCapOutputInterpreter.signal_name_from_conductor_name   1 0 0   100%
klayout_pex/fastercap/output_interpreter.py (no function)   3 0 0   100%
klayout_pex/klayout/__init__.py (no function)   1 0 0   100%
klayout_pex/klayout/capacitance_matrix_interpreter.py CapacitanceMatrixInterpreter.signal_name_from_conductor_name   1 1 0   0%
klayout_pex/klayout/capacitance_matrix_interpreter.py (no function)   5 0 0   100%
klayout_pex/klayout/lvs_runner.py LVSRunner.run_klayout_lvs   19 0 0   100%
klayout_pex/klayout/lvs_runner.py (no function)   8 0 0   100%
klayout_pex/klayout/lvsdb_extractor.py KLayoutExtractionContext.prepare_extraction   11 0 0   100%
klayout_pex/klayout/lvsdb_extractor.py KLayoutExtractionContext.build_LVS_layer_map   25 2 0   92%
klayout_pex/klayout/lvsdb_extractor.py KLayoutExtractionContext.nonempty_extracted_layers   31 2 0   94%
klayout_pex/klayout/lvsdb_extractor.py KLayoutExtractionContext.top_cell_bbox   5 1 0   80%
klayout_pex/klayout/lvsdb_extractor.py KLayoutExtractionContext.shapes_of_net   14 1 0   93%
klayout_pex/klayout/lvsdb_extractor.py KLayoutExtractionContext.shapes_of_net.add_shapes_from_region   7 0 0   100%
klayout_pex/klayout/lvsdb_extractor.py KLayoutExtractionContext.shapes_of_layer   18 1 0   94%
klayout_pex/klayout/lvsdb_extractor.py KLayoutExtractionContext.pins_of_layer   8 1 0   88%
klayout_pex/klayout/lvsdb_extractor.py KLayoutExtractionContext.labels_of_layer   9 0 0   100%
klayout_pex/klayout/lvsdb_extractor.py KLayoutExtractionContext.top_circuit   1 0 0   100%
klayout_pex/klayout/lvsdb_extractor.py KLayoutExtractionContext.devices_by_name   46 10 0   78%
klayout_pex/klayout/lvsdb_extractor.py KLayoutExtractionContext.pins_pb2_by_layer   31 1 0   97%
klayout_pex/klayout/lvsdb_extractor.py (no function)   58 0 0   100%
klayout_pex/klayout/netlist_csv.py NetlistCSVWriter.write_csv   17 2 0   88%
klayout_pex/klayout/netlist_csv.py (no function)   6 0 0   100%
klayout_pex/klayout/netlist_expander.py NetlistExpander.expand   52 1 0   98%
klayout_pex/klayout/netlist_expander.py NetlistExpander.expand.add_parasitic_cap   8 1 0   88%
klayout_pex/klayout/netlist_expander.py (no function)   11 0 0   100%
klayout_pex/klayout/netlist_printer.py NetlistPrinter.__init__   6 0 0   100%
klayout_pex/klayout/netlist_printer.py NetlistPrinter.write   1 0 0   100%
klayout_pex/klayout/netlist_printer.py NetlistPrinter.write_header   9 0 0   100%
klayout_pex/klayout/netlist_printer.py NetlistPrinter.write_device   9 0 0   100%
klayout_pex/klayout/netlist_printer.py (no function)   13 0 0   100%
klayout_pex/klayout/netlist_reducer.py NetlistReducer.reduce   16 3 0   81%
klayout_pex/klayout/netlist_reducer.py (no function)   6 0 0   100%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.__init__   14 1 0   93%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.to_grid   5 1 0   80%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.dbu_to_grid   1 0 0   100%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.gds_pair   1 0 0   100%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.shapes_of_net   4 1 0   75%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.metal_layer_by_name   1 1 0   0%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.metal_layers_by_canonical_name   6 6 0   0%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.resolve_metal   18 18 0   0%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.canonical_name   4 1 0   75%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.claim_name   5 2 0   60%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.build   15 0 0   100%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.build_units   6 0 0   100%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.build_meta   7 1 0   86%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.build_meta.add   3 0 0   100%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.build_ground_plane   8 0 0   100%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.build_layers   32 19 0   41%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.included_dielectric_names   1 0 0   100%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.outermost_profile   14 14 0   0%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.conformal_thicknesses   7 7 0   0%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.build_dielectrics   32 11 0   66%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.build_dielectrics.next_metal_after   4 2 0   50%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.add_simple_dielectric   13 13 0   0%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.add_conformal_dielectric   17 17 0   0%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.shape_layers   8 1 0   88%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.build_conductors   23 3 0   87%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.add_shapes   19 1 0   95%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.fill_ring   4 0 0   100%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.add_terminal   13 0 0   100%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.build_terminals   60 9 0   85%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.build_resistance   24 14 0   42%
klayout_pex/klayout/pex25d_builder.py PEX25DBuilder.build_domain   7 5 0   29%
klayout_pex/klayout/pex25d_builder.py build_pex25d_file   2 2 0   0%
klayout_pex/klayout/pex25d_builder.py (no function)   66 0 2   100%
klayout_pex/klayout/repair_rdb.py parse_category_path   29 29 0   0%
klayout_pex/klayout/repair_rdb.py repair_rdb_xml   20 20 0   0%
klayout_pex/klayout/repair_rdb.py repair_rdb   13 13 0   0%
klayout_pex/klayout/repair_rdb.py (no function)   17 4 0   76%
klayout_pex/klayout/rex_core.py klayout_r_extractor_tech   23 2 0   91%
klayout_pex/klayout/rex_core.py (no function)   3 0 0   100%
klayout_pex/klayout/shapes_pb2_converter.py ShapesConverter.__init__   1 0 0   100%
klayout_pex/klayout/shapes_pb2_converter.py ShapesConverter.klayout_point   1 0 0   100%
klayout_pex/klayout/shapes_pb2_converter.py ShapesConverter.klayout_point_to_pb   2 0 0   100%
klayout_pex/klayout/shapes_pb2_converter.py ShapesConverter.klayout_box   4 0 0   100%
klayout_pex/klayout/shapes_pb2_converter.py ShapesConverter.klayout_box_to_pb   10 0 0   100%
klayout_pex/klayout/shapes_pb2_converter.py ShapesConverter.klayout_polygon   5 1 0   80%
klayout_pex/klayout/shapes_pb2_converter.py ShapesConverter.klayout_polygon_to_pb   6 0 0   100%
klayout_pex/klayout/shapes_pb2_converter.py ShapesConverter.klayout_shape   7 3 0   57%
klayout_pex/klayout/shapes_pb2_converter.py ShapesConverter.klayout_shape_to_pb   5 5 0   0%
klayout_pex/klayout/shapes_pb2_converter.py ShapesConverter.klayout_region   10 4 0   60%
klayout_pex/klayout/shapes_pb2_converter.py ShapesConverter.klayout_region_to_pb   2 0 0   100%
klayout_pex/klayout/shapes_pb2_converter.py (no function)   14 0 0   100%
klayout_pex/kpex_cli.py KpexCLI._add_special_options   6 0 0   100%
klayout_pex/kpex_cli.py KpexCLI._add_pex_setup_arguments   10 1 0   90%
klayout_pex/kpex_cli.py KpexCLI._add_pex_input_arguments   8 0 0   100%
klayout_pex/kpex_cli.py KpexCLI._add_engine_arguments   5 0 0   100%
klayout_pex/kpex_cli.py KpexCLI._add_extraction_options   2 0 0   100%
klayout_pex/kpex_cli.py KpexCLI._add_tech_arguments   2 0 0   100%
klayout_pex/kpex_cli.py KpexCLI._add_fastercap_arguments   12 0 0   100%
klayout_pex/kpex_cli.py KpexCLI._add_magic_arguments   18 1 0   94%
klayout_pex/kpex_cli.py KpexCLI._add_analytical_25d_arguments   4 0 0   100%
klayout_pex/kpex_cli.py KpexCLI._add_pex25d_output_arguments   9 0 0   100%
klayout_pex/kpex_cli.py KpexCLI.parse_args   39 4 0   90%
klayout_pex/kpex_cli.py KpexCLI.validate_args   149 90 0   40%
klayout_pex/kpex_cli.py KpexCLI.validate_args.input_file_stem   1 0 0   100%
klayout_pex/kpex_cli.py KpexCLI.create_netlist_printer   2 0 0   100%
klayout_pex/kpex_cli.py KpexCLI.build_fastercap_input   15 2 0   87%
klayout_pex/kpex_cli.py KpexCLI.run_fastercap_extraction   36 2 0   94%
klayout_pex/kpex_cli.py KpexCLI.run_magic_extraction   41 41 0   0%
klayout_pex/kpex_cli.py KpexCLI.run_fastcap_extraction   24 24 0   0%
klayout_pex/kpex_cli.py KpexCLI.run_kpex_2_5d_engine   36 6 0   83%
klayout_pex/kpex_cli.py KpexCLI.setup_logging   17 5 0   71%
klayout_pex/kpex_cli.py KpexCLI.setup_logging.register_log_file_handler   6 0 0   100%
klayout_pex/kpex_cli.py KpexCLI.setup_logging.reregister_log_file_handler   13 0 0   100%
klayout_pex/kpex_cli.py KpexCLI.modification_date   2 0 0   100%
klayout_pex/kpex_cli.py KpexCLI.create_lvsdb   29 4 0   86%
klayout_pex/kpex_cli.py KpexCLI.normalize_argv   12 4 0   67%
klayout_pex/kpex_cli.py KpexCLI._writes_artifact_to_stdout   1 0 0   100%
klayout_pex/kpex_cli.py KpexCLI.main   22 5 0   77%
klayout_pex/kpex_cli.py KpexCLI.run_pex25d_generation   40 40 0   0%
klayout_pex/kpex_cli.py KpexCLI.run_extraction   41 6 0   85%
klayout_pex/kpex_cli.py KpexCLI.run_extraction.dump_layers   9 0 0   100%
klayout_pex/kpex_cli.py KpexCLI.rcx25_extraction_results   3 1 0   67%
klayout_pex/kpex_cli.py KpexCLI.rcx25_extracted_csv_path   3 1 0   67%
klayout_pex/kpex_cli.py KpexCLI.fastercap_extracted_csv_path   3 1 0   67%
klayout_pex/kpex_cli.py (no function)   111 2 0   98%
klayout_pex/log/__init__.py (no function)   1 0 0   100%
klayout_pex/log/logger.py LogLevel.level_by_name   1 1 0   0%
klayout_pex/log/logger.py LogLevelFormatter.format   6 0 0   100%
klayout_pex/log/logger.py LogLevelFilter.__init__   3 0 0   100%
klayout_pex/log/logger.py LogLevelFilter.filter   3 0 0   100%
klayout_pex/log/logger.py set_log_level   1 0 0   100%
klayout_pex/log/logger.py get_log_level   1 0 0   100%
klayout_pex/log/logger.py register_additional_handler   1 0 0   100%
klayout_pex/log/logger.py deregister_additional_handler   1 0 0   100%
klayout_pex/log/logger.py configure_logger   11 0 0   100%
klayout_pex/log/logger.py debug   3 0 0   100%
klayout_pex/log/logger.py subproc   3 0 0   100%
klayout_pex/log/logger.py rule   0 0 9   100%
klayout_pex/log/logger.py info   3 0 0   100%
klayout_pex/log/logger.py warning   3 0 0   100%
klayout_pex/log/logger.py error   3 0 0   100%
klayout_pex/log/logger.py (no function)   38 0 1   100%
klayout_pex/magic/__init__.py (no function)   0 0 0   100%
klayout_pex/magic/magic_ext_data_structures.py ResExtData.rnodes_by_name   1 1 0   0%
klayout_pex/magic/magic_ext_data_structures.py (no function)   79 0 0   100%
klayout_pex/magic/magic_ext_file_parser.py parse_magic_pex_run   22 3 0   86%
klayout_pex/magic/magic_ext_file_parser.py parse_magic_ext_file   17 3 0   82%
klayout_pex/magic/magic_ext_file_parser.py parse_magic_res_ext_file   11 11 0   0%
klayout_pex/magic/magic_ext_file_parser.py (no function)   7 0 0   100%
klayout_pex/magic/magic_log_analyzer.py is_magic_marker   1 0 0   100%
klayout_pex/magic/magic_log_analyzer.py MagicLogAnalyzer.__init__   4 0 0   100%
klayout_pex/magic/magic_log_analyzer.py MagicLogAnalyzer.analyze   2 0 0   100%
klayout_pex/magic/magic_log_analyzer.py MagicLogAnalyzer.analyze_cell   57 25 0   56%
klayout_pex/magic/magic_log_analyzer.py MagicLogAnalyzer.analyze_cell.scaled   1 0 0   100%
klayout_pex/magic/magic_log_analyzer.py MagicLogAnalyzer.analyze_cell.box_for_point_dbu   1 0 0   100%
klayout_pex/magic/magic_log_analyzer.py MagicLogAnalyzer.analyze_cell.clamped   6 2 0   67%
klayout_pex/magic/magic_log_analyzer.py _parse_args   11 11 0   0%
klayout_pex/magic/magic_log_analyzer.py main   6 6 0   0%
klayout_pex/magic/magic_log_analyzer.py (no function)   25 1 0   96%
klayout_pex/magic/magic_runner.py MagicUniqueMode.to_cmd   9 9 0   0%
klayout_pex/magic/magic_runner.py prepare_magic_script   13 13 0   0%
klayout_pex/magic/magic_runner.py run_magic   19 19 0   0%
klayout_pex/magic/magic_runner.py (no function)   31 0 0   100%
klayout_pex/netlistsvg/netlist_json.py NetlistJSONWriter.__init__   2 0 0   100%
klayout_pex/netlistsvg/netlist_json.py NetlistJSONWriter._get_or_create_id   7 0 0   100%
klayout_pex/netlistsvg/netlist_json.py NetlistJSONWriter.dict_for_ports   7 0 0   100%
klayout_pex/netlistsvg/netlist_json.py NetlistJSONWriter.dict_for_cells   44 1 0   98%
klayout_pex/netlistsvg/netlist_json.py NetlistJSONWriter.netlist_json_dict   2 0 0   100%
klayout_pex/netlistsvg/netlist_json.py NetlistJSONWriter.write_json   3 0 0   100%
klayout_pex/netlistsvg/netlist_json.py (no function)   12 0 0   100%
klayout_pex/pdk_config.py PDK.from_string   1 0 0   100%
klayout_pex/pdk_config.py PDK.legacy_aliases   2 0 0   100%
klayout_pex/pdk_config.py PDK.config   16 6 0   62%
klayout_pex/pdk_config.py (no function)   22 0 0   100%
klayout_pex/pex25d/__init__.py _Proto._message_classes   8 0 0   100%
klayout_pex/pex25d/__init__.py _Proto.__getattr__   8 1 0   88%
klayout_pex/pex25d/__init__.py _Proto.__dir__   1 0 0   100%
klayout_pex/pex25d/__init__.py read   2 0 0   100%
klayout_pex/pex25d/__init__.py write   2 0 0   100%
klayout_pex/pex25d/__init__.py (no function)   29 0 0   100%
klayout_pex/pex25d/artifact.py ArtifactSpec.is_stdio   1 0 0   100%
klayout_pex/pex25d/artifact.py ArtifactSpec.is_binary   1 0 0   100%
klayout_pex/pex25d/artifact.py ArtifactSpec.__str__   2 0 0   100%
klayout_pex/pex25d/artifact.py infer_artifact_spec   20 0 0   100%
klayout_pex/pex25d/artifact.py open_artifact_read   10 6 0   40%
klayout_pex/pex25d/artifact.py open_artifact_write   13 7 0   46%
klayout_pex/pex25d/artifact.py derive_path   11 11 0   0%
klayout_pex/pex25d/artifact.py (no function)   39 0 0   100%
klayout_pex/pex25d/codec.py load_artifact   19 3 0   84%
klayout_pex/pex25d/codec.py save_artifact   18 3 0   83%
klayout_pex/pex25d/codec.py (no function)   7 0 0   100%
klayout_pex/pex25d/diagnostics.py Severity.proto_name   1 0 0   100%
klayout_pex/pex25d/diagnostics.py Tier.proto_name   1 0 0   100%
klayout_pex/pex25d/diagnostics.py SourceRef.__str__   6 6 0   0%
klayout_pex/pex25d/diagnostics.py source_ref   9 4 0   56%
klayout_pex/pex25d/diagnostics.py Diagnostic.as_json_dict   6 2 0   67%
klayout_pex/pex25d/diagnostics.py DiagnosticsReport.add   1 0 0   100%
klayout_pex/pex25d/diagnostics.py DiagnosticsReport.extend   1 1 0   0%
klayout_pex/pex25d/diagnostics.py DiagnosticsReport.num_errors   1 0 0   100%
klayout_pex/pex25d/diagnostics.py DiagnosticsReport.num_warnings   1 0 0   100%
klayout_pex/pex25d/diagnostics.py DiagnosticsReport.exit_code   5 0 0   100%
klayout_pex/pex25d/diagnostics.py DiagnosticsReport.render   9 4 0   56%
klayout_pex/pex25d/diagnostics.py DiagnosticsReport._render_human   19 3 0   84%
klayout_pex/pex25d/diagnostics.py DiagnosticsReport._render_json   6 1 0   83%
klayout_pex/pex25d/diagnostics.py DiagnosticsReport._render_pb   17 17 0   0%
klayout_pex/pex25d/diagnostics.py _fill_source_ref   6 6 0   0%
klayout_pex/pex25d/diagnostics.py io_text_types   2 2 0   0%
klayout_pex/pex25d/diagnostics.py diagnostics_stream   1 1 0   0%
klayout_pex/pex25d/diagnostics.py (no function)   68 0 0   100%
klayout_pex/pex25d/exporters.py export   6 6 0   0%
klayout_pex/pex25d/exporters.py load_fastercap_backend   5 5 0   0%
klayout_pex/pex25d/exporters.py (no function)   24 0 0   100%
klayout_pex/pex25d/format_version.py (no function)   3 0 0   100%
klayout_pex/pex25d/pex25d_cli.py _epilog   1 0 0   100%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI._add_special_options   4 0 0   100%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI._add_input_argument   5 0 0   100%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI._add_output_arguments   5 0 0   100%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI._add_diagnostics_arguments   5 0 0   100%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI.parse_args   40 3 0   92%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI.validate_args   25 8 0   68%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI._load   2 0 0   100%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI.run_validate   3 0 0   100%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI.run_convert   7 0 0   100%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI.run_resolve   7 0 0   100%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI.run_export   11 11 0   0%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI.run_show   4 0 0   100%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI.main   11 1 0   91%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI._run   28 10 0   64%
klayout_pex/pex25d/pex25d_cli.py Pex25DCLI._emit_diagnostics   15 2 0   87%
klayout_pex/pex25d/pex25d_cli.py (no function)   47 0 0   100%
klayout_pex/pex25d/protobuf.py _import   9 6 0   33%
klayout_pex/pex25d/protobuf.py schema_names   3 0 0   100%
klayout_pex/pex25d/protobuf.py schema_module   3 1 0   67%
klayout_pex/pex25d/protobuf.py pex25d_file_pb2   1 0 0   100%
klayout_pex/pex25d/protobuf.py pex25d_scene_pb2   1 0 0   100%
klayout_pex/pex25d/protobuf.py pex25d_dielectric_pb2   1 0 0   100%
klayout_pex/pex25d/protobuf.py pex25d_geometry_pb2   1 0 0   100%
klayout_pex/pex25d/protobuf.py pex25d_terminal_pb2   1 0 0   100%
klayout_pex/pex25d/protobuf.py pex25d_diagnostics_pb2   1 1 0   0%
klayout_pex/pex25d/protobuf.py pex25d_source_ref_pb2   1 0 0   100%
klayout_pex/pex25d/protobuf.py kind_for_message   9 0 0   100%
klayout_pex/pex25d/protobuf.py message_class_for_kind   8 0 0   100%
klayout_pex/pex25d/protobuf.py (no function)   27 0 0   100%
klayout_pex/pex25d/reader.py Record.head   1 0 0   100%
klayout_pex/pex25d/reader.py Record.ref   1 0 0   100%
klayout_pex/pex25d/reader.py Cursor.__init__   3 0 0   100%
klayout_pex/pex25d/reader.py Cursor.exhausted   1 0 0   100%
klayout_pex/pex25d/reader.py Cursor.peek   1 0 0   100%
klayout_pex/pex25d/reader.py Cursor.take   6 0 0   100%
klayout_pex/pex25d/reader.py Cursor.keyword   7 0 0   100%
klayout_pex/pex25d/reader.py Cursor.grid   2 0 0   100%
klayout_pex/pex25d/reader.py Cursor.number   2 0 0   100%
klayout_pex/pex25d/reader.py Cursor.end   3 0 0   100%
klayout_pex/pex25d/reader.py split_records   17 3 0   82%
klayout_pex/pex25d/reader.py strip_comment   12 0 0   100%
klayout_pex/pex25d/reader.py tokenize   17 0 0   100%
klayout_pex/pex25d/reader.py Pex25DTextReader.__init__   8 0 0   100%
klayout_pex/pex25d/reader.py Pex25DTextReader.diagnose   3 0 0   100%
klayout_pex/pex25d/reader.py Pex25DTextReader.error   1 0 0   100%
klayout_pex/pex25d/reader.py Pex25DTextReader.warn   1 0 0   100%
klayout_pex/pex25d/reader.py Pex25DTextReader.source_of   7 0 0   100%
klayout_pex/pex25d/reader.py Pex25DTextReader.attach_source   3 0 0   100%
klayout_pex/pex25d/reader.py Pex25DTextReader.to_fraction   4 0 0   100%
klayout_pex/pex25d/reader.py Pex25DTextReader.to_grid   12 0 0   100%
klayout_pex/pex25d/reader.py Pex25DTextReader.to_double   2 0 0   100%
klayout_pex/pex25d/reader.py Pex25DTextReader.read   9 1 0   89%
klayout_pex/pex25d/reader.py Pex25DTextReader.consume   10 0 0   100%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_include   20 1 0   95%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_header   21 5 0   76%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_units   26 9 0   65%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_meta   18 1 0   94%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_ground_plane   15 3 0   80%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_metal   12 1 0   92%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_via   12 1 0   92%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_dielectric_simple   22 4 0   82%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_dielectric_conformal   29 4 0   86%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_dielectric_background   14 4 0   71%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_conductor   9 1 0   89%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_box   23 5 0   78%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_polygon   28 5 0   82%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_ring   11 3 0   73%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_terminal   35 9 0   74%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_resistance   40 6 0   85%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_domain_margin   12 2 0   83%
klayout_pex/pex25d/reader.py Pex25DTextReader.read_domain_box   17 2 0   88%
klayout_pex/pex25d/reader.py fill_ring   3 0 0   100%
klayout_pex/pex25d/reader.py read_pex25d_text   1 0 0   100%
klayout_pex/pex25d/reader.py (no function)   71 0 0   100%
klayout_pex/pex25d/resolver.py Resolver.__init__   8 0 0   100%
klayout_pex/pex25d/resolver.py Resolver.diagnose   3 0 0   100%
klayout_pex/pex25d/resolver.py Resolver.resolve   21 2 0   90%
klayout_pex/pex25d/resolver.py Resolver.collect_profiles   27 0 0   100%
klayout_pex/pex25d/resolver.py Resolver.declare   4 0 0   100%
klayout_pex/pex25d/resolver.py Resolver.resolve_ground_plane   8 1 0   88%
klayout_pex/pex25d/resolver.py Resolver.resolve_layers   32 2 0   94%
klayout_pex/pex25d/resolver.py Resolver.chain_of   20 0 0   100%
klayout_pex/pex25d/resolver.py Resolver.wrapped_extent   4 0 0   100%
klayout_pex/pex25d/resolver.py Resolver.declare_dielectric_names   7 0 0   100%
klayout_pex/pex25d/resolver.py Resolver.resolve_dielectrics   38 3 0   92%
klayout_pex/pex25d/resolver.py Resolver.resolve_dielectric_extent   20 3 0   85%
klayout_pex/pex25d/resolver.py Resolver.resolve_conductors   36 4 0   89%
klayout_pex/pex25d/resolver.py Resolver.resolve_terminal   45 3 0   93%
klayout_pex/pex25d/resolver.py Resolver.geometry_bounds   30 4 0   87%
klayout_pex/pex25d/resolver.py Resolver.resolve_domain   22 1 0   95%
klayout_pex/pex25d/resolver.py lateral_of   4 0 0   100%
klayout_pex/pex25d/resolver.py polygon_bounds_tuple   3 0 0   100%
klayout_pex/pex25d/resolver.py polygon_bounds   5 0 0   100%
klayout_pex/pex25d/resolver.py intersect_boxes   10 0 0   100%
klayout_pex/pex25d/resolver.py same_box   1 0 0   100%
klayout_pex/pex25d/resolver.py box_contains   1 0 0   100%
klayout_pex/pex25d/resolver.py boxes_overlap   1 0 0   100%
klayout_pex/pex25d/resolver.py extend   3 0 0   100%
klayout_pex/pex25d/resolver.py fill_box3d   2 0 0   100%
klayout_pex/pex25d/resolver.py clip_manhattan_polygon   25 1 0   96%
klayout_pex/pex25d/resolver.py resolve   1 0 0   100%
klayout_pex/pex25d/resolver.py (no function)   46 0 0   100%
klayout_pex/pex25d/show.py show   7 1 0   86%
klayout_pex/pex25d/show.py _grid_str   4 4 0   0%
klayout_pex/pex25d/show.py _show_header   6 0 0   100%
klayout_pex/pex25d/show.py _show_meta   6 1 0   83%
klayout_pex/pex25d/show.py _show_layers   14 0 0   100%
klayout_pex/pex25d/show.py _show_dielectrics   8 0 0   100%
klayout_pex/pex25d/show.py _show_conductors   6 0 0   100%
klayout_pex/pex25d/show.py _show_terminals   6 0 0   100%
klayout_pex/pex25d/show.py _show_resistance   8 1 0   88%
klayout_pex/pex25d/show.py _show_domain   11 3 0   73%
klayout_pex/pex25d/show.py (no function)   16 0 0   100%
klayout_pex/pex25d/validator.py Validator.__init__   2 0 0   100%
klayout_pex/pex25d/validator.py Validator.diagnose   1 0 0   100%
klayout_pex/pex25d/validator.py Validator.validate   3 0 0   100%
klayout_pex/pex25d/validator.py Validator.validate_file   18 0 0   100%
klayout_pex/pex25d/validator.py Validator.validate_scene   9 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_units   11 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_wrap_anchoring   15 1 0   93%
klayout_pex/pex25d/validator.py Validator.check_wrap_anchoring.outermost   7 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_conductors   8 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_resistance_coverage   6 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_depth_ties   9 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_names   10 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_resistance_records   10 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_scene_layers   15 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_scene_references   13 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_scene_order   6 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_scene_terminals   16 2 0   88%
klayout_pex/pex25d/validator.py Validator.check_shapes   4 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_box   3 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_polygon   12 0 0   100%
klayout_pex/pex25d/validator.py Validator.check_ring   18 2 0   89%
klayout_pex/pex25d/validator.py Validator.check_conductor_overlap   35 3 0   91%
klayout_pex/pex25d/validator.py Validator.geometric   1 0 0   100%
klayout_pex/pex25d/validator.py Shape.__str__   2 0 0   100%
klayout_pex/pex25d/validator.py shapes_of_file   6 0 0   100%
klayout_pex/pex25d/validator.py shapes_of_scene   6 0 0   100%
klayout_pex/pex25d/validator.py cross3   1 0 0   100%
klayout_pex/pex25d/validator.py dot3   1 0 0   100%
klayout_pex/pex25d/validator.py edges   2 0 0   100%
klayout_pex/pex25d/validator.py on_segment   1 0 0   100%
klayout_pex/pex25d/validator.py segments_meet   7 0 0   100%
klayout_pex/pex25d/validator.py ring_is_simple   13 0 0   100%
klayout_pex/pex25d/validator.py ring_is_collinear   5 1 0   80%
klayout_pex/pex25d/validator.py point_in_ring   9 0 0   100%
klayout_pex/pex25d/validator.py Polygon.rings   2 0 0   100%
klayout_pex/pex25d/validator.py Polygon.all_edges   2 0 0   100%
klayout_pex/pex25d/validator.py point_in_polygon   10 1 0   90%
klayout_pex/pex25d/validator.py ring_strictly_inside   3 0 0   100%
klayout_pex/pex25d/validator.py rings_meet   3 0 0   100%
klayout_pex/pex25d/validator.py crossing_x   8 0 0   100%
klayout_pex/pex25d/validator.py polygons_overlap   27 0 0   100%
klayout_pex/pex25d/validator.py item_of_box   1 0 0   100%
klayout_pex/pex25d/validator.py item_of_polygon   7 1 0   86%
klayout_pex/pex25d/validator.py items_overlap   3 0 0   100%
klayout_pex/pex25d/validator.py polygon_of   3 0 0   100%
klayout_pex/pex25d/validator.py is_scene   1 0 0   100%
klayout_pex/pex25d/validator.py geometric_tier   7 7 0   0%
klayout_pex/pex25d/validator.py validate   3 0 0   100%
klayout_pex/pex25d/validator.py (no function)   80 0 0   100%
klayout_pex/pex25d/writer.py format_exact   19 0 0   100%
klayout_pex/pex25d/writer.py format_double   2 0 0   100%
klayout_pex/pex25d/writer.py quote   5 1 0   80%
klayout_pex/pex25d/writer.py Pex25DTextWriter.__init__   7 1 0   86%
klayout_pex/pex25d/writer.py Pex25DTextWriter.length   1 0 0   100%
klayout_pex/pex25d/writer.py Pex25DTextWriter.emit   1 0 0   100%
klayout_pex/pex25d/writer.py Pex25DTextWriter.section   2 0 0   100%
klayout_pex/pex25d/writer.py Pex25DTextWriter.hint   4 0 0   100%
klayout_pex/pex25d/writer.py Pex25DTextWriter.emit_record   8 0 0   100%
klayout_pex/pex25d/writer.py Pex25DTextWriter.wrap_clause   9 0 0   100%
klayout_pex/pex25d/writer.py Pex25DTextWriter.write   9 0 0   100%
klayout_pex/pex25d/writer.py Pex25DTextWriter.write_header   22 4 0   82%
klayout_pex/pex25d/writer.py Pex25DTextWriter.write_ground_plane   7 2 0   71%
klayout_pex/pex25d/writer.py Pex25DTextWriter.write_layers   10 1 0   90%
klayout_pex/pex25d/writer.py Pex25DTextWriter.write_dielectrics   22 3 0   86%
klayout_pex/pex25d/writer.py Pex25DTextWriter.write_resistance   19 4 0   79%
klayout_pex/pex25d/writer.py Pex25DTextWriter.write_resistance.temperature_coefficients   3 1 0   67%
klayout_pex/pex25d/writer.py Pex25DTextWriter.write_conductors   19 4 0   79%
klayout_pex/pex25d/writer.py Pex25DTextWriter.write_shape   12 1 0   92%
klayout_pex/pex25d/writer.py Pex25DTextWriter.write_shape.ring   2 0 0   100%
klayout_pex/pex25d/writer.py Pex25DTextWriter.write_terminals   13 1 0   92%
klayout_pex/pex25d/writer.py Pex25DTextWriter.write_domain   10 2 0   80%
klayout_pex/pex25d/writer.py write_pex25d_text   1 0 0   100%
klayout_pex/pex25d/writer.py (no function)   35 0 0   100%
klayout_pex/rcx25/__init__.py (no function)   0 0 0   100%
klayout_pex/rcx25/c/__init__.py (no function)   0 0 0   100%
klayout_pex/rcx25/c/geometry_restorer.py GeometryRestorer.__init__   1 0 0   100%
klayout_pex/rcx25/c/geometry_restorer.py GeometryRestorer.restore_edge_interval   1 0 0   100%
klayout_pex/rcx25/c/geometry_restorer.py GeometryRestorer.restore_edge   1 0 0   100%
klayout_pex/rcx25/c/geometry_restorer.py GeometryRestorer.restore_polygon   1 0 0   100%
klayout_pex/rcx25/c/geometry_restorer.py GeometryRestorer.restore_region   1 1 0   0%
klayout_pex/rcx25/c/geometry_restorer.py (no function)   8 0 0   100%
klayout_pex/rcx25/c/overlap_extractor.py OverlapExtractor.__init__   6 0 0   100%
klayout_pex/rcx25/c/overlap_extractor.py OverlapExtractor.extract   5 0 0   100%
klayout_pex/rcx25/c/overlap_extractor.py OverlapExtractor.PEXPolygonNeighborhoodVisitor.__init__   7 0 0   100%
klayout_pex/rcx25/c/overlap_extractor.py OverlapExtractor.PEXPolygonNeighborhoodVisitor.neighbors   31 5 0   84%
klayout_pex/rcx25/c/overlap_extractor.py (no function)   12 0 0   100%
klayout_pex/rcx25/c/polygon_utils.py nearest_edge_distance   7 2 0   71%
klayout_pex/rcx25/c/polygon_utils.py find_polygon_with_nearest_edge   6 0 0   100%
klayout_pex/rcx25/c/polygon_utils.py nearest_edge   2 0 0   100%
klayout_pex/rcx25/c/polygon_utils.py (no function)   9 0 0   100%
klayout_pex/rcx25/c/sidewall_and_fringe_extractor.py SidewallAndFringeExtractor.__init__   8 0 0   100%
klayout_pex/rcx25/c/sidewall_and_fringe_extractor.py SidewallAndFringeExtractor.extract   10 0 0   100%
klayout_pex/rcx25/c/sidewall_and_fringe_extractor.py SidewallAndFringeExtractor.PEXEdgeNeighborhoodVisitor.__init__   10 0 0   100%
klayout_pex/rcx25/c/sidewall_and_fringe_extractor.py SidewallAndFringeExtractor.PEXEdgeNeighborhoodVisitor.inside_layer_name   1 0 0   100%
klayout_pex/rcx25/c/sidewall_and_fringe_extractor.py SidewallAndFringeExtractor.PEXEdgeNeighborhoodVisitor.begin_polygon   1 0 0   100%
klayout_pex/rcx25/c/sidewall_and_fringe_extractor.py SidewallAndFringeExtractor.PEXEdgeNeighborhoodVisitor.end_polygon   1 0 0   100%
klayout_pex/rcx25/c/sidewall_and_fringe_extractor.py SidewallAndFringeExtractor.PEXEdgeNeighborhoodVisitor.side_halo   1 0 0   100%
klayout_pex/rcx25/c/sidewall_and_fringe_extractor.py SidewallAndFringeExtractor.PEXEdgeNeighborhoodVisitor.on_edge   47 4 0   91%
klayout_pex/rcx25/c/sidewall_and_fringe_extractor.py SidewallAndFringeExtractor.PEXEdgeNeighborhoodVisitor.emit_sidewall   15 0 0   100%
klayout_pex/rcx25/c/sidewall_and_fringe_extractor.py SidewallAndFringeExtractor.PEXEdgeNeighborhoodVisitor.fringe_cap   15 4 0   73%
klayout_pex/rcx25/c/sidewall_and_fringe_extractor.py SidewallAndFringeExtractor.PEXEdgeNeighborhoodVisitor.emit_fringe   51 7 0   86%
klayout_pex/rcx25/c/sidewall_and_fringe_extractor.py (no function)   26 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.__init__   6 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_common   1 1 0   0%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_pins   1 1 0   0%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_rex_request   1 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_rex_tech   1 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_rex_request_devices   1 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_rex_request_pins   1 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_rex_request_network_extraction   1 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_rex_result   1 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_rex_result_networks   1 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_rex_nodes   1 1 0   0%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_rex_elements   1 1 0   0%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_devices   1 1 0   0%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_vias   1 1 0   0%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_overlap   1 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_sidewall   1 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_fringe   1 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.cat_edge_neighborhood   1 1 0   0%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.save   1 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_shapes   3 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_overlap   8 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_sidewall   5 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_sideoverlap   12 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_edge_neighborhood   10 10 0   0%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_devices   2 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_device_terminals   4 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_device   6 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_pins   2 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_pb_pin   3 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_via   3 3 0   0%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_pin   4 4 0   0%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_rex_tech   10 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_net_extraction_request   8 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_rex_request   5 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_rex_result_network   9 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_rex_result   2 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.marker_box_for_pb_point   9 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.marker_box_for_node_location   8 2 0   75%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.marker_arrow_between_nodes   4 0 0   100%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_node   17 3 0   82%
klayout_pex/rcx25/extraction_reporter.py ExtractionReporter.output_element   8 0 0   100%
klayout_pex/rcx25/extraction_reporter.py (no function)   75 0 0   100%
klayout_pex/rcx25/extraction_results.py SideOverlapKey.__repr__   1 1 0   0%
klayout_pex/rcx25/extraction_results.py SideOverlapKey.__post_init__   8 4 0   50%
klayout_pex/rcx25/extraction_results.py SideOverlapCap.__str__   1 1 0   0%
klayout_pex/rcx25/extraction_results.py NetCoupleKey.__repr__   1 1 0   0%
klayout_pex/rcx25/extraction_results.py NetCoupleKey.__lt__   3 1 0   67%
klayout_pex/rcx25/extraction_results.py NetCoupleKey.__post_init__   4 2 0   50%
klayout_pex/rcx25/extraction_results.py NetCoupleKey.normed   3 0 0   100%
klayout_pex/rcx25/extraction_results.py ExtractionSummary.merged   8 0 0   100%
klayout_pex/rcx25/extraction_results.py CellExtractionResults.add_overlap_cap   1 0 0   100%
klayout_pex/rcx25/extraction_results.py CellExtractionResults.add_sidewall_cap   1 0 0   100%
klayout_pex/rcx25/extraction_results.py CellExtractionResults.add_sideoverlap_cap   1 0 0   100%
klayout_pex/rcx25/extraction_results.py CellExtractionResults.summarize   27 0 0   100%
klayout_pex/rcx25/extraction_results.py CellExtractionResults.summarize.node_name   5 0 0   100%
klayout_pex/rcx25/extraction_results.py ExtractionResults.summarize   2 0 0   100%
klayout_pex/rcx25/extraction_results.py (no function)   83 0 0   100%
klayout_pex/rcx25/extractor.py RCX25Extractor.__init__   9 1 0   89%
klayout_pex/rcx25/extractor.py RCX25Extractor.gds_pair   1 0 0   100%
klayout_pex/rcx25/extractor.py RCX25Extractor.shapes_of_layer   7 1 0   86%
klayout_pex/rcx25/extractor.py RCX25Extractor.extract   14 5 0   64%
klayout_pex/rcx25/extractor.py RCX25Extractor.extract_cell   50 0 0   100%
klayout_pex/rcx25/extractor.py (no function)   22 0 0   100%
klayout_pex/rcx25/netlist_expander.py RCX25NetlistExpander.expand   56 4 0   93%
klayout_pex/rcx25/netlist_expander.py RCX25NetlistExpander.expand.add_net_if_needed   3 0 0   100%
klayout_pex/rcx25/netlist_expander.py (no function)   9 0 0   100%
klayout_pex/rcx25/pex_mode.py PEXMode.need_capacitance   7 2 0   71%
klayout_pex/rcx25/pex_mode.py PEXMode.need_resistance   7 2 0   71%
klayout_pex/rcx25/pex_mode.py (no function)   8 0 0   100%
klayout_pex/rcx25/r/__init__.py (no function)   0 0 0   100%
klayout_pex/rcx25/r/r_extractor.py RExtractor.__init__   8 0 0   100%
klayout_pex/rcx25/r/r_extractor.py RExtractor.prepare_r_extractor_tech_pb   86 16 0   81%
klayout_pex/rcx25/r/r_extractor.py RExtractor.prepare_request   39 4 0   90%
klayout_pex/rcx25/r/r_extractor.py RExtractor.prepare_request.get_or_create_net_request   6 0 0   100%
klayout_pex/rcx25/r/r_extractor.py RExtractor.extract   94 5 0   95%
klayout_pex/rcx25/r/r_extractor.py (no function)   21 0 0   100%
klayout_pex/rcx25/types.py (no function)   12 0 0   100%
klayout_pex/tech_info.py TechInfo.duplicate_names   18 0 0   100%
klayout_pex/tech_info.py TechInfo.parse_tech_def   7 0 0   100%
klayout_pex/tech_info.py TechInfo.from_json   2 0 0   100%
klayout_pex/tech_info.py TechInfo.__init__   2 0 0   100%
klayout_pex/tech_info.py TechInfo.gds_pair_for_computed_layer_name   1 0 0   100%
klayout_pex/tech_info.py TechInfo.computed_layer_info_by_name   1 0 0   100%
klayout_pex/tech_info.py TechInfo.computed_layer_info_by_gds_pair   1 0 0   100%
klayout_pex/tech_info.py TechInfo.canonical_layer_name_by_gds_pair   1 0 0   100%
klayout_pex/tech_info.py TechInfo.layer_info_by_name   1 1 0   0%
klayout_pex/tech_info.py TechInfo.pin_layer_mapping_for_drw_gds_pair   1 1 0   0%
klayout_pex/tech_info.py TechInfo.gds_pair_for_layer_name   1 0 0   100%
klayout_pex/tech_info.py TechInfo.layer_info_by_gds_pair   1 0 0   100%
klayout_pex/tech_info.py TechInfo.process_stack_layer_by_name   1 1 0   0%
klayout_pex/tech_info.py TechInfo.process_stack_layer_by_gds_pair   1 1 0   0%
klayout_pex/tech_info.py TechInfo.process_substrate_layer   1 0 0   100%
klayout_pex/tech_info.py TechInfo.process_diffusion_layers   1 0 0   100%
klayout_pex/tech_info.py TechInfo.gate_poly_layer   1 0 0   100%
klayout_pex/tech_info.py TechInfo.field_oxide_layer   1 0 0   100%
klayout_pex/tech_info.py TechInfo.process_metal_layers   1 0 0   100%
klayout_pex/tech_info.py TechInfo.filtered_dielectric_layers   7 0 0   100%
klayout_pex/tech_info.py TechInfo.dielectric_by_name   8 5 0   38%
klayout_pex/tech_info.py TechInfo.conformal_dielectric_wrapping   13 9 0   31%
klayout_pex/tech_info.py TechInfo.simple_dielectric_above_metal   13 2 0   85%
klayout_pex/tech_info.py TechInfo.contact_above_metal_layer_name   7 7 0   0%
klayout_pex/tech_info.py TechInfo.contact_by_device_lvs_layer_name   9 2 0   78%
klayout_pex/tech_info.py TechInfo.contact_by_contact_lvs_layer_name   11 0 0   100%
klayout_pex/tech_info.py TechInfo.gds_pair   7 2 0   71%
klayout_pex/tech_info.py TechInfo.bottom_and_top_layer_name_by_via_computed_layer_name   8 0 0   100%
klayout_pex/tech_info.py TechInfo.layer_resistance_by_layer_name   1 0 0   100%
klayout_pex/tech_info.py TechInfo.contact_resistance_by_device_layer_name   1 0 0   100%
klayout_pex/tech_info.py TechInfo.via_resistance_by_layer_name   1 0 0   100%
klayout_pex/tech_info.py TechInfo.milliohm_to_ohm   1 0 0   100%
klayout_pex/tech_info.py TechInfo.milliohm_by_cnt_to_ohm_by_square_for_contact   2 0 0   100%
klayout_pex/tech_info.py TechInfo.milliohm_by_cnt_to_ohm_by_square_for_via   2 0 0   100%
klayout_pex/tech_info.py TechInfo.substrate_cap_by_layer_name   1 0 0   100%
klayout_pex/tech_info.py TechInfo.overlap_cap_by_layer_names   9 0 0   100%
klayout_pex/tech_info.py TechInfo.overlap_cap_by_layer_names.convert_substrate_to_overlap_cap   5 0 0   100%
klayout_pex/tech_info.py TechInfo.sidewall_cap_by_layer_name   1 0 0   100%
klayout_pex/tech_info.py TechInfo.internal_substrate_layer_name   1 0 0   100%
klayout_pex/tech_info.py TechInfo.side_overlap_cap_by_layer_names   7 0 0   100%
klayout_pex/tech_info.py TechInfo.side_overlap_cap_by_layer_names.convert_substrate_to_side_overlap_cap   5 0 0   100%
klayout_pex/tech_info.py (no function)   89 0 0   100%
klayout_pex/tool_version_constraints.py Tool.env_var   6 6 0   0%
klayout_pex/tool_version_constraints.py Tool.version_argument   3 0 0   100%
klayout_pex/tool_version_constraints.py Tool.parse_version   13 2 0   85%
klayout_pex/tool_version_constraints.py Tool.detect_version   6 3 0   50%
klayout_pex/tool_version_constraints.py ToolVersionConstraint.specifier_set   1 0 0   100%
klayout_pex/tool_version_constraints.py ToolVersionConstraint.is_satisfied_by   1 0 0   100%
klayout_pex/tool_version_constraints.py ToolVersionConstraint.applies_to   1 0 0   100%
klayout_pex/tool_version_constraints.py applicable_constraints   1 0 0   100%
klayout_pex/tool_version_constraints.py effective_version_range   1 0 0   100%
klayout_pex/tool_version_constraints.py check_tool_versions   28 9 0   68%
klayout_pex/tool_version_constraints.py (no function)   53 0 0   100%
klayout_pex/util/__init__.py (no function)   0 0 0   100%
klayout_pex/util/argparse_helpers.py _group_name   1 0 0   100%
klayout_pex/util/argparse_helpers.py render_enum_help   14 0 0   100%
klayout_pex/util/argparse_helpers.py render_enum_help.canonic_string   5 1 0   80%
klayout_pex/util/argparse_helpers.py true_or_false   9 3 0   67%
klayout_pex/util/argparse_helpers.py (no function)   8 0 0   100%
klayout_pex/util/multiple_choice.py MultipleChoicePattern.__init__   13 3 0   77%
klayout_pex/util/multiple_choice.py MultipleChoicePattern.filter   3 3 0   0%
klayout_pex/util/multiple_choice.py MultipleChoicePattern.is_included   5 1 0   80%
klayout_pex/util/multiple_choice.py (no function)   6 0 0   100%
klayout_pex/util/unit_formatter.py format_spice_number   30 7 0   77%
klayout_pex/util/unit_formatter.py (no function)   4 0 0   100%
klayout_pex/version.py (no function)   1 0 0   100%
klayout_pex_protobuf/__init__.py (no function)   5 0 0   100%
klayout_pex_protobuf/kpex/c/capacitance_pb2.py (no function)   28 13 0   54%
klayout_pex_protobuf/kpex/geometry/shapes_pb2.py (no function)   25 13 0   48%
klayout_pex_protobuf/kpex/klayout/r_extractor_tech_pb2.py (no function)   22 9 0   59%
klayout_pex_protobuf/kpex/layout/device_pb2.py (no function)   21 7 0   67%
klayout_pex_protobuf/kpex/layout/layer_ref_pb2.py (no function)   15 3 0   80%
klayout_pex_protobuf/kpex/layout/layer_region_pb2.py (no function)   17 3 0   82%
klayout_pex_protobuf/kpex/layout/location_pb2.py (no function)   18 5 0   72%
klayout_pex_protobuf/kpex/layout/pin_pb2.py (no function)   17 3 0   82%
klayout_pex_protobuf/kpex/pex25d/pex25d_diagnostics_pb2.py (no function)   22 9 0   59%
klayout_pex_protobuf/kpex/pex25d/pex25d_dielectric_pb2.py (no function)   24 11 0   54%
klayout_pex_protobuf/kpex/pex25d/pex25d_domain_pb2.py (no function)   19 5 0   74%
klayout_pex_protobuf/kpex/pex25d/pex25d_file_pb2.py (no function)   35 15 0   57%
klayout_pex_protobuf/kpex/pex25d/pex25d_geometry_pb2.py (no function)   25 13 0   48%
klayout_pex_protobuf/kpex/pex25d/pex25d_meta_pb2.py (no function)   16 3 0   81%
klayout_pex_protobuf/kpex/pex25d/pex25d_resistance_pb2.py (no function)   22 9 0   59%
klayout_pex_protobuf/kpex/pex25d/pex25d_scene_pb2.py (no function)   43 23 0   47%
klayout_pex_protobuf/kpex/pex25d/pex25d_source_ref_pb2.py (no function)   15 3 0   80%
klayout_pex_protobuf/kpex/pex25d/pex25d_terminal_pb2.py (no function)   19 5 0   74%
klayout_pex_protobuf/kpex/pex25d/pex25d_units_pb2.py (no function)   17 5 0   71%
klayout_pex_protobuf/kpex/r/r_network_pb2.py (no function)   30 15 0   50%
klayout_pex_protobuf/kpex/request/pex_request_pb2.py (no function)   23 7 0   70%
klayout_pex_protobuf/kpex/result/pex_result_pb2.py (no function)   23 9 0   61%
klayout_pex_protobuf/kpex/tech/process_parasitics_pb2.py (no function)   35 23 0   34%
klayout_pex_protobuf/kpex/tech/process_stack_pb2.py (no function)   35 23 0   34%
klayout_pex_protobuf/kpex/tech/tech_pb2.py (no function)   27 13 0   52%
tests/__init__.py (no function)   0 0 0   100%
tests/common/__init__.py (no function)   0 0 0   100%
tests/common/capacitance_matrix_test.py Test.klayout_testdata_dir   1 0 0   100%
tests/common/capacitance_matrix_test.py Test.test_parse_csv   7 0 0   100%
tests/common/capacitance_matrix_test.py Test.test_write_csv   6 0 0   100%
tests/common/capacitance_matrix_test.py Test.test_averaged_off_diagonals   7 0 0   100%
tests/common/capacitance_matrix_test.py (no function)   15 0 0   100%
tests/env_test.py Test.test_env_has_defaults   7 1 0   86%
tests/env_test.py Test.test_env_with_custom_variables   7 0 0   100%
tests/env_test.py Test.test_env_with_custom_variables.value_for_var   1 0 0   100%
tests/env_test.py Test.test_valid_pdk_from_env   3 0 0   100%
tests/env_test.py Test.test_invalid_pdk_from_env   3 0 0   100%
tests/env_test.py (no function)   14 0 0   100%
tests/fastcap/fastcap_runner_test.py Test.fastcap_testdata_dir   1 0 0   100%
tests/fastcap/fastcap_runner_test.py Test.test_fastcap_parse_capacitance_matrix   11 0 0   100%
tests/fastcap/fastcap_runner_test.py (no function)   10 0 0   100%
tests/fastercap/__init__.py (no function)   0 0 0   100%
tests/fastercap/fastercap_model_generator_test.py test_fastercap_model_generator   53 0 0   100%
tests/fastercap/fastercap_model_generator_test.py (no function)   7 0 0   100%
tests/fastercap/fastercap_runner_test.py Test.fastercap_testdata_dir   1 0 0   100%
tests/fastercap/fastercap_runner_test.py Test.test_fastercap_parse_capacitance_matrix   10 0 0   100%
tests/fastercap/fastercap_runner_test.py (no function)   10 0 0   100%
tests/fastercap/fastercap_test.py _kpex_pdk_dir   1 0 0   100%
tests/fastercap/fastercap_test.py _sky130a_testdata_dir   1 0 0   100%
tests/fastercap/fastercap_test.py _gds   1 0 0   100%
tests/fastercap/fastercap_test.py _save_layout_preview   12 0 0   100%
tests/fastercap/fastercap_test.py _extract_single_cell   8 0 0   100%
tests/fastercap/fastercap_test.py assert_expected_matches_obtained   12 0 0   100%
tests/fastercap/fastercap_test.py test_single_plate_100um_x_100um_li1_over_substrate   1 0 0   100%
tests/fastercap/fastercap_test.py (no function)   27 0 0   100%
tests/klayout/lvs_runner_test.py Test.testdata_dir   1 1 0   0%
tests/klayout/lvs_runner_test.py Test.test_run_klayout_lvs   10 10 0   0%
tests/klayout/lvs_runner_test.py (no function)   13 0 0   100%
tests/klayout/netlist_expander_test.py Test.klayout_testdata_dir   1 0 0   100%
tests/klayout/netlist_expander_test.py Test.tech_info_json_path   1 0 0   100%
tests/klayout/netlist_expander_test.py Test.test_netlist_expansion   16 0 0   100%
tests/klayout/netlist_expander_test.py (no function)   20 0 0   100%
tests/klayout/netlist_reducer_test.py Test.setUpClass   1 0 0   100%
tests/klayout/netlist_reducer_test.py Test.klayout_testdata_dir   1 0 0   100%
tests/klayout/netlist_reducer_test.py Test._test_netlist_reduction   10 0 0   100%
tests/klayout/netlist_reducer_test.py Test.test_netlist_reduction_1   2 0 0   100%
tests/klayout/netlist_reducer_test.py Test.test_netlist_reduction_2   2 0 0   100%
tests/klayout/netlist_reducer_test.py (no function)   17 0 0   100%
tests/klayout/pex25d_builder_test.py TerminalFixture.__init__   30 0 0   100%
tests/klayout/pex25d_builder_test.py TerminalFixture.pin   1 0 0   100%
tests/klayout/pex25d_builder_test.py TerminalFixture.device   3 0 0   100%
tests/klayout/pex25d_builder_test.py TerminalFixture.build   1 0 0   100%
tests/klayout/pex25d_builder_test.py Pex25DBuilderTerminalTest.test_pin_uses_its_label_not_the_whole_pin_polygon   11 0 0   100%
tests/klayout/pex25d_builder_test.py Pex25DBuilderTerminalTest.test_pin_on_a_bent_wire_resolves   8 0 0   100%
tests/klayout/pex25d_builder_test.py Pex25DBuilderTerminalTest.test_repeated_labels_produce_unique_stable_names   6 0 0   100%
tests/klayout/pex25d_builder_test.py Pex25DBuilderTerminalTest.test_a_label_outside_the_pin_marker_is_ignored   3 0 0   100%
tests/klayout/pex25d_builder_test.py Pex25DBuilderTerminalTest.test_a_pin_without_interconnect_reports_a_build_error   5 0 0   100%
tests/klayout/pex25d_builder_test.py Pex25DBuilderTerminalTest.test_a_device_terminal_keeps_all_its_disjoint_shapes_in_one_node   14 0 0   100%
tests/klayout/pex25d_builder_test.py Pex25DBuilderTerminalTest.test_an_abutting_device_gets_only_a_boundary_strip   5 0 0   100%
tests/klayout/pex25d_builder_test.py Pex25DBuilderTerminalTest.test_a_box_cannot_silently_short_interconnect_between_device_shapes   6 0 0   100%
tests/klayout/pex25d_builder_test.py Pex25DBuilderTerminalTest.test_device_terminal_names_cannot_collide_with_pin_names   6 0 0   100%
tests/klayout/pex25d_builder_test.py (no function)   30 0 0   100%
tests/klayout/shapes_pb2_converter_test.py ShapesConverterTest.setUpClass   1 0 0   100%
tests/klayout/shapes_pb2_converter_test.py ShapesConverterTest.setUp   1 0 0   100%
tests/klayout/shapes_pb2_converter_test.py ShapesConverterTest.test_klayout_point   7 0 0   100%
tests/klayout/shapes_pb2_converter_test.py ShapesConverterTest.test_klayout_point_to_pb   6 0 0   100%
tests/klayout/shapes_pb2_converter_test.py ShapesConverterTest.test_klayout_box   12 0 0   100%
tests/klayout/shapes_pb2_converter_test.py ShapesConverterTest.test_klayout_box_to_pb   9 0 0   100%
tests/klayout/shapes_pb2_converter_test.py ShapesConverterTest.test_klayout_box_to_pb__with_properties   5 0 0   100%
tests/klayout/shapes_pb2_converter_test.py ShapesConverterTest.test_klayout_polygon   25 0 0   100%
tests/klayout/shapes_pb2_converter_test.py ShapesConverterTest.test_klayout_polygon_to_pb   12 0 0   100%
tests/klayout/shapes_pb2_converter_test.py ShapesConverterTest.test_klayout_region   28 0 0   100%
tests/klayout/shapes_pb2_converter_test.py (no function)   20 0 0   100%
tests/magic/magic_log_analyzer_test.py Test.analyze   6 0 0   100%
tests/magic/magic_log_analyzer_test.py Test.items_by_category_path   4 0 0   100%
tests/magic/magic_log_analyzer_test.py Test.items_by_category_path.collect   4 0 0   100%
tests/magic/magic_log_analyzer_test.py Test.categories_with_items   4 0 0   100%
tests/magic/magic_log_analyzer_test.py Test.item_boxes   5 0 0   100%
tests/magic/magic_log_analyzer_test.py Test.test_ports_are_reported   2 0 0   100%
tests/magic/magic_log_analyzer_test.py Test.test_node_capacitance_may_be_fractional   2 0 0   100%
tests/magic/magic_log_analyzer_test.py Test.test_substrate_node_at_magic_infinity_is_clamped_into_the_cell   9 0 0   100%
tests/magic/magic_log_analyzer_test.py (no function)   29 0 0   100%
tests/netlistsvg/netlist_json_test.py Test.setUpClass   1 0 0   100%
tests/netlistsvg/netlist_json_test.py Test.netlistsvg_testdata_dir   1 0 0   100%
tests/netlistsvg/netlist_json_test.py Test._test_netlistsvg   11 0 0   100%
tests/netlistsvg/netlist_json_test.py Test.test_netlist_reduction_1   3 0 0   100%
tests/netlistsvg/netlist_json_test.py Test.test_netlist_reduction_2   3 0 0   100%
tests/netlistsvg/netlist_json_test.py (no function)   19 0 0   100%
tests/pex25d/__init__.py (no function)   0 0 0   100%
tests/pex25d/api_test.py Pex25DApiTest.test_every_exported_name_resolves   3 0 0   100%
tests/pex25d/api_test.py Pex25DApiTest.test_the_generated_messages_are_reachable_by_name   5 0 0   100%
tests/pex25d/api_test.py Pex25DApiTest.test_every_generated_schema_is_reachable   3 0 0   100%
tests/pex25d/api_test.py Pex25DApiTest.test_the_schemas_the_format_is_made_of_are_present   2 0 0   100%
tests/pex25d/api_test.py Pex25DApiTest.test_the_kind_of_a_message_follows_its_descriptor   4 0 0   100%
tests/pex25d/api_test.py Pex25DApiTest.test_the_pipeline_needs_no_other_import   6 0 0   100%
tests/pex25d/api_test.py Pex25DApiTest.test_a_path_carries_the_kind_and_the_encoding   10 0 0   100%
tests/pex25d/api_test.py Pex25DApiTest.test_a_path_carries_the_kind_and_the_encoding.path   1 0 0   100%
tests/pex25d/api_test.py Pex25DApiTest.test_a_message_the_path_does_not_describe_is_refused   4 0 0   100%
tests/pex25d/api_test.py Pex25DApiTest.test_a_path_without_a_conventional_suffix_is_reported_as_such   6 0 0   100%
tests/pex25d/api_test.py (no function)   19 0 0   100%
tests/pex25d/artifact_test.py Pex25DArtifactTest.test_the_naming_convention   5 0 0   100%
tests/pex25d/artifact_test.py Pex25DArtifactTest.test_an_unconventional_name_has_to_be_stated   4 0 0   100%
tests/pex25d/artifact_test.py Pex25DArtifactTest.test_an_explicit_choice_beats_the_name   3 0 0   100%
tests/pex25d/artifact_test.py Pex25DArtifactTest.test_stdio_falls_back_to_the_defaults   3 0 0   100%
tests/pex25d/artifact_test.py Pex25DArtifactTest.test_binary_formats_are_flagged   4 0 0   100%
tests/pex25d/artifact_test.py Pex25DArtifactTest.round_trip   5 0 0   100%
tests/pex25d/artifact_test.py Pex25DArtifactTest.test_a_file_survives_every_encoding   4 0 0   100%
tests/pex25d/artifact_test.py Pex25DArtifactTest.test_a_scene_survives_the_protobuf_encodings   4 0 0   100%
tests/pex25d/artifact_test.py Pex25DArtifactTest.test_a_scene_has_no_text_spelling   4 0 0   100%
tests/pex25d/artifact_test.py (no function)   21 0 0   100%
tests/pex25d/geometry_test.py square   1 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_ring_is_simple   3 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_a_bowtie_is_not_simple   2 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_a_fold_back_is_not_simple   1 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_ring_is_collinear   3 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_winding_does_not_matter   2 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_ring_strictly_inside   5 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_a_hole_that_leaves_a_concave_outer_and_comes_back   1 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_rings_meet   4 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_overlapping_and_disjoint_boxes   2 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_touching_is_not_overlapping   2 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_containment_counts   1 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_identical_polygons_overlap   2 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_a_hole_is_not_part_of_the_polygon   3 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_a_shape_filling_a_hole_exactly   2 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_coincident_boundary_with_material_beyond_it   2 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_an_l_shape_and_its_notch   2 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_a_sliver_of_shared_area   1 0 0   100%
tests/pex25d/geometry_test.py Pex25DGeometryTest.test_overlap_is_symmetric   4 0 0   100%
tests/pex25d/geometry_test.py (no function)   28 0 0   100%
tests/pex25d/pex25d_cli_test.py Workspace.__init__   4 0 0   100%
tests/pex25d/pex25d_cli_test.py Workspace.path   1 0 0   100%
tests/pex25d/pex25d_cli_test.py Workspace.run   5 1 0   80%
tests/pex25d/pex25d_cli_test.py Pex25DCLITest.workspace   3 0 0   100%
tests/pex25d/pex25d_cli_test.py Pex25DCLITest.test_a_valid_file_exits_zero   2 0 0   100%
tests/pex25d/pex25d_cli_test.py Pex25DCLITest.test_an_invalid_file_exits_one   2 0 0   100%
tests/pex25d/pex25d_cli_test.py Pex25DCLITest.test_a_bad_command_line_exits_two   2 0 0   100%
tests/pex25d/pex25d_cli_test.py Pex25DCLITest.test_an_unconventional_output_name_exits_two   2 0 0   100%
tests/pex25d/pex25d_cli_test.py Pex25DCLITest.test_werror_turns_a_warning_into_a_failure   3 0 0   100%
tests/pex25d/pex25d_cli_test.py Pex25DCLITest.test_convert_is_idempotent_through_every_encoding   13 0 0   100%
tests/pex25d/pex25d_cli_test.py Pex25DCLITest.test_resolve_writes_a_scene   5 0 0   100%
tests/pex25d/pex25d_cli_test.py Pex25DCLITest.test_resolve_refuses_to_write_half_a_scene   4 0 0   100%
tests/pex25d/pex25d_cli_test.py Pex25DCLITest.test_show_reads_both_kinds   5 0 0   100%
tests/pex25d/pex25d_cli_test.py Pex25DCLITest.test_json_diagnostics_carry_the_codes   10 0 0   100%
tests/pex25d/pex25d_cli_test.py (no function)   28 0 0   100%
tests/pex25d/pex25d_fixtures.py read   1 0 0   100%
tests/pex25d/pex25d_fixtures.py read_codes   6 0 0   100%
tests/pex25d/pex25d_fixtures.py codes   1 0 0   100%
tests/pex25d/pex25d_fixtures.py replacing   2 0 0   100%
tests/pex25d/pex25d_fixtures.py without   1 1 0   0%
tests/pex25d/pex25d_fixtures.py (no function)   15 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_reads_the_fixture_without_diagnostics   12 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_lengths_become_exact_grid_integers   6 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_a_polygon_ring_is_not_closed_explicitly   3 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_a_value_a_modulo_check_would_reject   2 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_source_refs_are_off_unless_asked_for   3 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0101_record_ends_early   1 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0102_wrong_clause_keyword   1 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0103_a_dropped_continuation   1 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0103_trailing_tokens   1 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0104_bad_literal   1 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0104_rejects_number_forms_python_would_accept   3 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0105_off_grid   1 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0106_a_length_before_units   2 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0107_wrong_header   1 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0107_unsupported_major_version   1 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_an_unknown_suffix_is_accepted   1 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0108_duplicate_meta_key   1 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_w0110_unknown_record_is_a_warning_and_is_skipped   5 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_read_error_is_raised_once_errors_exist   2 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_include_flattens_and_records_the_source_file   11 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0109_include_cycle   12 0 0   100%
tests/pex25d/reader_test.py Pex25DReaderTest.test_e0109_unreadable_include   1 0 0   100%
tests/pex25d/reader_test.py (no function)   33 0 0   100%
tests/pex25d/resolver_test.py resolved   1 0 0   100%
tests/pex25d/resolver_test.py resolve_codes   6 0 0   100%
tests/pex25d/resolver_test.py layer   1 0 0   100%
tests/pex25d/resolver_test.py dielectric   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_a_via_takes_its_extent_from_connects   4 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_a_via_may_land_on_the_ground_plane   2 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_a_simple_band_spans_bottom_to_bottom   2 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_conformal_thicknesses_are_carried_in_grid_units   5 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_wrap_depth_and_root   4 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_dielectrics_come_out_in_ascending_depth   2 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_e0230_cyclic_wraps   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_e0201_unknown_profile   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_e0202_duplicate_profile_name   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_a_dielectric_shares_the_profile_namespace_with_the_metals   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_e0202_a_dielectric_declared_twice   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_e0202_the_background_is_in_the_namespace_too   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_e0211_metal_with_inverted_z   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_e0212_connects_endpoints_out_of_order   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_e0220_resistance_metal_on_a_via   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_e0221_resistance_via_on_a_metal   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_resistance_is_carried_onto_the_layer   5 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_a_profile_without_resistance_carries_none   2 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_a_terminal_resolves_to_its_intersection   8 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_e0242_a_terminal_that_selects_nothing   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_e0240_a_terminal_that_clips_a_via_cut   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_a_terminal_may_take_a_whole_cut   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_e0201_terminal_on_a_dielectric   1 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_terminal_clipping_preserves_a_polygon_hole   6 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_a_terminal_in_a_polygon_hole_selects_nothing   3 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_clipping_can_split_a_terminal_into_disjoint_boxes   5 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_clipping_a_polygon_via_cut_is_rejected   3 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_non_manhattan_clipping_is_not_silently_rounded   2 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_domain_margin_expands_the_geometry_bounds   7 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_geometry_bounds_ignore_laterally_unbounded_materials   4 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_no_domain_record_leaves_the_domain_unspecified   6 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_domain_box_is_copied_verbatim   4 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_conductors_carry_their_geometry_grouped_by_layer   5 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_the_reserved_net_name_marks_a_floating_body   2 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_resolve_error_stops_before_a_half_built_scene   2 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_the_background_never_competes_for_occupancy   3 0 0   100%
tests/pex25d/resolver_test.py Pex25DResolverTest.test_an_anchor_metal_without_shapes_is_legal   2 0 0   100%
tests/pex25d/resolver_test.py (no function)   52 0 0   100%
tests/pex25d/validator_test.py check   7 2 0   71%
tests/pex25d/validator_test.py check_scene   3 0 0   100%
tests/pex25d/validator_test.py geometry   2 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_the_fixture_is_clean   2 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_a_resolved_scene_is_clean   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_validating_never_raises   5 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0260_a_simple_dielectric_wrapping_an_inner_link   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0261_two_films_at_the_same_depth_on_one_root   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0262_a_grid_that_does_not_divide_the_source_dbu   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_a_grid_that_does_divide_the_source_dbu   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0263_a_terminal_on_a_floating_conductor   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_w0264_a_conductor_with_no_geometry   5 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_w0265_geometry_without_a_resistance_when_others_have_one   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_no_w0265_when_the_file_states_no_resistance_at_all   4 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0266_a_conductor_declared_twice   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0267_a_terminal_declared_twice   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0268_two_resistance_records_for_one_profile   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_w0269_coefficients_with_no_reference_temperature   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0270_a_layer_with_no_kind   3 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0271_a_metal_with_no_height   3 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_a_via_between_abutting_layers_is_not_an_error   4 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0272_a_via_without_its_resolved_endpoints   3 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0273_a_metal_carrying_a_via_resistance   5 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0274_dielectrics_out_of_depth_order   6 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0275_a_dielectric_naming_a_profile_the_scene_has_not_got   3 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0276_a_terminal_on_a_layer_the_conductor_does_not_use   5 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0277_an_empty_terminal_node   3 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0279_geometry_on_a_layer_the_scene_has_not_got   3 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_the_geometric_tier_only_runs_under_strict   3 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0302_a_ring_closed_explicitly   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0303_a_repeated_vertex   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0304_a_collinear_ring   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0305_a_self_intersecting_ring   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0306_a_hole_touching_its_outer_ring   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0307_holes_that_touch   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_a_polygon_with_two_separate_holes_is_fine   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0308_an_empty_box   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.overlap   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_two_conductors_may_abut   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_one_conductor_may_overlap_itself   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_layers_whose_z_extents_only_touch_do_not_overlap   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0309_boxes   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0309_identical_polygons   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_e0309_a_shape_reaching_out_of_a_hole   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_a_conductor_may_sit_inside_another_ones_hole   1 0 0   100%
tests/pex25d/validator_test.py Pex25DValidatorTest.test_a_box_in_the_notch_of_an_l_shape   1 0 0   100%
tests/pex25d/validator_test.py (no function)   58 0 0   100%
tests/pex25d/writer_test.py Pex25DWriterTest.test_format_exact   4 0 0   100%
tests/pex25d/writer_test.py Pex25DWriterTest.test_format_exact_refuses_what_it_cannot_render   4 0 0   100%
tests/pex25d/writer_test.py Pex25DWriterTest.test_lengths_are_rendered_exactly   3 0 0   100%
tests/pex25d/writer_test.py Pex25DWriterTest.test_long_records_wrap_and_read_back_identically   8 0 0   100%
tests/pex25d/writer_test.py Pex25DWriterTest.test_a_wrap_never_splits_a_coordinate_pair   11 0 0   100%
tests/pex25d/writer_test.py Pex25DWriterTest.test_a_wrap_never_splits_a_coordinate_pair.is_number   1 0 0   100%
tests/pex25d/writer_test.py Pex25DWriterTest.test_round_trip_is_byte_identical   3 0 0   100%
tests/pex25d/writer_test.py Pex25DWriterTest.test_round_trip_preserves_the_message   3 0 0   100%
tests/pex25d/writer_test.py Pex25DWriterTest.test_comments_change_nothing_but_the_comments   6 0 0   100%
tests/pex25d/writer_test.py Pex25DWriterTest.test_comments_change_nothing_but_the_comments.records   1 0 0   100%
tests/pex25d/writer_test.py (no function)   17 0 0   100%
tests/rcx25/extraction_results_test.py NetCoupleKeyTest.test_normed_ascending   4 0 0   100%
tests/rcx25/extraction_results_test.py NetCoupleKeyTest.test_normed_descending   4 0 0   100%
tests/rcx25/extraction_results_test.py CellExtractionResultsTest.test_summarize_overlap   14 0 0   100%
tests/rcx25/extraction_results_test.py CellExtractionResultsTest.test_summarize_sidewall   17 0 0   100%
tests/rcx25/extraction_results_test.py CellExtractionResultsTest.test_summarize_sideoverlap   17 0 0   100%
tests/rcx25/extraction_results_test.py (no function)   13 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_single_plate_100um_x_100um_li1_over_substrate   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_overlap_plates_100um_x_100um_li1_m1   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_overlap_plates_100um_x_100um_li1_m1_m2_m3   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_sidewall_100um_x_100um_distance_200nm_li1   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_sidewall_net_uturn_l1_redux   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_sidewall_cap_vpp_04p4x04p6_l1_redux   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_near_body_shield_li1_m1   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_lateral_fringe_shield_by_same_polygon_li1   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_sideoverlap_simple_plates_li1_m1   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_sideoverlap_shielding_simple_plates_li1_m1_m2   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_sideoverlap_plates_li1_m1   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_sideoverlap_fingered_li1_m1_patternA   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_sideoverlap_fingered_li1_m1   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_sideoverlap_complex_li1_m1   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_mom_cap__whiteboxed   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py test_mom_cap__blackboxed   1 0 0   100%
tests/rcx25/rcx25_CC_sky130A_test.py (no function)   73 0 0   100%
tests/rcx25/rcx25_R_sky130A_test.py test_single_wire_li1   1 0 0   100%
tests/rcx25/rcx25_R_sky130A_test.py test_contact_1x1_minsize_mcon   1 0 0   100%
tests/rcx25/rcx25_R_sky130A_test.py test_wire_voltage_divider_li1   1 0 0   100%
tests/rcx25/rcx25_R_sky130A_test.py test_via_stack_1x1_minsize_poly_to_met5   1 0 0   100%
tests/rcx25/rcx25_R_sky130A_test.py test_nfet_li1_redux   1 0 0   100%
tests/rcx25/rcx25_R_sky130A_test.py (no function)   29 0 0   100%
tests/rcx25/rcx25_test.py _kpex_pdk_dir   1 0 0   100%
tests/rcx25/rcx25_test.py _sky130a_testdata_dir   1 0 0   100%
tests/rcx25/rcx25_test.py _gds   1 0 0   100%
tests/rcx25/rcx25_test.py _save_layout_preview   12 0 0   100%
tests/rcx25/rcx25_test.py _run_rcx25d_single_cell   11 0 0   100%
tests/rcx25/rcx25_test.py assert_expected_matches_obtained   13 0 0   100%
tests/rcx25/rcx25_test.py test_single_plate_100um_x_100um_li1_over_substrate   1 0 0   100%
tests/rcx25/rcx25_test.py test_overlap_plates_100um_x_100um_li1_m1   1 0 0   100%
tests/rcx25/rcx25_test.py test_overlap_plates_100um_x_100um_li1_m1_m2_m3   1 0 0   100%
tests/rcx25/rcx25_test.py test_sidewall_100um_x_100um_distance_200nm_li1   1 0 0   100%
tests/rcx25/rcx25_test.py test_sidewall_net_uturn_l1_redux   1 0 0   100%
tests/rcx25/rcx25_test.py test_sidewall_cap_vpp_04p4x04p6_l1_redux   1 0 0   100%
tests/rcx25/rcx25_test.py test_near_body_shield_li1_m1   1 0 0   100%
tests/rcx25/rcx25_test.py test_lateral_fringe_shield_by_same_polygon_li1   1 0 0   100%
tests/rcx25/rcx25_test.py test_sideoverlap_simple_plates_li1_m1   1 0 0   100%
tests/rcx25/rcx25_test.py test_sideoverlap_shielding_simple_plates_li1_m1_m2   1 0 0   100%
tests/rcx25/rcx25_test.py test_sideoverlap_plates_li1_m1   1 0 0   100%
tests/rcx25/rcx25_test.py test_sideoverlap_fingered_li1_m1_patternA   1 0 0   100%
tests/rcx25/rcx25_test.py test_sideoverlap_fingered_li1_m1   1 0 0   100%
tests/rcx25/rcx25_test.py test_sideoverlap_complex_li1_m1   1 0 0   100%
tests/rcx25/rcx25_test.py (no function)   92 0 0   100%
tests/rcx25/rcx25_test_helpers.py PDKTestConfig.kpex_pdk_dir   1 0 0   100%
tests/rcx25/rcx25_test_helpers.py PDKTestConfig.test_designs_dir   1 0 0   100%
tests/rcx25/rcx25_test_helpers.py PDKTestConfig.lyt_path   1 0 0   100%
tests/rcx25/rcx25_test_helpers.py PDKTestConfig.load_kdb_technology   4 0 0   100%
tests/rcx25/rcx25_test_helpers.py PDKTestConfig.gds_path   1 0 0   100%
tests/rcx25/rcx25_test_helpers.py RCX25Extraction.save_layout_preview   9 0 0   100%
tests/rcx25/rcx25_test_helpers.py RCX25Extraction.run_rcx25d_single_cell   11 0 0   100%
tests/rcx25/rcx25_test_helpers.py RCX25Extraction.assert_expected_matches_obtained   13 0 0   100%
tests/rcx25/rcx25_test_helpers.py (no function)   37 0 0   100%
tests/tech_info_test.py tech_pbjson_paths   2 0 0   100%
tests/tech_info_test.py tech_with_duplicates   12 0 0   100%
tests/tech_info_test.py Test.test_shipped_tech_definitions_have_unique_names   5 0 0   100%
tests/tech_info_test.py Test.test_duplicate_names_are_reported_per_namespace   7 0 0   100%
tests/tech_info_test.py Test.test_the_reader_refuses_a_duplicate   6 0 0   100%
tests/tech_info_test.py (no function)   18 0 0   100%
tests/tool_version_constraints_test.py Test.test_magic_reports_its_patch_level_as_a_revision   3 0 0   100%
tests/tool_version_constraints_test.py Test.test_a_packaging_release_is_not_part_of_the_tool_version   3 0 0   100%
tests/tool_version_constraints_test.py Test.test_constraints_compile_to_one_effective_range   3 0 0   100%
tests/tool_version_constraints_test.py Test.test_a_pdk_constraint_is_part_of_that_pdk_s_range   3 0 0   100%
tests/tool_version_constraints_test.py Test.test_an_excluded_version_is_the_only_one_rejected   4 0 0   100%
tests/tool_version_constraints_test.py Test.test_a_pdk_constraint_applies_only_to_that_pdk   4 0 0   100%
tests/tool_version_constraints_test.py Test.test_every_declared_constraint_is_well_formed   8 0 0   100%
tests/tool_version_constraints_test.py (no function)   17 0 0   100%
tests/util/argparse_helpers_test.py Test.test_render_enum_help__nodefault__intenum   6 0 0   100%
tests/util/argparse_helpers_test.py Test.test_render_enum_help__default__intenum   7 0 0   100%
tests/util/argparse_helpers_test.py Test.test_render_enum_help__default__strenum   7 0 0   100%
tests/util/argparse_helpers_test.py Test.test_render_enum_help__default__strenum__lowercased   7 0 0   100%
tests/util/argparse_helpers_test.py (no function)   13 0 0   100%
tests/util/unit_formatter_test.py UnitFormatterTest.test_auto_prefix   8 0 0   100%
tests/util/unit_formatter_test.py UnitFormatterTest.test_boundary_cases   5 0 0   100%
tests/util/unit_formatter_test.py UnitFormatterTest.test_forced_prefix   7 0 0   100%
tests/util/unit_formatter_test.py UnitFormatterTest.test_invalid_prefix   2 0 0   100%
tests/util/unit_formatter_test.py (no function)   13 1 0   92%
Total     10129 1457 12   86%

No items found using the specified filter.