TilingProcessor: ReportDatabase overload not available in Python

Abierto
#2,551 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
50/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
cpp, python
Área
api

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
C++
Estrellas
1.2k
Forks
305
Merge medio
3 d 2 h
PR fusionados (30 d)
11

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de KLayout/klayout

Todos los issues de KLayout/klayout

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.