carray 2.0.1 → 3.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 (339) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +5 -25
  3. data/CHANGELOG.md +16 -0
  4. data/LICENSE +1 -1
  5. data/NEWS.md +3 -0
  6. data/README.md +128 -44
  7. data/carray.gemspec +22 -24
  8. data/ext/ca_array_pool.c +91 -0
  9. data/ext/ca_axis_descriptor.h +186 -0
  10. data/ext/ca_axis_dispatch.c +924 -0
  11. data/ext/ca_axis_group.c +1208 -0
  12. data/ext/ca_bincmp_dispatch.c +76 -0
  13. data/ext/ca_bincmp_dispatch.h +85 -0
  14. data/ext/ca_binop_dispatch.c +125 -0
  15. data/ext/ca_binop_dispatch.h +159 -0
  16. data/ext/ca_categorical_iterator.c +1375 -0
  17. data/ext/ca_compare.c +94 -0
  18. data/ext/ca_compare.h +26 -0
  19. data/ext/ca_composite_dispatch.c +414 -0
  20. data/ext/ca_composite_dispatch.h +116 -0
  21. data/ext/ca_for_buffer.h +96 -0
  22. data/ext/ca_for_each_element.h +241 -0
  23. data/ext/ca_group_iter.c +304 -0
  24. data/ext/ca_iter_substrate.h +325 -0
  25. data/ext/ca_kernel_iterator.c +4321 -0
  26. data/ext/ca_kernel_iterator.h +2603 -0
  27. data/ext/ca_moncmp_dispatch.c +37 -0
  28. data/ext/ca_moncmp_dispatch.h +62 -0
  29. data/ext/ca_monop_dispatch.c +200 -0
  30. data/ext/ca_monop_dispatch.h +235 -0
  31. data/ext/ca_obj_array.c +355 -359
  32. data/ext/ca_obj_bincmp.c +809 -0
  33. data/ext/ca_obj_binop.c +892 -0
  34. data/ext/ca_obj_bitarray.c +369 -164
  35. data/ext/ca_obj_bitfield.c +294 -234
  36. data/ext/ca_obj_block.c +189 -711
  37. data/ext/ca_obj_byte_swap.c +766 -0
  38. data/ext/ca_obj_const_string.c +965 -0
  39. data/ext/ca_obj_face.c +670 -0
  40. data/ext/ca_obj_face.h +247 -0
  41. data/ext/ca_obj_fake.c +228 -100
  42. data/ext/ca_obj_farray.c +54 -441
  43. data/ext/ca_obj_field.c +82 -529
  44. data/ext/ca_obj_fixlen_string.c +306 -0
  45. data/ext/ca_obj_grid.c +858 -440
  46. data/ext/ca_obj_meld.c +1034 -0
  47. data/ext/ca_obj_moncmp.c +569 -0
  48. data/ext/ca_obj_monop.c +1111 -0
  49. data/ext/ca_obj_object.c +772 -297
  50. data/ext/ca_obj_record.c +468 -0
  51. data/ext/ca_obj_reduce.c +97 -82
  52. data/ext/ca_obj_refer.c +569 -459
  53. data/ext/ca_obj_remap.c +475 -0
  54. data/ext/ca_obj_repeat.c +92 -477
  55. data/ext/ca_obj_roll.c +616 -0
  56. data/ext/ca_obj_select.c +344 -296
  57. data/ext/ca_obj_select_axis.c +1296 -0
  58. data/ext/ca_obj_shift.c +229 -791
  59. data/ext/ca_obj_source.c +78 -0
  60. data/ext/ca_obj_stack.c +1173 -0
  61. data/ext/ca_obj_stride.c +2501 -0
  62. data/ext/ca_obj_string.c +268 -0
  63. data/ext/ca_obj_tile.c +614 -0
  64. data/ext/ca_obj_time.c +546 -0
  65. data/ext/ca_obj_timedelta.c +435 -0
  66. data/ext/ca_obj_transpose.c +62 -516
  67. data/ext/ca_obj_triop.c +746 -0
  68. data/ext/ca_obj_unbound_repeat.c +207 -240
  69. data/ext/ca_obj_window.c +1131 -563
  70. data/ext/ca_op_byte_swap.c +175 -0
  71. data/ext/ca_op_ipower.c +319 -0
  72. data/ext/ca_op_powi.h +88 -0
  73. data/ext/ca_sort_kernels.h +132 -0
  74. data/ext/ca_sweep_engine.c +430 -0
  75. data/ext/ca_sweep_engine.h +157 -0
  76. data/ext/ca_transform_common.c +228 -0
  77. data/ext/ca_triop_dispatch.c +55 -0
  78. data/ext/ca_triop_dispatch.h +62 -0
  79. data/ext/carray.h +795 -402
  80. data/ext/carray_access.c +831 -711
  81. data/ext/carray_attribute.c +98 -329
  82. data/ext/carray_bincount.c +255 -0
  83. data/ext/carray_broadcast.c +283 -0
  84. data/ext/carray_call_cfunc.c +1360 -828
  85. data/ext/carray_call_cfunc.h +160 -0
  86. data/ext/carray_cast.c +1212 -301
  87. data/ext/carray_cast_func.rb +81 -40
  88. data/ext/carray_class.c +53 -63
  89. data/ext/carray_config.h +28 -0
  90. data/ext/carray_conversion.c +350 -346
  91. data/ext/carray_copy.c +156 -268
  92. data/ext/carray_core.c +1341 -198
  93. data/ext/carray_count.c +312 -0
  94. data/ext/carray_data_type.c +43 -19
  95. data/ext/carray_element.c +585 -213
  96. data/ext/carray_factorize.c +2542 -0
  97. data/ext/carray_generate.c +230 -559
  98. data/ext/carray_histogram.c +490 -0
  99. data/ext/carray_hold.c +228 -0
  100. data/ext/carray_index_classifier.c +1035 -0
  101. data/ext/carray_index_classifier.h +27 -0
  102. data/ext/carray_internal.h +120 -0
  103. data/ext/carray_kernels_bincmp.c +4445 -0
  104. data/ext/carray_kernels_binop.c +10979 -0
  105. data/ext/carray_kernels_init.c +36 -0
  106. data/ext/carray_kernels_map.c +3466 -0
  107. data/ext/carray_kernels_moncmp.c +2096 -0
  108. data/ext/carray_kernels_monop.c +18312 -0
  109. data/ext/carray_kernels_reduce_aggregate.c +25836 -0
  110. data/ext/carray_kernels_reduce_boolean.c +329 -0
  111. data/ext/carray_kernels_reduce_cumulative.c +14592 -0
  112. data/ext/carray_kernels_reduce_extreme.c +16947 -0
  113. data/ext/carray_kernels_reduce_variance.c +3909 -0
  114. data/ext/carray_kernels_scan.c +3692 -0
  115. data/ext/carray_kernels_search.c +32137 -0
  116. data/ext/carray_kernels_sort.c +10625 -0
  117. data/ext/carray_kernels_triop.c +1391 -0
  118. data/ext/carray_lazy.c +567 -0
  119. data/ext/carray_loop.c +88 -200
  120. data/ext/carray_mask.c +848 -154
  121. data/ext/carray_math_kernel.h +120 -0
  122. data/ext/carray_mathfunc.c +10 -241
  123. data/ext/carray_median_percentile.c +1257 -0
  124. data/ext/carray_memory_view.c +1625 -0
  125. data/ext/carray_operator.c +1526 -318
  126. data/ext/carray_order.c +664 -1394
  127. data/ext/carray_partition.c +416 -0
  128. data/ext/carray_random.c +518 -0
  129. data/ext/carray_scatter.c +357 -0
  130. data/ext/carray_slab.c +1219 -0
  131. data/ext/carray_slab.h +84 -0
  132. data/ext/carray_sort.c +829 -0
  133. data/ext/carray_sort_kernel.c +620 -0
  134. data/ext/carray_struct.c +695 -0
  135. data/ext/carray_test.c +343 -229
  136. data/ext/carray_undef.c +34 -17
  137. data/ext/carray_utils.c +175 -74
  138. data/ext/extconf.rb +216 -55
  139. data/ext/mk_call_cfunc.rb +480 -0
  140. data/ext/mkkernel.rb +8842 -0
  141. data/ext/ruby_carray.c +202 -101
  142. data/ext/version.h +5 -15
  143. data/ext/version.rb +5 -13
  144. data/lib/carray/arrow_tensor.rb +401 -0
  145. data/lib/carray/attribute.rb +166 -0
  146. data/lib/carray/autoload_carray.rb +220 -0
  147. data/lib/carray/autoload_method_extension.rb +44 -0
  148. data/lib/carray/axis_group.rb +711 -0
  149. data/lib/carray/basics.rb +481 -0
  150. data/lib/carray/bincount_nd.rb +358 -0
  151. data/lib/carray/block_iterator.rb +604 -0
  152. data/lib/carray/boolean_reduce.rb +109 -0
  153. data/lib/carray/categorical.rb +561 -0
  154. data/lib/carray/categorical_iterator.rb +1062 -0
  155. data/lib/carray/complex.rb +150 -0
  156. data/lib/carray/conditional.rb +216 -0
  157. data/lib/carray/const_string.rb +228 -0
  158. data/lib/carray/construct.rb +139 -328
  159. data/lib/carray/core_extensions.rb +240 -0
  160. data/lib/carray/data_type_extension.rb +233 -0
  161. data/lib/carray/fixlen_string.rb +95 -0
  162. data/lib/carray/frame/concat.rb +132 -0
  163. data/lib/carray/frame/convert.rb +95 -0
  164. data/lib/carray/frame/csv_parser.rb +211 -0
  165. data/lib/carray/frame/frame.rb +649 -0
  166. data/lib/carray/frame/group.rb +186 -0
  167. data/lib/carray/frame/io.rb +164 -0
  168. data/lib/carray/frame/join.rb +248 -0
  169. data/lib/carray/frame/records.rb +99 -0
  170. data/lib/carray/frame/sort.rb +113 -0
  171. data/lib/carray/frame/verbs.rb +299 -0
  172. data/lib/carray/frame.rb +16 -0
  173. data/lib/carray/histogram.rb +512 -0
  174. data/lib/carray/inspect.rb +37 -20
  175. data/lib/carray/iterator.rb +57 -349
  176. data/lib/carray/lazy.rb +889 -0
  177. data/lib/carray/mask_gap_fill.rb +200 -0
  178. data/lib/carray/math.rb +78 -342
  179. data/lib/carray/meld_reduce.rb +289 -0
  180. data/lib/carray/methods/align_addr.rb +116 -0
  181. data/lib/carray/methods/bin.rb +128 -0
  182. data/lib/carray/methods/bincount.rb +87 -0
  183. data/lib/carray/methods/bit_string.rb +92 -0
  184. data/lib/carray/methods/broadcast.rb +63 -0
  185. data/lib/carray/methods/choose.rb +39 -0
  186. data/lib/carray/methods/composition.rb +280 -0
  187. data/lib/carray/methods/gather_nd.rb +206 -0
  188. data/lib/carray/methods/index.rb +39 -0
  189. data/lib/carray/methods/insert_block.rb +99 -0
  190. data/lib/carray/methods/is_in.rb +141 -0
  191. data/lib/carray/methods/join.rb +90 -0
  192. data/lib/carray/methods/locate_addr.rb +47 -0
  193. data/lib/carray/methods/mask_duplicates.rb +41 -0
  194. data/lib/carray/methods/meshgrid.rb +91 -0
  195. data/lib/carray/methods/mode.rb +126 -0
  196. data/lib/carray/methods/nunique.rb +46 -0
  197. data/lib/carray/methods/resize.rb +56 -0
  198. data/lib/carray/methods/snap.rb +156 -0
  199. data/lib/carray/methods/string_format.rb +57 -0
  200. data/lib/carray/methods/unique.rb +47 -0
  201. data/lib/carray/methods/value_counts.rb +71 -0
  202. data/lib/carray/mkmf.rb +124 -101
  203. data/lib/carray/runtime.rb +108 -0
  204. data/lib/carray/serialize.rb +478 -167
  205. data/lib/carray/slab_iterator.rb +292 -0
  206. data/lib/carray/stack.rb +291 -0
  207. data/lib/carray/string.rb +56 -180
  208. data/lib/carray/string_operation_extension.rb +289 -0
  209. data/lib/carray/struct.rb +335 -323
  210. data/lib/carray/struct_builder.rb +697 -0
  211. data/lib/carray/table.rb +41 -2
  212. data/lib/carray/time.rb +2255 -38
  213. data/lib/carray/window_iterator.rb +655 -0
  214. data/lib/carray.rb +55 -57
  215. metadata +163 -130
  216. data/Rakefile +0 -51
  217. data/TODO.md +0 -18
  218. data/ext/ca_iter_block.c +0 -257
  219. data/ext/ca_iter_dimension.c +0 -299
  220. data/ext/ca_iter_window.c +0 -214
  221. data/ext/ca_obj_mapping.c +0 -644
  222. data/ext/carray_iterator.c +0 -641
  223. data/ext/carray_math.rb +0 -850
  224. data/ext/carray_numeric.c +0 -259
  225. data/ext/carray_sort_addr.c +0 -254
  226. data/ext/carray_stat.c +0 -2100
  227. data/ext/carray_stat_proc.rb +0 -1999
  228. data/ext/mkmath.rb +0 -741
  229. data/ext/ruby_ccomplex.c +0 -509
  230. data/ext/ruby_float_func.c +0 -86
  231. data/lib/carray/array.rb +0 -8
  232. data/lib/carray/autoload/autoload_base.rb +0 -19
  233. data/lib/carray/autoload/autoload_gem_cairo.rb +0 -9
  234. data/lib/carray/autoload/autoload_gem_ffi.rb +0 -9
  235. data/lib/carray/autoload/autoload_gem_gnuplot.rb +0 -2
  236. data/lib/carray/autoload/autoload_gem_io_csv.rb +0 -14
  237. data/lib/carray/autoload/autoload_gem_io_pg.rb +0 -6
  238. data/lib/carray/autoload/autoload_gem_io_sqlite3.rb +0 -12
  239. data/lib/carray/autoload/autoload_gem_narray.rb +0 -10
  240. data/lib/carray/autoload/autoload_gem_numo_narray.rb +0 -15
  241. data/lib/carray/autoload/autoload_gem_opencv.rb +0 -16
  242. data/lib/carray/autoload/autoload_gem_random.rb +0 -8
  243. data/lib/carray/autoload/autoload_gem_rmagick.rb +0 -23
  244. data/lib/carray/autoload/autoload_gem_zimg.rb +0 -3
  245. data/lib/carray/autoload/autoload_io_imagemagick.rb +0 -6
  246. data/lib/carray/autoload/autoload_math_histogram.rb +0 -5
  247. data/lib/carray/autoload/autoload_math_recurrence.rb +0 -6
  248. data/lib/carray/autoload/autoload_object_iterator.rb +0 -1
  249. data/lib/carray/autoload/autoload_object_link.rb +0 -1
  250. data/lib/carray/autoload/autoload_object_pack.rb +0 -2
  251. data/lib/carray/autoload.rb +0 -141
  252. data/lib/carray/basic.rb +0 -191
  253. data/lib/carray/broadcast.rb +0 -101
  254. data/lib/carray/compose.rb +0 -315
  255. data/lib/carray/convert.rb +0 -115
  256. data/lib/carray/info.rb +0 -110
  257. data/lib/carray/io/imagemagick.rb +0 -235
  258. data/lib/carray/mask.rb +0 -102
  259. data/lib/carray/math/histogram.rb +0 -177
  260. data/lib/carray/math/recurrence.rb +0 -93
  261. data/lib/carray/object/ca_obj_iterator.rb +0 -50
  262. data/lib/carray/object/ca_obj_link.rb +0 -50
  263. data/lib/carray/object/ca_obj_pack.rb +0 -99
  264. data/lib/carray/obsolete.rb +0 -256
  265. data/lib/carray/ordering.rb +0 -181
  266. data/lib/carray/testing.rb +0 -51
  267. data/lib/carray/transform.rb +0 -109
  268. data/mailmap +0 -1
  269. data/misc/Methods.ja.md +0 -182
  270. data/misc/NOTE +0 -51
  271. data/spec/Classes/CABitfield_spec.rb +0 -58
  272. data/spec/Classes/CABlockIterator_spec.rb +0 -114
  273. data/spec/Classes/CABlock_spec.rb +0 -205
  274. data/spec/Classes/CAField_spec.rb +0 -39
  275. data/spec/Classes/CAGrid_spec.rb +0 -75
  276. data/spec/Classes/CAMap_spec.rb +0 -0
  277. data/spec/Classes/CAMapping_spec.rb +0 -105
  278. data/spec/Classes/CAObject_attribute_spec.rb +0 -33
  279. data/spec/Classes/CAObject_spec.rb +0 -33
  280. data/spec/Classes/CARefer_spec.rb +0 -93
  281. data/spec/Classes/CARepeat_spec.rb +0 -65
  282. data/spec/Classes/CASelect_spec.rb +0 -22
  283. data/spec/Classes/CAShift_spec.rb +0 -16
  284. data/spec/Classes/CAStruct_spec.rb +0 -71
  285. data/spec/Classes/CATranspose_spec.rb +0 -60
  286. data/spec/Classes/CAUnboudRepeat_spec.rb +0 -102
  287. data/spec/Classes/CAWindow_spec.rb +0 -54
  288. data/spec/Classes/CAWrap_spec.rb +0 -8
  289. data/spec/Classes/CArray_spec.rb +0 -184
  290. data/spec/Classes/CScalar_spec.rb +0 -55
  291. data/spec/Features/feature_130_spec.rb +0 -19
  292. data/spec/Features/feature_attributes_spec.rb +0 -280
  293. data/spec/Features/feature_boolean_spec.rb +0 -98
  294. data/spec/Features/feature_broadcast.rb +0 -116
  295. data/spec/Features/feature_cast_function.rb +0 -19
  296. data/spec/Features/feature_cast_spec.rb +0 -33
  297. data/spec/Features/feature_class_spec.rb +0 -84
  298. data/spec/Features/feature_complex_spec.rb +0 -42
  299. data/spec/Features/feature_composite_spec.rb +0 -124
  300. data/spec/Features/feature_convert_spec.rb +0 -46
  301. data/spec/Features/feature_copy_spec.rb +0 -123
  302. data/spec/Features/feature_creation_spec.rb +0 -84
  303. data/spec/Features/feature_element_spec.rb +0 -144
  304. data/spec/Features/feature_extream_spec.rb +0 -54
  305. data/spec/Features/feature_generate_spec.rb +0 -74
  306. data/spec/Features/feature_index_spec.rb +0 -69
  307. data/spec/Features/feature_mask_spec.rb +0 -580
  308. data/spec/Features/feature_math_spec.rb +0 -97
  309. data/spec/Features/feature_order_spec.rb +0 -146
  310. data/spec/Features/feature_ref_store_spec.rb +0 -209
  311. data/spec/Features/feature_serialization_spec.rb +0 -125
  312. data/spec/Features/feature_stat_spec.rb +0 -397
  313. data/spec/Features/feature_virtual_spec.rb +0 -48
  314. data/spec/Features/method_eq_spec.rb +0 -81
  315. data/spec/Features/method_is_nan_spec.rb +0 -12
  316. data/spec/Features/method_map_spec.rb +0 -54
  317. data/spec/Features/method_max_with.rb +0 -20
  318. data/spec/Features/method_min_with.rb +0 -19
  319. data/spec/Features/method_ne_spec.rb +0 -18
  320. data/spec/Features/method_project_spec.rb +0 -188
  321. data/spec/Features/method_ref_spec.rb +0 -27
  322. data/spec/Features/method_round_spec.rb +0 -11
  323. data/spec/Features/method_s_linspace_spec.rb +0 -48
  324. data/spec/Features/method_s_span_spec.rb +0 -14
  325. data/spec/Features/method_seq_spec.rb +0 -47
  326. data/spec/Features/method_sort_with.rb +0 -43
  327. data/spec/Features/method_sorted_with.rb +0 -29
  328. data/spec/Features/method_span_spec.rb +0 -42
  329. data/spec/Features/method_wrap_readonly_spec.rb +0 -43
  330. data/spec/UnitTest/test_CAVirtual.rb +0 -214
  331. data/spec/spec_all.rb +0 -10
  332. data/utils/ca_ase.rb +0 -21
  333. data/utils/ca_methods.rb +0 -15
  334. data/utils/cast_checker.rb +0 -30
  335. data/utils/convert_test.rb +0 -73
  336. data/utils/extract_yard.rb +0 -22
  337. data/utils/guess_shape.rb +0 -76
  338. data/utils/monkey_patch_methods.rb +0 -62
  339. data/utils/remove_resource_fork.sh +0 -5
