jl4rb 0.2.7 → 0.3.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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/ext/jl4rb/jl4rb.c +35 -11
  3. data/jl4rb.gemspec +2 -2
  4. metadata +3 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 39f1e776734ecde25df8d6e3ee1b91bc1ec602f80ea71c50f234fbb1797b7e3d
4
- data.tar.gz: f8615146a175bb910d3979945ac61d4e52cee03728489a80a19a3575df08e623
3
+ metadata.gz: b5dfcf11641758e08d73345c51fce1f7f34286746cc0559566b2344479169ea4
4
+ data.tar.gz: 917e248ff6e0444a15c4307f44a9b7299455d0776927ecadeeea5887c5cd11a5
5
5
  SHA512:
6
- metadata.gz: 86ebed5c572ca81c4a7359f65267de8d70aa35898cf299b448d5a29dc2be120a5e92ce3c3e077d8af585225a0e77901224a8283bed4b13422ad92eaada5d8e3f
7
- data.tar.gz: 76a7c658e9c74ac599cad5a53bf80a9b165ce5915eeac9eda0537c243bcdfad1d8d9e63e4be618cb1e7576b82b0b94568a74ad73bf9ff64c14b078d112ce8ab1
6
+ metadata.gz: bc9bcbd2c1fdef4421a6ec44bcc12f6139dda57784a12574f2396aba1419e77751be7f2fe77e678ea0ce391df9351adfefa983fc98ed95fbe730f987761ef455
7
+ data.tar.gz: 9dcb4bda5973938c76161d1a25613be1ebbfe9354745741bb14c12759915e50e8538af07039bc4f3927339fe2f12f9a6ae4ffd1e4ced65e8849e0e042e823959
data/ext/jl4rb/jl4rb.c CHANGED
@@ -23,7 +23,7 @@
23
23
  #undef NOINLINE
24
24
  #include "julia.h"
25
25
 
26
- #define length(a) jl_array_size(a,0)
26
+ #define length(a) jl_array_dim(a,0)
27
27
 
28
28
  /************* INIT *********************/
29
29
 
@@ -42,13 +42,29 @@ VALUE Julia_exit(VALUE obj, VALUE exitcode) {
42
42
  return Qtrue;
43
43
  }
44
44
 
45
+ // int Rulia_subtype(jl_value_t *jlv, char* typ) {
46
+ // jl_value_t *jl_typ=NULL;
47
+ // int res;
48
+
49
+ // JL_GC_PUSH1(&jl_typ);
50
+ // jl_typ = jl_eval_string(typ);
51
+ // res = jl_subtype(jlv,jl_typ);
52
+ // JL_GC_POP();
53
+ // return res;
54
+ // }
55
+
45
56
  //Maybe try to use cpp stuff to get the output inside julia system (ccall,cgen and cgutils)
46
57
  //-| TODO: after adding in the jlapi.c jl_is_<C_type> functions replace the strcmp!
