Ejemplo n.º 1
0
    def testInSet(self):

        pos1: Position = Position(4, 4)
        pos2: Position = Position(5, 5)

        aSet: Set = set()
        aSet.add(pos1)
        aSet.add(pos2)

        self.assertTrue(pos1 in aSet, 'But, but I AM in the set')
Ejemplo n.º 2
0
    def testNotInSet(self):

        pos1: Position = Position(23, 23)
        pos2: Position = Position(42, 42)

        aSet: Set = {pos1, pos2}

        notInSet: Position = Position(7, 7)

        self.assertFalse(notInSet in aSet, 'But, but I am NOT in the set')
Ejemplo n.º 3
0
    def testNextGridPosition(self):
        layoutGrid: LayoutGrid = LayoutGrid(width=9, height=6)

        currentPosition: Position = Position(3, 3)
        actualNextPosition: Position = layoutGrid._nextGridPosition(
            currentGridPosition=currentPosition)

        expectedPosition: Position = Position(4, 3)

        self.assertEqual(expectedPosition, actualNextPosition,
                         'Oops something is broken')
Ejemplo n.º 4
0
    def determineZeroZeroNodePosition(self, nodePositions: Positions):

        potentialPos: Position = Position(0, 0)
        maxPos: Position = Position(self._gridWidth - 1, self._gridHeight - 1)

        while potentialPos <= maxPos:
            try:
                self._computeAGridPosition(potentialPos, nodePositions)
                break  # No exception means we found where to put zero zero node
            except FailedPositioningException as fpe:
                self.logger.debug(f'{fpe}')
            potentialPos = self._nextGridPosition(
                currentGridPosition=potentialPos)

        self._zeroNodePosition: Position = potentialPos
Ejemplo n.º 5
0
    def _nextGridPosition(self, currentGridPosition: Position) -> Position:

        nextX: int = currentGridPosition.x + 1
        nextY: int = currentGridPosition.y
        if nextX > self._gridWidth - 1:
            nextX = 0
            nextY: int = currentGridPosition.y + 1

        return Position(nextX, nextY)
Ejemplo n.º 6
0
    def _toEmbeddedPositions(
            self, embeddedPositions: LayoutEngineOutput) -> Positions:

        positions: Positions = {}
        for nodeName in embeddedPositions.keys():
            ePos: EngineCoordinates = embeddedPositions[nodeName]
            position: Position = Position(x=ePos[0], y=ePos[1])

            positions[nodeName] = position

        return positions
Ejemplo n.º 7
0
    def testSimple(self):

        simplePositions: Positions = {
            'Node0': Position(0, 0),
            'Node5': Position(0, 1),
            'Node1': Position(1, 0),
            'Node4': Position(1, -1),
            'Node3': Position(2, 0),
            'Node2': Position(1, 1)
        }

        layoutGrid: LayoutGrid = LayoutGrid(width=3, height=3)

        layoutGrid.determineZeroZeroNodePosition(nodePositions=simplePositions)

        expectedZeroZeroPosition: Position = Position(0, 1)
        self.assertEqual(expectedZeroZeroPosition, layoutGrid.zeroNodePosition)
Ejemplo n.º 8
0
    def _computeAGridPosition(self, theGridPosition: Position,
                              nodePositions: Positions):

        self.logger.debug(f'Check Zero Zero node at: {theGridPosition}')
        inUsePositions: Set = set()

        gridCopy: GridType = deepcopy(self._grid)
        self.layoutPositions = {}  # reset

        for nodeName in nodePositions:

            currentGridPos: Position = nodePositions[nodeName]

            x = theGridPosition.x + currentGridPos.x
            y = theGridPosition.y - currentGridPos.y  # y is always up
            self.logger.debug(f'{currentGridPos=}  grid x,y = ({x},{y})')
            try:
                # aRow = self._grid[x]
                aRow = gridCopy[x]
                # noinspection PyUnusedLocal
                aCell = aRow[
                    y]  # Only used to see if that key will generate a KeyError
                self.logger.debug(f'{currentGridPos=} fits at {x},{y}')
                gridPos: Position = Position(x, y)
                if gridPos in inUsePositions:
                    raise FailedPositioningException(
                        f'grid position {gridPos} in use')
                else:
                    inUsePositions.add(gridPos)
                    aRow[y] = nodeName
                    self.logger.debug(f'{inUsePositions=}')
                    self.layoutPositions[nodeName] = gridPos
            except KeyError:
                self.logger.debug(
                    f'Potential Position: {theGridPosition} failed at computed {x},{y}'
                )
                raise FailedPositioningException(
                    f'Potential Position: {theGridPosition} failed at computed {x},{y}'
                )

        self.logger.info(
            f'All nodes positioned;  Zero Zero node at: {theGridPosition}')
        self.logger.debug(f'{self.layoutPositions=}')
Ejemplo n.º 9
0
    def testComplex(self):
        complexPositions: Positions = {
            'Class0': Position(0, 0),
            'Class1': Position(0, 1),
            'Class2': Position(1, 1),
            'Class6': Position(2, 1),
            'Class5': Position(1, 2),
            'Class7': Position(2, 2),
            'Class8': Position(1, 3),
            'Class9': Position(0, 2),
            'Class4': Position(-1, 1),
            'Class3': Position(1, 0),
        }
        layoutGrid: LayoutGrid = LayoutGrid(width=4, height=4)

        layoutGrid.determineZeroZeroNodePosition(
            nodePositions=complexPositions)

        expectedZeroZeroPosition: Position = Position(1, 3)
        self.assertEqual(expectedZeroZeroPosition, layoutGrid.zeroNodePosition)