@@ -1,25 +1,21 @@
1
1
  /* ---------------------------------------------------------------------------
2
2
 
3
- carray_attribute.c
3
+ Attribute and predicate accessors for CArray (obj_type / data_type
4
+ / ndim / shape / dim / bytes / elements + entity? / virtual? /
5
+ fixlen? / boolean? / read_only? / mask_array? / etc.) plus the
6
+ view-chain navigators parent / root_array / ancestors.
4
7
 
5
- This file is part of Ruby/CArray extension library.
6
-
7
- Copyright (C) 2005-2025 Hiroki Motoyoshi
8
+ The corresponding YARD documentation lives in
9
+ yard-stubs/carray_attribute.rb; this file carries only the
10
+ implementation.
8
11
 
9
12
  ---------------------------------------------------------------------------- */
10
13
 
11
14
  #include "carray.h"
15
+ #include "ca_obj_face.h" /* CA_OBJ_RECORD + rb_ca_record_get_data_class */
12
16
 
13
17
  /* ------------------------------------------------------------------- */
14
18
 
15
- /* @overload obj_type
16
-
17
- (Attribute)
18
- Returns the object type (e.g. CA_OBJ_ARRAY, CA_OBJ_BLOCK, ...).
19
- Since the object type can be known from the class of the object,
20
- this attribute methods is rarely used.
21
- */
22
-
23
19
  VALUE