47
58
  VALUE jl_value_to_VALUE(jl_value_t *res) {
48
59
  size_t i=0,k,nd,d;
49
60
  VALUE resRb;
50
- jl_value_t *tmp;
51
- jl_function_t *call;
61
+ jl_value_t *tmp, *res_elt;
62
+ jl_function_t *call, *getindex;
63
+ // double* xDataD;
64
+ // int* xDataL;
65
+ // uint8_t* xDataB;
66
+ // jl_value_t** xData;
67
+
52
68
 
53
69
  if(res!=NULL) { //=> get a result
54
70
  //printf("typeof=%s\n",jl_typeof_str(res));
@@ -117,14 +133,17 @@ VALUE jl_value_to_VALUE(jl_value_t *res) {
117
133
  if(strcmp(jl_typeof_str(res),"Array")==0 )
118
134
  //if(jl_is_array(res))
119
135
  {
136
+ getindex = jl_get_function(jl_main_module, "getindex");
120
137
  nd = jl_array_rank(res);
121
138
  //printf("array_ndims=%d\n",(int)nd);
122
139
  if(nd==1) {//Vector
123
- d = jl_array_size(res, 0);
140
+ d = jl_array_dim(res, 0);
124
141
  //printf("array_dim[1]=%d\n",(int)d);
125
142
  resRb = rb_ary_new2(d);
126
143
  for(i=0;i<d;i++) {
127
- rb_ary_store(resRb,i,jl_value_to_VALUE(jl_arrayref((jl_array_t *)res,i)));
144
+ res_elt = jl_call2(getindex, res, jl_box_long(i+1));
145
+ rb_ary_store(resRb,i,jl_value_to_VALUE(res_elt));
146
+ // rb_ary_store(resRb,i,jl_value_to_VALUE(jl_arrayref((jl_array_t *)res,i)));
128
147
  }
129
148
  return resRb;
130
149
  }
@@ -285,6 +304,7 @@ jl_value_t* util_VALUE_to_jl_value(VALUE arr)
285
304
  jl_value_t *ans,*elt,*array_type;
286
305
  VALUE res,class,tmp;
287
306
  int i,n=0,vect=1;
307
+ jl_function_t *setindex;
288
308
 
289
309
  if(!rb_obj_is_kind_of(arr,rb_cArray)) {
290
310
  n=1;
@@ -297,14 +317,15 @@ jl_value_t* util_VALUE_to_jl_value(VALUE arr)
297
317
  }
298
318
 
299
319
  class=rb_class_of(rb_ary_entry(arr,0));
300
-
320
+ setindex = jl_get_function(jl_main_module, "setindex!");
301
321
  if(class==rb_cFloat) {
302
322
  //-| This is maybe faster and can be developped in julia-api as jl_vector_float64(n) for example.
303
323
  array_type=jl_apply_array_type((jl_value_t*)jl_float64_type, 1);
304
324
  ans=(jl_value_t*)jl_alloc_array_1d(array_type,n);
305
325
  for(i=0;i<n;i++) {
306
326
  elt=jl_box_float64(NUM2DBL(rb_ary_entry(arr,i)));
307
- jl_arrayset((jl_array_t*)ans,elt,i);
327
+ jl_call3(setindex, ans, elt, jl_box_long(i+1));
328
+ //jl_arrayset((jl_array_t*)ans,elt,i);
308
329
  }
309
330
  #if RUBY_API_VERSION_CODE >= 20400
310
331
  } else if(class==rb_cInteger) {
@@ -315,14 +336,16 @@ jl_value_t* util_VALUE_to_jl_value(VALUE arr)
315
336
  ans=(jl_value_t*)jl_alloc_array_1d(array_type,n);
316
337
  for(i=0;i<n;i++) {
317
338
  elt=jl_box_long(NUM2INT(rb_ary_entry(arr,i)));
318
- jl_arrayset((jl_array_t*)ans,elt,i);
339
+ jl_call3(setindex, ans, elt, jl_box_long(i+1));
340
+ //jl_arrayset((jl_array_t*)ans,elt,i);
319
341
  }
320
342
  } else if(class==rb_cTrueClass || class==rb_cFalseClass) {
321
343
  array_type=jl_apply_array_type((jl_value_t*)jl_bool_type, 1);
322
344
  ans=(jl_value_t*)jl_alloc_array_1d(array_type,n);
323
345
  for(i=0;i<n;i++) {
324
346
  elt=jl_box_bool(rb_class_of(rb_ary_entry(arr,i))==rb_cFalseClass ? 0 : 1);
325
- jl_arrayset((jl_array_t*)ans,elt,i);
347
+ jl_call3(setindex, ans, elt, jl_box_long(i+1));
348
+ //jl_arrayset((jl_array_t*)ans,elt,i);
326
349
  }
327
350
  } else if(class==rb_cString) {
328
351
  array_type=jl_apply_array_type((jl_value_t*)jl_string_type, 1);
@@ -330,10 +353,11 @@ jl_value_t* util_VALUE_to_jl_value(VALUE arr)
330
353
  for(i=0;i<n;i++) {
331
354
  tmp=rb_ary_entry(arr,i);
332
355
  elt=jl_cstr_to_string(StringValuePtr(tmp));
333
- jl_arrayset((jl_array_t*)ans,elt,i);
356
+ jl_call3(setindex, ans, elt, jl_box_long(i+1));
357
+ //jl_arrayset((jl_array_t*)ans,elt,i);
334
358
  }
335
359
  } else ans=NULL;
336
- if(!vect && ans) ans=jl_arrayref((jl_array_t*)ans,0);
360
+ if(!vect && ans) ans=NULL;//jl_arrayref((jl_array_t*)ans,0);
337
361
  return ans;
338
362
  }
339
363
 
data/jl4rb.gemspec CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rubygems/package_task'
3
3
 
4
4
  PKG_NAME='jl4rb'
5
- PKG_VERSION='0.2.7'
5
+ PKG_VERSION='0.3.0'
6
6
  PKG_FILES=FileList[
7
7
  'Rakefile','jl4rb.gemspec',
8
8
  'ext/jl4rb/*.c',
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.require_paths = ["lib","ext/jl4rb"]
23
23
  s.files = PKG_FILES.to_a
24
24
  s.extensions = ["ext/jl4rb/extconf.rb"]
25
- s.licenses = ['MIT', 'GPL-2.0']
25
+ s.licenses = ['MIT']
26
26
  s.description = <<-EOF
27
27
  R is embedded in ruby with some communication support .
28
28
  EOF
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jl4rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - CQLS
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-25 00:00:00.000000000 Z
11
+ date: 2024-10-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 'R is embedded in ruby with some communication support .
14
14
 
@@ -33,7 +33,6 @@ files:
33
33
  homepage: http://cqls.upmf-grenoble.fr
34
34
  licenses:
35
35
  - MIT
36
- - GPL-2.0
37
36
  metadata: {}
38
37
  post_install_message:
39
38
  rdoc_options: []
@@ -52,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
52
51
  version: '0'
53
52
  requirements:
54
53
  - none
55
- rubygems_version: 3.4.5
54
+ rubygems_version: 3.5.20
56
55
  signing_key:
57
56
  specification_version: 4
58
57
  summary: Julia for ruby