From e21979baf0e9dc7af248e4e3bfa30d87c6c0de03 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Mon, 21 Apr 2025 01:01:17 -0700 Subject: [PATCH] snapshot 2025-04-21 01:01:17.676650 --- console-export-2025-4-19_17-21-48.txt | 488 ++++++++++++++++++++++++++ examples/connectivity.py | 386 ++++++++++++++++++++ examples/euler_bend.py | 38 ++ masque/file/gdsii_arrow.py | 58 ++- masque/test/__init__.py | 3 + masque/test/conftest.py | 31 ++ masque/test/test_fdfd.py | 35 ++ masque/utils/curves.py | 15 + perftest.py | 5 + test.ssc | 1 + test3.ssc | 1 + test_slow.ssc | 1 + 12 files changed, 1047 insertions(+), 15 deletions(-) create mode 100644 console-export-2025-4-19_17-21-48.txt create mode 100644 examples/connectivity.py create mode 100644 examples/euler_bend.py create mode 100644 masque/test/__init__.py create mode 100644 masque/test/conftest.py create mode 100644 masque/test/test_fdfd.py create mode 100644 perftest.py create mode 100644 test.ssc create mode 100644 test3.ssc create mode 100644 test_slow.ssc diff --git a/console-export-2025-4-19_17-21-48.txt b/console-export-2025-4-19_17-21-48.txt new file mode 100644 index 0000000..358e432 --- /dev/null +++ b/console-export-2025-4-19_17-21-48.txt @@ -0,0 +1,488 @@ +GET +https://www.speedscope.app/ +[HTTP/2 304 70ms] + +GET +https://www.speedscope.app/speedscope-GHPHNKXC.css +[HTTP/3 200 OK 0ms] + +GET +https://www.speedscope.app/speedscope-YI5LLI47.js +[HTTP/3 200 0ms] + +GET +https://www.speedscope.app/chunk-JFPBPGZ4.js +[HTTP/3 200 0ms] + +GET +https://www.speedscope.app/source-map-5DQ363YZ.js +[HTTP/3 200 0ms] + +GET +https://www.speedscope.app/chunk-FW4363Y4.js +[HTTP/3 200 0ms] + +GET +https://www.speedscope.app/SourceCodePro-Regular.ttf-ILST5JV6.woff2 +[HTTP/3 200 0ms] + +GET +https://www.speedscope.app/demangle-B53S5JWH.js +[HTTP/3 200 0ms] + +GET +https://www.speedscope.app/import-2JMDXOIJ.js +[HTTP/3 200 0ms] + +speedscope v1.22.2 speedscope-YI5LLI47.js:185:25290 +WebGL initialized. renderer: null, vendor: null, version: WebGL 1.0 speedscope-YI5LLI47.js:167:1925 +GET +https://www.speedscope.app/favicon-16x16-VSI62OPJ.png +[HTTP/3 200 0ms] + +Importing as speedscope json file import-2JMDXOIJ.js:4:35604 +import: 0ms - timer ended speedscope-YI5LLI47.js:185:18554 +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + draw graphics.ts:449 + render rectangle-batch-renderer.ts:140 + writeToAtlasIfNeeded row-atlas.ts:70 + dt utils.ts:19 + writeToAtlasIfNeeded row-atlas.ts:59 + render flamechart-renderer.ts:323 + renderRects flamechart-minimap-view.tsx:88 + setViewport canvas-context.ts:72 + renderBehind canvas-context.ts:85 + renderRects flamechart-minimap-view.tsx:87 + onBeforeFrame flamechart-minimap-view.tsx:223 + onBeforeFrame canvas-context.ts:63 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-minimap-view.tsx:228 + overlayCanvasRef flamechart-minimap-view.tsx:419 + Preact 76 + a atom.ts:149 + set atom.ts:120 + set atom.ts:120 + set profile-group.ts:62 + setProfileGroup profile-group.ts:71 + loadProfile application.tsx:225 + loadFromFile application.tsx:234 + onFileSelect application.tsx:466 + Preact 23 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: texImage: Requested size at this level is unsupported. +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + clear graphics.ts:501 + onBeforeFrame canvas-context.ts:60 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-pan-zoom-view.tsx:526 + onMouseMove flamechart-pan-zoom-view.tsx:685 + Preact 31 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + clear graphics.ts:501 + onBeforeFrame canvas-context.ts:60 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-pan-zoom-view.tsx:526 + onMouseMove flamechart-pan-zoom-view.tsx:685 + Preact 31 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + clear graphics.ts:501 + onBeforeFrame canvas-context.ts:60 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-pan-zoom-view.tsx:526 + onMouseMove flamechart-pan-zoom-view.tsx:685 + Preact 31 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + clear graphics.ts:501 + onBeforeFrame canvas-context.ts:60 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-pan-zoom-view.tsx:526 + onMouseMove flamechart-pan-zoom-view.tsx:685 + Preact 31 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + clear graphics.ts:501 + onBeforeFrame canvas-context.ts:60 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-pan-zoom-view.tsx:526 + onMouseMove flamechart-pan-zoom-view.tsx:685 + Preact 31 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + clear graphics.ts:501 + onBeforeFrame canvas-context.ts:60 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-pan-zoom-view.tsx:526 + onMouseMove flamechart-pan-zoom-view.tsx:685 + Preact 31 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + clear graphics.ts:501 + onBeforeFrame canvas-context.ts:60 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-pan-zoom-view.tsx:526 + onMouseMove flamechart-pan-zoom-view.tsx:685 + Preact 31 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + clear graphics.ts:501 + onBeforeFrame canvas-context.ts:60 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-pan-zoom-view.tsx:526 + onMouseMove flamechart-pan-zoom-view.tsx:685 + Preact 31 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + clear graphics.ts:501 + onBeforeFrame canvas-context.ts:60 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-pan-zoom-view.tsx:526 + onMouseMove flamechart-pan-zoom-view.tsx:685 + Preact 31 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + clear graphics.ts:501 + onBeforeFrame canvas-context.ts:60 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-pan-zoom-view.tsx:526 + onMouseMove flamechart-pan-zoom-view.tsx:685 + Preact 31 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + clear graphics.ts:501 + onBeforeFrame canvas-context.ts:60 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-pan-zoom-view.tsx:526 + onMouseMove flamechart-pan-zoom-view.tsx:685 + Preact 31 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +Uncaught Error: Assertion failed. + H graphics.ts:34 + get framebuffer graphics.ts:1379 + _updateRenderTargetAndViewport graphics.ts:574 + clear graphics.ts:501 + onBeforeFrame canvas-context.ts:60 + requestFrame canvas-context.ts:53 + renderCanvas flamechart-pan-zoom-view.tsx:526 + onMouseMove flamechart-pan-zoom-view.tsx:685 + Preact 31 +speedscope-YI5LLI47.js:1:25317 +WebGL warning: checkFramebufferStatus: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. +The resource at “https://www.speedscope.app/SourceCodePro-Regular.ttf-ILST5JV6.woff2” preloaded with link preload was not used within a few seconds. Make sure all attributes of the preload tag are set correctly. www.speedscope.app +Source map error: Error: URL constructor: is not a valid URL. +Stack in the worker:resolveSourceMapURL@resource://devtools/client/shared/source-map-loader/utils/fetchSourceMap.js:56:22 +getOriginalURLs@resource://devtools/client/shared/source-map-loader/source-map.js:73:24 +workerHandler/ NDArray[numpy.int_]: + """ + Tests whether the provided points are inside the implicitly closed polygon + described by the provided list of vertices. + + Args: + vertices: Nx2 Arraylike of form [[x0, y0], [x1, y1], ...], describing an implicitly- + closed polygon. Note that this should include any offsets. + points: Nx2 ArrayLike of form [[x0, y0], [x1, y1], ...] containing the points to test. + include_boundary: True if points on the boundary should be count as inside the shape. + Default True. + + Returns: + ndarray of booleans, [point0_is_in_shape, point1_is_in_shape, ...] + """ + points = numpy.asarray(points) + vertices = numpy.asarray(vertices) + + if points.size == 0: + return numpy.zeros(0) + + min_bounds = numpy.min(vertices, axis=0)[None, :] + max_bounds = numpy.max(vertices, axis=0)[None, :] + + trivially_outside = ((points < min_bounds).any(axis=1) + | (points > max_bounds).any(axis=1)) + + nontrivial = ~trivially_outside + if trivially_outside.all(): + inside = numpy.zeros_like(trivially_outside, dtype=bool) + return inside + + ntpts = points[None, nontrivial, :] # nontrivial points, along axis 1 of ndarray + verts = vertices[:, None, :] # vertices, along axis 0 + xydiff = ntpts - verts # Expands into (n_vertices, n_ntpts, 2) + + y0_le = xydiff[:, :, 1] >= 0 # y_point >= y_vertex (axes 0, 1 for all points & vertices) + y1_le = numpy.roll(y0_le, -1, axis=0) # same thing for next vertex + + upward = y0_le & ~y1_le # edge passes point y coord going upwards + downward = ~y0_le & y1_le # edge passes point y coord going downwards + + dv = numpy.roll(verts, -1, axis=0) - verts + is_left = (dv[..., 0] * xydiff[..., 1] # >0 if left of dv, <0 if right, 0 if on the line + - dv[..., 1] * xydiff[..., 0]) + + winding_number = ((upward & (is_left > 0)).sum(axis=0) + - (downward & (is_left < 0)).sum(axis=0)) + + nontrivial_inside = winding_number != 0 # filter nontrivial points based on winding number + if include_boundary: + nontrivial_inside[(is_left == 0).any(axis=0)] = True # check if point lies on any edge + + inside = nontrivial.copy() + inside[nontrivial] = nontrivial_inside + return inside + + +def union_nonzero(shapes: Sequence[ArrayLike]) -> PyPolyNode | None: + if not shapes: + return None + pc = Pyclipper() + pc.AddPaths(shapes, PT_CLIP, closed=True) + result = pc.Execute2(CT_UNION, PFT_NONZERO, PFT_NONZERO) + return result + + +def union_evenodd(shapes: Sequence[ArrayLike]) -> list[contour_t]: + if not shapes: + return [] + pc = Pyclipper() + pc.AddPaths(shapes, PT_CLIP, closed=True) + return pc.Execute(CT_UNION, PFT_EVENODD, PFT_EVENODD) + + +def intersection_evenodd( + subject_shapes: Sequence[ArrayLike], + clip_shapes: Sequence[ArrayLike], + clip_closed: bool = True, + ) -> list[contour_t]: + if not subject_shapes or not clip_shapes: + return [] + pc = Pyclipper() + pc.AddPaths(subject_shapes, PT_SUBJECT, closed=True) + pc.AddPaths(clip_shapes, PT_CLIP, closed=clip_closed) + return pc.Execute(CT_INTERSECTION, PFT_EVENODD, PFT_EVENODD) + + +class NetsInfo: + nets: defaultdict[str, defaultdict[layer_t, list]] + net_aliases: defaultdict[str, list] + + def __init__(self) -> None: + self.nets = defaultdict(lambda: defaultdict(list)) + self.net_aliases = defaultdict(list) + + def resolve_name(self, net_name: net_name_t) -> net_name_t: + while net_name in self.net_aliases: + net_name = self.net_aliases[net_name] + return net_name + + def merge(self, net_a: net_name_t, net_b: net_name_t) -> None: + net_a = self.resolve_name(net_a) + net_b = self.resolve_name(net_b) + + # Always keep named nets if the other is anonymous + if not isinstance(net_a, str) and isinstance(net_b, str): + keep_net, old_net = net_b, net_a + else: + keep_net, old_net = net_a, net_b + + #logger.info(f'merging {old_net} into {keep_net}') + self.net_aliases[old_net] = keep_net + if old_net in self.nets: + for layer in self.nets[old_net]: + self.nets[keep_net][layer] += self.nets[old_net][layer] + del self.nets[old_net] + + def get(self, net: net_name_t, layer: layer_t) -> list[contour_t]: + return self.nets[self.resolve_name(net)][layer] + + def get_shorted_nets(self) -> list[set[str]]: + shorts = defaultdict(list) + for kk in self.net_aliases: + if isinstance(kk, str): + shorts[self.resolve_name(kk)].append(kk) + + shorted_sets = [set([kk] + others) + for kk, others in shorts.items()] + return shorted_sets + + +def load_polys(layers: Sequence[tuple[int, int]]) -> dict[layer_t, list[NDArray[numpy.float64]]]: + polys = defaultdict(list) + for ss in topcell.shapes: + if ss.layer not in layers: + continue + + if ss.repetition is None: + displacements = [(0, 0)] + else: + displacements = ss.repetition.displacements + + for displacement in displacements: + polys[ss.layer].append( + ss.vertices + ss.offset + displacement + ) + return dict(polys) + + +def union_polys(polys: list[ArrayLike]) -> list[PyPolyNode]: + scaled_polys = scale_to_clipper(polys, CLIPPER_SCALE_FACTOR) + for poly in scaled_polys: + if (numpy.abs(poly) % 1).any(): + logger.warning('Warning: union_polys got non-integer coordinates; all values will be truncated.') + break + + poly_tree = union_nonzero(scaled_polys) + + # Partially flatten the tree, reclassifying all the "outer" (non-hole) nodes as new root nodes + unvisited_nodes = [poly_tree] + outer_nodes = [] + while unvisited_nodes: + node = unvisited_nodes.pop() # node will be the tree parent node (a container), or a hole + for poly in node.Childs: + outer_nodes.append(poly) + for hole in poly.Childs: + unvisited_nodes.append(hole) + + return outer_nodes + + + +cells, props = oasis.readfile('connectivity.oas') +#cells, props = gdsii.readfile('connectivity.gds') +topcell = cells['top'] + + +layer_info = { + ((1, 0), (1, 2), (2, 0)), #M1 to M2 + ((1, 0), (1, 3), (3, 0)), #M1 to M3 + ((2, 0), (2, 3), (3, 0)), #M2 to M3 + } + +metal_layers = set() +via_layers = set() +for top, via, bot in layer_info: + metal_layers.add(top) + metal_layers.add(bot) + via_layers.add(via) + + +topcell = topcell.subset( + shapes_func=lambda ss: ss.layer in metal_layers | via_layers, + labels_func=lambda ll: ll.layer in metal_layers, + subpatterns_func=lambda ss: True, + ) +topcell = topcell.flatten() + + +base_metal_polys = load_polys(metal_layers) +metal_polys = {layer: union_polys(base_metal_polys[layer]) + for layer in metal_layers} + +base_via_polys = load_polys(via_layers) +via_polys = {layer: union_polys(base_via_polys[layer]) + for layer in via_layers} + +## write out polys to gds +#pat = Pattern('metal_polys') +#for layer in metal_polys: +# for poly in metal_polys[layer]: +# pat.shapes.append(Polygon(layer=layer, vertices=scale_from_clipper(poly.Contour, CLIPPER_SCALE_FACTOR))) +# for hole in poly.Childs: +# pat.shapes.append(Polygon(layer=(layer[0], layer[1] + 10), vertices=scale_from_clipper(hole.Contour, CLIPPER_SCALE_FACTOR))) +#for layer in via_polys: +# for poly in via_polys[layer]: +# pat.shapes.append(Polygon(layer=layer, vertices=scale_from_clipper(poly.Contour, CLIPPER_SCALE_FACTOR))) +# for hole in poly.Childs: +# pat.shapes.append(Polygon(layer=(layer[0], layer[1] + 10), vertices=scale_from_clipper(hole.Contour, CLIPPER_SCALE_FACTOR))) +#gdsii.writefile(pat, '_polys.gds', 1e-9, 1e-6) + + +net_info = NetsInfo() + + + +def label_nets( + net_info: NetsInfo, + polys: Sequence[PyPolyNode], + point_xys: ArrayLike, + point_names: Sequence[str], + ): + for poly in polys: + poly_contour = scale_from_clipper(poly.Contour, CLIPPER_SCALE_FACTOR) + inside = poly_contains_points2(poly_contour, point_xys) + for hole in poly.Childs: + hole_contour = scale_from_clipper(hole.Contour, CLIPPER_SCALE_FACTOR) + inside &= ~poly_contains_points2(hole_contour, point_xys) + + inside_nets = sorted([net_name for net_name, ii in zip(point_names, inside) if ii]) + + if not inside.any(): + # No labels in this net, so it's anonymous + name = object() + net_info.nets[name][layer].append(poly) + continue + + net_info.get(inside_nets[0], layer).append(poly) + + if inside.sum() == 1: + # No short on this layer, continue + continue + + logger.warning(f'Nets {inside_nets} are shorted on layer {layer} in poly:\n {pformat(poly)}') + first_net, *defunct_nets = inside_nets + for defunct_net in defunct_nets: + net_info.merge(first_net, defunct_net) + + contours = [] + + +def tree2oriented(polys: Sequence[PyPolyNode]) -> list[ArrayLike]: + contours = [] + for poly in polys: + contours.append(poly.Contour) + contours += [hole.Contour for hole in poly.Childs] + + return union_evenodd(contours) + + +for layer in metal_layers: + labels = sorted([ll for ll in topcell.labels if ll.layer == layer], key=lambda ll: ll.string) + point_xys = [ll.offset for ll in labels] + point_names = [ll.string for ll in labels] + label_nets(net_info, metal_polys[layer], point_xys, point_names) + +# +# Take EVENODD union within each net +# & stay in EVENODD-friendly representation +# +for net in net_info.nets.values(): + for layer in net: + net[layer] = tree2oriented(net[layer]) + +for layer in via_polys: + via_polys[layer] = tree2oriented(via_polys[layer]) + +## write out nets to gds +#pat = Pattern('nets') +#for name, net in net_info.nets.items(): +# sub = Pattern(str(name)) +# for layer in net: +# print('aaaaaa', layer) +# for poly in net[layer]: +# sub.shapes.append(Polygon(layer=layer, vertices=scale_from_clipper(poly, CLIPPER_SCALE_FACTOR))) +# pat.addsp(sub) +#gdsii.writefile(pat, '_nets.gds', 1e-9, 1e-6) + + +# +# Merge nets based on via connectivity +# +merge_pairs = set() +for top_layer, via_layer, bot_layer in layer_info: + vias = via_polys[via_layer] + if not vias: + continue + + #TODO deal with polygons that have holes (loops?) + + for top_name in net_info.nets.keys(): + top_polys = net_info.nets[top_name][top_layer] + if not top_polys: + continue + + for bot_name in net_info.nets.keys(): + if bot_name == top_name: + continue + name_pair = tuple(sorted((top_name, bot_name), key=lambda s: id(s))) + if name_pair in merge_pairs: + continue + + bot_polys = net_info.nets[bot_name][bot_layer] + if not bot_polys: + continue + + via_top = intersection_evenodd(top_polys, vias) + overlap = intersection_evenodd(via_top, bot_polys) + + if not overlap: + continue + + if isinstance(bot_name, str) and isinstance(top_name, str): + logger.warning(f'Nets {top_name} and {bot_name} are shorted with via layer {via_layer} at:\n {pformat(scale_from_clipper(overlap[0], CLIPPER_SCALE_FACTOR))}') + merge_pairs.add(name_pair) + +for net_a, net_b in merge_pairs: + net_info.merge(net_a, net_b) + + +print('merged pairs') +print(pformat(merge_pairs)) + + +print('\nFinal nets:') +print([kk for kk in net_info.nets if isinstance(kk, str)]) + + +print('\nNet sets:') +for short in net_info.get_shorted_nets(): + print('(' + ','.join(sorted(list(short))) + ')') diff --git a/examples/euler_bend.py b/examples/euler_bend.py new file mode 100644 index 0000000..5964b1d --- /dev/null +++ b/examples/euler_bend.py @@ -0,0 +1,38 @@ +import numpy +from numpy import pi + + +def centerline(switchover_angle: float): + theta_max = numpy.sqrt(2 * switchover_angle) + + def gen_curve(theta_max: float): + xx = [] + yy = [] + for theta in numpy.linspace(0, theta_max, 100): + qq = numpy.linspace(0, theta, 1000) + xx.append(numpy.trapz( cos(qq * qq / 2), qq)) + yy.append(numpy.trapz(-sin(qq * qq / 2), qq)) + xy_part = numpy.stack((xx, yy), axis=1) + return xy_part + + AA = 1 + xy_part = AA * gen_curve(theta_max) + rmin = AA / theta_max + + xy = [xy_part] + if switchover_angle < pi / 4: + half_angle = pi / 4 - switchover_angle + qq = numpy.linspace(half_angle * 2, 0, 10) + switchover_angle + xc = rmin * numpy.cos(qq) + yc = rmin * numpy.sin(qq) + xy_part[-1, 1] + xc += xy_part[-1, 0] - xc[0] + yc += xy_part[-1, 1] - yc[0] + xy.append(numpy.stack((xy, yc), axis=1)) + + endpoint_xy = xy[-1][-1, :] + second_curve = xy_part[:, ::-1] + endpoint_xy - xy_part[-1, ::-1] + + # Remove 2x-duplicate points + xy = xy[(numpy.circshift(xy, 1, axis=0) != xy).any(axis=1)] + + return xy diff --git a/masque/file/gdsii_arrow.py b/masque/file/gdsii_arrow.py index e34d25f..87d5065 100644 --- a/masque/file/gdsii_arrow.py +++ b/masque/file/gdsii_arrow.py @@ -31,6 +31,7 @@ from pprint import pformat import numpy from numpy.typing import ArrayLike, NDArray +from numpy.testing import assert_equal import pyarrow from pyarrow.cffi import ffi @@ -44,7 +45,7 @@ from ..library import LazyLibrary, Library, ILibrary, ILibraryView logger = logging.getLogger(__name__) -clib = ffi.dlopen('/home/jan/projects/klamath-rs/target/debug/libklamath_rs_ext.so') +clib = ffi.dlopen('/home/jan/projects/klamath-rs/target/release/libklamath_rs_ext.so') ffi.cdef('void read_path(char* path, struct ArrowArray* array, struct ArrowSchema* schema);') @@ -127,10 +128,25 @@ def read_arrow( """ library_info = _read_header(libarr) + layer_names_np = libarr['layers'].values.to_numpy().view('i2').reshape((-1, 2)) + layer_tups = [tuple(pair) for pair in layer_names_np] + bnd = libarr['cells'].values.field('boundaries') + layer_inds = bnd.values.field('layer').to_numpy() + boundary = dict( + offsets = bnd.offsets.to_numpy(), + xy_arr = bnd.values.field('xy').values.to_numpy().reshape((-1, 2)), + xy_off = bnd.values.field('xy').offsets.to_numpy() // 2, + layer_tups = layer_tups, + layer_inds = layer_inds, + prop_off = bnd.values.field('properties').offsets.to_numpy(), + prop_key = bnd.values.field('properties').values.field('key').to_numpy(), + prop_val = bnd.values.field('properties').values.field('value').to_pylist(), + ) + mlib = Library() - for cell in libarr['cells']: + for cc, cell in enumerate(libarr['cells']): name = libarr['cell_names'][cell['id'].as_py()].as_py() - pat = read_cell(cell, libarr['cell_names'], raw_mode=raw_mode) + pat = read_cell(cc, cell, libarr['cell_names'], raw_mode=raw_mode, boundary=boundary) mlib[name] = pat return mlib, library_info @@ -149,8 +165,10 @@ def _read_header(libarr: pyarrow.Array) -> dict[str, Any]: def read_cell( + cc: int, cellarr: pyarrow.Array, cell_names: pyarrow.Array, + boundary: dict[str, NDArray], raw_mode: bool = True, ) -> Pattern: """ @@ -190,22 +208,32 @@ def read_cell( ref = Ref(**args) pat.refs[target].append(ref) - for bnd in cellarr['boundaries']: - layer = (bnd['layer'].as_py(), bnd['dtype'].as_py()) - args = dict( - vertices = bnd['xy'].values.to_numpy().reshape((-1, 2))[:-1], - raw = raw_mode, - offset = numpy.zeros(2), - ) + bnd_off = boundary['offsets'] + bnd_xy_val = boundary['xy_arr'] + bnd_xy_off = boundary['xy_off'] + layer_tups = boundary['layer_tups'] + layer_inds = boundary['layer_inds'] + prop_off = boundary['prop_off'] + prop_key = boundary['prop_key'] + prop_val = boundary['prop_val'] + slc = slice(bnd_off[cc], bnd_off[cc + 1] + 1) + bnd_offs = bnd_xy_off[slc] + prop_offs = prop_off[slc] + zeros = numpy.zeros((len(bnd_offs) - 1, 2)) + for bb in range(len(bnd_offs) - 1): + layer = layer_tups[layer_inds[bb]] + vertices = bnd_xy_val[bnd_offs[bb]:bnd_offs[bb + 1] - 1] # -1 to drop closing point - if (props := bnd['properties']).is_valid: - args['annotations'] = _properties_to_annotations(props) + prop_ii, prop_ff = prop_offs[bb], prop_offs[bb + 1] + if prop_ii < prop_ff: + ann = {prop_key[off]: prop_val[off] for off in range(prop_ii, prop_ff)} + args = dict(annotations = ann) - poly = Polygon(**args) + poly = Polygon(vertices=vertices, offset=zeros[bb], raw=raw_mode) pat.shapes[layer].append(poly) for gpath in cellarr['paths']: - layer = (gpath['layer'].as_py(), gpath['dtype'].as_py()) + layer = (gpath['layer'].as_py(),) args = dict( vertices = gpath['xy'].values.to_numpy().reshape((-1, 2)), offset = numpy.zeros(2), @@ -236,7 +264,7 @@ def read_cell( pat.shapes[layer].append(mpath) for gtext in cellarr['texts']: - layer = (gtext['layer'].as_py(), gtext['dtype'].as_py()) + layer = (gtext['layer'].as_py(),) args = dict( offset = (gtext['x'].as_py(), gtext['y'].as_py()), string = gtext['string'].as_py(), diff --git a/masque/test/__init__.py b/masque/test/__init__.py new file mode 100644 index 0000000..e02b636 --- /dev/null +++ b/masque/test/__init__.py @@ -0,0 +1,3 @@ +""" +Tests (run with `python3 -m pytest -rxPXs | tee results.txt`) +""" diff --git a/masque/test/conftest.py b/masque/test/conftest.py new file mode 100644 index 0000000..b8be410 --- /dev/null +++ b/masque/test/conftest.py @@ -0,0 +1,31 @@ +""" + +Test fixtures + +""" +# ruff: noqa: ARG001 +from typing import Any +import numpy +from numpy.typing import NDArray + +import pytest # type: ignore + + +FixtureRequest = Any +PRNG = numpy.random.RandomState(12345) + + +@pytest.fixture(scope='module', + params=[(5, 5, 1), + (5, 1, 5), + (5, 5, 5), + # (7, 7, 7), + ]) +def shape(request: FixtureRequest) -> tuple[int, ...]: + return (3, *request.param) + + +@pytest.fixture(scope='module', params=[1.0, 1.5]) +def epsilon_bg(request: FixtureRequest) -> float: + return request.param + diff --git a/masque/test/test_fdfd.py b/masque/test/test_fdfd.py new file mode 100644 index 0000000..883bd02 --- /dev/null +++ b/masque/test/test_fdfd.py @@ -0,0 +1,35 @@ +# ruff: noqa: ARG001 +import dataclasses +import pytest # type: ignore +import numpy +from numpy import pi +from numpy.typing import NDArray +#from numpy.testing import assert_allclose, assert_array_equal + +from .. import Pattern, Arc + + + +def test_Arc_arclen() -> None: + max_arclen = 1000 + + wedge = Arc(radii=( 50, 50), angles=(-pi/4, pi/4), width=100) + arc = Arc(radii=(100, 100), angles=(-pi/4, pi/4), width=1) + + verts_wedge = wedge.to_polygons(max_arclen=max_arclen)[0].vertices + verts_arc = arc.to_polygons(max_arclen=max_arclen)[0].vertices + + dxy_wedge = numpy.roll(verts_wedge, 1, axis=0) - verts_wedge + dxy_arc = numpy.roll(verts_arc, 1, axis=0) - verts_arc + + dl_wedge = numpy.sqrt((dxy_wedge * dxy_wedge).sum(axis=1)) + dl_arc = numpy.sqrt((dxy_arc * dxy_arc).sum(axis=1)) + + assert dl_wedge.max() < max_arclen + assert dl_arc.max() < max_arclen + + print(verts_wedge.shape[0]) + print(verts_arc.shape[0]) + print(dl_wedge, dl_arc) + Pattern(shapes={(0, 0): [wedge, arc]}).visualize() + assert False diff --git a/masque/utils/curves.py b/masque/utils/curves.py index 1e41c35..c3ac8e2 100644 --- a/masque/utils/curves.py +++ b/masque/utils/curves.py @@ -46,6 +46,21 @@ def bezier( return qq +def bezier2( + nodes: ArrayLike, + tt: ArrayLike, + ) -> NDArray[numpy.float64]: + nodes = numpy.asarray(nodes) + tt = numpy.asarray(tt)[:, None, None] + nn = nodes.shape[0] + qq = nodes[None, :, :] * numpy.ones(tt.size)[:, None, None] + for kk in range(1, nn): + gg = nn - kk + qq[:, :gg, :] = (1 - tt) * qq[:, :gg, :] + tt * qq[:, 1:gg + 1, :] + #for ii in range(nn - kk): + # qq[:, ii] = (1 - tt[:, None]) * qq[:, ii] + tt[:, None] * qq[:, ii + 1] + return qq[:, 0, :] + def euler_bend( switchover_angle: float, diff --git a/perftest.py b/perftest.py new file mode 100644 index 0000000..c8e9cd6 --- /dev/null +++ b/perftest.py @@ -0,0 +1,5 @@ +import time +from masque.file.gdsii_arrow import readfile + +#time.sleep(5) +lib, props = readfile('/home/jan/Downloads/sg13g2_io.gds') diff --git a/test.ssc b/test.ssc new file mode 100644 index 0000000..7a76fb1 --- /dev/null +++ b/test.ssc @@ -0,0 +1 @@ +{"$schema":"https://www.speedscope.app/file-format-schema.json","profiles":[{"type":"sampled","name":"Process 1401673 Thread 1401673 \"\"","unit":"seconds","startValue":0.0,"endValue":2.72,"samples":[[15,2,14,2,9,13,5,2,9,13,5,2,9,8,7,6,5,2,12,2,9,8,7,6,5,2,11,2,9,8,7,6,5,2,10,2,9,8,7,6,5,2,4,3,2,1,0],[15,2,14,2,9,13,5,2,9,13,5,2,9,8,7,6,5,2,12,2,9,8,7,6,5,2,22,2,9,8,7,6,5,2,21,2,9,8,7,6,5,2,20,2,9,8,7,6,5,2,19,2,9,8,7,6,5,2,18,2,17,16],[15,2,14,2,9,13,5,2,9,13,5,2,9,8,7,6,5,2,12,2,9,8,7,6,5,2,22,2,9,8,7,6,5,2,21,2,9,8,7,6,5,2,31,2,9,8,7,6,5,2,30,2,9,13,5,2,9,8,7,6,5,2,29,2,27,5,2,9,8,7,6,5,2,28,2,27,5,2,9,8,7,6,5,2,26,2,9,8,25,24,23,5],[15,2,14,2,9,13,5,2,9,13,5,2,9,8,7,6,5,2,12,2,9,8,7,6,5,2,22,2,9,8,7,6,5,2,21,2,9,8,7,6,5,2,31,2,9,8,7,6,5,2,30,2,9,13,5,2,9,8,7,6,5,2,36,2,27,5,2,9,8,7,6,5,2,35,2,27,5,2,9,8,7,34,33,32],[15,2,14,2,9,13,5,2,9,13,5,2,9,8,7,6,5,2,12,2,9,8,7,6,5,2,22,2,9,8,7,6,5,2,21,2,9,8,7,6,5,2,31,2,9,8,7,6,5,2,30,2,9,13,5,2,9,8,7,6,5,2,36,2,27,5,2,9,8,7,6,5,2,35,2,27,5,2,9,8,7,6,5,2,37],[15,2,14,2,9,13,5,2,9,13,5,2,9,8,7,6,5,2,12,2,9,8,7,6,5,2,22,2,9,8,7,6,5,2,21,2,9,8,7,6,5,2,31,2,9,8,7,6,5,2,30,2,9,13,5,2,9,8,7,6,5,2,41,2,27,5,2,9,8,7,6,5,2,40,2,9,8,7,6,5,2,39,2,9,8,7,38,5],[15,2,14,2,9,13,5,2,9,13,5,2,9,8,7,6,5,2,12,2,9,8,7,6,5,2,48,2,27,5,2,9,8,7,6,5,2,47,2,9,8,7,6,5,2,46,2,9,8,7,6,5,2,45,2,9,8,7,6,5,2,44,2,9,8,7,6,5,2,43,2,9,8,7,6,5,2,42],[15,2,14,2,9,13,5,2,9,13,5,2,9,8,7,6,5,2,55,2,9,8,7,6,5,2,54,2,9,8,7,6,5,2,53,2,9,8,7,6,5,2,52,51,50,49],[15,2,14,2,9,8,7,6,5,2,56,2,9,8,25,24,23,5],[15,2,14,2,9,8,7,6,5,2,62,2,9,8,7,6,5,2,61,2,27,5,2,9,8,7,6,5,2,60,2,9,8,7,6,5,2,59,2,9,8,7,6,5,2,58,57],[15,2,14,2,9,8,7,6,5,2,64,2,9,8,7,6,5,2,63,2,9,8,25,24,23,5],[15,2,14,2,9,8,7,6,5,2,67,2,9,8,7,6,5,2,66,2,9,8,7,6,5,2,65,2,9,8,7,34,33,32],[15,2,14,2,9,8,7,6,5,2,67,2,9,8,7,6,5,2,73,2,72,2,27,5,2,9,8,7,6,5,2,71,2,9,8,7,6,5,2,70,2,9,8,7,34,69,68,5],[15,2,14,2,9,8,7,6,5,2,67,2,9,8,7,6,5,2,73,2,72,2,27,5,2,9,8,7,6,5,2,71,2,9,8,7,6,5,2,70,2,9,8,7,6,5,2,78,2,9,8,7,6,5,2,77,2,1,0,2,76,75,2,74],[15,2,14,2,9,8,7,6,5,2,67,2,9,8,7,6,5,2,89,88,87,2,86,85,84,83,2,82,81,80,2,79,2,9,8,7,34,69,68,5],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,90],[15,2,91,97,96,2,9,8,7,6,5,2,95,2,9,8,7,6,5,2,94,93,2,92],[15,2,91,97,96,2,9,8,7,6,5,2,106,2,9,8,7,6,5,2,105,2,27,5,2,9,8,7,6,5,2,104,2,9,8,7,6,5,2,103,2,102,2,101,100,2,99,98],[15,2,91,97,96,2,9,8,7,6,5,2,111,2,9,8,7,6,5,2,110,2,9,8,7,6,5,2,109,2,9,8,7,107,5,2,9,8,7,107,5,2,9,8,7,107,5,2,9,13,5,2,9,8,7,6,5,2,108,2,9,8,7,107,5,2,9,8,7,107,5,2,9,8,7,107,5,2,9,8,7,107,5],[15,2,91,97,96,2,9,8,7,6,5,2,111,2,9,8,7,6,5,2,120,2,9,8,7,6,5,2,119,2,9,8,7,6,5,2,118,2,9,8,7,6,5,2,117,2,116,2,115,2,9,8,7,6,5,2,114,2,27,5,2,9,8,7,6,5,2,113,2,112],[15,2,91,97,96,2,9,8,7,6,5,2,111,2,9,8,7,6,5,2,120,2,9,8,7,6,5,2,119,2,9,8,7,6,5,2,118,2,9,8,7,6,5,2,117,2,116,2,115,2,9,8,7,6,5,2,114,2,27,5,2,9,8,7,6,5,2,123,122,121],[15,2,91,97,96,2,9,8,7,6,5,2,111,2,9,8,7,6,5,2,131,2,9,8,7,6,5,2,130,2,9,8,7,6,5,2,129,2,9,8,7,6,5,2,128,2,9,8,7,6,5,2,127,2,27,5,2,9,8,7,6,5,2,126,2,9,8,7,6,5,2,125,2,9,8,7,6,5,2,124,2,9,8,7,34,33,32],[15,2,91,97,96,2,9,8,7,6,5,2,111,2,9,8,7,6,5,2,131,2,9,8,7,6,5,2,130,2,9,8,7,6,5,2,129,2,9,8,7,6,5,2,128,2,9,8,7,6,5,2,127,2,27,5,2,9,8,7,6,5,2,126,2,9,8,7,6,5,2,125,2,9,8,7,6,5,2,124,2,9,8,7,6,5,2,132,2],[15,2,91,97,96,2,9,8,7,6,5,2,111,2,9,8,7,6,5,2,131,2,9,8,7,6,5,2,130,2,9,8,7,6,5,2,129,2,9,8,7,6,5,2,128,2,9,8,7,6,5,2,127,2,27,5,2,9,8,7,6,5,2,141,2,140,139,138,137,136,135,134,133],[15,2,91,97,96,2,9,8,7,6,5,2,111,2,9,8,7,6,5,2,131,2,9,8,7,6,5,2,130,2,9,8,7,6,5,2,129,2,9,8,7,6,5,2,128,2,9,8,7,6,5,2,150,149,148,147,146,2,145,143,144,143,142],[15,2,91,97,96,2,9,8,7,6,5,2,111,2,9,8,7,6,5,2,131,2,9,8,7,6,5,2,130,2,9,8,7,6,5,2,155,2,9,8,7,6,5,2,154,2,9,8,7,6,5,2,153,2,9,8,7,6,5,2,152,2,9,8,7,6,5,2,151],[15,2,91,97,96,2,9,8,7,6,5,2,111,2,9,8,7,6,5,2,158,2,9,8,7,6,5,2,157,2,9,8,7,6,5,2,156,2,9,8,7,34,33,32],[15,2,91,97,96,2,9,8,7,6,5,2,111,2,9,8,7,6,5,2,158,2,9,8,7,6,5,2,157,2,9,8,7,6,5,2,156,2,9,8,7,6,5,2,162,2,9,8,7,6,5,2,161,2,9,8,25,160,159],[15,2,91,97,96,2,9,8,7,6,5,2,164,2,9,8,7,6,5,2,163,2,9,8,7,34,33,32],[15,2,91,97,96,2,9,8,7,6,5,2,173,2,27,5,2,9,8,7,6,5,2,172,2,27,5,2,9,8,7,6,5,2,171,2,9,13,5,2,9,8,7,6,5,2,170,2,9,8,7,6,5,2,169,2,9,13,5,2,9,8,7,6,5,2,168,2,9,8,7,6,5,2,167,2,166,165],[15,2,91,97,96,2,9,8,7,6,5,2,179,2,9,8,7,6,5,2,178,2,9,8,7,6,5,2,177,2,9,8,7,6,5,2,176,175,174],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,182,2,181,180],[15,2,91,97,184,183],[15,2,91,97,184,183],[15,2,91,97,184,185],[15,2,91,97,184,186],[15,2,91,97,184,186,2,187],[15,2,91,97,184,183],[15,2,91,97,184,186,2,187],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,190],[15,2,91,97,184,191],[15,2,91,97,184,186,2,189,192],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,193],[15,2,91,97,184,186],[15,2,91,97,184,183],[15,2,91,97,184,193],[15,2,91,97,184,186],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,183],[15,2,91,97,184,183],[15,2,91,97,184,186],[15,2,91,97,184,183],[15,2,91,97,184,186,2,194],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186],[15,2,91,97,184,186,2,187],[15,2,91,97,184,186,2,189],[15,2,91,97,184,186,2,195],[15,2,91,97,184,191],[15,2,91,97,184,186],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186],[15,2,91,97,184,186],[15,2,91,97,184,196],[15,2,91,97,184,186],[15,2,91,97,184,191],[15,2,91,97,184,191],[15,2,91,97,184,186],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,191],[15,2,91,97,184,183],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186],[15,2,91,97,184,183],[15,2,91,97,184,191],[15,2,91,97,184,183],[15,2,91,97,184,186,2,194],[15,2,91,97,184,186],[15,2,91,97,184,186,2,187],[15,2,91,97,184,186],[15,2,91,97,184,186],[15,2,91,97,184,183],[15,2,91,97,184,186],[15,2,91,97,184,193],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186],[15,2,91,97,184,183],[15,2,91,97,184,186,2,197],[15,2,91,97,184,183],[15,2,91,97,184,186],[15,2,91,97,184,183],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186],[15,2,91,97,184,183],[15,2,91,97,184,183],[15,2,91,97,184,183],[15,2,91,97,184,183],[15,2,91,97,184,183],[15,2,91,97,184,186],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,189],[15,2,91,97,184,186],[15,2,91,97,184,193],[15,2,91,97,184,183],[15,2,91,97,184,196],[15,2,91,97,184,186],[15,2,91,97,184,199,2,198],[15,2,91,97,200],[15,2,91,97,184,186],[15,2,91,97,184,186,2,189,192],[15,2,91,97,184,186],[15,2,91,97,184,183],[15,2,91,97,184,186],[15,2,91,97,184,183],[15,2,91,97,184,186,2,201],[15,2,91,97,184,186],[15,2,91,97,184,186],[15,2,91,97,184,183],[15,2,91,97,184,186],[15,2,91,97,184,186],[15,2,91,97,184,186,2,187],[15,2,91,97,184,183],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,187],[15,2,91,97,184,186],[15,2,91,97,184,186],[15,2,91,97,184,183],[15,2,91,97,184,186,2,189,188],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186,2,195],[15,2,91,97,184,186],[15,2,91,97,184,186,2,195],[15,2,91,97,184,183],[15,2,91,97,184,186,2,202],[15,2,91,97,184,186,2,203],[15,2,91,97,184,183],[15,2,91,97,184,186,2,203],[15,2,91,97,184,196],[15,2,91,97,184,205,204],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15],[15]],"weights":[0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01]}],"shared":{"frames":[{"name":"acquire","file":"","line":311,"col":null},{"name":"_lock_unlock_module","file":"","line":471,"col":null},{"name":"","file":"","line":0,"col":null},{"name":"","file":"/usr/lib/python3.13/typing.py","line":2969,"col":null},{"name":"","file":"/usr/lib/python3.13/typing.py","line":2969,"col":null},{"name":"_call_with_frames_removed","file":"","line":488,"col":null},{"name":"exec_module","file":"","line":1026,"col":null},{"name":"_load_unlocked","file":"","line":935,"col":null},{"name":"_find_and_load_unlocked","file":"","line":1331,"col":null},{"name":"_find_and_load","file":"","line":1360,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/types.py","line":4,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/__init__.py","line":4,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/__init__.py","line":31,"col":null},{"name":"_find_and_load_unlocked","file":"","line":1310,"col":null},{"name":"","file":"/home/jan/projects/masque/perftest.py","line":2,"col":null},{"name":"process 1401673:\"\"","file":"","line":0,"col":null},{"name":"_find_new_","file":"/usr/lib/python3.13/enum.py","line":1034,"col":null},{"name":"__new__","file":"/usr/lib/python3.13/enum.py","line":536,"col":null},{"name":"","file":"/usr/lib/python3.13/enum.py","line":1347,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_globals.py","line":18,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/__init__.py","line":92,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/vertices.py","line":4,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/__init__.py","line":18,"col":null},{"name":"create_module","file":"","line":1321,"col":null},{"name":"module_from_spec","file":"","line":813,"col":null},{"name":"_load_unlocked","file":"","line":921,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/overrides.py","line":7,"col":null},{"name":"_handle_fromlist","file":"","line":1415,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/multiarray.py","line":10,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/__init__.py","line":23,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/__config__.py","line":4,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/__init__.py","line":114,"col":null},{"name":"_compile_bytecode","file":"","line":784,"col":null},{"name":"get_code","file":"","line":1155,"col":null},{"name":"exec_module","file":"","line":1022,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/numeric.py","line":2702,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/__init__.py","line":74,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/arrayprint.py","line":1281,"col":null},{"name":"exec_module","file":"","line":1000,"col":null},{"name":"","file":"/usr/lib/python3.13/ast.py","line":29,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/_internal.py","line":7,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/__init__.py","line":100,"col":null},{"name":"","file":"/usr/lib/python3.13/tokenize.py","line":153,"col":null},{"name":"","file":"/usr/lib/python3.13/inspect.py","line":155,"col":null},{"name":"","file":"/usr/lib/python3.13/dataclasses.py","line":5,"col":null},{"name":"","file":"/usr/lib/python3.13/pprint.py","line":38,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/library.py","line":22,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/ports2data.py","line":19,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/__init__.py","line":41,"col":null},{"name":"add_fns_to_class","file":"/usr/lib/python3.13/dataclasses.py","line":498,"col":null},{"name":"_process_class","file":"/usr/lib/python3.13/dataclasses.py","line":1157,"col":null},{"name":"wrap","file":"/usr/lib/python3.13/dataclasses.py","line":1297,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/builder/tools.py","line":24,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/builder/pather.py","line":21,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/builder/__init__.py","line":2,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/__init__.py","line":74,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":25,"col":null},{"name":"namedtuple","file":"/usr/lib/python3.13/collections/__init__.py","line":490,"col":null},{"name":"","file":"/usr/lib/python3.13/selectors.py","line":46,"col":null},{"name":"","file":"/usr/lib/python3.13/subprocess.py","line":125,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/testing/_private/extbuild.py","line":9,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/testing/__init__.py","line":13,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":34,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/__init__.py","line":65,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":35,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/cffi/__init__.py","line":4,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/cffi.py","line":20,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":36,"col":null},{"name":"source_to_code","file":"","line":1090,"col":null},{"name":"get_code","file":"","line":1160,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pycparser/__init__.py","line":15,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":7,"col":null},{"name":"__init__","file":"/usr/lib/python3/dist-packages/cffi/api.py","line":65,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/cffi.py","line":80,"col":null},{"name":"__init__","file":"","line":80,"col":null},{"name":"setdefault","file":"","line":132,"col":null},{"name":"__enter__","file":"","line":170,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pycparser/ast_transforms.py","line":10,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pycparser/c_parser.py","line":14,"col":null},{"name":"","file":"","line":1,"col":null},{"name":"read_table","file":"/usr/lib/python3/dist-packages/ply/yacc.py","line":1984,"col":null},{"name":"yacc","file":"/usr/lib/python3/dist-packages/ply/yacc.py","line":3292,"col":null},{"name":"__init__","file":"/usr/lib/python3/dist-packages/pycparser/c_parser.py","line":109,"col":null},{"name":"_get_parser","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":53,"col":null},{"name":"_parse","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":337,"col":null},{"name":"_internal_parse","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":395,"col":null},{"name":"parse","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":390,"col":null},{"name":"_cdef","file":"/usr/lib/python3/dist-packages/cffi/api.py","line":126,"col":null},{"name":"cdef","file":"/usr/lib/python3/dist-packages/cffi/api.py","line":112,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/cffi.py","line":81,"col":null},{"name":"readfile","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":83,"col":null},{"name":"","file":"/home/jan/projects/masque/perftest.py","line":5,"col":null},{"name":"walk","file":"","line":392,"col":null},{"name":"available_timezones","file":"/usr/lib/python3.13/zoneinfo/_tzpath.py","line":146,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pytz/__init__.py","line":658,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":14,"col":null},{"name":"read_arrow","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":123,"col":null},{"name":"readfile","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":90,"col":null},{"name":"_type_check","file":"/usr/lib/python3.13/typing.py","line":195,"col":null},{"name":"","file":"/usr/lib/python3.13/typing.py","line":789,"col":null},{"name":"Union","file":"/usr/lib/python3.13/typing.py","line":789,"col":null},{"name":"__getitem__","file":"/usr/lib/python3.13/typing.py","line":576,"col":null},{"name":"inner","file":"/usr/lib/python3.13/typing.py","line":429,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_typing.py","line":238,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_config/config.py","line":68,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_config/__init__.py","line":20,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":37,"col":null},{"name":"exec_module","file":"","line":1328,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_libs/tslibs/__init__.py","line":40,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_libs/__init__.py","line":18,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/api.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":49,"col":null},{"name":"_handle_fromlist","file":"","line":1400,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/ma/extras.py","line":34,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/ma/__init__.py","line":45,"col":null},{"name":"__getattr__","file":"/usr/lib/python3/dist-packages/numpy/__init__.py","line":346,"col":null},{"name":"_handle_fromlist","file":"","line":1412,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/construction.py","line":20,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/array_algos/take.py","line":24,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/algorithms.py","line":77,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/api.py","line":23,"col":null},{"name":"cleandoc","file":"/usr/lib/python3.13/inspect.py","line":901,"col":null},{"name":"doc_note","file":"/usr/lib/python3/dist-packages/numpy/ma/core.py","line":123,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/ma/extras.py","line":2284,"col":null},{"name":"","file":"/usr/lib/python3.13/urllib/parse.py","line":40,"col":null},{"name":"","file":"/usr/lib/python3.13/pydoc.py","line":78,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/vendored/docscrape.py","line":13,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":104,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/accessors.py","line":23,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/__init__.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/__init__.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/api.py","line":28,"col":null},{"name":"","file":"/usr/lib/python3.13/ipaddress.py","line":1139,"col":null},{"name":"_compile","file":"/usr/lib/python3.13/re/_compiler.py","line":86,"col":null},{"name":"_compile","file":"/usr/lib/python3.13/re/_compiler.py","line":126,"col":null},{"name":"_compile","file":"/usr/lib/python3.13/re/_compiler.py","line":117,"col":null},{"name":"_code","file":"/usr/lib/python3.13/re/_compiler.py","line":585,"col":null},{"name":"compile","file":"/usr/lib/python3.13/re/_compiler.py","line":752,"col":null},{"name":"_compile","file":"/usr/lib/python3.13/re/__init__.py","line":350,"col":null},{"name":"compile","file":"/usr/lib/python3.13/re/__init__.py","line":289,"col":null},{"name":"NumpyDocString","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/vendored/docscrape.py","line":276,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/vendored/docscrape.py","line":118,"col":null},{"name":"_deepcopy_list","file":"/usr/lib/python3.13/copy.py","line":194,"col":null},{"name":"deepcopy","file":"/usr/lib/python3.13/copy.py","line":137,"col":null},{"name":"_deepcopy_dict","file":"/usr/lib/python3.13/copy.py","line":222,"col":null},{"name":"__init__","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/vendored/docscrape.py","line":151,"col":null},{"name":"_scrape_options_class_doc","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":117,"col":null},{"name":"_decorate_compute_function","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":170,"col":null},{"name":"_wrap_function","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":304,"col":null},{"name":"_make_global_functions","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":333,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":336,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/_mixins.py","line":92,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/numpy_.py","line":27,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/string_.py","line":48,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/array.py","line":65,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/__init__.py","line":5,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/groupby/generic.py","line":68,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/groupby/__init__.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/api.py","line":47,"col":null},{"name":"_new_module","file":"","line":49,"col":null},{"name":"module_from_spec","file":"","line":818,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/generic.py","line":180,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/frame.py","line":149,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/reshape/api.py","line":11,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":121,"col":null},{"name":"dedent","file":"/usr/lib/python3.13/textwrap.py","line":436,"col":null},{"name":"__call__","file":"/usr/lib/python3/dist-packages/pandas/util/_decorators.py","line":488,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/io/parsers/readers.py","line":1271,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/io/parsers/__init__.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/io/json/_json.py","line":71,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/io/json/__init__.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/api/typing/__init__.py","line":31,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/api/__init__.py","line":2,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":138,"col":null},{"name":"dedent","file":"/usr/lib/python3.13/textwrap.py","line":435,"col":null},{"name":"decorator","file":"/usr/lib/python3/dist-packages/pandas/util/_decorators.py","line":367,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/io/excel/_base.py","line":452,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/io/excel/__init__.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/io/api.py","line":6,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":142,"col":null},{"name":"_unique1d","file":"/usr/lib/python3/dist-packages/numpy/lib/_arraysetops_impl.py","line":350,"col":null},{"name":"unique","file":"/usr/lib/python3/dist-packages/numpy/lib/_arraysetops_impl.py","line":331,"col":null},{"name":"read_arrow","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":126,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":210,"col":null},{"name":"read_arrow","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":139,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":179,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":215,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":102,"col":null},{"name":"rotate","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":366,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":108,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":249,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":216,"col":null},{"name":"rotate","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":367,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":209,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":98,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":86,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":208,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":107,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/label.py","line":51,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":259,"col":null},{"name":"read_arrow","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":138,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":101,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":97,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":99,"col":null},{"name":"_properties_to_annotations","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":266,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":257,"col":null}]},"activeProfileIndex":null,"exporter":"py-spy@0.4.0","name":"py-spy profile"} diff --git a/test3.ssc b/test3.ssc new file mode 100644 index 0000000..7a643e4 --- /dev/null +++ b/test3.ssc @@ -0,0 +1 @@ +{"$schema":"https://www.speedscope.app/file-format-schema.json","profiles":[{"type":"sampled","name":"Process 1772769 Thread 1772769 \"\"","unit":"seconds","startValue":0.0,"endValue":2.4,"samples":[[12,0,11,0,6,10,2,0,6,10,2,0,6,5,4,3,2,0,9,0,6,5,4,3,2,0,8,0,6,5,4,3,2,0,7,0,6,5,4,3,2,0,1,0],[12,0,11,0,6,10,2,0,6,10,2,0,6,5,4,3,2,0,9,0,6,5,4,3,2,0,23,0,6,5,4,3,2,0,22,0,6,5,4,3,2,0,21,0,6,5,4,3,2,0,20,0,6,10,2,0,6,5,4,3,2,0,19,0,17,2,0,6,5,4,3,2,0,18,0,17,2,0,6,5,4,3,2,0,16,0,6,5,15,14,13,2],[12,0,11,0,6,10,2,0,6,10,2,0,6,5,4,3,2,0,9,0,6,5,4,3,2,0,23,0,6,5,4,3,2,0,22,0,6,5,4,3,2,0,21,0,6,5,4,3,2,0,20,0,6,10,2,0,6,5,4,3,2,0,29,0,17,2,0,6,5,4,3,2,0,28,0,17,2,0,6,5,4,3,2,0,27,0,17,2,0,6,5,4,3,2,0,26,0,17,2,0,6,5,4,3,2,0,25,0,6,5,4,3,2,0,24],[12,0,11,0,6,10,2,0,6,10,2,0,6,5,4,3,2,0,9,0,6,5,4,3,2,0,23,0,6,5,4,3,2,0,22,0,6,5,4,3,2,0,21,0,6,5,4,3,2,0,20,0,6,10,2,0,6,5,4,3,2,0,29,0,17,2,0,6,5,4,3,2,0,28,0,17,2,0,6,5,4,3,2,0,27,0,17,2,0,6,5,4,3,2,0,26,0,17,2,0,6,5,4,3,2,0,33,0,6,5,4,32,31,30],[12,0,11,0,6,10,2,0,6,10,2,0,6,5,4,3,2,0,9,0,6,5,4,3,2,0,23,0,6,5,4,3,2,0,22,0,6,5,4,3,2,0,21,0,6,5,4,3,2,0,20,0,6,10,2,0,6,5,4,3,2,0,29,0,17,2,0,6,5,4,3,2,0,38,37,36,35,34],[12,0,11,0,6,10,2,0,6,10,2,0,6,5,4,3,2,0,9,0,6,5,4,3,2,0,23,0,6,5,4,3,2,0,22,0,6,5,4,3,2,0,21,0,6,5,4,3,2,0,20,0,6,10,2,0,6,5,4,3,2,0,42,0,17,2,0,6,5,4,3,2,0,41,0,6,5,4,3,2,0,40,39],[12,0,11,0,6,10,2,0,6,10,2,0,6,5,4,3,2,0,9,0,6,5,4,3,2,0,23,0,6,5,4,3,2,0,22,0,6,5,4,3,2,0,21,0,6,5,4,3,2,0,20,0,6,10,2,0,6,5,4,3,2,0,42,0,17,2,0,6,5,4,3,2,0,47,0,6,5,4,3,2,0,46,0,45,0,44,43],[12,0,11,0,6,10,2,0,6,10,2,0,6,5,4,3,2,0,9,0,6,5,4,3,2,0,23,0,6,5,4,3,2,0,22,0,6,5,4,3,2,0,21,0,6,5,4,3,2,0,20,0,6,10,2,0,6,5,4,3,2,0,42,0,17,2,0,6,5,4,3,2,0,47,0,6,5,4,3,2,0,46,0,6,5,4,48,2],[12,0,11,0,6,10,2,0,6,10,2,0,6,5,4,3,2,0,9,0,6,5,4,3,2,0,23,0,6,5,4,3,2,0,22,0,6,5,4,3,2,0,21,0,6,5,4,3,2,0,20,0,6,10,2,0,6,5,4,3,2,0,42,0,17,2,0,6,5,4,3,2,0,47,0,6,5,4,3,2,0,49],[12,0,11,0,6,10,2,0,6,10,2,0,6,5,4,3,2,0,9,0,6,5,4,3,2,0,23,0,6,5,4,3,2,0,22,0,6,5,4,3,2,0,65,0,17,2,0,6,5,4,3,2,0,64,0,17,2,0,6,5,4,3,2,0,63,0,6,5,4,3,2,0,62,0,17,2,0,6,5,4,3,2,0,61,0,6,5,4,3,2,0,60,0,6,5,4,3,2,0,59,0,58,57,56,55,54,53,52,51,50],[12,0,11,0,6,10,2,0,6,10,2,0,6,5,4,3,2,0,9,0,6,5,4,3,2,0,23,0,6,5,4,3,2,0,22,0,6,5,4,3,2,0,65,0,17,2,0,6,5,4,3,2,0,78,0,17,2,0,6,5,4,3,2,0,77,0,6,5,4,3,2,0,76,0,17,2,0,6,5,4,3,2,0,75,0,6,5,4,3,2,0,74,0,17,2,0,6,5,4,3,2,0,73,0,6,5,4,3,2,0,72,0,6,5,4,3,2,0,71,0,70,69,0,68,0,67,0,66],[12,0,11,0,6,10,2,0,6,10,2,0,6,5,4,3,2,0,9,0,6,5,4,3,2,0,83,0,6,5,4,3,2,0,82,0,6,5,4,3,2,0,81,0,6,5,4,3,2,0,80,0,6,5,4,3,2,0,79,0,6,5,4,32,31,30],[12,0,11,0,6,5,4,3,2,0,86,0,6,5,4,3,2,0,85,0,6,5,4,3,2,0,84,0,6,5,4,32,31,30],[12,0,11,0,6,5,4,3,2,0,89,0,6,5,4,3,2,0,88,0,6,5,4,3,2,0,87,0,6,5,4,32,31,30],[12,0,11,0,6,5,4,3,2,0,89,0,6,5,4,3,2,0,90,0,6,5,4,32,31,30],[12,0,11,0,6,5,4,3,2,0,89,0,6,5,4,3,2,0,93,0,17,2,0,6,5,4,3,2,0,92,0,6,5,4,3,2,0,91,0,6,5,4,32,31,30],[12,0,11,0,6,5,4,3,2,0,95,0,6,5,4,3,2,0,94,0,6,5,4,48,2],[12,0,11,0,6,5,4,3,2,0,95,0,6,5,4,3,2,0,94,0,6,5,4,48,2],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,99,0,6,98,97,96],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,106,0,105,0,17,2,0,6,5,4,3,2,0,104,0,6,5,4,3,2,0,103,0,6,5,4,32,102,101,2],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,106,0,105,0,17,2,0,6,5,4,3,2,0,104,0,6,5,4,3,2,0,103,0,6,5,4,32,102,101,2],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,106,0,105,0,17,2,0,6,5,4,3,2,0,104,0,6,5,4,3,2,0,103,0,6,5,4,3,2,0,108,107],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,106,0,105,0,17,2,0,6,5,4,3,2,0,110,57,56,55,54,52,109],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,106,0,105,0,17,2,0,6,5,4,3,2,0,111,57,56],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,106,0,105,0,17,2,0,45,0,112],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,124,123,122,0,121,120,119,118,0,117,116,115,114,0,113,0,6,5,4,32,102,101,2],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,124,123,122,0,121,120,119,118,0,117,116,115,131,57,56,130,129,128,127,126,125],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,124,123,122,0,121,120,119,118,0,117,116,115,131,57,56,130,129,128,134,133,132],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,124,123,122,0,121,120,119,118,0,137,136,135,0,113,0,6,5,4,32,102,101,2],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,124,123,122,0,121,120,119,118,0,137,136,135,0,113,0,6,5,4,32,102,101,2],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,124,123,122,0,121,120,119,118,0,137,136,135,0,113,0,6,5,4,32,102,101,2],[12,0,11,0,6,5,4,3,2,0,100,0,6,5,4,3,2,0,124,123,122,0,121,120,119,118,0,137,136,135,0,113,0,6,5,4,32,102,101,2],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,139,138],[12,0,140,147,146,0,6,5,4,3,2,0,145,0,6,5,4,3,2,0,144,0,17,2,0,6,5,4,3,2,0,143,0,6,5,4,32,142,141],[12,0,140,147,146,0,6,5,4,3,2,0,145,0,6,5,4,3,2,0,151,0,17,2,0,6,5,4,3,2,0,150,149,148],[12,0,140,147,146,0,6,5,4,3,2,0,155,0,6,5,4,3,2,0,154,0,6,5,15,153,152],[12,0,140,147,146,0,6,5,4,3,2,0,155,0,6,5,4,3,2,0,168,0,6,5,4,3,2,0,167,0,6,5,4,3,2,0,166,0,6,5,4,3,2,0,165,0,6,5,4,3,2,0,164,163,162,161,160,0,159,158,157,156],[12,0,140,147,146,0,6,5,4,3,2,0,155,0,6,5,4,3,2,0,168,0,6,5,4,3,2,0,167,0,6,5,4,3,2,0,166,0,6,5,4,3,2,0,165,0,6,5,4,3,2,0,164,163,162,170,169],[12,0,140,147,146,0,6,5,4,3,2,0,155,0,6,5,4,3,2,0,168,0,6,5,4,3,2,0,167,0,6,5,4,3,2,0,180,0,6,5,4,3,2,0,179,0,17,2,0,6,5,4,3,2,0,178,0,6,5,4,3,2,0,177,0,17,2,0,6,5,4,3,2,0,176,0,6,5,4,3,2,0,175,174,173,172,6,5,4,3,2,0,171,0,6,5,4,32,31,30],[12,0,140,147,146,0,6,5,4,3,2,0,155,0,6,5,4,3,2,0,168,0,6,5,4,3,2,0,167,0,6,5,4,3,2,0,180,0,6,5,4,3,2,0,181],[12,0,140,147,146,0,6,5,4,3,2,0,155,0,6,5,4,3,2,0,168,0,6,5,4,3,2,0,182,0,6,5,4,32,31,30],[12,0,140,147,146,0,6,5,4,3,2,0,155,0,6,5,4,3,2,0,168,0,6,5,4,3,2,0,182,0,6,5,4,3,2,0,183,0,6,5,4,32,31,30],[12,0,140,147,146,0,6,5,4,3,2,0,155,0,6,5,4,3,2,0,190,0,6,5,4,3,2,0,189,0,6,5,4,3,2,0,188,0,6,5,4,3,2,0,187,0,6,5,4,3,2,0,186,0,6,98,185,0,184],[12,0,140,147,146,0,6,5,4,3,2,0,155,0,6,5,4,3,2,0,190,0,6,5,4,3,2,0,189,0,6,5,4,3,2,0,188,0,6,5,4,3,2,0,193,0,192,0,191,169],[12,0,140,147,146,0,6,5,4,3,2,0,196,0,17,2,0,6,5,4,3,2,0,195,0,17,2,0,6,5,4,3,2,0,194,0,6,5,4,32,31,30],[12,0,140,147,146,0,6,5,4,3,2,0,196,0,17,2,0,6,5,4,3,2,0,195,0,17,2,0,6,5,4,3,2,0,194,0,6,5,4,3,2,0,199,0,198,197,169],[12,0,140,147,146,0,6,5,4,3,2,0,196,0,17,2,0,6,5,4,3,2,0,195,0,17,2,0,6,5,4,3,2,0,202,0,6,5,4,3,2,0,201,0,200],[12,0,140,147,146,0,6,5,4,3,2,0,205,0,17,2,0,6,5,4,3,2,0,204,0,6,5,4,32,142,203],[12,0,140,147,146,0,6,5,4,3,2,0,211,0,6,5,4,3,2,0,210,0,6,5,4,3,2,0,209,0,208,57,56,130,129,207,206],[12,0,140,147,213,212],[12,0,140,147,213,214],[12,0,140,147,213,214,0,215],[12,0,140,147,213,218,0,217,0,216],[12,0,140,147,213,219],[12,0,140,147,213,220],[12,0,140,147,213,214],[12,0,140,147,213,220],[12,0,140,147,213,220],[12,0,140,147,213,219],[12,0,140,147,213,220],[12,0,140,147,213,220],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,219],[12,0,140,147,213,221],[12,0,140,147,213,221],[12,0,140,147,213,214],[12,0,140,147,213,220],[12,0,140,147,213,219],[12,0,140,147,213,221],[12,0,140,147,213,214],[12,0,140,147,213,214,0,222],[12,0,140,147,213,220],[12,0,140,147,213,221],[12,0,140,147,213,223],[12,0,140,147,213,214],[12,0,140,147,213,214,0,224],[12,0,140,147,213,214,0,225],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,219],[12,0,140,147,213,219],[12,0,140,147,213,219],[12,0,140,147,213,220],[12,0,140,147,213,214],[12,0,140,147,213,223],[12,0,140,147,213,221],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,220],[12,0,140,147,213,214,0,225],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214],[12,0,140,147,213,227],[12,0,140,147,213,219],[12,0,140,147,213,214],[12,0,140,147,213,214,0,215],[12,0,140,147,213,219],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214],[12,0,140,147,213,220],[12,0,140,147,213,214,0,225],[12,0,140,147,213,214,0,228],[12,0,140,147,213,220],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214,0,225],[12,0,140,147,213,221],[12,0,140,147,213,214,0,224],[12,0,140,147,213,229],[12,0,140,147,213,214],[12,0,140,147,213,220],[12,0,140,147,213,220],[12,0,140,147,213,220],[12,0,140,147,213,220],[12,0,140,147,213,214],[12,0,140,147,213,219],[12,0,140,147,213,219],[12,0,140,147,213,219],[12,0,140,147,213,214],[12,0,140,147,213,223],[12,0,140,147,213,223],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214,0,226],[12,0,140,147,213,220],[12,0,140,147,213,220],[12,0,140,147,213,214,0,224],[12,0,140,147,213,214,0,225],[12,0,140,147,213,220],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214,0,226],[12,0,140,147,213,214],[12,0,140,147,213,220],[12,0,140,147,213,214,0,226],[12,0,140,147,213,223],[12,0,140,147,213,220],[12,0,140,147,213,221],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,220],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,219],[12,0,140,147,213,214],[12,0,140,147,213,219],[12,0,140,147,213,214,0],[12,0,140,147,213,220],[12,0,140,147,213,214,0,230],[12,0,140,147,213,214],[12,0,140,147,213,214],[12,0,140,147,213,214,0,224],[12,0,140,147,213,219],[12,0,140,147,213,229],[12,0,140,147,213,221],[12,0,140,147,213,220],[12,0,140,147,213,220],[12,0,140,147,213,214],[12,0,140,147,213,214,0,215],[12,0,140,147,213,214],[12,0,140,147,213,214],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12],[12]],"weights":[0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01]}],"shared":{"frames":[{"name":"","file":"","line":0,"col":null},{"name":"","file":"/usr/lib/python3.13/typing.py","line":2868,"col":null},{"name":"_call_with_frames_removed","file":"","line":488,"col":null},{"name":"exec_module","file":"","line":1026,"col":null},{"name":"_load_unlocked","file":"","line":935,"col":null},{"name":"_find_and_load_unlocked","file":"","line":1331,"col":null},{"name":"_find_and_load","file":"","line":1360,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/types.py","line":4,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/__init__.py","line":4,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/__init__.py","line":31,"col":null},{"name":"_find_and_load_unlocked","file":"","line":1310,"col":null},{"name":"","file":"/home/jan/projects/masque/perftest.py","line":2,"col":null},{"name":"process 1772769:\"\"","file":"","line":0,"col":null},{"name":"create_module","file":"","line":1321,"col":null},{"name":"module_from_spec","file":"","line":813,"col":null},{"name":"_load_unlocked","file":"","line":921,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/overrides.py","line":7,"col":null},{"name":"_handle_fromlist","file":"","line":1415,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/multiarray.py","line":10,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/__init__.py","line":23,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/__config__.py","line":4,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/__init__.py","line":114,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/vertices.py","line":4,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/__init__.py","line":18,"col":null},{"name":"","file":"/usr/lib/python3.13/pickle.py","line":191,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/_methods.py","line":7,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/fromnumeric.py","line":16,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/shape_base.py","line":11,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/numeric.py","line":25,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/__init__.py","line":74,"col":null},{"name":"_compile_bytecode","file":"","line":784,"col":null},{"name":"get_code","file":"","line":1155,"col":null},{"name":"exec_module","file":"","line":1022,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/_methods.py","line":9,"col":null},{"name":"ismethod","file":"/usr/lib/python3/dist-packages/numpy/_utils/_inspect.py","line":24,"col":null},{"name":"getargspec","file":"/usr/lib/python3/dist-packages/numpy/_utils/_inspect.py","line":106,"col":null},{"name":"verify_matching_signatures","file":"/usr/lib/python3/dist-packages/numpy/_core/overrides.py","line":86,"col":null},{"name":"decorator","file":"/usr/lib/python3/dist-packages/numpy/_core/overrides.py","line":145,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/numeric.py","line":2244,"col":null},{"name":"convert_class","file":"/usr/lib/python3.13/enum.py","line":1912,"col":null},{"name":"","file":"/usr/lib/python3.13/ast.py","line":710,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/_internal.py","line":7,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/__init__.py","line":100,"col":null},{"name":"acquire","file":"","line":317,"col":null},{"name":"__enter__","file":"","line":418,"col":null},{"name":"_find_and_load","file":"","line":1357,"col":null},{"name":"","file":"/usr/lib/python3.13/ctypes/__init__.py","line":8,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/_internal.py","line":17,"col":null},{"name":"exec_module","file":"","line":1328,"col":null},{"name":"","file":"/usr/lib/python3.13/ctypes/__init__.py","line":322,"col":null},{"name":"getwidth","file":"/usr/lib/python3.13/re/_parser.py","line":179,"col":null},{"name":"_compile","file":"/usr/lib/python3.13/re/_compiler.py","line":149,"col":null},{"name":"_compile","file":"/usr/lib/python3.13/re/_compiler.py","line":174,"col":null},{"name":"_compile","file":"/usr/lib/python3.13/re/_compiler.py","line":126,"col":null},{"name":"_code","file":"/usr/lib/python3.13/re/_compiler.py","line":585,"col":null},{"name":"compile","file":"/usr/lib/python3.13/re/_compiler.py","line":752,"col":null},{"name":"_compile","file":"/usr/lib/python3.13/re/__init__.py","line":350,"col":null},{"name":"compile","file":"/usr/lib/python3.13/re/__init__.py","line":289,"col":null},{"name":"TextWrapper","file":"/usr/lib/python3.13/textwrap.py","line":95,"col":null},{"name":"","file":"/usr/lib/python3.13/textwrap.py","line":17,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/_utils_impl.py","line":3,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/format.py","line":170,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/_npyio_impl.py","line":17,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/npyio.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/__init__.py","line":16,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/__init__.py","line":181,"col":null},{"name":"","file":"/usr/lib/python3.13/typing.py","line":1427,"col":null},{"name":"__init__","file":"/usr/lib/python3.13/typing.py","line":1427,"col":null},{"name":"Literal","file":"/usr/lib/python3.13/typing.py","line":844,"col":null},{"name":"inner","file":"/usr/lib/python3.13/typing.py","line":429,"col":null},{"name":"__getitem__","file":"/usr/lib/python3.13/typing.py","line":583,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_typing/_char_codes.py","line":188,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_typing/__init__.py","line":32,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/linalg/_linalg.py","line":41,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/linalg/__init__.py","line":88,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/matrixlib/defmatrix.py","line":12,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/matrixlib/__init__.py","line":4,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/_index_tricks_impl.py","line":12,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/__init__.py","line":23,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/traits/copyable.py","line":2,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/traits/__init__.py","line":30,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/ports.py","line":15,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/comparisons.py","line":4,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/__init__.py","line":31,"col":null},{"name":"","file":"/usr/lib/python3.13/pathlib/_abc.py","line":15,"col":null},{"name":"","file":"/usr/lib/python3.13/pathlib/__init__.py","line":8,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":27,"col":null},{"name":"","file":"/usr/lib/python3.13/unittest/__init__.py","line":57,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/testing/__init__.py","line":8,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":34,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/testing/__init__.py","line":11,"col":null},{"name":"","file":"/usr/lib/python3.13/subprocess.py","line":46,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/testing/_private/extbuild.py","line":9,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/testing/__init__.py","line":13,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/__init__.py","line":65,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":35,"col":null},{"name":"find_spec","file":"/usr/lib/python3/dist-packages/_distutils_hack/__init__.py","line":108,"col":null},{"name":"_find_spec","file":"","line":1262,"col":null},{"name":"_find_and_load_unlocked","file":"","line":1322,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/cffi.py","line":20,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":36,"col":null},{"name":"source_to_code","file":"","line":1090,"col":null},{"name":"get_code","file":"","line":1160,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pycparser/__init__.py","line":15,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":7,"col":null},{"name":"__init__","file":"/usr/lib/python3/dist-packages/cffi/api.py","line":65,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/cffi.py","line":80,"col":null},{"name":"template","file":"/usr/lib/python3/dist-packages/pycparser/plyparser.py","line":94,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pycparser/c_parser.py","line":18,"col":null},{"name":"_compile","file":"/usr/lib/python3.13/re/_compiler.py","line":48,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":33,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":42,"col":null},{"name":"cb","file":"","line":452,"col":null},{"name":"","file":"","line":1,"col":null},{"name":"readtab","file":"/usr/lib/python3/dist-packages/ply/lex.py","line":215,"col":null},{"name":"lex","file":"/usr/lib/python3/dist-packages/ply/lex.py","line":920,"col":null},{"name":"build","file":"/usr/lib/python3/dist-packages/pycparser/c_lexer.py","line":65,"col":null},{"name":"__init__","file":"/usr/lib/python3/dist-packages/pycparser/c_parser.py","line":83,"col":null},{"name":"_get_parser","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":53,"col":null},{"name":"_parse","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":337,"col":null},{"name":"_internal_parse","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":395,"col":null},{"name":"parse","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":390,"col":null},{"name":"_cdef","file":"/usr/lib/python3/dist-packages/cffi/api.py","line":126,"col":null},{"name":"cdef","file":"/usr/lib/python3/dist-packages/cffi/api.py","line":112,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/cffi.py","line":81,"col":null},{"name":"__next","file":"/usr/lib/python3.13/re/_parser.py","line":254,"col":null},{"name":"getuntil","file":"/usr/lib/python3.13/re/_parser.py","line":277,"col":null},{"name":"_parse","file":"/usr/lib/python3.13/re/_parser.py","line":724,"col":null},{"name":"_parse_sub","file":"/usr/lib/python3.13/re/_parser.py","line":460,"col":null},{"name":"parse","file":"/usr/lib/python3.13/re/_parser.py","line":980,"col":null},{"name":"compile","file":"/usr/lib/python3.13/re/_compiler.py","line":748,"col":null},{"name":"readtab","file":"/usr/lib/python3/dist-packages/ply/lex.py","line":240,"col":null},{"name":"__next","file":"/usr/lib/python3.13/re/_parser.py","line":242,"col":null},{"name":"match","file":"/usr/lib/python3.13/re/_parser.py","line":257,"col":null},{"name":"_parse","file":"/usr/lib/python3.13/re/_parser.py","line":715,"col":null},{"name":"read_table","file":"/usr/lib/python3/dist-packages/ply/yacc.py","line":1984,"col":null},{"name":"yacc","file":"/usr/lib/python3/dist-packages/ply/yacc.py","line":3292,"col":null},{"name":"__init__","file":"/usr/lib/python3/dist-packages/pycparser/c_parser.py","line":109,"col":null},{"name":"_read_to_arrow","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":73,"col":null},{"name":"readfile","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":97,"col":null},{"name":"","file":"/home/jan/projects/masque/perftest.py","line":5,"col":null},{"name":"get_data","file":"","line":1218,"col":null},{"name":"get_code","file":"","line":1118,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_config/config.py","line":68,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_config/__init__.py","line":20,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":37,"col":null},{"name":"read_arrow","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":131,"col":null},{"name":"readfile","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":100,"col":null},{"name":"register_option","file":"/usr/lib/python3/dist-packages/pandas/_config/config.py","line":561,"col":null},{"name":"inner","file":"/usr/lib/python3/dist-packages/pandas/_config/config.py","line":813,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_config/dates.py","line":20,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_config/__init__.py","line":21,"col":null},{"name":"_init_module_attrs","file":"","line":798,"col":null},{"name":"module_from_spec","file":"","line":819,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/api.py","line":9,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":49,"col":null},{"name":"deepcopy","file":"/usr/lib/python3.13/copy.py","line":129,"col":null},{"name":"_deepcopy_dict","file":"/usr/lib/python3.13/copy.py","line":222,"col":null},{"name":"deepcopy","file":"/usr/lib/python3.13/copy.py","line":137,"col":null},{"name":"__init__","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/vendored/docscrape.py","line":151,"col":null},{"name":"_scrape_options_class_doc","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":117,"col":null},{"name":"_decorate_compute_function","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":170,"col":null},{"name":"_wrap_function","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":304,"col":null},{"name":"_make_global_functions","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":333,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":336,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/accessors.py","line":23,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/__init__.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/__init__.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/api.py","line":28,"col":null},{"name":"dedent","file":"/usr/lib/python3.13/textwrap.py","line":436,"col":null},{"name":"_decorate_compute_function","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":153,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numexpr/__init__.py","line":31,"col":null},{"name":"_gcd_import","file":"","line":1387,"col":null},{"name":"import_module","file":"/usr/lib/python3.13/importlib/__init__.py","line":88,"col":null},{"name":"import_optional_dependency","file":"/usr/lib/python3/dist-packages/pandas/compat/_optional.py","line":140,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/computation/check.py","line":5,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/computation/expressions.py","line":21,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/ops/array_ops.py","line":56,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/ops/__init__.py","line":8,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/array.py","line":50,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/__init__.py","line":5,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/array.py","line":93,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/__init__.py","line":8,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/categorical.py","line":3,"col":null},{"name":"__exit__","file":"","line":1226,"col":null},{"name":"_find_spec","file":"","line":1256,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/reshape/melt.py","line":17,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/frame.py","line":187,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/groupby/generic.py","line":68,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/groupby/__init__.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/api.py","line":47,"col":null},{"name":"__call__","file":"/usr/lib/python3/dist-packages/pandas/util/_decorators.py","line":488,"col":null},{"name":"DataFrame","file":"/usr/lib/python3/dist-packages/pandas/core/frame.py","line":8443,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/frame.py","line":509,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/api/typing/__init__.py","line":12,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/api/__init__.py","line":2,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":138,"col":null},{"name":"decorator","file":"/usr/lib/python3/dist-packages/pandas/util/_decorators.py","line":390,"col":null},{"name":"Resampler","file":"/usr/lib/python3/dist-packages/pandas/core/resample.py","line":1503,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/resample.py","line":121,"col":null},{"name":"StataMissingValue","file":"/usr/lib/python3/dist-packages/pandas/io/stata.py","line":869,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/io/stata.py","line":825,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/api/typing/__init__.py","line":32,"col":null},{"name":"get_data","file":"","line":1217,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/testing.py","line":6,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":139,"col":null},{"name":"tell","file":"/usr/lib/python3.13/re/_parser.py","line":292,"col":null},{"name":"_parse_sub","file":"/usr/lib/python3.13/re/_parser.py","line":457,"col":null},{"name":"AppendableMultiFrameTable","file":"/usr/lib/python3/dist-packages/pandas/io/pytables.py","line":4851,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/io/pytables.py","line":4845,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/io/api.py","line":26,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":142,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":237,"col":null},{"name":"read_arrow","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":149,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":234,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":101,"col":null},{"name":"annotations","file":"/home/jan/projects/masque/masque/traits/annotatable.py","line":46,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/label.py","line":54,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":278,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":227,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":225,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":224,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":99,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":235,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":97,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":102,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":86,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":228,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":96,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":223,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":109,"col":null}]},"activeProfileIndex":null,"exporter":"py-spy@0.4.0","name":"py-spy profile"} diff --git a/test_slow.ssc b/test_slow.ssc new file mode 100644 index 0000000..787f3e3 --- /dev/null +++ b/test_slow.ssc @@ -0,0 +1 @@ +{"$schema":"https://www.speedscope.app/file-format-schema.json","profiles":[{"type":"sampled","name":"Process 1400015 Thread 1400015 \"\"","unit":"seconds","startValue":0.0,"endValue":7.33,"samples":[[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,12,1,7,6,5,4,3,1,11,1,7,10,3,1,7,6,5,4,3,1,9,1,8,3,1,7,6,5,4,3,1,2,1,0],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,12,1,7,6,5,4,3,1,11,1,7,10,3,1,7,6,5,4,3,1,9,1,8,3,1,7,6,5,4,3,1,2,1,8,3,1,7,6,5,4,3,1,21,1,7,6,20,19,18,3],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,12,1,7,6,5,4,3,1,11,1,7,10,3,1,7,6,5,4,3,1,30,1,8,3,1,7,6,5,4,3,1,29,1,8,3,1,7,6,5,4,3,1,28,1,8,3,1,7,6,5,4,3,1,27,1,8,3,1,7,6,5,4,3,1,26,1,7,6,5,25,24,23,22],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,12,1,7,6,5,4,3,1,11,1,7,10,3,1,7,6,5,4,3,1,34,1,8,3,1,7,6,5,4,3,1,33,1,7,6,5,25,32,31],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,40,1,8,3,1,7,6,5,4,3,1,39,1,8,3,1,7,6,5,4,3,1,38,1,7,6,5,4,3,1,37,1,8,3,1,7,36,35],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,40,1,8,3,1,7,6,5,4,3,1,39,1,8,3,1,7,6,5,4,3,1,38,1,7,6,5,4,3,1,37,1,8,3,1,7,6,5,25,32,31],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,40,1,8,3,1,7,6,5,4,3,1,50,1,8,3,1,7,6,5,4,3,1,49,1,7,6,5,4,3,1,48,1,8,3,1,7,6,5,4,3,1,47,1,7,36,46,45,44,43,42,41,22],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,40,1,8,3,1,7,6,5,4,3,1,50,1,8,3,1,7,6,5,4,3,1,49,1,7,6,5,4,3,1,48,1,8,3,1,7,6,5,4,3,1,47,1,7,6,5,4,3,1,58,1,8,3,1,7,6,5,4,3,1,57,1,7,6,5,4,3,1,56,1,7,6,5,4,3,1,55,1,54,53,1,52,51],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,40,1,8,3,1,7,6,5,4,3,1,50,1,8,3,1,7,6,5,4,3,1,49,1,7,6,5,4,3,1,48,1,8,3,1,7,6,5,4,3,1,47,1,7,6,5,4,3,1,58,1,8,3,1,7,6,5,4,3,1,57,1,7,6,5,4,3,1,56,1,7,6,5,4,3,1,61,1,54,53,1,60,1,59],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,40,1,8,3,1,7,6,5,4,3,1,50,1,8,3,1,7,6,5,4,3,1,49,1,7,6,5,4,3,1,48,1,8,3,1,7,6,5,4,3,1,47,1,7,6,5,4,3,1,58,1,8,3,1,7,6,5,4,3,1,57,1,7,6,5,4,3,1,69,1,7,6,5,4,3,1,68,1,67,1,53,1,66,65,64,51,1,63,62],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,40,1,8,3,1,7,6,5,4,3,1,74,1,73,72,1,71,70],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,40,1,8,3,1,7,6,5,4,3,1,74,1,8,3,1,7,6,5,4,3,1,80,79,78,77,76,75],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,40,1,8,3,1,7,6,5,4,3,1,84,1,8,3,1,7,36,46,45,44,83,82,81],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,14,1,7,6,5,4,3,1,13,1,7,6,5,4,3,1,85],[17,1,16,1,7,10,3,1,7,10,3,1,7,6,5,4,3,1,15,1,7,6,5,4,3,1,90,1,8,3,1,7,6,5,4,3,1,89,1,7,6,5,4,3,1,88,1,7,6,5,4,3,1,87,1,7,36,46,45,44,86,22],[17,1,16,1,7,6,5,4,3,1,92,1,7,6,5,4,3,1,91,1,7,6,20,19,18,3],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,97,1,96,1,8,3,1,7,6,5,4,3,1,95,1,7,6,5,4,3,1,94,1,7,6,5,4,3,1,93],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,97,1,96,1,8,3,1,7,6,5,4,3,1,95,1,7,6,5,4,3,1,101,1,7,6,5,25,100,99,3],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,97,1,96,1,8,3,1,7,6,5,4,3,1,95,1,7,6,5,4,3,1,101,1,7,6,5,25,100,99,3],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,97,1,96,1,8,3,1,7,6,5,4,3,1,95,1,7,6,5,4,3,1,101,1,7,6,5,25,100,99,3],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,97,1,96,1,8,3,1,7,6,5,4,3,1,95,1,7,6,5,4,3,1,101,1,7,6,5,25,100,99,3],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,97,1,96,1,8,3,1,7,6,5,4,3,1,95,1,7,6,5,4,3,1,101,1,7,6,5,25,103,102],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,117,116,115,1,114,113,112,111,1,110,109,108,107,79,78,77,76,105,106,105,106,105,106,105,104],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,117,116,115,1,114,113,112,111,1,121,120,119,1,118,1,7,6,5,25,100,99,3],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,117,116,115,1,114,113,112,111,1,121,120,119,1,118,1,7,6,5,25,100,99,3],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,117,116,115,1,114,113,112,111,1,121,120,119,1,118,1,7,6,5,25,100,99,3],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,117,116,115,1,114,113,112,111,1,121,120,119,1,118,1,7,6,5,25,100,99,3],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,117,116,115,1,114,113,112,111,1,121,120,119,1,118,1,7,6,5,25,100,99,3],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,117,116,115,1,114,113,112,111,1,121,120,119,1,118,1,7,6,5,25,100,99,3],[17,1,16,1,7,6,5,4,3,1,98,1,7,6,5,4,3,1,117,116,115,1,114,113,112,111,1,121,120,119,1,118,1,7,6,5,4,3,1,122],[17,1,124,123],[17,1,124,123],[17,1,124,123],[17,1,124,123],[17,1,124,123],[17,1,124,123],[17,1,124,123],[17,1,124,123],[17,1,124,123],[17,1,124,123],[17,1,124,123],[17,1,124,123],[17,1,124,123],[17,1,124,131,130,129,1,7,6,5,4,3,1,128,1,7,6,5,4,3,1,127,126,125],[17,1,124,131,130,129,1,7,6,5,4,3,1,141,1,7,6,5,4,3,1,140,1,8,3,1,7,6,5,4,3,1,139,1,7,6,5,4,3,1,138,1,137,1,7,6,5,4,3,1,136,1,8,3,1,7,6,5,4,3,1,135,1,7,6,5,134,3,1,7,6,5,4,3,1,133,1,7,6,5,4,3,1,132,1,7,6,20,19,18,3],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,25,32,31],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,145,1,7,6,5,4,3,1,144,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,134,3,1,7,10,3,1,7,6,5,4,3,1,143,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,20,19,18,3],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,145,1,7,6,5,4,3,1,144,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,134,3,1,7,10,3,1,7,6,5,4,3,1,143,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,25,32,31],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,145,1,7,6,5,4,3,1,144,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,134,3,1,7,10,3,1,7,6,5,4,3,1,143,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,4,3,1,147,1,7,6,5,4,3,1,146],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,145,1,7,6,5,4,3,1,144,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,134,3,1,7,10,3,1,7,6,5,4,3,1,143,1,7,6,5,134,3,1,7,6,5,134,3,1,7,6,5,4,3,1,149,1,7,6,5,4,3,1,148],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,162,1,7,6,5,4,3,1,161,1,7,6,5,4,3,1,160,1,7,6,5,4,3,1,159,158,157,156,155,154,153,1,152,1,151,150],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,162,1,7,6,5,4,3,1,161,1,7,6,5,4,3,1,160,1,7,6,5,4,3,1,159,158,157,156,155,154,153,1,152,1,151,165,1,164],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,162,1,7,6,5,4,3,1,161,1,7,6,5,4,3,1,160,1,7,6,5,4,3,1,159,158,171,170,169,1,168,167,166],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,162,1,7,6,5,4,3,1,161,1,7,6,5,4,3,1,160,1,7,6,5,4,3,1,159,158,171,174,173,172],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,162,1,7,6,5,4,3,1,161,1,7,6,5,4,3,1,160,1,7,6,5,4,3,1,159,158,171,175,173,172],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,162,1,7,6,5,4,3,1,161,1,7,6,5,4,3,1,160,1,7,6,5,4,3,1,159,158,171,170,169,1,178,177,176],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,162,1,7,6,5,4,3,1,161,1,7,6,5,4,3,1,160,1,7,6,5,4,3,1,159,158,171,170,169,1,168,181,180,179,173,172],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,162,1,7,6,5,4,3,1,192,1,7,6,5,4,3,1,191,1,8,3,1,7,6,5,4,3,1,190,1,7,6,5,4,3,1,189,1,8,3,1,7,6,5,4,3,1,188,1,7,6,5,4,3,1,187,186,185,184,7,6,5,4,3,1,183,1,7,6,5,4,3,1,182],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,162,1,7,6,5,4,3,1,192,1,7,6,5,4,3,1,195,1,7,6,5,4,3,1,194,1,7,6,5,4,3,1,193,1,7,6,5,25,32,31],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,162,1,7,6,5,4,3,1,192,1,7,6,5,4,3,1,195,1,7,6,5,4,3,1,197,1,7,6,5,4,3,1,196,1,7,6,5,25,32,31],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,162,1,7,6,5,4,3,1,192,1,7,6,5,4,3,1,201,1,200,199,198],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,202,1,7,6,5,25,32,31],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,163,1,7,6,5,4,3,1,202,1,7,6,5,4,3,1,203],[17,1,124,131,130,129,1,7,6,5,4,3,1,142,1,7,6,5,4,3,1,209,1,7,6,5,4,3,1,208,1,7,6,5,4,3,1,207,1,7,6,5,4,3,1,206,1,7,6,5,4,3,1,205,1,73,72,1,204],[17,1,124,131,130,129,1,7,6,5,4,3,1,214,1,8,3,1,7,6,5,4,3,1,213,1,8,3,1,7,6,5,4,3,1,212,1,7,6,5,4,3,1,211,1,210],[17,1,124,131,130,129,1,7,6,5,4,3,1,214,1,8,3,1,7,6,5,4,3,1,213,1,8,3,1,7,6,5,4,3,1,217,1,7,10,3,1,7,6,5,25,216,215],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,220],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,222],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,225,1,224,1,223],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,218],[17,1,124,131,130,218],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,222],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,227,1,228],[17,1,124,131,130,227,1,226],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,227,1,228],[17,1,124,131,130,227],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,227],[17,1,124,131,130,220],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,227,1,228],[17,1,124,131,130,220],[17,1,124,131,130,220],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,218],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,227],[17,1,124,131,130,220],[17,1,124,131,130,222,221],[17,1,124,131,130,218],[17,1,124,131,130,222],[17,1,124,131,130,222,221],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,229],[17,1,124,131,130,218],[17,1,124,131,130,229],[17,1,124,131,130,230],[17,1,124,131,130,222,221],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,230],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,227],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,231],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,230],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,219],[17,1,124,131,130,227],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,222,221],[17,1,124,131,130,231],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,222,221],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,220],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,227],[17,1,124,131,130,219],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,222,221],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,230],[17,1,124,131,130,227],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,227],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,129],[17,1,124,131,130,230],[17,1,124,131,130,222],[17,1,124,131,130,220],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,227,1,232],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,227],[17,1,124,131,130,227],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,220],[17,1,124,131,130,230],[17,1,124,131,130,227,1,226],[17,1,124,131,130,220],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,231],[17,1,124,131,130,231],[17,1,124,131,130,220],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,227,1,234,233],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,227,1,234,235],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,220],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,230],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,220],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,227],[17,1,124,131,130,220],[17,1,124,131,130,231],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,227],[17,1,124,131,130,219],[17,1,124,131,130,227,1,236],[17,1,124,131,130,129],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,218],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,227,1,228],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,227],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,222,221],[17,1,124,131,130,231],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,218],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,227],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,227,1,226],[17,1,124,131,130,218],[17,1,124,131,130,222,221],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,220],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,222,221],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,227,1,228],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,218],[17,1,124,131,130,227],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,222,221],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,227],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,222,221],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,237],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,222,221],[17,1,124,131,130,227],[17,1,124,131,130,229],[17,1,124,131,130,227,1,226],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,238],[17,1,124,131,130,218],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,227,1,234,233],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,227],[17,1,124,131,130,218],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,222],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,227],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,227,1,226],[17,1,124,131,130,222,221],[17,1,124,131,130,218],[17,1,124,131,130,129],[17,1,124,131,130,229],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,218],[17,1,124,131,130,222,221],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,219],[17,1,124,131,130,220],[17,1,124,131,130,220],[17,1,124,131,130,220],[17,1,124,131,130,219],[17,1,124,131,130,218],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,220],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,239],[17,1,124,131,130,129],[17,1,124,131,130,129],[17,1,124,131,130,219],[17,1,124,131,130,219],[17,1,124,131,130,129],[17,1,124,131,130,231],[17,1,124,131,130,218],[17,1,124,131,130,218],[17,1,124,131,130,219],[17,1,124,131,130,220],[17,1,124,131,130,231],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17,1,124,131,130,227,1,226],[17,1,124,131,130,129],[17,1,124,131,130,222,221],[17,1,124,131,130,129],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17],[17]],"weights":[0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01]}],"shared":{"frames":[{"name":"parent","file":"","line":649,"col":null},{"name":"","file":"","line":0,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/multiarray.py","line":10,"col":null},{"name":"_call_with_frames_removed","file":"","line":488,"col":null},{"name":"exec_module","file":"","line":1026,"col":null},{"name":"_load_unlocked","file":"","line":935,"col":null},{"name":"_find_and_load_unlocked","file":"","line":1331,"col":null},{"name":"_find_and_load","file":"","line":1360,"col":null},{"name":"_handle_fromlist","file":"","line":1415,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/__init__.py","line":23,"col":null},{"name":"_find_and_load_unlocked","file":"","line":1310,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/__config__.py","line":4,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/__init__.py","line":114,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/vertices.py","line":4,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/__init__.py","line":18,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/__init__.py","line":31,"col":null},{"name":"","file":"/home/jan/projects/masque/perftest.py","line":2,"col":null},{"name":"process 1400015:\"\"","file":"","line":0,"col":null},{"name":"create_module","file":"","line":1321,"col":null},{"name":"module_from_spec","file":"","line":813,"col":null},{"name":"_load_unlocked","file":"","line":921,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/overrides.py","line":7,"col":null},{"name":"_path_stat","file":"","line":152,"col":null},{"name":"path_stats","file":"","line":1235,"col":null},{"name":"get_code","file":"","line":1112,"col":null},{"name":"exec_module","file":"","line":1022,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/_methods.py","line":9,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/fromnumeric.py","line":16,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/shape_base.py","line":11,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/numeric.py","line":25,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/__init__.py","line":74,"col":null},{"name":"_compile_bytecode","file":"","line":784,"col":null},{"name":"get_code","file":"","line":1155,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/_internal.py","line":7,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_core/__init__.py","line":100,"col":null},{"name":"_find_spec","file":"","line":1256,"col":null},{"name":"_find_and_load_unlocked","file":"","line":1322,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/_npyio_impl.py","line":17,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/npyio.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/__init__.py","line":16,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/__init__.py","line":181,"col":null},{"name":"_path_is_mode_type","file":"","line":158,"col":null},{"name":"_path_isfile","file":"","line":166,"col":null},{"name":"find_spec","file":"","line":1651,"col":null},{"name":"_get_spec","file":"","line":1533,"col":null},{"name":"find_spec","file":"","line":1559,"col":null},{"name":"_find_spec","file":"","line":1262,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/matrixlib/defmatrix.py","line":12,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/matrixlib/__init__.py","line":4,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/_index_tricks_impl.py","line":12,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/__init__.py","line":23,"col":null},{"name":"_deduplicate","file":"/usr/lib/python3.13/typing.py","line":354,"col":null},{"name":"Literal","file":"/usr/lib/python3.13/typing.py","line":840,"col":null},{"name":"inner","file":"/usr/lib/python3.13/typing.py","line":429,"col":null},{"name":"__getitem__","file":"/usr/lib/python3.13/typing.py","line":583,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_typing/_char_codes.py","line":196,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_typing/__init__.py","line":32,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/linalg/_linalg.py","line":41,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/linalg/__init__.py","line":88,"col":null},{"name":"__init__","file":"/usr/lib/python3.13/typing.py","line":1427,"col":null},{"name":"Literal","file":"/usr/lib/python3.13/typing.py","line":844,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_typing/_char_codes.py","line":202,"col":null},{"name":"_value_and_type_iter","file":"/usr/lib/python3.13/typing.py","line":1803,"col":null},{"name":"__hash__","file":"/usr/lib/python3.13/typing.py","line":1814,"col":null},{"name":"_remove_dups_flatten","file":"/usr/lib/python3.13/typing.py","line":392,"col":null},{"name":"Union","file":"/usr/lib/python3.13/typing.py","line":790,"col":null},{"name":"__getitem__","file":"/usr/lib/python3.13/typing.py","line":576,"col":null},{"name":"__or__","file":"/usr/lib/python3.13/typing.py","line":1447,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_typing/_dtype_like.py","line":248,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/_typing/__init__.py","line":102,"col":null},{"name":"setdefault","file":"","line":126,"col":null},{"name":"__enter__","file":"","line":170,"col":null},{"name":"acquire","file":"","line":311,"col":null},{"name":"_lock_unlock_module","file":"","line":471,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/__init__.py","line":33,"col":null},{"name":"_parse_sub","file":"/usr/lib/python3.13/re/_parser.py","line":456,"col":null},{"name":"parse","file":"/usr/lib/python3.13/re/_parser.py","line":980,"col":null},{"name":"compile","file":"/usr/lib/python3.13/re/_compiler.py","line":748,"col":null},{"name":"_compile","file":"/usr/lib/python3.13/re/__init__.py","line":350,"col":null},{"name":"compile","file":"/usr/lib/python3.13/re/__init__.py","line":289,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/_polynomial_impl.py","line":1052,"col":null},{"name":"spec_from_file_location","file":"","line":869,"col":null},{"name":"_get_spec","file":"","line":1621,"col":null},{"name":"find_spec","file":"","line":1667,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/lib/__init__.py","line":36,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/__init__.py","line":182,"col":null},{"name":"find_spec","file":"","line":1632,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/shapes/__init__.py","line":14,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/pattern.py","line":20,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/ports2data.py","line":15,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/utils/__init__.py","line":41,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/__init__.py","line":65,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":34,"col":null},{"name":"","file":"/usr/lib/python3.13/subprocess.py","line":106,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pycparser/__init__.py","line":14,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":7,"col":null},{"name":"__init__","file":"/usr/lib/python3/dist-packages/cffi/api.py","line":65,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/cffi.py","line":80,"col":null},{"name":"","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":35,"col":null},{"name":"source_to_code","file":"","line":1090,"col":null},{"name":"get_code","file":"","line":1160,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pycparser/__init__.py","line":15,"col":null},{"name":"_code_to_timestamp_pyc","file":"","line":801,"col":null},{"name":"get_code","file":"","line":1171,"col":null},{"name":"_parse","file":"/usr/lib/python3.13/re/_parser.py","line":513,"col":null},{"name":"_parse_sub","file":"/usr/lib/python3.13/re/_parser.py","line":460,"col":null},{"name":"_parse","file":"/usr/lib/python3.13/re/_parser.py","line":863,"col":null},{"name":"readtab","file":"/usr/lib/python3/dist-packages/ply/lex.py","line":240,"col":null},{"name":"lex","file":"/usr/lib/python3/dist-packages/ply/lex.py","line":920,"col":null},{"name":"build","file":"/usr/lib/python3/dist-packages/pycparser/c_lexer.py","line":65,"col":null},{"name":"__init__","file":"/usr/lib/python3/dist-packages/pycparser/c_parser.py","line":83,"col":null},{"name":"_get_parser","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":53,"col":null},{"name":"_parse","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":337,"col":null},{"name":"_internal_parse","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":395,"col":null},{"name":"parse","file":"/usr/lib/python3/dist-packages/cffi/cparser.py","line":390,"col":null},{"name":"_cdef","file":"/usr/lib/python3/dist-packages/cffi/api.py","line":126,"col":null},{"name":"cdef","file":"/usr/lib/python3/dist-packages/cffi/api.py","line":112,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/cffi.py","line":81,"col":null},{"name":"","file":"","line":1,"col":null},{"name":"read_table","file":"/usr/lib/python3/dist-packages/ply/yacc.py","line":1984,"col":null},{"name":"yacc","file":"/usr/lib/python3/dist-packages/ply/yacc.py","line":3292,"col":null},{"name":"__init__","file":"/usr/lib/python3/dist-packages/pycparser/c_parser.py","line":109,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pycparser/yacctab.py","line":15,"col":null},{"name":"readfile","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":82,"col":null},{"name":"","file":"/home/jan/projects/masque/perftest.py","line":5,"col":null},{"name":"valid_key","file":"/usr/lib/python3.13/zoneinfo/_tzpath.py","line":137,"col":null},{"name":"available_timezones","file":"/usr/lib/python3.13/zoneinfo/_tzpath.py","line":165,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pytz/__init__.py","line":658,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":14,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":186,"col":null},{"name":"read_arrow","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":123,"col":null},{"name":"readfile","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":89,"col":null},{"name":"","file":"/usr/lib/python3.13/hmac.py","line":8,"col":null},{"name":"","file":"/usr/lib/python3.13/secrets.py","line":17,"col":null},{"name":"exec_module","file":"","line":1328,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/random/_pickle.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numpy/random/__init__.py","line":180,"col":null},{"name":"__getattr__","file":"/usr/lib/python3/dist-packages/numpy/__init__.py","line":340,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_typing.py","line":198,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_config/config.py","line":68,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_config/__init__.py","line":20,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":37,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":49,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_libs/tslibs/__init__.py","line":40,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/_libs/__init__.py","line":18,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/api.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3.13/calendar.py","line":39,"col":null},{"name":"","file":"/usr/lib/python3.13/_strptime.py","line":16,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/dateutil/parser/_parser.py","line":1605,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/dateutil/parser/__init__.py","line":2,"col":null},{"name":"_signature_from_function","file":"/usr/lib/python3.13/inspect.py","line":2421,"col":null},{"name":"_signature_from_callable","file":"/usr/lib/python3.13/inspect.py","line":2579,"col":null},{"name":"_signature_from_callable","file":"/usr/lib/python3.13/inspect.py","line":2505,"col":null},{"name":"_signature_from_callable","file":"/usr/lib/python3.13/inspect.py","line":2610,"col":null},{"name":"from_callable","file":"/usr/lib/python3.13/inspect.py","line":3072,"col":null},{"name":"signature","file":"/usr/lib/python3.13/inspect.py","line":3349,"col":null},{"name":"_make_signature","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":276,"col":null},{"name":"_wrap_function","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":303,"col":null},{"name":"_make_global_functions","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":333,"col":null},{"name":"","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":336,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/accessors.py","line":23,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/__init__.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/__init__.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/api.py","line":28,"col":null},{"name":"__init__","file":"/usr/lib/python3.13/inspect.py","line":2728,"col":null},{"name":"_signature_from_function","file":"/usr/lib/python3.13/inspect.py","line":2420,"col":null},{"name":"_parse_summary","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/vendored/docscrape.py","line":372,"col":null},{"name":"_parse","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/vendored/docscrape.py","line":386,"col":null},{"name":"__init__","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/vendored/docscrape.py","line":154,"col":null},{"name":"_scrape_options_class_doc","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":117,"col":null},{"name":"_decorate_compute_function","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":170,"col":null},{"name":"_wrap_function","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":304,"col":null},{"name":"sub","file":"/usr/lib/python3.13/re/__init__.py","line":208,"col":null},{"name":"dedent","file":"/usr/lib/python3.13/textwrap.py","line":466,"col":null},{"name":"_decorate_compute_function","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":191,"col":null},{"name":"_decorate_compute_function","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/compute.py","line":153,"col":null},{"name":"_deepcopy_dict","file":"/usr/lib/python3.13/copy.py","line":222,"col":null},{"name":"deepcopy","file":"/usr/lib/python3.13/copy.py","line":137,"col":null},{"name":"__init__","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/vendored/docscrape.py","line":151,"col":null},{"name":"dedent_lines","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/vendored/docscrape.py","line":560,"col":null},{"name":"_parse_param_list","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/vendored/docscrape.py","line":244,"col":null},{"name":"_parse","file":"/home/jan/.local/lib/python3.13/site-packages/pyarrow/vendored/docscrape.py","line":411,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numexpr/expressions.py","line":462,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/numexpr/__init__.py","line":31,"col":null},{"name":"_gcd_import","file":"","line":1387,"col":null},{"name":"import_module","file":"/usr/lib/python3.13/importlib/__init__.py","line":88,"col":null},{"name":"import_optional_dependency","file":"/usr/lib/python3/dist-packages/pandas/compat/_optional.py","line":140,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/computation/check.py","line":5,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/computation/expressions.py","line":21,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/ops/array_ops.py","line":56,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/ops/__init__.py","line":8,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/array.py","line":50,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/__init__.py","line":5,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/floating.py","line":10,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/string_.py","line":40,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/array.py","line":65,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/numpy_.py","line":27,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/string_.py","line":48,"col":null},{"name":"dedent","file":"/usr/lib/python3.13/textwrap.py","line":436,"col":null},{"name":"decorator","file":"/usr/lib/python3/dist-packages/pandas/util/_decorators.py","line":390,"col":null},{"name":"ArrowExtensionArray","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/array.py","line":1063,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/arrow/array.py","line":241,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/__init__.py","line":8,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/arrays/categorical.py","line":17,"col":null},{"name":"remove","file":"","line":91,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/series.py","line":163,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/frame.py","line":188,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/groupby/generic.py","line":68,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/groupby/__init__.py","line":1,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/api.py","line":47,"col":null},{"name":"__new__","file":"","line":107,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/core/interchange/dataframe_protocol.py","line":121,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/api/interchange/__init__.py","line":5,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/api/__init__.py","line":2,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/__init__.py","line":138,"col":null},{"name":"get_data","file":"","line":1217,"col":null},{"name":"get_code","file":"","line":1118,"col":null},{"name":"","file":"/usr/lib/python3/dist-packages/pandas/api/typing/__init__.py","line":31,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":183,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":184,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":191,"col":null},{"name":"_properties_to_annotations","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":245,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":192,"col":null},{"name":"offset","file":"/home/jan/projects/masque/masque/traits/positionable.py","line":88,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/label.py","line":52,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":238,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":86,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":194,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":97,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":195,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":185,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":188,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":98,"col":null},{"name":"rotate","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":367,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":108,"col":null},{"name":"rotate","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":366,"col":null},{"name":"__init__","file":"/home/jan/projects/masque/masque/shapes/polygon.py","line":102,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":235,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":229,"col":null},{"name":"read_cell","file":"/home/jan/projects/masque/masque/file/gdsii_arrow.py","line":187,"col":null}]},"activeProfileIndex":null,"exporter":"py-spy@0.4.0","name":"py-spy profile"}