ndtypes 0.2.0dev5 → 0.2.0dev6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +12 -0
- data/Rakefile +8 -0
- data/ext/ruby_ndtypes/GPATH +0 -0
- data/ext/ruby_ndtypes/GRTAGS +0 -0
- data/ext/ruby_ndtypes/GTAGS +0 -0
- data/ext/ruby_ndtypes/extconf.rb +1 -1
- data/ext/ruby_ndtypes/include/ndtypes.h +231 -122
- data/ext/ruby_ndtypes/include/ruby_ndtypes.h +1 -1
- data/ext/ruby_ndtypes/lib/libndtypes.a +0 -0
- data/ext/ruby_ndtypes/lib/libndtypes.so.0.2.0dev3 +0 -0
- data/ext/ruby_ndtypes/ndtypes/Makefile +87 -0
- data/ext/ruby_ndtypes/ndtypes/config.h +68 -0
- data/ext/ruby_ndtypes/ndtypes/config.log +477 -0
- data/ext/ruby_ndtypes/ndtypes/config.status +1027 -0
- data/ext/ruby_ndtypes/ndtypes/doc/_static/style.css +7 -0
- data/ext/ruby_ndtypes/ndtypes/doc/_templates/layout.html +2 -0
- data/ext/ruby_ndtypes/ndtypes/doc/conf.py +40 -4
- data/ext/ruby_ndtypes/ndtypes/doc/images/xndlogo.png +0 -0
- data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/types.rst +1 -1
- data/ext/ruby_ndtypes/ndtypes/doc/requirements.txt +2 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile +287 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile.in +20 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile.vc +22 -3
- data/ext/ruby_ndtypes/ndtypes/libndtypes/alloc.c +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/alloc.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/attr.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/Makefile +73 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.c +246 -229
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.h +15 -11
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.y +38 -28
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.c +91 -91
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.h +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.l +4 -3
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/export.c +8 -7
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/export.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/import.c +2 -2
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/import.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/context.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/copy.c +263 -182
- data/ext/ruby_ndtypes/ndtypes/libndtypes/copy.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/encodings.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/equal.c +67 -7
- data/ext/ruby_ndtypes/ndtypes/libndtypes/equal.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.c +1112 -1000
- data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.h +69 -58
- data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.y +150 -99
- data/ext/ruby_ndtypes/ndtypes/libndtypes/io.c +185 -15
- data/ext/ruby_ndtypes/ndtypes/libndtypes/io.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.c +301 -276
- data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.h +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.l +9 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/libndtypes.a +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/libndtypes.so +1 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/libndtypes.so.0 +1 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/libndtypes.so.0.2.0dev3 +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/match.c +729 -228
- data/ext/ruby_ndtypes/ndtypes/libndtypes/match.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.c +768 -403
- data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.h +1002 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.h.in +231 -122
- data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.c +176 -84
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.h +26 -14
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parser.c +57 -35
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parser.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/primitive.c +420 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/primitive.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.c +8 -8
- data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.h +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/Makefile +48 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/deserialize.c +200 -116
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/deserialize.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/serialize.c +46 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/serialize.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.c +58 -27
- data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.h +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.c +3 -5
- data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.h +12 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile +55 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile.in +8 -8
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile.vc +5 -5
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/runtest.c +274 -172
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test.h +24 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_array.c +2 -2
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_buffer.c +14 -14
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_match.c +32 -30
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse.c +37 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse_error.c +36 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse_roundtrip.c +16 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_record.c +5 -5
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_typecheck.c +706 -253
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_unify.c +132 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/unify.c +703 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/unify.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/util.c +335 -127
- data/ext/ruby_ndtypes/ndtypes/libndtypes/util.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/values.c +2 -2
- data/ext/ruby_ndtypes/ndtypes/libndtypes/values.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndt_randtype.py +88 -71
- data/ext/ruby_ndtypes/ndtypes/python/ndt_support.py +0 -1
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/__init__.py +10 -13
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/_ndtypes.c +395 -314
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/libndtypes.a +0 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/libndtypes.so +1 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/libndtypes.so.0 +1 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/libndtypes.so.0.2.0dev3 +0 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/ndtypes.h +1002 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/pyndtypes.h +15 -33
- data/ext/ruby_ndtypes/ndtypes/python/test_ndtypes.py +340 -132
- data/ext/ruby_ndtypes/ndtypes/setup.py +11 -2
- data/ext/ruby_ndtypes/ruby_ndtypes.c +364 -241
- data/ext/ruby_ndtypes/ruby_ndtypes.h +1 -1
- data/ext/ruby_ndtypes/ruby_ndtypes_internal.h +0 -1
- data/lib/ndtypes.rb +11 -0
- data/lib/ndtypes/version.rb +2 -2
- data/lib/ruby_ndtypes.so +0 -0
- data/ndtypes.gemspec +3 -0
- data/spec/ndtypes_spec.rb +6 -0
- metadata +98 -4
- data/ext/ruby_ndtypes/gc_guard.c +0 -36
- data/ext/ruby_ndtypes/gc_guard.h +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 146d295eb8030be1aa6ab3970ed79f6281f4ff74
|
4
|
+
data.tar.gz: 856f4db436aa8440ea84b6a1d00d6d9d029c30f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 312cda068f83102905c7f383311d989ef74118160e6f8a9db9447ed6748de9026291cbfa295b2e1abfa1610407794e52baeee8aac27b64f0aa43517e31e82f95
|
7
|
+
data.tar.gz: 1eaea4defd4d79fd50e4ba1ec657efe795b9ce535a068e7eb7b95460c140bb179590f6b05b248a43f4848196faff9dfe8eb126f941a5f11fe940844f6a27d623
|
data/CONTRIBUTING.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Developer notes
|
2
2
|
|
3
|
+
## Contributing to ndtypes Ruby wrapper
|
4
|
+
|
5
|
+
If you're interested in contributing to the ndtypes Ruby wrapper, follow the following
|
6
|
+
steps for getting started:
|
7
|
+
|
8
|
+
* Clone the ndtypes repo: `git clone https://github.com/plures/ndtypes.git`.
|
9
|
+
* Switch to the `ruby-wrapper` branch: `git checkout ruby-wrapper`.
|
10
|
+
* Run `bundle install`.
|
11
|
+
* Run `rake develop`. This will build ndtypes with the latest working master branch
|
12
|
+
of libndtypes.
|
13
|
+
* Run `rspec` for running the tests.
|
14
|
+
|
3
15
|
## Interfacing with Ruby's GC
|
4
16
|
|
5
17
|
### Background
|
data/Rakefile
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/extensiontask'
|
3
|
+
require 'rake/testtask'
|
3
4
|
require 'rspec/core/rake_task'
|
4
5
|
require 'bundler/gem_tasks'
|
5
6
|
require 'fileutils'
|
@@ -92,6 +93,13 @@ task :leakcheck => [ :compile ] do |task|
|
|
92
93
|
run( *cmd )
|
93
94
|
end
|
94
95
|
|
96
|
+
|
97
|
+
Rake::TestTask.new(:test) do |t|
|
98
|
+
t.libs << "test"
|
99
|
+
t.libs << "lib"
|
100
|
+
t.test_files = FileList['test/**/test_*.rb']
|
101
|
+
end
|
102
|
+
|
95
103
|
task :clobber do |task|
|
96
104
|
[
|
97
105
|
"ext/#{ext_name}/include",
|
Binary file
|
Binary file
|
Binary file
|
data/ext/ruby_ndtypes/extconf.rb
CHANGED
@@ -54,7 +54,7 @@ FileUtils.copy_file File.expand_path(File.join(File.dirname(__FILE__) +
|
|
54
54
|
|
55
55
|
dir_config("ndtypes", [headers], [binaries])
|
56
56
|
|
57
|
-
basenames = %w{
|
57
|
+
basenames = %w{ruby_ndtypes}
|
58
58
|
$objs = basenames.map { |b| "#{b}.o" }
|
59
59
|
$srcs = basenames.map { |b| "#{b}.c" }
|
60
60
|
|
@@ -35,13 +35,23 @@
|
|
35
35
|
#define NDTYPES_H
|
36
36
|
|
37
37
|
|
38
|
+
#ifdef __cplusplus
|
39
|
+
extern "C" {
|
40
|
+
#endif
|
41
|
+
|
38
42
|
#include <stdio.h>
|
39
43
|
#include <stdlib.h>
|
40
|
-
#include <stdint.h>
|
41
44
|
#include <limits.h>
|
42
45
|
#include <stdbool.h>
|
43
46
|
#include <stddef.h>
|
44
|
-
|
47
|
+
|
48
|
+
#ifdef __cplusplus
|
49
|
+
#include <cstdint>
|
50
|
+
#else
|
51
|
+
#include <stdint.h>
|
52
|
+
#include <inttypes.h>
|
53
|
+
#include <complex.h>
|
54
|
+
#endif
|
45
55
|
|
46
56
|
|
47
57
|
#if SIZE_MAX > ULLONG_MAX
|
@@ -67,12 +77,18 @@
|
|
67
77
|
#define NDTYPES_API
|
68
78
|
#endif
|
69
79
|
|
70
|
-
typedef _Dcomplex ndt_complex128_t;
|
71
|
-
typedef _Fcomplex ndt_complex64_t;
|
72
80
|
#define alignof __alignof
|
73
81
|
#define alignas(n) __declspec(align(n))
|
74
82
|
#define MAX_ALIGN 8
|
75
83
|
#define NDT_SYS_BIG_ENDIAN 0
|
84
|
+
|
85
|
+
#ifdef __cplusplus
|
86
|
+
#define ATOMIC_INT64 int64_t
|
87
|
+
#else
|
88
|
+
#define ATOMIC_INT64 __int64 volatile
|
89
|
+
typedef _Dcomplex ndt_complex128_t;
|
90
|
+
typedef _Fcomplex ndt_complex64_t;
|
91
|
+
#endif
|
76
92
|
#else
|
77
93
|
#define NDTYPES_API
|
78
94
|
|
@@ -80,10 +96,18 @@
|
|
80
96
|
#error "ndtypes requires IEEE floating point arithmetic"
|
81
97
|
#endif
|
82
98
|
#include <stdalign.h>
|
83
|
-
|
84
|
-
typedef float complex ndt_complex64_t;
|
99
|
+
|
85
100
|
#define MAX_ALIGN (alignof(max_align_t))
|
86
101
|
#define NDT_SYS_BIG_ENDIAN 0
|
102
|
+
|
103
|
+
#ifdef __cplusplus
|
104
|
+
#define ATOMIC_INT64 int64_t
|
105
|
+
#else
|
106
|
+
#include <stdatomic.h>
|
107
|
+
#define ATOMIC_INT64 _Atomic int64_t
|
108
|
+
typedef double complex ndt_complex128_t;
|
109
|
+
typedef float complex ndt_complex64_t;
|
110
|
+
#endif
|
87
111
|
#endif
|
88
112
|
|
89
113
|
#if (defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__)) && \
|
@@ -105,11 +129,14 @@
|
|
105
129
|
#define NDT_MAX_DIM 128
|
106
130
|
#define NDT_MAX_ARGS 128
|
107
131
|
|
108
|
-
#define
|
109
|
-
#define
|
110
|
-
#define
|
111
|
-
#define
|
132
|
+
#define NDT_OPTION 0x00000001U
|
133
|
+
#define NDT_SUBTREE_OPTION 0x00000002U
|
134
|
+
#define NDT_LITTLE_ENDIAN 0x00000004U
|
135
|
+
#define NDT_BIG_ENDIAN 0x00000008U
|
112
136
|
#define NDT_ELLIPSIS 0x00000010U
|
137
|
+
#define NDT_POINTER 0x00000020U
|
138
|
+
#define NDT_REF 0x00000040U
|
139
|
+
#define NDT_CHAR 0x00000080U
|
113
140
|
|
114
141
|
|
115
142
|
/* Types: ndt_t */
|
@@ -145,34 +172,37 @@ enum ndt_variadic {
|
|
145
172
|
Variadic
|
146
173
|
};
|
147
174
|
|
148
|
-
/*
|
149
|
-
|
150
|
-
|
151
|
-
|
175
|
+
/* Offsets for a variable dimension. Shared between copies or slices. */
|
176
|
+
typedef struct _ndt_offsets ndt_offsets_t;
|
177
|
+
|
178
|
+
struct _ndt_offsets {
|
179
|
+
ATOMIC_INT64 refcnt;
|
180
|
+
int32_t n; /* number of offsets */
|
181
|
+
const int32_t *v; /* offset array */
|
152
182
|
};
|
153
183
|
|
184
|
+
NDTYPES_API ndt_offsets_t *ndt_offsets_new(int32_t size, ndt_context_t *ctx);
|
185
|
+
NDTYPES_API ndt_offsets_t *ndt_offsets_from_ptr(int32_t *ptr, int32_t size, ndt_context_t *ctx);
|
186
|
+
NDTYPES_API void ndt_incref_offsets(const ndt_offsets_t *);
|
187
|
+
NDTYPES_API void ndt_decref_offsets(const ndt_offsets_t *);
|
188
|
+
|
154
189
|
/*
|
155
|
-
* Collect offsets during parsing for transferring ownership to an external
|
156
|
-
* resource manager later.
|
157
|
-
*
|
158
190
|
* The arrays are addressed by t->ndim-1, where t->ndim > 0. It follows that
|
159
191
|
* offsets[0] are the offsets of the innermost dimension and offsets[ndims-1]
|
160
192
|
* the offsets of the outermost dimension.
|
161
193
|
*/
|
162
194
|
typedef struct {
|
163
|
-
int ndims;
|
164
|
-
|
165
|
-
int32_t *offsets[NDT_MAX_DIM]; /* nth offset array */
|
195
|
+
int ndims; /* number of offset structs */
|
196
|
+
ndt_offsets_t *offsets[NDT_MAX_DIM]; /* offset structs */
|
166
197
|
} ndt_meta_t;
|
167
198
|
|
168
|
-
|
169
199
|
/* Encoding for characters and strings */
|
170
200
|
enum ndt_encoding {
|
171
201
|
Ascii,
|
172
202
|
Utf8,
|
203
|
+
Ucs2,
|
173
204
|
Utf16,
|
174
205
|
Utf32,
|
175
|
-
Ucs2,
|
176
206
|
};
|
177
207
|
|
178
208
|
|
@@ -188,12 +218,15 @@ enum ndt {
|
|
188
218
|
AnyKind,
|
189
219
|
FixedDim,
|
190
220
|
VarDim,
|
221
|
+
VarDimElem,
|
191
222
|
SymbolicDim,
|
192
223
|
EllipsisDim,
|
193
224
|
|
194
225
|
/* Dtype */
|
226
|
+
Array,
|
195
227
|
Tuple,
|
196
228
|
Record,
|
229
|
+
Union,
|
197
230
|
Ref,
|
198
231
|
Constr,
|
199
232
|
Nominal,
|
@@ -228,11 +261,13 @@ enum ndt {
|
|
228
261
|
Uint64,
|
229
262
|
|
230
263
|
FloatKind,
|
264
|
+
BFloat16,
|
231
265
|
Float16,
|
232
266
|
Float32,
|
233
267
|
Float64,
|
234
268
|
|
235
269
|
ComplexKind,
|
270
|
+
BComplex32,
|
236
271
|
Complex32,
|
237
272
|
Complex64,
|
238
273
|
Complex128,
|
@@ -267,7 +302,7 @@ enum ndt_contig {
|
|
267
302
|
typedef struct {
|
268
303
|
enum ndt_access access;
|
269
304
|
char *name;
|
270
|
-
ndt_t *type;
|
305
|
+
const ndt_t *type;
|
271
306
|
struct {
|
272
307
|
uint16_t align;
|
273
308
|
bool explicit_align;
|
@@ -353,7 +388,7 @@ struct _ndt {
|
|
353
388
|
union {
|
354
389
|
struct {
|
355
390
|
char *name;
|
356
|
-
ndt_t *type;
|
391
|
+
const ndt_t *type;
|
357
392
|
} Module;
|
358
393
|
|
359
394
|
struct {
|
@@ -361,62 +396,73 @@ struct _ndt {
|
|
361
396
|
int64_t nin;
|
362
397
|
int64_t nout;
|
363
398
|
int64_t nargs;
|
364
|
-
ndt_t **types;
|
399
|
+
const ndt_t **types;
|
365
400
|
} Function;
|
366
401
|
|
367
402
|
struct {
|
368
403
|
enum ndt_contig tag;
|
369
404
|
int64_t shape;
|
370
|
-
ndt_t *type;
|
405
|
+
const ndt_t *type;
|
371
406
|
} FixedDim;
|
372
407
|
|
373
408
|
struct {
|
374
|
-
ndt_t *type;
|
409
|
+
const ndt_t *type;
|
375
410
|
} VarDim;
|
376
411
|
|
412
|
+
struct {
|
413
|
+
const ndt_t *type;
|
414
|
+
int64_t index;
|
415
|
+
} VarDimElem;
|
416
|
+
|
377
417
|
struct {
|
378
418
|
enum ndt_contig tag;
|
379
419
|
char *name;
|
380
|
-
ndt_t *type;
|
420
|
+
const ndt_t *type;
|
381
421
|
} SymbolicDim;
|
382
422
|
|
383
423
|
struct {
|
384
424
|
enum ndt_contig tag;
|
385
425
|
char *name;
|
386
|
-
ndt_t *type;
|
426
|
+
const ndt_t *type;
|
387
427
|
} EllipsisDim;
|
388
428
|
|
389
429
|
struct {
|
390
430
|
enum ndt_variadic flag;
|
391
431
|
int64_t shape;
|
392
|
-
ndt_t **types;
|
432
|
+
const ndt_t **types;
|
393
433
|
} Tuple;
|
394
434
|
|
395
435
|
struct {
|
396
436
|
enum ndt_variadic flag;
|
397
437
|
int64_t shape;
|
398
438
|
char **names;
|
399
|
-
ndt_t **types;
|
439
|
+
const ndt_t **types;
|
400
440
|
} Record;
|
401
441
|
|
402
442
|
struct {
|
403
|
-
|
443
|
+
int64_t ntags;
|
444
|
+
char **tags;
|
445
|
+
const ndt_t **types;
|
446
|
+
} Union;
|
447
|
+
|
448
|
+
struct {
|
449
|
+
const ndt_t *type;
|
404
450
|
} Ref;
|
405
451
|
|
406
452
|
struct {
|
407
453
|
char *name;
|
408
|
-
ndt_t *type;
|
454
|
+
const ndt_t *type;
|
409
455
|
} Constr;
|
410
456
|
|
411
457
|
struct {
|
412
458
|
char *name;
|
413
|
-
ndt_t *type;
|
459
|
+
const ndt_t *type;
|
414
460
|
const ndt_methods_t *meth;
|
415
461
|
} Nominal;
|
416
462
|
|
417
463
|
struct {
|
418
464
|
int64_t ntypes;
|
419
|
-
ndt_value_t *types;
|
465
|
+
const ndt_value_t *types;
|
420
466
|
} Categorical;
|
421
467
|
|
422
468
|
struct {
|
@@ -433,6 +479,11 @@ struct _ndt {
|
|
433
479
|
uint16_t target_align;
|
434
480
|
} Bytes;
|
435
481
|
|
482
|
+
struct {
|
483
|
+
int64_t itemsize;
|
484
|
+
const ndt_t *type;
|
485
|
+
} Array;
|
486
|
+
|
436
487
|
struct {
|
437
488
|
enum ndt_encoding encoding;
|
438
489
|
} Char;
|
@@ -451,10 +502,8 @@ struct _ndt {
|
|
451
502
|
} FixedDim;
|
452
503
|
|
453
504
|
struct {
|
454
|
-
enum ndt_offsets flag;
|
455
505
|
int64_t itemsize;
|
456
|
-
|
457
|
-
const int32_t *offsets;
|
506
|
+
const ndt_offsets_t *offsets;
|
458
507
|
int nslices;
|
459
508
|
ndt_slice_t *slices;
|
460
509
|
} VarDim;
|
@@ -473,6 +522,10 @@ struct _ndt {
|
|
473
522
|
};
|
474
523
|
} Concrete;
|
475
524
|
|
525
|
+
/* Reference counting */
|
526
|
+
ATOMIC_INT64 refcnt;
|
527
|
+
|
528
|
+
/* Extra space */
|
476
529
|
alignas(MAX_ALIGN) char extra[];
|
477
530
|
};
|
478
531
|
|
@@ -544,21 +597,40 @@ typedef struct {
|
|
544
597
|
int64_t steps[NDT_MAX_DIM];
|
545
598
|
} ndt_ndarray_t;
|
546
599
|
|
547
|
-
/*
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
#define
|
552
|
-
#define
|
553
|
-
#define
|
600
|
+
/*
|
601
|
+
* Type properties that determine what kind of kernel can be used safely. A
|
602
|
+
* property flag is set if it applies to all input and output arguments.
|
603
|
+
*/
|
604
|
+
#define NDT_INNER_C 0x00000001U /* inner dims C-contiguous */
|
605
|
+
#define NDT_INNER_F 0x00000002U /* inner dims F-contiguous */
|
606
|
+
#define NDT_INNER_STRIDED 0x00000004U /* inner dims strided */
|
607
|
+
|
608
|
+
/*
|
609
|
+
* Modifiers to the above properties that determine whether an extended
|
610
|
+
* optimized kernel (inner+1) can be used safely.
|
611
|
+
*
|
612
|
+
* C inner dimensions can be extended to a pure inner+1 C array. Fortran
|
613
|
+
* inner dimensions cannot be extended to yield another Fortran array,
|
614
|
+
* hence the unfortunate asymmetry.
|
615
|
+
*/
|
616
|
+
#define NDT_EXT_C 0x00000010U /* inner+1 dims are C */
|
617
|
+
#define NDT_EXT_ZERO 0x00000020U /* inner dims are C, loop has C or zero stride (GPU) */
|
618
|
+
#define NDT_EXT_STRIDED 0x00000040U /* inner dims are {C,F,strided}, loop is strided */
|
619
|
+
|
620
|
+
#define NDT_INNER_XND 0x00000100U /* inner dims are xnd */
|
621
|
+
|
622
|
+
#define NDT_SPEC_FLAGS_ALL (NDT_INNER_C|NDT_INNER_F|NDT_INNER_STRIDED| \
|
623
|
+
NDT_EXT_C|NDT_EXT_ZERO|NDT_EXT_STRIDED| \
|
624
|
+
NDT_INNER_XND)
|
625
|
+
|
554
626
|
|
555
627
|
typedef struct {
|
556
628
|
uint32_t flags;
|
557
|
-
int nout;
|
558
|
-
int nbroadcast;
|
559
629
|
int outer_dims;
|
560
|
-
|
561
|
-
|
630
|
+
int nin; /* number of 'in' types */
|
631
|
+
int nout; /* number of 'out' types */
|
632
|
+
int nargs; /* nin+nout, for convenience */
|
633
|
+
const ndt_t *types[NDT_MAX_ARGS];
|
562
634
|
} ndt_apply_spec_t;
|
563
635
|
|
564
636
|
NDTYPES_API extern const ndt_apply_spec_t ndt_apply_spec_empty;
|
@@ -567,11 +639,10 @@ NDTYPES_API ndt_apply_spec_t *ndt_apply_spec_new(ndt_context_t *ctx);
|
|
567
639
|
NDTYPES_API void ndt_apply_spec_clear(ndt_apply_spec_t *spec);
|
568
640
|
NDTYPES_API void ndt_apply_spec_del(ndt_apply_spec_t *spec);
|
569
641
|
NDTYPES_API const char *ndt_apply_flags_as_string(const ndt_apply_spec_t *spec);
|
570
|
-
NDTYPES_API int ndt_broadcast_all(ndt_apply_spec_t *spec, const ndt_t *sig,
|
571
|
-
const int64_t *shape, int outer_dims, ndt_context_t *ctx);
|
642
|
+
NDTYPES_API int ndt_broadcast_all(ndt_apply_spec_t *spec, const ndt_t *sig, bool check_broadcast,
|
643
|
+
const int64_t *shape, const int outer_dims, ndt_context_t *ctx);
|
572
644
|
|
573
|
-
NDTYPES_API
|
574
|
-
const ndt_t *in[], int nin);
|
645
|
+
NDTYPES_API int ndt_select_kernel_strategy(ndt_apply_spec_t *spec, ndt_context_t *ctx);
|
575
646
|
|
576
647
|
|
577
648
|
/*****************************************************************************/
|
@@ -583,12 +654,15 @@ NDTYPES_API char *ndt_strdup(const char *s, ndt_context_t *ctx);
|
|
583
654
|
NDTYPES_API char *ndt_asprintf(ndt_context_t *ctx, const char *fmt, ...);
|
584
655
|
|
585
656
|
/* Type functions (unstable API) */
|
657
|
+
NDTYPES_API int64_t ndt_nelem(const ndt_t *t);
|
658
|
+
NDTYPES_API int ndt_logical_ndim(const ndt_t *t);
|
659
|
+
NDTYPES_API const ndt_t *ndt_logical_dim_at(const ndt_t *t, int n);
|
586
660
|
NDTYPES_API const ndt_t *ndt_dtype(const ndt_t *t);
|
587
661
|
NDTYPES_API const ndt_t *ndt_hidden_dtype(const ndt_t *t);
|
588
662
|
NDTYPES_API int ndt_dims_dtype(const ndt_t *dims[NDT_MAX_DIM], const ndt_t **dtype, const ndt_t *t);
|
589
|
-
NDTYPES_API const ndt_t *ndt_dim_at(const ndt_t *t, int n);
|
590
663
|
NDTYPES_API int ndt_as_ndarray(ndt_ndarray_t *a, const ndt_t *t, ndt_context_t *ctx);
|
591
|
-
NDTYPES_API
|
664
|
+
NDTYPES_API const ndt_t *ndt_transpose(const ndt_t *t, const int *p, int ndim, ndt_context_t *ctx);
|
665
|
+
NDTYPES_API ndt_ssize_t ndt_hash(const ndt_t *t, ndt_context_t *ctx);
|
592
666
|
|
593
667
|
|
594
668
|
/*****************************************************************************/
|
@@ -596,14 +670,14 @@ NDTYPES_API ndt_ssize_t ndt_hash(ndt_t *t, ndt_context_t *ctx);
|
|
596
670
|
/*****************************************************************************/
|
597
671
|
|
598
672
|
/* Fields */
|
599
|
-
NDTYPES_API ndt_field_t *ndt_field(char *name, ndt_t *type, uint16_opt_t align,
|
673
|
+
NDTYPES_API ndt_field_t *ndt_field(char *name, const ndt_t *type, uint16_opt_t align,
|
600
674
|
uint16_opt_t pack, uint16_opt_t pad, ndt_context_t *ctx);
|
601
675
|
NDTYPES_API void ndt_field_del(ndt_field_t *field);
|
602
676
|
NDTYPES_API void ndt_field_array_del(ndt_field_t *fields, int64_t shape);
|
603
677
|
|
604
678
|
/* Typed values */
|
605
679
|
NDTYPES_API void ndt_value_del(ndt_value_t *mem);
|
606
|
-
NDTYPES_API void ndt_value_array_del(ndt_value_t *types, int64_t ntypes);
|
680
|
+
NDTYPES_API void ndt_value_array_del(const ndt_value_t *types, int64_t ntypes);
|
607
681
|
|
608
682
|
NDTYPES_API ndt_value_t *ndt_value_from_number(enum ndt_value tag, char *v, ndt_context_t *ctx);
|
609
683
|
NDTYPES_API ndt_value_t *ndt_value_from_string(char *v, ndt_context_t *ctx);
|
@@ -613,8 +687,8 @@ NDTYPES_API int ndt_value_mem_equal(const ndt_value_t *x, const ndt_value_t *y);
|
|
613
687
|
NDTYPES_API int ndt_value_compare(const ndt_value_t *x, const ndt_value_t *y);
|
614
688
|
|
615
689
|
/* Type array */
|
616
|
-
NDTYPES_API void ndt_type_array_clear(ndt_t **types, int64_t shape);
|
617
|
-
NDTYPES_API void ndt_type_array_del(ndt_t **types, int64_t shape);
|
690
|
+
NDTYPES_API void ndt_type_array_clear(const ndt_t **types, int64_t shape);
|
691
|
+
NDTYPES_API void ndt_type_array_del(const ndt_t **types, int64_t shape);
|
618
692
|
|
619
693
|
|
620
694
|
/*****************************************************************************/
|
@@ -631,17 +705,24 @@ NDTYPES_API uint16_t ndt_alignof_encoding(enum ndt_encoding encoding);
|
|
631
705
|
/* Predicates */
|
632
706
|
/*****************************************************************************/
|
633
707
|
|
708
|
+
NDTYPES_API bool ndt_is_static(const ndt_t *t);
|
709
|
+
NDTYPES_API bool ndt_is_static_tag(enum ndt tag);
|
710
|
+
|
634
711
|
NDTYPES_API int ndt_is_abstract(const ndt_t *t);
|
635
712
|
NDTYPES_API int ndt_is_concrete(const ndt_t *t);
|
636
713
|
|
637
714
|
NDTYPES_API int ndt_is_optional(const ndt_t *t);
|
638
715
|
NDTYPES_API int ndt_subtree_is_optional(const ndt_t *t);
|
716
|
+
NDTYPES_API int ndt_is_pointer_free(const ndt_t *t);
|
717
|
+
NDTYPES_API int ndt_is_ref_free(const ndt_t *t);
|
639
718
|
|
640
719
|
NDTYPES_API int ndt_is_ndarray(const ndt_t *t);
|
641
720
|
NDTYPES_API int ndt_is_c_contiguous(const ndt_t *t);
|
642
721
|
NDTYPES_API int ndt_is_f_contiguous(const ndt_t *t);
|
643
722
|
NDTYPES_API int ndt_really_fortran(const ndt_t *t);
|
644
723
|
|
724
|
+
NDTYPES_API int ndt_is_var_contiguous(const ndt_t *t);
|
725
|
+
|
645
726
|
NDTYPES_API int ndt_is_scalar(const ndt_t *t);
|
646
727
|
NDTYPES_API int ndt_is_signed(const ndt_t *t);
|
647
728
|
NDTYPES_API int ndt_is_unsigned(const ndt_t *t);
|
@@ -657,23 +738,34 @@ NDTYPES_API int ndt_is_big_endian(const ndt_t *t);
|
|
657
738
|
/* Functions */
|
658
739
|
/*****************************************************************************/
|
659
740
|
|
660
|
-
NDTYPES_API ndt_t *ndt_copy(const ndt_t *t, ndt_context_t *ctx);
|
661
|
-
NDTYPES_API ndt_t *ndt_copy_contiguous(const ndt_t *t, ndt_context_t *ctx);
|
662
|
-
NDTYPES_API ndt_t *ndt_copy_contiguous_dtype(const ndt_t *t, ndt_t *dtype, ndt_context_t *ctx);
|
663
|
-
NDTYPES_API ndt_t *
|
741
|
+
NDTYPES_API const ndt_t *ndt_copy(const ndt_t *t, ndt_context_t *ctx);
|
742
|
+
NDTYPES_API const ndt_t *ndt_copy_contiguous(const ndt_t *t, int64_t linear_index, ndt_context_t *ctx);
|
743
|
+
NDTYPES_API const ndt_t *ndt_copy_contiguous_dtype(const ndt_t *t, const ndt_t *dtype, int64_t linear_index, ndt_context_t *ctx);
|
744
|
+
NDTYPES_API const ndt_t *ndt_copy_contiguous_at(const ndt_t *t, int n, const ndt_t *dtype, ndt_context_t *ctx);
|
745
|
+
NDTYPES_API const ndt_t *ndt_copy_abstract_var_dtype(const ndt_t *t, const ndt_t *dtype, ndt_context_t *ctx);
|
746
|
+
|
747
|
+
NDTYPES_API const ndt_t *ndt_convert_to_var_elem(const ndt_t *t, const ndt_t *type, int64_t index, ndt_context_t *ctx);
|
748
|
+
|
664
749
|
|
665
750
|
NDTYPES_API int ndt_equal(const ndt_t *t, const ndt_t *u);
|
666
751
|
NDTYPES_API int ndt_match(const ndt_t *p, const ndt_t *c, ndt_context_t *ctx);
|
667
752
|
NDTYPES_API int ndt_typecheck(ndt_apply_spec_t *spec, const ndt_t *sig,
|
668
|
-
const ndt_t *
|
753
|
+
const ndt_t *types[], const int64_t li[],
|
754
|
+
const int nin, const int nout, bool check_broadcast,
|
669
755
|
const ndt_constraint_t *c, const void *args,
|
670
756
|
ndt_context_t *ctx);
|
757
|
+
NDTYPES_API int ndt_fast_unary_fixed_typecheck(ndt_apply_spec_t *spec, const ndt_t *sig,
|
758
|
+
const ndt_t *types[], const int nin, const int nout,
|
759
|
+
const bool check_broadcast, ndt_context_t *ctx);
|
671
760
|
NDTYPES_API int ndt_fast_binary_fixed_typecheck(ndt_apply_spec_t *spec, const ndt_t *sig,
|
672
|
-
const ndt_t *
|
673
|
-
ndt_context_t *ctx);
|
761
|
+
const ndt_t *types[], const int nin, const int nout,
|
762
|
+
const bool check_broadcast, ndt_context_t *ctx);
|
674
763
|
|
675
764
|
NDTYPES_API int64_t ndt_itemsize(const ndt_t *t);
|
676
765
|
|
766
|
+
NDTYPES_API const ndt_t *ndt_unify(const ndt_t *t, const ndt_t *u, ndt_context_t *ctx);
|
767
|
+
NDTYPES_API const ndt_t *ndt_unify_replace_any(const ndt_t *t, const ndt_t *u, ndt_context_t *ctx);
|
768
|
+
|
677
769
|
|
678
770
|
/*****************************************************************************/
|
679
771
|
/* Input/Output */
|
@@ -696,8 +788,7 @@ NDTYPES_API char *ndt_indent(const ndt_t *t, ndt_context_t *ctx);
|
|
696
788
|
NDTYPES_API char *ndt_ast_repr(const ndt_t *t, ndt_context_t *ctx);
|
697
789
|
|
698
790
|
NDTYPES_API int64_t ndt_serialize(char **dest, const ndt_t * const t, ndt_context_t *ctx);
|
699
|
-
NDTYPES_API ndt_t *ndt_deserialize(
|
700
|
-
ndt_context_t *ctx);
|
791
|
+
NDTYPES_API const ndt_t *ndt_deserialize(const char * const ptr, int64_t len, ndt_context_t *ctx);
|
701
792
|
|
702
793
|
|
703
794
|
/*****************************************************************************/
|
@@ -710,10 +801,10 @@ typedef struct {
|
|
710
801
|
} ndt_typedef_t;
|
711
802
|
|
712
803
|
/* Typedef for nominal types */
|
713
|
-
NDTYPES_API int ndt_typedef_add(const char *name, ndt_t *type, const ndt_methods_t *m, ndt_context_t *ctx);
|
804
|
+
NDTYPES_API int ndt_typedef_add(const char *name, const ndt_t *type, const ndt_methods_t *m, ndt_context_t *ctx);
|
714
805
|
NDTYPES_API const ndt_typedef_t *ndt_typedef_find(const char *name, ndt_context_t *ctx);
|
715
806
|
|
716
|
-
NDTYPES_API int ndt_typedef(const char *name, ndt_t *type, const ndt_methods_t *m, ndt_context_t *ctx);
|
807
|
+
NDTYPES_API int ndt_typedef(const char *name, const ndt_t *type, const ndt_methods_t *m, ndt_context_t *ctx);
|
717
808
|
NDTYPES_API int ndt_typedef_from_string(const char *name, const char *type, const ndt_methods_t *m, ndt_context_t *ctx);
|
718
809
|
|
719
810
|
|
@@ -721,11 +812,14 @@ NDTYPES_API int ndt_typedef_from_string(const char *name, const char *type, cons
|
|
721
812
|
/* Allocate types */
|
722
813
|
/*****************************************************************************/
|
723
814
|
|
724
|
-
NDTYPES_API ndt_t *ndt_new(enum ndt tag, ndt_context_t *ctx);
|
815
|
+
NDTYPES_API ndt_t *ndt_new(enum ndt tag, uint32_t flags, ndt_context_t *ctx);
|
725
816
|
NDTYPES_API ndt_t *ndt_function_new(int64_t nargs, ndt_context_t *ctx);
|
726
|
-
NDTYPES_API ndt_t *ndt_tuple_new(enum ndt_variadic flag, int64_t shape, ndt_context_t *ctx);
|
727
|
-
NDTYPES_API ndt_t *ndt_record_new(enum ndt_variadic flag, int64_t shape, ndt_context_t *ctx);
|
728
|
-
NDTYPES_API
|
817
|
+
NDTYPES_API ndt_t *ndt_tuple_new(enum ndt_variadic flag, int64_t shape, bool opt, ndt_context_t *ctx);
|
818
|
+
NDTYPES_API ndt_t *ndt_record_new(enum ndt_variadic flag, int64_t shape, bool opt, ndt_context_t *ctx);
|
819
|
+
NDTYPES_API ndt_t *ndt_union_new(int64_t ntags, bool opt, ndt_context_t *ctx);
|
820
|
+
NDTYPES_API void ndt_incref(const ndt_t *t);
|
821
|
+
NDTYPES_API void ndt_decref(const ndt_t *t);
|
822
|
+
NDTYPES_API void ndt_move(const ndt_t **dst, const ndt_t *src);
|
729
823
|
|
730
824
|
|
731
825
|
/*****************************************************************************/
|
@@ -733,71 +827,74 @@ NDTYPES_API void ndt_del(ndt_t *t);
|
|
733
827
|
/*****************************************************************************/
|
734
828
|
|
735
829
|
/* Special types */
|
736
|
-
NDTYPES_API ndt_t *
|
737
|
-
NDTYPES_API ndt_t *
|
738
|
-
NDTYPES_API ndt_t *ndt_function(ndt_t * const *types, int64_t nargs, int64_t nin, int64_t nout, ndt_context_t *ctx);
|
830
|
+
NDTYPES_API const ndt_t *ndt_module(char *name, const ndt_t *type, ndt_context_t *ctx);
|
831
|
+
NDTYPES_API const ndt_t *ndt_function(const ndt_t **types, int64_t nargs, int64_t nin, int64_t nout, ndt_context_t *ctx);
|
739
832
|
|
740
833
|
/* Any */
|
741
|
-
NDTYPES_API ndt_t *ndt_any_kind(ndt_context_t *ctx);
|
834
|
+
NDTYPES_API const ndt_t *ndt_any_kind(bool opt, ndt_context_t *ctx);
|
742
835
|
|
743
836
|
/* Dimensions */
|
744
|
-
NDTYPES_API ndt_t *ndt_to_fortran(const ndt_t *type, ndt_context_t *ctx);
|
745
|
-
NDTYPES_API ndt_t *ndt_fixed_dim(ndt_t *type, int64_t shape, int64_t step, ndt_context_t *ctx);
|
746
|
-
NDTYPES_API ndt_t *ndt_fixed_dim_tag(ndt_t *type, enum ndt_contig tag, int64_t shape, int64_t step, ndt_context_t *ctx);
|
837
|
+
NDTYPES_API const ndt_t *ndt_to_fortran(const ndt_t *type, ndt_context_t *ctx);
|
838
|
+
NDTYPES_API const ndt_t *ndt_fixed_dim(const ndt_t *type, int64_t shape, int64_t step, ndt_context_t *ctx);
|
839
|
+
NDTYPES_API const ndt_t *ndt_fixed_dim_tag(const ndt_t *type, enum ndt_contig tag, int64_t shape, int64_t step, ndt_context_t *ctx);
|
747
840
|
|
748
|
-
NDTYPES_API ndt_t *ndt_abstract_var_dim(ndt_t *type, ndt_context_t *ctx);
|
841
|
+
NDTYPES_API const ndt_t *ndt_abstract_var_dim(const ndt_t *type, bool opt, ndt_context_t *ctx);
|
749
842
|
NDTYPES_API int64_t ndt_var_indices(int64_t *res_start, int64_t *res_step, const ndt_t *t,
|
750
843
|
int64_t index, ndt_context_t *ctx);
|
844
|
+
NDTYPES_API int64_t ndt_var_indices_non_empty(int64_t *res_start, int64_t *res_step, const ndt_t *t,
|
845
|
+
int64_t index, ndt_context_t *ctx);
|
751
846
|
NDTYPES_API ndt_slice_t *ndt_var_add_slice(int32_t *nslices, const ndt_t *t,
|
752
847
|
int64_t start, int64_t stop, int64_t step,
|
753
848
|
ndt_context_t *ctx);
|
754
|
-
NDTYPES_API ndt_t *ndt_var_dim(ndt_t *type,
|
755
|
-
|
756
|
-
|
757
|
-
|
849
|
+
NDTYPES_API const ndt_t *ndt_var_dim(const ndt_t *type, const ndt_offsets_t *offsets,
|
850
|
+
int32_t nslices, ndt_slice_t *slices, bool opt,
|
851
|
+
ndt_context_t *ctx);
|
852
|
+
|
853
|
+
NDTYPES_API const ndt_t *ndt_symbolic_dim(char *name, const ndt_t *type, ndt_context_t *ctx);
|
854
|
+
NDTYPES_API const ndt_t *ndt_symbolic_dim_tag(char *name, const ndt_t *type, enum ndt_contig tag, ndt_context_t *ctx);
|
855
|
+
NDTYPES_API const ndt_t *ndt_ellipsis_dim(char *name, const ndt_t *type, ndt_context_t *ctx);
|
856
|
+
NDTYPES_API const ndt_t *ndt_ellipsis_dim_tag(char *name, const ndt_t *type, enum ndt_contig tag, ndt_context_t *ctx);
|
758
857
|
|
759
|
-
NDTYPES_API ndt_t *
|
760
|
-
NDTYPES_API ndt_t *ndt_symbolic_dim_tag(char *name, ndt_t *type, enum ndt_contig tag, ndt_context_t *ctx);
|
761
|
-
NDTYPES_API ndt_t *ndt_ellipsis_dim(char *name, ndt_t *type, ndt_context_t *ctx);
|
762
|
-
NDTYPES_API ndt_t *ndt_ellipsis_dim_tag(char *name, ndt_t *type, enum ndt_contig tag, ndt_context_t *ctx);
|
858
|
+
NDTYPES_API const ndt_t *ndt_array(const ndt_t *type, bool opt, ndt_context_t *ctx);
|
763
859
|
|
764
860
|
/* Dtypes */
|
765
|
-
NDTYPES_API ndt_t *ndt_tuple(enum ndt_variadic flag, ndt_field_t *fields, int64_t shape,
|
766
|
-
uint16_opt_t align, uint16_opt_t pack, ndt_context_t *ctx);
|
767
|
-
NDTYPES_API ndt_t *ndt_record(enum ndt_variadic flag, ndt_field_t *fields, int64_t shape,
|
768
|
-
|
861
|
+
NDTYPES_API const ndt_t *ndt_tuple(enum ndt_variadic flag, const ndt_field_t *fields, int64_t shape,
|
862
|
+
uint16_opt_t align, uint16_opt_t pack, bool opt, ndt_context_t *ctx);
|
863
|
+
NDTYPES_API const ndt_t *ndt_record(enum ndt_variadic flag, const ndt_field_t *fields, int64_t shape,
|
864
|
+
uint16_opt_t align, uint16_opt_t pack, bool opt, ndt_context_t *ctx);
|
865
|
+
NDTYPES_API const ndt_t *ndt_union(const ndt_field_t *fields, int64_t ntags, bool opt, ndt_context_t *ctx);
|
769
866
|
|
770
|
-
NDTYPES_API ndt_t *ndt_ref(ndt_t *type, ndt_context_t *ctx);
|
771
|
-
NDTYPES_API ndt_t *ndt_constr(char *name, ndt_t *type, ndt_context_t *ctx);
|
772
|
-
NDTYPES_API ndt_t *ndt_nominal(char *name, ndt_t *type, ndt_context_t *ctx);
|
867
|
+
NDTYPES_API const ndt_t *ndt_ref(const ndt_t *type, bool opt, ndt_context_t *ctx);
|
868
|
+
NDTYPES_API const ndt_t *ndt_constr(char *name, const ndt_t *type, bool opt, ndt_context_t *ctx);
|
869
|
+
NDTYPES_API const ndt_t *ndt_nominal(char *name, const ndt_t *type, bool opt, ndt_context_t *ctx);
|
773
870
|
|
774
871
|
/* Scalars */
|
775
|
-
NDTYPES_API ndt_t *ndt_scalar_kind(ndt_context_t *ctx);
|
872
|
+
NDTYPES_API const ndt_t *ndt_scalar_kind(bool opt, ndt_context_t *ctx);
|
776
873
|
|
777
|
-
NDTYPES_API ndt_t *ndt_categorical(ndt_value_t *types, int64_t ntypes, ndt_context_t *ctx);
|
874
|
+
NDTYPES_API const ndt_t *ndt_categorical(const ndt_value_t *types, int64_t ntypes, bool opt, ndt_context_t *ctx);
|
778
875
|
|
779
|
-
NDTYPES_API ndt_t *ndt_fixed_string_kind(ndt_context_t *ctx);
|
780
|
-
NDTYPES_API ndt_t *ndt_fixed_string(int64_t size, enum ndt_encoding encoding, ndt_context_t *ctx);
|
876
|
+
NDTYPES_API const ndt_t *ndt_fixed_string_kind(bool opt, ndt_context_t *ctx);
|
877
|
+
NDTYPES_API const ndt_t *ndt_fixed_string(int64_t size, enum ndt_encoding encoding, bool opt, ndt_context_t *ctx);
|
781
878
|
|
782
|
-
NDTYPES_API ndt_t *ndt_fixed_bytes_kind(ndt_context_t *ctx);
|
783
|
-
NDTYPES_API ndt_t *ndt_fixed_bytes(int64_t size, uint16_opt_t align, ndt_context_t *ctx);
|
879
|
+
NDTYPES_API const ndt_t *ndt_fixed_bytes_kind(bool opt, ndt_context_t *ctx);
|
880
|
+
NDTYPES_API const ndt_t *ndt_fixed_bytes(int64_t size, uint16_opt_t align, bool opt, ndt_context_t *ctx);
|
784
881
|
|
785
|
-
NDTYPES_API ndt_t *ndt_string(ndt_context_t *ctx);
|
786
|
-
NDTYPES_API ndt_t *ndt_bytes(uint16_opt_t target_align, ndt_context_t *ctx);
|
787
|
-
NDTYPES_API ndt_t *ndt_char(enum ndt_encoding encoding, ndt_context_t *ctx);
|
882
|
+
NDTYPES_API const ndt_t *ndt_string(bool opt, ndt_context_t *ctx);
|
883
|
+
NDTYPES_API const ndt_t *ndt_bytes(uint16_opt_t target_align, bool opt, ndt_context_t *ctx);
|
884
|
+
NDTYPES_API const ndt_t *ndt_char(enum ndt_encoding encoding, bool opt, ndt_context_t *ctx);
|
788
885
|
|
789
|
-
NDTYPES_API ndt_t *ndt_signed_kind(ndt_context_t *ctx);
|
790
|
-
NDTYPES_API ndt_t *ndt_unsigned_kind(ndt_context_t *ctx);
|
791
|
-
NDTYPES_API ndt_t *ndt_float_kind(ndt_context_t *ctx);
|
792
|
-
NDTYPES_API ndt_t *ndt_complex_kind(ndt_context_t *ctx);
|
886
|
+
NDTYPES_API const ndt_t *ndt_signed_kind(uint32_t flags, ndt_context_t *ctx);
|
887
|
+
NDTYPES_API const ndt_t *ndt_unsigned_kind(uint32_t flags, ndt_context_t *ctx);
|
888
|
+
NDTYPES_API const ndt_t *ndt_float_kind(uint32_t flags, ndt_context_t *ctx);
|
889
|
+
NDTYPES_API const ndt_t *ndt_complex_kind(uint32_t flags, ndt_context_t *ctx);
|
793
890
|
|
794
|
-
NDTYPES_API ndt_t *ndt_primitive(enum ndt tag, uint32_t flags, ndt_context_t *ctx);
|
795
|
-
NDTYPES_API ndt_t *ndt_signed(int size, uint32_t flags, ndt_context_t *ctx);
|
796
|
-
NDTYPES_API ndt_t *ndt_unsigned(int size, uint32_t flags, ndt_context_t *ctx);
|
797
|
-
NDTYPES_API ndt_t *ndt_from_alias(enum ndt_alias tag, uint32_t flags, ndt_context_t *ctx);
|
891
|
+
NDTYPES_API const ndt_t *ndt_primitive(enum ndt tag, uint32_t flags, ndt_context_t *ctx);
|
892
|
+
NDTYPES_API const ndt_t *ndt_signed(int size, uint32_t flags, ndt_context_t *ctx);
|
893
|
+
NDTYPES_API const ndt_t *ndt_unsigned(int size, uint32_t flags, ndt_context_t *ctx);
|
894
|
+
NDTYPES_API const ndt_t *ndt_from_alias(enum ndt_alias tag, uint32_t flags, ndt_context_t *ctx);
|
798
895
|
|
799
896
|
/* Type variable */
|
800
|
-
NDTYPES_API ndt_t *ndt_typevar(char *name, ndt_context_t *ctx);
|
897
|
+
NDTYPES_API const ndt_t *ndt_typevar(char *name, ndt_context_t *ctx);
|
801
898
|
|
802
899
|
|
803
900
|
/******************************************************************************/
|
@@ -810,14 +907,14 @@ NDTYPES_API ndt_t *ndt_typevar(char *name, ndt_context_t *ctx);
|
|
810
907
|
* Metadata is read from the type string and managed by the type. This is
|
811
908
|
* convenient but can waste a lot of space when offset arrays are large.
|
812
909
|
*/
|
813
|
-
NDTYPES_API ndt_t *ndt_from_file(const char *name, ndt_context_t *ctx);
|
814
|
-
NDTYPES_API ndt_t *ndt_from_string(const char *input, ndt_context_t *ctx);
|
815
|
-
NDTYPES_API ndt_t *ndt_from_bpformat(const char *input, ndt_context_t *ctx);
|
910
|
+
NDTYPES_API const ndt_t *ndt_from_file(const char *name, ndt_context_t *ctx);
|
911
|
+
NDTYPES_API const ndt_t *ndt_from_string(const char *input, ndt_context_t *ctx);
|
912
|
+
NDTYPES_API const ndt_t *ndt_from_bpformat(const char *input, ndt_context_t *ctx);
|
816
913
|
NDTYPES_API char *ndt_to_bpformat(const ndt_t *t, ndt_context_t *ctx);
|
817
914
|
NDTYPES_API int ndt_to_nbformat(char **sig, char **dtype, const ndt_t *t, ndt_context_t *ctx);
|
818
915
|
|
819
916
|
/* Unstable API */
|
820
|
-
NDTYPES_API ndt_t *ndt_from_string_v(const char *input, ndt_context_t *ctx);
|
917
|
+
NDTYPES_API const ndt_t *ndt_from_string_v(const char *input, ndt_context_t *ctx);
|
821
918
|
|
822
919
|
|
823
920
|
/*
|
@@ -825,13 +922,15 @@ NDTYPES_API ndt_t *ndt_from_string_v(const char *input, ndt_context_t *ctx);
|
|
825
922
|
* The type still has pointers to the metadata. This scheme is used for sharing
|
826
923
|
* offsets between copies or subtypes of a type.
|
827
924
|
*/
|
828
|
-
NDTYPES_API ndt_t *ndt_from_file_fill_meta(ndt_meta_t *m, const char *name, ndt_context_t *ctx);
|
829
|
-
NDTYPES_API ndt_t *ndt_from_string_fill_meta(ndt_meta_t *m, const char *input, ndt_context_t *ctx);
|
925
|
+
NDTYPES_API const ndt_t *ndt_from_file_fill_meta(ndt_meta_t *m, const char *name, ndt_context_t *ctx);
|
926
|
+
NDTYPES_API const ndt_t *ndt_from_string_fill_meta(ndt_meta_t *m, const char *input, ndt_context_t *ctx);
|
830
927
|
|
831
928
|
/* Metadata is provided and managed by an external source. */
|
832
|
-
NDTYPES_API ndt_t *ndt_from_metadata_and_dtype(const ndt_meta_t *m, const char *dtype, ndt_context_t *ctx);
|
929
|
+
NDTYPES_API const ndt_t *ndt_from_metadata_and_dtype(const ndt_meta_t *m, const char *dtype, ndt_context_t *ctx);
|
930
|
+
NDTYPES_API const ndt_t *ndt_from_metadata_opt_and_dtype(const ndt_meta_t *m, bool *opt, const ndt_t *dtype, ndt_context_t *ctx);
|
833
931
|
|
834
932
|
NDTYPES_API ndt_meta_t *ndt_meta_new(ndt_context_t *ctx);
|
933
|
+
NDTYPES_API void ndt_meta_clear(ndt_meta_t *m);
|
835
934
|
NDTYPES_API void ndt_meta_del(ndt_meta_t *m);
|
836
935
|
|
837
936
|
|
@@ -887,7 +986,17 @@ typedef struct {
|
|
887
986
|
uint8_t *data;
|
888
987
|
} ndt_bytes_t;
|
889
988
|
|
989
|
+
typedef struct {
|
990
|
+
int64_t shape;
|
991
|
+
char *data;
|
992
|
+
} ndt_array_t;
|
993
|
+
|
890
994
|
typedef int64_t ndt_categorical_t;
|
891
995
|
|
892
996
|
|
997
|
+
#ifdef __cplusplus
|
998
|
+
} /* END extern "C" */
|
999
|
+
#endif
|
1000
|
+
|
1001
|
+
|
893
1002
|
#endif /* NDTYPES_H */
|