コード例 #1
0
ファイル: test_util.py プロジェクト: whereswallis/anytree
def test_rightsibling():
    """rightsibling."""
    dan = Node("Dan")
    jet = Node("Jet", parent=dan)
    jan = Node("Jan", parent=dan)
    joe = Node("Joe", parent=dan)
    eq_(rightsibling(dan), None)
    eq_(rightsibling(jet), jan)
    eq_(rightsibling(jan), joe)
    eq_(rightsibling(joe), None)
コード例 #2
0
def test_get_next_sibling():
    template = XMLTemplateParser("""
        <template name="root" sizing="auto">
            <area name="child0" size="4"></area>
            <area name="child1" size="4"></area>
            <area name="child2" size="4"></area>
            <area name="child3" size="4"></area>
            <area name="child4" size="4"></area>
        </template>
    """).parse()

    assert template.child3 == rightsibling(template.child2)
    assert template.child1 == rightsibling(template.child0)
    assert None == rightsibling(template.child4)
コード例 #3
0
    def get_max_size(self, template):
        """Returns a template's maximum possible size depending on the offset of
        its successor or size of it's parent.
        """
        from .properties import AutoSizeValueProperty, OffsetValueProperty

        next_sibling = rightsibling(template)
        if next_sibling and isinstance(next_sibling.offset_property,
                                       OffsetValueProperty):
            return next_sibling.offset - template.offset
        elif (next_sibling and template.parent and not isinstance(
                template.parent.size_property, AutoSizeValueProperty)):
            siblings = rightsiblings(template)
            return template.parent.size - self.get_size_of_siblings(
                siblings) - template.offset
        elif template.parent and not isinstance(template.parent.size_property,
                                                AutoSizeValueProperty):
            return template.parent.size - template.offset
        elif template.parent and template.parent.boundary > 0:
            return template.parent.boundary - template.offset
        elif template.binding_context.data:
            data = template.binding_context.data
            data.seek(0, 2)
            return data.tell()
        else:
            return 0
コード例 #4
0
ファイル: tree.py プロジェクト: Larch-Team/Larch
    def getneighbour(self, left_right: str) -> ProofNode:
        """Zwraca prawego, lub lewego sąsiada danego węzła. 
        Równie dobrze można używać `anytree.util.rightsibling(self)` oraz `anytree.util.leftsibling(self)`

        :param left_right: 'L/Left' lub 'R/Right'
        :type left_right: str
        :raises ProofNodeError: Podano niepoprawny kierunek
        :return: Sąsiad
        :rtype: ProofNode
        """
        if not self.parent:
            return None
        if left_right.upper() in ('R', 'RIGHT'):
            return util.rightsibling(self)
        elif left_right.upper() in ('L', 'LEFT'):
            return util.leftsibling(self)
        else:
            raise ProofNodeError(f"'{left_right}' is not a valid direction")
