TilingProcessor: ReportDatabase overload not available in Python

未关闭
#2,551 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
50/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
cpp, python
领域
api

调研方向

Start by running the reproducer in the issue, which calls TilingProcessor.output with a ReportDatabase, and compare it with the output overload declared in the .pyi stub. The error lists the registered overloads, and none of them accepts a report database with cell and category ids, so the binding is missing. Done means the reproducer runs and writes the XOR result into the report database.

由索引模型根据 Issue 内容生成。

描述

I was porting our XOR script from Ruby to Python, when I noticed something: this overload which is declared in the .pyi file:

    @overload
    def output(self, name: str, rdb: rdb.ReportDatabase, cell_id: int, category_id: int) -> None:

…doesn't seem to actually work.

from klayout.dbcore import Layout, TilingProcessor
from klayout.rdbcore import ReportDatabase

layout_a = Layout()
cell_a = layout_a.create_cell("a")

layout_b = Layout()
cell_b = layout_b.create_cell("b")

rdb = ReportDatabase("XOR")
rdb_cell = rdb.create_cell("a_xor_b")
layer_0_cat = rdb.create_category("layer_0")

tp = TilingProcessor()
tp.input("a", layout_a, cell_a.cell_index(), 0)
tp.input("b", layout_b, cell_b.cell_index(), 0)
tp.output("xor", rdb, rdb_cell.rdb_id(), layer_0_cat.rdb_id())

"""
Traceback (most recent call last):
  File "/Users/donn/Code/librelane/librelane-tree/python-tools/./klayout_issue.py", line 17, in <module>
    tp.output("xor", rdb, rdb_cell.rdb_id(), layer_0_cat.rdb_id())
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: No overload with matching arguments. Variants are:
  void output(string name, Region region) [2 argument(s) expected, but 4 given]
  void output(string name, EdgePairs edge_pairs) [2 argument(s) expected, but 4 given]
  void output(string name, TileOutputReceiverBase ptr rec) [2 argument(s) expected, but 4 given]
  void output(string name, Edges edges) [2 argument(s) expected, but 4 given]
  void output(string name, Texts texts) [2 argument(s) expected, but 4 given]
  void output(string name, double ptr sum) [2 argument(s) expected, but 4 given]
  void output(string name, Layout layout, unsigned int cell, const LayerInfo lp) [match candidate]
  void output(string name, Layout layout, unsigned int cell, unsigned int layer_index) [match candidate]
 in TilingProcessor.output
"""

I was able to work around it by creating a new cell, see https://github.com/librelane/librelane/blob/cf49f0fcfdd7ddc284b9e703a8a9c353f8378004/librelane/scripts/klayout/xor.py for the full script, but needless to say that's a bit slower.

主要语言
C++
星标
1.2k
派生
305
平均合并
3 天 2 小时
30 天内合并 PR
11

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

KLayout/klayout 的其他 Issue

查看 KLayout/klayout 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。