Hello community,

here is the log from the commit of package python-visvis for openSUSE:Factory 
checked in at 2020-07-17 20:52:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-visvis (Old)
 and      /work/SRC/openSUSE:Factory/.python-visvis.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-visvis"

Fri Jul 17 20:52:38 2020 rev:3 rq:821494 version:1.12.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-visvis/python-visvis.changes      
2019-12-23 22:45:23.266022092 +0100
+++ /work/SRC/openSUSE:Factory/.python-visvis.new.3592/python-visvis.changes    
2020-07-17 20:53:29.469085574 +0200
@@ -1,0 +2,7 @@
+Fri Jul 17 11:08:59 UTC 2020 - Marketa Calabkova <[email protected]>
+
+- update to 1.2.4
+  * tests included in sdist
+  * minor bugfixes
+
+-------------------------------------------------------------------

Old:
----
  visvis-1.12.2.tar.gz

New:
----
  visvis-1.12.4.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-visvis.spec ++++++
--- /var/tmp/diff_new_pack.gadYog/_old  2020-07-17 20:53:33.477089755 +0200
+++ /var/tmp/diff_new_pack.gadYog/_new  2020-07-17 20:53:33.477089755 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-visvis
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define         skip_python2 1
 Name:           python-visvis
-Version:        1.12.2
+Version:        1.12.4
 Release:        0
 Summary:        An object oriented approach to visualization of 1D to 4D data
 License:        BSD-3-Clause
@@ -38,6 +38,7 @@
 BuildArch:      noarch
 # SECTION test requirements
 BuildRequires:  %{python_module Pillow}
+BuildRequires:  %{python_module imageio}
 BuildRequires:  %{python_module numpy}
 BuildRequires:  %{python_module opengl}
 BuildRequires:  %{python_module pytest}
