ndtypes 0.2.0dev4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.md +50 -0
  3. data/Gemfile +2 -0
  4. data/History.md +0 -0
  5. data/README.md +19 -0
  6. data/Rakefile +125 -0
  7. data/ext/ruby_ndtypes/extconf.rb +55 -0
  8. data/ext/ruby_ndtypes/gc_guard.c +36 -0
  9. data/ext/ruby_ndtypes/gc_guard.h +12 -0
  10. data/ext/ruby_ndtypes/ndtypes/AUTHORS.txt +5 -0
  11. data/ext/ruby_ndtypes/ndtypes/INSTALL.txt +101 -0
  12. data/ext/ruby_ndtypes/ndtypes/LICENSE.txt +29 -0
  13. data/ext/ruby_ndtypes/ndtypes/MANIFEST.in +3 -0
  14. data/ext/ruby_ndtypes/ndtypes/Makefile.in +87 -0
  15. data/ext/ruby_ndtypes/ndtypes/README.rst +47 -0
  16. data/ext/ruby_ndtypes/ndtypes/config.guess +1530 -0
  17. data/ext/ruby_ndtypes/ndtypes/config.h.in +67 -0
  18. data/ext/ruby_ndtypes/ndtypes/config.sub +1782 -0
  19. data/ext/ruby_ndtypes/ndtypes/configure +5260 -0
  20. data/ext/ruby_ndtypes/ndtypes/configure.ac +161 -0
  21. data/ext/ruby_ndtypes/ndtypes/doc/Makefile +14 -0
  22. data/ext/ruby_ndtypes/ndtypes/doc/_static/copybutton.js +66 -0
  23. data/ext/ruby_ndtypes/ndtypes/doc/conf.py +26 -0
  24. data/ext/ruby_ndtypes/ndtypes/doc/grammar/grammar.rst +27 -0
  25. data/ext/ruby_ndtypes/ndtypes/doc/index.rst +56 -0
  26. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/context.rst +131 -0
  27. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/encodings.rst +68 -0
  28. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/fields-values.rst +175 -0
  29. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/functions.rst +72 -0
  30. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/index.rst +43 -0
  31. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/init.rst +48 -0
  32. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/io.rst +100 -0
  33. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/memory.rst +124 -0
  34. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/predicates.rst +110 -0
  35. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/typedef.rst +31 -0
  36. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/types.rst +594 -0
  37. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/util.rst +166 -0
  38. data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/buffer-protocol.rst +27 -0
  39. data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/index.rst +21 -0
  40. data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/pattern-matching.rst +330 -0
  41. data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/quickstart.rst +144 -0
  42. data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/types.rst +544 -0
  43. data/ext/ruby_ndtypes/ndtypes/doc/releases/index.rst +35 -0
  44. data/ext/ruby_ndtypes/ndtypes/install-sh +527 -0
  45. data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile.in +271 -0
  46. data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile.vc +269 -0
  47. data/ext/ruby_ndtypes/ndtypes/libndtypes/alloc.c +230 -0
  48. data/ext/ruby_ndtypes/ndtypes/libndtypes/attr.c +268 -0
  49. data/ext/ruby_ndtypes/ndtypes/libndtypes/attr.h +109 -0
  50. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/Makefile.in +73 -0
  51. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/Makefile.vc +70 -0
  52. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/README.txt +16 -0
  53. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.c +2179 -0
  54. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.h +134 -0
  55. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.y +428 -0
  56. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.c +2543 -0
  57. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.h +735 -0
  58. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.l +176 -0
  59. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/export.c +543 -0
  60. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/import.c +110 -0
  61. data/ext/ruby_ndtypes/ndtypes/libndtypes/context.c +228 -0
  62. data/ext/ruby_ndtypes/ndtypes/libndtypes/copy.c +634 -0
  63. data/ext/ruby_ndtypes/ndtypes/libndtypes/encodings.c +116 -0
  64. data/ext/ruby_ndtypes/ndtypes/libndtypes/equal.c +288 -0
  65. data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.c +3067 -0
  66. data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.h +180 -0
  67. data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.y +417 -0
  68. data/ext/ruby_ndtypes/ndtypes/libndtypes/io.c +1658 -0
  69. data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.c +2773 -0
  70. data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.h +734 -0
  71. data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.l +222 -0
  72. data/ext/ruby_ndtypes/ndtypes/libndtypes/match.c +1132 -0
  73. data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.c +2323 -0
  74. data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.h.in +893 -0
  75. data/ext/ruby_ndtypes/ndtypes/libndtypes/overflow.h +161 -0
  76. data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.c +473 -0
  77. data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.h +92 -0
  78. data/ext/ruby_ndtypes/ndtypes/libndtypes/parser.c +246 -0
  79. data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.c +269 -0
  80. data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.h +197 -0
  81. data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/Makefile.in +48 -0
  82. data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/Makefile.vc +46 -0
  83. data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/deserialize.c +1007 -0
  84. data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/serialize.c +442 -0
  85. data/ext/ruby_ndtypes/ndtypes/libndtypes/slice.h +42 -0
  86. data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.c +238 -0
  87. data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.h +50 -0
  88. data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.c +371 -0
  89. data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.h +100 -0
  90. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile.in +55 -0
  91. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile.vc +45 -0
  92. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/alloc_fail.c +82 -0
  93. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/alloc_fail.h +49 -0
  94. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/runtest.c +1657 -0
  95. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test.h +85 -0
  96. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_array.c +115 -0
  97. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_buffer.c +137 -0
  98. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_indent.c +201 -0
  99. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_match.c +2397 -0
  100. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_numba.c +57 -0
  101. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse.c +349 -0
  102. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse_error.c +27839 -0
  103. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse_roundtrip.c +350 -0
  104. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_record.c +231 -0
  105. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_typecheck.c +375 -0
  106. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_typedef.c +65 -0
  107. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/valgrind.supp +30 -0
  108. data/ext/ruby_ndtypes/ndtypes/libndtypes/tools/bench.c +79 -0
  109. data/ext/ruby_ndtypes/ndtypes/libndtypes/tools/indent.c +94 -0
  110. data/ext/ruby_ndtypes/ndtypes/libndtypes/tools/print_ast.c +96 -0
  111. data/ext/ruby_ndtypes/ndtypes/libndtypes/util.c +474 -0
  112. data/ext/ruby_ndtypes/ndtypes/libndtypes/values.c +228 -0
  113. data/ext/ruby_ndtypes/ndtypes/python/bench.py +49 -0
  114. data/ext/ruby_ndtypes/ndtypes/python/ndt_randtype.py +409 -0
  115. data/ext/ruby_ndtypes/ndtypes/python/ndt_support.py +14 -0
  116. data/ext/ruby_ndtypes/ndtypes/python/ndtypes/__init__.py +70 -0
  117. data/ext/ruby_ndtypes/ndtypes/python/ndtypes/_ndtypes.c +1332 -0
  118. data/ext/ruby_ndtypes/ndtypes/python/ndtypes/docstrings.h +319 -0
  119. data/ext/ruby_ndtypes/ndtypes/python/ndtypes/pyndtypes.h +154 -0
  120. data/ext/ruby_ndtypes/ndtypes/python/test_ndtypes.py +1977 -0
  121. data/ext/ruby_ndtypes/ndtypes/setup.py +288 -0
  122. data/ext/ruby_ndtypes/ndtypes/vcbuild/INSTALL.txt +41 -0
  123. data/ext/ruby_ndtypes/ndtypes/vcbuild/runtest32.bat +15 -0
  124. data/ext/ruby_ndtypes/ndtypes/vcbuild/runtest64.bat +13 -0
  125. data/ext/ruby_ndtypes/ndtypes/vcbuild/vcbuild32.bat +38 -0
  126. data/ext/ruby_ndtypes/ndtypes/vcbuild/vcbuild64.bat +38 -0
  127. data/ext/ruby_ndtypes/ndtypes/vcbuild/vcclean.bat +13 -0
  128. data/ext/ruby_ndtypes/ndtypes/vcbuild/vcdistclean.bat +14 -0
  129. data/ext/ruby_ndtypes/ruby_ndtypes.c +1003 -0
  130. data/ext/ruby_ndtypes/ruby_ndtypes.h +37 -0
  131. data/ext/ruby_ndtypes/ruby_ndtypes_internal.h +28 -0
  132. data/lib/ndtypes.rb +45 -0
  133. data/lib/ndtypes/errors.rb +2 -0
  134. data/lib/ndtypes/version.rb +6 -0
  135. data/ndtypes.gemspec +47 -0
  136. data/spec/gc_table_spec.rb +10 -0
  137. data/spec/ndtypes_spec.rb +289 -0
  138. data/spec/spec_helper.rb +241 -0
  139. metadata +242 -0
