xnd 0.2.0dev6 → 0.2.0dev7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -0
  3. data/Rakefile +1 -1
  4. data/ext/ruby_xnd/GPATH +0 -0
  5. data/ext/ruby_xnd/GRTAGS +0 -0
  6. data/ext/ruby_xnd/GTAGS +0 -0
  7. data/ext/ruby_xnd/extconf.rb +8 -5
  8. data/ext/ruby_xnd/gc_guard.c +53 -2
  9. data/ext/ruby_xnd/gc_guard.h +8 -2
  10. data/ext/ruby_xnd/include/overflow.h +147 -0
  11. data/ext/ruby_xnd/include/ruby_xnd.h +62 -0
  12. data/ext/ruby_xnd/include/xnd.h +590 -0
  13. data/ext/ruby_xnd/lib/libxnd.a +0 -0
  14. data/ext/ruby_xnd/lib/libxnd.so +1 -0
  15. data/ext/ruby_xnd/lib/libxnd.so.0 +1 -0
  16. data/ext/ruby_xnd/lib/libxnd.so.0.2.0dev3 +0 -0
  17. data/ext/ruby_xnd/ruby_xnd.c +556 -47
  18. data/ext/ruby_xnd/ruby_xnd.h +2 -1
  19. data/ext/ruby_xnd/xnd/Makefile +80 -0
  20. data/ext/ruby_xnd/xnd/config.h +26 -0
  21. data/ext/ruby_xnd/xnd/config.h.in +3 -0
  22. data/ext/ruby_xnd/xnd/config.log +421 -0
  23. data/ext/ruby_xnd/xnd/config.status +1023 -0
  24. data/ext/ruby_xnd/xnd/configure +376 -8
  25. data/ext/ruby_xnd/xnd/configure.ac +48 -7
  26. data/ext/ruby_xnd/xnd/doc/xnd/index.rst +3 -1
  27. data/ext/ruby_xnd/xnd/doc/xnd/{types.rst → xnd.rst} +3 -18
  28. data/ext/ruby_xnd/xnd/libxnd/Makefile +142 -0
  29. data/ext/ruby_xnd/xnd/libxnd/Makefile.in +43 -3
  30. data/ext/ruby_xnd/xnd/libxnd/Makefile.vc +19 -3
  31. data/ext/ruby_xnd/xnd/libxnd/bitmaps.c +42 -3
  32. data/ext/ruby_xnd/xnd/libxnd/bitmaps.o +0 -0
  33. data/ext/ruby_xnd/xnd/libxnd/bounds.c +366 -0
  34. data/ext/ruby_xnd/xnd/libxnd/bounds.o +0 -0
  35. data/ext/ruby_xnd/xnd/libxnd/contrib.h +98 -0
  36. data/ext/ruby_xnd/xnd/libxnd/contrib/bfloat16.h +213 -0
  37. data/ext/ruby_xnd/xnd/libxnd/copy.c +155 -4
  38. data/ext/ruby_xnd/xnd/libxnd/copy.o +0 -0
  39. data/ext/ruby_xnd/xnd/libxnd/cuda/cuda_memory.cu +121 -0
  40. data/ext/ruby_xnd/xnd/libxnd/cuda/cuda_memory.h +58 -0
  41. data/ext/ruby_xnd/xnd/libxnd/equal.c +195 -7
  42. data/ext/ruby_xnd/xnd/libxnd/equal.o +0 -0
  43. data/ext/ruby_xnd/xnd/libxnd/inline.h +32 -0
  44. data/ext/ruby_xnd/xnd/libxnd/libxnd.a +0 -0
  45. data/ext/ruby_xnd/xnd/libxnd/libxnd.so +1 -0
  46. data/ext/ruby_xnd/xnd/libxnd/libxnd.so.0 +1 -0
  47. data/ext/ruby_xnd/xnd/libxnd/libxnd.so.0.2.0dev3 +0 -0
  48. data/ext/ruby_xnd/xnd/libxnd/shape.c +207 -0
  49. data/ext/ruby_xnd/xnd/libxnd/shape.o +0 -0
  50. data/ext/ruby_xnd/xnd/libxnd/split.c +2 -2
  51. data/ext/ruby_xnd/xnd/libxnd/split.o +0 -0
  52. data/ext/ruby_xnd/xnd/libxnd/tests/Makefile +39 -0
  53. data/ext/ruby_xnd/xnd/libxnd/xnd.c +613 -91
  54. data/ext/ruby_xnd/xnd/libxnd/xnd.h +145 -4
  55. data/ext/ruby_xnd/xnd/libxnd/xnd.o +0 -0
  56. data/ext/ruby_xnd/xnd/python/test_xnd.py +1125 -50
  57. data/ext/ruby_xnd/xnd/python/xnd/__init__.py +609 -124
  58. data/ext/ruby_xnd/xnd/python/xnd/_version.py +1 -0
  59. data/ext/ruby_xnd/xnd/python/xnd/_xnd.c +1652 -101
  60. data/ext/ruby_xnd/xnd/python/xnd/libxnd.a +0 -0
  61. data/ext/ruby_xnd/xnd/python/xnd/libxnd.so +1 -0
  62. data/ext/ruby_xnd/xnd/python/xnd/libxnd.so.0 +1 -0
  63. data/ext/ruby_xnd/xnd/python/xnd/libxnd.so.0.2.0dev3 +0 -0
  64. data/ext/ruby_xnd/xnd/python/xnd/pyxnd.h +1 -1
  65. data/ext/ruby_xnd/xnd/python/xnd/util.h +25 -0
  66. data/ext/ruby_xnd/xnd/python/xnd/xnd.h +590 -0
  67. data/ext/ruby_xnd/xnd/python/xnd_randvalue.py +106 -6
  68. data/ext/ruby_xnd/xnd/python/xnd_support.py +4 -0
  69. data/ext/ruby_xnd/xnd/setup.py +46 -4
  70. data/lib/ruby_xnd.so +0 -0
  71. data/lib/xnd.rb +39 -3
  72. data/lib/xnd/version.rb +2 -2
  73. data/xnd.gemspec +2 -1
  74. metadata +58 -5