コード例 #5
0
def doAlgorithm(size, obstaculos):
    tablero, xInicio, yInicio = construirTablero(size, obstaculos)
    expansionMaxima = ((len(tablero) * len(tablero)) - obstaculos) * 2

    print(f'Numero de estados => {expansionMaxima}')
    if tablero[xInicio][yInicio] != 0:
        messagebox.showerror(
            message=
            "Por azares del destino, el tablero no cuenta con una casilla de salida, que mala suerte...",
            title="Upss")
        raise Exception(
            "Por azares del destino, el tablero no cuenta con una casilla de salida, que mala suerte..."
        )

    nodoRaiz = Node(tablero[xInicio][yInicio], id=uniqueID())
    nodoCursor = None

    nodosVisitados = []

    mostrarTablero(tablero)

    valorArriba = arriba(tablero, xInicio, yInicio)
    if (valorArriba != None):
        uid = uniqueID()
        nodoCursor = Node(valorArriba, parent=nodoRaiz, id=uid)

    valorDerecha = derecha(tablero, xInicio, yInicio)
    if (valorDerecha != None):
        uid = uniqueID()
        nodoCursor = Node(valorDerecha, parent=nodoRaiz, id=uid)

    valorAbajo = abajo(tablero, xInicio, yInicio)
    if (valorAbajo != None):
        uid = uniqueID()
        nodoCursor = Node(valorAbajo, parent=nodoRaiz, id=uid)

    valorIzquierda = izquierda(tablero, xInicio, yInicio)
    if (valorIzquierda != None):
        uid = uniqueID()
        nodoCursor = Node(valorIzquierda, parent=nodoRaiz, id=uid)

    nodosVisitados.append(nodoRaiz.name)
    nodoHijoEvaluando = nodoRaiz.children[0]
    # while nodoHijoEvaluando != None:
    # 	yaPasePorAqui = existeEnLaPila(nodosVisitados, nodoHijoEvaluando.name)
    # 	if yaPasePorAqui == False:
    # 		nodosVisitados.append(nodoHijoEvaluando.name)
    # 		if nodoHijoEvaluando.name == -100: # Solucion
    # 			break
    # 		coordenadasHijoEvaluando = getCoords(tablero, nodoHijoEvaluando.name)
    # 		_x = int(coordenadasHijoEvaluando[0])
    # 		_y = int(coordenadasHijoEvaluando[1])
    # 		valorArriba = arriba(tablero, _x, _y)
    # 		if(valorArriba != None):
    # 			uid = uniqueID()
    # 			hijo = Node(valorArriba, parent=nodoHijoEvaluando, id=uid)

    # 		valorDerecha = derecha(tablero, _x, _y)
    # 		if(valorDerecha != None):
    # 			uid = uniqueID()
    # 			hijo = Node(valorDerecha, parent=nodoHijoEvaluando, id=uid)

    # 		valorAbajo = abajo(tablero, _x, _y)
    # 		if(valorAbajo != None):
    # 			uid = uniqueID()
    # 			hijo = Node(valorAbajo, parent=nodoHijoEvaluando, id=uid)

    # 		valorIzquierda = izquierda(tablero, _x, _y)
    # 		if(valorIzquierda != None):
    # 			uid = uniqueID()
    # 			hijo = Node(valorIzquierda, parent=nodoHijoEvaluando, id=uid)
    # 		nodoHijoEvaluando = nodoHijoEvaluando.children[0]
    # 	else:
    # 		try:
    # 			nodoHijoEvaluando = rightsibling(nodoHijoEvaluando)
    # 		except Exception:
    # 			nodoHijoEvaluando = rightsibling(nodoHijoEvaluando.parent)

    nodoSalida = None

    # Implementación con un nivel de profundidad máximo
    while nodoHijoEvaluando != None:  # Iteramos a lo bestia :v
        # yaPasePorAqui = existeEnLaPila(nodosVisitados, nodoHijoEvaluando.name)

        profundidad = nodoHijoEvaluando.depth
        if nodoHijoEvaluando.name == -100:
            print("Acabo de encontrar la salida :D")
            nodoSalida = nodoHijoEvaluando
            break
        elif profundidad > expansionMaxima:
            # Pasar al siguiente nodo segun profundidad maxmma
            try:
                nodoHijoEvaluando = rightsibling(nodoHijoEvaluando)
            except Exception:
                nodoHijoEvaluando = rightsibling(nodoHijoEvaluando.parent)
        else:
            coordenadasHijoEvaluando = getCoords(tablero,
                                                 nodoHijoEvaluando.name)
            _x = int(coordenadasHijoEvaluando[0])
            _y = int(coordenadasHijoEvaluando[1])
            valorArriba = arriba(tablero, _x, _y)
            if (valorArriba != None):
                uid = uniqueID()
                hijo = Node(valorArriba, parent=nodoHijoEvaluando, id=uid)

            valorDerecha = derecha(tablero, _x, _y)
            if (valorDerecha != None):
                uid = uniqueID()
                hijo = Node(valorDerecha, parent=nodoHijoEvaluando, id=uid)

            valorAbajo = abajo(tablero, _x, _y)
            if (valorAbajo != None):
                uid = uniqueID()
                hijo = Node(valorAbajo, parent=nodoHijoEvaluando, id=uid)

            valorIzquierda = izquierda(tablero, _x, _y)
            if (valorIzquierda != None):
                uid = uniqueID()
                hijo = Node(valorIzquierda, parent=nodoHijoEvaluando, id=uid)
            nodoHijoEvaluando = nodoHijoEvaluando.children[0]
        # else:
        # 	try:
        # 		nodoHijoEvaluando = rightsibling(nodoHijoEvaluando)
        # 	except Exception:
        # 		nodoHijoEvaluando = rightsibling(nodoHijoEvaluando.parent)

    return nodoRaiz, nodoSalida