24
20
  rb_ca_obj_type (VALUE self)
25
21
  {
@@ -28,26 +24,16 @@ rb_ca_obj_type (VALUE self)
28
24
  return INT2NUM(ca->obj_type);
29
25
  }
30
26
 
31
- /* @overload data_type
32
-
33
- (Attribute)
34
- Returns the data type of each element (e.g. CA_INT32, CA_FLOAT64, ...).
35
- */
36
-
37
27
  VALUE
38
28
  rb_ca_data_type (VALUE self)
39
29
  {
40
30
  CArray *ca;
41
31
  TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
42
- return INT2NUM(ca->data_type);
32
+ /* Return a Symbol via the pre-computed ID cache; the C internal
33
+ int8_t representation is unchanged. */
34
+ return ID2SYM(ca_data_type_sym[ca->data_type]);
43
35
  }
44
36
 
45
- /* @overload ndim
46
-
47
- (Attribute)
48
- Returns the number of dimensions (e.g. 1 for 1D array, 3 for 3D array, ...).
49
- */
50
-
51
37
  VALUE
52
38
  rb_ca_ndim (VALUE self)
53
39
  {
@@ -56,16 +42,6 @@ rb_ca_ndim (VALUE self)
56
42
  return INT2NUM(ca->ndim);
57
43
  }
