From aae453f2be31b7a8e16dd4dacaa9a81c47356e55 Mon Sep 17 00:00:00 2001 From: Jonathan Stark Date: Mon, 15 Jan 2024 22:24:02 -0800 Subject: [PATCH] Updated to use the latest shapely and python3 --- gds_helpers.py | 6 +++--- geometry_helpers.py | 10 +++++----- hole.py | 10 +++++----- mypmos-x.png | Bin 35641 -> 30595 bytes planarprocess.py | 10 ++++++---- test.py | 4 ++-- test_nwell.py | 2 +- 7 files changed, 22 insertions(+), 20 deletions(-) diff --git a/gds_helpers.py b/gds_helpers.py index 14c7f35..44fc4cd 100644 --- a/gds_helpers.py +++ b/gds_helpers.py @@ -15,15 +15,15 @@ def gds_cross_section(gds_file, cut_segment, layer_map=None): layer_map: optional filename for GDS map file. If present, the returned dictionary's keys will be layer names instead of numbers.''' cut_segment = geometry.LineString(cut_segment) - cell = gdsCAD.core.GdsImport(gds_file).values()[0] + cell = list(gdsCAD.core.GdsImport(gds_file).values())[0] layers = {layer: polygons_to_cross_section(polygons, cut_segment) - for layer, polygons in cell_to_MultiPolygon(cell).items()} + for layer, polygons in list(cell_to_MultiPolygon(cell).items())} if layer_map is None: self.layers = layers else: layer_map = load_gds_map(layer_map) layers = {layer_map[layer]: geometry - for layer, geometry in layers.items()} + for layer, geometry in list(layers.items())} return layers def load_gds_map(filename): diff --git a/geometry_helpers.py b/geometry_helpers.py index a650deb..b05bbe5 100644 --- a/geometry_helpers.py +++ b/geometry_helpers.py @@ -28,10 +28,10 @@ def plot_geometry(geometry, axes=None, **kwargs): if axes is None: axes = pyplot.gca() polygons = ensure_multipolygon(geometry) - for polygon in polygons: + for polygon in polygons.geoms: xy = numpy.column_stack( polygon.exterior.xy) axes.add_patch(matplotlib.patches.Polygon(xy, **kwargs)) - axes.update_datalim(zip(polygon.bounds[::2], polygon.bounds[1::2])) + axes.update_datalim(list(zip(polygon.bounds[::2], polygon.bounds[1::2]))) # Only first polygon needs a legend entry kwargs.pop('label', None) axes.autoscale() @@ -49,7 +49,7 @@ def plot_geometryref(geometryref, axes=None, **kwargs): def multilinestring_to_segments(multilinestring): return [[point[0] for point in segment.coords] - for segment in ensure_multilinestring(multilinestring)] + for segment in ensure_multilinestring(multilinestring).geoms] class GeometryReference(object): '''Pointer to shapely geometry''' @@ -71,8 +71,8 @@ def polygons_to_cross_section(polygons, cut_segment): cut_segment.intersection(side)) if intersection > cuts[0] and intersection < cuts[-1] \ and intersection not in cuts: - index = (ii for ii, element in enumerate(cuts) - if element > intersection).next() + index = next((ii for ii, element in enumerate(cuts) + if element > intersection)) cuts.insert(index, intersection) present = [False] * (len(cuts) - 1) for polygon in polygons: diff --git a/hole.py b/hole.py index 4800ab4..08bfd2a 100644 --- a/hole.py +++ b/hole.py @@ -6,8 +6,8 @@ original_coords = [ (0,0), (3,0), (3, 1.5-gap), (2,1.5-gap), (2,1), (1,1), (1,2), (2.2,2), (2.2,1.5+gap), (2.8,1.5+gap), (2.8,3), (0,3)] -original_segments = map(shapely.geometry.LineString, zip(original_coords[:-1], - original_coords[1:])) +original_segments = list(map(shapely.geometry.LineString, list(zip(original_coords[:-1], + original_coords[1:])))) # Split segments at every intersection all_coords = [] for ii, segmentA in enumerate(original_segments): @@ -20,7 +20,7 @@ segmentA = shapely.geometry.LineString([coordB, segmentA.coords[1]]) all_coords.append(segmentA.coords[1]) -print all_coords +print(all_coords) # Separate interior from exterior processed = [] @@ -41,11 +41,11 @@ ii += 1 processed.append(current) -print processed +print(processed) #plot_geometryref(GeometryReference(holey)) from itertools import cycle colors = cycle('rgbcmyk') for p in processed: - plt.plot(*zip(*p), linestyle='solid', marker='x', color=next(colors)) + plt.plot(*list(zip(*p)), linestyle='solid', marker='x', color=next(colors)) #plt.plot(*zip(*exterior), linestyle='solid', marker='o', color='b') plt.show() diff --git a/mypmos-x.png b/mypmos-x.png index 319111c3ab30349005fbf43cc8e59bb149bfbcc6..439accc230f3e338f0430a3ec63282f6f607b360 100644 GIT binary patch literal 30595 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�HLVQunxVsItAaz&zpdr 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 diff --git a/planarprocess.py b/planarprocess.py index e2d66d9..02ede42 100644 --- a/planarprocess.py +++ b/planarprocess.py @@ -48,8 +48,8 @@ def grow(self, height, mask, base=None, consuming=None, outdiffusion=0., ret = GeometryReference(top.geometry.union(bottom.geometry)) self.solids.append(ret) return ret - base_union = shapely.ops.cascaded_union([b.geometry for b in base]) - consuming_union = shapely.ops.cascaded_union( + base_union = shapely.ops.unary_union([b.geometry for b in base]) + consuming_union = shapely.ops.unary_union( [c.geometry for c in consuming]) whole_interface = base_union.intersection(consuming_union) buried = numpy.sign(height) != numpy.sign(y_offset) @@ -62,6 +62,8 @@ def grow(self, height, mask, base=None, consuming=None, outdiffusion=0., self.air.geometry.bounds[3]))) if isinstance(interface, shapely.geometry.Point): continue + if isinstance(interface, shapely.geometry.MultiLineString): + interface = interface.geoms; for linestring in interface: if not isinstance(linestring, shapely.geometry.LineString): # Don't want Points and other strange bits of the @@ -96,7 +98,7 @@ def grow(self, height, mask, base=None, consuming=None, outdiffusion=0., 0, 2 * numpy.pi, outdiffusion_vertices))) # Only consume from specified geometry - ret = shapely.ops.cascaded_union(polygons).intersection( + ret = shapely.ops.unary_union(polygons).intersection( consuming_union) for c in consuming: c.geometry = c.geometry.difference(ret) @@ -141,7 +143,7 @@ def implant(self, depth, mask, target=None, source=None, buried=0., def planarize(self): '''Etch down to the lowest point of the wafer surface''' - base_union = shapely.ops.cascaded_union([s.geometry + base_union = shapely.ops.unary_union([s.geometry for s in self.solids]) whole_interface = base_union.intersection(self.air.geometry) min_y = whole_interface.bounds[1] diff --git a/test.py b/test.py index c12f606..3f8883f 100644 --- a/test.py +++ b/test.py @@ -55,10 +55,10 @@ # Presentation custom_style = {s: {} for s in wafer.solids} -for solid, color in { +for solid, color in list({ fox: '.4', gox: 'r', poly: 'g', mld: 'k', ild1: '.3', contact: '.5', via1: '.5', - metal1: '.7', metal2: '.8'}.items(): + metal1: '.7', metal2: '.8'}.items()): custom_style[solid].update(dict(facecolor=color, edgecolor='k')) for solid in wafer.solids: diff --git a/test_nwell.py b/test_nwell.py index 1eb7ed6..c965d59 100644 --- a/test_nwell.py +++ b/test_nwell.py @@ -11,7 +11,7 @@ # N-Well nw = layers['N-Well'] -print nw +print(nw) wafer.implant(.7, nw, outdiffusion=0., label='N-Well') present(wafer) pyplot.legend()