1111Array class and helper functions.
1212"""
1313
14+ from .algorithm import sum , count
15+ from .arith import cast
1416import inspect
1517import os
1618from .library import *
2527
2628_display_dims_limit = None
2729
30+
2831def set_display_dims_limit (* dims ):
2932 """
3033 Sets the dimension limit after which array's data won't get
@@ -44,6 +47,7 @@ def set_display_dims_limit(*dims):
4447 global _display_dims_limit
4548 _display_dims_limit = dims
4649
50+
4751def get_display_dims_limit ():
4852 """
4953 Gets the dimension limit after which array's data won't get
@@ -67,6 +71,7 @@ def get_display_dims_limit():
6771 """
6872 return _display_dims_limit
6973
74+
7075def _in_display_dims_limit (dims ):
7176 if _is_running_in_py_charm :
7277 return False
@@ -80,6 +85,7 @@ def _in_display_dims_limit(dims):
8085 return False
8186 return True
8287
88+
8389def _create_array (buf , numdims , idims , dtype , is_device ):
8490 out_arr = c_void_ptr_t (0 )
8591 c_dims = dim4 (idims [0 ], idims [1 ], idims [2 ], idims [3 ])
@@ -91,6 +97,7 @@ def _create_array(buf, numdims, idims, dtype, is_device):
9197 numdims , c_pointer (c_dims ), dtype .value ))
9298 return out_arr
9399
100+
94101def _create_strided_array (buf , numdims , idims , dtype , is_device , offset , strides ):
95102 out_arr = c_void_ptr_t (0 )
96103 c_dims = dim4 (idims [0 ], idims [1 ], idims [2 ], idims [3 ])
@@ -112,16 +119,15 @@ def _create_strided_array(buf, numdims, idims, dtype, is_device, offset, strides
112119 location .value ))
113120 return out_arr
114121
122+
115123def _create_empty_array (numdims , idims , dtype ):
116124 out_arr = c_void_ptr_t (0 )
117-
118- if numdims == 0 : return out_arr
119-
120125 c_dims = dim4 (idims [0 ], idims [1 ], idims [2 ], idims [3 ])
121126 safe_call (backend .get ().af_create_handle (c_pointer (out_arr ),
122127 numdims , c_pointer (c_dims ), dtype .value ))
123128 return out_arr
124129
130+
125131def constant_array (val , d0 , d1 = None , d2 = None , d3 = None , dtype = Dtype .f32 ):
126132 """
127133 Internal function to create a C array. Should not be used externall.
@@ -176,6 +182,7 @@ def _binary_func(lhs, rhs, c_func):
176182
177183 return out
178184
185+
179186def _binary_funcr (lhs , rhs , c_func ):
180187 out = Array ()
181188 other = lhs
@@ -192,9 +199,10 @@ def _binary_funcr(lhs, rhs, c_func):
192199
193200 return out
194201
202+
195203def _ctype_to_lists (ctype_arr , dim , shape , offset = 0 ):
196204 if (dim == 0 ):
197- return list (ctype_arr [offset : offset + shape [0 ]])
205+ return list (ctype_arr [offset : offset + shape [0 ]])
198206 else :
199207 dim_len = shape [dim ]
200208 res = [[]] * dim_len
@@ -203,6 +211,7 @@ def _ctype_to_lists(ctype_arr, dim, shape, offset=0):
203211 offset += shape [0 ]
204212 return res
205213
214+
206215def _slice_to_length (key , dim ):
207216 tkey = [key .start , key .stop , key .step ]
208217
@@ -221,6 +230,7 @@ def _slice_to_length(key, dim):
221230
222231 return int (((tkey [1 ] - tkey [0 ] - 1 ) / tkey [2 ]) + 1 )
223232
233+
224234def _get_info (dims , buf_len ):
225235 elements = 1
226236 numdims = 0
@@ -250,6 +260,7 @@ def _get_indices(key):
250260
251261 return inds
252262
263+
253264def _get_assign_dims (key , idims ):
254265
255266 dims = [1 ]* 4
@@ -296,6 +307,7 @@ def _get_assign_dims(key, idims):
296307 else :
297308 raise IndexError ("Invalid type while assigning to arrayfire.array" )
298309
310+
299311def transpose (a , conj = False ):
300312 """
301313 Perform the transpose on an input.
@@ -318,6 +330,7 @@ def transpose(a, conj=False):
318330 safe_call (backend .get ().af_transpose (c_pointer (out .arr ), a .arr , conj ))
319331 return out
320332
333+
321334def transpose_inplace (a , conj = False ):
322335 """
323336 Perform inplace transpose on an input.
@@ -338,6 +351,7 @@ def transpose_inplace(a, conj=False):
338351 """
339352 safe_call (backend .get ().af_transpose_inplace (a .arr , conj ))
340353
354+
341355class Array (BaseArray ):
342356
343357 """
@@ -447,8 +461,8 @@ def __init__(self, src=None, dims=None, dtype=None, is_device=False, offset=None
447461
448462 super (Array , self ).__init__ ()
449463
450- buf = None
451- buf_len = 0
464+ buf = None
465+ buf_len = 0
452466
453467 if dtype is not None :
454468 if isinstance (dtype , str ):
@@ -458,7 +472,7 @@ def __init__(self, src=None, dims=None, dtype=None, is_device=False, offset=None
458472 else :
459473 type_char = None
460474
461- _type_char = 'f'
475+ _type_char = 'f'
462476
463477 if src is not None :
464478
@@ -469,12 +483,12 @@ def __init__(self, src=None, dims=None, dtype=None, is_device=False, offset=None
469483 host = __import__ ("array" )
470484
471485 if isinstance (src , host .array ):
472- buf ,buf_len = src .buffer_info ()
486+ buf , buf_len = src .buffer_info ()
473487 _type_char = src .typecode
474488 numdims , idims = _get_info (dims , buf_len )
475489 elif isinstance (src , list ):
476490 tmp = host .array ('f' , src )
477- buf ,buf_len = tmp .buffer_info ()
491+ buf , buf_len = tmp .buffer_info ()
478492 _type_char = tmp .typecode
479493 numdims , idims = _get_info (dims , buf_len )
480494 elif isinstance (src , int ) or isinstance (src , c_void_ptr_t ):
@@ -498,7 +512,7 @@ def __init__(self, src=None, dims=None, dtype=None, is_device=False, offset=None
498512 raise TypeError ("src is an object of unsupported class" )
499513
500514 if (type_char is not None and
501- type_char != _type_char ):
515+ type_char != _type_char ):
502516 raise TypeError ("Can not create array of requested type from input data type" )
503517 if (offset is None and strides is None ):
504518 self .arr = _create_array (buf , numdims , idims , to_dtype [_type_char ], is_device )
@@ -620,8 +634,8 @@ def strides(self):
620634 s2 = c_dim_t (0 )
621635 s3 = c_dim_t (0 )
622636 safe_call (backend .get ().af_get_strides (c_pointer (s0 ), c_pointer (s1 ),
623- c_pointer (s2 ), c_pointer (s3 ), self .arr ))
624- strides = (s0 .value ,s1 .value ,s2 .value ,s3 .value )
637+ c_pointer (s2 ), c_pointer (s3 ), self .arr ))
638+ strides = (s0 .value , s1 .value , s2 .value , s3 .value )
625639 return strides [:self .numdims ()]
626640
627641 def elements (self ):
@@ -680,8 +694,8 @@ def dims(self):
680694 d2 = c_dim_t (0 )
681695 d3 = c_dim_t (0 )
682696 safe_call (backend .get ().af_get_dims (c_pointer (d0 ), c_pointer (d1 ),
683- c_pointer (d2 ), c_pointer (d3 ), self .arr ))
684- dims = (d0 .value ,d1 .value ,d2 .value ,d3 .value )
697+ c_pointer (d2 ), c_pointer (d3 ), self .arr ))
698+ dims = (d0 .value , d1 .value , d2 .value , d3 .value )
685699 return dims [:self .numdims ()]
686700
687701 @property
@@ -906,7 +920,7 @@ def __itruediv__(self, other):
906920 """
907921 Perform self /= other.
908922 """
909- self = _binary_func (self , other , backend .get ().af_div )
923+ self = _binary_func (self , other , backend .get ().af_div )
910924 return self
911925
912926 def __rtruediv__ (self , other ):
@@ -925,7 +939,7 @@ def __idiv__(self, other):
925939 """
926940 Perform other / self.
927941 """
928- self = _binary_func (self , other , backend .get ().af_div )
942+ self = _binary_func (self , other , backend .get ().af_div )
929943 return self
930944
931945 def __rdiv__ (self , other ):
@@ -944,7 +958,7 @@ def __imod__(self, other):
944958 """
945959 Perform self %= other.
946960 """
947- self = _binary_func (self , other , backend .get ().af_mod )
961+ self = _binary_func (self , other , backend .get ().af_mod )
948962 return self
949963
950964 def __rmod__ (self , other ):
@@ -963,7 +977,7 @@ def __ipow__(self, other):
963977 """
964978 Perform self **= other.
965979 """
966- self = _binary_func (self , other , backend .get ().af_pow )
980+ self = _binary_func (self , other , backend .get ().af_pow )
967981 return self
968982
969983 def __rpow__ (self , other ):
@@ -1106,15 +1120,15 @@ def logical_and(self, other):
11061120 Return self && other.
11071121 """
11081122 out = Array ()
1109- safe_call (backend .get ().af_and (c_pointer (out .arr ), self .arr , other .arr )) # TODO: bcast var?
1123+ safe_call (backend .get ().af_and (c_pointer (out .arr ), self .arr , other .arr )) # TODO: bcast var?
11101124 return out
11111125
11121126 def logical_or (self , other ):
11131127 """
11141128 Return self || other.
11151129 """
11161130 out = Array ()
1117- safe_call (backend .get ().af_or (c_pointer (out .arr ), self .arr , other .arr )) # TODO: bcast var?
1131+ safe_call (backend .get ().af_or (c_pointer (out .arr ), self .arr , other .arr )) # TODO: bcast var?
11181132 return out
11191133
11201134 def __nonzero__ (self ):
@@ -1144,12 +1158,11 @@ def __getitem__(self, key):
11441158 inds = _get_indices (key )
11451159
11461160 safe_call (backend .get ().af_index_gen (c_pointer (out .arr ),
1147- self .arr , c_dim_t (n_dims ), inds .pointer ))
1161+ self .arr , c_dim_t (n_dims ), inds .pointer ))
11481162 return out
11491163 except RuntimeError as e :
11501164 raise IndexError (str (e ))
11511165
1152-
11531166 def __setitem__ (self , key , val ):
11541167 """
11551168 Perform self[key] = val
@@ -1175,14 +1188,14 @@ def __setitem__(self, key, val):
11751188 n_dims = 1
11761189 other_arr = constant_array (val , int (num ), dtype = self .type ())
11771190 else :
1178- other_arr = constant_array (val , tdims [0 ] , tdims [1 ], tdims [2 ], tdims [3 ], self .type ())
1191+ other_arr = constant_array (val , tdims [0 ], tdims [1 ], tdims [2 ], tdims [3 ], self .type ())
11791192 del_other = True
11801193 else :
11811194 other_arr = val .arr
11821195 del_other = False
11831196
11841197 out_arr = c_void_ptr_t (0 )
1185- inds = _get_indices (key )
1198+ inds = _get_indices (key )
11861199
11871200 safe_call (backend .get ().af_assign_gen (c_pointer (out_arr ),
11881201 self .arr , c_dim_t (n_dims ), inds .pointer ,
@@ -1401,6 +1414,7 @@ def to_ndarray(self, output=None):
14011414 safe_call (backend .get ().af_get_data_ptr (c_void_ptr_t (output .ctypes .data ), tmp .arr ))
14021415 return output
14031416
1417+
14041418def display (a , precision = 4 ):
14051419 """
14061420 Displays the contents of an array.
@@ -1426,6 +1440,7 @@ def display(a, precision=4):
14261440 safe_call (backend .get ().af_print_array_gen (name .encode ('utf-8' ),
14271441 a .arr , c_int_t (precision )))
14281442
1443+
14291444def save_array (key , a , filename , append = False ):
14301445 """
14311446 Save an array to disk.
@@ -1457,6 +1472,7 @@ def save_array(key, a, filename, append=False):
14571472 append ))
14581473 return index .value
14591474
1475+
14601476def read_array (filename , index = None , key = None ):
14611477 """
14621478 Read an array from disk.
@@ -1490,6 +1506,3 @@ def read_array(filename, index=None, key=None):
14901506 key .encode ('utf-8' )))
14911507
14921508 return out
1493-
1494- from .algorithm import (sum , count )
1495- from .arith import cast
0 commit comments