@@ -41,9 +41,12 @@ AC_SUBST(host)
41
41
 
42
42
  # Language and compiler:
43
43
  AC_LANG_C
44
- saved_cflags=$CFLAGS
44
+ saved_cflags="$CFLAGS"
45
+ saved_cxxflags="$CXXFLAGS"
45
46
  AC_PROG_CC
46
- CFLAGS=$saved_cflags
47
+ AC_PROG_CXX
48
+ CFLAGS="$saved_cflags"
49
+ CXXFLAGS="$saved_cxxflags"
47
50
 
48
51
  # ar and ranlib:
49
52
  AC_CHECK_TOOL(AR, ar, ar)
@@ -58,6 +61,37 @@ AC_HEADER_STDC
58
61
  AC_PROG_INSTALL
59
62
  AC_SUBST(INSTALL)
60
63
 
64
+ # Cuda compiler:
65
+ AC_MSG_CHECKING(for nvcc)
66
+ saved_cc="$CC"
67
+ saved_cflags="$CFLAGS"
68
+ saved_cxxflags="$CXXFLAGS"
69
+ CC=nvcc
70
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
71
+ void
72
+ f(void)
73
+ {
74
+ return;
75
+ }
76
+ ]])],
77
+ [have_nvcc=yes],
78
+ [have_nvcc=no],
79
+ [have_nvcc=undefined])
80
+ CC="$saved_cc"
81
+ CFLAGS="$saved_cflags"
82
+ CXXFLAGS="$saved_cxxflags"
83
+ AC_MSG_RESULT($have_nvcc)
84
+
85
+ CUDA_CXX=
86
+ CONFIGURE_CUDA_CXXFLAGS=
87
+ if test "$have_nvcc" = yes; then
88
+ CUDA_CXX="nvcc"
89
+ CONFIGURE_CUDA_CXXFLAGS="-std=c++11"
90
+ AC_DEFINE(HAVE_CUDA, 1, [Define to 1 if you have the nvcc cuda compiler.])
91
+ fi
92
+ AC_SUBST(CUDA_CXX)
93
+ AC_SUBST(CONFIGURE_CUDA_CXXFLAGS)
94
+
61
95
  # Add an explicit include directory.
