depset

Es una estructura de datos especializada que admite operaciones de combinación eficaces y tiene un orden transversal definido. Suelen usarse para acumular datos de dependencias transitivas en reglas y aspectos. Para obtener más información, consulta este vínculo.

Los elementos de un depset deben admitir la codificación hash y ser todos del mismo tipo (según lo define la función integrada type(x), pero estos no son simplemente conjuntos de hashes y no admiten pruebas de membresía rápidas. Si necesitas un tipo de datos de conjunto general, puedes simular uno mediante un diccionario en el que todas las teclas se asignan a True.

Las dependencias son inmutables. Deben crearse con su función de constructor y combinarse o aumentarse con otras dependencias mediante el argumento transitive.

El parámetro order determina el tipo de recorrido que se realiza para convertir la depset en un iterable. Hay cuatro valores posibles:

  • "default" (anteriormente "stable"): El orden no se especifica (pero determinista).
  • "postorder" (anteriormente "compile"): Es un orden posterior de izquierda a derecha. Precisamente, esto recorre de manera recursiva todos los elementos secundarios primero a la izquierda, luego los elementos directos primero a la izquierda.
  • "preorder" (anteriormente "naive_link"): Un pedido por adelantado de izquierda a derecha. Precisamente, esto desvía los elementos directos de la izquierda primero, luego recorre de manera recursiva los elementos secundarios de la izquierda primero.
  • "topological" (anteriormente "link"): Es un orden topológico desde la raíz hasta las hojas. No hay garantía de izquierda a derecha.

Dos dependencias solo se pueden combinar si ambas tienen el mismo orden o si una de ellas tiene el orden "default". En el último caso, el orden del depósito resultante será el mismo que el del otro.

Las dependencias pueden contener valores duplicados, pero se suprimirán durante la iteración (mediante to_list()). Los duplicados pueden interferir en la semántica de orden.

Miembros

to_list

list depset.to_list()

Muestra una lista de los elementos, sin duplicados, en el orden de recorrido del depset. Ten en cuenta que no se especifica el orden (pero es determinístico) para los elementos que se agregaron más de una vez a la entrada. Tampoco se especifica el orden para las dependencias ordenadas por "default" ni para los elementos de las dependencias secundarias cuyo orden sea diferente del de las dependencias principales. La lista es una copia. Si la modificas, no afecta la configuración y viceversa.