def yAxis(self, leftCol, row, yParentStructuralNode, childrenFirst, renderNow, atLeft):
        if yParentStructuralNode is not None:
            nestedBottomRow = row
            for yStructuralNode in yParentStructuralNode.childStructuralNodes:
                if not yStructuralNode.isRollUp:
                    isAbstract = (yStructuralNode.isAbstract or 
                                  (yStructuralNode.childStructuralNodes and
                                   not isinstance(yStructuralNode.definitionNode, (ModelClosedDefinitionNode, ModelEuAxisCoord))))
                    isNonAbstract = not isAbstract
                    isLabeled = yStructuralNode.isLabeled
                    nestRow, nextRow = self.yAxis(leftCol + isLabeled, row, yStructuralNode,  # nested items before totals
                                            childrenFirst, childrenFirst, False)
                    
                    topRow = row
                    if childrenFirst and isNonAbstract:
                        row = nextRow
                    if renderNow and isLabeled:
                        columnspan = leftCol + 1 - self.rowHdrCols if isNonAbstract or nextRow == row else 1
                        depth = yStructuralNode.depth
                        wraplength = (self.rowHdrColWidth[depth] if isAbstract else
                                      self.rowHdrWrapLength - sum(self.rowHdrColWidth[0:depth]))
                        if wraplength < 0:
                            wraplength = self.rowHdrColWidth[depth]
                        label = yStructuralNode.header(lang=self.lang,
                                                       returnGenLabel=isinstance(yStructuralNode.definitionNode, (ModelClosedDefinitionNode, ModelEuAxisCoord)),
                                                       recurseParent=not isinstance(yStructuralNode.definitionNode, ModelFilterDefinitionNode))
                        if label != OPEN_ASPECT_ENTRY_SURROGATE:
                            xValue = leftCol-1
                            yValue = row-1
                            self.table.initHeaderCellValue(label if label is not None else "         ",
                                                           xValue, yValue,
                                                           columnspan-1,
                                                           (nestRow - row if isAbstract else 1)-1,
                                                           (XbrlTable.TG_LEFT_JUSTIFIED
                                                            if isNonAbstract or nestRow == row
                                                            else XbrlTable.TG_CENTERED),
                                                           objectId=yStructuralNode.objectId(),
                                                           isRollUp=columnspan>1 and isNonAbstract and (len(yStructuralNode.childStructuralNodes)>1 or (len(yStructuralNode.childStructuralNodes)==1 and not(yStructuralNode.childStructuralNodes[0].isAbstract))))
                        else:
                            self.aspectEntryObjectIdsNode[yStructuralNode.aspectEntryObjectId] = yStructuralNode
                            self.aspectEntryObjectIdsCell[yStructuralNode.aspectEntryObjectId] = self.table.initHeaderCombobox(leftCol-1,
                                                                                                                               row-1,
                                                                                                                               values=self.aspectEntryValues(yStructuralNode),
                                                                                                                               objectId=yStructuralNode.aspectEntryObjectId,
                                                                                                                               comboboxselected=self.onAspectComboboxSelection)
                        if isNonAbstract:
                            for i, role in enumerate(self.rowHdrNonStdRoles):
                                isCode = "code" in role
                                docCol = self.dataFirstCol - len(self.rowHdrNonStdRoles) + i-1
                                yValue = row-1
                                self.table.initHeaderCellValue(yStructuralNode.header(role=role, lang=self.lang),
                                                               docCol, yValue,
                                                               0, 0,
                                                               XbrlTable.TG_CENTERED if isCode else XbrlTable.TG_RIGHT_JUSTIFIED,
                                                               objectId=yStructuralNode.objectId())
                    if isNonAbstract:
                        row += 1
                    elif childrenFirst:
                        row = nextRow
                    if nestRow > nestedBottomRow:
                        nestedBottomRow = nestRow + (isNonAbstract and not childrenFirst)
                    if row > nestedBottomRow:
                        nestedBottomRow = row
                    #if renderNow and not childrenFirst:
                    #    dummy, row = self.yAxis(leftCol + 1, row, yStructuralNode, childrenFirst, True, False) # render on this pass
                    if not childrenFirst:
                        dummy, row = self.yAxis(leftCol + isLabeled, row, yStructuralNode, childrenFirst, renderNow, False) # render on this pass
            return (nestedBottomRow, row)
dataset/ETHPy150Open Arelle/Arelle/arelle/ViewWinRenderedGrid.py/ViewRenderedGrid.yAxis/swapped operands of `-`