62
96
  AC_MSG_CHECKING(for --with-includes)
63
97
  AC_ARG_WITH(includes,
@@ -116,20 +150,20 @@ AC_SUBST(NDT_INSTALL_DOCS)
116
150
 
117
151
  # Compiler dependent settings:
118
152
  XND_WARN=
119
- XND_OPT="-O2"
153
+ XND_OPT="-O2 -g"
120
154
  case $CC in
121
155
  *gcc*)
122
156
  XND_WARN="-Wall -Wextra -std=c11 -pedantic"
123
- XND_OPT="-O2"
157
+ XND_OPT="-O2 -g"
124
158
  ;;
125
159
  *icc*)
126
160
  AR=xiar
127
161
  XND_WARN="-Wall"
128
- XND_OPT="-O2"
162
+ XND_OPT="-O2 -g"
129
163
  ;;
130
164
  *clang*)
131
165
  XND_WARN="-Wall -Wextra -std=c11 -pedantic"
132
- XND_OPT="-O2"
166
+ XND_OPT="-O2 -g"
133
167
  ;;
134
168
  esac
135
169
 
@@ -137,7 +171,7 @@ esac
137
171
 
138
172
  # Substitute variables and generate output:
139
173
  if test -z "$LD"; then
140
- LD="$CC"
174
+ LD="$CXX"
141
175
  fi
142
176
  AC_SUBST(LD)
143
177
  AC_SUBST(AR)
@@ -151,6 +185,12 @@ else
151
185
  CONFIGURE_CFLAGS="$XND_INCLUDE $XND_WARN $XND_CONFIG $XND_OPT $CFLAGS"
152
186
  fi
153
187
 
188
+ if test -z "$CXXFLAGS"; then
189
+ CONFIGURE_CXXFLAGS="$XND_INCLUDE -Wall -Wextra -O2 -g"
190
+ else
191
+ CONFIGURE_CXXFLAGS="$XND_INCLUDE -Wall -Wextra -O2 -g $CXXFLAGS"
192
+ fi
193
+
154
194
  if test -z "$LDFLAGS"; then
155
195
  CONFIGURE_LDFLAGS="$XND_LINK $CONFIGURE_LDFLAGS"
156
196
  else
@@ -158,6 +198,7 @@ else
158
198
  fi
159
199
 
160
200
  AC_SUBST(CONFIGURE_CFLAGS)
201
+ AC_SUBST(CONFIGURE_CXXFLAGS)
161
202
  AC_SUBST(CONFIGURE_LDFLAGS)
162
203
 
163
204
  AC_OUTPUT
@@ -21,10 +21,12 @@ Operations like indexing and slicing return zero-copy typed views on the data.
21
21
  Importing PEP-3118 buffers is supported.
22
22
 
23
23
 
24
+
24
25
  .. toctree::
25
26
  :maxdepth: 1
26
27
 
27
- types.rst
28
+ xnd.rst
29
+ array.rst
28
30
  align-pack.rst
29
31
  buffer-protocol.rst
30
32
  quickstart.rst
@@ -233,21 +233,6 @@ Here, type inference would deduce :c:macro:`int64`, so :c:macro:`uint8` needs
233
233
  to be passed explicitly.
234
234
 
235
235
 
236
- Performance
237
- ~~~~~~~~~~~
238
-
239
- For large arrays, explicit types are significantly faster. Type inference
240
- supports arbitrary nesting depth, is complex and still implemented in pure
241
- Python. Compare:
242
-
243
- .. doctest::
244
-
245
- >>> lst = [1] * 1000000
246
- >>> x = xnd(lst) # inference
247
- >>>
248
- >>> x = xnd(lst, type='1000000 * int64') # explicit
249
-
250
-
251
236
  All supported types
252
237
  -------------------
253
238
 