58
44
 
59
- /* @overload bytes
60
-
61
- (Attribute)
62
- Returns the byte size of each element (e.g. 4 for CA_INT32, 8 for CA_FLOAT64).
63
- The byte size can be obtained using CArray.sizeof(data_type)
64
- for the numerical data types, but
65
- the byte size of fixed-length data type can be known
66
- only by this method.
67
- */
68
-
69
45
  VALUE
70
46
  rb_ca_bytes (VALUE self)
71
47
  {
@@ -74,11 +50,13 @@ rb_ca_bytes (VALUE self)
74
50
  return SIZE2NUM(ca->bytes);
75
51
  }
76
52
 
77
- /* @overload elements
78
-
79
- (Attribute)
80
- Returns the number of elements
81
- */
53
+ VALUE
54
+ rb_ca_flags (VALUE self)
55
+ {
56
+ CArray *ca;
57
+ TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
58
+ return INT2NUM(ca->flags);
59
+ }
82
60
 
83
61
  VALUE
84
62
  rb_ca_elements (VALUE self)
@@ -88,13 +66,6 @@ rb_ca_elements (VALUE self)
88
66
  return SIZE2NUM(ca->elements);
89
67
  }
90
68
 
91
- /* @overload dim
92
-
93
- (Attribute)
94
- Returns the Array object contains the dimensional shape of array
95
- (e.g. [2,3] for 2D 2x3 array, ...).
96
- */
97
-
98
69
  VALUE
99
70
  rb_ca_dim (VALUE self)
100
71
  {
@@ -109,13 +80,6 @@ rb_ca_dim (VALUE self)
109
80
  return dim;
110
81
  }
111
82
 
112
- /*
113
- @overload dim0
114
-
115
- (Attribute)
116
- Short-hand for "dim[0]"
117
- */
118
-
119
83
  VALUE
120
84
  rb_ca_dim0 (VALUE self)
121
85
  {
@@ -124,13 +88,6 @@ rb_ca_dim0 (VALUE self)
124
88
  return SIZE2NUM(ca->dim[0]);
125
89
  }
126
90
 
127
- /*
128
- @overload dim1
129
-
130
- (Attribute)
131
- Short-hand for "dim[1]"
132
- */
133
-
134
91
  VALUE
