def view(self, viewTblELR=None, newInstance=None, profile=False):
        '''
        if profile: # for debugging only, to use, uncomment in loadTablesMenu
            import cProfile, pstats, sys
            statsFile = "/Users/hermf/temp/profileRendering.bin"
            cProfile.runctx("self.view(viewTblELR=viewTblELR)", globals(), locals(), statsFile)
            priorStdOut = sys.stdout
            sys.stdout = open("/Users/hermf/temp/profileRendering.txt", "w")
            statObj = pstats.Stats(statsFile)
            statObj.strip_dirs()
            statObj.sort_stats("time")
            statObj.print_stats()
            statObj.print_callees()
            statObj.print_callers()
            sys.stdout.flush()
            sys.stdout.close()
            del statObj
            sys.stdout = priorStdOut
            os.remove(statsFile)
            return
        '''
        startedAt = time.time()
        self.blockMenuEvents += 1
        if newInstance is not None:
            self.modelXbrl = newInstance # a save operation has created a new instance to use subsequently
            clearZchoices = False
        if viewTblELR:  # specific table selection
            self.tblELR = viewTblELR
            clearZchoices = True
        else:   # first or subsequenct reloading (language, dimensions, other change)
            clearZchoices = self.zOrdinateChoices is None
            if clearZchoices: # also need first time initialization
                self.loadTablesMenu()  # load menus (and initialize if first time
            viewTblELR = self.tblELR
            
        if not self.tblELR:
            return  # no table to display

        if clearZchoices:
            self.zOrdinateChoices = {}

        # remove old widgets
        self.viewFrame.clearGrid()

        tblAxisRelSet, xTopStructuralNode, yTopStructuralNode, zTopStructuralNode = resolveAxesStructure(self, viewTblELR)
        colAdjustment = 1 if zTopStructuralNode is not None else 0
        self.table.resizeTable(self.dataFirstRow+self.dataRows-1, self.dataFirstCol+self.dataCols+1-colAdjustment, titleRows=self.dataFirstRow-1, titleColumns=self.dataFirstCol-1)
        self.hasTableFilters = bool(self.modelTable.filterRelationships)
        
        if tblAxisRelSet:
            # review row header wrap widths and limit to 2/3 of the frame width (all are screen units)
            fontWidth = tkFont.Font(font='TkTextFont').configure()['size']
            fontWidth = fontWidth * 3 // 2
            dataColsAllowanceWidth = (fontWidth * ENTRY_WIDTH_IN_CHARS + PADDING) * self.dataCols + PADDING
            frameWidth = self.viewFrame.winfo_width()
            if dataColsAllowanceWidth + self.rowHdrWrapLength > frameWidth:
                if dataColsAllowanceWidth > frameWidth / 2:
                    rowHdrAllowanceWidth = frameWidth / 2
                else:
                    rowHdrAllowanceWidth = frameWidth - dataColsAllowanceWidth
                if self.rowHdrWrapLength > rowHdrAllowanceWidth:
                    widthRatio = rowHdrAllowanceWidth / self.rowHdrWrapLength
                    self.rowHdrWrapLength = rowHdrAllowanceWidth
                    fixedWidth = sum(w for w in self.rowHdrColWidth if w <= RENDER_UNITS_PER_CHAR)
                    adjustableWidth = sum(w for w in self.rowHdrColWidth if w > RENDER_UNITS_PER_CHAR)
                    if adjustableWidth> 0:
                        widthRatio = (rowHdrAllowanceWidth - fixedWidth) / adjustableWidth
                        for i in range(len(self.rowHdrColWidth)):
                            w = self.rowHdrColWidth[i]
                            if w > RENDER_UNITS_PER_CHAR:
                                self.rowHdrColWidth[i] = int(w * widthRatio)
            self.aspectEntryObjectIdsNode.clear()
            self.aspectEntryObjectIdsCell.clear()
            self.factPrototypeAspectEntryObjectIds.clear()
            self.table.initHeaderCellValue((self.modelTable.genLabel(lang=self.lang, strip=True) or  # use table label, if any 
                                            self.roledefinition),
                                           0, 0, (self.dataFirstCol - 2),
                                           (self.dataFirstRow - 2),
                                           XbrlTable.TG_TOP_LEFT_JUSTIFIED)
            self.zAspectStructuralNodes = defaultdict(set)
            self.zAxis(1, zTopStructuralNode, clearZchoices)
            xStructuralNodes = []
            colsFoundPlus1, _, _, _ = self.xAxis(self.dataFirstCol, self.colHdrTopRow, self.colHdrTopRow + self.colHdrRows - 1, 
                                                 xTopStructuralNode, xStructuralNodes, self.xAxisChildrenFirst.get(), True, True)
            _, rowsFoundPlus1 = self.yAxis(1, self.dataFirstRow,
                                           yTopStructuralNode, self.yAxisChildrenFirst.get(), True, True)
            self.table.resizeTable(rowsFoundPlus1-1,
                                   colsFoundPlus1+colAdjustment-1,
                                   clearData=False)
            for fp in self.factPrototypes: # dereference prior facts
                if fp is not None:
                    fp.clear()
            self.factPrototypes = []
            self.bodyCells(self.dataFirstRow, yTopStructuralNode, xStructuralNodes, self.zAspectStructuralNodes, self.yAxisChildrenFirst.get())
            self.table.clearModificationStatus()
            self.table.disableUnusedCells()
            self.table.resizeTableCells()
                
            # data cells
            #print("body cells done")
                
        self.modelXbrl.profileStat("viewTable_" + os.path.basename(viewTblELR), time.time() - startedAt)

        #self.gridView.config(scrollregion=self.gridView.bbox(constants.ALL))
        self.blockMenuEvents -= 1
dataset/ETHPy150Open Arelle/Arelle/arelle/ViewWinRenderedGrid.py/ViewRenderedGrid.view/swapped operands of `-`