From 7cc1a5b8d2ffb4fe57384df12fdf38704a3068f9 Mon Sep 17 00:00:00 2001 From: Jiao77 Date: Mon, 9 Jun 2025 01:42:47 +0800 Subject: [PATCH] add convert tool --- pyproject.toml | 4 +- tools/layout2png.py | 88 +++++++++++++++++++++++++++ uv.lock | 144 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 tools/layout2png.py diff --git a/pyproject.toml b/pyproject.toml index 0c95126..d4a1026 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,10 +1,12 @@ -git[project] +[project] name = "rord-layout-recognation" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [ + "cairosvg>=2.8.2", + "gdstk>=0.9.60", "numpy>=2.3.0", "opencv-python>=4.11.0.86", "pillow>=11.2.1", diff --git a/tools/layout2png.py b/tools/layout2png.py new file mode 100644 index 0000000..25af7e7 --- /dev/null +++ b/tools/layout2png.py @@ -0,0 +1,88 @@ +import gdstk +import cairosvg +import argparse +import os + +def convert_layout_to_png_via_svg(layout_path, png_path, cell_name=None, pixels_per_unit=10): + """ + 通过先生成 SVG 再转换为 PNG 的方式,将 GDSII 或 OASIS 文件光栅化。 + 此版本修正了 write_svg 的参数错误,兼容性更强。 + + 参数: + layout_path (str): 输入的版图文件路径(.gds 或 .oas)。 + png_path (str): 输出的 PNG 文件路径。 + cell_name (str, optional): 需要转换的单元名称。如果为 None,则使用顶层单元。 + pixels_per_unit (int, optional): 版图数据库单位到像素的转换比例,控制图像分辨率。 + """ + print(f"正在从 '{layout_path}' 读取版图文件...") + + # 1. 加载版图文件 + _, extension = os.path.splitext(layout_path) + extension = extension.lower() + + if extension == '.gds': + lib = gdstk.read_gds(layout_path) + elif extension == '.oas': + lib = gdstk.read_oas(layout_path) + else: + raise ValueError(f"不支持的文件类型: '{extension}'。请输入 .gds 或 .oas 文件。") + + if cell_name: + cell = lib.cells[cell_name] + else: + top_cells = lib.top_level() + if not top_cells: + raise ValueError("错误:版图文件中没有找到顶层单元。") + cell = top_cells[0] + print(f"未指定单元名称,自动选择顶层单元: '{cell.name}'") + + # 2. 将版图单元写入临时的 SVG 文件 (已移除无效的 padding 参数) + temp_svg_path = png_path + ".temp.svg" + print(f"步骤 1/2: 正在将单元 '{cell.name}' 转换为临时 SVG 文件...") + cell.write_svg( + temp_svg_path # 隐藏默认字体,避免影响边界 + ) + + # 3. 使用 cairosvg 将 SVG 文件转换为 PNG + print(f"步骤 2/2: 正在将 SVG 转换为 PNG...") + # 获取单元的精确边界框 + bb = cell.bb() + if bb is None: + raise ValueError(f"单元 '{cell.name}' 为空或无法获取其边界框。") + + # 根据边界框和分辨率计算输出图像的宽度 + width, height = bb[1] - bb[0] + output_width = width * pixels_per_unit + + cairosvg.svg2png(url=temp_svg_path, write_to=png_path, output_width=output_width) + + # 4. 清理临时的 SVG 文件 + os.remove(temp_svg_path) + + print(f"成功!图像已保存至: '{png_path}'") + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="将 GDSII (.gds) 或 OASIS (.oas) 版图文件转换为 PNG 图像 (通过SVG)。", + epilog="示例: python rasterize.py -i my_chip.oas -o my_chip.png -ppu 20" + ) + parser.add_argument('-i', '--input', type=str, required=True, help="输入的版图文件路径 (.gds 或 .oas)。") + parser.add_argument('-o', '--output', type=str, help="输出的 PNG 文件路径。如果未提供,将使用输入文件名并替换扩展名为 .png。") + parser.add_argument('-c', '--cell', type=str, default=None, help="要转换的特定单元的名称。默认为顶层单元。") + parser.add_argument('-ppu', '--pixels_per_unit', type=int, default=10, help="每微米(um)的像素数,用于控制输出图像的分辨率。") + args = parser.parse_args() + + if not args.output: + base_name = os.path.splitext(os.path.basename(args.input))[0] + args.output = f"{base_name}.png" + print(f"未指定输出路径,将自动保存为: '{args.output}'") + + try: + convert_layout_to_png_via_svg( + layout_path=args.input, + png_path=args.output, + cell_name=args.cell, + pixels_per_unit=args.pixels_per_unit + ) + except Exception as e: + print(f"\n处理失败: {e}") \ No newline at end of file diff --git a/uv.lock b/uv.lock index d5d5790..a9981b2 100644 --- a/uv.lock +++ b/uv.lock @@ -7,6 +7,89 @@ resolution-markers = [ "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')", ] +[[package]] +name = "cairocffi" +version = "1.7.1" +source = { registry = "https://pypi.tuna.tsinghua.edu.cn/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://pypi.tuna.tsinghua.edu.cn/packages/70/c5/1a4dc131459e68a173cbdab5fad6b524f53f9c1ef7861b7698e998b837cc/cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b", size = 88096, upload-time = "2024-06-18T10:56:06.741Z" } +wheels = [ + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/93/d8/ba13451aa6b745c49536e87b6bf8f629b950e84bd0e8308f7dc6883b67e2/cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f", size = 75611, upload-time = "2024-06-18T10:55:59.489Z" }, +] + +[[package]] +name = "cairosvg" +version = "2.8.2" +source = { registry = "https://pypi.tuna.tsinghua.edu.cn/simple" } +dependencies = [ + { name = "cairocffi" }, + { name = "cssselect2" }, + { name = "defusedxml" }, + { name = "pillow" }, + { name = "tinycss2" }, +] +sdist = { url = "https://pypi.tuna.tsinghua.edu.cn/packages/ab/b9/5106168bd43d7cd8b7cc2a2ee465b385f14b63f4c092bb89eee2d48c8e67/cairosvg-2.8.2.tar.gz", hash = "sha256:07cbf4e86317b27a92318a4cac2a4bb37a5e9c1b8a27355d06874b22f85bef9f", size = 8398590, upload-time = "2025-05-15T06:56:32.653Z" } +wheels = [ + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/67/48/816bd4aaae93dbf9e408c58598bc32f4a8c65f4b86ab560864cb3ee60adb/cairosvg-2.8.2-py3-none-any.whl", hash = "sha256:eab46dad4674f33267a671dce39b64be245911c901c70d65d2b7b0821e852bf5", size = 45773, upload-time = "2025-05-15T06:56:28.552Z" }, +] + +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.tuna.tsinghua.edu.cn/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://pypi.tuna.tsinghua.edu.cn/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } +wheels = [ + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, +] + +[[package]] +name = "cssselect2" +version = "0.8.0" +source = { registry = "https://pypi.tuna.tsinghua.edu.cn/simple" } +dependencies = [ + { name = "tinycss2" }, + { name = "webencodings" }, +] +sdist = { url = "https://pypi.tuna.tsinghua.edu.cn/packages/9f/86/fd7f58fc498b3166f3a7e8e0cddb6e620fe1da35b02248b1bd59e95dbaaa/cssselect2-0.8.0.tar.gz", hash = "sha256:7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a", size = 35716, upload-time = "2025-03-05T14:46:07.988Z" } +wheels = [ + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/0f/e7/aa315e6a749d9b96c2504a1ba0ba031ba2d0517e972ce22682e3fccecb09/cssselect2-0.8.0-py3-none-any.whl", hash = "sha256:46fc70ebc41ced7a32cd42d58b1884d72ade23d21e5a4eaaf022401c13f0e76e", size = 15454, upload-time = "2025-03-05T14:46:06.463Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.tuna.tsinghua.edu.cn/simple" } +sdist = { url = "https://pypi.tuna.tsinghua.edu.cn/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69" } +wheels = [ + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" }, +] + [[package]] name = "filelock" version = "3.18.0" @@ -25,6 +108,33 @@ wheels = [ { url = "https://pypi.tuna.tsinghua.edu.cn/packages/bb/61/78c7b3851add1481b048b5fdc29067397a1784e2910592bc81bb3f608635/fsspec-2025.5.1-py3-none-any.whl", hash = "sha256:24d3a2e663d5fc735ab256263c4075f374a174c3410c0b25e5bd1970bceaa462", size = 199052, upload-time = "2025-05-24T12:03:21.66Z" }, ] +[[package]] +name = "gdstk" +version = "0.9.60" +source = { registry = "https://pypi.tuna.tsinghua.edu.cn/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://pypi.tuna.tsinghua.edu.cn/packages/f7/06/041d9a64f736309209d5f190b81ee7e0ca8f3c5a9d19d8d53e37b739b367/gdstk-0.9.60.tar.gz", hash = "sha256:6d9b807bf0ea43903779c0ba8c65b4fdfbca903a90dbb1acfd11b41fd0574588", size = 317689, upload-time = "2025-04-15T12:38:11.883Z" } +wheels = [ + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/94/a3/6af43207b5b2e19159849b0def21634e3dc47d5526c5043eee163a1e7f62/gdstk-0.9.60-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:724054622a6afff52bd6863d88e09053b13f8e015c874d81a7de6f0d37a88df2", size = 922600, upload-time = "2025-04-15T12:37:40.206Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/9e/20/e35419a30cae6b9dba91d031f2ff7cea50569eafc280c1e3225ad3272417/gdstk-0.9.60-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8ce17b51e6f6494e038224033f55c4f8226897e3505ad5d7e0c37a7aadbf2e81", size = 477080, upload-time = "2025-04-15T12:37:41.212Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/3f/d1/008837b68e35d75c56d10884b486ffe2ceb57fb1567fe10e0ec0b1a9446e/gdstk-0.9.60-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5c525fd1b4c9a56df3aa55646be1980e3edcc326485ca2058b889f63fd9d265f", size = 600644, upload-time = "2025-04-15T12:37:42.693Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/1e/51/147f1ca9c3ba76e08e4e5e7271ad05d9276a3f93cba4f61332c3cab03ebc/gdstk-0.9.60-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9155d90b3035140201519f4ab97af6ec7ac96fa2cc4ca2927b93e5877c458315", size = 536859, upload-time = "2025-04-15T12:37:43.729Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/e5/a1/27a362bd1175705986d709fe4113695c7240866e4332f40df2068c7975d3/gdstk-0.9.60-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:a51d0561f76059db7cfd6396163e10b3c89c2dd8285a38ef940f374caeac38a5", size = 535697, upload-time = "2025-04-15T12:37:45.403Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/7a/bb/27674fec6fe62dda386f85036e64fbb4cc4c214868ea4386547005849485/gdstk-0.9.60-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7702cec46ab36b3cc6f08db29e7fb20cc93946a2cf3fa01188b0b6a831d83cdf", size = 1711695, upload-time = "2025-04-15T12:37:46.563Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/0d/7b/ffea1d8403475c3fd3737dd293739ba5b6f37e3166b2b0aed611541fc828/gdstk-0.9.60-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce367af239b4cf07e305cdd682e3a84df56e26c3ddbc4b1f55bc91467363386b", size = 1535214, upload-time = "2025-04-15T12:37:48.262Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/71/84/26178f14c7e068b62af11ce7ea68751f334774f7b7cbb0b5e232d3875ccf/gdstk-0.9.60-cp312-cp312-win_amd64.whl", hash = "sha256:a94f259a453736f24d4a98f8fca857f082081f84051094ad6b2d0f1b81fee19d", size = 499969, upload-time = "2025-04-15T12:37:50.179Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/55/13/2fd6504c0508b84f712574386b02c3d61d36a7b5111ca24220d62f0a06c6/gdstk-0.9.60-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5f1832f90f23c761e182e8f0dffcf9e47260f6be47a445b5027cd17ff9b2d51b", size = 922591, upload-time = "2025-04-15T12:37:51.201Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/e6/15/8429f34a2429c63adcb875b704723eca606e4fafa0bea768b5e3511a0cc7/gdstk-0.9.60-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:db240ecabacf0063e035d7ad7e156a500d895c0b9886d0b2adaa9681b83d9424", size = 477069, upload-time = "2025-04-15T12:37:52.228Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/38/7b/ae724d43d081f480a582eb11fd06cabf90cc7e0bb0fdcb32ce8d4093e017/gdstk-0.9.60-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9c80eed22802b72566a89e4d429b1ec820a1b28658bc20830f455933d5ed963", size = 600640, upload-time = "2025-04-15T12:37:53.709Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/86/08/1ac9df64fd281017d6aeefddda2fb4b9821d20b45db1910ecf1fe9f7740d/gdstk-0.9.60-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0a35625a965848aabf52b4e92c37e0876bdc6f01099f0614fc97dfb28676e19", size = 536872, upload-time = "2025-04-15T12:37:54.742Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/8a/f6/95d4d6176cfbd2236bf15bb1e60bf18dd49604b0a9548c1b534ed1a7354a/gdstk-0.9.60-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bc52f232471b97e52004b047e4300de9e92575e62fbf40fe6bd1d4fbb1b87bc4", size = 535696, upload-time = "2025-04-15T12:37:55.752Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/e9/33/7a1f4e1bd8b68f90a47cc306f3b3bc91b26e85d4cc690c620edffad48786/gdstk-0.9.60-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:aa0a7a617f90bd2c4ab5b5032638ea01c39f3305490bda67a82d8310e266aeb4", size = 1711735, upload-time = "2025-04-15T12:37:56.768Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/a8/ba/6588229bb74dcbf10f07b5a803914a04c1b1842f77f704629bb726be131b/gdstk-0.9.60-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64249dfc5803e987decbae5bc28144242f0297869fca1074b26380f261998ee6", size = 1535206, upload-time = "2025-04-15T12:37:58.301Z" }, + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/30/bc/70950ace7b5db1cbe5bdf2f9238cab885f51ad51d6befac2d0fb11d94fb9/gdstk-0.9.60-cp313-cp313-win_amd64.whl", hash = "sha256:9e41b38a719991b1e36ea0320c44688ac18e64ae53d9e5775fc7222fccfbb34a", size = 499802, upload-time = "2025-04-15T12:37:59.404Z" }, +] + [[package]] name = "jinja2" version = "3.1.6" @@ -325,11 +435,22 @@ wheels = [ { url = "https://pypi.tuna.tsinghua.edu.cn/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234, upload-time = "2025-04-12T17:49:08.399Z" }, ] +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.tuna.tsinghua.edu.cn/simple" } +sdist = { url = "https://pypi.tuna.tsinghua.edu.cn/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } +wheels = [ + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, +] + [[package]] name = "rord-layout-recognation" version = "0.1.0" source = { virtual = "." } dependencies = [ + { name = "cairosvg" }, + { name = "gdstk" }, { name = "numpy" }, { name = "opencv-python" }, { name = "pillow" }, @@ -339,6 +460,8 @@ dependencies = [ [package.metadata] requires-dist = [ + { name = "cairosvg", specifier = ">=2.8.2" }, + { name = "gdstk", specifier = ">=0.9.60" }, { name = "numpy", specifier = ">=2.3.0" }, { name = "opencv-python", specifier = ">=4.11.0.86" }, { name = "pillow", specifier = ">=11.2.1" }, @@ -367,6 +490,18 @@ wheels = [ { url = "https://pypi.tuna.tsinghua.edu.cn/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, ] +[[package]] +name = "tinycss2" +version = "1.4.0" +source = { registry = "https://pypi.tuna.tsinghua.edu.cn/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://pypi.tuna.tsinghua.edu.cn/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload-time = "2024-10-24T14:58:29.895Z" } +wheels = [ + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload-time = "2024-10-24T14:58:28.029Z" }, +] + [[package]] name = "torch" version = "2.7.1" @@ -455,3 +590,12 @@ sdist = { url = "https://pypi.tuna.tsinghua.edu.cn/packages/d1/bc/51647cd02527e8 wheels = [ { url = "https://pypi.tuna.tsinghua.edu.cn/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839, upload-time = "2025-06-02T14:52:10.026Z" }, ] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.tuna.tsinghua.edu.cn/simple" } +sdist = { url = "https://pypi.tuna.tsinghua.edu.cn/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload-time = "2017-04-05T20:21:34.189Z" } +wheels = [ + { url = "https://pypi.tuna.tsinghua.edu.cn/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload-time = "2017-04-05T20:21:32.581Z" }, +]