135
92
  rb_ca_dim1 (VALUE self)
136
93
  {
@@ -139,13 +96,6 @@ rb_ca_dim1 (VALUE self)
139
96
  return ( ca->ndim >= 2 ) ? SIZE2NUM(ca->dim[1]) : Qnil;
140
97
  }
141
98
 
142
- /*
143
- @overload dim2
144
-
145
- (Attribute)
146
- Short-hand for 'dim[2]'
147
- */
148
-
149
99
  VALUE
150
100
  rb_ca_dim2 (VALUE self)
151
101
  {
@@ -154,13 +104,6 @@ rb_ca_dim2 (VALUE self)
154
104
  return ( ca->ndim >= 3 ) ? SIZE2NUM(ca->dim[2]) : Qnil;
155
105
  }
156
106
 
157
- /*
158
- @overload dim3
159
-
160
- (Attribute)
161
- Short-hand for "dim[3]"
162
- */
163
-
164
107
  VALUE
165
108
  rb_ca_dim3 (VALUE self)
166
109
  {
@@ -169,12 +112,6 @@ rb_ca_dim3 (VALUE self)
169
112
  return ( ca->ndim >= 4 ) ? SIZE2NUM(ca->dim[3]) : Qnil;
170
113
  }
171
114
 
172
- /* @overload data_type_name
173
-
174
- (Attribute)
175
- Returns the string representaion of the data_type (e.g. "int32", "fixlen")
176
- */
177
-
178
115
  VALUE
179
116
  rb_ca_data_type_name (VALUE self)
180
117
  {
@@ -192,11 +129,6 @@ ca_is_scalar (void *ap)
192
129
  return ca_test_flag(ca, CA_FLAG_SCALAR);
193
130
  }
194
131
 
195
- /* @overload scalar?
196
-
197
- (Inquiry) Returns true if the object is a CScalar
198
- */
199
-
200
132
  VALUE
201
133
  rb_ca_is_scalar (VALUE self)
202
134
  {
@@ -205,8 +137,6 @@ rb_ca_is_scalar (VALUE self)
205
137
  return ( ca_is_scalar(ca) ) ? Qtrue : Qfalse;
206
138
  }
207
139
 
208
- /* api: rb_obj_is_cscalar */
209
-
210
140
  VALUE
211
141
  rb_obj_is_cscalar (VALUE obj)
