numo-narray 0.9.0.1-x86-mingw32 → 0.9.0.3-x86-mingw32
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.
- checksums.yaml +4 -4
 - data/README.md +11 -7
 - data/Rakefile +21 -6
 - data/ext/numo/narray/array.c +3 -3
 - data/ext/numo/narray/data.c +102 -81
 - data/ext/numo/narray/depend.erb +9 -7
 - data/ext/numo/narray/extconf.rb +5 -24
 - data/ext/numo/narray/gen/cogen.rb +19 -4
 - data/ext/numo/narray/gen/def/bit.rb +31 -0
 - data/ext/numo/narray/gen/def/robject.rb +1 -1
 - data/ext/numo/narray/gen/dtype.erb.c +11 -257
 - data/ext/numo/narray/gen/spec.rb +294 -0
 - data/ext/numo/narray/gen/tmpl/aset.c +1 -1
 - data/ext/numo/narray/gen/tmpl/each_with_index.c +1 -1
 - data/ext/numo/narray/gen/tmpl/eye.c +5 -5
 - data/ext/numo/narray/gen/tmpl/logseq.c +82 -0
 - data/ext/numo/narray/gen/tmpl/map_with_index.c +1 -1
 - data/ext/numo/narray/gen/tmpl/rand.c +126 -5
 - data/ext/numo/narray/gen/tmpl/seq.c +43 -12
 - data/ext/numo/narray/gen/tmpl/store_bit.c +55 -0
 - data/ext/numo/narray/gen/tmpl_bit/allocate.c +28 -0
 - data/ext/numo/narray/gen/tmpl_bit/aref.c +53 -0
 - data/ext/numo/narray/gen/tmpl_bit/aset.c +63 -0
 - data/ext/numo/narray/gen/{tmpl/bit_binary.c → tmpl_bit/binary.c} +1 -1
 - data/ext/numo/narray/gen/{tmpl → tmpl_bit}/bit_count.c +5 -3
 - data/ext/numo/narray/gen/tmpl_bit/bit_reduce.c +128 -0
 - data/ext/numo/narray/gen/tmpl_bit/cast.c +37 -0
 - data/ext/numo/narray/gen/tmpl_bit/cast_array.c +80 -0
 - data/ext/numo/narray/gen/tmpl_bit/cast_numeric.c +22 -0
 - data/ext/numo/narray/gen/tmpl_bit/coerce_cast.c +8 -0
 - data/ext/numo/narray/gen/tmpl_bit/each.c +44 -0
 - data/ext/numo/narray/gen/tmpl_bit/each_with_index.c +66 -0
 - data/ext/numo/narray/gen/tmpl_bit/extract.c +25 -0
 - data/ext/numo/narray/gen/tmpl_bit/fill.c +65 -0
 - data/ext/numo/narray/gen/tmpl_bit/format.c +61 -0
 - data/ext/numo/narray/gen/tmpl_bit/format_to_a.c +48 -0
 - data/ext/numo/narray/gen/tmpl_bit/inspect.c +18 -0
 - data/ext/numo/narray/gen/tmpl_bit/map_with_index.c +94 -0
 - data/ext/numo/narray/gen/tmpl_bit/mask.c +117 -0
 - data/ext/numo/narray/gen/tmpl_bit/none_p.c +14 -0
 - data/ext/numo/narray/gen/tmpl_bit/store.c +32 -0
 - data/ext/numo/narray/gen/tmpl_bit/store_array.c +5 -0
 - data/ext/numo/narray/gen/tmpl_bit/store_bit.c +66 -0
 - data/ext/numo/narray/gen/tmpl_bit/store_from.c +56 -0
 - data/ext/numo/narray/gen/tmpl_bit/store_numeric.c +22 -0
 - data/ext/numo/narray/gen/tmpl_bit/to_a.c +43 -0
 - data/ext/numo/narray/gen/{tmpl/bit_unary.c → tmpl_bit/unary.c} +1 -1
 - data/ext/numo/narray/gen/tmpl_bit/where.c +102 -0
 - data/ext/numo/narray/gen/tmpl_bit/where2.c +37 -0
 - data/ext/numo/narray/index.c +9 -7
 - data/ext/numo/narray/math.c +6 -1
 - data/ext/numo/narray/narray.c +307 -103
 - data/ext/numo/narray/ndloop.c +21 -36
 - data/ext/numo/narray/numo/intern.h +3 -3
 - data/ext/numo/narray/numo/narray.h +5 -41
 - data/ext/numo/narray/numo/template.h +2 -2
 - data/ext/numo/narray/numo/types/bit.h +27 -13
 - data/ext/numo/narray/numo/types/complex.h +2 -2
 - data/ext/numo/narray/numo/types/complex_macro.h +19 -7
 - data/ext/numo/narray/numo/types/dcomplex.h +9 -0
 - data/ext/numo/narray/numo/types/dfloat.h +6 -0
 - data/ext/numo/narray/numo/types/float_macro.h +9 -2
 - data/ext/numo/narray/numo/types/int16.h +0 -1
 - data/ext/numo/narray/numo/types/int32.h +0 -1
 - data/ext/numo/narray/numo/types/int64.h +0 -1
 - data/ext/numo/narray/numo/types/int8.h +0 -1
 - data/ext/numo/narray/numo/types/int_macro.h +2 -1
 - data/ext/numo/narray/numo/types/robj_macro.h +9 -2
 - data/ext/numo/narray/numo/types/robject.h +6 -0
 - data/ext/numo/narray/numo/types/scomplex.h +9 -0
 - data/ext/numo/narray/numo/types/sfloat.h +6 -0
 - data/ext/numo/narray/numo/types/uint16.h +0 -1
 - data/ext/numo/narray/numo/types/uint32.h +0 -1
 - data/ext/numo/narray/numo/types/uint64.h +0 -1
 - data/ext/numo/narray/numo/types/uint8.h +0 -1
 - data/ext/numo/narray/numo/types/uint_macro.h +2 -1
 - data/ext/numo/narray/numo/types/xint_macro.h +6 -1
 - data/ext/numo/narray/rand.c +2 -2
 - data/ext/numo/narray/step.c +7 -7
 - data/ext/numo/narray/struct.c +11 -12
 - data/lib/2.0/numo/narray.so +0 -0
 - data/lib/2.1/numo/narray.so +0 -0
 - data/lib/2.2/numo/narray.so +0 -0
 - data/lib/2.3/numo/narray.so +0 -0
 - data/lib/2.4/numo/narray.so +0 -0
 - data/lib/erbpp.rb +6 -2
 - data/lib/erbpp/line_number.rb +1 -1
 - data/lib/erbpp/narray_def.rb +23 -19
 - data/numo-narray.gemspec +2 -2
 - metadata +45 -10
 - data/ext/numo/narray/gen/bit.erb.c +0 -811
 
    
        data/ext/numo/narray/ndloop.c
    CHANGED
    
    | 
         @@ -73,7 +73,7 @@ typedef struct NA_MD_LOOP { 
     | 
|
| 
       73 
73 
     | 
    
         | 
| 
       74 
74 
     | 
    
         
             
            #define NDL_READ 1
         
     | 
| 
       75 
75 
     | 
    
         
             
            #define NDL_WRITE 2
         
     | 
| 
       76 
     | 
    
         
            -
            #define NDL_READ_WRITE  
     | 
| 
      
 76 
     | 
    
         
            +
            #define NDL_READ_WRITE (NDL_READ|NDL_WRITE)
         
     | 
| 
       77 
77 
     | 
    
         | 
| 
       78 
78 
     | 
    
         
             
            static inline VALUE
         
     | 
| 
       79 
79 
     | 
    
         
             
            nary_type_s_cast(VALUE type, VALUE obj)
         
     | 
| 
         @@ -153,7 +153,7 @@ print_ndloop(na_md_loop_t *lp) { 
     | 
|
| 
       153 
153 
     | 
    
         
             
                    printf("--user.args[%d]--\n", j);
         
     | 
| 
       154 
154 
     | 
    
         
             
                    printf("  user.args[%d].ptr = 0x%"SZF"x\n", j, (size_t)LARG(lp,j).ptr);
         
     | 
| 
       155 
155 
     | 
    
         
             
                    printf("  user.args[%d].elmsz = %"SZF"d\n", j, LARG(lp,j).elmsz);
         
     | 
| 
       156 
     | 
    
         
            -
                    printf("  user.args[%d].value = 0x%" 
     | 
| 
      
 156 
     | 
    
         
            +
                    printf("  user.args[%d].value = 0x%"PRI_VALUE_PREFIX"x\n", j, LARG(lp,j).value);
         
     | 
| 
       157 
157 
     | 
    
         
             
                    printf("  user.args[%d].ndim = %d\n", j, LARG(lp,j).ndim);
         
     | 
| 
       158 
158 
     | 
    
         
             
                    printf("  user.args[%d].shape = 0x%"SZF"x\n", j, (size_t)LARG(lp,j).shape);
         
     | 
| 
       159 
159 
     | 
    
         
             
                    if (LARG(lp,j).shape) {
         
     | 
| 
         @@ -253,7 +253,7 @@ ndloop_cast_args(ndfunc_t *nf, VALUE args) 
     | 
|
| 
       253 
253 
     | 
    
         
             
                    value = RARRAY_AREF(args,j);
         
     | 
| 
       254 
254 
     | 
    
         
             
                    if (!ndloop_cast_required(type, value))
         
     | 
| 
       255 
255 
     | 
    
         
             
                        continue;
         
     | 
| 
       256 
     | 
    
         
            -
             
     | 
| 
      
 256 
     | 
    
         
            +
             
     | 
| 
       257 
257 
     | 
    
         
             
                    if (ndloop_castable_type(type)) {
         
     | 
| 
       258 
258 
     | 
    
         
             
                        RARRAY_ASET(args,j,nary_type_s_cast(type, value));
         
     | 
| 
       259 
259 
     | 
    
         
             
                        copy_flag |= 1<<j;
         
     | 
| 
         @@ -300,7 +300,7 @@ ndloop_find_max_dimension(na_md_loop_t *lp, ndfunc_t *nf, VALUE args) 
     | 
|
| 
       300 
300 
     | 
    
         
             
                int nin=0; // number of input objects (except for symbols)
         
     | 
| 
       301 
301 
     | 
    
         
             
                int user_nd=0; // max dimension of user function
         
     | 
| 
       302 
302 
     | 
    
         
             
                int loop_nd=0; // max dimension of md-loop
         
     | 
| 
       303 
     | 
    
         
            -
             
     | 
| 
      
 303 
     | 
    
         
            +
             
     | 
| 
       304 
304 
     | 
    
         
             
                for (j=0; j<RARRAY_LEN(args); j++) {
         
     | 
| 
       305 
305 
     | 
    
         
             
                    VALUE t = nf->ain[j].type;
         
     | 
| 
       306 
306 
     | 
    
         
             
                    VALUE v = RARRAY_AREF(args,j);
         
     | 
| 
         @@ -309,7 +309,7 @@ ndloop_find_max_dimension(na_md_loop_t *lp, ndfunc_t *nf, VALUE args) 
     | 
|
| 
       309 
309 
     | 
    
         
             
                    } else {
         
     | 
| 
       310 
310 
     | 
    
         
             
                        nin++;
         
     | 
| 
       311 
311 
     | 
    
         
             
                        user_nd = max2(user_nd, nf->ain[j].dim);
         
     | 
| 
       312 
     | 
    
         
            -
                        if (IsNArray(v)) 
     | 
| 
      
 312 
     | 
    
         
            +
                        if (IsNArray(v))
         
     | 
| 
       313 
313 
     | 
    
         
             
                            loop_nd = max2(loop_nd, RNARRAY_NDIM(v) - nf->ain[j].dim);
         
     | 
| 
       314 
314 
     | 
    
         
             
                    }
         
     | 
| 
       315 
315 
     | 
    
         
             
                }
         
     | 
| 
         @@ -377,7 +377,7 @@ ndloop_alloc(na_md_loop_t *lp, ndfunc_t *nf, VALUE args, 
     | 
|
| 
       377 
377 
     | 
    
         
             
                ndloop_find_max_dimension(lp, nf, args);
         
     | 
| 
       378 
378 
     | 
    
         
             
                narg = lp->nin + nf->nout;
         
     | 
| 
       379 
379 
     | 
    
         
             
                max_nd = lp->ndim + lp->user.ndim;
         
     | 
| 
       380 
     | 
    
         
            -
             
     | 
| 
      
 380 
     | 
    
         
            +
             
     | 
| 
       381 
381 
     | 
    
         
             
                lp->n    = lp->n_ptr = ALLOC_N(size_t, max_nd+1);
         
     | 
| 
       382 
382 
     | 
    
         
             
                lp->xargs = ALLOC_N(na_loop_xargs_t, narg);
         
     | 
| 
       383 
383 
     | 
    
         
             
                lp->user.args = ALLOC_N(na_loop_args_t, narg);
         
     | 
| 
         @@ -535,11 +535,14 @@ ndloop_set_stepidx(na_md_loop_t *lp, int j, VALUE vna, int *dim_map, int rwflag) 
     | 
|
| 
       535 
535 
     | 
    
         | 
| 
       536 
536 
     | 
    
         
             
                LARG(lp,j).value = vna;
         
     | 
| 
       537 
537 
     | 
    
         
             
                LARG(lp,j).elmsz = na_get_elmsz(vna);
         
     | 
| 
       538 
     | 
    
         
            -
                if (rwflag  
     | 
| 
      
 538 
     | 
    
         
            +
                if (rwflag == NDL_READ) {
         
     | 
| 
       539 
539 
     | 
    
         
             
                    LARG(lp,j).ptr = na_get_pointer_for_read(vna);
         
     | 
| 
       540 
540 
     | 
    
         
             
                } else
         
     | 
| 
       541 
     | 
    
         
            -
                if (rwflag  
     | 
| 
      
 541 
     | 
    
         
            +
                if (rwflag == NDL_WRITE) {
         
     | 
| 
       542 
542 
     | 
    
         
             
                    LARG(lp,j).ptr = na_get_pointer_for_write(vna);
         
     | 
| 
      
 543 
     | 
    
         
            +
                } else
         
     | 
| 
      
 544 
     | 
    
         
            +
                if (rwflag == NDL_READ_WRITE) {
         
     | 
| 
      
 545 
     | 
    
         
            +
                    LARG(lp,j).ptr = na_get_pointer_for_read_write(vna);
         
     | 
| 
       543 
546 
     | 
    
         
             
                } else {
         
     | 
| 
       544 
547 
     | 
    
         
             
                    rb_bug("invalid value for read-write flag");
         
     | 
| 
       545 
548 
     | 
    
         
             
                }
         
     | 
| 
         @@ -890,7 +893,8 @@ ndfunc_contract_loop(na_md_loop_t *lp) 
     | 
|
| 
       890 
893 
     | 
    
         
             
                        }
         
     | 
| 
       891 
894 
     | 
    
         
             
                    }
         
     | 
| 
       892 
895 
     | 
    
         
             
                    if (success) {
         
     | 
| 
       893 
     | 
    
         
            -
                        //printf("contract i=%d-th and %d-th\n", 
     | 
| 
      
 896 
     | 
    
         
            +
                        //printf("contract i=%d-th and %d-th, lp->n[%d]=%"SZF"d, lp->n[%d]=%"SZF"d\n",
         
     | 
| 
      
 897 
     | 
    
         
            +
                        //       i-1,i, i,lp->n[i], i-1,lp->n[i-1]);
         
     | 
| 
       894 
898 
     | 
    
         
             
                        // contract (i-1)-th and i-th dimension
         
     | 
| 
       895 
899 
     | 
    
         
             
                        lp->n[i] *= lp->n[i-1];
         
     | 
| 
       896 
900 
     | 
    
         
             
                        // shift dimensions
         
     | 
| 
         @@ -915,6 +919,7 @@ ndfunc_contract_loop(na_md_loop_t *lp) 
     | 
|
| 
       915 
919 
     | 
    
         
             
                //printf("contract cnt=%d\n",cnt);
         
     | 
| 
       916 
920 
     | 
    
         
             
                if (cnt>0) {
         
     | 
| 
       917 
921 
     | 
    
         
             
                    for (j=0; j<lp->narg; j++) {
         
     | 
| 
      
 922 
     | 
    
         
            +
                        LITER(lp,cnt,j).pos = LITER(lp,0,j).pos;
         
     | 
| 
       918 
923 
     | 
    
         
             
                        lp->xargs[j].iter = &LITER(lp,cnt,j);
         
     | 
| 
       919 
924 
     | 
    
         
             
                    }
         
     | 
| 
       920 
925 
     | 
    
         
             
                    lp->n = &(lp->n[cnt]);
         
     | 
| 
         @@ -1312,10 +1317,10 @@ ndloop_run(VALUE vlp) 
     | 
|
| 
       1312 
1317 
     | 
    
         
             
                // loop
         
     | 
| 
       1313 
1318 
     | 
    
         
             
                (*(lp->loop_func))(nf, lp);
         
     | 
| 
       1314 
1319 
     | 
    
         | 
| 
       1315 
     | 
    
         
            -
                if (na_debug_flag) {
         
     | 
| 
       1316 
     | 
    
         
            -
             
     | 
| 
       1317 
     | 
    
         
            -
             
     | 
| 
       1318 
     | 
    
         
            -
                }
         
     | 
| 
      
 1320 
     | 
    
         
            +
                //if (na_debug_flag) {
         
     | 
| 
      
 1321 
     | 
    
         
            +
                //    printf("-- after loop --\n");
         
     | 
| 
      
 1322 
     | 
    
         
            +
                //    print_ndloop(lp);
         
     | 
| 
      
 1323 
     | 
    
         
            +
                //}
         
     | 
| 
       1319 
1324 
     | 
    
         | 
| 
       1320 
1325 
     | 
    
         
             
                if (RTEST(lp->user.err_type)) {
         
     | 
| 
       1321 
1326 
     | 
    
         
             
                    rb_raise(lp->user.err_type, "error in NArray operation");
         
     | 
| 
         @@ -1531,25 +1536,9 @@ na_info_str(VALUE ary) 
     | 
|
| 
       1531 
1536 
     | 
    
         | 
| 
       1532 
1537 
     | 
    
         
             
            //----------------------------------------------------------------------
         
     | 
| 
       1533 
1538 
     | 
    
         | 
| 
       1534 
     | 
    
         
            -
             
     | 
| 
       1535 
     | 
    
         
            -
             
     | 
| 
       1536 
     | 
    
         
            -
             
     | 
| 
       1537 
     | 
    
         
            -
                VALUE cols, rows;
         
     | 
| 
       1538 
     | 
    
         
            -
             
     | 
| 
       1539 
     | 
    
         
            -
                cols = rb_ivar_get(cNArray,rb_intern("inspect_cols"));
         
     | 
| 
       1540 
     | 
    
         
            -
                if (RTEST(cols)) {
         
     | 
| 
       1541 
     | 
    
         
            -
                    *ncol = NUM2INT(cols);
         
     | 
| 
       1542 
     | 
    
         
            -
                } else {
         
     | 
| 
       1543 
     | 
    
         
            -
                    *ncol = 80;
         
     | 
| 
       1544 
     | 
    
         
            -
                }
         
     | 
| 
       1545 
     | 
    
         
            -
             
     | 
| 
       1546 
     | 
    
         
            -
                rows = rb_ivar_get(cNArray,rb_intern("inspect_rows"));
         
     | 
| 
       1547 
     | 
    
         
            -
                if (RTEST(rows)) {
         
     | 
| 
       1548 
     | 
    
         
            -
                    *nrow = NUM2INT(rows);
         
     | 
| 
       1549 
     | 
    
         
            -
                } else {
         
     | 
| 
       1550 
     | 
    
         
            -
                    *nrow = 20;
         
     | 
| 
       1551 
     | 
    
         
            -
                }
         
     | 
| 
       1552 
     | 
    
         
            -
            }
         
     | 
| 
      
 1539 
     | 
    
         
            +
            #define ncol numo_na_inspect_cols
         
     | 
| 
      
 1540 
     | 
    
         
            +
            #define nrow numo_na_inspect_rows
         
     | 
| 
      
 1541 
     | 
    
         
            +
            extern int ncol, nrow;
         
     | 
| 
       1553 
1542 
     | 
    
         | 
| 
       1554 
1543 
     | 
    
         
             
            static void
         
     | 
| 
       1555 
1544 
     | 
    
         
             
            loop_inspect(ndfunc_t *nf, na_md_loop_t *lp)
         
     | 
| 
         @@ -1559,8 +1548,6 @@ loop_inspect(ndfunc_t *nf, na_md_loop_t *lp) 
     | 
|
| 
       1559 
1548 
     | 
    
         
             
                int col=0, row=0;
         
     | 
| 
       1560 
1549 
     | 
    
         
             
                long len;
         
     | 
| 
       1561 
1550 
     | 
    
         
             
                VALUE str;
         
     | 
| 
       1562 
     | 
    
         
            -
                int ncol;
         
     | 
| 
       1563 
     | 
    
         
            -
                int nrow;
         
     | 
| 
       1564 
1551 
     | 
    
         
             
                na_text_func_t func = (na_text_func_t)(nf->func);
         
     | 
| 
       1565 
1552 
     | 
    
         
             
                VALUE buf, opt;
         
     | 
| 
       1566 
1553 
     | 
    
         | 
| 
         @@ -1587,8 +1574,6 @@ loop_inspect(ndfunc_t *nf, na_md_loop_t *lp) 
     | 
|
| 
       1587 
1574 
     | 
    
         
             
                    rb_str_cat(buf,"",0);
         
     | 
| 
       1588 
1575 
     | 
    
         
             
                }
         
     | 
| 
       1589 
1576 
     | 
    
         | 
| 
       1590 
     | 
    
         
            -
                ndloop_inspect_get_width(&ncol,&nrow);
         
     | 
| 
       1591 
     | 
    
         
            -
             
     | 
| 
       1592 
1577 
     | 
    
         
             
                col = nd*2;
         
     | 
| 
       1593 
1578 
     | 
    
         
             
                for (i=0;;) {
         
     | 
| 
       1594 
1579 
     | 
    
         
             
                    if (i<nd-1) {
         
     | 
| 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            /*
         
     | 
| 
       2 
2 
     | 
    
         
             
              intern.h
         
     | 
| 
       3 
3 
     | 
    
         
             
              Numerical Array Extension for Ruby
         
     | 
| 
       4 
     | 
    
         
            -
                (C) Copyright 1999- 
     | 
| 
      
 4 
     | 
    
         
            +
                (C) Copyright 1999-2016 by Masahiro TANAKA
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
              This program is free software.
         
     | 
| 
       7 
7 
     | 
    
         
             
              You can distribute/modify this program
         
     | 
| 
         @@ -19,6 +19,7 @@ VALUE na_original_data(VALUE self); 
     | 
|
| 
       19 
19 
     | 
    
         
             
            VALUE na_make_view(VALUE self);
         
     | 
| 
       20 
20 
     | 
    
         
             
            VALUE na_make_view_struct(VALUE self, VALUE dtype, VALUE offset);
         
     | 
| 
       21 
21 
     | 
    
         
             
            void na_array_to_internal_shape(VALUE self, VALUE ary, size_t *shape);
         
     | 
| 
      
 22 
     | 
    
         
            +
            VALUE na_expand_dims(VALUE self, VALUE vdim);
         
     | 
| 
       22 
23 
     | 
    
         | 
| 
       23 
24 
     | 
    
         
             
            VALUE na_reduce_dimension(int argc, VALUE *argv, int naryc, VALUE *naryv);
         
     | 
| 
       24 
25 
     | 
    
         | 
| 
         @@ -37,7 +38,7 @@ VALUE na_sort_index_main(int argc, VALUE *argv, VALUE self, void (*func_qsort)() 
     | 
|
| 
       37 
38 
     | 
    
         
             
            char *na_get_pointer(VALUE);
         
     | 
| 
       38 
39 
     | 
    
         
             
            char *na_get_pointer_for_write(VALUE);
         
     | 
| 
       39 
40 
     | 
    
         
             
            char *na_get_pointer_for_read(VALUE);
         
     | 
| 
       40 
     | 
    
         
            -
            char * 
     | 
| 
      
 41 
     | 
    
         
            +
            char *na_get_pointer_for_read_write(VALUE);
         
     | 
| 
       41 
42 
     | 
    
         | 
| 
       42 
43 
     | 
    
         
             
            size_t na_get_offset(VALUE self);
         
     | 
| 
       43 
44 
     | 
    
         | 
| 
         @@ -50,7 +51,6 @@ void na_alloc_index(narray_t *na); 
     | 
|
| 
       50 
51 
     | 
    
         
             
            void na_copy_flags(VALUE src, VALUE dst);
         
     | 
| 
       51 
52 
     | 
    
         | 
| 
       52 
53 
     | 
    
         
             
            VALUE na_flatten(VALUE);
         
     | 
| 
       53 
     | 
    
         
            -
            VALUE na_dup(VALUE);
         
     | 
| 
       54 
54 
     | 
    
         
             
            VALUE na_copy(VALUE);
         
     | 
| 
       55 
55 
     | 
    
         
             
            VALUE na_upcast(VALUE type1, VALUE type2);
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            /*
         
     | 
| 
       2 
2 
     | 
    
         
             
              narray.h
         
     | 
| 
       3 
3 
     | 
    
         
             
              Numerical Array Extension for Ruby
         
     | 
| 
       4 
     | 
    
         
            -
                (C) Copyright 1999- 
     | 
| 
      
 4 
     | 
    
         
            +
                (C) Copyright 1999-2016 by Masahiro TANAKA
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
              This program is free software.
         
     | 
| 
       7 
7 
     | 
    
         
             
              You can distribute/modify this program
         
     | 
| 
         @@ -11,14 +11,13 @@ 
     | 
|
| 
       11 
11 
     | 
    
         
             
            #ifndef NARRAY_H
         
     | 
| 
       12 
12 
     | 
    
         
             
            #define NARRAY_H
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
            #define NARRAY_VERSION "0.9.0. 
     | 
| 
       15 
     | 
    
         
            -
            #define NARRAY_VERSION_CODE  
     | 
| 
      
 14 
     | 
    
         
            +
            #define NARRAY_VERSION "0.9.0.3"
         
     | 
| 
      
 15 
     | 
    
         
            +
            #define NARRAY_VERSION_CODE 903
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
            #include <math.h>
         
     | 
| 
       18 
18 
     | 
    
         
             
            #include "numo/compat.h"
         
     | 
| 
       19 
19 
     | 
    
         
             
            #include "numo/template.h"
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
            #include "extconf.h"
         
     | 
| 
      
 20 
     | 
    
         
            +
            #include "numo/extconf.h"
         
     | 
| 
       22 
21 
     | 
    
         | 
| 
       23 
22 
     | 
    
         
             
            #ifdef HAVE_STDBOOL_H
         
     | 
| 
       24 
23 
     | 
    
         
             
            # include <stdbool.h>
         
     | 
| 
         @@ -56,19 +55,7 @@ 
     | 
|
| 
       56 
55 
     | 
    
         
             
            # endif
         
     | 
| 
       57 
56 
     | 
    
         
             
            #endif
         
     | 
| 
       58 
57 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
            # 
     | 
| 
       60 
     | 
    
         
            -
            # define NUM2SIZE(x) NUM2ULONG(x)
         
     | 
| 
       61 
     | 
    
         
            -
            # define NUM2SSIZE(x) NUM2LONG(x)
         
     | 
| 
       62 
     | 
    
         
            -
            # define SIZE2NUM(x) ULONG2NUM(x)
         
     | 
| 
       63 
     | 
    
         
            -
            # define SSIZE2NUM(x) LONG2NUM(x)
         
     | 
| 
       64 
     | 
    
         
            -
            # define SZF "l"
         
     | 
| 
       65 
     | 
    
         
            -
            #elif SIZEOF_VOIDP==SIZEOF_LONG_LONG
         
     | 
| 
       66 
     | 
    
         
            -
            # define NUM2SIZE(x) NUM2ULL(x)
         
     | 
| 
       67 
     | 
    
         
            -
            # define NUM2SSIZE(x) NUM2LL(x)
         
     | 
| 
       68 
     | 
    
         
            -
            # define SIZE2NUM(x) ULL2NUM(x)
         
     | 
| 
       69 
     | 
    
         
            -
            # define SSIZE2NUM(x) LL2NUM(x)
         
     | 
| 
       70 
     | 
    
         
            -
            # define SZF "ll"
         
     | 
| 
       71 
     | 
    
         
            -
            #endif
         
     | 
| 
      
 58 
     | 
    
         
            +
            #define SZF PRI_SIZE_PREFIX // defined in ruby.h
         
     | 
| 
       72 
59 
     | 
    
         | 
| 
       73 
60 
     | 
    
         
             
            #if   SIZEOF_LONG==8
         
     | 
| 
       74 
61 
     | 
    
         
             
            # define NUM2INT64(x) NUM2LONG(x)
         
     | 
| 
         @@ -358,13 +345,10 @@ _na_get_narray_t(VALUE obj, unsigned char na_type) 
     | 
|
| 
       358 
345 
     | 
    
         
             
            #endif
         
     | 
| 
       359 
346 
     | 
    
         
             
            #endif
         
     | 
| 
       360 
347 
     | 
    
         | 
| 
       361 
     | 
    
         
            -
             
     | 
| 
       362 
348 
     | 
    
         
             
            #define IsNArray(obj) (rb_obj_is_kind_of(obj,cNArray)==Qtrue)
         
     | 
| 
       363 
349 
     | 
    
         | 
| 
       364 
350 
     | 
    
         
             
            #define DEBUG_PRINT(v) puts(StringValueCStr(rb_funcall(v,rb_intern("inspect"),0)))
         
     | 
| 
       365 
351 
     | 
    
         | 
| 
       366 
     | 
    
         
            -
             
     | 
| 
       367 
     | 
    
         
            -
             
     | 
| 
       368 
352 
     | 
    
         
             
            #define NA_IsNArray(obj) \
         
     | 
| 
       369 
353 
     | 
    
         
             
              (rb_obj_is_kind_of(obj,cNArray)==Qtrue)
         
     | 
| 
       370 
354 
     | 
    
         
             
            #define NA_IsArray(obj) \
         
     | 
| 
         @@ -375,37 +359,17 @@ _na_get_narray_t(VALUE obj, unsigned char na_type) 
     | 
|
| 
       375 
359 
     | 
    
         | 
| 
       376 
360 
     | 
    
         
             
            #define NA_MAX_DIMENSION (int)(sizeof(VALUE)*8-2)
         
     | 
| 
       377 
361 
     | 
    
         | 
| 
       378 
     | 
    
         
            -
            /* Function Prototypes */
         
     | 
| 
       379 
     | 
    
         
            -
             
     | 
| 
       380 
     | 
    
         
            -
             
     | 
| 
       381 
     | 
    
         
            -
            typedef struct {
         
     | 
| 
       382 
     | 
    
         
            -
                double beg;
         
     | 
| 
       383 
     | 
    
         
            -
                double step;
         
     | 
| 
       384 
     | 
    
         
            -
                double count;
         
     | 
| 
       385 
     | 
    
         
            -
            } seq_opt_t;
         
     | 
| 
       386 
     | 
    
         
            -
             
     | 
| 
       387 
     | 
    
         
            -
            typedef struct {
         
     | 
| 
       388 
     | 
    
         
            -
                u_int64_t max;
         
     | 
| 
       389 
     | 
    
         
            -
                int64_t sign;
         
     | 
| 
       390 
     | 
    
         
            -
                int shift;
         
     | 
| 
       391 
     | 
    
         
            -
            } rand_opt_t;
         
     | 
| 
       392 
     | 
    
         
            -
             
     | 
| 
       393 
     | 
    
         
            -
             
     | 
| 
       394 
362 
     | 
    
         
             
            typedef unsigned int BIT_DIGIT;
         
     | 
| 
       395 
363 
     | 
    
         
             
            //#define BYTE_BIT_DIGIT sizeof(BIT_DIGIT)
         
     | 
| 
       396 
364 
     | 
    
         
             
            #define NB     (sizeof(BIT_DIGIT)*8)
         
     | 
| 
       397 
365 
     | 
    
         
             
            #define BALL   (~(BIT_DIGIT)0)
         
     | 
| 
       398 
366 
     | 
    
         
             
            #define SLB(n) (((n)==NB)?~(BIT_DIGIT)0:(~(~(BIT_DIGIT)0<<(n))))
         
     | 
| 
       399 
367 
     | 
    
         | 
| 
       400 
     | 
    
         
            -
            //#include "template.h"
         
     | 
| 
       401 
     | 
    
         
            -
             
     | 
| 
       402 
368 
     | 
    
         
             
            #define ELEMENT_BIT_SIZE  "ELEMENT_BIT_SIZE"
         
     | 
| 
       403 
369 
     | 
    
         
             
            #define ELEMENT_BYTE_SIZE "ELEMENT_BYTE_SIZE"
         
     | 
| 
       404 
370 
     | 
    
         
             
            #define CONTIGUOUS_STRIDE "CONTIGUOUS_STRIDE"
         
     | 
| 
       405 
371 
     | 
    
         | 
| 
       406 
372 
     | 
    
         
             
            #include "numo/ndloop.h"
         
     | 
| 
       407 
     | 
    
         
            -
            //#include "ndfunc.h"
         
     | 
| 
       408 
     | 
    
         
            -
             
     | 
| 
       409 
373 
     | 
    
         
             
            #include "numo/intern.h"
         
     | 
| 
       410 
374 
     | 
    
         | 
| 
       411 
375 
     | 
    
         
             
            #endif /* ifndef NARRAY_H */
         
     | 
| 
         @@ -1,19 +1,33 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            typedef  
     | 
| 
      
 1 
     | 
    
         
            +
            typedef BIT_DIGIT dtype;
         
     | 
| 
      
 2 
     | 
    
         
            +
            typedef BIT_DIGIT rtype;
         
     | 
| 
      
 3 
     | 
    
         
            +
            #define cT  numo_cBit
         
     | 
| 
      
 4 
     | 
    
         
            +
            #define cRT cT
         
     | 
| 
       2 
5 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            #define  
     | 
| 
      
 6 
     | 
    
         
            +
            #define m_zero 0
         
     | 
| 
      
 7 
     | 
    
         
            +
            #define m_one  1
         
     | 
| 
       4 
8 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            #define  
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            #define m_bit_not(x)   (~(x))
         
     | 
| 
      
 9 
     | 
    
         
            +
            #define m_abs(x)     (x)
         
     | 
| 
      
 10 
     | 
    
         
            +
            #define m_sign(x)    (((x)==0) ? 0:1)
         
     | 
| 
       8 
11 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            #define  
     | 
| 
       10 
     | 
    
         
            -
            #define  
     | 
| 
       11 
     | 
    
         
            -
            #define  
     | 
| 
       12 
     | 
    
         
            -
            #define  
     | 
| 
      
 12 
     | 
    
         
            +
            #define m_from_double(x) (((x)==0) ? 0 : 1)
         
     | 
| 
      
 13 
     | 
    
         
            +
            #define m_from_real(x) (((x)==0) ? 0 : 1)
         
     | 
| 
      
 14 
     | 
    
         
            +
            #define m_data_to_num(x) INT2FIX(x)
         
     | 
| 
      
 15 
     | 
    
         
            +
            #define m_sprintf(s,x)   sprintf(s,"%1d",(int)(x))
         
     | 
| 
       13 
16 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
            #define  
     | 
| 
       15 
     | 
    
         
            -
            #define  
     | 
| 
      
 17 
     | 
    
         
            +
            #define m_copy(x)  (x)
         
     | 
| 
      
 18 
     | 
    
         
            +
            #define m_not(x)   (~(x))
         
     | 
| 
      
 19 
     | 
    
         
            +
            #define m_and(x,y) ((x)&(y))
         
     | 
| 
      
 20 
     | 
    
         
            +
            #define m_or(x,y)  ((x)|(y))
         
     | 
| 
      
 21 
     | 
    
         
            +
            #define m_xor(x,y) ((x)^(y))
         
     | 
| 
      
 22 
     | 
    
         
            +
            #define m_eq(x,y)  (~((x)^(y)))
         
     | 
| 
      
 23 
     | 
    
         
            +
            #define m_count_true(x)  ((x)!=0)
         
     | 
| 
      
 24 
     | 
    
         
            +
            #define m_count_false(x) ((x)==0)
         
     | 
| 
       16 
25 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
            static inline  
     | 
| 
       18 
     | 
    
         
            -
                 
     | 
| 
      
 26 
     | 
    
         
            +
            static inline BIT_DIGIT m_num_to_data(VALUE num) {
         
     | 
| 
      
 27 
     | 
    
         
            +
                if (RTEST(num)) {
         
     | 
| 
      
 28 
     | 
    
         
            +
                    if (!RTEST(rb_equal(num,INT2FIX(0)))) {
         
     | 
| 
      
 29 
     | 
    
         
            +
                        return 1;
         
     | 
| 
      
 30 
     | 
    
         
            +
                    }
         
     | 
| 
      
 31 
     | 
    
         
            +
                }
         
     | 
| 
      
 32 
     | 
    
         
            +
                return 0;
         
     | 
| 
       19 
33 
     | 
    
         
             
            }
         
     | 
| 
         @@ -123,7 +123,7 @@ static inline dtype c_div_r(dtype x, rtype y) { 
     | 
|
| 
       123 
123 
     | 
    
         
             
                return z;
         
     | 
| 
       124 
124 
     | 
    
         
             
            }
         
     | 
| 
       125 
125 
     | 
    
         | 
| 
       126 
     | 
    
         
            -
            static inline dtype  
     | 
| 
      
 126 
     | 
    
         
            +
            static inline dtype c_reciprocal(dtype x) {
         
     | 
| 
       127 
127 
     | 
    
         
             
                dtype z;
         
     | 
| 
       128 
128 
     | 
    
         
             
                if ( r_abs(REAL(x)) > r_abs(IMAG(x)) ) {
         
     | 
| 
       129 
129 
     | 
    
         
             
                    IMAG(z) = IMAG(x)/REAL(x);
         
     | 
| 
         @@ -372,7 +372,7 @@ static inline dtype c_pow_int(dtype x, int p) 
     | 
|
| 
       372 
372 
     | 
    
         
             
                dtype z = c_one();
         
     | 
| 
       373 
373 
     | 
    
         
             
                if (p<0) {
         
     | 
| 
       374 
374 
     | 
    
         
             
            	x = c_pow_int(x,-p);
         
     | 
| 
       375 
     | 
    
         
            -
            	return  
     | 
| 
      
 375 
     | 
    
         
            +
            	return c_reciprocal(x);
         
     | 
| 
       376 
376 
     | 
    
         
             
                }
         
     | 
| 
       377 
377 
     | 
    
         
             
                if (p==2) {return c_square(x);}
         
     | 
| 
       378 
378 
     | 
    
         
             
                if (p&1) {z = x;}
         
     | 
| 
         @@ -61,13 +61,21 @@ static inline dtype c_from_dcomplex(dcomplex x) { 
     | 
|
| 
       61 
61 
     | 
    
         
             
            #define m_pow(x,y) c_pow(x,y)
         
     | 
| 
       62 
62 
     | 
    
         
             
            #define m_pow_int(x,y) c_pow_int(x,y)
         
     | 
| 
       63 
63 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
            #define m_minus(x)   c_minus(x)
         
     | 
| 
       65 
     | 
    
         
            -
            #define m_inverse(x) c_inverse(x)
         
     | 
| 
       66 
     | 
    
         
            -
            #define m_square(x)  c_square(x)
         
     | 
| 
       67 
     | 
    
         
            -
            #define m_im(x)      c_im(x)
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
            #define m_conj(x)  c_new(REAL(x),-IMAG(x))
         
     | 
| 
       70 
64 
     | 
    
         
             
            #define m_abs(x)   c_abs(x)
         
     | 
| 
      
 65 
     | 
    
         
            +
            #define m_minus(x) c_minus(x)
         
     | 
| 
      
 66 
     | 
    
         
            +
            #define m_reciprocal(x) c_reciprocal(x)
         
     | 
| 
      
 67 
     | 
    
         
            +
            #define m_square(x) c_square(x)
         
     | 
| 
      
 68 
     | 
    
         
            +
            #define m_floor(x) c_new(floor(REAL(x)),floor(IMAG(x)))
         
     | 
| 
      
 69 
     | 
    
         
            +
            #define m_round(x) c_new(round(REAL(x)),round(IMAG(x)))
         
     | 
| 
      
 70 
     | 
    
         
            +
            #define m_ceil(x)  c_new(ceil(REAL(x)),ceil(IMAG(x)))
         
     | 
| 
      
 71 
     | 
    
         
            +
            #define m_trunc(x) c_new(trunc(REAL(x)),trunc(IMAG(x)))
         
     | 
| 
      
 72 
     | 
    
         
            +
            #define m_rint(x)  c_new(rint(REAL(x)),rint(IMAG(x)))
         
     | 
| 
      
 73 
     | 
    
         
            +
            #define m_sign(x)  c_new( \
         
     | 
| 
      
 74 
     | 
    
         
            +
             ((REAL(x)==0) ? 0.0:((REAL(x)>0) ? 1.0:((REAL(x)<0) ? -1.0:REAL(x)))), \
         
     | 
| 
      
 75 
     | 
    
         
            +
             ((IMAG(x)==0) ? 0.0:((IMAG(x)>0) ? 1.0:((IMAG(x)<0) ? -1.0:IMAG(x)))))
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            #define m_im(x)    c_im(x)
         
     | 
| 
      
 78 
     | 
    
         
            +
            #define m_conj(x)  c_new(REAL(x),-IMAG(x))
         
     | 
| 
       71 
79 
     | 
    
         
             
            #define m_arg(x)   atan2(IMAG(x),REAL(x))
         
     | 
| 
       72 
80 
     | 
    
         | 
| 
       73 
81 
     | 
    
         
             
            #define m_eq(x,y) c_eq(x,y)
         
     | 
| 
         @@ -84,7 +92,6 @@ static inline dtype c_from_dcomplex(dcomplex x) { 
     | 
|
| 
       84 
92 
     | 
    
         
             
            #define m_mulsum(x,y,z) {z = c_add(c_mul(x,y),z);}
         
     | 
| 
       85 
93 
     | 
    
         
             
            #define m_mulsum_init INT2FIX(0)
         
     | 
| 
       86 
94 
     | 
    
         | 
| 
       87 
     | 
    
         
            -
            #define m_rand c_new(to_res53(gen_rand64()),to_res53(gen_rand64()))
         
     | 
| 
       88 
95 
     | 
    
         
             
            #define m_rand_norm(a) rand_norm(a)
         
     | 
| 
       89 
96 
     | 
    
         | 
| 
       90 
97 
     | 
    
         
             
            #define m_sprintf(s,x) sprintf(s,"%g%+gi",REAL(x),IMAG(x))
         
     | 
| 
         @@ -203,3 +210,8 @@ static inline rtype f_rms(size_t n, char *p, ssize_t stride) 
     | 
|
| 
       203 
210 
     | 
    
         
             
                }
         
     | 
| 
       204 
211 
     | 
    
         
             
                return r_sqrt(y/count);
         
     | 
| 
       205 
212 
     | 
    
         
             
            }
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
            static inline dtype f_seq(dtype x, dtype y, double c)
         
     | 
| 
      
 215 
     | 
    
         
            +
            {
         
     | 
| 
      
 216 
     | 
    
         
            +
                return c_add(x,c_mul_r(y,c));
         
     | 
| 
      
 217 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -9,3 +9,12 @@ typedef double rtype; 
     | 
|
| 
       9 
9 
     | 
    
         
             
            static inline bool c_nearly_eq(dtype x, dtype y) {
         
     | 
| 
       10 
10 
     | 
    
         
             
                return c_abs(c_sub(x,y)) <= (c_abs(x)+c_abs(y))*DBL_EPSILON*2;
         
     | 
| 
       11 
11 
     | 
    
         
             
            }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            /* generates a random number on [0,1)-real-interval */
         
     | 
| 
      
 14 
     | 
    
         
            +
            inline static dtype m_rand(dtype max)
         
     | 
| 
      
 15 
     | 
    
         
            +
            {
         
     | 
| 
      
 16 
     | 
    
         
            +
                dtype z;
         
     | 
| 
      
 17 
     | 
    
         
            +
                REAL(z) = genrand_res53_mix() * REAL(max);
         
     | 
| 
      
 18 
     | 
    
         
            +
                IMAG(z) = genrand_res53_mix() * IMAG(max);
         
     | 
| 
      
 19 
     | 
    
         
            +
                return z;
         
     | 
| 
      
 20 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -6,6 +6,12 @@ typedef double rtype; 
     | 
|
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            #include "float_macro.h"
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
      
 9 
     | 
    
         
            +
            /* generates a random number on [0,1)-real-interval */
         
     | 
| 
      
 10 
     | 
    
         
            +
            inline static dtype m_rand(dtype max)
         
     | 
| 
      
 11 
     | 
    
         
            +
            {
         
     | 
| 
      
 12 
     | 
    
         
            +
                return genrand_res53_mix() * max;
         
     | 
| 
      
 13 
     | 
    
         
            +
            }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
       9 
15 
     | 
    
         
             
            #define m_min_init numo_dfloat_new_dim0(0.0/0.0)
         
     | 
| 
       10 
16 
     | 
    
         
             
            #define m_max_init numo_dfloat_new_dim0(0.0/0.0)
         
     | 
| 
       11 
17 
     | 
    
         
             
            #define m_extract(x) rb_float_new(*(double*)x)
         
     | 
| 
         @@ -30,11 +30,14 @@ EXTERN double pow(double, double); 
     | 
|
| 
       30 
30 
     | 
    
         | 
| 
       31 
31 
     | 
    
         
             
            #define m_abs(x)     fabs(x)
         
     | 
| 
       32 
32 
     | 
    
         
             
            #define m_minus(x)   (-(x))
         
     | 
| 
       33 
     | 
    
         
            -
            #define  
     | 
| 
      
 33 
     | 
    
         
            +
            #define m_reciprocal(x) (1/(x))
         
     | 
| 
       34 
34 
     | 
    
         
             
            #define m_square(x)  ((x)*(x))
         
     | 
| 
       35 
35 
     | 
    
         
             
            #define m_floor(x)   floor(x)
         
     | 
| 
       36 
36 
     | 
    
         
             
            #define m_round(x)   round(x)
         
     | 
| 
       37 
37 
     | 
    
         
             
            #define m_ceil(x)    ceil(x)
         
     | 
| 
      
 38 
     | 
    
         
            +
            #define m_trunc(x)   trunc(x)
         
     | 
| 
      
 39 
     | 
    
         
            +
            #define m_rint(x)    rint(x)
         
     | 
| 
      
 40 
     | 
    
         
            +
            #define m_sign(x)    (((x)==0) ? 0.0:(((x)>0) ? 1.0:(((x)<0) ? -1.0:(x))))
         
     | 
| 
       38 
41 
     | 
    
         | 
| 
       39 
42 
     | 
    
         
             
            #define m_eq(x,y) ((x)==(y))
         
     | 
| 
       40 
43 
     | 
    
         
             
            #define m_ne(x,y) ((x)!=(y))
         
     | 
| 
         @@ -50,7 +53,6 @@ EXTERN double pow(double, double); 
     | 
|
| 
       50 
53 
     | 
    
         
             
            #define m_mulsum(x,y,z) {z += x*y;}
         
     | 
| 
       51 
54 
     | 
    
         
             
            #define m_mulsum_init INT2FIX(0)
         
     | 
| 
       52 
55 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
            #define m_rand to_res53(gen_rand64())
         
     | 
| 
       54 
56 
     | 
    
         
             
            #define m_rand_norm(a) rand_norm(a)
         
     | 
| 
       55 
57 
     | 
    
         | 
| 
       56 
58 
     | 
    
         
             
            #define m_sprintf(s,x) sprintf(s,"%g",x)
         
     | 
| 
         @@ -275,3 +277,8 @@ static inline size_t f_max_index(size_t n, char *p, ssize_t stride) 
     | 
|
| 
       275 
277 
     | 
    
         
             
                }
         
     | 
| 
       276 
278 
     | 
    
         
             
                return j;
         
     | 
| 
       277 
279 
     | 
    
         
             
            }
         
     | 
| 
      
 280 
     | 
    
         
            +
             
     | 
| 
      
 281 
     | 
    
         
            +
            static inline dtype f_seq(dtype x, dtype y, double c)
         
     | 
| 
      
 282 
     | 
    
         
            +
            {
         
     | 
| 
      
 283 
     | 
    
         
            +
                return x + y * c;
         
     | 
| 
      
 284 
     | 
    
         
            +
            }
         
     |