def test_view_from_cols_with_readonly(self):
     import numpy as np
     a =  np.zeros((4,7), order="F")
     mem  = IndirectMemory2D.view_from_columns(a, True)   
     with self.assertRaises(TypeError) as context:
         memoryview(mem)[1,3] = 5
     self.assertEqual("cannot modify read-only memory", context.exception.args[0])
 def test_view_from_cols_for_readonly_false(self):
     import numpy as np
     a =  np.zeros((4,7), order="F")
     a.flags.writeable = False
     with self.assertRaises(ValueError) as context:
         mem  = IndirectMemory2D.view_from_columns(a, False) 
     self.assertEqual("buffer source array is read-only", context.exception.args[0])
 def test_view_from_cols_from_view_wrong_mem_layout(self):
     import numpy as np
     a=np.arange(24).reshape((4,6))
     b=a[0::2, 0::2]
     with self.assertRaises(BufferError) as context:
         mem  = IndirectMemory2D.view_from_columns(b)
     self.assertEqual("columns of the buffer-object aren't contiguous", context.exception.args[0])
 def test_from_ctype_ptr_ptr_is_alive(self):
      data=(ctypes.POINTER(ctypes.c_int)*3)((ctypes.c_int*1)(42), (ctypes.c_int*1)(1), (ctypes.c_int*1)(1))
      ref_cnt = sys.getrefcount(data)
      mem = IndirectMemory2D.from_ctype_ptr(data, 2,1)
      self.assertEqual(ref_cnt+1, sys.getrefcount(data))
      del mem 
      self.assertEqual(ref_cnt, sys.getrefcount(data))
 def test_view_from_one_col_1d(self):
     a = array.array("i", [1,2,3,4])
     mem  = IndirectMemory2D.view_from_columns(a)
     self.assertEqual(mem.shape[0], 1)
     self.assertEqual(mem.shape[1], 4)
     self.assertEqual(memoryview(mem)[0,2], 3)
     memoryview(mem)[0,2] = 42
     self.assertEqual(a[2], 42)
 def test_view_from_cols_refcount(self):
     import numpy as np
     a = np.zeros((3,4), order="F")
     cnt = sys.getrefcount(a)
     mem  = IndirectMemory2D.view_from_columns(a)
     self.assertEqual(cnt+1, sys.getrefcount(a))
     del mem
     self.assertEqual(cnt, sys.getrefcount(a))
 def test_from_ctype_ptr_less_rows_ok(self):
      data=(ctypes.POINTER(ctypes.c_int)*3)((ctypes.c_int*1)(42), (ctypes.c_int*1)(1), (ctypes.c_int*1)(1))
      mem = IndirectMemory2D.from_ctype_ptr(data, 2,1)
      mem.reinterpret_data('i')
      view=memoryview(mem)
      self.assertEqual(view[0, 0], 42)
      view[0, 0] =  21
      self.assertEqual(data[0] [0], 21) 
 def test_view_from_one_row_2d(self):
     import numpy as np
     a = np.array([[1,2,3,4]], order="C")
     mem  = IndirectMemory2D.view_from_rows(a)
     self.assertEqual(mem.shape[0], 1)
     self.assertEqual(mem.shape[1], 4)
     self.assertEqual(memoryview(mem)[0,2], 3)
     memoryview(mem)[0,2] = 42
     self.assertEqual(a[0,2], 42)
    def test_reinterpret_signed_unsigned(self):
        mem = IndirectMemory2D.create_memory(rows=1, cols=1, format='b', readonly=False)
        memview = memoryview(mem)
        memview[0,0] = -1      
        del memview

        mem.reinterpret_data('B')
        memview=memoryview(mem)
        self.assertEqual(memview[0,0], 255)
 def test_view_from_one_col_2d(self):
     import numpy as np
     a = np.array([[1],[2],[3],[4]], order="F")
     mem  = IndirectMemory2D.view_from_columns(a)
     self.assertEqual(mem.shape[0], 1) #dimensions swapped
     self.assertEqual(mem.shape[1], 4) #dimensions swapped
     self.assertEqual(memoryview(mem)[0,2], 3) #dimensions swapped
     memoryview(mem)[0,2] = 42 #dimensions swapped
     self.assertEqual(a[2,0], 42)
 def test_view_from_cols_from_view(self):
     import numpy as np
     a=np.arange(12).reshape((3,4), order="F")
     b=a[:, 0::2]
     mem  = IndirectMemory2D.view_from_columns(b)
     self.assertEqual(mem.shape[0], 2) #dimensions swapped
     self.assertEqual(mem.shape[1], 3) #dimensions swapped
     self.assertEqual(memoryview(mem)[1,0], 6) #dimensions swapped
     memoryview(mem)[1,0] = 42         #dimensions swapped
     self.assertEqual(a[0,2], 42)
 def test_view_from_rows_from_view(self):
     import numpy as np
     a=np.arange(12).reshape((4,3))
     b=a[0::2,:]
     mem  = IndirectMemory2D.view_from_rows(b)
     self.assertEqual(mem.shape[0], 2)
     self.assertEqual(mem.shape[1], 3)
     self.assertEqual(memoryview(mem)[1,0], 6)
     memoryview(mem)[1,0] = 42
     self.assertEqual(a[2,0], 42)
 def test_view_from_cols_bufferlocked(self):
     import numpy as np
     a = np.zeros((3,4), order="F")
     mem  = IndirectMemory2D.view_from_columns(a)
     with self.assertRaises(ValueError) as context:
         a.resize((55,1))
     self.assertTrue("cannot resize" in context.exception.args[0])
     del mem
     a.resize((55,1))
     self.assertEqual(a.shape[0], 55)
    def test_reinterpret_locked(self):
        mem = IndirectMemory2D.create_memory(rows=1, cols=1, format='b', readonly=True)
        memview = memoryview(mem)
        # ok, because the same
        mem.reinterpret_data('b')
        self.assertTrue(True)
        #not ok
        with self.assertRaises(BufferError) as context:
            mem.reinterpret_data('B')

        self.assertEqual("buffer is locked", context.exception.args[0])
 def test_view_from_cols(self):
     import numpy as np
     a =  np.zeros((4,7), order="F")
     a[1,2] = 21
     a[2,1] = 42
     mem  = IndirectMemory2D.view_from_columns(a)
     self.assertEqual(mem.shape[0], 7) #dimensions swapped
     self.assertEqual(mem.shape[1], 4) #dimensions swapped
     self.assertEqual(memoryview(mem)[1,2], 42) #dimensions swapped
     self.assertEqual(memoryview(mem)[2,1], 21) #dimensions swapped
     memoryview(mem)[1,3] = 5
     memoryview(mem)[3,1] = 6
     self.assertEqual(a[1,3], 6)  #dimensions swapped
     self.assertEqual(a[3,1], 5)  #dimensions swapped
 def test_view_from_rows(self):
     import numpy as np
     a =  np.zeros((7,4), order="C")
     a[1,2] = 21
     a[2,1] = 42
     mem  = IndirectMemory2D.view_from_rows(a)
     self.assertEqual(mem.shape[0], 7)
     self.assertEqual(mem.shape[1], 4)
     self.assertEqual(memoryview(mem)[1,2], 21)
     self.assertEqual(memoryview(mem)[2,1], 42)
     memoryview(mem)[1,3] = 5
     memoryview(mem)[3,1] = 6
     self.assertEqual(a[1,3], 5)
     self.assertEqual(a[3,1], 6)
 def test_diff_formats_with_cast_to(self):
     mem  = IndirectMemory2D.create_memory(rows=1, cols=2, format='B', readonly=False)
     mem2 = IndirectMemory2D.create_memory(rows=1, cols=2, format='b', readonly=False)
     mem.copy_to(mem2, cast=True)
     self.assertTrue(True)
 def test_view_from_cols_for_readonly_true(self):
     import numpy as np
     a =  np.ones((4,7), order="F")
     a.flags.writeable = False
     mem  = IndirectMemory2D.view_from_columns(a, True) 
     self.assertEqual(memoryview(mem)[0,0], 1.0)
 def test_diff_itemsize_with_cast_to(self):
     mem  = IndirectMemory2D.create_memory(rows=1, cols=2, format='B', readonly=False)
     mem2 = IndirectMemory2D.create_memory(rows=1, cols=2, format='i', readonly=False)
     with self.assertRaises(BufferError) as context:
         mem.copy_to(mem2, cast=True)
     self.assertEqual("different itemsizes", context.exception.args[0])  
 def test_copy_to_indirect_memory(self):
     mem  = IndirectMemory2D.create_memory(rows=42, cols=21, format='i', readonly=False)
     mem2 = IndirectMemory2D.create_memory(rows=42, cols=21, format='i', readonly=False)
     memoryview(mem2)[15,2] = 42
     mem2.copy_to(mem)
     self.assertEqual(memoryview(mem)[15,2], 42)
 def test_tfrom_ctype_ptr_3d(self):
      data=(ctypes.POINTER(ctypes.POINTER(ctypes.c_int))*3)()
      with self.assertRaises(BufferError) as context:
         mem = IndirectMemory2D.from_ctype_ptr(data, 3,0)
      self.assertTrue("wrong format: b'" in context.exception.args[0]) 
 def test_copy_to_wrong_shape_rows(self):      
     mem  = IndirectMemory2D.create_memory(rows=1, cols=2, format='B', readonly=False)
     mem2 = IndirectMemory2D.create_memory(rows=2, cols=2, format='B', readonly=False)
     with self.assertRaises(BufferError) as context:
         mem.copy_to(mem2)
     self.assertEqual("different shapes", context.exception.args[0])
 def test_shape(self):
     mem = IndirectMemory2D.create_memory(rows=42, cols=21, format='b', readonly=False)
     shape = mem.shape
     self.assertEqual(len(shape), 2)
     self.assertEqual(shape[0],42)
     self.assertEqual(shape[1],21)
 def test_diff_formats_without_cast_to(self):
     mem  = IndirectMemory2D.create_memory(rows=1, cols=2, format='B', readonly=False)
     mem2 = IndirectMemory2D.create_memory(rows=1, cols=2, format='b', readonly=False)
     with self.assertRaises(BufferError) as context:
         mem.copy_to(mem2)
     self.assertEqual("different formats", context.exception.args[0])
 def test_get_format(self):
     mem = IndirectMemory2D.create_memory(rows=22, cols=33, format='i', readonly=True)
     self.assertEqual(mem.get_format(), b'i')
 def test_from_ctype_ptr_wrong_row_number(self):
      data=(ctypes.POINTER(ctypes.c_int)*2)((ctypes.c_int*1)(1), (ctypes.c_int*1)(1))
      with self.assertRaises(BufferError) as context:
         mem = IndirectMemory2D.from_ctype_ptr(data, 3,1)
      self.assertEqual("less rows than expected: 2 vs. 3", context.exception.args[0]) 
 def test_view_from_cols_wrong_mem_layout(self):
     import numpy as np
     a = np.zeros((3,4), order="C")
     with self.assertRaises(BufferError) as context:
         mem  = IndirectMemory2D.view_from_columns(a)
     self.assertEqual("columns of the buffer-object aren't contiguous", context.exception.args[0])
 def test_view_from_cols_too_many_dims(self):
     import numpy as np
     a = np.zeros((3,4,3), order="F")
     with self.assertRaises(BufferError) as context:
         mem  = IndirectMemory2D.view_from_columns(a)
     self.assertEqual("expected at most 2 but found 3 dimensions", context.exception.args[0])
 def test_readonly_copy_from(self):      
     mem  = IndirectMemory2D.create_memory(rows=1, cols=2, format='B', readonly=True)
     mem2 = IndirectMemory2D.create_memory(rows=1, cols=2, format='B', readonly=False)
     with self.assertRaises(BufferError) as context:
         mem.copy_from(mem2)
     self.assertEqual("copying to readonly buffer", context.exception.args[0])
 def test_copy_to_wrong_dim(self):      
     mem  = IndirectMemory2D.create_memory(rows=1, cols=2, format='B', readonly=False)
     mem2 = bytearray(b'a')
     with self.assertRaises(BufferError) as context:
         mem.copy_to(mem2)
     self.assertEqual("wrong number of dimensions: expected 2, received 1", context.exception.args[0])