jl4rb 0.2.7 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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