xnd 0.2.0dev3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CONTRIBUTING.md +42 -0
- data/Gemfile +3 -0
- data/History.md +0 -0
- data/README.md +7 -0
- data/Rakefile +135 -0
- data/ext/ruby_xnd/extconf.rb +70 -0
- data/ext/ruby_xnd/float_pack_unpack.c +277 -0
- data/ext/ruby_xnd/float_pack_unpack.h +39 -0
- data/ext/ruby_xnd/gc_guard.c +36 -0
- data/ext/ruby_xnd/gc_guard.h +12 -0
- data/ext/ruby_xnd/include/xnd.h +449 -0
- data/ext/ruby_xnd/lib/libxnd.a +0 -0
- data/ext/ruby_xnd/lib/libxnd.so +1 -0
- data/ext/ruby_xnd/lib/libxnd.so.0 +1 -0
- data/ext/ruby_xnd/lib/libxnd.so.0.2.0dev3 +0 -0
- data/ext/ruby_xnd/memory_block_object.c +32 -0
- data/ext/ruby_xnd/memory_block_object.h +33 -0
- data/ext/ruby_xnd/ruby_xnd.c +1953 -0
- data/ext/ruby_xnd/ruby_xnd.h +61 -0
- data/ext/ruby_xnd/ruby_xnd_internal.h +85 -0
- data/ext/ruby_xnd/util.h +170 -0
- data/ext/ruby_xnd/xnd/AUTHORS.txt +5 -0
- data/ext/ruby_xnd/xnd/INSTALL.txt +134 -0
- data/ext/ruby_xnd/xnd/LICENSE.txt +29 -0
- data/ext/ruby_xnd/xnd/MANIFEST.in +3 -0
- data/ext/ruby_xnd/xnd/Makefile.in +80 -0
- data/ext/ruby_xnd/xnd/README.rst +44 -0
- data/ext/ruby_xnd/xnd/config.guess +1530 -0
- data/ext/ruby_xnd/xnd/config.h.in +22 -0
- data/ext/ruby_xnd/xnd/config.sub +1782 -0
- data/ext/ruby_xnd/xnd/configure +4867 -0
- data/ext/ruby_xnd/xnd/configure.ac +164 -0
- data/ext/ruby_xnd/xnd/doc/Makefile +14 -0
- data/ext/ruby_xnd/xnd/doc/_static/copybutton.js +66 -0
- data/ext/ruby_xnd/xnd/doc/conf.py +26 -0
- data/ext/ruby_xnd/xnd/doc/index.rst +44 -0
- data/ext/ruby_xnd/xnd/doc/libxnd/data-structures.rst +186 -0
- data/ext/ruby_xnd/xnd/doc/libxnd/functions.rst +148 -0
- data/ext/ruby_xnd/xnd/doc/libxnd/index.rst +25 -0
- data/ext/ruby_xnd/xnd/doc/releases/index.rst +34 -0
- data/ext/ruby_xnd/xnd/doc/xnd/align-pack.rst +96 -0
- data/ext/ruby_xnd/xnd/doc/xnd/buffer-protocol.rst +42 -0
- data/ext/ruby_xnd/xnd/doc/xnd/index.rst +30 -0
- data/ext/ruby_xnd/xnd/doc/xnd/quickstart.rst +62 -0
- data/ext/ruby_xnd/xnd/doc/xnd/types.rst +674 -0
- data/ext/ruby_xnd/xnd/install-sh +527 -0
- data/ext/ruby_xnd/xnd/libxnd/Makefile.in +102 -0
- data/ext/ruby_xnd/xnd/libxnd/Makefile.vc +112 -0
- data/ext/ruby_xnd/xnd/libxnd/bitmaps.c +345 -0
- data/ext/ruby_xnd/xnd/libxnd/contrib.h +313 -0
- data/ext/ruby_xnd/xnd/libxnd/copy.c +944 -0
- data/ext/ruby_xnd/xnd/libxnd/equal.c +1216 -0
- data/ext/ruby_xnd/xnd/libxnd/inline.h +154 -0
- data/ext/ruby_xnd/xnd/libxnd/overflow.h +147 -0
- data/ext/ruby_xnd/xnd/libxnd/split.c +286 -0
- data/ext/ruby_xnd/xnd/libxnd/tests/Makefile.in +39 -0
- data/ext/ruby_xnd/xnd/libxnd/tests/Makefile.vc +44 -0
- data/ext/ruby_xnd/xnd/libxnd/tests/README.txt +2 -0
- data/ext/ruby_xnd/xnd/libxnd/tests/runtest.c +101 -0
- data/ext/ruby_xnd/xnd/libxnd/tests/test.h +48 -0
- data/ext/ruby_xnd/xnd/libxnd/tests/test_fixed.c +108 -0
- data/ext/ruby_xnd/xnd/libxnd/xnd.c +1304 -0
- data/ext/ruby_xnd/xnd/libxnd/xnd.h +449 -0
- data/ext/ruby_xnd/xnd/python/test_xnd.py +3144 -0
- data/ext/ruby_xnd/xnd/python/xnd/__init__.py +290 -0
- data/ext/ruby_xnd/xnd/python/xnd/_xnd.c +2822 -0
- data/ext/ruby_xnd/xnd/python/xnd/contrib/pretty.py +850 -0
- data/ext/ruby_xnd/xnd/python/xnd/docstrings.h +129 -0
- data/ext/ruby_xnd/xnd/python/xnd/pyxnd.h +200 -0
- data/ext/ruby_xnd/xnd/python/xnd/util.h +182 -0
- data/ext/ruby_xnd/xnd/python/xnd_randvalue.py +1121 -0
- data/ext/ruby_xnd/xnd/python/xnd_support.py +106 -0
- data/ext/ruby_xnd/xnd/setup.py +303 -0
- data/ext/ruby_xnd/xnd/vcbuild/INSTALL.txt +42 -0
- data/ext/ruby_xnd/xnd/vcbuild/runtest32.bat +16 -0
- data/ext/ruby_xnd/xnd/vcbuild/runtest64.bat +14 -0
- data/ext/ruby_xnd/xnd/vcbuild/vcbuild32.bat +29 -0
- data/ext/ruby_xnd/xnd/vcbuild/vcbuild64.bat +29 -0
- data/ext/ruby_xnd/xnd/vcbuild/vcclean.bat +13 -0
- data/ext/ruby_xnd/xnd/vcbuild/vcdistclean.bat +14 -0
- data/lib/ruby_xnd.so +0 -0
- data/lib/xnd.rb +306 -0
- data/lib/xnd/monkeys.rb +29 -0
- data/lib/xnd/version.rb +6 -0
- data/spec/debug_spec.rb +9 -0
- data/spec/gc_guard_spec.rb +10 -0
- data/spec/leakcheck.rb +9 -0
- data/spec/spec_helper.rb +877 -0
- data/spec/type_inference_spec.rb +81 -0
- data/spec/xnd_spec.rb +2921 -0
- data/xnd.gemspec +47 -0
- metadata +215 -0
@@ -0,0 +1,61 @@
|
|
1
|
+
/* BSD 3-Clause License
|
2
|
+
*
|
3
|
+
* Copyright (c) 2018, Quansight and Sameer Deshmukh
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are met:
|
8
|
+
*
|
9
|
+
* * Redistributions of source code must retain the above copyright notice, this
|
10
|
+
* list of conditions and the following disclaimer.
|
11
|
+
*
|
12
|
+
* * Redistributions in binary form must reproduce the above copyright notice,
|
13
|
+
* this list of conditions and the following disclaimer in the documentation
|
14
|
+
* and/or other materials provided with the distribution.
|
15
|
+
*
|
16
|
+
* * Neither the name of the copyright holder nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
23
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
24
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
25
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
26
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
27
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
28
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
*/
|
31
|
+
|
32
|
+
/* File containing headers for Ruby XND wrapper.
|
33
|
+
*
|
34
|
+
* Author: Sameer Deshmukh (@v0dro)
|
35
|
+
*/
|
36
|
+
#ifndef RUBY_XND_H
|
37
|
+
#define RUBY_XND_H
|
38
|
+
|
39
|
+
#ifdef __cplusplus
|
40
|
+
extern "C" {
|
41
|
+
#endif
|
42
|
+
|
43
|
+
#include "ruby.h"
|
44
|
+
#include "ndtypes.h"
|
45
|
+
#include "xnd.h"
|
46
|
+
|
47
|
+
size_t rb_xnd_hash_size(VALUE hash);
|
48
|
+
int rb_xnd_get_complex_values(VALUE comp, double *real, double *imag);
|
49
|
+
/* Return true if obj is of type XND. */
|
50
|
+
int rb_xnd_check_type(VALUE obj);
|
51
|
+
const xnd_t * rb_xnd_const_xnd(VALUE xnd);
|
52
|
+
VALUE rb_xnd_empty_from_type(ndt_t *t);
|
53
|
+
VALUE rb_xnd_from_xnd(xnd_t *x);
|
54
|
+
|
55
|
+
typedef struct XndObject XndObject;
|
56
|
+
|
57
|
+
#ifdef __cplusplus
|
58
|
+
}
|
59
|
+
#endif
|
60
|
+
|
61
|
+
#endif /* RUBY_XND_H */
|
@@ -0,0 +1,85 @@
|
|
1
|
+
/* BSD 3-Clause License
|
2
|
+
*
|
3
|
+
* Copyright (c) 2018, Quansight and Sameer Deshmukh
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are met:
|
8
|
+
*
|
9
|
+
* * Redistributions of source code must retain the above copyright notice, this
|
10
|
+
* list of conditions and the following disclaimer.
|
11
|
+
*
|
12
|
+
* * Redistributions in binary form must reproduce the above copyright notice,
|
13
|
+
* this list of conditions and the following disclaimer in the documentation
|
14
|
+
* and/or other materials provided with the distribution.
|
15
|
+
*
|
16
|
+
* * Neither the name of the copyright holder nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
23
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
24
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
25
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
26
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
27
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
28
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
*/
|
31
|
+
|
32
|
+
|
33
|
+
/* File containing internal declarations for Ruby XND wrapper.
|
34
|
+
*
|
35
|
+
* Author: Sameer Deshmukh (@v0dro)
|
36
|
+
*/
|
37
|
+
|
38
|
+
#ifndef RUBY_XND_INTERNAL_H
|
39
|
+
#define RUBY_XND_INTERNAL_H
|
40
|
+
|
41
|
+
//#define XND_DEBUG 1
|
42
|
+
|
43
|
+
#ifdef XND_DEBUG
|
44
|
+
#include <assert.h>
|
45
|
+
#endif
|
46
|
+
|
47
|
+
#include <float.h>
|
48
|
+
#include "ruby.h"
|
49
|
+
#include "ruby/encoding.h"
|
50
|
+
#include "ruby_ndtypes.h"
|
51
|
+
#include "ruby_xnd.h"
|
52
|
+
#include "util.h"
|
53
|
+
#include "float_pack_unpack.h"
|
54
|
+
|
55
|
+
extern VALUE mRubyXND_GCGuard;
|
56
|
+
|
57
|
+
/* typedefs */
|
58
|
+
typedef struct XndObject XndObject;
|
59
|
+
typedef struct MemoryBlockObject MemoryBlockObject;
|
60
|
+
|
61
|
+
#include "gc_guard.h"
|
62
|
+
|
63
|
+
/* macros */
|
64
|
+
#if SIZEOF_LONG == SIZEOF_VOIDP
|
65
|
+
# define PTR2NUM(x) (LONG2NUM((long)(x)))
|
66
|
+
# define NUM2PTR(x) ((void*)(NUM2ULONG(x)))
|
67
|
+
#elif SIZEOF_LONG_LONG == SIZEOF_VOIDP
|
68
|
+
# define PTR2NUM(x) (LL2NUM((LONG_LONG)(x)))
|
69
|
+
# define NUM2PTR(x) ((void*)(NUM2ULL(x)))
|
70
|
+
#else
|
71
|
+
# error ---->> ruby requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<----
|
72
|
+
#endif
|
73
|
+
|
74
|
+
/* Convert C int 't' to Ruby 'true' or 'false'. */
|
75
|
+
#define INT2BOOL(t) (t ? Qtrue : Qfalse)
|
76
|
+
|
77
|
+
#ifdef WORDS_BIGENDIAN
|
78
|
+
#define IEEE_BIG_ENDIAN_P 1
|
79
|
+
#define IEEE_LITTLE_ENDIAN_P NULL
|
80
|
+
#else
|
81
|
+
#define IEEE_LITTLE_ENDIAN_P 1
|
82
|
+
#define IEEE_BIG_ENDIAN_P NULL
|
83
|
+
#endif
|
84
|
+
|
85
|
+
#endif /* RUBY_XND_INTERNAL_H */
|
data/ext/ruby_xnd/util.h
ADDED
@@ -0,0 +1,170 @@
|
|
1
|
+
/* BSD 3-Clause License
|
2
|
+
*
|
3
|
+
* Copyright (c) 2018, Quansight and Sameer Deshmukh
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are met:
|
8
|
+
*
|
9
|
+
* * Redistributions of source code must retain the above copyright notice, this
|
10
|
+
* list of conditions and the following disclaimer.
|
11
|
+
*
|
12
|
+
* * Redistributions in binary form must reproduce the above copyright notice,
|
13
|
+
* this list of conditions and the following disclaimer in the documentation
|
14
|
+
* and/or other materials provided with the distribution.
|
15
|
+
*
|
16
|
+
* * Neither the name of the copyright holder nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
23
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
24
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
25
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
26
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
27
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
28
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
*/
|
31
|
+
|
32
|
+
/* Utility functions for Ruby XND wrapper.
|
33
|
+
*
|
34
|
+
* Author: Sameer Deshmukh (@v0dro)
|
35
|
+
*/
|
36
|
+
|
37
|
+
#ifndef UTIL_H
|
38
|
+
#define UTIL_H
|
39
|
+
|
40
|
+
#include "ruby.h"
|
41
|
+
#include <stdlib.h>
|
42
|
+
#include <stdint.h>
|
43
|
+
#include <inttypes.h>
|
44
|
+
#include "ndtypes.h"
|
45
|
+
|
46
|
+
/* Raise an error stored in $!. Clears it before raising. */
|
47
|
+
inline void
|
48
|
+
raise_error(void)
|
49
|
+
{
|
50
|
+
VALUE exeception = rb_errinfo();
|
51
|
+
|
52
|
+
rb_set_errinfo(Qnil);
|
53
|
+
rb_exc_raise(exeception);
|
54
|
+
}
|
55
|
+
|
56
|
+
inline void
|
57
|
+
set_error_info(VALUE err, const char * msg)
|
58
|
+
{
|
59
|
+
rb_set_errinfo(rb_exc_new2(err, msg));
|
60
|
+
}
|
61
|
+
|
62
|
+
static inline size_t
|
63
|
+
safe_downcast(int64_t size)
|
64
|
+
{
|
65
|
+
#if SIZE_MAX < INT64_MAX
|
66
|
+
if (size > INT32_MAX) {
|
67
|
+
rb_raise(rb_eSizeError,
|
68
|
+
"sizes should never exceed INT32_MAX on 32-bit platforms.");
|
69
|
+
}
|
70
|
+
#endif
|
71
|
+
return (size_t)size;
|
72
|
+
}
|
73
|
+
|
74
|
+
static inline bool
|
75
|
+
check_invariants(const ndt_t *t)
|
76
|
+
{
|
77
|
+
#if SIZE_MAX < INT64_MAX
|
78
|
+
return safe_downcast(t->datasize) >= 0;
|
79
|
+
#else
|
80
|
+
(void)t;
|
81
|
+
return 1;
|
82
|
+
#endif
|
83
|
+
}
|
84
|
+
|
85
|
+
static inline VALUE
|
86
|
+
array_new(int64_t size)
|
87
|
+
{
|
88
|
+
#if SIZE_MAX < INT64_MAX
|
89
|
+
size_t n = safe_downcast(size);
|
90
|
+
return n < 0 ? NULL : rb_ary_new2(n);
|
91
|
+
#else
|
92
|
+
return rb_ary_new2(size);
|
93
|
+
#endif
|
94
|
+
}
|
95
|
+
|
96
|
+
static inline VALUE
|
97
|
+
bytes_from_string_and_size(const char *str, int64_t size)
|
98
|
+
{
|
99
|
+
#if SIZE_MAX < INT64_MAX
|
100
|
+
size_t n = safe_downcast(size);
|
101
|
+
return n < 0 ? NULL : rb_str_new(str, n);
|
102
|
+
#else
|
103
|
+
return rb_str_new(str, size);
|
104
|
+
#endif
|
105
|
+
}
|
106
|
+
|
107
|
+
static long long
|
108
|
+
mod(long long a, long long b)
|
109
|
+
{
|
110
|
+
long long r = a % b;
|
111
|
+
return r < 0 ? r + b : r;
|
112
|
+
}
|
113
|
+
|
114
|
+
static inline int
|
115
|
+
rb_range_unpack(VALUE range, long long *begin, long long *end, long long *step, size_t size)
|
116
|
+
{
|
117
|
+
/* FIXME: As of 27 Aug. 2018 Ruby trunk implements step as a property of
|
118
|
+
Range and XND will support it as and when it is available. Maybe for
|
119
|
+
now we can implement a #step iterator in a separate method.
|
120
|
+
*/
|
121
|
+
*step = 1;
|
122
|
+
VALUE rb_begin = rb_funcall(range, rb_intern("begin"), 0, NULL);
|
123
|
+
VALUE rb_end = rb_funcall(range, rb_intern("end"), 0, NULL);
|
124
|
+
int exclude_end = RTEST(rb_funcall(range, rb_intern("exclude_end?"), 0, NULL));
|
125
|
+
|
126
|
+
if (RB_TYPE_P(rb_begin, T_FLOAT)) {
|
127
|
+
double value = RFLOAT_VALUE(rb_begin);
|
128
|
+
|
129
|
+
if (isinf(value)) {
|
130
|
+
*begin = 0;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
else {
|
134
|
+
long long temp = NUM2LL(rb_begin);
|
135
|
+
|
136
|
+
if (temp < 0) { /* if negative index map to positive. */
|
137
|
+
temp = mod(temp, (long long)size);
|
138
|
+
}
|
139
|
+
|
140
|
+
*begin = temp;
|
141
|
+
}
|
142
|
+
|
143
|
+
if (RB_TYPE_P(rb_end, T_FLOAT)) {
|
144
|
+
double value = RFLOAT_VALUE(rb_end);
|
145
|
+
|
146
|
+
if (isinf(value)) {
|
147
|
+
*end = INT64_MAX;
|
148
|
+
return;
|
149
|
+
}
|
150
|
+
}
|
151
|
+
else {
|
152
|
+
long long temp = NUM2LL(rb_end);
|
153
|
+
|
154
|
+
if (temp < 0) { /* if negative index map to ppositive. */
|
155
|
+
temp = mod(temp, (long long)size);
|
156
|
+
}
|
157
|
+
|
158
|
+
*end = temp;
|
159
|
+
}
|
160
|
+
|
161
|
+
/* a[0..0] in Ruby returns the 0th index.
|
162
|
+
a[0...0] in Ruby returns empty array like a[0:0] in Python.
|
163
|
+
libxnd does not include the last index by default.
|
164
|
+
*/
|
165
|
+
if (!exclude_end) {
|
166
|
+
*end += 1;
|
167
|
+
}
|
168
|
+
}
|
169
|
+
|
170
|
+
#endif /* UTIL_H */
|
@@ -0,0 +1,134 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
Requirements (libndtypes)
|
4
|
+
=========================
|
5
|
+
|
6
|
+
Unless libndtypes has already been installed in the system directories,
|
7
|
+
it is recommended to clone libndtypes into the xnd directory.
|
8
|
+
|
9
|
+
|
10
|
+
Get ndtypes
|
11
|
+
-----------
|
12
|
+
git clone https://github.com/plures/ndtypes.git
|
13
|
+
|
14
|
+
|
15
|
+
For building libxnd only
|
16
|
+
------------------------
|
17
|
+
cd ndtypes
|
18
|
+
./configure
|
19
|
+
make
|
20
|
+
cd ..
|
21
|
+
|
22
|
+
|
23
|
+
For building the xnd Python module
|
24
|
+
----------------------------------
|
25
|
+
# This also builds libndtypes and copies the ndtypes Python package into
|
26
|
+
# the python directory next to the xnd package.
|
27
|
+
cd ndtypes
|
28
|
+
python3 setup.py install --local=../python
|
29
|
+
cd ..
|
30
|
+
|
31
|
+
|
32
|
+
Unix: libxnd build instructions
|
33
|
+
===============================
|
34
|
+
|
35
|
+
# Build
|
36
|
+
./configure
|
37
|
+
make
|
38
|
+
|
39
|
+
# Test
|
40
|
+
make check
|
41
|
+
|
42
|
+
# Install
|
43
|
+
make install
|
44
|
+
|
45
|
+
# Clean
|
46
|
+
make clean
|
47
|
+
|
48
|
+
# Distclean
|
49
|
+
make distclean
|
50
|
+
|
51
|
+
|
52
|
+
Windows: libxnd build instructions
|
53
|
+
==================================
|
54
|
+
|
55
|
+
See vcbuild/INSTALL.txt.
|
56
|
+
|
57
|
+
|
58
|
+
Unix/Windows: Python module build instructions
|
59
|
+
==============================================
|
60
|
+
|
61
|
+
To avoid shared library mismatches, the Python module builds with an rpath
|
62
|
+
and ships the library inside the package.
|
63
|
+
|
64
|
+
Unless you are a distributor with tight control over the system library
|
65
|
+
versions, it is not recommended to install the library for the Python
|
66
|
+
module.
|
67
|
+
|
68
|
+
|
69
|
+
Build all
|
70
|
+
---------
|
71
|
+
|
72
|
+
# Build libxnd and the module (libxnd is copied into the package)
|
73
|
+
python3 setup.py build
|
74
|
+
|
75
|
+
# Test
|
76
|
+
python3 setup.py test
|
77
|
+
|
78
|
+
# Doctest (optional, relies on Sphinx)
|
79
|
+
python3 setup.py doctest
|
80
|
+
|
81
|
+
# Install
|
82
|
+
python3 setup.py install
|
83
|
+
|
84
|
+
# Clean libxnd and the module
|
85
|
+
python3 setup.py distclean
|
86
|
+
|
87
|
+
|
88
|
+
Build the module only (for developing)
|
89
|
+
--------------------------------------
|
90
|
+
|
91
|
+
First, build libxnd as above. This also copies the shared library into
|
92
|
+
the package. Then, to avoid rebuilding the library repeatedly, use:
|
93
|
+
|
94
|
+
# Build the module
|
95
|
+
python3 setup.py module
|
96
|
+
|
97
|
+
# Clean the module
|
98
|
+
python3 setup.py clean
|
99
|
+
|
100
|
+
|
101
|
+
Alternative install (for developing)
|
102
|
+
------------------------------------
|
103
|
+
|
104
|
+
# Install the package into a local directory. This is mainly useful for
|
105
|
+
# developing gufuncs:
|
106
|
+
python3 setup.py install --local="$PWD/../python"
|
107
|
+
|
108
|
+
# Windows:
|
109
|
+
python.exe setup.py install --local="%cd%\..\python"
|
110
|
+
|
111
|
+
|
112
|
+
Alternative install with conda (for developing)
|
113
|
+
-----------------------------------------------
|
114
|
+
|
115
|
+
# Install the xnd package into a local directory.
|
116
|
+
|
117
|
+
# Create and activate a new conda environment:
|
118
|
+
conda create --name xnd python=3.7
|
119
|
+
conda activate xnd
|
120
|
+
|
121
|
+
# Use conda to install ndtypes (if you also want to work on ndtypes, please
|
122
|
+
# check the project repository https://github.com/plures/ndtypes):
|
123
|
+
conda install -c xnd/label/dev ndtypes
|
124
|
+
|
125
|
+
# Use conda to install numpy (optional, some tests require the library):
|
126
|
+
conda install numpy
|
127
|
+
|
128
|
+
# Use conda to build libxnd and xnd:
|
129
|
+
conda build .conda/libxnd -c xnd/label/dev
|
130
|
+
conda build .conda/xnd -c xnd/label/dev
|
131
|
+
|
132
|
+
# Use conda to install the local version of the library and the
|
133
|
+
# Python module:
|
134
|
+
conda install --use-local xnd
|