@@ -666,9 +651,9 @@ As a short example, here is a tuple that contains all primitive types:
666
651
  ... (bool,
667
652
  ... int8, int16, int32, int64,
668
653
  ... uint8, uint16, uint32, uint64,
669
- ... float16, float32, float64,
670
- ... complex32, complex64, complex128)
654
+ ... bfloat16, float16, float32, float64,
655
+ ... bcomplex32, complex32, complex64, complex128)
671
656
  ... """
672
657
  >>> x = xnd.empty(s)
673
658
  >>> x.value
674
- (False, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0j, 0j, 0j)
659
+ (False, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 0j, 0j, 0j, 0j)
@@ -0,0 +1,142 @@
1
+
2
+ # ==============================================================================
3
+ # Unix Makefile for libxnd
4
+ # ==============================================================================
5
+
6
+
7
+ LIBSTATIC = libxnd.a
8
+ LIBNAME = libxnd.so
9
+ LIBSONAME = libxnd.so.0
10
+ LIBSHARED = libxnd.so.0.2.0dev3
11
+
12
+ CC = gcc
13
+ LD = g++
14
+ AR = ar
15
+ RANLIB = ranlib
16
+ CUDA_CXX =
17
+
18
+ XND_INCLUDES = /home/sameer/.rvm/gems/ruby-2.4.1/gems/ndtypes-0.2.0dev6/ext/ruby_ndtypes/include
19
+
20
+ CONFIGURE_CFLAGS = -Wall -Wextra -std=c11 -pedantic -O2 -g
21
+ XND_CFLAGS = $(strip -I.. -I$(XND_INCLUDES) $(CONFIGURE_CFLAGS) $(CFLAGS))
22
+ XND_CFLAGS_SHARED = $(XND_CFLAGS) -fPIC
23
+
24
+ CONFIGURE_CXXFLAGS = -Wall -Wextra -O2 -g
25
+ XND_CXXFLAGS = $(strip -I.. -I$(XND_INCLUDES) $(CONFIGURE_CXXFLAGS) $(CXXFLAGS))
26
+ XND_CXXFLAGS_SHARED = $(XND_CXXFLAGS) -fPIC
27
+
28
+ CONFIGURE_LDFLAGS = -shared -Wl,-soname,libxnd.so.0
29
+ XND_LDFLAGS = $(strip $(CONFIGURE_LDFLAGS) $(LDFLAGS))
30
+
31
+ CONFIGURE_CUDA_CXXFLAGS =
32
+ GM_CUDA_CXXFLAGS = $(strip $(CONFIGURE_CUDA_CXXFLAGS) $(CUDA_CXXFLAGS))
33
+
34
+
35
+ default: $(LIBSTATIC) $(LIBSHARED)
36
+
37
+
38
+ OBJS = bitmaps.o bounds.o copy.o equal.o shape.o split.o xnd.o
39
+
40
+ SHARED_OBJS = .objs/bitmaps.o .objs/bounds.o .objs/copy.o .objs/equal.o .objs/shape.o .objs/split.o .objs/xnd.o
41
+
42
+ ifdef CUDA_CXX
43
+ OBJS += cuda_memory.o
44
+ SHARED_OBJS += .objs/cuda_memory.o
45
+ endif
46
+
47
+
48
+ $(LIBSTATIC): Makefile $(OBJS)
49
+ $(AR) rc $(LIBSTATIC) $(OBJS)
50
+ $(RANLIB) $(LIBSTATIC)
51
+
52
+ $(LIBSHARED): Makefile $(SHARED_OBJS)
53
+ $(LD) $(XND_LDFLAGS) -o $(LIBSHARED) $(SHARED_OBJS)
54
+ ln -sf $(LIBSHARED) $(LIBNAME)
55
+ ln -sf $(LIBSHARED) $(LIBSONAME)
56
+
57
+
58
+ bitmaps.o:\
59
+ Makefile bitmaps.c xnd.h
60
+ $(CC) $(XND_CFLAGS) -c bitmaps.c
61
+
62
+ .objs/bitmaps.o:\
63
+ Makefile bitmaps.c xnd.h
64
+ $(CC) $(XND_CFLAGS_SHARED) -c bitmaps.c -o .objs/bitmaps.o
65
+
66
+ bounds.o:\
67
+ Makefile bounds.c xnd.h
68
+ $(CC) $(XND_CFLAGS) -c bounds.c
69
+
70
+ .objs/bounds.o:\
71
+ Makefile bounds.c xnd.h
72
+ $(CC) $(XND_CFLAGS_SHARED) -c bounds.c -o .objs/bounds.o
73
+
74
+ copy.o:\
75
+ Makefile copy.c xnd.h
76
+ $(CC) $(XND_CFLAGS) -c copy.c
77
+
78
+ .objs/copy.o:\
79
+ Makefile copy.c xnd.h
80
+ $(CC) $(XND_CFLAGS_SHARED) -c copy.c -o .objs/copy.o
81
+
82
+ equal.o:\
83
+ Makefile equal.c xnd.h
84
+ $(CC) $(XND_CFLAGS) -c equal.c
85
+
86
+ .objs/equal.o:\
87
+ Makefile equal.c xnd.h
88
+ $(CC) $(XND_CFLAGS_SHARED) -c equal.c -o .objs/equal.o
89
+
90
+ shape.o:\
91
+ Makefile shape.c overflow.h xnd.h
92
+ $(CC) $(XND_CFLAGS) -c shape.c
93
+
94
+ .objs/shape.o:\
95
+ Makefile shape.c overflow.h xnd.h
96
+ $(CC) $(XND_CFLAGS_SHARED) -c shape.c -o .objs/shape.o
97
+
98
+ split.o:\
99
+ Makefile split.c overflow.h xnd.h
100
+ $(CC) $(XND_CFLAGS) -c split.c
101
+
102
+ .objs/split.o:\
103
+ Makefile split.c overflow.h xnd.h
104
+ $(CC) $(XND_CFLAGS_SHARED) -c split.c -o .objs/split.o
105
+
106
+ xnd.o:\
107
+ Makefile xnd.c xnd.h
108
+ $(CC) $(XND_CFLAGS) -c xnd.c
109
+
110
+ .objs/xnd.o:\
111
+ Makefile xnd.c xnd.h
112
+ $(CC) $(XND_CFLAGS_SHARED) -c xnd.c -o .objs/xnd.o
113
+
114
+
115
+ # Cuda
116
+ cuda_memory.o:\
117
+ Makefile cuda/cuda_memory.cu cuda/cuda_memory.h
118
+ $(CUDA_CXX) --compiler-options "$(XND_CXXFLAGS)" $(GM_CUDA_CXXFLAGS) -c cuda/cuda_memory.cu
119
+
120
+ .objs/cuda_memory.o:\
121
+ Makefile cuda/cuda_memory.cu cuda/cuda_memory.h
122
+ $(CUDA_CXX) --compiler-options "$(XND_CXXFLAGS_SHARED)" $(GM_CUDA_CXXFLAGS) -c cuda/cuda_memory.cu -o .objs/cuda_memory.o
123
+
124
+
125
+ # Coverage
126
+ coverage:\
127
+ Makefile clean runtest
128
+ ./tests/runtest
129
+ for file in *.c; do gcov -l "$$file" > /dev/null 2>&1; done
130
+
131
+ FORCE:
132
+
133
+ clean: FORCE
134
+ rm -f *.o *.so *.gch *.gcda *.gcno *.gcov *.dyn *.dpi *.lock
135
+ rm -f $(LIBSTATIC) $(LIBSHARED) $(LIBSONAME) $(LIBNAME)
136
+ cd .objs && rm -f *.o *.so *.gch *.gcda *.gcno *.gcov *.dyn *.dpi *.lock
137
+
138
+ distclean: clean
139
+ rm -f Makefile
140
+
141
+
142
+
@@ -13,23 +13,36 @@ CC = @CC@
13
13
  LD = @LD@
14
14
  AR = @AR@
15
15
  RANLIB = @RANLIB@
16
+ CUDA_CXX = @CUDA_CXX@
16
17
 
17
18
  XND_INCLUDES = @CONFIGURE_INCLUDES@
18
19
 
19
20
  CONFIGURE_CFLAGS = @CONFIGURE_CFLAGS@
20
- XND_CFLAGS = $(strip -I$(XND_INCLUDES) $(CONFIGURE_CFLAGS) $(CFLAGS))
21
+ XND_CFLAGS = $(strip -I.. -I$(XND_INCLUDES) $(CONFIGURE_CFLAGS) $(CFLAGS))
21
22
  XND_CFLAGS_SHARED = $(XND_CFLAGS) -fPIC
22
23
 
24
+ CONFIGURE_CXXFLAGS = @CONFIGURE_CXXFLAGS@
25
+ XND_CXXFLAGS = $(strip -I.. -I$(XND_INCLUDES) $(CONFIGURE_CXXFLAGS) $(CXXFLAGS))
26
+ XND_CXXFLAGS_SHARED = $(XND_CXXFLAGS) -fPIC
27
+
23
28
  CONFIGURE_LDFLAGS = @CONFIGURE_LDFLAGS@
24
29
  XND_LDFLAGS = $(strip $(CONFIGURE_LDFLAGS) $(LDFLAGS))
25
30
 
31
+ CONFIGURE_CUDA_CXXFLAGS = @CONFIGURE_CUDA_CXXFLAGS@
32
+ GM_CUDA_CXXFLAGS = $(strip $(CONFIGURE_CUDA_CXXFLAGS) $(CUDA_CXXFLAGS))
33
+
26
34
 
27
35
  default: $(LIBSTATIC) $(LIBSHARED)
28
36
 
29
37
 
30
- OBJS = bitmaps.o copy.o equal.o split.o xnd.o
38
+ OBJS = bitmaps.o bounds.o copy.o equal.o shape.o split.o xnd.o
39
+
40
+ SHARED_OBJS = .objs/bitmaps.o .objs/bounds.o .objs/copy.o .objs/equal.o .objs/shape.o .objs/split.o .objs/xnd.o
31
41
 
32
- SHARED_OBJS = .objs/bitmaps.o .objs/copy.o .objs/equal.o .objs/split.o .objs/xnd.o
42
+ ifdef CUDA_CXX
43
+ OBJS += cuda_memory.o
44
+ SHARED_OBJS += .objs/cuda_memory.o
45
+ endif
33
46
 
34
47
 
35
48
  $(LIBSTATIC): Makefile $(OBJS)
@@ -41,6 +54,7 @@ $(LIBSHARED): Makefile $(SHARED_OBJS)
41
54
  ln -sf $(LIBSHARED) $(LIBNAME)
42
55
  ln -sf $(LIBSHARED) $(LIBSONAME)
43
56
 
57
+
44
58
  bitmaps.o:\
45
59
  Makefile bitmaps.c xnd.h
46
60
  $(CC) $(XND_CFLAGS) -c bitmaps.c
@@ -49,6 +63,14 @@ Makefile bitmaps.c xnd.h
49
63
  Makefile bitmaps.c xnd.h
50
64
  $(CC) $(XND_CFLAGS_SHARED) -c bitmaps.c -o .objs/bitmaps.o
51
65
 
66
+ bounds.o:\
67
+ Makefile bounds.c xnd.h
68
+ $(CC) $(XND_CFLAGS) -c bounds.c
69
+
70
+ .objs/bounds.o:\
71
+ Makefile bounds.c xnd.h
72
+ $(CC) $(XND_CFLAGS_SHARED) -c bounds.c -o .objs/bounds.o
73
+
52
74
  copy.o:\
53
75
  Makefile copy.c xnd.h
54
76
  $(CC) $(XND_CFLAGS) -c copy.c
@@ -65,6 +87,14 @@ Makefile equal.c xnd.h
65
87
  Makefile equal.c xnd.h
66
88
  $(CC) $(XND_CFLAGS_SHARED) -c equal.c -o .objs/equal.o
67
89
 
90
+ shape.o:\
91
+ Makefile shape.c overflow.h xnd.h
92
+ $(CC) $(XND_CFLAGS) -c shape.c
93
+
94
+ .objs/shape.o:\
95
+ Makefile shape.c overflow.h xnd.h
96
+ $(CC) $(XND_CFLAGS_SHARED) -c shape.c -o .objs/shape.o
97
+
68
98
  split.o:\
69
99
  Makefile split.c overflow.h xnd.h
70
100
  $(CC) $(XND_CFLAGS) -c split.c
@@ -82,6 +112,16 @@ Makefile xnd.c xnd.h
82
112
  $(CC) $(XND_CFLAGS_SHARED) -c xnd.c -o .objs/xnd.o
83
113
 
84
114
 
115
+ # Cuda
116
+ cuda_memory.o:\
117
+ Makefile cuda/cuda_memory.cu cuda/cuda_memory.h
118
+ $(CUDA_CXX) --compiler-options "$(XND_CXXFLAGS)" $(GM_CUDA_CXXFLAGS) -c cuda/cuda_memory.cu
119
+
120
+ .objs/cuda_memory.o:\
121
+ Makefile cuda/cuda_memory.cu cuda/cuda_memory.h
122
+ $(CUDA_CXX) --compiler-options "$(XND_CXXFLAGS_SHARED)" $(GM_CUDA_CXXFLAGS) -c cuda/cuda_memory.cu -o .objs/cuda_memory.o
123
+
124
+
85
125
  # Coverage
86
126
  coverage:\
87
127
  Makefile clean runtest
@@ -19,7 +19,7 @@ LIBNDTYPESDIR = ..\ndtypes\libndtypes
19
19
  OPT = /MT /Ox /GS /EHsc
20
20
  OPT_SHARED = /DXND_EXPORT /MD /Ox /GS /EHsc /Fo.objs^\
21
21
 
22
- COMMON_CFLAGS = /nologo /W4 /wd4200 /wd4201 /wd4204
22
+ COMMON_CFLAGS = -I.. /nologo /W4 /wd4200 /wd4201 /wd4204
23
23
  CFLAGS = $(COMMON_CFLAGS) $(OPT)
24
24
  CFLAGS_SHARED = $(COMMON_CFLAGS) $(OPT_SHARED)
25
25
 
@@ -31,9 +31,9 @@ default: $(LIBSTATIC) $(LIBSHARED)
31
31
  copy /y $(LIBSHARED) ..\python\xnd
32
32
 
33
33
 
34
- OBJS = bitmaps.obj copy.obj equal.obj split.obj xnd.obj
34
+ OBJS = bitmaps.obj bounds.obj copy.obj equal.obj shape.obj split.obj xnd.obj
35
35
 
36
- SHARED_OBJS = .objs\bitmaps.obj .objs\copy.obj .objs\equal.obj .objs\split.obj .objs\xnd.obj
36
+ SHARED_OBJS = .objs\bitmaps.obj .objs\bounds.obj .objs\copy.obj .objs\equal.obj .objs\shape.obj .objs\split.obj .objs\xnd.obj
37
37
 
38
38
 
39
39
  $(LIBSTATIC):\
@@ -55,6 +55,14 @@ Makefile bitmaps.c xnd.h
55
55
  Makefile bitmaps.c xnd.h
56
56
  $(CC) "-I$(LIBNDTYPESINCLUDE)" $(CFLAGS_SHARED) -c bitmaps.c
57
57
 
58
+ bounds.obj:\
59
+ Makefile bounds.c xnd.h
60
+ $(CC) "-I$(LIBNDTYPESINCLUDE)" $(CFLAGS) -c bounds.c
61
+
62
+ .objs\bounds.obj:\
63
+ Makefile bounds.c xnd.h
64
+ $(CC) "-I$(LIBNDTYPESINCLUDE)" $(CFLAGS_SHARED) -c bounds.c
65
+
58
66
  copy.obj:\
59
67
  Makefile copy.c xnd.h
60
68
  $(CC) "-I$(LIBNDTYPESINCLUDE)" $(CFLAGS) -c copy.c
@@ -71,6 +79,14 @@ Makefile equal.c xnd.h
71
79
  Makefile equal.c xnd.h
72
80
  $(CC) "-I$(LIBNDTYPESINCLUDE)" $(CFLAGS_SHARED) -c equal.c
73
81
 
82
+ shape.obj:\
83
+ Makefile shape.c overflow.h xnd.h
84
+ $(CC) "-I$(LIBNDTYPESINCLUDE)" $(CFLAGS) -c shape.c
85
+
86
+ .objs\shape.obj:\
87
+ Makefile shape.c overflow.h xnd.h
88
+ $(CC) "-I$(LIBNDTYPESINCLUDE)" $(CFLAGS_SHARED) -c shape.c
89
+
74
90
  split.obj:\
75
91
  Makefile split.c overflow.h xnd.h
76
92
  $(CC) "-I$(LIBNDTYPESINCLUDE)" $(CFLAGS) -c split.c
@@ -86,7 +86,13 @@ bitmap_init(xnd_bitmap_t *b, const ndt_t *t, int64_t nitems, ndt_context_t *ctx)
86
86
  assert(b->size == 0);
87
87
  assert(b->next == NULL);
88
88
 
89
- if (t->ndim == 0 && ndt_is_optional(t)) {
89
+ if (ndt_is_optional(t)) {
90
+ if (t->ndim > 0) {
91
+ ndt_err_format(ctx, NDT_NotImplementedError,
92
+ "optional dimensions are not implemented");
93
+ return -1;
94
+ }
95
+
90
96
  b->data = bits_new(nitems, ctx);
91
97
  if (b->data == NULL) {
92
98
  return -1;
@@ -108,8 +114,8 @@ bitmap_init(xnd_bitmap_t *b, const ndt_t *t, int64_t nitems, ndt_context_t *ctx)
108
114
  n = nitems;
109
115
 
110
116
  if (t->ndim == 1) {
111
- int32_t noffsets = t->Concrete.VarDim.noffsets;
112
- n = t->Concrete.VarDim.offsets[noffsets-1];
117
+ int32_t noffsets = t->Concrete.VarDim.offsets->n;
118
+ n = t->Concrete.VarDim.offsets->v[noffsets-1];
113
119
  }
114
120
 
115
121
  return bitmap_init(b, t->VarDim.type, n, ctx);
@@ -163,6 +169,30 @@ bitmap_init(xnd_bitmap_t *b, const ndt_t *t, int64_t nitems, ndt_context_t *ctx)
163
169
  return 0;
164
170
  }
165
171
 
172
+ case Union: {
173
+ shape = t->Union.ntags;
174
+
175
+ n = nitems * shape;
176
+ b->next = bitmap_array_new(n, ctx);
177
+ if (b->next == NULL) {
178
+ xnd_bitmap_clear(b);
179
+ return -1;
180
+ }
181
+ b->size = n;
182
+
183
+ for (i = 0; i < nitems; i++) {
184
+ for (k = 0; k < shape; k++) {
185
+ next = b->next + i*shape + k;
186
+ if (bitmap_init(next, t->Union.types[k], 1, ctx) < 0) {
187
+ xnd_bitmap_clear(b);
188
+ return -1;
189
+ }
190
+ }
191
+ }
192
+
193
+ return 0;
194
+ }
195
+
166
196
  case Ref: {
167
197
  b->next = bitmap_array_new(nitems, ctx);
168
198
  if (b->next == NULL) {
@@ -220,6 +250,12 @@ bitmap_init(xnd_bitmap_t *b, const ndt_t *t, int64_t nitems, ndt_context_t *ctx)
220
250
  return 0;
221
251
  }
222
252
 
253
+ case Array: {
254
+ ndt_err_format(ctx, NDT_NotImplementedError,
255
+ "the element type of flexible arrays cannot be optional");
256
+ return -1;
257
+ }
258
+
223
259
  default:
224
260
  return 0;
225
261
  }
@@ -272,6 +308,9 @@ xnd_bitmap_next(const xnd_t *x, int64_t i, ndt_context_t *ctx)
272
308
  case Record:
273
309
  shape = t->Record.shape;
274
310
  break;
311
+ case Union:
312
+ shape = t->Union.ntags;
313
+ break;
275
314
  case Ref: case Constr: case Nominal:
276
315
  shape = 1;
277
316
  break;