From a472f8c5de48785ec4df269fcd24180e406050e6 Mon Sep 17 00:00:00 2001 From: Kyle Sunden Date: Sun, 1 Aug 2021 23:43:32 -0500 Subject: [PATCH] Remove all usage of python2_3.py (#1939) * Remove all usage of python2_3.py Technically these functions were exported at the top level of the library, this removes them without warning... If we want to we can bring them back for there, but I honestly don't think its needed, as we are py3 only now and have been for multiple releases. This may introduce a number of 'useless cast' or similar but those were always happening anyway This PR brought to you by sed * Update varname in hdf example to avoid collision with builtin * Clean up some leftover comments surrounding imports of compat code * Unnecessary string casts * Additional unnecessary casts * syntax error fix * more unnecessary casts * Yet more unnecessary casts --- examples/crosshair.py | 2 +- examples/hdf5.py | 6 ++-- examples/parallelize.py | 8 ++---- examples/relativity/relativity.py | 6 ++-- pyqtgraph/Qt/__init__.py | 3 +- pyqtgraph/WidgetGroup.py | 3 +- pyqtgraph/__init__.py | 11 +------- pyqtgraph/configfile.py | 11 ++++---- pyqtgraph/console/CmdInput.py | 6 ++-- pyqtgraph/console/Console.py | 3 +- pyqtgraph/dockarea/Dock.py | 3 +- pyqtgraph/dockarea/DockArea.py | 3 +- pyqtgraph/exporters/CSVExporter.py | 3 +- pyqtgraph/exporters/Exporter.py | 6 ++-- pyqtgraph/exporters/SVGExporter.py | 3 +- pyqtgraph/flowchart/Flowchart.py | 7 ++--- pyqtgraph/flowchart/library/Filters.py | 3 +- pyqtgraph/flowchart/library/functions.py | 5 ++-- pyqtgraph/functions.py | 14 ++++------ pyqtgraph/graphicsItems/AxisItem.py | 13 ++++----- pyqtgraph/graphicsItems/PlotDataItem.py | 14 +++++----- pyqtgraph/graphicsItems/PlotItem/PlotItem.py | 5 ++-- pyqtgraph/graphicsItems/ViewBox/ViewBox.py | 11 ++++---- .../graphicsItems/ViewBox/ViewBoxMenu.py | 3 +- pyqtgraph/metaarray/MetaArray.py | 9 +++--- pyqtgraph/multiprocess/parallelizer.py | 5 ++-- pyqtgraph/opengl/MeshData.py | 9 +++--- pyqtgraph/parametertree/Parameter.py | 7 ++--- pyqtgraph/parametertree/ParameterItem.py | 3 +- pyqtgraph/parametertree/parameterTypes.py | 28 +++++++++---------- pyqtgraph/python2_3.py | 25 ----------------- pyqtgraph/util/cprint.py | 9 +++--- pyqtgraph/widgets/ComboBox.py | 9 +++--- pyqtgraph/widgets/DataFilterWidget.py | 3 +- pyqtgraph/widgets/DataTreeWidget.py | 9 +++--- pyqtgraph/widgets/GroupBox.py | 4 +-- pyqtgraph/widgets/SpinBox.py | 27 ++++++++---------- pyqtgraph/widgets/TableWidget.py | 25 ++++++++--------- tests/dockarea/test_dock.py | 3 +- tests/parametertree/test_parametertypes.py | 6 ++-- tests/widgets/test_spinbox.py | 2 +- tests/widgets/test_tablewidget.py | 3 +- 42 files changed, 133 insertions(+), 205 deletions(-) delete mode 100644 pyqtgraph/python2_3.py diff --git a/examples/crosshair.py b/examples/crosshair.py index 2479fbe2..fc247442 100644 --- a/examples/crosshair.py +++ b/examples/crosshair.py @@ -32,7 +32,7 @@ p1.setAutoVisible(y=True) #create numpy arrays -#make the numbers large to show that the xrange shows data from 10000 to all the way 0 +#make the numbers large to show that the range shows data from 10000 to all the way 0 data1 = 10000 + 15000 * pg.gaussianFilter(np.random.random(size=10000), 10) + 3000 * np.random.random(size=10000) data2 = 15000 + 15000 * pg.gaussianFilter(np.random.random(size=10000), 10) + 3000 * np.random.random(size=10000) diff --git a/examples/hdf5.py b/examples/hdf5.py index 2ff89947..764edabc 100644 --- a/examples/hdf5.py +++ b/examples/hdf5.py @@ -51,9 +51,9 @@ class HDF5Plot(pg.PlotCurveItem): return # no ViewBox yet # Determine what data range must be read from HDF5 - xrange = vb.viewRange()[0] - start = max(0,int(xrange[0])-1) - stop = min(len(self.hdf5), int(xrange[1]+2)) + range_ = vb.viewRange()[0] + start = max(0,int(range_[0])-1) + stop = min(len(self.hdf5), int(range_[1]+2)) # Decide by how much we should downsample ds = int((stop-start) / self.limit) + 1 diff --git a/examples/parallelize.py b/examples/parallelize.py index b309aa31..9fff8e42 100644 --- a/examples/parallelize.py +++ b/examples/parallelize.py @@ -5,7 +5,6 @@ import time import numpy as np import pyqtgraph.multiprocess as mp import pyqtgraph as pg -from pyqtgraph.python2_3 import xrange print( "\n=================\nParallelize") @@ -32,7 +31,7 @@ start = time.time() with pg.ProgressDialog('processing serially..', maximum=len(tasks)) as dlg: for i, x in enumerate(tasks): tot = 0 - for j in xrange(size): + for j in range(size): tot += j * x results[i] = tot dlg += 1 @@ -46,7 +45,7 @@ start = time.time() with mp.Parallelize(enumerate(tasks), results=results2, workers=1, progressDialog='processing serially (using Parallelizer)..') as tasker: for i, x in tasker: tot = 0 - for j in xrange(size): + for j in range(size): tot += j * x tasker.results[i] = tot print( "\nParallel time, 1 worker: %0.2f" % (time.time() - start)) @@ -57,9 +56,8 @@ start = time.time() with mp.Parallelize(enumerate(tasks), results=results3, progressDialog='processing in parallel..') as tasker: for i, x in tasker: tot = 0 - for j in xrange(size): + for j in range(size): tot += j * x tasker.results[i] = tot print( "\nParallel time, %d workers: %0.2f" % (mp.Parallelize.suggestedWorkerCount(), time.time() - start)) print( "Results match serial: %s" % str(results3 == results)) - diff --git a/examples/relativity/relativity.py b/examples/relativity/relativity.py index d4c2eaa6..62a78e40 100644 --- a/examples/relativity/relativity.py +++ b/examples/relativity/relativity.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import numpy as np import collections import sys, os @@ -6,7 +7,6 @@ from pyqtgraph.Qt import QtGui, QtCore from pyqtgraph.parametertree import Parameter, ParameterTree from pyqtgraph.parametertree import types as pTypes import pyqtgraph.configfile -from pyqtgraph.python2_3 import xrange from time import perf_counter @@ -520,7 +520,7 @@ class Simulation: dt = self.dt tVals = np.linspace(0, dt*(nPts-1), nPts) for cl in self.clocks.values(): - for i in xrange(1,nPts): + for i in range(1,nPts): nextT = tVals[i] while True: tau1, tau2 = cl.accelLimits() @@ -566,7 +566,7 @@ class Simulation: ## These are the set of proper times (in the reference frame) that will be simulated ptVals = np.linspace(ref.pt, ref.pt + dt*(nPts-1), nPts) - for i in xrange(1,nPts): + for i in range(1,nPts): ## step reference clock ahead one time step in its proper time nextPt = ptVals[i] ## this is where (when) we want to end up diff --git a/pyqtgraph/Qt/__init__.py b/pyqtgraph/Qt/__init__.py index cf286d67..0a2431d6 100644 --- a/pyqtgraph/Qt/__init__.py +++ b/pyqtgraph/Qt/__init__.py @@ -12,7 +12,6 @@ This module exists to smooth out some of the differences between PySide and PyQt import os, sys, re, time, subprocess, warnings -from ..python2_3 import asUnicode PYSIDE = 'PySide' PYSIDE2 = 'PySide2' @@ -73,7 +72,7 @@ class _StringIO(object): self.data.append(data) def getvalue(self): - return ''.join(map(asUnicode, self.data)).encode('utf8') + return ''.join(map(str, self.data)).encode('utf8') def _loadUiType(uiFile): diff --git a/pyqtgraph/WidgetGroup.py b/pyqtgraph/WidgetGroup.py index c993882e..6a66bd20 100644 --- a/pyqtgraph/WidgetGroup.py +++ b/pyqtgraph/WidgetGroup.py @@ -10,7 +10,6 @@ of a large group of widgets. from .Qt import QtCore, QtGui import weakref, inspect -from .python2_3 import asUnicode __all__ = ['WidgetGroup'] @@ -45,7 +44,7 @@ def comboState(w): except AttributeError: pass if data is None: - return asUnicode(w.itemText(ind)) + return str(w.itemText(ind)) else: return data diff --git a/pyqtgraph/__init__.py b/pyqtgraph/__init__.py index 9c326bed..a3543740 100644 --- a/pyqtgraph/__init__.py +++ b/pyqtgraph/__init__.py @@ -9,7 +9,7 @@ __version__ = '0.12.2' ### import all the goodies and add some helper functions for easy CLI use ## 'Qt' is a local module; it is intended mainly to cover up the differences -## between PyQt4 and PySide. +## between PyQt and PySide. from .Qt import QtCore, QtGui, mkQApp from .Qt import exec_ as exec @@ -22,14 +22,6 @@ import numpy ## pyqtgraph requires numpy import os, sys -## check python version -## Allow anything >= 2.7 -if sys.version_info[0] < 2 or (sys.version_info[0] == 2 and sys.version_info[1] < 6): - raise Exception("Pyqtgraph requires Python version 2.6 or greater (this is %d.%d)" % (sys.version_info[0], sys.version_info[1])) - -## helpers for 2/3 compatibility -from . import python2_3 - ## in general openGL is poorly supported with Qt+GraphicsView. ## we only enable it where the performance benefit is critical. ## Note this only applies to 2D graphics; 3D graphics always use OpenGL. @@ -282,7 +274,6 @@ from .ThreadsafeTimer import * # indirect imports used within library from .GraphicsScene import GraphicsScene -from .python2_3 import asUnicode from .util.cupy_helper import getCupy # indirect imports known to be used outside of the library diff --git a/pyqtgraph/configfile.py b/pyqtgraph/configfile.py index 674c1620..69832710 100644 --- a/pyqtgraph/configfile.py +++ b/pyqtgraph/configfile.py @@ -14,7 +14,6 @@ import numpy from collections import OrderedDict import tempfile from . import units -from .python2_3 import asUnicode, basestring from .Qt import QtCore from .Point import Point from .colormap import ColorMap @@ -40,7 +39,7 @@ class ParseError(Exception): def writeConfigFile(data, fname): s = genString(data) - with open(fname, 'w') as fd: + with open(fname, 'wt') as fd: fd.write(s) @@ -56,8 +55,8 @@ def readConfigFile(fname): try: #os.chdir(newDir) ## bad. - with open(fname) as fd: - s = asUnicode(fd.read()) + with open(fname, "rt") as fd: + s = fd.read() s = s.replace("\r\n", "\n") s = s.replace("\r", "\n") data = parseString(s)[1] @@ -73,7 +72,7 @@ def readConfigFile(fname): def appendConfigFile(data, fname): s = genString(data) - with open(fname, 'a') as fd: + with open(fname, 'at') as fd: fd.write(s) @@ -97,7 +96,7 @@ def genString(data, indent=''): def parseString(lines, start=0): data = OrderedDict() - if isinstance(lines, basestring): + if isinstance(lines, str): lines = lines.replace("\\\n", "") lines = lines.split('\n') lines = [l for l in lines if re.search(r'\S', l) and not re.match(r'\s*#', l)] ## remove empty lines diff --git a/pyqtgraph/console/CmdInput.py b/pyqtgraph/console/CmdInput.py index 83de64de..751bd4ec 100644 --- a/pyqtgraph/console/CmdInput.py +++ b/pyqtgraph/console/CmdInput.py @@ -1,5 +1,5 @@ +# -*- coding: utf-8 -*- from ..Qt import QtCore, QtGui -from ..python2_3 import asUnicode class CmdInput(QtGui.QLineEdit): @@ -25,10 +25,10 @@ class CmdInput(QtGui.QLineEdit): self.execCmd() else: super().keyPressEvent(ev) - self.history[0] = asUnicode(self.text()) + self.history[0] = self.text() def execCmd(self): - cmd = asUnicode(self.text()) + cmd = self.text() if len(self.history) == 1 or cmd != self.history[1]: self.history.insert(1, cmd) self.history[0] = "" diff --git a/pyqtgraph/console/Console.py b/pyqtgraph/console/Console.py index c8b045f2..6261ecb9 100644 --- a/pyqtgraph/console/Console.py +++ b/pyqtgraph/console/Console.py @@ -3,7 +3,6 @@ import sys, re, traceback, subprocess import pickle from ..Qt import QtCore, QtGui, QT_LIB -from ..python2_3 import basestring from .. import exceptionHandling as exceptionHandling from .. import getConfigOption from ..functions import SignalBlock @@ -454,7 +453,7 @@ class ConsoleWidget(QtGui.QWidget): if filterStr != '': if isinstance(exc, Exception): msg = traceback.format_exception_only(type(exc), exc) - elif isinstance(exc, basestring): + elif isinstance(exc, str): msg = exc else: msg = repr(exc) diff --git a/pyqtgraph/dockarea/Dock.py b/pyqtgraph/dockarea/Dock.py index 1f6ca711..a6807d7d 100644 --- a/pyqtgraph/dockarea/Dock.py +++ b/pyqtgraph/dockarea/Dock.py @@ -3,7 +3,6 @@ from ..Qt import QtCore, QtGui from .DockDrop import * from ..widgets.VerticalLabel import VerticalLabel -from ..python2_3 import asUnicode class Dock(QtGui.QWidget, DockDrop): @@ -125,7 +124,7 @@ class Dock(QtGui.QWidget, DockDrop): """ Gets the text displayed in the title bar for this dock. """ - return asUnicode(self.label.text()) + return self.label.text() def setTitle(self, text): """ diff --git a/pyqtgraph/dockarea/DockArea.py b/pyqtgraph/dockarea/DockArea.py index 86538f75..503a8468 100644 --- a/pyqtgraph/dockarea/DockArea.py +++ b/pyqtgraph/dockarea/DockArea.py @@ -4,7 +4,6 @@ from ..Qt import QtGui from .Container import * from .DockDrop import * from .Dock import Dock -from ..python2_3 import basestring class DockArea(Container, QtGui.QWidget, DockDrop): @@ -61,7 +60,7 @@ class DockArea(Container, QtGui.QWidget, DockDrop): container = self.topContainer neighbor = None else: - if isinstance(relativeTo, basestring): + if isinstance(relativeTo, str): relativeTo = self.docks[relativeTo] container = self.getContainer(relativeTo) if container is None: diff --git a/pyqtgraph/exporters/CSVExporter.py b/pyqtgraph/exporters/CSVExporter.py index 26825466..a134e788 100644 --- a/pyqtgraph/exporters/CSVExporter.py +++ b/pyqtgraph/exporters/CSVExporter.py @@ -3,7 +3,6 @@ from ..Qt import QtCore from .Exporter import Exporter from ..parametertree import Parameter from .. import PlotItem -from ..python2_3 import asUnicode translate = QtCore.QCoreApplication.translate @@ -60,7 +59,7 @@ class CSVExporter(Exporter): sep = '\t' with open(fileName, 'w') as fd: - fd.write(sep.join(map(asUnicode, header)) + '\n') + fd.write(sep.join(map(str, header)) + '\n') i = 0 numFormat = '%%0.%dg' % self.params['precision'] numRows = max([len(d[0]) for d in data]) diff --git a/pyqtgraph/exporters/Exporter.py b/pyqtgraph/exporters/Exporter.py index ca3cd606..4a582d33 100644 --- a/pyqtgraph/exporters/Exporter.py +++ b/pyqtgraph/exporters/Exporter.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- from ..widgets.FileDialog import FileDialog from ..Qt import QtGui, QtCore -from ..python2_3 import asUnicode, basestring from ..GraphicsScene import GraphicsScene import os, re LastExportDirectory = None @@ -49,7 +48,7 @@ class Exporter(object): self.fileDialog.setFileMode(QtGui.QFileDialog.FileMode.AnyFile) self.fileDialog.setAcceptMode(QtGui.QFileDialog.AcceptMode.AcceptSave) if filter is not None: - if isinstance(filter, basestring): + if isinstance(filter, str): self.fileDialog.setNameFilter(filter) elif isinstance(filter, list): self.fileDialog.setNameFilters(filter) @@ -63,13 +62,12 @@ class Exporter(object): return def fileSaveFinished(self, fileName): - fileName = asUnicode(fileName) global LastExportDirectory LastExportDirectory = os.path.split(fileName)[0] ## If file name does not match selected extension, append it now ext = os.path.splitext(fileName)[1].lower().lstrip('.') - selectedExt = re.search(r'\*\.(\w+)\b', asUnicode(self.fileDialog.selectedNameFilter())) + selectedExt = re.search(r'\*\.(\w+)\b', self.fileDialog.selectedNameFilter()) if selectedExt is not None: selectedExt = selectedExt.groups()[0].lower() if ext != selectedExt: diff --git a/pyqtgraph/exporters/SVGExporter.py b/pyqtgraph/exporters/SVGExporter.py index 3dc12b2c..a4b84b65 100644 --- a/pyqtgraph/exporters/SVGExporter.py +++ b/pyqtgraph/exporters/SVGExporter.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- from .Exporter import Exporter -from ..python2_3 import asUnicode from ..parametertree import Parameter from ..Qt import QtGui, QtCore, QtSvg from .. import debug @@ -79,7 +78,7 @@ class SVGExporter(Exporter): QtGui.QApplication.clipboard().setMimeData(md) else: with open(fileName, 'wb') as fh: - fh.write(asUnicode(xml).encode('utf-8')) + fh.write(str(xml).encode('utf-8')) # Includes space for extra attributes xmlHeader = """\ diff --git a/pyqtgraph/flowchart/Flowchart.py b/pyqtgraph/flowchart/Flowchart.py index e735cab7..2e0148dc 100644 --- a/pyqtgraph/flowchart/Flowchart.py +++ b/pyqtgraph/flowchart/Flowchart.py @@ -17,7 +17,6 @@ from .. import configfile as configfile from .. import dockarea as dockarea from . import FlowchartGraphicsView from .. import functions as fn -from ..python2_3 import asUnicode def strDict(d): return dict([(str(k), v) for k, v in d.items()]) @@ -512,7 +511,6 @@ class Flowchart(Node): self.fileDialog.fileSelected.connect(self.loadFile) return ## NOTE: was previously using a real widget for the file dialog's parent, but this caused weird mouse event bugs.. - fileName = asUnicode(fileName) state = configfile.readConfigFile(fileName) self.restoreState(state, clear=True) self.viewBox.autoRange() @@ -532,7 +530,6 @@ class Flowchart(Node): self.fileDialog.show() self.fileDialog.fileSelected.connect(self.saveFile) return - fileName = asUnicode(fileName) configfile.writeConfigFile(self.saveState(), fileName) self.sigFileSaved.emit(fileName) @@ -653,7 +650,7 @@ class FlowchartCtrlWidget(QtGui.QWidget): #self.setCurrentFile(newFile) def fileSaved(self, fileName): - self.setCurrentFile(asUnicode(fileName)) + self.setCurrentFile(fileName) self.ui.saveBtn.success("Saved.") def saveClicked(self): @@ -682,7 +679,7 @@ class FlowchartCtrlWidget(QtGui.QWidget): #self.setCurrentFile(newFile) def setCurrentFile(self, fileName): - self.currentFileName = asUnicode(fileName) + self.currentFileName = fileName if fileName is None: self.ui.fileNameLabel.setText("[ new ]") else: diff --git a/pyqtgraph/flowchart/library/Filters.py b/pyqtgraph/flowchart/library/Filters.py index 1bd4dec2..3ced7f67 100644 --- a/pyqtgraph/flowchart/library/Filters.py +++ b/pyqtgraph/flowchart/library/Filters.py @@ -3,7 +3,6 @@ import numpy as np from . import functions from ... import functions as pgfn from .common import * -from ...python2_3 import xrange from ... import PolyLineROI from ... import Point from ... import metaarray as metaarray @@ -320,7 +319,7 @@ class RemovePeriodic(CtrlNode): ## flatten spikes at f0 and harmonics f0 = self.ctrls['f0'].value() - for i in xrange(1, self.ctrls['harmonics'].value()+2): + for i in range(1, self.ctrls['harmonics'].value()+2): f = f0 * i # target frequency ## determine index range to check for this frequency diff --git a/pyqtgraph/flowchart/library/functions.py b/pyqtgraph/flowchart/library/functions.py index a50aeaca..0e951a3c 100644 --- a/pyqtgraph/flowchart/library/functions.py +++ b/pyqtgraph/flowchart/library/functions.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import numpy as np from ...metaarray import MetaArray -from ...python2_3 import xrange def downsample(data, n, axis=0, xvals='subsample'): @@ -308,7 +307,7 @@ def suggestDType(x): return float elif isinstance(x, int): return int - #elif isinstance(x, basestring): ## don't try to guess correct string length; use object instead. + #elif isinstance(x, str): ## don't try to guess correct string length; use object instead. #return ' 0: if s[-len(suffix):] != suffix: @@ -253,7 +251,7 @@ def mkColor(*args): """ err = 'Not sure how to make a color from "%s"' % str(args) if len(args) == 1: - if isinstance(args[0], basestring): + if isinstance(args[0], str): c = args[0] if len(c) == 1: try: @@ -2197,9 +2195,9 @@ def arrayToQPolygonF(x, y): #index = tetFields[0] + tetFields[1]*2 + tetFields[2]*4 + tetFields[3]*8 ### add facets - #for i in xrange(index.shape[0]): # data x-axis - #for j in xrange(index.shape[1]): # data y-axis - #for k in xrange(index.shape[2]): # data z-axis + #for i in range(index.shape[0]): # data x-axis + #for j in range(index.shape[1]): # data y-axis + #for k in range(index.shape[2]): # data z-axis #for f in indexFacets[index[i,j,k]]: # faces to generate for this tet #pts = [] #for l in [0,1,2]: # points in this face diff --git a/pyqtgraph/graphicsItems/AxisItem.py b/pyqtgraph/graphicsItems/AxisItem.py index cf98d6ec..def1e28d 100644 --- a/pyqtgraph/graphicsItems/AxisItem.py +++ b/pyqtgraph/graphicsItems/AxisItem.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- from ..Qt import QtGui, QtCore -from ..python2_3 import asUnicode import numpy as np from ..Point import Point from .. import debug as debug @@ -314,16 +313,15 @@ class AxisItem(GraphicsWidget): if not self.autoSIPrefix or self.autoSIPrefixScale == 1.0: units = '' else: - units = asUnicode('(x%g)') % (1.0/self.autoSIPrefixScale) + units = '(x%g)' % (1.0/self.autoSIPrefixScale) else: - #print repr(self.labelUnitPrefix), repr(self.labelUnits) - units = asUnicode('(%s%s)') % (asUnicode(self.labelUnitPrefix), asUnicode(self.labelUnits)) + units = '(%s%s)' % (self.labelUnitPrefix, self.labelUnits) - s = asUnicode('%s %s') % (asUnicode(self.labelText), asUnicode(units)) + s = '%s %s' % (self.labelText, units) style = ';'.join(['%s: %s' % (k, self.labelStyle[k]) for k in self.labelStyle]) - return asUnicode("%s") % (style, asUnicode(s)) + return "%s" % (style, s) def _updateMaxTextSize(self, x): ## Informs that the maximum tick size orthogonal to the axis has @@ -1070,7 +1068,7 @@ class AxisItem(GraphicsWidget): if s is None: rects.append(None) else: - br = p.boundingRect(QtCore.QRectF(0, 0, 100, 100), QtCore.Qt.AlignmentFlag.AlignCenter, asUnicode(s)) + br = p.boundingRect(QtCore.QRectF(0, 0, 100, 100), QtCore.Qt.AlignmentFlag.AlignCenter, s) ## boundingRect is usually just a bit too large ## (but this probably depends on per-font metrics?) br.setHeight(br.height() * 0.8) @@ -1112,7 +1110,6 @@ class AxisItem(GraphicsWidget): vstr = strings[j] if vstr is None: ## this tick was ignored because it is out of bounds continue - vstr = asUnicode(vstr) x = tickPositions[i][j] #textRect = p.boundingRect(QtCore.QRectF(0, 0, 100, 100), QtCore.Qt.AlignmentFlag.AlignCenter, vstr) textRect = rects[j] diff --git a/pyqtgraph/graphicsItems/PlotDataItem.py b/pyqtgraph/graphicsItems/PlotDataItem.py index 0c6b68a8..75655175 100644 --- a/pyqtgraph/graphicsItems/PlotDataItem.py +++ b/pyqtgraph/graphicsItems/PlotDataItem.py @@ -1041,7 +1041,7 @@ def isSequence(obj): ##print rec1, dtype #arr = np.empty(len(self), dtype=dtype) #arr[0] = tuple(rec1.values()) - #for i in xrange(1, len(self)): + #for i in range(1, len(self)): #arr[i] = tuple(self[i].values()) #return arr @@ -1052,7 +1052,7 @@ def isSequence(obj): #return self.data[arg] #def __getitem__list(self, arg): - #if isinstance(arg, basestring): + #if isinstance(arg, str): #return [d.get(arg, None) for d in self.data] #elif isinstance(arg, int): #return self.data[arg] @@ -1063,7 +1063,7 @@ def isSequence(obj): #raise TypeError(type(arg)) #def __getitem__dict(self, arg): - #if isinstance(arg, basestring): + #if isinstance(arg, str): #return self.data[arg] #elif isinstance(arg, int): #return dict([(k, v[arg]) for k, v in self.data.items()]) @@ -1080,7 +1080,7 @@ def isSequence(obj): #self.data[arg] = val #def __setitem__list(self, arg, val): - #if isinstance(arg, basestring): + #if isinstance(arg, str): #if len(val) != len(self.data): #raise Exception("Values (%d) and data set (%d) are not the same length." % (len(val), len(self.data))) #for i, rec in enumerate(self.data): @@ -1094,7 +1094,7 @@ def isSequence(obj): #raise TypeError(type(arg)) #def __setitem__dict(self, arg, val): - #if isinstance(arg, basestring): + #if isinstance(arg, str): #if len(val) != len(self.data[arg]): #raise Exception("Values (%d) and data set (%d) are not the same length." % (len(val), len(self.data[arg]))) #self.data[arg] = val @@ -1109,13 +1109,13 @@ def isSequence(obj): #def _orderArgs(self, args): ### return args in (int, str) order - #if isinstance(args[0], basestring): + #if isinstance(args[0], str): #return (args[1], args[0]) #else: #return args #def __iter__(self): - #for i in xrange(len(self)): + #for i in range(len(self)): #yield self[i] #def __len__(self): diff --git a/pyqtgraph/graphicsItems/PlotItem/PlotItem.py b/pyqtgraph/graphicsItems/PlotItem/PlotItem.py index d3e163b1..d8b9893f 100644 --- a/pyqtgraph/graphicsItems/PlotItem/PlotItem.py +++ b/pyqtgraph/graphicsItems/PlotItem/PlotItem.py @@ -21,7 +21,6 @@ from ... import functions as fn from ... import icons from ...Qt import QtGui, QtCore, QT_LIB from ...WidgetGroup import WidgetGroup -from ...python2_3 import basestring from ...widgets.FileDialog import FileDialog translate = QtCore.QCoreApplication.translate @@ -252,7 +251,7 @@ class PlotItem(GraphicsWidget): labels[label] = kargs[label] del kargs[label] for k in labels: - if isinstance(labels[k], basestring): + if isinstance(labels[k], str): labels[k] = (labels[k],) self.setLabel(k, *labels[k]) @@ -1133,7 +1132,7 @@ class PlotItem(GraphicsWidget): if k == 'title': self.setTitle(v) else: - if isinstance(v, basestring): + if isinstance(v, str): v = (v,) self.setLabel(k, *v) diff --git a/pyqtgraph/graphicsItems/ViewBox/ViewBox.py b/pyqtgraph/graphicsItems/ViewBox/ViewBox.py index 915390bd..fae4a19b 100644 --- a/pyqtgraph/graphicsItems/ViewBox/ViewBox.py +++ b/pyqtgraph/graphicsItems/ViewBox/ViewBox.py @@ -5,7 +5,6 @@ import math from copy import deepcopy import numpy as np from ...Qt import QtGui, QtCore -from ...python2_3 import basestring from ...Point import Point from ... import functions as fn from .. ItemGroup import ItemGroup @@ -306,7 +305,7 @@ class ViewBox(GraphicsWidget): for v in state['linkedViews']: if isinstance(v, weakref.ref): v = v() - if v is None or isinstance(v, basestring): + if v is None or isinstance(v, str): views.append(v) else: views.append(v.name) @@ -936,7 +935,7 @@ class ViewBox(GraphicsWidget): Link X or Y axes of two views and unlink any previously connected axes. *axis* must be ViewBox.XAxis or ViewBox.YAxis. If view is None, the axis is left unlinked. """ - if isinstance(view, basestring): + if isinstance(view, str): if view == '': view = None else: @@ -964,7 +963,7 @@ class ViewBox(GraphicsWidget): pass - if view is None or isinstance(view, basestring): + if view is None or isinstance(view, str): self.state['linkedViews'][axis] = view else: self.state['linkedViews'][axis] = weakref.ref(view) @@ -997,7 +996,7 @@ class ViewBox(GraphicsWidget): ## Return the linked view for axis *ax*. ## this method _always_ returns either a ViewBox or None. v = self.state['linkedViews'][ax] - if v is None or isinstance(v, basestring): + if v is None or isinstance(v, str): return None else: return v() ## dereference weakref pointer. If the reference is dead, this returns None @@ -1642,7 +1641,7 @@ class ViewBox(GraphicsWidget): for ax in [0,1]: link = self.state['linkedViews'][ax] - if isinstance(link, basestring): ## axis has not been linked yet; see if it's possible now + if isinstance(link, str): ## axis has not been linked yet; see if it's possible now for v in nv: if link == v.name: self.linkView(ax, v) diff --git a/pyqtgraph/graphicsItems/ViewBox/ViewBoxMenu.py b/pyqtgraph/graphicsItems/ViewBox/ViewBoxMenu.py index 51138129..9e955c94 100644 --- a/pyqtgraph/graphicsItems/ViewBox/ViewBoxMenu.py +++ b/pyqtgraph/graphicsItems/ViewBox/ViewBoxMenu.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- from ...Qt import QtCore, QtGui, QT_LIB -from ...python2_3 import asUnicode from ...WidgetGroup import WidgetGroup import importlib @@ -238,7 +237,7 @@ class ViewBoxMenu(QtGui.QMenu): for i in [0,1]: c = self.ctrl[i].linkCombo - current = asUnicode(c.currentText()) + current = c.currentText() c.blockSignals(True) changed = True try: diff --git a/pyqtgraph/metaarray/MetaArray.py b/pyqtgraph/metaarray/MetaArray.py index 7d852ec7..d4441dd2 100644 --- a/pyqtgraph/metaarray/MetaArray.py +++ b/pyqtgraph/metaarray/MetaArray.py @@ -13,7 +13,6 @@ More info at http://www.scipy.org/Cookbook/MetaArray import copy, os import pickle import numpy as np -from ..python2_3 import basestring import warnings @@ -121,7 +120,7 @@ class MetaArray(object): defaultCompression = None ## Types allowed as axis or column names - nameTypes = [basestring, tuple] + nameTypes = [str, tuple] @staticmethod def isNameType(var): return any(isinstance(var, t) for t in MetaArray.nameTypes) @@ -412,7 +411,7 @@ class MetaArray(object): if type(axis) == int: ind = [slice(None)]*axis ind.append(order) - elif isinstance(axis, basestring): + elif isinstance(axis, str): ind = (slice(axis, order),) return self[tuple(ind)] @@ -469,7 +468,7 @@ class MetaArray(object): return tuple(nInd) def _interpretAxis(self, axis): - if isinstance(axis, basestring) or isinstance(axis, tuple): + if isinstance(axis, (str, tuple)): return self._getAxis(axis) else: return axis @@ -937,7 +936,7 @@ class MetaArray(object): val = root.attrs[k] if isinstance(val, bytes): val = val.decode() - if isinstance(val, basestring): ## strings need to be re-evaluated to their original types + if isinstance(val, str): ## strings need to be re-evaluated to their original types try: val = eval(val) except: diff --git a/pyqtgraph/multiprocess/parallelizer.py b/pyqtgraph/multiprocess/parallelizer.py index b0f064bd..26a3c164 100644 --- a/pyqtgraph/multiprocess/parallelizer.py +++ b/pyqtgraph/multiprocess/parallelizer.py @@ -2,7 +2,6 @@ import os, sys, time, multiprocessing, re from .processes import ForkedProcess from .remoteproxy import ClosedError -from ..python2_3 import basestring, xrange class CanceledError(Exception): @@ -64,7 +63,7 @@ class Parallelize(object): self.showProgress = False if progressDialog is not None: self.showProgress = True - if isinstance(progressDialog, basestring): + if isinstance(progressDialog, str): progressDialog = {'labelText': progressDialog} from ..widgets.ProgressDialog import ProgressDialog self.progressDlg = ProgressDialog(**progressDialog) @@ -120,7 +119,7 @@ class Parallelize(object): ## break up tasks into one set per worker workers = self.workers - chunks = [[] for i in xrange(workers)] + chunks = [[] for i in range(workers)] i = 0 for i in range(len(self.tasks)): chunks[i%workers].append(self.tasks[i]) diff --git a/pyqtgraph/opengl/MeshData.py b/pyqtgraph/opengl/MeshData.py index 8aac31f8..73c99052 100644 --- a/pyqtgraph/opengl/MeshData.py +++ b/pyqtgraph/opengl/MeshData.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import numpy as np from ..Qt import QtGui -from ..python2_3 import xrange class MeshData(object): @@ -209,7 +208,7 @@ class MeshData(object): faceNorms = self.faceNormals() vertFaces = self.vertexFaces() self._vertexNormals = np.empty(self._vertexes.shape, dtype=float) - for vindex in xrange(self._vertexes.shape[0]): + for vindex in range(self._vertexes.shape[0]): faces = vertFaces[vindex] if len(faces) == 0: self._vertexNormals[vindex] = (0,0,0) @@ -318,7 +317,7 @@ class MeshData(object): self._vertexFaces = [] self._faceNormals = None self._vertexNormals = None - for i in xrange(faces.shape[0]): + for i in range(faces.shape[0]): face = faces[i] inds = [] for j in range(face.shape[0]): @@ -350,8 +349,8 @@ class MeshData(object): Return list mapping each vertex index to a list of face indexes that use the vertex. """ if self._vertexFaces is None: - self._vertexFaces = [[] for i in xrange(len(self.vertexes()))] - for i in xrange(self._faces.shape[0]): + self._vertexFaces = [[] for i in range(len(self.vertexes()))] + for i in range(self._faces.shape[0]): face = self._faces[i] for ind in face: self._vertexFaces[ind].append(i) diff --git a/pyqtgraph/parametertree/Parameter.py b/pyqtgraph/parametertree/Parameter.py index b123d192..0fa7571e 100644 --- a/pyqtgraph/parametertree/Parameter.py +++ b/pyqtgraph/parametertree/Parameter.py @@ -3,7 +3,6 @@ from .. import functions as fn from ..Qt import QtCore import weakref, re from collections import OrderedDict -from ..python2_3 import asUnicode, basestring from .ParameterItem import ParameterItem import warnings @@ -190,7 +189,7 @@ class Parameter(QtCore.QObject): self.blockTreeChangeEmit = 0 #self.monitoringChildren = False ## prevent calling monitorChildren more than once - if not isinstance(name, basestring): + if not isinstance(name, str): raise Exception("Parameter must have a string name specified in opts.") self.setName(name) @@ -701,7 +700,7 @@ class Parameter(QtCore.QObject): param[('child', 'grandchild')] = value """ - if isinstance(names, basestring): + if isinstance(names, str): names = (names,) return self.param(*names).setValue(value) @@ -730,7 +729,7 @@ class Parameter(QtCore.QObject): return self.child(*names) def __repr__(self): - return asUnicode("<%s '%s' at 0x%x>") % (self.__class__.__name__, self.name(), id(self)) + return "<%s '%s' at 0x%x>" % (self.__class__.__name__, self.name(), id(self)) def __getattr__(self, attr): ## Leaving this undocumented because I might like to remove it in the future.. diff --git a/pyqtgraph/parametertree/ParameterItem.py b/pyqtgraph/parametertree/ParameterItem.py index 1b4924b2..cff56484 100644 --- a/pyqtgraph/parametertree/ParameterItem.py +++ b/pyqtgraph/parametertree/ParameterItem.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- from ..Qt import QtGui, QtCore -from ..python2_3 import asUnicode translate = QtCore.QCoreApplication.translate @@ -138,7 +137,7 @@ class ParameterItem(QtGui.QTreeWidgetItem): if self.ignoreNameColumnChange: return try: - newName = self.param.setName(asUnicode(self.text(col))) + newName = self.param.setName(str(self.text(col))) except Exception: self.setText(0, self.param.name()) raise diff --git a/pyqtgraph/parametertree/parameterTypes.py b/pyqtgraph/parametertree/parameterTypes.py index 0b69c217..b810948d 100644 --- a/pyqtgraph/parametertree/parameterTypes.py +++ b/pyqtgraph/parametertree/parameterTypes.py @@ -1,5 +1,5 @@ +# -*- coding: utf-8 -*- from ..Qt import QtCore, QtGui, QtWidgets, QT_LIB -from ..python2_3 import asUnicode from .Parameter import Parameter, registerParameterType from .ParameterItem import ParameterItem from ..widgets.SpinBox import SpinBox @@ -146,8 +146,8 @@ class WidgetParameterItem(ParameterItem): w = QtWidgets.QLineEdit() w.setStyleSheet('border: 0px') w.sigChanged = w.editingFinished - w.value = lambda: asUnicode(w.text()) - w.setValue = lambda v: w.setText(asUnicode(v)) + w.value = w.text + w.setValue = w.setText w.sigChanging = w.textChanged elif t == 'color': w = ColorButton() @@ -168,7 +168,7 @@ class WidgetParameterItem(ParameterItem): self.hideWidget = False self.asSubItem = True else: - raise Exception("Unknown type '%s'" % asUnicode(t)) + raise Exception("Unknown type '%s'" % str(t)) return w def widgetEventFilter(self, obj, ev): @@ -231,11 +231,11 @@ class WidgetParameterItem(ParameterItem): value = self.param.value() opts = self.param.opts if isinstance(self.widget, QtWidgets.QAbstractSpinBox): - text = asUnicode(self.widget.lineEdit().text()) + text = self.widget.lineEdit().text() elif isinstance(self.widget, QtWidgets.QComboBox): text = self.widget.currentText() else: - text = asUnicode(value) + text = str(value) self.displayLabel.setText(text) def widgetValueChanged(self): @@ -388,7 +388,7 @@ class SimpleParameter(Parameter): 'int': int, 'float': float, 'bool': bool, - 'str': asUnicode, + 'str': str, 'color': self._interpColor, 'colormap': self._interpColormap, }[self.opts['type']] @@ -480,7 +480,7 @@ class GroupParameterItem(ParameterItem): """ if self.addWidget.currentIndex() == 0: return - typ = asUnicode(self.addWidget.currentText()) + typ = self.addWidget.currentText() self.param.addNew(typ) self.addWidget.setCurrentIndex(0) @@ -579,7 +579,7 @@ class ListParameterItem(WidgetParameterItem): return w def value(self): - key = asUnicode(self.widget.currentText()) + key = self.widget.currentText() return self.forward.get(key, None) @@ -601,7 +601,7 @@ class ListParameterItem(WidgetParameterItem): self.forward, self.reverse = ListParameter.mapping(limits) try: self.widget.blockSignals(True) - val = self.targetValue #asUnicode(self.widget.currentText()) + val = self.targetValue self.widget.clear() for k in self.forward: @@ -663,7 +663,7 @@ class ListParameter(Parameter): reverse[1].append(k) else: for v in limits: - n = asUnicode(v) + n = str(v) forward[n] = v reverse[0].append(v) reverse[1].append(n) @@ -877,7 +877,7 @@ class FileParameterItem(WidgetParameterItem): def setValue(self, value): self._value = value - self.widget.setText(asUnicode(value)) + self.widget.setText(str(value)) def value(self): return self._value @@ -919,7 +919,7 @@ class FileParameterItem(WidgetParameterItem): lbl = self.displayLabel if value is None: value = self.param.value() - value = asUnicode(value) + value = str(value) font = lbl.font() metrics = QtGui.QFontMetricsF(font) value = metrics.elidedText(value, QtCore.Qt.TextElideMode.ElideLeft, lbl.width()-5) @@ -985,7 +985,7 @@ class SliderParameterItem(WidgetParameterItem): def updateDisplayLabel(self, value=None): if value is None: value = self.param.value() - value = asUnicode(value) + value = str(value) if self._suffix is None: suffixTxt = '' else: diff --git a/pyqtgraph/python2_3.py b/pyqtgraph/python2_3.py deleted file mode 100644 index 952b49b1..00000000 --- a/pyqtgraph/python2_3.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Helper functions that smooth out the differences between python 2 and 3. -""" -import sys - -def asUnicode(x): - if sys.version_info[0] == 2: - if isinstance(x, unicode): - return x - elif isinstance(x, str): - return x.decode('UTF-8') - else: - return unicode(x) - else: - return str(x) - - -if sys.version_info[0] == 3: - basestring = str - xrange = range -else: - import __builtin__ - basestring = __builtin__.basestring - xrange = __builtin__.xrange diff --git a/pyqtgraph/util/cprint.py b/pyqtgraph/util/cprint.py index 533ae4b0..d5fb60c4 100644 --- a/pyqtgraph/util/cprint.py +++ b/pyqtgraph/util/cprint.py @@ -8,7 +8,6 @@ import sys from .colorama.winterm import WinTerm, WinColor, WinStyle from .colorama.win32 import windll -from ..python2_3 import basestring _WIN = sys.platform.startswith('win') if windll is not None: @@ -63,7 +62,7 @@ def cprint(stream, *args, **kwds): cprint('stderr', 1, 'This is in red.', -1) """ - if isinstance(stream, basestring): + if isinstance(stream, str): stream = kwds.get('stream', 'stdout') err = stream == 'stderr' stream = getattr(sys, stream) @@ -74,7 +73,7 @@ def cprint(stream, *args, **kwds): if _WIN: # convert to win32 calls for arg in args: - if isinstance(arg, basestring): + if isinstance(arg, str): stream.write(arg) else: kwds = WIN[arg] @@ -82,14 +81,14 @@ def cprint(stream, *args, **kwds): else: # convert to ANSI for arg in args: - if isinstance(arg, basestring): + if isinstance(arg, str): stream.write(arg) else: stream.write(ANSI[arg]) else: # ignore colors for arg in args: - if isinstance(arg, basestring): + if isinstance(arg, str): stream.write(arg) def cout(*args): diff --git a/pyqtgraph/widgets/ComboBox.py b/pyqtgraph/widgets/ComboBox.py index a690404e..b0af09a0 100644 --- a/pyqtgraph/widgets/ComboBox.py +++ b/pyqtgraph/widgets/ComboBox.py @@ -2,7 +2,6 @@ import sys from ..Qt import QtGui from collections import OrderedDict -from ..python2_3 import asUnicode, basestring __all__ = ['ComboBox'] @@ -64,7 +63,7 @@ class ComboBox(QtGui.QComboBox): """ if self.count() == 0: return None - text = asUnicode(self.currentText()) + text = self.currentText() return self._items[text] def ignoreIndexChange(func): @@ -131,7 +130,7 @@ class ComboBox(QtGui.QComboBox): # current index has changed; need to remember new 'chosen text' if self._ignoreIndexChange: return - self._chosenText = asUnicode(self.currentText()) + self._chosenText = self.currentText() def setCurrentIndex(self, index): QtGui.QComboBox.setCurrentIndex(self, index) @@ -160,7 +159,7 @@ class ComboBox(QtGui.QComboBox): def addItem(self, *args, **kwds): # Need to handle two different function signatures for QComboBox.addItem try: - if isinstance(args[0], basestring): + if isinstance(args[0], str): text = args[0] if len(args) == 2: value = args[1] @@ -230,7 +229,7 @@ class ComboBox(QtGui.QComboBox): except AttributeError: pass if data is None: - return asUnicode(self.itemText(ind)) + return self.itemText(ind) else: return data diff --git a/pyqtgraph/widgets/DataFilterWidget.py b/pyqtgraph/widgets/DataFilterWidget.py index a6f4d09f..0288cc3a 100644 --- a/pyqtgraph/widgets/DataFilterWidget.py +++ b/pyqtgraph/widgets/DataFilterWidget.py @@ -4,7 +4,6 @@ from .. import parametertree as ptree import numpy as np from collections import OrderedDict from .. import functions as fn -from ..python2_3 import basestring __all__ = ['DataFilterWidget'] @@ -196,7 +195,7 @@ class EnumFilterItem(ptree.types.SimpleParameter): if isinstance(valopts, bool): enabled = valopts vname = str(val) - elif isinstance(valopts, basestring): + elif isinstance(valopts, str): enabled = True vname = valopts elif isinstance(valopts, tuple): diff --git a/pyqtgraph/widgets/DataTreeWidget.py b/pyqtgraph/widgets/DataTreeWidget.py index 4c6f33a3..b9a5dd53 100644 --- a/pyqtgraph/widgets/DataTreeWidget.py +++ b/pyqtgraph/widgets/DataTreeWidget.py @@ -2,7 +2,6 @@ from ..Qt import QtGui from collections import OrderedDict from .TableWidget import TableWidget -from ..python2_3 import asUnicode import types, traceback import numpy as np @@ -55,7 +54,7 @@ class DataTreeWidget(QtGui.QTreeWidget): if len(desc) > 100: desc = desc[:97] + '...' if widget is None: - widget = QtGui.QPlainTextEdit(asUnicode(data)) + widget = QtGui.QPlainTextEdit(str(data)) widget.setMaximumHeight(200) widget.setReadOnly(True) @@ -69,7 +68,7 @@ class DataTreeWidget(QtGui.QTreeWidget): # recurse to children for key, data in childs.items(): - self.buildTree(data, node, asUnicode(key), path=path+(key,)) + self.buildTree(data, node, str(key), path=path+(key,)) def parse(self, data): """ @@ -117,11 +116,11 @@ class DataTreeWidget(QtGui.QTreeWidget): #(i, {'file': child[0], 'line': child[1], 'function': child[2], 'code': child[3]}) #for i, child in enumerate(frames)]) #childs = OrderedDict([(i, ch) for i,ch in enumerate(frames)]) - widget = QtGui.QPlainTextEdit(asUnicode('\n'.join(frames))) + widget = QtGui.QPlainTextEdit('\n'.join(frames)) widget.setMaximumHeight(200) widget.setReadOnly(True) else: - desc = asUnicode(data) + desc = str(data) return typeStr, desc, childs, widget diff --git a/pyqtgraph/widgets/GroupBox.py b/pyqtgraph/widgets/GroupBox.py index 233e3ae3..ad7c25b9 100644 --- a/pyqtgraph/widgets/GroupBox.py +++ b/pyqtgraph/widgets/GroupBox.py @@ -1,6 +1,6 @@ +# -*- coding: utf-8 -*- from ..Qt import QtGui, QtCore from .PathButton import PathButton -from ..python2_3 import basestring __all__ = ['GroupBox'] @@ -41,7 +41,7 @@ class GroupBox(QtGui.QGroupBox): self.collapseBtn.clicked.connect(self.toggleCollapsed) - if len(args) > 0 and isinstance(args[0], basestring): + if len(args) > 0 and isinstance(args[0], str): self.setTitle(args[0]) def toggleCollapsed(self): diff --git a/pyqtgraph/widgets/SpinBox.py b/pyqtgraph/widgets/SpinBox.py index bd7b8e49..75f24cb7 100644 --- a/pyqtgraph/widgets/SpinBox.py +++ b/pyqtgraph/widgets/SpinBox.py @@ -4,7 +4,6 @@ import decimal import re from ..Qt import QtGui, QtCore -from ..python2_3 import asUnicode, basestring from ..SignalProxy import SignalProxy from .. import functions as fn @@ -90,7 +89,7 @@ class SpinBox(QtGui.QAbstractSpinBox): 'decimals': 6, - 'format': asUnicode("{scaledValue:.{decimals}g}{suffixGap}{siPrefix}{suffix}"), + 'format': "{scaledValue:.{decimals}g}{suffixGap}{siPrefix}{suffix}", 'regex': fn.FLOAT_REGEX, 'evalFunc': decimal.Decimal, @@ -99,7 +98,7 @@ class SpinBox(QtGui.QAbstractSpinBox): self.decOpts = ['step', 'minStep'] - self.val = decimal.Decimal(asUnicode(value)) ## Value is precise decimal. Ordinary math not allowed. + self.val = decimal.Decimal(str(value)) ## Value is precise decimal. Ordinary math not allowed. self.updateText() self.skipValidate = False self.setCorrectionMode(self.CorrectionMode.CorrectToPreviousValue) @@ -181,12 +180,12 @@ class SpinBox(QtGui.QAbstractSpinBox): elif k == 'max': self.setMaximum(v, update=False) elif k in ['step', 'minStep']: - self.opts[k] = decimal.Decimal(asUnicode(v)) + self.opts[k] = decimal.Decimal(str(v)) elif k == 'value': pass ## don't set value until bounds have been set elif k == 'format': - self.opts[k] = asUnicode(v) - elif k == 'regex' and isinstance(v, basestring): + self.opts[k] = str(v) + elif k == 'regex' and isinstance(v, str): self.opts[k] = re.compile(v) elif k in self.opts: self.opts[k] = v @@ -220,7 +219,7 @@ class SpinBox(QtGui.QAbstractSpinBox): self.opts['minStep'] = ms if 'format' not in opts: - self.opts['format'] = asUnicode("{value:d}{suffixGap}{suffix}") + self.opts['format'] = "{value:d}{suffixGap}{suffix}" if self.opts['dec']: if self.opts.get('minStep') is None: @@ -234,7 +233,7 @@ class SpinBox(QtGui.QAbstractSpinBox): def setMaximum(self, m, update=True): """Set the maximum allowed value (or None for no limit)""" if m is not None: - m = decimal.Decimal(asUnicode(m)) + m = decimal.Decimal(str(m)) self.opts['bounds'][1] = m if update: self.setValue() @@ -242,7 +241,7 @@ class SpinBox(QtGui.QAbstractSpinBox): def setMinimum(self, m, update=True): """Set the minimum allowed value (or None for no limit)""" if m is not None: - m = decimal.Decimal(asUnicode(m)) + m = decimal.Decimal(str(m)) self.opts['bounds'][0] = m if update: self.setValue() @@ -298,7 +297,7 @@ class SpinBox(QtGui.QAbstractSpinBox): Select the numerical portion of the text to allow quick editing by the user. """ le = self.lineEdit() - text = asUnicode(le.text()) + text = le.text() m = self.opts['regex'].match(text) if m is None: return @@ -358,7 +357,7 @@ class SpinBox(QtGui.QAbstractSpinBox): value = int(value) if not isinstance(value, decimal.Decimal): - value = decimal.Decimal(asUnicode(value)) + value = decimal.Decimal(str(value)) prev, self.val = self.val, value changed = not fn.eq(value, prev) # use fn.eq to handle nan @@ -558,9 +557,7 @@ class SpinBox(QtGui.QAbstractSpinBox): def editingFinishedEvent(self): """Edit has finished; set value.""" - #print "Edit finished." - if asUnicode(self.lineEdit().text()) == self.lastText: - #print "no text change." + if self.lineEdit().text() == self.lastText: return try: val = self.interpret() @@ -568,10 +565,8 @@ class SpinBox(QtGui.QAbstractSpinBox): return if val is False: - #print "value invalid:", str(self.lineEdit().text()) return if val == self.val: - #print "no value change:", val, self.val return self.setValue(val, delaySignal=False) ## allow text update so that values are reformatted pretty-like diff --git a/pyqtgraph/widgets/TableWidget.py b/pyqtgraph/widgets/TableWidget.py index 06abd1e9..e8bfee9a 100644 --- a/pyqtgraph/widgets/TableWidget.py +++ b/pyqtgraph/widgets/TableWidget.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import numpy as np from ..Qt import QtGui, QtCore -from ..python2_3 import asUnicode, basestring from .. import metaarray translate = QtCore.QCoreApplication.translate @@ -170,7 +169,7 @@ class TableWidget(QtGui.QTableWidget): Added in version 0.9.9. """ - if format is not None and not isinstance(format, basestring) and not callable(format): + if format is not None and not isinstance(format, str) and not callable(format): raise ValueError("Format argument must string, callable, or None. (got %s)" % format) self._formats[column] = format @@ -203,19 +202,19 @@ class TableWidget(QtGui.QTableWidget): if isinstance(data, list) or isinstance(data, tuple): return lambda d: d.__iter__(), None elif isinstance(data, dict): - return lambda d: iter(d.values()), list(map(asUnicode, data.keys())) + return lambda d: iter(d.values()), list(map(str, data.keys())) elif (hasattr(data, 'implements') and data.implements('MetaArray')): if data.axisHasColumns(0): - header = [asUnicode(data.columnName(0, i)) for i in range(data.shape[0])] + header = [str(data.columnName(0, i)) for i in range(data.shape[0])] elif data.axisHasValues(0): - header = list(map(asUnicode, data.xvals(0))) + header = list(map(str, data.xvals(0))) else: header = None return self.iterFirstAxis, header elif isinstance(data, np.ndarray): return self.iterFirstAxis, None elif isinstance(data, np.void): - return self.iterate, list(map(asUnicode, data.dtype.names)) + return self.iterate, list(map(str, data.dtype.names)) elif data is None: return (None,None) elif np.isscalar(data): @@ -311,22 +310,22 @@ class TableWidget(QtGui.QTableWidget): if self.horizontalHeadersSet: row = [] if self.verticalHeadersSet: - row.append(asUnicode('')) + row.append('') for c in columns: - row.append(asUnicode(self.horizontalHeaderItem(c).text())) + row.append(self.horizontalHeaderItem(c).text()) data.append(row) for r in rows: row = [] if self.verticalHeadersSet: - row.append(asUnicode(self.verticalHeaderItem(r).text())) + row.append(self.verticalHeaderItem(r).text()) for c in columns: item = self.item(r, c) if item is not None: - row.append(asUnicode(item.value)) + row.append(str(item.value)) else: - row.append(asUnicode('')) + row.append('') data.append(row) s = '' @@ -427,7 +426,7 @@ class TableWidgetItem(QtGui.QTableWidgetItem): Added in version 0.9.9. """ - if fmt is not None and not isinstance(fmt, basestring) and not callable(fmt): + if fmt is not None and not isinstance(fmt, str) and not callable(fmt): raise ValueError("Format argument must string, callable, or None. (got %s)" % fmt) self._format = fmt self._updateText() @@ -473,7 +472,7 @@ class TableWidgetItem(QtGui.QTableWidgetItem): else: return self._format % self.value else: - return asUnicode(self.value) + return str(self.value) def __lt__(self, other): if self.sortMode == 'index' and hasattr(other, 'index'): diff --git a/tests/dockarea/test_dock.py b/tests/dockarea/test_dock.py index e5063f8d..632277af 100644 --- a/tests/dockarea/test_dock.py +++ b/tests/dockarea/test_dock.py @@ -1,10 +1,11 @@ +# -*- coding: utf-8 -*- import pyqtgraph as pg pg.mkQApp() import pyqtgraph.dockarea as da def test_dock(): - name = pg.asUnicode("évènts_zàhéér") + name = "évènts_zàhéér" dock = da.Dock(name=name) # make sure unicode names work correctly assert dock.name() == name diff --git a/tests/parametertree/test_parametertypes.py b/tests/parametertree/test_parametertypes.py index 855fdad4..a5c2ea6c 100644 --- a/tests/parametertree/test_parametertypes.py +++ b/tests/parametertree/test_parametertypes.py @@ -1,8 +1,8 @@ +# -*- coding: utf-8 -*- import sys from pyqtgraph.Qt import QtGui, QtCore import pyqtgraph.parametertree as pt import pyqtgraph as pg -from pyqtgraph.python2_3 import asUnicode from pyqtgraph.functions import eq import numpy as np @@ -44,7 +44,7 @@ def test_types(): all_objs = { 'int0': 0, 'int':7, 'float': -0.35, 'bigfloat': 1e129, 'npfloat': np.float64(5), 'npint': np.int64(5),'npinf': np.inf, 'npnan': np.nan, 'bool': True, - 'complex': 5+3j, 'str': '#xxx', 'unicode': asUnicode('µ'), + 'complex': 5+3j, 'str': '#xxx', 'unicode': 'µ', 'list': [1,2,3], 'dict': {'1': 2}, 'color': pg.mkColor('k'), 'brush': pg.mkBrush('k'), 'pen': pg.mkPen('k'), 'none': None } @@ -63,7 +63,7 @@ def test_types(): # str (should be able to make a string out of any type) types = all_objs.keys() strtyp = str if sys.version[0] >= '3' else unicode - check_param_types(param.child('str'), strtyp, asUnicode, '', all_objs, types) + check_param_types(param.child('str'), strtyp, str, '', all_objs, types) # bool (should be able to make a boolean out of any type?) types = all_objs.keys() diff --git a/tests/widgets/test_spinbox.py b/tests/widgets/test_spinbox.py index 19a7bbfa..3c85bc32 100644 --- a/tests/widgets/test_spinbox.py +++ b/tests/widgets/test_spinbox.py @@ -30,7 +30,7 @@ def test_SpinBox_formatting(value, expected_text, opts): sb.setValue(value) assert sb.value() == value - assert pg.asUnicode(sb.text()) == expected_text + assert sb.text() == expected_text @pytest.mark.parametrize("suffix", ["", "V"]) diff --git a/tests/widgets/test_tablewidget.py b/tests/widgets/test_tablewidget.py index 05774de3..2d2580cc 100644 --- a/tests/widgets/test_tablewidget.py +++ b/tests/widgets/test_tablewidget.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import pyqtgraph as pg import numpy as np from collections import OrderedDict @@ -112,7 +113,7 @@ def test_TableWidget(): if isinstance(item.value, float): return "%d %f" % (item.index, item.value) else: - return pg.asUnicode(item.value) + return str(item.value) w.setFormat(fmt) assert isinstance(item.value, float) assert isinstance(item.index, int)