@@ -0,0 +1,68 @@
1
+ .. meta::
2
+ :robots: index,follow
3
+ :description: libndtypes documentation
4
+
5
+ .. sectionauthor:: Stefan Krah <skrah at bytereef.org>
6
+
7
+
8
+
9
+ Encodings
10
+ =========
11
+
12
+ Some types support encoding parameters.
13
+
14
+ .. code-block:: c
15
+
16
+ #include <ndtypes.h>
17
+
18
+ /* Encoding for characters and strings */
19
+ enum ndt_encoding {
20
+ Ascii,
21
+ Utf8,
22
+ Utf16,
23
+ Utf32,
24
+ Ucs2,
25
+ };
26
+
27
+
28
+ Functions
29
+ ---------
30
+
31
+ .. topic:: ndt_encoding_from_string
32
+
33
+ .. code-block:: c
34
+
35
+ enum ndt_encoding ndt_encoding_from_string(const char *s, ndt_context_t *ctx);
36
+
37
+ Convert a string to the corresponding enum value. The caller must use
38
+ :func:`ndt_err_occurred` to check for errors.
39
+
40
+
41
+ .. topic:: ndt_encoding_as_string
42
+
43
+ .. code-block:: c
44
+
45
+ const char *ndt_encoding_as_string(enum ndt_encoding encoding);
46
+
47
+ Convert an encoding to its string representation.
48
+
49
+
50
+ .. topic:: ndt_sizeof_encoding
51
+
52
+ .. code-block:: c
53
+
54
+ size_t ndt_sizeof_encoding(enum ndt_encoding encoding);
55
+
56
+ Return the memory size of a single code point.
57
+
58
+
59
+ .. topic:: ndt_alignof_encoding
60
+
61
+ .. code-block:: c
62
+
63
+ uint16_t ndt_alignof_encoding(enum ndt_encoding encoding);
64
+
65
+ Return the alignment of a single code point.
66
+
67
+
68
+
@@ -0,0 +1,175 @@
1
+ .. meta::
2
+ :robots: index,follow
3
+ :description: libndtypes documentation
4
+
5
+ .. sectionauthor:: Stefan Krah <skrah at bytereef.org>
6
+
7
+
8
+ Fields and values
9
+ =================
10
+
11
+ Some API functions expect fields for creating tuple or record types or values
12
+ for creating categorical types.
13
+
14
+
15
+ Fields
16
+ ------
17
+
18
+ .. topic:: uint16_opt
19
+
20
+ .. code-block:: c
21
+
22
+ enum ndt_option {
23
+ None,
24
+ Some
25
+ };
26
+
27
+ typedef struct {
28
+ enum ndt_option tag;
29
+ uint16_t Some;
30
+ } uint16_opt_t;
31
+
32
+
33
+ Due to the multitude of options in creating fields a number of functions take
34
+ a *uint16_opt_t* struct. If *tag* is *None*, no value has been specified
35
+ and the *Some* field is undefined.
36
+
37
+ If *tag* is *Some*, the value in the *Some* field has been explicitly given.
38
+
39
+
40
+ Functions
41
+ ---------
42
+
43
+ .. topic:: ndt_field
44
+
45
+ .. code-block:: c
46
+
47
+ ndt_field_t *ndt_field(char *name, ndt_t *type, uint16_opt_t align,
48
+ uint16_opt_t pack, uint16_opt_t pad, ndt_context_t *ctx);
49
+
50
+
51
+ Create a new field. For tuples, *name* is :c:macro:`NULL`. The `align`
52
+ and `pack` options are mutually exclusive and have exactly the same
53
+ function as *gcc's* `aligned` and `packed` attributes when applied to
54
+ individual fields.
55
+
56
+ The `pad` field has no influence on the field layout. It is present to
57
+ enable sanity checks when an explicit number of padding bytes has been
58
+ specified (Example: PEP-3118).
59
+
60
+
61
+ .. topic:: ndt_field_del
62
+
63
+ .. code-block:: c
64
+
65
+ void ndt_field_del(ndt_field_t *field);
66
+
67
+ Deallocate a field.
68
+
69
+
70
+ .. topic:: ndt_field_array_del
71
+
72
+ .. code-block:: c
73
+
74
+ void ndt_field_array_del(ndt_field_t *fields, int64_t shape);
75
+
76
+
77
+ Deallocate an array of fields.
78
+
79
+
80
+ Values
81
+ ------
82
+
83
+ .. topic:: values
84
+
85
+ .. code-block:: c
86
+
87
+ /* Selected values for the categorical type. */
88
+ enum ndt_value {
89
+ ValBool,
90
+ ValInt64,
91
+ ValFloat64,
92
+ ValString,
93
+ ValNA,
94
+ };
95
+
96
+ typedef struct {
97
+ enum ndt_value tag;
98
+ union {
99
+ bool ValBool;
100
+ int64_t ValInt64;
101
+ double ValFloat64;
102
+ char *ValString;
103
+ };
104
+ } ndt_value_t;
105
+
106
+
107
+ The categorical type contains values. Currently a small number of primitive
108
+ types are supported. It would be possible to use memory typed by *ndt_t* itself
109
+ either by introducing a circular relationship between libndtypes and container
110
+ libraries or by duplicating parts of a container library.
111
+
112
+ It remains to be seen if such an added complexity is useful.
113
+
114
+
115
+
116
+ .. topic:: ndt_value_from_number
117
+
118
+ .. code-block:: c
119
+
120
+ ndt_value_t *ndt_value_from_number(enum ndt_value tag, char *v, ndt_context_t *ctx);
121
+
122
+ Construct a number or boolean value from a string. *tag* must be one of
123
+ :c:macro:`ValBool`, :c:macro:`ValInt64`, or :c:macro:`ValFloat64`.
124
+
125
+
126
+ .. topic:: ndt_value_from_string
127
+
128
+ .. code-block:: c
129
+
130
+ ndt_value_t *ndt_value_from_string(char *v, ndt_context_t *ctx);
131
+
132
+ Construct a :c:macro:`ValString` value from a string.
133
+
134
+
135
+ .. topic:: *ndt_value_na
136
+
137
+ .. code-block:: c
138
+
139
+ ndt_value_t *ndt_value_na(ndt_context_t *ctx);
140
+
141
+ Construct the :c:macro:`NA` value.
142
+
143
+
144
+ .. topic:: ndt_value_equal
145
+
146
+ .. code-block:: c
147
+
148
+ int ndt_value_equal(const ndt_value_t *x, const ndt_value_t *y);
149
+
150
+ Determine if two values are equal. :c:macro:`NA` compares not equal to
151
+ itself.
152
+
153
+
154
+ .. topic:: ndt_value_mem_equal
155
+
156
+ .. code-block:: c
157
+
158
+ ndt_value_mem_equal(const ndt_value_t *x, const ndt_value_t *y);
159
+
160
+ Determine if two values are structurally equal. :c:macro:`NA` compares
161
+ equal to itself.
162
+
163
+
164
+ .. topic:: ndt_value_compare
165
+
166
+ .. code-block:: c
167
+
168
+ int ndt_value_compare(const ndt_value_t *x, const ndt_value_t *y);
169
+
170
+ Compare values according to a sorting order. :c:macro:`NA` compares equal
171
+ to itself.
172
+
173
+
174
+
175
+
@@ -0,0 +1,72 @@
1
+ .. meta::
2
+ :robots: index,follow
3
+ :description: libndtypes documentation
4
+
5
+ .. sectionauthor:: Stefan Krah <skrah at bytereef.org>
6
+
7
+
8
+ Functions
9
+ =========
10
+
11
+ Most library functions are for creating types. The functions in this section
12
+ operate *on* types.
13
+
14
+
15
+ Copying
16
+ -------
17
+
18
+ .. topic:: ndt_copy
19
+
20
+ .. code-block:: c
21
+
22
+ ndt_t *ndt_copy(const ndt_t *t, ndt_context_t *ctx);
23
+
24
+ Create a copy of the argument. This is an important function, since types
25
+ should be immutable.
26
+
27
+
28
+ Equality
29
+ --------
30
+
31
+ .. topic:: ndt_equal
32
+
33
+ .. code-block:: c
34
+
35
+ int ndt_equal(const ndt_t *t, const ndt_t *u);
36
+
37
+ Return 1 if *t* and *u* are structurally equal, *0* otherwise.
38
+
39
+
40
+ Pattern matching
41
+ ----------------
42
+
43
+ .. topic:: ndt_match
44
+
45
+ .. code-block:: c
46
+
47
+ int ndt_match(const ndt_t *p, const ndt_t *c, ndt_context_t *ctx);
48
+
49
+ Match concrete candidate *c* against the (possibly abstract) pattern *p*.
50
+
51
+ This is the main function used in type checking.
52
+
53
+
54
+
55
+ Type checking
56
+ -------------
57
+
58
+ .. topic:: ndt_typecheck
59
+
60
+ .. code-block:: c
61
+
62
+ ndt_t *ndt_typecheck(const ndt_t *f, const ndt_t *args, int *outer_dims, ndt_context_t *ctx);
63
+
64
+ Take a function type *f*, check if it can accept the concrete type *args*.
65
+ *args* must be a tuple type that contains the individual arguments.
66
+
67
+ The return value is the inferred return type.
68
+
69
+ Store the number of outer dimensions that need to be traversed before applying
70
+ the function kernel.
71
+
72
+
@@ -0,0 +1,43 @@
1
+ .. meta::
2
+ :robots: index, follow
3
+ :description: libndtypes documentation
4
+ :keywords: libndtypes, C, array computing
5
+
6
+ .. sectionauthor:: Stefan Krah <skrah at bytereef.org>
7
+
8
+
9
+ libndtypes
10
+ ----------
11
+
12
+ libndtypes implements the type part of a compiler frontend. It can describe
13
+ C types needed for array computing and additionally includes symbolic types
14
+ for dynamic type checking.
15
+
16
+
17
+ libndtypes has the concept of abstract and concrete types. Concrete types
18
+ contain the exact data layout and all sizes that are required to access
19
+ subtypes or individual elements in memory.
20
+
21
+ Abstract types are for type checking and include functions, symbolic
22
+ dimensions and type variables. Module support is planned at a later stage.
23
+
24
+
25
+ Concrete types with rich layout information make it possible to write relatively
26
+ small container libraries that can traverse memory without type erasure.
27
+
28
+
29
+ .. toctree::
30
+
31
+ init.rst
32
+ context.rst
33
+ types.rst
34
+ predicates.rst
35
+ functions.rst
36
+ typedef.rst
37
+ io.rst
38
+ encodings.rst
39
+ fields-values.rst
40
+ memory.rst
41
+ util.rst
42
+
43
+
@@ -0,0 +1,48 @@
1
+ .. meta::
2
+ :robots: index,follow
3
+ :description: libndtypes documentation
4
+
5
+ .. sectionauthor:: Stefan Krah <skrah at bytereef.org>
6
+
7
+
8
+ Initialization and tables
9
+ =========================
10
+
11
+ libndtypes has global tables that need to be initialized and finalized.
12
+
13
+
14
+ .. code-block:: c
15
+
16
+ int ndt_init(ndt_context_t *ctx);
17
+
18
+
19
+ Initialize the global tables. This function must be called once at program
20
+ start before using any other libndtypes functions.
21
+
22
+ Return *0* on success and *-1* otherwise.
23
+
24
+
25
+ .. code-block:: c
26
+
27
+ void ndt_finalize(void);
28
+
29
+ Deallocate the global tables. This function may be called once at program
30
+ end for the benefit of memory debuggers.
31
+
32
+
33
+ .. code-block:: c
34
+
35
+ int ndt_typedef_add(const char *name, const ndt_t *type, ndt_context_t *ctx);
36
+
37
+ Add a type alias for *type* to the typedef table. *name* must be globally
38
+ unique. The function steals the *type* argument.
39
+
40
+ On error, deallocate *type* and return *-1*. Return *0* otherwise.
41
+
42
+
43
+ .. code-block:: c
44
+
45
+ const ndt_t *ndt_typedef_find(const char *name, ndt_context_t *ctx);
46
+
47
+ Try to find the type associated with *name* in the typedef table. On success,
48
+ return a const pointer to the type, :c:macro:`NULL` otherwise.
@@ -0,0 +1,100 @@
1
+ .. meta::
2
+ :robots: index,follow
3
+ :description: libndtypes documentation
4
+
5
+ .. sectionauthor:: Stefan Krah <skrah at bytereef.org>
6
+
7
+
8
+ Input/output
9
+ ============
10
+
11
+ Functions for creating and displaying types.
12
+
13
+
14
+ Input
15
+ -----
16
+
17
+ .. topic:: ndt_from_file
18
+
19
+ .. code-block:: c
20
+
21
+ ndt_t *ndt_from_file(const char *name, ndt_context_t *ctx);
22
+
23
+ Create a type from a file that contains the datashape representation.
24
+
25
+
26
+ .. topic:: ndt_from_string
27
+
28
+ .. code-block:: c
29
+
30
+ ndt_t *ndt_from_string(const char *input, ndt_context_t *ctx);
31
+
32
+ Create a type from a string in datashape syntax. This is the primary function
33
+ for creating types.
34
+
35
+
36
+ .. topic:: ndt_from_metadata_and_dtype
37
+
38
+ .. code-block:: c
39
+
40
+ typedef struct {
41
+ int num_offset_arrays; /* number of offset arrays */
42
+ int32_t num_offsets[NDT_MAX_DIM]; /* lengths of the offset arrays */
43
+ int32_t *offset_arrays[NDT_MAX_DIM]; /* offset arrays */
44
+ } ndt_meta_t;
45
+
46
+ ndt_t *ndt_from_metadata_and_dtype(const ndt_meta_t *m, const char *dtype, ndt_context_t *ctx);
47
+
48
+ Create a concrete var dimension using the external offset arrays given
49
+ in the :c:macro:`ndt_meta_t` struct.
50
+
51
+ The application is responsible for keeping the offset arrays alive while the
52
+ type *and all copies of the type* exist.
53
+
54
+ This is not as difficult as it sounds. One approach that utilizes a resource
55
+ manager object is implemented in the Python ndtypes module.
56
+
57
+
58
+ .. topic:: ndt_from_bpformat
59
+
60
+ .. code-block:: c
61
+
62
+ ndt_t *ndt_from_bpformat(const char *input, ndt_context_t *ctx);
63
+
64
+ Create a type from a buffer protocol format string (PEP-3118 syntax). This
65
+ is useful for translating dtypes in a `Py_buffer` struct.
66
+
67
+ The outer dimensions specified by the `Py_buffer` shape member need to
68
+ be created separately.
69
+
70
+
71
+ Output
72
+ ------
73
+
74
+ .. topic:: ndt_as_string
75
+
76
+ .. code-block:: c
77
+
78
+ char *ndt_as_string(const ndt_t *t, ndt_context_t *ctx);
79
+
80
+ Convert *t* to its string representation. This currently omits some layout
81
+ details like alignment, packing or Fortran layout.
82
+
83
+
84
+ .. topic:: ndt_indent
85
+
86
+ .. code-block:: c
87
+
88
+ char *ndt_indent(const ndt_t *t, ndt_context_t *ctx);
89
+
90
+ Same as :func:`ndt_as_string`, but indent the result.
91
+
92
+
93
+ .. topic:: ndt_ast_repr
94
+
95
+ .. code-block:: c
96
+
97
+ char *ndt_ast_repr(const ndt_t *t, ndt_context_t *ctx);
98
+
99
+ Return the representation of the abstract syntax tree of the input type.
100
+ This representation includes all low level details.