carray 1.5.9 → 2.0.0

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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +10 -0
  3. data/TODO.md +1 -0
  4. data/carray.gemspec +1 -1
  5. data/ext/ca_iter_block.c +20 -5
  6. data/ext/ca_iter_dimension.c +21 -10
  7. data/ext/ca_iter_window.c +17 -5
  8. data/ext/ca_obj_array.c +73 -10
  9. data/ext/ca_obj_bitarray.c +21 -6
  10. data/ext/ca_obj_bitfield.c +21 -11
  11. data/ext/ca_obj_block.c +34 -10
  12. data/ext/ca_obj_fake.c +21 -6
  13. data/ext/ca_obj_farray.c +34 -5
  14. data/ext/ca_obj_field.c +23 -7
  15. data/ext/ca_obj_grid.c +36 -7
  16. data/ext/ca_obj_mapping.c +36 -7
  17. data/ext/ca_obj_object.c +35 -9
  18. data/ext/ca_obj_reduce.c +34 -5
  19. data/ext/ca_obj_refer.c +31 -10
  20. data/ext/ca_obj_repeat.c +35 -12
  21. data/ext/ca_obj_select.c +35 -9
  22. data/ext/ca_obj_shift.c +41 -12
  23. data/ext/ca_obj_transpose.c +36 -7
  24. data/ext/ca_obj_unbound_repeat.c +39 -14
  25. data/ext/ca_obj_window.c +46 -15
  26. data/ext/carray.h +97 -31
  27. data/ext/carray_access.c +25 -42
  28. data/ext/carray_attribute.c +35 -35
  29. data/ext/carray_call_cfunc.c +28 -28
  30. data/ext/carray_cast.c +25 -26
  31. data/ext/carray_cast_func.rb +1 -2
  32. data/ext/carray_conversion.c +7 -10
  33. data/ext/carray_copy.c +5 -5
  34. data/ext/carray_core.c +44 -7
  35. data/ext/carray_element.c +9 -9
  36. data/ext/carray_generate.c +7 -7
  37. data/ext/carray_iterator.c +33 -23
  38. data/ext/carray_loop.c +9 -9
  39. data/ext/carray_mask.c +38 -36
  40. data/ext/carray_math.rb +6 -6
  41. data/ext/carray_numeric.c +1 -1
  42. data/ext/carray_operator.c +31 -21
  43. data/ext/carray_order.c +216 -12
  44. data/ext/carray_sort_addr.c +2 -2
  45. data/ext/carray_stat.c +22 -22
  46. data/ext/carray_stat_proc.rb +13 -13
  47. data/ext/carray_test.c +8 -8
  48. data/ext/ruby_carray.c +7 -0
  49. data/ext/ruby_ccomplex.c +25 -11
  50. data/ext/version.h +6 -6
  51. data/lib/carray/inspect.rb +0 -3
  52. data/lib/carray/io/imagemagick.rb +8 -9
  53. data/lib/carray/mkmf.rb +1 -0
  54. data/lib/carray/time.rb +1 -1
  55. data/spec/Classes/ex1.rb +46 -0
  56. metadata +4 -6
data/ext/carray_test.c CHANGED
@@ -173,7 +173,7 @@ rb_ca_is_type (VALUE arg, int type)
173
173
  if ( ! rb_obj_is_carray(arg) ) {
174
174
  rb_raise(rb_eRuntimeError, "CArray required");
175
175
  }
176
- Data_Get_Struct(arg, CArray, ca);
176
+ TypedData_Get_Struct(arg, CArray, &carray_data_type, ca);
177
177
  return ca->data_type == type;
178
178
  }
179
179
 
@@ -237,7 +237,7 @@ rb_ca_is_valid_index (int argc, VALUE *argv, VALUE self)
237
237
  ca_size_t idx;
238
238
  int i;
239
239
 
240
- Data_Get_Struct(self, CArray, ca);
240
+ TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
241
241
 
