from shapely.geometry import Polygon from inire import CongestionOptions, NetSpec, ObjectiveWeights, RoutingOptions, RoutingProblem, RoutingResult, SearchOptions, route from inire.geometry.primitives import Port from inire.utils.visualization import plot_routing_results def _run_request( bounds: tuple[float, float, float, float], bend_collision_type: object, net_id: str, start: Port, target: Port, ) -> dict[str, RoutingResult]: problem = RoutingProblem( bounds=bounds, nets=(NetSpec(net_id, start, target, width=2.0),), ) options = RoutingOptions( search=SearchOptions( bend_radii=(10.0,), bend_collision_type=bend_collision_type, sbend_radii=(), ), objective=ObjectiveWeights( bend_penalty=50.0, sbend_penalty=150.0, ), congestion=CongestionOptions(use_tiered_strategy=False), ) return route(problem, options=options).results_by_net def main() -> None: print("Running Example 08: Custom Bend Geometry...") bounds = (0, 0, 150, 150) start = Port(20, 20, 0) target = Port(100, 100, 90) print("Routing with standard arc...") results_std = _run_request(bounds, "arc", "custom_bend", start, target) custom_poly = Polygon([(0, -11), (11, -11), (11, 0), (9, 0), (9, -9), (0, -9)]) print("Routing with custom bend geometry...") results_custom = _run_request(bounds, custom_poly, "custom_model", start, target) all_results = {**results_std, **results_custom} fig, _ax = plot_routing_results( all_results, [], bounds, netlist={ "custom_bend": (start, target), "custom_model": (start, target), }, ) fig.savefig("examples/08_custom_bend_geometry.png") print("Saved plot to examples/08_custom_bend_geometry.png") if __name__ == "__main__": main()