212
142
  {
@@ -221,46 +151,30 @@ rb_obj_is_cscalar (VALUE obj)
221
151
  /* ------------------------------------------------------------------- */
222
152
 
223
153
  int
224
- ca_is_virtual (void *ap)
154
+ ca_is_view (void *ap)
225
155
  {
226
156
  CArray *ca = (CArray *) ap;
227
- return ( ca_func[ca->obj_type].entity_type == CA_VIRTUAL_ARRAY ) ? 1 : 0;
157
+ return ( ca_func[ca->obj_type].entity_type == CA_VIEW_ARRAY ) ? 1 : 0;
228
158
  }
229
159
 
230
- /* @overload entity?
231
-
232
- (Inquiry) Returns true if `self` is an entity array (not a virtual array).
233
- */
234
-
235
160
  VALUE
236
161
  rb_ca_is_entity (VALUE self)
237
162
  {
238
163
  CArray *ca;
239
164
  TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
240
- return ( ca_is_virtual(ca) ) ? Qfalse : Qtrue;
165
+ return ( ca_is_view(ca) ) ? Qfalse : Qtrue;
241
166
  }
242
167
 
243
- /*
244
- @overload virtual?
245
-
246
- (Inquiry) Returns true if `self` is a virtural array (not an entity array).
247
- */
248
-
249
168
  VALUE
250
169
  rb_ca_is_virtual (VALUE self)
251
170
  {
252
171
  CArray *ca;
253
172
  TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
254
- return ( ca_is_virtual(ca) ) ? Qtrue : Qfalse;
173
+ return ( ca_is_view(ca) ) ? Qtrue : Qfalse;
255
174
  }
256
175
 
257
176
  /* ------------------------------------------------------------------- */
258
177
 
259
- /* @overload attached?
260
-
261
- (Inquiry) Returns true if the object is attached.
262
- */
263
-
264
178
  VALUE
265
179
  rb_ca_is_attached (VALUE self)
266
180
  {
@@ -271,11 +185,6 @@ rb_ca_is_attached (VALUE self)
271
185
 
272
186
  /* ------------------------------------------------------------------- */
273
187
 
274
- /* @overload empty?
275
-
276
- (Inquiry) Returns true if the object is empty.
277
- */
278
-
279
188
  VALUE
280
189
  rb_ca_is_empty (VALUE self)
281
190
  {
@@ -293,9 +202,22 @@ ca_is_readonly (void *ap)
293
202
  if ( ca_test_flag(ca, CA_FLAG_READ_ONLY) ) { /* test -> true */
294
203
  return 1;
295
204
  }
205
+ else if ( ca_test_flag(ca, CA_FLAG_MULTI_PARENTS) ) {
206
+ /* multi-parent view: read-only iff ANY parent is (a whole-view write
207
+ cannot be honoured if any backing parent rejects writes). */
208
+ CAMultiParent *mp = (CAMultiParent *) ca;
209
+ int32_t k;
210
+ for ( k = 0; k < mp->n_parents; k++ ) {
211
+ if ( ca_is_readonly(mp->parents[k]) ) {
212
+ ca_set_flag(ca, CA_FLAG_READ_ONLY);
213
+ return 1;
214
+ }
215
+ }
216
+ return 0;
217
+ }
296
218
  else { /* test -> false */
297
- if ( ca_is_virtual(ca) && CAVIRTUAL(ca)->parent ) {
298
- if ( ca_is_readonly(CAVIRTUAL(ca)->parent) ) { /* test -> true */
219
+ if ( ca_is_view(ca) && CAVIEW(ca)->parent ) {
220
+ if ( ca_is_readonly(CAVIEW(ca)->parent) ) { /* test -> true */
299
221
  ca_set_flag(ca, CA_FLAG_READ_ONLY);
300
222
  return 1;
301
223
  }
@@ -304,11 +226,6 @@ ca_is_readonly (void *ap)
304
226
  }
305
227
  }
306
228
 
307
- /* @overload read_only?
308
-
309
- (Inquiry) Returns true if the object is read-only
310
- */
311
-
312
229
  VALUE
313
230
  rb_ca_is_read_only (VALUE self)
314
231
  {
@@ -327,8 +244,13 @@ ca_is_mask_array (void *ap)
327
244
  return 1;
328
245
  }
329
246
  else { /* test -> false */
330
- if ( ca_is_virtual(ca) && CAVIRTUAL(ca)->parent ) {
331
- if ( ca_is_mask_array(CAVIRTUAL(ca)->parent) ) { /* test -> true */
247
+ /* Identity property: a CAStack is not a mask array unless
248
+ flagged directly (the internal CAStackMask is). Do not
249
+ inherit the property across a multi-parent fan-out — stop at
250
+ the boundary. */
251
+ if ( ca_is_view(ca) && CAVIEW(ca)->parent
252
+ && ! ca_test_flag(ca, CA_FLAG_MULTI_PARENTS) ) {
253
+ if ( ca_is_mask_array(CAVIEW(ca)->parent) ) { /* test -> true */
332
254
  ca_set_flag(ca, CA_FLAG_MASK_ARRAY);
333
255
  return 1;
334
256
  }
@@ -337,11 +259,6 @@ ca_is_mask_array (void *ap)
337
259
  }
338
260
  }
339
261
 
340
- /* @overload mask_array?
341
-
342
- (Inquiry) Returns true if `self` is mask array (don't confuse with "masked array")
343
- */
344
-
345
262
  VALUE
346
263
  rb_ca_is_mask_array (VALUE self)
347
264
  {
@@ -360,8 +277,13 @@ ca_is_value_array (void *ap)
360
277
  return 1;
361
278
  }
362
279
  else { /* test -> false */
363
- if ( ca_is_virtual(ca) && CAVIRTUAL(ca)->parent ) {
364
- if ( ca_is_value_array(CAVIRTUAL(ca)->parent) ) { /* test -> true */
280
+ /* Identity property: a CAStack is never "the .value of" a
281
+ single array (s.value wraps it in a flagged CARefer). Do
282
+ not inherit across a multi-parent fan-out — stop at the
283
+ boundary. */
284
+ if ( ca_is_view(ca) && CAVIEW(ca)->parent
285
+ && ! ca_test_flag(ca, CA_FLAG_MULTI_PARENTS) ) {
286
+ if ( ca_is_value_array(CAVIEW(ca)->parent) ) { /* test -> true */
365
287
  ca_set_flag(ca, CA_FLAG_VALUE_ARRAY);
366
288
  return 1;
367
289
  }
@@ -370,11 +292,6 @@ ca_is_value_array (void *ap)
370
292
  }
371
293
  }
372
294
 
373
- /* @overload value_array?
374
-
375
- (Inquiry) Returns true if `self` is a value array
376
- */
377
-
378
295
  VALUE
379
296
  rb_ca_is_value_array (VALUE self)
380
297
  {
@@ -385,6 +302,16 @@ rb_ca_is_value_array (VALUE self)
385
302
 
386
303
  /* ------------------------------------------------------------------- */
387
304
 
305
+ VALUE
306
+ rb_ca_is_face (VALUE self)
307
+ {
308
+ CArray *ca;
309
+ TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
310
+ return ( ca_is_face(ca) ) ? Qtrue : Qfalse;
311
+ }
312
+
313
+ /* ------------------------------------------------------------------- */
314
+
388
315
  int
389
316
  ca_is_fixlen_type (void *ap)
390
317
  {
@@ -392,11 +319,6 @@ ca_is_fixlen_type (void *ap)
392
319
  return ( ca->data_type == CA_FIXLEN );
393
320
  }
394
321
 
395
- /* @overload fixlen?
396
-
397
- (Inquiry) Returns true if `self` is fixed-length type array
398
- */
399
-
400
322
  VALUE
401
323
  rb_ca_is_fixlen_type (VALUE self)
402
324
  {
@@ -414,11 +336,6 @@ ca_is_boolean_type (void *ap)
414
336
  return ( ca->data_type == CA_BOOLEAN );
415
337
  }
416
338
 
417
- /* @overload boolean?
418
-
419
- (Inquiry) Return true if `self` is boolean type array
420
- */
421
-
422
339
  VALUE
423
340
  rb_ca_is_boolean_type (VALUE self)
424
341
  {
@@ -437,11 +354,6 @@ ca_is_numeric_type (void *ap)
437
354
  ( ca->data_type <= CA_CMPLX256 ) );
438
355
  }
439
356
 
440
- /* @overload numeric?
441
-
442
- (Inquiry) Returns true if `self` is numeric type array
443
- */
444
-
445
357
  VALUE
446
358
  rb_ca_is_numeric_type (VALUE self)
447
359
  {
@@ -460,11 +372,6 @@ ca_is_integer_type (void *ap)
460
372
  ( ca->data_type <= CA_UINT64 ) );
461
373
  }
462
374
 
463
- /* @overload integer?
464
-
465
- (Inquiry) Returns true if `self` is integer type array
466
- */
467
-
468
375
  VALUE
469
376
  rb_ca_is_integer_type (VALUE self)
470
377
  {
@@ -475,36 +382,6 @@ rb_ca_is_integer_type (VALUE self)
475
382
 
476
383
  /* ------------------------------------------------------------------- */
477
384
 
478
- int
479
- ca_is_unsigned_type (void *ap)
480
- {
481
- CArray *ca = (CArray *) ap;
482
- switch ( ca->data_type ) {
483
- case CA_UINT8:
484
- case CA_UINT16:
485
- case CA_UINT32:
486
- case CA_UINT64:
487
- return 1;
488
- default:
489
- return 0;
490
- }
491
- }
492
-
493
- /* @overload unsigned?
494
-
495
- (Inquiry) Return true if `self` is unsigned integer type array
496
- */
497
-
498
- VALUE
499
- rb_ca_is_unsigned_type (VALUE self)
500
- {
501
- CArray *ca;
502
- TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
503
- return ca_is_unsigned_type(ca) ? Qtrue : Qfalse;
504
- }
505
-
506
- /* ------------------------------------------------------------------- */
507
-
508
385
  int
509
386
  ca_is_float_type (void *ap)
510
387
  {
@@ -513,11 +390,6 @@ ca_is_float_type (void *ap)
513
390
  ( ca->data_type <= CA_FLOAT128 ) );
514
391
  }
515
392
 
516
- /* @overload float?
517
-
518
- (Inquiry) Returns true if `self` is float type array
519
- */
520
-
521
393
  VALUE
522
394
  rb_ca_is_float_type (VALUE self)
523
395
  {
@@ -536,11 +408,6 @@ ca_is_complex_type (void *ap)
536
408
  ( ca->data_type <= CA_CMPLX256 ) );
537
409
  }
538
410
 
539
- /* @overload complex?
540
-
541
- (Inquiry) Returns true if `self` is complex type array
542
- */
543
-
544
411
  VALUE
545
412
  rb_ca_is_complex_type (VALUE self)
546
413
  {
@@ -558,11 +425,6 @@ ca_is_object_type (void *ap)
558
425
  return ( ca->data_type == CA_OBJECT );
559
426
  }
560
427
 
561
- /* @overload object?
562
-
563
- (Inquiry) Returns true if `self` is object type array
564
- */
565
-
566
428
  VALUE
567
429
  rb_ca_is_object_type (VALUE self)
568
430
  {
@@ -575,13 +437,6 @@ rb_ca_is_object_type (VALUE self)
575
437
 
576
438
  static ID id_parent;
577
439
 
578
- /* @overload parent
579
-
580
- (Attribute)
581
- Returns the parent carray if `self` has parent,
582
- or returns nil if `self` has no parent.
583
- */
584
-
585
440
  VALUE
586
441
  rb_ca_parent (VALUE self)
587
442
  {
@@ -600,128 +455,44 @@ rb_ca_set_parent (VALUE self, VALUE obj)
600
455
 
601
456
  /* ------------------------------------------------------------------- */
602
457
 
603
- static ID id_data_class;
604
-
605
- /* @overload data_class
606
-
607
- (Attribute)
608
- Returns data_class if `self` is fixed-length type and it
609
- has the data class.
610
- */
611
-
612
458
  VALUE
613
459
  rb_ca_data_class (VALUE self)
614
460
  {
615
- volatile VALUE parent, data_class;
616
461
  CArray *ca;
617
462
  TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
618
- if ( ca_test_flag(ca, CA_FLAG_NOT_DATA_CLASS) ) {
619
- return Qnil;
620
- }
621
- if ( ! ca_is_fixlen_type(ca) ) { /* not a fixlen array */
622
- ca_set_flag(ca, CA_FLAG_NOT_DATA_CLASS);
463
+ /* Only a Face carries data_class; a non-Face CArray is always
464
+ Qnil. CARecord stores it in its tail (reached directly via
465
+ obj_type, no Ruby roundtrip); numeric Faces such as
466
+ CATime / CATimedelta have no data_class. */
467
+ if ( ! ca_test_flag(ca, CA_FLAG_IS_FACE) ) {
623
468
  return Qnil;
624
469
  }
625
- data_class = rb_ivar_get(self, id_data_class);
626
- if ( ! NIL_P(data_class) ) {
627
- return data_class;
628
- }
629
- else {
630
- return Qnil;
631
- if ( ca_is_entity(ca) ) { /* no further parent */
632
- ca_set_flag(ca, CA_FLAG_NOT_DATA_CLASS);
633
- return Qnil;
634
- }
635
- else {
636
- parent = rb_ca_parent(self);
637
- if ( NIL_P(parent) ) { /* no parent */
638
- ca_set_flag(ca, CA_FLAG_NOT_DATA_CLASS);
639
- return Qnil;
640
- }
641
- else {
642
- CArray *cr;
643
- TypedData_Get_Struct(parent, CArray, &carray_data_type, cr);
644
- if ( cr->bytes != ca->bytes ) { /* byte size mismatch */
645
- ca_set_flag(ca, CA_FLAG_NOT_DATA_CLASS);
646
- return Qnil;
647
- }
648
- else {
649
- data_class = rb_ca_data_class(parent); /* parent's data class */
650
- if ( ! NIL_P(data_class) ) {
651
- return data_class;
652
- }
653
- else {
654
- ca_set_flag(ca, CA_FLAG_NOT_DATA_CLASS);
655
- return Qnil;
656
- }
657
- }
658
- }
659
- }
470
+ if ( ca->obj_type == CA_OBJ_RECORD ) {
471
+ return rb_ca_record_get_data_class(ca);
660
472
  }
473
+ return Qnil;
661
474
  }
662
475
 
663
- /* @overload has_data_class?
664
-
665
- (Inquiry) Returns true if `self` is fixed-length type and has the data class.
666
- */
667
-
668
476
  VALUE
669
477
  rb_ca_has_data_class (VALUE self)
670
478
  {
671
- CArray *ca;
672
- TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
673
- if ( ca_test_flag(ca, CA_FLAG_NOT_DATA_CLASS) ) {
674
- return Qfalse;
675
- }
676
- else {
677
- if ( ca_is_fixlen_type(ca) ) {
678
- if ( RTEST(rb_ca_data_class(self)) ) {
679
- return Qtrue;
680
- }
681
- }
682
- ca_set_flag(ca, CA_FLAG_NOT_DATA_CLASS);
683
- return Qfalse;
684
- }
479
+ return RTEST(rb_ca_data_class(self)) ? Qtrue : Qfalse;
685
480
  }
686
481
 
687
482
  /* ------------------------------------------------------------------- */
688
483
 
484
+ /* data_class= is defined but always raises. data_class now lives
485
+ on the Face (CARecord) tail; there is no way to attach one to a
486
+ non-Face CArray in-place. The setter is kept only so a call
487
+ surfaces the migration message rather than NoMethodError.
488
+ NORETURN: rb_raise never returns, so neither does this function. */
489
+ NORETURN(VALUE rb_ca_set_data_class(VALUE self, VALUE klass));
689
490
  VALUE
690
- rb_ca_data_type_inherit (VALUE self, VALUE other)
691
- {
692
- if ( RTEST(rb_ca_is_fixlen_type(self)) ) {
693
- VALUE data_class = rb_ca_data_class(other);
694
- if ( RTEST(data_class) ) {
695
- rb_ivar_set(self, rb_intern("member"), rb_hash_new());
696
- return rb_ivar_set(self, id_data_class, data_class);
697
- }
698
- }
699
- return Qnil;
700
- }
701
-
702
- VALUE
703
- rb_ca_data_type_import (VALUE self, VALUE data_type)
704
- {
705
- if ( RTEST(rb_ca_is_fixlen_type(self)) &&
706
- rb_obj_is_data_class(data_type) ) {
707
- rb_ivar_set(self, rb_intern("member"), rb_hash_new());
708
- return rb_ivar_set(self, id_data_class, data_type);
709
- }
710
- return Qnil;
711
- }
712
-
713
- static VALUE
714
491
  rb_ca_set_data_class (VALUE self, VALUE klass)
715
492
  {
716
- if ( RTEST(rb_ca_is_fixlen_type(self)) &&
717
- rb_obj_is_data_class(klass) ) {
718
- rb_ivar_set(self, rb_intern("member"), rb_hash_new());
719
- return rb_ivar_set(self, id_data_class, klass);
720
- }
721
- else {
722
- rb_raise(rb_eTypeError, "invalid data_class or self is not fixlen array.");
723
- }
724
- return Qnil;
493
+ rb_raise(rb_eArgError,
494
+ "CArray#data_class= was removed in 3.0. "
495
+ "Use `CARecord.new(klass, *shape)` or `CARecord.wrap(entity, klass)`.");
725
496
  }
726
497
 
727
498
  /* ------------------------------------------------------------------- */
@@ -733,8 +504,14 @@ ca_root_array (void *ap)
733
504
  if ( ca_is_entity(ca) ) {
734
505
  return ca;
735
506
  }
507
+ else if ( ca_test_flag(ca, CA_FLAG_MULTI_PARENTS) ) {
508
+ /* Multi-parent view fans out to K roots, so the single-
509
+ reference chain terminates here — the view itself is the
510
+ root boundary. */
511
+ return ca;
512
+ }
736
513
  else {
737
- CAVirtual *cr = (CAVirtual *)ca;
514
+ CAView *cr = (CAView *)ca;
738
515
  if ( ! cr->parent ) {
739
516
  return ca;
740
517
  }
@@ -744,12 +521,6 @@ ca_root_array (void *ap)
744
521
  }
745
522
  }
746
523
 
747
- /* @overload root_array
748
-
749
- (Attribute)
750
- Returns the object at the root of chain of reference.
751
- */
752
-
753
524
  static VALUE
754
525
  rb_ca_root_array (VALUE self)
755
526
  {
@@ -759,6 +530,9 @@ rb_ca_root_array (VALUE self)
759
530
  if ( ca_is_entity(ca) ) {
760
531
  return self;
761
532
  }
533
+ else if ( ca_test_flag(ca, CA_FLAG_MULTI_PARENTS) ) {
534
+ return self; /* Multi-parent: root boundary (fans out to K roots). */
535
+ }
762
536
  else {
763
537
  refary = rb_ca_parent(self);
764
538
  if ( NIL_P(refary) ) {
@@ -782,6 +556,9 @@ rb_ca_ancestors_loop (VALUE self, VALUE list)
782
556
  if ( ca_is_entity(ca) ) {
783
557
  return list;
784
558
  }
559
+ else if ( ca_test_flag(ca, CA_FLAG_MULTI_PARENTS) ) {
560
+ return list; /* Multi-parent: chain terminates here (fans out to K). */
561
+ }
785
562
  else {
786
563
  refary = rb_ca_parent(self);
787
564
  if ( rb_obj_is_carray(refary) ) {
@@ -793,18 +570,10 @@ rb_ca_ancestors_loop (VALUE self, VALUE list)
793
570
  }
794
571
  }
795
572
 
796
- /* @overload ancestors
797
-
798
- (Attribute)
799
- Returns the list of objects in the chain of reference.
800
- */
801
-
802
573
  static VALUE
803
574
  rb_ca_ancestors (VALUE self)
804
575
  {
805
576
  volatile VALUE list;
806
- CArray *ca;
807
- TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
808
577
  list = rb_ary_new();
809
578
  return rb_ca_ancestors_loop(self, list);
810
579
  }
@@ -812,17 +581,17 @@ rb_ca_ancestors (VALUE self)
812
581
  /* ------------------------------------------------------------------- */
813
582
 
814
583
  void
815
- Init_carray_attribute ()
584
+ Init_carray_attribute (void)
816
585
  {
817
586
  id_parent = rb_intern("parent");
818
- id_data_class = rb_intern("data_class");
819
587
 
820
588
  rb_define_method(rb_cCArray, "obj_type", rb_ca_obj_type, 0);
821
589
  rb_define_method(rb_cCArray, "data_type", rb_ca_data_type, 0);
822
590
  rb_define_method(rb_cCArray, "bytes", rb_ca_bytes, 0);
823
- rb_define_method(rb_cCArray, "ndim", rb_ca_ndim, 0);
824
- rb_define_method(rb_cCArray, "rank", rb_ca_ndim, 0); /* after carray-1.5.0 */
825
- rb_define_method(rb_cCArray, "shape", rb_ca_dim, 0); /* after carray-1.5.0 */
591
+ rb_define_method(rb_cCArray, "flags", rb_ca_flags, 0);
592
+ rb_define_method(rb_cCArray, "ndim", rb_ca_ndim, 0);
593
+ rb_define_method(rb_cCArray, "rank", rb_ca_ndim, 0);
594
+ rb_define_method(rb_cCArray, "shape", rb_ca_dim, 0);
826
595
  rb_define_method(rb_cCArray, "dim", rb_ca_dim, 0);
827
596
  rb_define_method(rb_cCArray, "dim0", rb_ca_dim0, 0);
828
597
  rb_define_method(rb_cCArray, "dim1", rb_ca_dim1, 0);
@@ -845,6 +614,7 @@ Init_carray_attribute ()
845
614
  rb_define_method(rb_cCArray, "virtual?", rb_ca_is_virtual, 0);
846
615
  rb_define_method(rb_cCArray, "value_array?", rb_ca_is_value_array, 0);
847
616
  rb_define_method(rb_cCArray, "mask_array?", rb_ca_is_mask_array, 0);
617
+ rb_define_method(rb_cCArray, "face?", rb_ca_is_face, 0);
848
618
 
849
619
  rb_define_method(rb_cCArray, "empty?", rb_ca_is_empty, 0);
850
620
  rb_define_method(rb_cCArray, "read_only?", rb_ca_is_read_only, 0);
@@ -856,7 +626,6 @@ Init_carray_attribute ()
856
626
  rb_define_method(rb_cCArray, "boolean?", rb_ca_is_boolean_type, 0);
857
627
  rb_define_method(rb_cCArray, "numeric?", rb_ca_is_numeric_type, 0);
858
628
  rb_define_method(rb_cCArray, "integer?", rb_ca_is_integer_type, 0);
859
- rb_define_method(rb_cCArray, "unsigned?", rb_ca_is_unsigned_type, 0);
860
629
  rb_define_method(rb_cCArray, "float?", rb_ca_is_float_type, 0);
861
630
  rb_define_method(rb_cCArray, "complex?", rb_ca_is_complex_type, 0);
862
631
  rb_define_method(rb_cCArray, "object?", rb_ca_is_object_type, 0);