242
242
  if ( argc != ca->ndim ) {
243
243
  rb_raise(rb_eArgError,
@@ -270,7 +270,7 @@ rb_ca_is_valid_addr (VALUE self, VALUE raddr)
270
270
  CArray *ca;
271
271
  ca_size_t addr;
272
272
 
273
- Data_Get_Struct(self, CArray, ca);
273
+ TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
274
274
  addr = NUM2SIZE(raddr);
275
275
  /*
276
276
  if ( addr < 0 ) {
@@ -295,7 +295,7 @@ static VALUE
295
295
  rb_ca_has_same_shape (VALUE self, VALUE other)
296
296
  {
297
297
  CArray *ca, *cb;
298
- Data_Get_Struct(self, CArray, ca);
298
+ TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
299
299
  cb = ca_wrap_readonly(other, ca->data_type);
300
300
  return ca_has_same_shape(ca, cb) ? Qtrue : Qfalse;
301
301
  }
@@ -486,8 +486,8 @@ rb_ca_equal (VALUE self, VALUE other)
486
486
  }
487
487
  }
488
488
 
489
- Data_Get_Struct(self, CArray, ca);
490
- Data_Get_Struct(other, CArray, cb);
489
+ TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
490
+ TypedData_Get_Struct(other, CArray, &carray_data_type, cb);
491
491
 
492
492
  return ( ca_equal(ca, cb) ) ? Qtrue : Qfalse;
493
493
  }
@@ -560,7 +560,7 @@ rb_ca_hash (VALUE self)
560
560
  CArray *ca;
561
561
  int32_t hash;
562
562
 
563
- Data_Get_Struct(self, CArray, ca);
563
+ TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
564
564
  hash = ca_hash(ca);
565
565
  return ULONG2NUM(hash);
566
566
  }
@@ -590,7 +590,7 @@ VALUE
590
590
  rb_ca_freeze (VALUE self)
591
591
  {
592
592
  CArray *ca;
593
- Data_Get_Struct(self, CArray, ca);
593
+ TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
594
594
  ca_set_flag(ca, CA_FLAG_READ_ONLY);
595
595
  return rb_obj_freeze(self);
596
596
  }
data/ext/ruby_carray.c CHANGED
@@ -101,6 +101,13 @@ Init_carray_ext ()
101
101
  rb_cCARepeat = rb_define_class("CARepeat", rb_cCAVirtual);
102
102
  rb_cCAUnboundRepeat = rb_define_class("CAUnboundRepeat", rb_cCAVirtual);
103
103
 
104
+ rb_cCArrayMask = rb_define_class("CArrayMask", rb_cCArray);
105
+ rb_cCAReferMask = rb_define_class("CAReferMask", rb_cCARefer);
106
+ rb_cCABlockMask = rb_define_class("CABlockMask", rb_cCABlock);
107
+ rb_cCASelectMask = rb_define_class("CASelectMask", rb_cCASelect);
108
+ rb_cCARepeatMask = rb_define_class("CARepeatMask", rb_cCARepeat);
109
+ rb_cCAUnboundRepeatMask = rb_define_class("CAUnboundRepeatMask", rb_cCAUnboundRepeat);
110
+
104
111
  /* -- Exception class -- */
105
112
 
106
113
  rb_eCADataTypeError =
data/ext/ruby_ccomplex.c CHANGED
@@ -19,6 +19,20 @@
19
19
  static VALUE rb_cComplex;
20
20
  #endif
21
21
 
22
+ extern const rb_data_type_t ccomplex_data_type;
23
+
24
+ const rb_data_type_t ccomplex_data_type = {
25
+ .parent = NULL,
26
+ .wrap_struct_name = "CComplex",
27
+ .function = {
28
+ .dmark = NULL,
29
+ .dfree = xfree,
30
+ .dsize = NULL,
31
+ .dcompact = NULL
32
+ },
33
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
34
+ };
35
+
22
36
  VALUE rb_cCComplex;
23
37
 
24
38
  VALUE rb_ccomplex_new2 (double re, double im);
@@ -69,7 +83,7 @@ rb_num2cc(VALUE num)
69
83
  {
70
84
  if ( rb_obj_is_kind_of(num, rb_cCComplex) ) {
71
85
  double complex *cp;
72
- Data_Get_Struct(num, double complex, cp);
86
+ TypedData_Get_Struct(num, double complex, &ccomplex_data_type, cp);
73
87
  return *cp;
74
88
  }
75
89
  switch ( TYPE(num) ) {
@@ -101,7 +115,7 @@ rb_num_to_cc (VALUE num)
101
115
  if ( rb_obj_is_kind_of(num, rb_cCComplex) ) {
102
116
  double complex cc = 0.0, *cp;
103
117
  cp = &cc;
104
- Data_Get_Struct(num, double complex, cp);
118
+ TypedData_Get_Struct(num, double complex, &ccomplex_data_type, cp);
105
119
  return rb_ccomplex_new(cc);
106
120
  }
107
121
  switch ( TYPE(num) ) {
@@ -129,7 +143,7 @@ rb_ccomplex_new (double complex c)
129
143
  {
130
144
  VALUE obj;
131
145
  double complex *cp;
132
- obj = Data_Make_Struct(rb_cCComplex, double complex, 0, xfree, cp);
146
+ obj = TypedData_Make_Struct(rb_cCComplex, double complex, &ccomplex_data_type, cp);
133
147
  *cp = c;
134
148
  return obj;
135
149
  }
@@ -171,7 +185,7 @@ rb_cc_initialize (int argc, VALUE *argv, VALUE self)
171
185
  volatile VALUE rre, rim;
172
186
  double complex *cp;
173
187
 
174
- Data_Get_Struct(self, double complex, cp);
188
+ TypedData_Get_Struct(self, double complex, &ccomplex_data_type, cp);
175
189
 
176
190
  rb_scan_args(argc, argv, "11", (VALUE *)&rre, (VALUE *)&rim);
177
191
 
@@ -189,7 +203,7 @@ static VALUE
189
203
  rb_cc_to_c (VALUE self)
190
204
  {
191
205
  double complex *cp;
192
- Data_Get_Struct(self, double complex, cp);
206
+ TypedData_Get_Struct(self, double complex, &ccomplex_data_type, cp);
193
207
  return rb_Complex(rb_float_new(creal(*cp)), rb_float_new(cimag(*cp)));
194
208
  }
195
209
 
@@ -210,7 +224,7 @@ rb_cc_real(VALUE self)
210
224
  {
211
225
  double complex *cp;
212
226
 
213
- Data_Get_Struct(self, double complex, cp);
227
+ TypedData_Get_Struct(self, double complex, &ccomplex_data_type, cp);
214
228
 
215
229
  return rb_float_new(creal(*cp));
216
230
  }
@@ -220,7 +234,7 @@ rb_cc_imag(VALUE self)
220
234
  {
221
235
  double complex *cp;
222
236
 
223
- Data_Get_Struct(self, double complex, cp);
237
+ TypedData_Get_Struct(self, double complex, &ccomplex_data_type, cp);
224
238
 
225
239
  return rb_float_new(cimag(*cp));
226
240
  }
@@ -232,7 +246,7 @@ rb_cc_inspect (VALUE self)
232
246
  double complex *cp;
233
247
  double re, im;
234
248
 
235
- Data_Get_Struct(self, double complex, cp);
249
+ TypedData_Get_Struct(self, double complex, &ccomplex_data_type, cp);
236
250
 
237
251
  re = creal(*cp);
238
252
  im = cimag(*cp);
@@ -256,7 +270,7 @@ rb_cc_conj(VALUE self)
256
270
  {
257
271
  double complex *cp;
258
272
 
259
- Data_Get_Struct(self, double complex, cp);
273
+ TypedData_Get_Struct(self, double complex, &ccomplex_data_type, cp);
260
274
 
261
275
  return CC2NUM(conj(*cp));
262
276
  }
@@ -266,7 +280,7 @@ rb_cc_arg(VALUE self)
266
280
  {
267
281
  double complex *cp;
268
282
 
269
- Data_Get_Struct(self, double complex, cp);
283
+ TypedData_Get_Struct(self, double complex, &ccomplex_data_type, cp);
270
284
 
271
285
  return rb_float_new(carg(*cp));
272
286
  }
@@ -276,7 +290,7 @@ rb_cc_abs(VALUE self)
276
290
  {
277
291
  double complex *cp;
278
292
 
279
- Data_Get_Struct(self, double complex, cp);
293
+ TypedData_Get_Struct(self, double complex, &ccomplex_data_type, cp);
280
294
 
281
295
  return rb_float_new(cabs(*cp));
282
296
  }
data/ext/version.h CHANGED
@@ -8,9 +8,9 @@
8
8
 
9
9
  ---------------------------------------------------------------------------- */
10
10
 
11
- #define CA_VERSION "1.5.9"
12
- #define CA_VERSION_CODE 159
13
- #define CA_VERSION_MAJOR 1
14
- #define CA_VERSION_MINOR 5
15
- #define CA_VERSION_TEENY 9
16
- #define CA_VERSION_DATE "2023/06/19"
11
+ #define CA_VERSION "2.0.0"
12
+ #define CA_VERSION_CODE 200
13
+ #define CA_VERSION_MAJOR 2
14
+ #define CA_VERSION_MINOR 0
15
+ #define CA_VERSION_TEENY 0
16
+ #define CA_VERSION_DATE "2025/06/03"
@@ -32,9 +32,6 @@ class CArray::Inspector # :nodoc:
32
32
  data_spec,
33
33
  ">"
34
34
  ].join
35
- if @carray.tainted?
36
- output.taint
37
- end
38
35
  return output
39
36
  end
40
37
 
@@ -87,19 +87,18 @@ class CArray
87
87
  else
88
88
  raise "invalid data_type"
89
89
  end
90
- tempfile = "CA_Magick_#{$$}_#{@@magick_tempfile_count}.dat"
91
- @@magick_tempfile_count += 1
90
+ # tempfile = "CA_Magick_#{$$}_#{@@magick_tempfile_count}.dat"
91
+ # @@magick_tempfile_count += 1
92
92
  stream_command = [
93
93
  "stream",
94
94
  "-storage-type #{storage_type}",
95
95
  "-map #{imap}",
96
96
  filename,
97
- tempfile,
97
+ "-",
98
98
  "2>/dev/null"
99
99
  ].join(" ")
100
100
  begin
101
- system stream_command
102
- return open(tempfile) { |io|
101
+ return IO.popen(stream_command) { |io|
103
102
  if imap.size == 1
104
103
  CArray.new(data_type, [height, width]).load_binary(io)
105
104
  else
@@ -109,9 +108,9 @@ class CArray
109
108
  rescue
110
109
  raise "ImageMagick's stream command failed to read image file '#{filename}'"
111
110
  ensure
112
- if File.exist?(tempfile)
113
- File.unlink(tempfile)
114
- end
111
+ # if File.exist?(tempfile)
112
+ # File.unlink(tempfile)
113
+ # end
115
114
  end
116
115
  end
117
116
 
@@ -171,7 +170,7 @@ class CArray
171
170
  depth = "-depth 8"
172
171
  end
173
172
  convert_command = [
174
- "convert",
173
+ "magick convert",
175
174
  depth,
176
175
  "-size " + [dim1, dim0].join("x"),
177
176
  quantum_format,
data/lib/carray/mkmf.rb CHANGED
@@ -112,6 +112,7 @@ def possible_prefix (*postfixes)
112
112
  File.expand_path("~/local"), ### user's home / local
113
113
  File.expand_path("~"), ### user's home
114
114
  "/opt/local", ### MacPorts
115
+ "/opt/homebrew", ### Homebrew
115
116
  "/opt", ### UNIX
116
117
  "/sw/local", ### Mac Fink
117
118
  "/sw/", ### Mac Fink
data/lib/carray/time.rb CHANGED
@@ -53,7 +53,7 @@ class CArray
53
53
  end
54
54
 
55
55
  def time_minute
56
- return convert(:int, &:minute)
56
+ return convert(:int, &:min)
57
57
  end
58
58
 
59
59
  def time_second
@@ -0,0 +1,46 @@
1
+ require_relative "../../lib/carray"
2
+ #require_relative "../../ext/carray_ext"
3
+
4
+ class CArray
5
+
6
+ def count_masked (*axis)
7
+ p "rw"
8
+ if has_mask?
9
+ p "rb"
10
+ p self.class
11
+ p self.mask.ndim
12
+ p "rk"
13
+ # j=self.mask
14
+ p "rj"
15
+ #p mask.int64
16
+ #return mask.int64.accumulate(*axis)
17
+ else
18
+ if axis.empty?
19
+ return 0
20
+ else
21
+ spec = shape.map{:i}
22
+ axis.each do |k|
23
+ spec[k] = nil
24
+ end
25
+ return self[*spec].ca.template(:int64) { 0 }
26
+ end
27
+ end
28
+ end
29
+
30
+ end
31
+ a = CArray.int(3).seq!
32
+ a[1] = UNDEF
33
+ r1 = a[3,:%]
34
+ x1 = r1.to_ca
35
+ 3 == x1.count_masked
36
+ p "ro"
37
+ #is_asserted_by { 3 == r1[nil, 1].count_masked }
38
+ #is_asserted_by { 3 == x1.count_masked }
39
+ #is_asserted_by { 3 == x1[nil, 1].count_masked }
40
+
41
+ #r2 = a[:%,3]
42
+ #x2 = r2.to_ca
43
+ #is_asserted_by { 3 == r2.count_masked }
44
+ #is_asserted_by { 3 == r2[1, nil].count_masked }
45
+ #is_asserted_by { 3 == x2.count_masked }
46
+ #is_asserted_by { 3 == x2[1, nil].count_masked }
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carray
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.9
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroki Motoyoshi
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-06-19 00:00:00.000000000 Z
10
+ date: 2025-06-03 00:00:00.000000000 Z
12
11
  dependencies: []
13
12
  description: |2
14
13
  Ruby/CArray is an extension library for the multi-dimensional numerical array
@@ -154,6 +153,7 @@ files:
154
153
  - spec/Classes/CAWrap_spec.rb
155
154
  - spec/Classes/CArray_spec.rb
156
155
  - spec/Classes/CScalar_spec.rb
156
+ - spec/Classes/ex1.rb
157
157
  - spec/Features/feature_130_spec.rb
158
158
  - spec/Features/feature_attributes_spec.rb
159
159
  - spec/Features/feature_boolean_spec.rb
@@ -207,7 +207,6 @@ homepage: https://github.com/himotoyoshi/carray
207
207
  licenses:
208
208
  - MIT
209
209
  metadata: {}
210
- post_install_message:
211
210
  rdoc_options: []
212
211
  require_paths:
213
212
  - lib
@@ -222,8 +221,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
221
  - !ruby/object:Gem::Version
223
222
  version: '0'
224
223
  requirements: []
225
- rubygems_version: 3.1.6
226
- signing_key:
224
+ rubygems_version: 3.6.2
227
225
  specification_version: 4
228
226
  summary: Multi-dimesional array class for Ruby
229
227
  test_files: []