ndtypes 0.2.0dev5 → 0.2.0dev6
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.
- 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 */
|