@@ -64,6 +65,9 @@
 %python_install
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
+%check
+%pytest
+
 %files %{python_files}
 %license license.txt
 %{python_sitelib}/*

++++++ visvis-1.12.2.tar.gz -> visvis-1.12.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/PKG-INFO new/visvis-1.12.4/PKG-INFO
--- old/visvis-1.12.2/PKG-INFO  2019-10-03 10:21:56.000000000 +0200
+++ new/visvis-1.12.4/PKG-INFO  2020-05-25 15:45:27.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: visvis
-Version: 1.12.2
+Version: 1.12.4
 Summary: An object oriented approach to visualization of 1D to 4D data.
 Home-page: https://github.com/almarklein/visvis
 Author: Almar Klein
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/__init__.py 
new/visvis-1.12.4/__init__.py
--- old/visvis-1.12.2/__init__.py       2019-10-03 10:21:35.000000000 +0200
+++ new/visvis-1.12.4/__init__.py       2020-05-25 15:44:54.000000000 +0200
@@ -45,7 +45,7 @@
 
 """
 
-__version__  = '1.12.2'
+__version__  = '1.12.4'
 
 # Loose sub-modules and sub-packages
 from visvis.utils.pypoints import Point, Pointset, Aarray, Quaternion
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/backends/qtcommon.py 
new/visvis-1.12.4/backends/qtcommon.py
--- old/visvis-1.12.2/backends/qtcommon.py      2019-10-01 12:30:11.000000000 
+0200
+++ new/visvis-1.12.4/backends/qtcommon.py      2020-05-25 15:16:26.000000000 
+0200
@@ -9,6 +9,7 @@
 
 """
 import os
+import ctypes
 
 import visvis
 from visvis import BaseFigure, events, constants
@@ -19,11 +20,13 @@
 qtlib_is_v2 = False
 if qtlib == 'pyside':
     from PySide import QtCore, QtGui, QtOpenGL
+    QtWidgets = QtGui
 elif qtlib == 'pyside2':
     from PySide2 import QtCore, QtWidgets, QtGui, QtOpenGL
     qtlib_is_v2 = True
 elif qtlib == 'pyqt4':
     from PyQt4 import QtCore, QtGui, QtOpenGL
+    QtWidgets = QtGui
 elif qtlib == 'pyqt5':
     from PyQt5 import QtCore, QtWidgets, QtGui, QtOpenGL
     qtlib_is_v2 = True
@@ -47,6 +50,22 @@
 # by redrawing on a Activate event which helps a lot)
 
 
+def enable_hidpi():
+    """ Enable high-res displays.
+    """
+    try:
+        # See https://github.com/pyzo/pyzo/pull/700 why we seem to need both
+        ctypes.windll.shcore.SetProcessDpiAwareness(1)  # global dpi aware
+        ctypes.windll.shcore.SetProcessDpiAwareness(2)  # per-monitor dpi aware
+    except Exception:
+        pass  # fail on non-windows
+    try:
+        QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, 
True)
+    except Exception:
+        pass  # fail on older Qt's
+
+enable_hidpi()
+
 
 KEYMAP = {  QtCore.Qt.Key_Shift: constants.KEY_SHIFT,
             QtCore.Qt.Key_Alt: constants.KEY_ALT,
@@ -108,7 +127,7 @@
         
         # Set pixel ratio for highdpi displays
         try:
-            self.figure._devicePixelRatio = self.devicePixelRatioo()
+            self.figure._devicePixelRatio = float(self.devicePixelRatioF())
         except Exception:
             self.figure._devicePixelRatio = 1.0
             
Binary files old/visvis-1.12.2/processing/__init__.pyc and 
new/visvis-1.12.4/processing/__init__.pyc differ
Binary files old/visvis-1.12.2/processing/__pycache__/__init__.cpython-34.pyc 
and new/visvis-1.12.4/processing/__pycache__/__init__.cpython-34.pyc differ
Binary files old/visvis-1.12.2/processing/__pycache__/__init__.cpython-35.pyc 
and new/visvis-1.12.4/processing/__pycache__/__init__.cpython-35.pyc differ
Binary files old/visvis-1.12.2/processing/__pycache__/__init__.cpython-36.pyc 
and new/visvis-1.12.4/processing/__pycache__/__init__.cpython-36.pyc differ
Binary files old/visvis-1.12.2/processing/__pycache__/__init__.cpython-37.pyc 
and new/visvis-1.12.4/processing/__pycache__/__init__.cpython-37.pyc differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/calculateFlatNormals.cpython-34.pyc 
and 
new/visvis-1.12.4/processing/__pycache__/calculateFlatNormals.cpython-34.pyc 
differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/calculateFlatNormals.cpython-35.pyc 
and 
new/visvis-1.12.4/processing/__pycache__/calculateFlatNormals.cpython-35.pyc 
differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/calculateFlatNormals.cpython-36.pyc 
and 
new/visvis-1.12.4/processing/__pycache__/calculateFlatNormals.cpython-36.pyc 
differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/calculateFlatNormals.cpython-37.pyc 
and 
new/visvis-1.12.4/processing/__pycache__/calculateFlatNormals.cpython-37.pyc 
differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/calculateNormals.cpython-34.pyc and 
new/visvis-1.12.4/processing/__pycache__/calculateNormals.cpython-34.pyc differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/calculateNormals.cpython-35.pyc and 
new/visvis-1.12.4/processing/__pycache__/calculateNormals.cpython-35.pyc differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/calculateNormals.cpython-36.pyc and 
new/visvis-1.12.4/processing/__pycache__/calculateNormals.cpython-36.pyc differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/calculateNormals.cpython-37.pyc and 
new/visvis-1.12.4/processing/__pycache__/calculateNormals.cpython-37.pyc differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/combineMeshes.cpython-34.pyc and 
new/visvis-1.12.4/processing/__pycache__/combineMeshes.cpython-34.pyc differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/combineMeshes.cpython-35.pyc and 
new/visvis-1.12.4/processing/__pycache__/combineMeshes.cpython-35.pyc differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/combineMeshes.cpython-36.pyc and 
new/visvis-1.12.4/processing/__pycache__/combineMeshes.cpython-36.pyc differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/combineMeshes.cpython-37.pyc and 
new/visvis-1.12.4/processing/__pycache__/combineMeshes.cpython-37.pyc differ
Binary files old/visvis-1.12.2/processing/__pycache__/lineToMesh.cpython-34.pyc 
and new/visvis-1.12.4/processing/__pycache__/lineToMesh.cpython-34.pyc differ
Binary files old/visvis-1.12.2/processing/__pycache__/lineToMesh.cpython-35.pyc 
and new/visvis-1.12.4/processing/__pycache__/lineToMesh.cpython-35.pyc differ
Binary files old/visvis-1.12.2/processing/__pycache__/lineToMesh.cpython-36.pyc 
and new/visvis-1.12.4/processing/__pycache__/lineToMesh.cpython-36.pyc differ
Binary files old/visvis-1.12.2/processing/__pycache__/lineToMesh.cpython-37.pyc 
and new/visvis-1.12.4/processing/__pycache__/lineToMesh.cpython-37.pyc differ
Binary files old/visvis-1.12.2/processing/__pycache__/statistics.cpython-34.pyc 
and new/visvis-1.12.4/processing/__pycache__/statistics.cpython-34.pyc differ
Binary files old/visvis-1.12.2/processing/__pycache__/statistics.cpython-35.pyc 
and new/visvis-1.12.4/processing/__pycache__/statistics.cpython-35.pyc differ
Binary files old/visvis-1.12.2/processing/__pycache__/statistics.cpython-36.pyc 
and new/visvis-1.12.4/processing/__pycache__/statistics.cpython-36.pyc differ
Binary files old/visvis-1.12.2/processing/__pycache__/statistics.cpython-37.pyc 
and new/visvis-1.12.4/processing/__pycache__/statistics.cpython-37.pyc differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/unwindFaces.cpython-34.pyc and 
new/visvis-1.12.4/processing/__pycache__/unwindFaces.cpython-34.pyc differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/unwindFaces.cpython-35.pyc and 
new/visvis-1.12.4/processing/__pycache__/unwindFaces.cpython-35.pyc differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/unwindFaces.cpython-36.pyc and 
new/visvis-1.12.4/processing/__pycache__/unwindFaces.cpython-36.pyc differ
Binary files 
old/visvis-1.12.2/processing/__pycache__/unwindFaces.cpython-37.pyc and 
new/visvis-1.12.4/processing/__pycache__/unwindFaces.cpython-37.pyc differ
Binary files old/visvis-1.12.2/processing/calculateFlatNormals.pyc and 
new/visvis-1.12.4/processing/calculateFlatNormals.pyc differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/processing/calculateNormals.py 
new/visvis-1.12.4/processing/calculateNormals.py
--- old/visvis-1.12.2/processing/calculateNormals.py    2019-03-27 
15:57:21.000000000 +0100
+++ new/visvis-1.12.4/processing/calculateNormals.py    2020-05-25 
15:18:22.000000000 +0200
@@ -151,7 +151,7 @@
         if np.isnan(tmp).sum():
             tmp = defaultNormal
         normals[i,:] = -tmp
-    print('calculated normals in %1.2 s' % (time.time()-t0))
+    print('calculated normals in %1.2f s' % (time.time()-t0))
     
     # Store normals
     mesh._normals = normals
Binary files old/visvis-1.12.2/processing/calculateNormals.pyc and 
new/visvis-1.12.4/processing/calculateNormals.pyc differ
Binary files old/visvis-1.12.2/processing/combineMeshes.pyc and 
new/visvis-1.12.4/processing/combineMeshes.pyc differ
Binary files old/visvis-1.12.2/processing/lineToMesh.pyc and 
new/visvis-1.12.4/processing/lineToMesh.pyc differ
Binary files old/visvis-1.12.2/processing/statistics.pyc and 
new/visvis-1.12.4/processing/statistics.pyc differ
Binary files old/visvis-1.12.2/processing/unwindFaces.pyc and 
new/visvis-1.12.4/processing/unwindFaces.pyc differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/setup.cfg new/visvis-1.12.4/setup.cfg
--- old/visvis-1.12.2/setup.cfg 2019-03-28 14:12:21.000000000 +0100
+++ new/visvis-1.12.4/setup.cfg 2020-05-25 15:17:38.000000000 +0200
@@ -53,6 +53,7 @@
     E266,E731,E128,E306,E305,I,D,T,CG,
     E201,E202,E303,W293,E231,E228,E125,E261,E701,E702,E227,E241,E221,E222,E713,
     E251,E116,E114,E262,W503,E741,W504,W605
+    N
 
 max-line-length: 99
 
Binary files old/visvis-1.12.2/tests/__pycache__/conftest.cpython-36-PYTEST.pyc 
and new/visvis-1.12.4/tests/__pycache__/conftest.cpython-36-PYTEST.pyc differ
Binary files 
old/visvis-1.12.2/tests/__pycache__/test_functions.cpython-36-PYTEST.pyc and 
new/visvis-1.12.4/tests/__pycache__/test_functions.cpython-36-PYTEST.pyc differ
Binary files 
old/visvis-1.12.2/tests/__pycache__/test_import.cpython-36-PYTEST.pyc and 
new/visvis-1.12.4/tests/__pycache__/test_import.cpython-36-PYTEST.pyc differ
Binary files 
old/visvis-1.12.2/tests/__pycache__/test_processing.cpython-36-PYTEST.pyc and 
new/visvis-1.12.4/tests/__pycache__/test_processing.cpython-36-PYTEST.pyc differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/tests/conftest.py 
new/visvis-1.12.4/tests/conftest.py
--- old/visvis-1.12.2/tests/conftest.py 1970-01-01 01:00:00.000000000 +0100
+++ new/visvis-1.12.4/tests/conftest.py 2017-06-01 02:05:28.000000000 +0200
@@ -0,0 +1,8 @@
+import os
+import sys
+import pytest
+
[email protected](scope="session", autouse=True)
+def execute_before_any_test():
+    if os.getenv('TEST_INSTALL') not in ('1', 'true'):
+        sys.path.insert(0, '..')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/tests/test_functions.py 
new/visvis-1.12.4/tests/test_functions.py
--- old/visvis-1.12.2/tests/test_functions.py   1970-01-01 01:00:00.000000000 
+0100
+++ new/visvis-1.12.4/tests/test_functions.py   2020-05-25 15:41:38.000000000 
+0200
@@ -0,0 +1,15 @@
+import os
+
+
+def test_im_read_write():
+    import visvis as vv
+    im = vv.imread('astronaut.png')
+    assert im.shape == (512, 512, 3)
+    vv.imwrite(os.path.expanduser('~/astronaut2.png'), im)
+
+
+def test_mesh_read_write():
+    import visvis as vv
+    m = vv.meshRead('bunny.ssdf')
+    assert isinstance(m, vv.BaseMesh)
+    vv.meshWrite(os.path.expanduser('~/bunny2.stl'), m)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/tests/test_import.py 
new/visvis-1.12.4/tests/test_import.py
--- old/visvis-1.12.2/tests/test_import.py      1970-01-01 01:00:00.000000000 
+0100
+++ new/visvis-1.12.4/tests/test_import.py      2017-06-01 02:05:28.000000000 
+0200
@@ -0,0 +1,12 @@
+
+def test_visvis_import():
+    import visvis as vv
+    import visvis.vvio
+    
+    assert vv
+    assert vv.vvio
+    assert vv.imread
+    assert vv.imshow
+    assert vv.plot
+    assert vv.Slider
+    assert vv.Axes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/tests/test_processing.py 
new/visvis-1.12.4/tests/test_processing.py
--- old/visvis-1.12.2/tests/test_processing.py  1970-01-01 01:00:00.000000000 
+0100
+++ new/visvis-1.12.4/tests/test_processing.py  2017-06-01 02:05:28.000000000 
+0200
@@ -0,0 +1,113 @@
+
+
+def test_line2mesh():
+    import visvis as vv
+    
+    pp = vv.Pointset(3)
+    pp.append((1, 2, 3))
+    pp.append((3, 1, 5))
+    pp.append((4, 4, 7))
+    pp.append((6, 7, 9))
+    
+    m = vv.processing.lineToMesh(pp, 3, 10)
+    assert isinstance(m, vv.BaseMesh)
+
+
+def test_unwindfaces():
+    import visvis as vv
+    
+    pp = vv.Pointset(3)
+    pp.append((1, 2, 3))
+    pp.append((3, 1, 5))
+    pp.append((4, 4, 7))
+    pp.append((6, 7, 9)) 
+    m = vv.BaseMesh(pp, faces=[0, 1, 2, 0, 2, 3])
+    
+    assert m._faces is not None
+    assert m._vertices.shape == (4, 3)
+    
+    vv.processing.unwindFaces(m)
+    
+    assert m._faces is None
+    assert m._vertices.shape == (6, 3)
+    assert tuple(m._vertices[0]) == tuple(pp[0])
+    assert tuple(m._vertices[1]) == tuple(pp[1])
+    assert tuple(m._vertices[2]) == tuple(pp[2])
+    assert tuple(m._vertices[3]) == tuple(pp[0])
+    assert tuple(m._vertices[4]) == tuple(pp[2])
+    assert tuple(m._vertices[5]) == tuple(pp[3])
+
+
+def test_combine_meshes():
+    import visvis as vv
+    
+    pp = vv.Pointset(3)
+    pp.append((1, 2, 3))
+    pp.append((3, 1, 5))
+    pp.append((4, 4, 7))
+    pp.append((6, 7, 9)) 
+    m = vv.BaseMesh(pp, faces=[0, 1, 2, 0, 2, 3])
+    
+    assert m._vertices.shape == (4, 3)
+    
+    m2 = vv.processing.combineMeshes([m, m, m])
+    assert m2 is not m
+    
+    assert m2._vertices.shape == (12, 3)
+
+
+def test_calculate_normals():
+    import visvis as vv
+    
+    pp = vv.Pointset(3)
+    pp.append((1, 2, 3))
+    pp.append((3, 1, 5))
+    pp.append((4, 4, 7))
+    pp.append((6, 7, 9)) 
+    m = vv.BaseMesh(pp, faces=[0, 1, 2, 0, 2, 3])
+    
+    assert m._normals is None
+    
+    vv.processing.calculateNormals(m)
+    normals1 = m._normals
+    
+    assert m._normals is not None
+    assert m._normals.shape == (4, 3)
+    
+    vv.processing.calculateFlatNormals(m)
+    normals2 = m._normals
+    
+    assert m._normals is not None
+    assert m._normals.shape == (6, 3)
+    
+    assert normals1 is not normals2
+    assert normals1.shape != normals2.shape  # because faces have been unwound
+
+
+def test_statistics():
+    import numpy as np
+    import visvis as vv
+    
+    data = np.array([-0.213,  0.282, -0.382, -1.409, -0.477, -1.233, -1.465,
+                     -0.686,  1.246,  0.566, 0.786, -1.231, -0.587,  1.552,
+                     0.359, 0.353,  0.052,  1.718,  0.291, -0.093])
+    
+    d = vv.processing.statistics(data)
+    
+    assert d.size == 20
+    assert d.std > 0.9 and d.std < 1.1
+    assert d.mean > -0.1 and d.mean < +0.1
+    
+    assert d.dmin
+    assert d.dmax
+    assert d.drange
+    assert d.median
+    assert d.Q1
+    assert d.Q2
+    assert d.Q3
+    assert d.IQR
+    
+    assert d.histogram_np()
+    assert d.percentile(0.7)
+    assert d.histogram()
+    assert d.kde()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/text/text_freetype.py 
new/visvis-1.12.4/text/text_freetype.py
--- old/visvis-1.12.2/text/text_freetype.py     2017-06-01 02:05:28.000000000 
+0200
+++ new/visvis-1.12.4/text/text_freetype.py     2020-05-25 13:04:03.000000000 
+0200
@@ -49,42 +49,7 @@
 # todo: have pyzo ship freeType lib on Windows and use that if possible.
 # todo: When we implement full screen antialiasing, we can remove the shader 
here
 
-FRAGMENT_SHADER_ = """
-// Uniforms obtained from OpenGL
-    uniform sampler2D texture; // The 3D texture
-    uniform vec2 shape; // And its shape (as in OpenGl)
-    
-    void main()
-    {
-        // Get centre location
-        vec2 pos = gl_TexCoord[0].xy;
-        
-        // Init value
-        vec4 color1 = vec4(0.0, 0.0, 0.0, 0.0);
-        
-        // Init kernel and number of steps
-        vec4 kernel = vec4 (0.2, 0.2, 0.1 , 0.1);
-        //vec4 kernel = vec4 (0.3, 0.2, 0.1 , 0.0);
-        int sze = 3;
-        
-        // Init step size in tex coords
-        float dx = 1.0/shape.x;
-        float dy = 1.0/shape.y;
-        
-        // Convolve
-        for (int y=-sze; y<sze+1; y++)
-        {
-            for (int x=-sze; x<sze+1; x++)
-            {
-                float k = kernel[int(abs(float(x)))] * 
kernel[int(abs(float(y)))];
-                vec2 dpos = vec2(float(x)*dx, float(y)*dy);
-                color1 += texture2D(texture, pos+dpos) * k;
-            }
-        }
-        gl_FragColor = color1 * gl_Color;
-        
-    }
-"""
+
 FRAGMENT_SHADER = """
 // Uniforms obtained from OpenGL
     uniform sampler2D texture; // The 3D texture
@@ -105,23 +70,22 @@
         float dx = 1.0/shape.x;
         float dy = 1.0/shape.y;
         
-        vec4 color1 = vec4(0.0, 0.0, 0.0, 0.0);
+        float alpha = 0.0;
         
-        color1 += texture2D(texture, pos+vec2(-dx,-dy) ) * k1 * k1;
-        color1 += texture2D(texture, pos+vec2(-dx,0.0) ) * k1 * k0;
-        color1 += texture2D(texture, pos+vec2(-dx,+dy) ) * k1 * k1;
-        
-        color1 += texture2D(texture, pos+vec2(0.0,-dy) ) * k0 * k1;
-        color1 += texture2D(texture, pos+vec2(0.0,0.0) ) * k0 * k0;
-        color1 += texture2D(texture, pos+vec2(0.0,+dy) ) * k0 * k1;
-        
-        color1 += texture2D(texture, pos+vec2(+dx,-dy) ) * k1 * k1;
-        color1 += texture2D(texture, pos+vec2(+dx,0.0) ) * k1 * k0;
-        color1 += texture2D(texture, pos+vec2(+dx,+dy) ) * k1 * k1;
+        alpha += texture2D(texture, pos+vec2(-dx,-dy) ).a * k1 * k1;
+        alpha += texture2D(texture, pos+vec2(-dx,0.0) ).a * k1 * k0;
+        alpha += texture2D(texture, pos+vec2(-dx,+dy) ).a * k1 * k1;
+        
+        alpha += texture2D(texture, pos+vec2(0.0,-dy) ).a * k0 * k1;
+        alpha += texture2D(texture, pos+vec2(0.0,0.0) ).a * k0 * k0;
+        alpha += texture2D(texture, pos+vec2(0.0,+dy) ).a * k0 * k1;
+        
+        alpha += texture2D(texture, pos+vec2(+dx,-dy) ).a * k1 * k1;
+        alpha += texture2D(texture, pos+vec2(+dx,0.0) ).a * k1 * k0;
+        alpha += texture2D(texture, pos+vec2(+dx,+dy) ).a * k1 * k1;
         
         // Set final color
-        gl_FragColor = color1 * gl_Color;
-        
+        gl_FragColor = vec4(gl_Color.rgb, alpha);
     }
 """
 
Binary files old/visvis-1.12.2/utils/__init__.pyc and 
new/visvis-1.12.4/utils/__init__.pyc differ
Binary files old/visvis-1.12.2/utils/__pycache__/__init__.cpython-34.pyc and 
new/visvis-1.12.4/utils/__pycache__/__init__.cpython-34.pyc differ
Binary files old/visvis-1.12.2/utils/__pycache__/__init__.cpython-35.pyc and 
new/visvis-1.12.4/utils/__pycache__/__init__.cpython-35.pyc differ
Binary files old/visvis-1.12.2/utils/__pycache__/__init__.cpython-36.pyc and 
new/visvis-1.12.4/utils/__pycache__/__init__.cpython-36.pyc differ
Binary files old/visvis-1.12.2/utils/__pycache__/__init__.cpython-37.pyc and 
new/visvis-1.12.4/utils/__pycache__/__init__.cpython-37.pyc differ
Binary files old/visvis-1.12.2/utils/__pycache__/pypoints.cpython-34.pyc and 
new/visvis-1.12.4/utils/__pycache__/pypoints.cpython-34.pyc differ
Binary files old/visvis-1.12.2/utils/__pycache__/pypoints.cpython-35.pyc and 
new/visvis-1.12.4/utils/__pycache__/pypoints.cpython-35.pyc differ
Binary files old/visvis-1.12.2/utils/__pycache__/pypoints.cpython-36.pyc and 
new/visvis-1.12.4/utils/__pycache__/pypoints.cpython-36.pyc differ
Binary files old/visvis-1.12.2/utils/__pycache__/pypoints.cpython-37.pyc and 
new/visvis-1.12.4/utils/__pycache__/pypoints.cpython-37.pyc differ
Binary files old/visvis-1.12.2/utils/iso/__pycache__/__init__.cpython-36.pyc 
and new/visvis-1.12.4/utils/iso/__pycache__/__init__.cpython-36.pyc differ
Binary files old/visvis-1.12.2/utils/pypoints.pyc and 
new/visvis-1.12.4/utils/pypoints.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__init__.pyc and 
new/visvis-1.12.4/utils/ssdf/__init__.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/__init__.cpython-34.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/__init__.cpython-34.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/__init__.cpython-35.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/__init__.cpython-35.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/__init__.cpython-36.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/__init__.cpython-36.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/__init__.cpython-37.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/__init__.cpython-37.pyc differ
Binary files 
old/visvis-1.12.2/utils/ssdf/__pycache__/classmanager.cpython-34.pyc and 
new/visvis-1.12.4/utils/ssdf/__pycache__/classmanager.cpython-34.pyc differ
Binary files 
old/visvis-1.12.2/utils/ssdf/__pycache__/classmanager.cpython-35.pyc and 
new/visvis-1.12.4/utils/ssdf/__pycache__/classmanager.cpython-35.pyc differ
Binary files 
old/visvis-1.12.2/utils/ssdf/__pycache__/classmanager.cpython-36.pyc and 
new/visvis-1.12.4/utils/ssdf/__pycache__/classmanager.cpython-36.pyc differ
Binary files 
old/visvis-1.12.2/utils/ssdf/__pycache__/classmanager.cpython-37.pyc and 
new/visvis-1.12.4/utils/ssdf/__pycache__/classmanager.cpython-37.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/ssdf_base.cpython-34.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/ssdf_base.cpython-34.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/ssdf_base.cpython-35.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/ssdf_base.cpython-35.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/ssdf_base.cpython-36.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/ssdf_base.cpython-36.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/ssdf_base.cpython-37.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/ssdf_base.cpython-37.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/ssdf_bin.cpython-34.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/ssdf_bin.cpython-34.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/ssdf_bin.cpython-35.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/ssdf_bin.cpython-35.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/ssdf_bin.cpython-36.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/ssdf_bin.cpython-36.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/ssdf_bin.cpython-37.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/ssdf_bin.cpython-37.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/ssdf_text.cpython-34.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/ssdf_text.cpython-34.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/ssdf_text.cpython-35.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/ssdf_text.cpython-35.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/ssdf_text.cpython-36.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/ssdf_text.cpython-36.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/__pycache__/ssdf_text.cpython-37.pyc 
and new/visvis-1.12.4/utils/ssdf/__pycache__/ssdf_text.cpython-37.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/classmanager.pyc and 
new/visvis-1.12.4/utils/ssdf/classmanager.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/ssdf_base.pyc and 
new/visvis-1.12.4/utils/ssdf/ssdf_base.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/ssdf_bin.pyc and 
new/visvis-1.12.4/utils/ssdf/ssdf_bin.pyc differ
Binary files old/visvis-1.12.2/utils/ssdf/ssdf_text.pyc and 
new/visvis-1.12.4/utils/ssdf/ssdf_text.pyc differ
Binary files 
old/visvis-1.12.2/utils/ssdf/tests/__pycache__/test_random.cpython-36-PYTEST.pyc
 and 
new/visvis-1.12.4/utils/ssdf/tests/__pycache__/test_random.cpython-36-PYTEST.pyc
 differ
Binary files 
old/visvis-1.12.2/utils/ssdf/tests/__pycache__/test_simple.cpython-36-PYTEST.pyc
 and 
new/visvis-1.12.4/utils/ssdf/tests/__pycache__/test_simple.cpython-36-PYTEST.pyc
 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/utils/ssdf/tests/test1.ssdf 
new/visvis-1.12.4/utils/ssdf/tests/test1.ssdf
--- old/visvis-1.12.2/utils/ssdf/tests/test1.ssdf       1970-01-01 
01:00:00.000000000 +0100
+++ new/visvis-1.12.4/utils/ssdf/tests/test1.ssdf       2016-03-22 
09:56:47.000000000 +0100
@@ -0,0 +1,38 @@
+# This thest file contains all the seven data types supported by SSDF
+# and contains some challanging versions of strings.
+# Furthermore, it contains a dictionary with invalid syntax, which should 
+# produce warnings, but not kill the reader.
+
+integer1 = 2  # this is an integer
+float1 = 3.0  # and this a float
+string1 = ''  # empty string
+string2 = 'more "complex" string that\'s got \ntwo lines and a single 
backslash here >> \ <<'
+string3 = 'double backslash should \\not trigger newline in front of an "n" 
\\'  # and before a quote, should still end that string
+nullvalue1 = Null
+nullvalue2 = None
+array1 = array 3x2 float32 1,2,3,4,5,6
+array2 = array 640x480x3 uint8 
eJztzgEJAAAMA6C9f+nHGAxNYAIAAAAw4doBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWPQQvQAC
+noteOnArray2 = 'array2 is all zeros with a 1 at array2[3,2,1] (starting from 
0, so [4,3,2] in Matlab)'
+smalList = [1, 2.0, 3, 'foo', '']  # Lists with only floats, ints and strings 
can be written on one line
+more = dict:
+    foo = 4.2
+    bar = 'foobar'
+
+largeList = list:
+    4
+    5.0
+    'the last two elements in this list are an empty dict and empty list'
+    dict:    
+    list:
+   
+# The following dict contains problems
+problems = dict:
+    crap1 = this cannot be parsed and should produce an error
+    crap2 = "neither can this"
+    # an empty line can be seen as Null
+    novalue = 
+      invalidIndent = 'a child of non-container element'
+    listwithnames = list:
+        foo = 8.1
+    dictwithnonames = dict:          
+        8.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/utils/ssdf/tests/test2.ssdf 
new/visvis-1.12.4/utils/ssdf/tests/test2.ssdf
--- old/visvis-1.12.2/utils/ssdf/tests/test2.ssdf       1970-01-01 
01:00:00.000000000 +0100
+++ new/visvis-1.12.4/utils/ssdf/tests/test2.ssdf       2016-03-22 
09:56:47.000000000 +0100
@@ -0,0 +1,29 @@
+# SSDF supports 7 datatypes
+
+# 1: float scalars
+a_float = 4.0 
+
+# 2: integer scalars
+an_int = 3 
+
+# 3: Unicode strings3
+a_string = 'SSDF is easy as py' 
+
+# 4: Lists are container elements (and can in turn contain lists or 
dictionaries)
+more_info = list:
+  'As in Python, structure is implemented through indentation,'
+  'and a colon behind the container element.'   
+  5
+  'as you can see, elements in a list have no name'
+
+# 5: A dictionary is a container too
+a_dict = dict:  
+  # lists with only floats, ints and strings can be on a single line
+  another_list = [1.0, 2, 'foo', 'bar']
+
+# 6: arrays - SSDF supports readable as well as binary (compressed) arrays.
+a_small_array = array 2x3 int32 1, 2, 3, 4, 5, 6
+an_array_with_all_zeros = array 32x32 float32 
eJztwQENAAAAwqD3T20PBxQAAADwbhAAAAE=
+
+# 7: ...
+nothing = None # or Null
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/utils/ssdf/tests/test_random.py 
new/visvis-1.12.4/utils/ssdf/tests/test_random.py
--- old/visvis-1.12.2/utils/ssdf/tests/test_random.py   1970-01-01 
01:00:00.000000000 +0100
+++ new/visvis-1.12.4/utils/ssdf/tests/test_random.py   2017-06-01 
02:05:28.000000000 +0200
@@ -0,0 +1,387 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2011, Almar Klein
+#
+# SSDF is distributed under the terms of the (new) BSD License.
+# See http://www.opensource.org/licenses/bsd-license.php
+
+""" Script test_random
+
+Create random ssdf structs, serialize these, read back, and test if
+they represent the same data.
+
+"""
+import os
+import time
+import sys
+import random
+import string
+import numpy as np
+
+import ssdf
+
+
+# From six.py
+PY3 = sys.version_info[0] == 3
+if PY3:
+    string_types = str,
+    text_type = str
+    binary_type = bytes
+    ascii_type = str # Simple string
+    unichr = chr
+    xrange = range
+else:
+    string_types = basestring,
+    text_type = unicode
+    binary_type = str
+    ascii_type = str # Simple string
+
+
+# Get homedir
+homedir = '/home/almar/'
+if not os.path.isdir(homedir):
+    homedir = 'c:/almar/'
+
+# Get printabel chars, add some Unicode characters
+CHARS = string.printable + (unichr(169) + unichr(181) + unichr(202) +
+                            unichr(1220) + unichr(1138) + unichr(1297))
+NAMECHARS = str('abcdefghijklmnopqrstuvwxyz_0123456789')
+
+class Generator:
+    def random_object(self, level):
+        if level>0:
+            id = random.randrange(7) + 1
+        else:
+            id = random.randrange(5) + 1
+        
+        if id == 1:
+            return None
+        elif id == 2:
+            return self.random_int()
+        elif id == 3:
+            return self.random_float()
+        elif id == 4:
+            return self.random_string()
+        elif id == 5:
+            return self.random_array()
+        elif level>0 and id == 6:
+            return self.random_list(level)
+        elif level>0 and id == 7:
+            return self.random_struct(level)
+    
+    def random_int(self):
+        return random.randint(-2**62, 2**62)
+    
+    def random_float(self):
+        return (random.random()-0.5 ) * 10000
+    
+    def random_string(self, maxn=16):
+        n = random.randrange(0, maxn)
+        return ''.join(random.sample(CHARS,n))
+    
+    def random_array(self, maxn=16):
+        # Get array properties
+        ndim = random.randrange(0, 4)
+        shape = random.sample(xrange(maxn), ndim)
+        dtype = random.choice([key for key in ssdf.ssdf_text._DTYPES.keys()])
+        # Create array
+        if 'int' in dtype:
+            return np.random.random_integers(0,100, shape).astype(dtype)
+        else:
+            return np.random.random_sample(shape).astype(dtype)
+    
+    def random_struct(self, level, maxn=16):
+        level -= 1
+        # Create struct and amount of elements
+        s = ssdf.new()
+        n = random.randrange(0, maxn)
+        # Fill
+        for i in range(n):
+            # Get name
+            n = random.randrange(0, maxn)
+            name = random.choice(NAMECHARS[:-10])
+            name += ''.join(random.sample(NAMECHARS,n))
+            if name.startswith('__'):
+                name = 'x' + name
+            # Get value
+            s[name] = self.random_object(level)
+        if random.random() > 0.5:
+            return s
+        else:
+            return s.__dict__
+    
+    def random_list(self, level, maxn=16):
+        level -= 1
+        # Create list and amount of elements
+        items = []
+        n = random.randrange(0, maxn)
+        # Fill
+        for i in range(n):
+            # Get value
+            items.append( self.random_object(level) )
+        if random.random() > 0.5:
+            return items
+        else:
+            return tuple(items)
+    
+    
+    @classmethod
+    def create_struct(cls, level=8):
+        gen = cls()
+        return gen.random_struct(level)
+
+
+def compare(ob1, ob2, verbose=True):
+    """ compare(ob1, ob2, verbose=True)
+    
+    Compare two (ssdf-compatible) objects. If verbose is True (the default)
+    and the objects are not equal, a message is printed indicating the
+    first found inequality.
+    
+    """
+    not_equal = ssdf.ssdf_base._not_equal(ob1, ob2)
+    if verbose and not_equal:
+        print(not_equal)
+    return not not_equal
+
+
+class Tester:
+    def __init__(self):
+        self._tests = []
+        self._stop = False
+        self._s = None
+    
+    def enable_np(self):
+        ssdf.np = np
+    def disable_np(self):
+        ssdf.np = None
+    
+    def run(self, amount=100000):
+        self._stop = False
+        t0 = time.time()
+        maxtests = amount
+        
+        while len(self._tests) < maxtests and not self._stop:
+            
+            # Create struct
+            s = Generator.create_struct()
+            n = ssdf.count(s)
+            self._s = s
+            
+            # times
+            times = []
+            sizes = []
+            
+            # Test text
+            t1 = time.time()
+            text = ssdf.saves(s)
+            times.append(time.time()-t1)
+            #
+            t1 = time.time()
+            s2 = ssdf.loads(text)
+            times.append(time.time()-t1)
+            #
+            if not compare(s, s2):
+                print('Test text failed after %i iterations.' % 
len(self._tests))
+                break
+            
+            # Test binary
+            t1 = time.time()
+            bb = ssdf.saveb(s)
+            times.append(time.time()-t1)
+            #
+            t1 = time.time()
+            s2 = ssdf.loadb(bb)
+            times.append(time.time()-t1)
+            #
+            if not compare(s, s2):
+                print('Test bin failed after %i iterations.' % 
len(self._tests))
+                break
+            
+            # Test text file
+            fname = homedir+'projects/ssdftest.ssdf'
+            t1 = time.time()
+            ssdf.save(fname, s)
+            times.append(time.time()-t1)
+            #
+            t1 = time.time()
+            s2 = ssdf.load(fname)
+            times.append(time.time()-t1)
+            sizes.append(os.stat(fname).st_size)
+            #
+            if not compare(s, s2):
+                print('Test text-file failed after %i iterations.' % 
len(self._tests))
+                break
+                
+            # Test binary file
+            fname = homedir+'projects/ssdftest.bsdf'
+            t1 = time.time()
+            ssdf.save(fname, s)
+            times.append(time.time()-t1)
+            #
+            t1 = time.time()
+            s2 = ssdf.load(fname)
+            times.append(time.time()-t1)
+            sizes.append(os.stat(fname).st_size)
+            #
+            if not compare(s, s2):
+                print('Test bin-file failed after %i iterations.' % 
len(self._tests))
+                break
+            
+            # Success
+            self._tests.append( (n, times, sizes) )
+            print('%i tests successfull' % len(self._tests))
+            time.sleep(0.001)
+    
+    
+    def test_numpy(self, amount=10):
+    
+       
+        
+        for iter in range(amount):
+            
+            # Random struct
+            s = Generator.create_struct()
+            self._s = s
+            
+            # Text with numpy on writing
+            self.enable_np()
+            text = ssdf.saves(s)
+            #
+            self.disable_np()
+            s2 = ssdf.loads(text)
+            text = ssdf.saves(s2)
+            #
+            self.enable_np()
+            s3 = ssdf.loads(text)
+#             if not compare(s, s2):
+#                 print('Test text failed after %i iterations.' % iter)
+#                 break
+            if not compare(s, s3):
+                print('Test text failed after %i iterations.' % iter)
+                break
+            
+            # Binary with numpy on writing
+            self.enable_np()
+            bb = ssdf.saveb(s)
+            #
+            self.disable_np()
+            s2 = ssdf.loadb(bb)
+            bb = ssdf.saveb(s2)
+            #
+            self.enable_np()
+            s3 = ssdf.loadb(bb)
+#             if not compare(s, s2):
+#                 print('Test bin failed after %i iterations.' % iter)
+#                 break
+            if not compare(s, s3):
+                print('Test bin failed after %i iterations.' % iter)
+                break
+            
+            print('%i tests successfull' % iter)
+            time.sleep(0.001)
+        
+#             # Text with numpy on writing
+#             self.disable_np()
+#             s = Generator.create_struct()
+#             text = ssdf.saves(s)
+#             #
+#             self.enable_np()
+#             s2 = ssdf.loads(text)
+#             text = ssdf.saves(s2)
+#             #
+#             self.disable_np()
+#             s3 = ssdf.loads(text)
+#             if not compare(s, s3):
+#                 print('Test text failed after %i iterations.' % iter)
+#                 break
+#
+#             # Binary with numpy on writing
+#             self.disable_np()
+#             s = Generator.create_struct()
+#             bb = ssdf.saveb(s)
+#             #
+#             self.enable_np()
+#             s2 = ssdf.loadb(bb)
+#             bb = ssdf.saveb(s2)
+#             #
+#             self.disable_np()
+#             s3 = ssdf.loadb(bb)
+#             if not compare(s, s3):
+#                 print('Test bin failed after %i iterations.' % iter)
+#                 break
+        
+        # Finish
+        self.enable_np()
+
+
+def find(s, name):
+    """ To find an object with a certain name.
+    """
+    for n in s:
+        if ssdf.isstruct(s):
+            v = s[n]
+        else:
+            v = n
+            n = None
+        
+        res = None
+        if n == name:
+            return v
+        elif ssdf.isstruct(v) or isinstance(v, dict):
+            res = find(v, name)
+        elif isinstance(v, (list, tuple)):
+            res = find(v, name)
+        elif n:
+            print(n)
+        if res:
+            return res
+
+
+def show(self):
+    
+    import visvis as vv
+    
+    # If there are many tests, make a selection
+    if len(self._tests) > 1000:
+        tests = random.sample(self._tests, 1000)
+    else:
+        tests = self._tests
+    
+    # Get ticks
+    nn = [test[0] for test in tests]
+    
+    # Create figure
+    vv.figure(1)
+    vv.clf()
+    
+    # Prepare kwargs
+    plotKwargsText = {'ms':'.', 'mc':'b', 'mw':5, 'ls':''}
+    plotKwargsBin = {'ms':'.', 'mc':'r', 'mw':5, 'ls':''}
+    
+    # File size against number of elements
+    vv.subplot(221)
+    vv.plot(nn, [test[2][0] for test in tests], **plotKwargsText)
+    vv.plot(nn, [test[2][1] for test in tests], **plotKwargsBin)
+    vv.legend('text', 'binary')
+    vv.title('File size')
+    
+    # Speed against number of elements
+    vv.subplot(223)
+    vv.plot(nn, [test[1][4] for test in tests], **plotKwargsText)
+    vv.plot(nn, [test[1][6] for test in tests], **plotKwargsBin)
+    vv.legend('text', 'binary')
+    vv.title('Save time')
+    
+    # Speed (file) against number of elements
+    vv.subplot(224)
+    vv.plot(nn, [test[1][5] for test in tests], **plotKwargsText)
+    vv.plot(nn, [test[1][7] for test in tests], **plotKwargsBin)
+    vv.legend('text', 'binary')
+    vv.title('Load time')
+
+
+
+if __name__ == '__main__':
+    # Instantiate tester
+    tester = Tester()
+    tester.run()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/utils/ssdf/tests/test_simple.py 
new/visvis-1.12.4/utils/ssdf/tests/test_simple.py
--- old/visvis-1.12.2/utils/ssdf/tests/test_simple.py   1970-01-01 
01:00:00.000000000 +0100
+++ new/visvis-1.12.4/utils/ssdf/tests/test_simple.py   2017-06-01 
02:05:28.000000000 +0200
@@ -0,0 +1,11 @@
+import ssdf
+
+# Load from file
+s1 = ssdf.load('test1.ssdf')
+
+# Write to string and read back
+tmp = ssdf.saves(s1)
+s2 = ssdf.loads(tmp)
+
+# Print, manually inspection required to see whether it matches the test file
+print(s2)
Binary files old/visvis-1.12.2/vvio/__pycache__/__init__.cpython-35.pyc and 
new/visvis-1.12.4/vvio/__pycache__/__init__.cpython-35.pyc differ
Binary files old/visvis-1.12.2/vvio/__pycache__/__init__.cpython-36.pyc and 
new/visvis-1.12.4/vvio/__pycache__/__init__.cpython-36.pyc differ
Binary files old/visvis-1.12.2/vvio/__pycache__/stl.cpython-35.pyc and 
new/visvis-1.12.4/vvio/__pycache__/stl.cpython-35.pyc differ
Binary files old/visvis-1.12.2/vvio/__pycache__/stl.cpython-36.pyc and 
new/visvis-1.12.4/vvio/__pycache__/stl.cpython-36.pyc differ
Binary files old/visvis-1.12.2/vvio/__pycache__/wavefront.cpython-35.pyc and 
new/visvis-1.12.4/vvio/__pycache__/wavefront.cpython-35.pyc differ
Binary files old/visvis-1.12.2/vvio/__pycache__/wavefront.cpython-36.pyc and 
new/visvis-1.12.4/vvio/__pycache__/wavefront.cpython-36.pyc differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/visvis-1.12.2/vvmovie/README.md 
new/visvis-1.12.4/vvmovie/README.md
--- old/visvis-1.12.2/vvmovie/README.md 1970-01-01 01:00:00.000000000 +0100
+++ new/visvis-1.12.4/vvmovie/README.md 2017-05-26 02:34:58.000000000 +0200
@@ -0,0 +1 @@
+THIS CODE IS DEPRECATED; USE IMAGEIO INSTEAD.
\ No newline at end of file
Binary files old/visvis-1.12.2/vvmovie/__init__.pyc and 
new/visvis-1.12.4/vvmovie/__init__.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/__init__.cpython-34.pyc and 
new/visvis-1.12.4/vvmovie/__pycache__/__init__.cpython-34.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/__init__.cpython-35.pyc and 
new/visvis-1.12.4/vvmovie/__pycache__/__init__.cpython-35.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/__init__.cpython-36.pyc and 
new/visvis-1.12.4/vvmovie/__pycache__/__init__.cpython-36.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/images2avi.cpython-34.pyc 
and new/visvis-1.12.4/vvmovie/__pycache__/images2avi.cpython-34.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/images2avi.cpython-35.pyc 
and new/visvis-1.12.4/vvmovie/__pycache__/images2avi.cpython-35.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/images2avi.cpython-36.pyc 
and new/visvis-1.12.4/vvmovie/__pycache__/images2avi.cpython-36.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/images2gif.cpython-34.pyc 
and new/visvis-1.12.4/vvmovie/__pycache__/images2gif.cpython-34.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/images2gif.cpython-35.pyc 
and new/visvis-1.12.4/vvmovie/__pycache__/images2gif.cpython-35.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/images2gif.cpython-36.pyc 
and new/visvis-1.12.4/vvmovie/__pycache__/images2gif.cpython-36.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/images2ims.cpython-34.pyc 
and new/visvis-1.12.4/vvmovie/__pycache__/images2ims.cpython-34.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/images2ims.cpython-35.pyc 
and new/visvis-1.12.4/vvmovie/__pycache__/images2ims.cpython-35.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/images2ims.cpython-36.pyc 
and new/visvis-1.12.4/vvmovie/__pycache__/images2ims.cpython-36.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/images2swf.cpython-34.pyc 
and new/visvis-1.12.4/vvmovie/__pycache__/images2swf.cpython-34.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/images2swf.cpython-35.pyc 
and new/visvis-1.12.4/vvmovie/__pycache__/images2swf.cpython-35.pyc differ
Binary files old/visvis-1.12.2/vvmovie/__pycache__/images2swf.cpython-36.pyc 
and new/visvis-1.12.4/vvmovie/__pycache__/images2swf.cpython-36.pyc differ
Binary files old/visvis-1.12.2/vvmovie/images2avi.pyc and 
new/visvis-1.12.4/vvmovie/images2avi.pyc differ
Binary files old/visvis-1.12.2/vvmovie/images2gif.pyc and 
new/visvis-1.12.4/vvmovie/images2gif.pyc differ
Binary files old/visvis-1.12.2/vvmovie/images2ims.pyc and 
new/visvis-1.12.4/vvmovie/images2ims.pyc differ
Binary files old/visvis-1.12.2/vvmovie/images2swf.pyc and 
new/visvis-1.12.4/vvmovie/images2swf.pyc differ


Reply via email to