コード例 #6
0
def is_left_argument(child_node):
    return(rightsibling(child_node) != None) 
コード例 #7
0
def iniciar_algoritmo_principal(tablero):
    # Indicar los obstáculos, salida e inicio
    expansionMaxima = (
        (len(tablero) * len(tablero)) - len(array_obstaculos)) * 2

    print(f'Numero de estados: {expansionMaxima}')

    array_tmp = obtener_coordenadas(tablero, 0)
    xInicio = int(array_tmp[0])
    yInicio = int(array_tmp[1])
    nodoRaiz = Node(tablero[xInicio][yInicio], id=obtener_ID_unico())
    banderaSalidaEncontrada = False

    valorir_arriba = ir_arriba(tablero, xInicio, yInicio)
    if (valorir_arriba != None):
        uid = obtener_ID_unico()
        Node(valorir_arriba, parent=nodoRaiz, id=uid)

    valorir_derecha = ir_derecha(tablero, xInicio, yInicio)
    if (valorir_derecha != None):
        uid = obtener_ID_unico()
        Node(valorir_derecha, parent=nodoRaiz, id=uid)

    valorir_abajo = ir_abajo(tablero, xInicio, yInicio)
    if (valorir_abajo != None):
        uid = obtener_ID_unico()
        Node(valorir_abajo, parent=nodoRaiz, id=uid)

    valorir_izquierda = ir_izquierda(tablero, xInicio, yInicio)
    if (valorir_izquierda != None):
        uid = obtener_ID_unico()
        Node(valorir_izquierda, parent=nodoRaiz, id=uid)

    nodoHijoEvaluando = nodoRaiz.children[0]

    # Implementación con un nivel de profundidad máximo
    while banderaSalidaEncontrada == False:  # Iteramos a lo bestia :v
        profundidad = nodoHijoEvaluando.depth

        if nodoHijoEvaluando.name == -100:
            print("Acabo de encontrar la salida :D => ", nodoHijoEvaluando)
            # nodoHijoEvaluando = None
            banderaSalidaEncontrada = True
        elif profundidad > (expansionMaxima - 1):
            # Pasar al siguiente nodo segun profundidad maxima
            _nodo = rightsibling(nodoHijoEvaluando)
            if (_nodo != None):
                nodoHijoEvaluando = _nodo
            else:
                while (_nodo == None):
                    nodoHijoEvaluando = nodoHijoEvaluando.parent
                    _nodo = rightsibling(nodoHijoEvaluando)
                nodoHijoEvaluando = _nodo
        else:
            coordenadasHijoEvaluando = obtener_coordenadas(
                tablero, nodoHijoEvaluando.name)
            _x = int(coordenadasHijoEvaluando[0])
            _y = int(coordenadasHijoEvaluando[1])

            valorir_arriba = ir_arriba(tablero, _x, _y)
            if (valorir_arriba != None):
                uid = obtener_ID_unico()
                Node(valorir_arriba, parent=nodoHijoEvaluando, id=uid)

            valorir_derecha = ir_derecha(tablero, _x, _y)
            if (valorir_derecha != None):
                uid = obtener_ID_unico()
                Node(valorir_derecha, parent=nodoHijoEvaluando, id=uid)

            valorir_abajo = ir_abajo(tablero, _x, _y)
            if (valorir_abajo != None):
                uid = obtener_ID_unico()
                Node(valorir_abajo, parent=nodoHijoEvaluando, id=uid)

            valorir_izquierda = ir_izquierda(tablero, _x, _y)
            if (valorir_izquierda != None):
                uid = obtener_ID_unico()
                Node(valorir_izquierda, parent=nodoHijoEvaluando, id=uid)

            nodoHijoEvaluando = nodoHijoEvaluando.children[0]

    return nodoRaiz