From 6aef8159b1d2e634a43affd717a89765d692933c Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 20 Feb 2023 17:29:00 +0100 Subject: [PATCH 01/10] leveleditor: Fix use of removed `cmp()` function --- direct/src/leveleditor/ObjectPaletteUI.py | 8 ++++---- direct/src/leveleditor/ProtoPaletteUI.py | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/direct/src/leveleditor/ObjectPaletteUI.py b/direct/src/leveleditor/ObjectPaletteUI.py index bf84e3d492..833d2d24a1 100755 --- a/direct/src/leveleditor/ObjectPaletteUI.py +++ b/direct/src/leveleditor/ObjectPaletteUI.py @@ -62,11 +62,11 @@ class ObjectPaletteUI(wx.Panel): data1 = self.tree.GetItemText(item1) data2 = self.tree.GetItemText(item2) if self.opSort == self.opSortAlpha: - return cmp(data1, data2) + return (data1 > data2) - (data1 < data2) else: - index1 = self.palette.dataKeys.index(data1) - index2 = self.palette.dataKeys.index(data2) - return cmp(index1, index2) + index1 = self.palette.dataKeys.index(data1) + index2 = self.palette.dataKeys.index(data2) + return (index1 > index2) - (index1 < index2) def getSelected(self): return self.tree.GetItemPyData(self.tree.GetSelection()) diff --git a/direct/src/leveleditor/ProtoPaletteUI.py b/direct/src/leveleditor/ProtoPaletteUI.py index d9f047b55f..dce17751f7 100755 --- a/direct/src/leveleditor/ProtoPaletteUI.py +++ b/direct/src/leveleditor/ProtoPaletteUI.py @@ -196,9 +196,9 @@ class ProtoPaletteUI(wx.Panel): data1 = self.tree.GetItemText(item1) data2 = self.tree.GetItemText(item2) if self.opSort == self.opSortAlpha: - return cmp(data1, data2) + return (data1 > data2) - (data1 < data2) else: - items = list(self.palette.data.keys()) - index1 = items.index(data1) - index2 = items.index(data2) - return cmp(index1, index2) + items = list(self.palette.data.keys()) + index1 = items.index(data1) + index2 = items.index(data2) + return (index1 > index2) - (index1 < index2) From afd3df8ef18d60c2686431e6338194937df58a06 Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 20 Feb 2023 17:44:37 +0100 Subject: [PATCH 02/10] tkpanels: Fix use of removed `cmp()` function --- direct/src/tkpanels/AnimPanel.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/direct/src/tkpanels/AnimPanel.py b/direct/src/tkpanels/AnimPanel.py index 12bc1feefd..76c42225df 100644 --- a/direct/src/tkpanels/AnimPanel.py +++ b/direct/src/tkpanels/AnimPanel.py @@ -463,10 +463,8 @@ class ActorControl(Pmw.MegaWidget): playRateList = ['1/24.0', '0.1', '0.5', '1.0', '2.0', '5.0', '10.0'] playRate = '%0.1f' % self['actor'].getPlayRate(self['active']) if playRate not in playRateList: - def strCmp(a, b): - return cmp(eval(a), eval(b)) playRateList.append(playRate) - playRateList.sort(strCmp) + playRateList.sort(key=lambda s:eval(s)) playRateMenu = self.createcomponent( 'playRateMenu', (), None, Pmw.ComboBox, (interior,), From a3f6a62de0cac51cb5db30e7cef6ef2dceea91f8 Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 20 Feb 2023 18:04:04 +0100 Subject: [PATCH 03/10] showbase: Fix undefined function use in ProfileSession.py --- direct/src/showbase/ProfileSession.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/direct/src/showbase/ProfileSession.py b/direct/src/showbase/ProfileSession.py index 3470f0dc9e..51cbcd4f2f 100755 --- a/direct/src/showbase/ProfileSession.py +++ b/direct/src/showbase/ProfileSession.py @@ -33,7 +33,7 @@ class PercentStats(pstats.Stats): if self.files: print() indent = ' ' * 8 for func in self.top_level: - print(indent, func_get_function_name(func)) + print(indent, pstats.func_get_function_name(func)) print(indent, self.total_calls, "function calls", end=' ') if self.total_calls != self.prim_calls: From 127798437ff275abbe76d4619d0de84da036edfc Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 20 Feb 2023 18:04:22 +0100 Subject: [PATCH 04/10] particles: Fix missing import in ParticleFloorTest --- direct/src/particles/ParticleFloorTest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/direct/src/particles/ParticleFloorTest.py b/direct/src/particles/ParticleFloorTest.py index 3ee1bce319..c586e8fa48 100755 --- a/direct/src/particles/ParticleFloorTest.py +++ b/direct/src/particles/ParticleFloorTest.py @@ -1,5 +1,5 @@ -from panda3d.core import NodePath +from panda3d.core import NodePath, Vec3 from panda3d.physics import LinearVectorForce from direct.particles import ParticleEffect from direct.particles import Particles From 92e3dbbe58c8c810c8bd3722bf5734f2dabd6970 Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 20 Feb 2023 18:04:35 +0100 Subject: [PATCH 05/10] dist: Remove dead code in Icon class --- direct/src/p3d/DeploymentTools.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/direct/src/p3d/DeploymentTools.py b/direct/src/p3d/DeploymentTools.py index b7851ac947..8fe0e6775e 100644 --- a/direct/src/p3d/DeploymentTools.py +++ b/direct/src/p3d/DeploymentTools.py @@ -414,9 +414,6 @@ class Icon: for x in xrange(size): pixel = image2.get_pixel(x, size - y - 1) index = colors.index(pixel) - if index >= 256: - # Find closest pixel instead. - index = closest_indices[index - 256] fp.write(struct.pack(' Date: Mon, 20 Feb 2023 18:24:15 +0100 Subject: [PATCH 06/10] directdevices: Fix typo in DirectDeviceManager.normalizeChannel --- direct/src/directdevices/DirectDeviceManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/direct/src/directdevices/DirectDeviceManager.py b/direct/src/directdevices/DirectDeviceManager.py index 1ee3be6507..80ae1340cd 100644 --- a/direct/src/directdevices/DirectDeviceManager.py +++ b/direct/src/directdevices/DirectDeviceManager.py @@ -169,7 +169,7 @@ class DirectAnalogs(AnalogNode, DirectObject): def normalizeChannel(self, chan, minVal = -1, maxVal = 1, sf = 1.0): try: - return self.normalize(self[chan], minVal, maxVal, sfx) + return self.normalize(self[chan], minVal, maxVal, sf) except IndexError: return 0.0 From 718f72fe01d9d802f544a964d67c1ec8e32c092e Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 20 Feb 2023 18:25:28 +0100 Subject: [PATCH 07/10] cluster: Fix typo in ClusterServer.addControlMapping --- direct/src/cluster/ClusterServer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/direct/src/cluster/ClusterServer.py b/direct/src/cluster/ClusterServer.py index 511dc84cef..451b50c901 100644 --- a/direct/src/cluster/ClusterServer.py +++ b/direct/src/cluster/ClusterServer.py @@ -133,7 +133,7 @@ class ClusterServer(DirectObject.DirectObject): self.controlPriorities[objectName] = priority self.redoSortedPriorities() else: - self.notify.debug('attempt to add duplicate controlled object: '+name) + self.notify.debug('attempt to add duplicate controlled object: ' + objectName) def setControlMappingOffset(self,objectName,offset): if (objectName in self.controlMappings): From ccd1d4727d779b343a40e93a81948d0962ac4527 Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 20 Feb 2023 18:31:54 +0100 Subject: [PATCH 08/10] dist: Add hidden imports for older scipy version --- direct/src/dist/FreezeTool.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/direct/src/dist/FreezeTool.py b/direct/src/dist/FreezeTool.py index 7e77acdb4c..f057e87c17 100644 --- a/direct/src/dist/FreezeTool.py +++ b/direct/src/dist/FreezeTool.py @@ -86,7 +86,9 @@ hiddenImports = { 'pandas._libs.tslibs.conversion': ['pandas._libs.tslibs.base'], 'scipy.linalg': ['scipy.linalg.cython_blas', 'scipy.linalg.cython_lapack'], 'scipy.sparse.csgraph': ['scipy.sparse.csgraph._validation'], + 'scipy.spatial.qhull': ['scipy._lib.messagestream'], 'scipy.spatial._qhull': ['scipy._lib.messagestream'], + 'scipy.spatial.transform.rotation': ['scipy.spatial.transform._rotation_groups'], 'scipy.spatial.transform._rotation': ['scipy.spatial.transform._rotation_groups'], 'scipy.special._ufuncs': ['scipy.special._ufuncs_cxx'], 'scipy.stats._stats': ['scipy.special.cython_special'], From 93670b5942bcb8c48f90f02fe81e31198e3bae00 Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 20 Feb 2023 18:32:04 +0100 Subject: [PATCH 09/10] dist: Strip .abi3.so suffix from libraries --- direct/src/dist/commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/direct/src/dist/commands.py b/direct/src/dist/commands.py index 44243ee8b7..2619cac2ad 100644 --- a/direct/src/dist/commands.py +++ b/direct/src/dist/commands.py @@ -969,7 +969,7 @@ class build_apps(setuptools.Command): # Remove python version string if sys.version_info >= (3, 0): parts = basename.split('.') - if len(parts) >= 3 and '-' in parts[-2]: + if len(parts) >= 3 and ('-' in parts[-2] or parts[-2] == 'abi' + str(sys.version_info[0])): parts = parts[:-2] + parts[-1:] basename = '.'.join(parts) From 2e7dc9e4f4a3f95822656d71c53007eb416ce996 Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 20 Feb 2023 19:05:37 +0100 Subject: [PATCH 10/10] tests: Add unit test for GeomVertexFormat arrays list --- tests/gobj/test_geom_vertex_format.py | 114 ++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 tests/gobj/test_geom_vertex_format.py diff --git a/tests/gobj/test_geom_vertex_format.py b/tests/gobj/test_geom_vertex_format.py new file mode 100644 index 0000000000..d4c9472649 --- /dev/null +++ b/tests/gobj/test_geom_vertex_format.py @@ -0,0 +1,114 @@ +from panda3d.core import GeomVertexArrayFormat, GeomVertexFormat, Geom + + +def test_format_arrays(): + array1 = GeomVertexArrayFormat("vertex", 3, Geom.NT_float32, Geom.C_point) + array2 = GeomVertexArrayFormat("normal", 3, Geom.NT_float32, Geom.C_normal) + array3 = GeomVertexArrayFormat("color", 4, Geom.NT_float32, Geom.C_color) + array4 = GeomVertexArrayFormat("texcoord", 2, Geom.NT_float32, Geom.C_texcoord) + + # Verify initial refcounts + assert array1.get_ref_count() == 1 + assert array2.get_ref_count() == 1 + assert array3.get_ref_count() == 1 + assert array4.get_ref_count() == 1 + + format = GeomVertexFormat() + + def expect_arrays(*args): + assert format.get_num_arrays() == len(args) + assert len(format.arrays) == len(args) + assert tuple(format.arrays) == args + arrays = format.get_arrays() + assert tuple(arrays) == args + + assert array1.get_ref_count() == 1 + arrays.count(array1) * 2 + assert array2.get_ref_count() == 1 + arrays.count(array2) * 2 + assert array3.get_ref_count() == 1 + arrays.count(array3) * 2 + assert array4.get_ref_count() == 1 + arrays.count(array4) * 2 + + # Verify empty state + expect_arrays() + + # Append to end + format.add_array(array1) + expect_arrays(array1,) + format.add_array(array2) + expect_arrays(array1, array2) + format.add_array(array3) + expect_arrays(array1, array2, array3) + format.add_array(array4) + expect_arrays(array1, array2, array3, array4) + + # Verify other accessors + assert format.get_num_arrays() == 4 + assert len(format.arrays) == 4 + assert tuple(format.get_arrays()) == (array1, array2, array3, array4) + + # Remove from beginning + format.remove_array(0) + expect_arrays(array2, array3, array4) + format.remove_array(0) + expect_arrays(array3, array4) + format.remove_array(0) + expect_arrays(array4,) + format.remove_array(0) + expect_arrays() + + # Insert at end + format.insert_array(0, array1) + expect_arrays(array1,) + format.insert_array(1, array2) + expect_arrays(array1, array2) + format.insert_array(2, array3) + expect_arrays(array1, array2, array3) + format.insert_array(3, array4) + expect_arrays(array1, array2, array3, array4) + + # Remove from end + format.remove_array(3) + expect_arrays(array1, array2, array3) + format.remove_array(2) + expect_arrays(array1, array2) + format.remove_array(1) + expect_arrays(array1,) + format.remove_array(0) + expect_arrays() + + # Insert at beginning + format.insert_array(0, array4) + expect_arrays(array4,) + format.insert_array(0, array3) + expect_arrays(array3, array4) + format.insert_array(0, array2) + expect_arrays(array2, array3, array4) + format.insert_array(0, array1) + expect_arrays(array1, array2, array3, array4) + + # Remove from middle and insert back in middle + format.remove_array(2) + expect_arrays(array1, array2, array4) + format.insert_array(2, array3) + expect_arrays(array1, array2, array3, array4) + format.remove_array(1) + expect_arrays(array1, array3, array4) + format.remove_array(1) + expect_arrays(array1, array4) + format.insert_array(1, array2) + expect_arrays(array1, array2, array4) + format.insert_array(2, array3) + expect_arrays(array1, array2, array3, array4) + + # Clear + format.clear_arrays() + expect_arrays() + + # Add to end but with very high index + format.insert_array(0xffffffff, array1) + expect_arrays(array1,) + format.insert_array(0xffffffff, array2) + expect_arrays(array1, array2) + format.insert_array(0xffffffff, array3) + expect_arrays(array1, array2, array3) + format.insert_array(0xffffffff, array4) + expect_arrays(array1, array2, array3, array4)