gumath 0.2.0dev5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CONTRIBUTING.md +61 -0
- data/Gemfile +5 -0
- data/History.md +0 -0
- data/README.md +5 -0
- data/Rakefile +105 -0
- data/ext/ruby_gumath/examples.c +126 -0
- data/ext/ruby_gumath/extconf.rb +97 -0
- data/ext/ruby_gumath/functions.c +106 -0
- data/ext/ruby_gumath/gufunc_object.c +79 -0
- data/ext/ruby_gumath/gufunc_object.h +55 -0
- data/ext/ruby_gumath/gumath/AUTHORS.txt +5 -0
- data/ext/ruby_gumath/gumath/INSTALL.txt +42 -0
- data/ext/ruby_gumath/gumath/LICENSE.txt +29 -0
- data/ext/ruby_gumath/gumath/MANIFEST.in +3 -0
- data/ext/ruby_gumath/gumath/Makefile.in +62 -0
- data/ext/ruby_gumath/gumath/README.rst +20 -0
- data/ext/ruby_gumath/gumath/config.guess +1530 -0
- data/ext/ruby_gumath/gumath/config.h.in +52 -0
- data/ext/ruby_gumath/gumath/config.sub +1782 -0
- data/ext/ruby_gumath/gumath/configure +5049 -0
- data/ext/ruby_gumath/gumath/configure.ac +167 -0
- data/ext/ruby_gumath/gumath/doc/_static/copybutton.js +66 -0
- data/ext/ruby_gumath/gumath/doc/conf.py +26 -0
- data/ext/ruby_gumath/gumath/doc/gumath/functions.rst +62 -0
- data/ext/ruby_gumath/gumath/doc/gumath/index.rst +26 -0
- data/ext/ruby_gumath/gumath/doc/index.rst +45 -0
- data/ext/ruby_gumath/gumath/doc/libgumath/data-structures.rst +130 -0
- data/ext/ruby_gumath/gumath/doc/libgumath/functions.rst +78 -0
- data/ext/ruby_gumath/gumath/doc/libgumath/index.rst +25 -0
- data/ext/ruby_gumath/gumath/doc/libgumath/kernels.rst +41 -0
- data/ext/ruby_gumath/gumath/doc/releases/index.rst +11 -0
- data/ext/ruby_gumath/gumath/install-sh +527 -0
- data/ext/ruby_gumath/gumath/libgumath/Makefile.in +170 -0
- data/ext/ruby_gumath/gumath/libgumath/Makefile.vc +160 -0
- data/ext/ruby_gumath/gumath/libgumath/apply.c +201 -0
- data/ext/ruby_gumath/gumath/libgumath/extending/bfloat16.c +130 -0
- data/ext/ruby_gumath/gumath/libgumath/extending/examples.c +176 -0
- data/ext/ruby_gumath/gumath/libgumath/extending/graph.c +393 -0
- data/ext/ruby_gumath/gumath/libgumath/extending/pdist.c +140 -0
- data/ext/ruby_gumath/gumath/libgumath/extending/quaternion.c +156 -0
- data/ext/ruby_gumath/gumath/libgumath/func.c +177 -0
- data/ext/ruby_gumath/gumath/libgumath/gumath.h +205 -0
- data/ext/ruby_gumath/gumath/libgumath/kernels/binary.c +547 -0
- data/ext/ruby_gumath/gumath/libgumath/kernels/unary.c +449 -0
- data/ext/ruby_gumath/gumath/libgumath/nploops.c +219 -0
- data/ext/ruby_gumath/gumath/libgumath/tbl.c +223 -0
- data/ext/ruby_gumath/gumath/libgumath/thread.c +175 -0
- data/ext/ruby_gumath/gumath/libgumath/xndloops.c +130 -0
- data/ext/ruby_gumath/gumath/python/extending.py +24 -0
- data/ext/ruby_gumath/gumath/python/gumath/__init__.py +74 -0
- data/ext/ruby_gumath/gumath/python/gumath/_gumath.c +577 -0
- data/ext/ruby_gumath/gumath/python/gumath/examples.c +93 -0
- data/ext/ruby_gumath/gumath/python/gumath/functions.c +77 -0
- data/ext/ruby_gumath/gumath/python/gumath/pygumath.h +95 -0
- data/ext/ruby_gumath/gumath/python/test_gumath.py +405 -0
- data/ext/ruby_gumath/gumath/setup.py +298 -0
- data/ext/ruby_gumath/gumath/vcbuild/INSTALL.txt +36 -0
- data/ext/ruby_gumath/gumath/vcbuild/vcbuild32.bat +21 -0
- data/ext/ruby_gumath/gumath/vcbuild/vcbuild64.bat +21 -0
- data/ext/ruby_gumath/gumath/vcbuild/vcclean.bat +10 -0
- data/ext/ruby_gumath/gumath/vcbuild/vcdistclean.bat +11 -0
- data/ext/ruby_gumath/include/gumath.h +205 -0
- data/ext/ruby_gumath/include/ruby_gumath.h +41 -0
- data/ext/ruby_gumath/lib/libgumath.a +0 -0
- data/ext/ruby_gumath/lib/libgumath.so +1 -0
- data/ext/ruby_gumath/lib/libgumath.so.0 +1 -0
- data/ext/ruby_gumath/lib/libgumath.so.0.2.0dev3 +0 -0
- data/ext/ruby_gumath/ruby_gumath.c +295 -0
- data/ext/ruby_gumath/ruby_gumath.h +41 -0
- data/ext/ruby_gumath/ruby_gumath_internal.h +45 -0
- data/ext/ruby_gumath/util.c +68 -0
- data/ext/ruby_gumath/util.h +48 -0
- data/gumath.gemspec +47 -0
- data/lib/gumath.rb +7 -0
- data/lib/gumath/version.rb +5 -0
- data/lib/ruby_gumath.so +0 -0
- metadata +206 -0
@@ -0,0 +1,170 @@
|
|
1
|
+
|
2
|
+
# ==============================================================================
|
3
|
+
# Unix Makefile for libxnd
|
4
|
+
# ==============================================================================
|
5
|
+
|
6
|
+
|
7
|
+
LIBSTATIC = @LIBSTATIC@
|
8
|
+
LIBNAME = @LIBNAME@
|
9
|
+
LIBSONAME = @LIBSONAME@
|
10
|
+
LIBSHARED = @LIBSHARED@
|
11
|
+
|
12
|
+
CC = @CC@
|
13
|
+
LD = @LD@
|
14
|
+
AR = @AR@
|
15
|
+
RANLIB = @RANLIB@
|
16
|
+
|
17
|
+
GM_INCLUDES = @CONFIGURE_INCLUDES@
|
18
|
+
|
19
|
+
CONFIGURE_CFLAGS = @CONFIGURE_CFLAGS@
|
20
|
+
GM_CFLAGS = $(strip -I.. -I$(GM_INCLUDES) $(CONFIGURE_CFLAGS) $(CFLAGS))
|
21
|
+
GM_CFLAGS_SHARED = $(GM_CFLAGS) -fPIC
|
22
|
+
|
23
|
+
CONFIGURE_LDFLAGS = @CONFIGURE_LDFLAGS@
|
24
|
+
GM_LDFLAGS = $(strip $(CONFIGURE_LDFLAGS) $(LDFLAGS))
|
25
|
+
|
26
|
+
|
27
|
+
default: $(LIBSTATIC) $(LIBSHARED)
|
28
|
+
|
29
|
+
|
30
|
+
OBJS = apply.o func.o nploops.o tbl.o thread.o xndloops.o unary.o binary.o \
|
31
|
+
examples.o bfloat16.o graph.o quaternion.o pdist.o
|
32
|
+
|
33
|
+
SHARED_OBJS = .objs/apply.o .objs/func.o .objs/nploops.o .objs/tbl.o .objs/thread.o .objs/xndloops.o \
|
34
|
+
.objs/unary.o .objs/binary.o .objs/examples.o .objs/bfloat16.o .objs/graph.o \
|
35
|
+
.objs/quaternion.o .objs/pdist.o
|
36
|
+
|
37
|
+
|
38
|
+
$(LIBSTATIC): Makefile $(OBJS)
|
39
|
+
$(AR) rc $(LIBSTATIC) $(OBJS)
|
40
|
+
$(RANLIB) $(LIBSTATIC)
|
41
|
+
|
42
|
+
$(LIBSHARED): Makefile $(SHARED_OBJS)
|
43
|
+
$(LD) $(GM_LDFLAGS) -o $(LIBSHARED) $(SHARED_OBJS)
|
44
|
+
ln -sf $(LIBSHARED) $(LIBNAME)
|
45
|
+
ln -sf $(LIBSHARED) $(LIBSONAME)
|
46
|
+
|
47
|
+
|
48
|
+
apply.o:\
|
49
|
+
Makefile apply.c gumath.h
|
50
|
+
$(CC) $(GM_CFLAGS) -c apply.c
|
51
|
+
|
52
|
+
.objs/apply.o:\
|
53
|
+
Makefile apply.c gumath.h
|
54
|
+
$(CC) $(GM_CFLAGS_SHARED) -c apply.c -o .objs/apply.o
|
55
|
+
|
56
|
+
func.o:\
|
57
|
+
Makefile func.c gumath.h
|
58
|
+
$(CC) $(GM_CFLAGS) -c func.c
|
59
|
+
|
60
|
+
.objs/func.o:\
|
61
|
+
Makefile func.c gumath.h
|
62
|
+
$(CC) $(GM_CFLAGS_SHARED) -c func.c -o .objs/func.o
|
63
|
+
|
64
|
+
nploops.o:\
|
65
|
+
Makefile nploops.c gumath.h
|
66
|
+
$(CC) $(GM_CFLAGS) -c nploops.c
|
67
|
+
|
68
|
+
.objs/nploops.o:\
|
69
|
+
Makefile nploops.c gumath.h
|
70
|
+
$(CC) $(GM_CFLAGS_SHARED) -c nploops.c -o .objs/nploops.o
|
71
|
+
|
72
|
+
tbl.o:\
|
73
|
+
Makefile tbl.c gumath.h
|
74
|
+
$(CC) $(GM_CFLAGS) -c tbl.c
|
75
|
+
|
76
|
+
.objs/tbl.o:\
|
77
|
+
Makefile tbl.c gumath.h
|
78
|
+
$(CC) $(GM_CFLAGS_SHARED) -c tbl.c -o .objs/tbl.o
|
79
|
+
|
80
|
+
thread.o:\
|
81
|
+
Makefile thread.c gumath.h
|
82
|
+
$(CC) $(GM_CFLAGS) -c thread.c
|
83
|
+
|
84
|
+
.objs/thread.o:\
|
85
|
+
Makefile thread.c gumath.h
|
86
|
+
$(CC) $(GM_CFLAGS_SHARED) -c thread.c -o .objs/thread.o
|
87
|
+
|
88
|
+
xndloops.o:\
|
89
|
+
Makefile xndloops.c gumath.h
|
90
|
+
$(CC) $(GM_CFLAGS) -c xndloops.c
|
91
|
+
|
92
|
+
.objs/xndloops.o:\
|
93
|
+
Makefile xndloops.c gumath.h
|
94
|
+
$(CC) $(GM_CFLAGS_SHARED) -c xndloops.c -o .objs/xndloops.o
|
95
|
+
|
96
|
+
unary.o:\
|
97
|
+
Makefile kernels/unary.c gumath.h
|
98
|
+
$(CC) -I. $(GM_CFLAGS) -Wno-absolute-value -c kernels/unary.c
|
99
|
+
|
100
|
+
.objs/unary.o:\
|
101
|
+
Makefile kernels/unary.c gumath.h
|
102
|
+
$(CC) -I. $(GM_CFLAGS_SHARED) -Wno-absolute-value -c kernels/unary.c -o .objs/unary.o
|
103
|
+
|
104
|
+
binary.o:\
|
105
|
+
Makefile kernels/binary.c gumath.h
|
106
|
+
$(CC) -I. $(GM_CFLAGS) -c kernels/binary.c
|
107
|
+
|
108
|
+
.objs/binary.o:\
|
109
|
+
Makefile kernels/binary.c gumath.h
|
110
|
+
$(CC) -I. $(GM_CFLAGS_SHARED) -c kernels/binary.c -o .objs/binary.o
|
111
|
+
|
112
|
+
examples.o:\
|
113
|
+
Makefile extending/examples.c gumath.h
|
114
|
+
$(CC) -I. $(GM_CFLAGS) -c extending/examples.c -o examples.o
|
115
|
+
|
116
|
+
.objs/examples.o:\
|
117
|
+
Makefile extending/examples.c gumath.h
|
118
|
+
$(CC) -I. $(GM_CFLAGS_SHARED) -c extending/examples.c -o .objs/examples.o
|
119
|
+
|
120
|
+
bfloat16.o:\
|
121
|
+
Makefile extending/bfloat16.c gumath.h
|
122
|
+
$(CC) -I. $(GM_CFLAGS) -c extending/bfloat16.c -o bfloat16.o
|
123
|
+
|
124
|
+
.objs/bfloat16.o:\
|
125
|
+
Makefile extending/bfloat16.c gumath.h
|
126
|
+
$(CC) -I. $(GM_CFLAGS_SHARED) -c extending/bfloat16.c -o .objs/bfloat16.o
|
127
|
+
|
128
|
+
graph.o:\
|
129
|
+
Makefile extending/graph.c gumath.h
|
130
|
+
$(CC) -I. $(GM_CFLAGS) -c extending/graph.c -o graph.o
|
131
|
+
|
132
|
+
.objs/graph.o:\
|
133
|
+
Makefile extending/graph.c gumath.h
|
134
|
+
$(CC) -I. $(GM_CFLAGS_SHARED) -c extending/graph.c -o .objs/graph.o
|
135
|
+
|
136
|
+
quaternion.o:\
|
137
|
+
Makefile extending/quaternion.c gumath.h
|
138
|
+
$(CC) -I. $(GM_CFLAGS) -c extending/quaternion.c -o quaternion.o
|
139
|
+
|
140
|
+
.objs/quaternion.o:\
|
141
|
+
Makefile extending/quaternion.c gumath.h
|
142
|
+
$(CC) -I. $(GM_CFLAGS_SHARED) -c extending/quaternion.c -o .objs/quaternion.o
|
143
|
+
|
144
|
+
pdist.o:\
|
145
|
+
Makefile extending/pdist.c gumath.h
|
146
|
+
$(CC) -I. $(GM_CFLAGS) -c extending/pdist.c -o pdist.o
|
147
|
+
|
148
|
+
.objs/pdist.o:\
|
149
|
+
Makefile extending/pdist.c gumath.h
|
150
|
+
$(CC) -I. $(GM_CFLAGS_SHARED) -c extending/pdist.c -o .objs/pdist.o
|
151
|
+
|
152
|
+
|
153
|
+
# Coverage
|
154
|
+
coverage:\
|
155
|
+
Makefile clean runtest
|
156
|
+
./tests/runtest
|
157
|
+
for file in *.c; do gcov -l "$$file" > /dev/null 2>&1; done
|
158
|
+
|
159
|
+
FORCE:
|
160
|
+
|
161
|
+
clean: FORCE
|
162
|
+
rm -f *.o *.so *.gch *.gcda *.gcno *.gcov *.dyn *.dpi *.lock
|
163
|
+
rm -f $(LIBSTATIC) $(LIBSHARED) $(LIBSONAME) $(LIBNAME)
|
164
|
+
cd .objs && rm -f *.o *.so *.gch *.gcda *.gcno *.gcov *.dyn *.dpi *.lock
|
165
|
+
|
166
|
+
distclean: clean
|
167
|
+
rm -f Makefile
|
168
|
+
|
169
|
+
|
170
|
+
|
@@ -0,0 +1,160 @@
|
|
1
|
+
|
2
|
+
# ======================================================================
|
3
|
+
# Visual C (nmake) Makefile for libgumath
|
4
|
+
# ======================================================================
|
5
|
+
|
6
|
+
LIBSTATIC = libgumath-0.2.0dev3.lib
|
7
|
+
LIBIMPORT = libgumath-0.2.0dev3.dll.lib
|
8
|
+
LIBSHARED = libgumath-0.2.0dev3.dll
|
9
|
+
LIBNDTYPESIMPORT = libndtypes-0.2.0dev3.dll.lib
|
10
|
+
LIBXNDIMPORT = libxnd-0.2.0dev3.dll.lib
|
11
|
+
|
12
|
+
!ifndef LIBNDTYPESINCLUDE
|
13
|
+
LIBNDTYPESINCLUDE = ..\ndtypes\libndtypes
|
14
|
+
!endif
|
15
|
+
|
16
|
+
!ifndef LIBNDTYPESDIR
|
17
|
+
LIBNDTYPESDIR = ..\ndtypes\libndtypes
|
18
|
+
!endif
|
19
|
+
|
20
|
+
!ifndef LIBXNDINCLUDE
|
21
|
+
LIBXNDINCLUDE = ..\xnd\libxnd
|
22
|
+
!endif
|
23
|
+
|
24
|
+
!ifndef LIBXNDDIR
|
25
|
+
LIBXNDDIR = ..\xnd\libxnd
|
26
|
+
!endif
|
27
|
+
|
28
|
+
OPT = /MT /Ox /GS /EHsc /fp:strict
|
29
|
+
OPT_SHARED = /DGM_EXPORT /DNDT_IMPORT /DXND_IMPORT /MD /Ox /GS /EHsc /fp:strict /Fo.objs^\
|
30
|
+
|
31
|
+
COMMON_CFLAGS = /nologo /W4 /wd4200 /wd4201 /wd4204
|
32
|
+
CFLAGS = $(COMMON_CFLAGS) $(OPT)
|
33
|
+
CFLAGS_SHARED = $(COMMON_CFLAGS) $(OPT_SHARED)
|
34
|
+
|
35
|
+
|
36
|
+
default: $(LIBSTATIC) $(LIBSHARED)
|
37
|
+
copy /y gumath.h ..\python\gumath
|
38
|
+
copy /y $(LIBSTATIC) ..\python\gumath
|
39
|
+
copy /y $(LIBIMPORT) ..\python\gumath
|
40
|
+
copy /y $(LIBSHARED) ..\python\gumath
|
41
|
+
|
42
|
+
|
43
|
+
OBJS = apply.obj func.obj nploops.obj tbl.obj xndloops.obj \
|
44
|
+
unary.obj binary.obj examples.obj graph.obj pdist.obj
|
45
|
+
|
46
|
+
SHARED_OBJS = .objs/apply.obj .objs/func.obj .objs/nploops.obj .objs/tbl.obj .objs/xndloops.obj \
|
47
|
+
.objs/unary.obj .objs/binary.obj .objs/examples.obj .objs/graph.obj .objs/pdist.obj
|
48
|
+
|
49
|
+
|
50
|
+
$(LIBSTATIC):\
|
51
|
+
Makefile $(OBJS)
|
52
|
+
-@if exist $@ del $(LIBSTATIC)
|
53
|
+
lib /nologo /out:$(LIBSTATIC) $(OBJS)
|
54
|
+
|
55
|
+
$(LIBSHARED):\
|
56
|
+
Makefile $(SHARED_OBJS)
|
57
|
+
-@if exist $@ del $(LIBSHARED)
|
58
|
+
link /nologo /DLL /MANIFEST /out:$(LIBSHARED) /implib:$(LIBIMPORT) $(SHARED_OBJS) \
|
59
|
+
"/LIBPATH:$(LIBNDTYPESDIR)" $(LIBNDTYPESIMPORT) \
|
60
|
+
"/LIBPATH:$(LIBXNDDIR)" $(LIBXNDIMPORT)
|
61
|
+
mt /nologo -manifest $(LIBSHARED).manifest -outputresource:$(LIBSHARED);2
|
62
|
+
|
63
|
+
|
64
|
+
apply.obj:\
|
65
|
+
Makefile apply.c gumath.h
|
66
|
+
$(CC) "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS) -c apply.c
|
67
|
+
|
68
|
+
.objs\apply.obj:\
|
69
|
+
Makefile apply.c gumath.h
|
70
|
+
$(CC) "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS_SHARED) -c apply.c
|
71
|
+
|
72
|
+
func.obj:\
|
73
|
+
Makefile func.c gumath.h
|
74
|
+
$(CC) "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS) -c func.c
|
75
|
+
|
76
|
+
.objs\func.obj:\
|
77
|
+
Makefile func.c gumath.h
|
78
|
+
$(CC) "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS_SHARED) -c func.c
|
79
|
+
|
80
|
+
nploops.obj:\
|
81
|
+
Makefile nploops.c gumath.h
|
82
|
+
$(CC) "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS) -c nploops.c
|
83
|
+
|
84
|
+
.objs\nploops.obj:\
|
85
|
+
Makefile nploops.c gumath.h
|
86
|
+
$(CC) "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS_SHARED) -c nploops.c
|
87
|
+
|
88
|
+
tbl.obj:\
|
89
|
+
Makefile tbl.c gumath.h
|
90
|
+
$(CC) "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS) -c tbl.c
|
91
|
+
|
92
|
+
.objs\tbl.obj:\
|
93
|
+
Makefile tbl.c gumath.h
|
94
|
+
$(CC) "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS_SHARED) -c tbl.c
|
95
|
+
|
96
|
+
xndloops.obj:\
|
97
|
+
Makefile xndloops.c gumath.h
|
98
|
+
$(CC) "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS) -c xndloops.c
|
99
|
+
|
100
|
+
.objs\xndloops.obj:\
|
101
|
+
Makefile xndloops.c gumath.h
|
102
|
+
$(CC) "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS_SHARED) -c xndloops.c
|
103
|
+
|
104
|
+
unary.obj:\
|
105
|
+
Makefile kernels\unary.c gumath.h
|
106
|
+
$(CC) -I. "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS) -c kernels\unary.c
|
107
|
+
|
108
|
+
.objs\unary.obj:\
|
109
|
+
Makefile kernels\unary.c gumath.h
|
110
|
+
$(CC) -I. "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS_SHARED) -c kernels\unary.c
|
111
|
+
|
112
|
+
binary.obj:\
|
113
|
+
Makefile kernels\binary.c gumath.h
|
114
|
+
$(CC) -I. "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS) -c kernels\binary.c
|
115
|
+
|
116
|
+
.objs\binary.obj:\
|
117
|
+
Makefile kernels\binary.c gumath.h
|
118
|
+
$(CC) -I. "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS_SHARED) -c kernels\binary.c
|
119
|
+
|
120
|
+
examples.obj:\
|
121
|
+
Makefile extending\examples.c gumath.h
|
122
|
+
$(CC) -I. "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS) -c extending\examples.c
|
123
|
+
|
124
|
+
.objs\examples.obj:\
|
125
|
+
Makefile extending\examples.c gumath.h
|
126
|
+
$(CC) -I. "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS_SHARED) -c extending\examples.c
|
127
|
+
|
128
|
+
graph.obj:\
|
129
|
+
Makefile extending\graph.c gumath.h
|
130
|
+
$(CC) -I. "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS) -c extending\graph.c
|
131
|
+
|
132
|
+
.objs\graph.obj:\
|
133
|
+
Makefile extending\graph.c gumath.h
|
134
|
+
$(CC) -I. "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS_SHARED) -c extending\graph.c
|
135
|
+
|
136
|
+
pdist.obj:\
|
137
|
+
Makefile extending\pdist.c gumath.h
|
138
|
+
$(CC) -I. "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS) -c extending\pdist.c
|
139
|
+
|
140
|
+
.objs\pdist.obj:\
|
141
|
+
Makefile extending\pdist.c gumath.h
|
142
|
+
$(CC) -I. "-I$(LIBNDTYPESINCLUDE)" "-I$(LIBXNDINCLUDE)" $(CFLAGS_SHARED) -c extending\pdist.c
|
143
|
+
|
144
|
+
|
145
|
+
FORCE:
|
146
|
+
|
147
|
+
clean: FORCE
|
148
|
+
del /q /f *.exe *.obj *.lib *.dll *.exp *.manifest 2>NUL
|
149
|
+
cd .objs && del /q /f *.obj 2>NUL
|
150
|
+
if exist "..\build\" rd /q /s "..\build\"
|
151
|
+
if exist "..\dist\" rd /q /s "..\dist\"
|
152
|
+
if exist "..\MANIFEST" del "..\MANIFEST"
|
153
|
+
if exist "..\record.txt" del "..\record.txt"
|
154
|
+
cd ..\python\gumath && del *.lib *.dll *.pyd gumath.h 2>NUL
|
155
|
+
|
156
|
+
distclean: clean
|
157
|
+
del Makefile 2>NUL
|
158
|
+
|
159
|
+
|
160
|
+
|
@@ -0,0 +1,201 @@
|
|
1
|
+
/*
|
2
|
+
* BSD 3-Clause License
|
3
|
+
*
|
4
|
+
* Copyright (c) 2017-2018, plures
|
5
|
+
* All rights reserved.
|
6
|
+
*
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
8
|
+
* modification, are permitted provided that the following conditions are met:
|
9
|
+
*
|
10
|
+
* 1. Redistributions of source code must retain the above copyright notice,
|
11
|
+
* this list of conditions and the following disclaimer.
|
12
|
+
*
|
13
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
14
|
+
* this list of conditions and the following disclaimer in the documentation
|
15
|
+
* and/or other materials provided with the distribution.
|
16
|
+
*
|
17
|
+
* 3. Neither the name of the copyright holder nor the names of its
|
18
|
+
* contributors may be used to endorse or promote products derived from
|
19
|
+
* this software without specific prior written permission.
|
20
|
+
*
|
21
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
22
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
23
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
24
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
25
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
26
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
27
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
28
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
29
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*/
|
32
|
+
|
33
|
+
|
34
|
+
#include <stdlib.h>
|
35
|
+
#include <stdint.h>
|
36
|
+
#include <string.h>
|
37
|
+
#include <inttypes.h>
|
38
|
+
#include "ndtypes.h"
|
39
|
+
#include "xnd.h"
|
40
|
+
#include "gumath.h"
|
41
|
+
|
42
|
+
|
43
|
+
static int
|
44
|
+
sum_inner_dimensions(const xnd_t stack[], int nargs, int outer_dims)
|
45
|
+
{
|
46
|
+
int sum = 0, n;
|
47
|
+
int i;
|
48
|
+
|
49
|
+
for (i = 0; i < nargs; i++) {
|
50
|
+
const ndt_t *t = stack[i].type;
|
51
|
+
n = t->ndim - outer_dims;
|
52
|
+
sum += n == 0 ? 1 : n;
|
53
|
+
}
|
54
|
+
|
55
|
+
return sum;
|
56
|
+
}
|
57
|
+
|
58
|
+
int
|
59
|
+
gm_apply(const gm_kernel_t *kernel, xnd_t stack[], int outer_dims,
|
60
|
+
ndt_context_t *ctx)
|
61
|
+
{
|
62
|
+
const int nargs = (int)kernel->set->sig->Function.nargs;
|
63
|
+
|
64
|
+
switch (kernel->flag) {
|
65
|
+
case NDT_ELEMWISE_1D: {
|
66
|
+
if (outer_dims == 0) {
|
67
|
+
ndt_err_format(ctx, NDT_RuntimeError,
|
68
|
+
"gm_xnd_map: optimized elementwise kernel called with "
|
69
|
+
"outer_dims==0");
|
70
|
+
return -1;
|
71
|
+
}
|
72
|
+
|
73
|
+
return gm_xnd_map(kernel->set->Opt, stack, nargs, outer_dims-1, ctx);
|
74
|
+
}
|
75
|
+
|
76
|
+
case NDT_C: {
|
77
|
+
return gm_xnd_map(kernel->set->C, stack, nargs, outer_dims, ctx);
|
78
|
+
}
|
79
|
+
|
80
|
+
case NDT_FORTRAN: {
|
81
|
+
return gm_xnd_map(kernel->set->Fortran, stack, nargs, outer_dims, ctx);
|
82
|
+
}
|
83
|
+
|
84
|
+
case NDT_XND: {
|
85
|
+
return gm_xnd_map(kernel->set->Xnd, stack, nargs, outer_dims, ctx);
|
86
|
+
}
|
87
|
+
|
88
|
+
case NDT_STRIDED: {
|
89
|
+
const int sum_inner = sum_inner_dimensions(stack, nargs, outer_dims);
|
90
|
+
const int dims_size = outer_dims + sum_inner;
|
91
|
+
const int steps_size = nargs * outer_dims + sum_inner;
|
92
|
+
ALLOCA(char *, args, nargs);
|
93
|
+
ALLOCA(intptr_t, dimensions, dims_size);
|
94
|
+
ALLOCA(intptr_t, steps, steps_size);
|
95
|
+
|
96
|
+
if (gm_np_convert_xnd(args, nargs,
|
97
|
+
dimensions, dims_size,
|
98
|
+
steps, steps_size,
|
99
|
+
stack, outer_dims, ctx) < 0) {
|
100
|
+
return -1;
|
101
|
+
}
|
102
|
+
|
103
|
+
return gm_np_map(kernel->set->Strided, args, nargs,
|
104
|
+
dimensions, steps, NULL, outer_dims);
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
/* NOT REACHED: tags should be exhaustive. */
|
109
|
+
ndt_internal_error("invalid tag");
|
110
|
+
}
|
111
|
+
|
112
|
+
static gm_kernel_t
|
113
|
+
select_kernel(const ndt_apply_spec_t *spec, const gm_kernel_set_t *set,
|
114
|
+
ndt_context_t *ctx)
|
115
|
+
{
|
116
|
+
gm_kernel_t kernel = {0U, NULL};
|
117
|
+
|
118
|
+
kernel.set = set;
|
119
|
+
|
120
|
+
if (set->Opt != NULL && (spec->flags&NDT_ELEMWISE_1D)) {
|
121
|
+
kernel.flag = NDT_ELEMWISE_1D;
|
122
|
+
return kernel;
|
123
|
+
}
|
124
|
+
|
125
|
+
if (set->C != NULL && (spec->flags&NDT_C)) {
|
126
|
+
kernel.flag = NDT_C;
|
127
|
+
return kernel;
|
128
|
+
}
|
129
|
+
|
130
|
+
if (set->Fortran != NULL && (spec->flags&NDT_FORTRAN)) {
|
131
|
+
kernel.flag = NDT_FORTRAN;
|
132
|
+
return kernel;
|
133
|
+
}
|
134
|
+
|
135
|
+
if (set->Strided != NULL && (spec->flags&NDT_STRIDED)) {
|
136
|
+
kernel.flag = NDT_STRIDED;
|
137
|
+
return kernel;
|
138
|
+
}
|
139
|
+
|
140
|
+
if (set->Xnd != NULL && (spec->flags&NDT_XND)) {
|
141
|
+
kernel.flag = NDT_XND;
|
142
|
+
return kernel;
|
143
|
+
}
|
144
|
+
|
145
|
+
kernel.set = NULL;
|
146
|
+
ndt_err_format(ctx, NDT_RuntimeError,
|
147
|
+
"could not find specialized kernel for '%s' input (available: %s, %s, %s, %s)",
|
148
|
+
ndt_apply_flags_as_string(spec),
|
149
|
+
set->C ? "C" : "_",
|
150
|
+
set->Fortran ? "Fortran" : "_",
|
151
|
+
set->Xnd ? "Xnd" : "_",
|
152
|
+
set->Strided ? "Strided" : "_");
|
153
|
+
|
154
|
+
return kernel;
|
155
|
+
}
|
156
|
+
|
157
|
+
/* Look up a multimethod by name and select a kernel. */
|
158
|
+
gm_kernel_t
|
159
|
+
gm_select(ndt_apply_spec_t *spec, const gm_tbl_t *tbl, const char *name,
|
160
|
+
const ndt_t *in_types[], int nin, const xnd_t args[],
|
161
|
+
ndt_context_t *ctx)
|
162
|
+
{
|
163
|
+
gm_kernel_t empty_kernel = {0U, NULL};
|
164
|
+
const gm_func_t *f;
|
165
|
+
char *s;
|
166
|
+
int i;
|
167
|
+
|
168
|
+
f = gm_tbl_find(tbl, name, ctx);
|
169
|
+
if (f == NULL) {
|
170
|
+
return empty_kernel;
|
171
|
+
}
|
172
|
+
|
173
|
+
if (f->typecheck != NULL) {
|
174
|
+
const gm_kernel_set_t *set = f->typecheck(spec, f, in_types, nin, ctx);
|
175
|
+
if (set == NULL) {
|
176
|
+
return empty_kernel;
|
177
|
+
}
|
178
|
+
return select_kernel(spec, set, ctx);
|
179
|
+
}
|
180
|
+
|
181
|
+
for (i = 0; i < f->nkernels; i++) {
|
182
|
+
const gm_kernel_set_t *set = &f->kernels[i];
|
183
|
+
if (ndt_typecheck(spec, set->sig, in_types, nin, set->constraint, args,
|
184
|
+
ctx) < 0) {
|
185
|
+
ndt_err_clear(ctx);
|
186
|
+
continue;
|
187
|
+
}
|
188
|
+
return select_kernel(spec, set, ctx);
|
189
|
+
}
|
190
|
+
|
191
|
+
s = ndt_list_as_string(in_types, nin, ctx);
|
192
|
+
if (s == NULL) {
|
193
|
+
return empty_kernel;
|
194
|
+
}
|
195
|
+
|
196
|
+
ndt_err_format(ctx, NDT_TypeError,
|
197
|
+
"could not find '%s' kernel for input types '%s'", name, s);
|
198
|
+
ndt_free(s);
|
199
|
+
|
200
|
+
return empty_kernel;
|
201
|
+
}
|