nmatrix 0.0.6 → 0.0.7
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/.gitignore +2 -0
 - data/Gemfile +5 -0
 - data/History.txt +97 -0
 - data/Manifest.txt +34 -7
 - data/README.rdoc +13 -13
 - data/Rakefile +36 -26
 - data/ext/nmatrix/data/data.cpp +15 -2
 - data/ext/nmatrix/data/data.h +4 -0
 - data/ext/nmatrix/data/ruby_object.h +5 -14
 - data/ext/nmatrix/extconf.rb +3 -2
 - data/ext/nmatrix/{util/math.cpp → math.cpp} +296 -6
 - data/ext/nmatrix/math/asum.h +143 -0
 - data/ext/nmatrix/math/geev.h +82 -0
 - data/ext/nmatrix/math/gemm.h +267 -0
 - data/ext/nmatrix/math/gemv.h +208 -0
 - data/ext/nmatrix/math/ger.h +96 -0
 - data/ext/nmatrix/math/gesdd.h +80 -0
 - data/ext/nmatrix/math/gesvd.h +78 -0
 - data/ext/nmatrix/math/getf2.h +86 -0
 - data/ext/nmatrix/math/getrf.h +240 -0
 - data/ext/nmatrix/math/getri.h +107 -0
 - data/ext/nmatrix/math/getrs.h +125 -0
 - data/ext/nmatrix/math/idamax.h +86 -0
 - data/ext/nmatrix/{util → math}/lapack.h +60 -356
 - data/ext/nmatrix/math/laswp.h +165 -0
 - data/ext/nmatrix/math/long_dtype.h +52 -0
 - data/ext/nmatrix/math/math.h +1154 -0
 - data/ext/nmatrix/math/nrm2.h +181 -0
 - data/ext/nmatrix/math/potrs.h +125 -0
 - data/ext/nmatrix/math/rot.h +141 -0
 - data/ext/nmatrix/math/rotg.h +115 -0
 - data/ext/nmatrix/math/scal.h +73 -0
 - data/ext/nmatrix/math/swap.h +73 -0
 - data/ext/nmatrix/math/trsm.h +383 -0
 - data/ext/nmatrix/nmatrix.cpp +176 -152
 - data/ext/nmatrix/nmatrix.h +1 -2
 - data/ext/nmatrix/ruby_constants.cpp +9 -4
 - data/ext/nmatrix/ruby_constants.h +1 -0
 - data/ext/nmatrix/storage/dense.cpp +57 -41
 - data/ext/nmatrix/storage/list.cpp +52 -50
 - data/ext/nmatrix/storage/storage.cpp +59 -43
 - data/ext/nmatrix/storage/yale.cpp +352 -333
 - data/ext/nmatrix/storage/yale.h +4 -0
 - data/lib/nmatrix.rb +2 -2
 - data/lib/nmatrix/blas.rb +4 -4
 - data/lib/nmatrix/enumerate.rb +241 -0
 - data/lib/nmatrix/lapack.rb +54 -1
 - data/lib/nmatrix/math.rb +462 -0
 - data/lib/nmatrix/nmatrix.rb +210 -486
 - data/lib/nmatrix/nvector.rb +0 -62
 - data/lib/nmatrix/rspec.rb +75 -0
 - data/lib/nmatrix/shortcuts.rb +136 -108
 - data/lib/nmatrix/version.rb +1 -1
 - data/spec/blas_spec.rb +20 -12
 - data/spec/elementwise_spec.rb +22 -13
 - data/spec/io_spec.rb +1 -0
 - data/spec/lapack_spec.rb +197 -0
 - data/spec/nmatrix_spec.rb +39 -38
 - data/spec/nvector_spec.rb +3 -9
 - data/spec/rspec_monkeys.rb +29 -0
 - data/spec/rspec_spec.rb +34 -0
 - data/spec/shortcuts_spec.rb +14 -16
 - data/spec/slice_spec.rb +242 -186
 - data/spec/spec_helper.rb +19 -0
 - metadata +33 -5
 - data/ext/nmatrix/util/math.h +0 -2612
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 2c1dc8a7e82a68a64da1bbf5f52107e064eb1f62
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: dd24f0e30a500f7a397ffcddb21c8cbb4fbfd3d2
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 4368ba0104a54a72397beaa607cb58dc2c44763833ced2a532c6fe9626b3405d89c0d75b924950b19f02567530c1979dd9a1e463b1b0d812bc77e5b02812277e
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: c8a9094c70c19d7a45fc08f5237a123e6c694e32be358e9c39fa7d9e30c7f0c2e903674951f677d24d4fc725dee67d23b59669e1354b66cd96d8574de8312659
         
     | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/Gemfile
    CHANGED
    
    
    
        data/History.txt
    CHANGED
    
    | 
         @@ -281,3 +281,100 @@ 
     | 
|
| 
       281 
281 
     | 
    
         | 
| 
       282 
282 
     | 
    
         
             
              * Repaired list matrix element-wise functions
         
     | 
| 
       283 
283 
     | 
    
         | 
| 
      
 284 
     | 
    
         
            +
            === 0.0.7 / 2013-08-22
         
     | 
| 
      
 285 
     | 
    
         
            +
             
     | 
| 
      
 286 
     | 
    
         
            +
            * 6 major enhancements:
         
     | 
| 
      
 287 
     | 
    
         
            +
             
     | 
| 
      
 288 
     | 
    
         
            +
              * Eliminated NVector in favor of NMatrix objects with
         
     | 
| 
      
 289 
     | 
    
         
            +
                #effective_dim smaller than #dim; added NVector-like
         
     | 
| 
      
 290 
     | 
    
         
            +
                functionality to NMatrix, sometimes with #respond_to? dependent
         
     | 
| 
      
 291 
     | 
    
         
            +
                upon matrix dimensions; allowed for NVector.new to continue
         
     | 
| 
      
 292 
     | 
    
         
            +
                to function as before, but now returns an NMatrix instead
         
     | 
| 
      
 293 
     | 
    
         
            +
             
     | 
| 
      
 294 
     | 
    
         
            +
              * Began major re-factoring of headers for math.cpp
         
     | 
| 
      
 295 
     | 
    
         
            +
             
     | 
| 
      
 296 
     | 
    
         
            +
              * Added two singular value decomposition functions for dense
         
     | 
| 
      
 297 
     | 
    
         
            +
                NMatrix objects, #gesvd and #gesdd, for floating point and
         
     | 
| 
      
 298 
     | 
    
         
            +
                complex dtypes
         
     | 
| 
      
 299 
     | 
    
         
            +
             
     | 
| 
      
 300 
     | 
    
         
            +
              * Added additional slicing shorthand, which uses hashes (e.g.,
         
     | 
| 
      
 301 
     | 
    
         
            +
                n[0=>3,2] for n[0..3,2]), which may eventually allow users to use
         
     | 
| 
      
 302 
     | 
    
         
            +
                n[0:3,2] notation instead (needs Ruby core patch)
         
     | 
| 
      
 303 
     | 
    
         
            +
             
     | 
| 
      
 304 
     | 
    
         
            +
              * #[] and #[]= calls no longer need index on those matrix shape
         
     | 
| 
      
 305 
     | 
    
         
            +
                elements which are equal to 1 (e.g., vectors)
         
     | 
| 
      
 306 
     | 
    
         
            +
             
     | 
| 
      
 307 
     | 
    
         
            +
              * Yale slicing-by-reference has been added
         
     | 
| 
      
 308 
     | 
    
         
            +
             
     | 
| 
      
 309 
     | 
    
         
            +
            * 18 minor enhancements:
         
     | 
| 
      
 310 
     | 
    
         
            +
             
     | 
| 
      
 311 
     | 
    
         
            +
              * Added user-friendly NMatrix::LAPACK::laswp method
         
     | 
| 
      
 312 
     | 
    
         
            +
             
     | 
| 
      
 313 
     | 
    
         
            +
              * Added NMatrix#permute_columns! and NMatrix#permute_columns
         
     | 
| 
      
 314 
     | 
    
         
            +
             
     | 
| 
      
 315 
     | 
    
         
            +
              * Added NMatrix#abs to compute element-wise absolute values, and
         
     | 
| 
      
 316 
     | 
    
         
            +
                #abs_dtype to determine the dtype returned by a call to #abs on a
         
     | 
| 
      
 317 
     | 
    
         
            +
                given matrix (needed for RSpec)
         
     | 
| 
      
 318 
     | 
    
         
            +
             
     | 
| 
      
 319 
     | 
    
         
            +
              * Added NMatrix#size to compute the total number of cells in an
         
     | 
| 
      
 320 
     | 
    
         
            +
                NMatrix object (solely accounting for the shape, not sparsity)
         
     | 
| 
      
 321 
     | 
    
         
            +
             
     | 
| 
      
 322 
     | 
    
         
            +
              * Added RSpec monkey patches for #be_within to work with NMatrix
         
     | 
| 
      
 323 
     | 
    
         
            +
                objects; usable by requiring "nmatrix/rspec"
         
     | 
| 
      
 324 
     | 
    
         
            +
             
     | 
| 
      
 325 
     | 
    
         
            +
              * Added experimental NMatrix::LAPACK::lapack_gesvd function (which
         
     | 
| 
      
 326 
     | 
    
         
            +
                does NOT depend upon CLAPACK) (by @ryanmt and @mohawkjohn)
         
     | 
| 
      
 327 
     | 
    
         
            +
             
     | 
| 
      
 328 
     | 
    
         
            +
              * Added experimental non-LAPACK-dependent function
         
     | 
| 
      
 329 
     | 
    
         
            +
                NMatrix::LAPACK::lapack_gesdd
         
     | 
| 
      
 330 
     | 
    
         
            +
             
     | 
| 
      
 331 
     | 
    
         
            +
              * Added NMatrix#supershape method for getting the shape of a
         
     | 
| 
      
 332 
     | 
    
         
            +
                slice's parent or other ancestor, which may be useful for calling
         
     | 
| 
      
 333 
     | 
    
         
            +
                ATLAS and LAPACK functions on slices
         
     | 
| 
      
 334 
     | 
    
         
            +
             
     | 
| 
      
 335 
     | 
    
         
            +
              * Aliased NMatrix[] to function like N[] shortcut for matrix
         
     | 
| 
      
 336 
     | 
    
         
            +
                creation (by @agarie)
         
     | 
| 
      
 337 
     | 
    
         
            +
             
     | 
| 
      
 338 
     | 
    
         
            +
              * Added #layer for matrices with dimension greater than two
         
     | 
| 
      
 339 
     | 
    
         
            +
                (corresponds to #row and #column)
         
     | 
| 
      
 340 
     | 
    
         
            +
             
     | 
| 
      
 341 
     | 
    
         
            +
              * Added #rank and #each_rank generics for #row/#column/#layer and
         
     | 
| 
      
 342 
     | 
    
         
            +
                #each_row/#each_column/#each_layer respectively (#each_rank
         
     | 
| 
      
 343 
     | 
    
         
            +
                replaces #each_along_dim)
         
     | 
| 
      
 344 
     | 
    
         
            +
             
     | 
| 
      
 345 
     | 
    
         
            +
              * Replaced #reduce_along_dim with #inject_rank
         
     | 
| 
      
 346 
     | 
    
         
            +
             
     | 
| 
      
 347 
     | 
    
         
            +
              * NMatrix#to_a now works for up to two dimensional matrices; and
         
     | 
| 
      
 348 
     | 
    
         
            +
                returns a flattened array for single-row matrices
         
     | 
| 
      
 349 
     | 
    
         
            +
             
     | 
| 
      
 350 
     | 
    
         
            +
              * NMatrix#to_flat_a now returns a flattened array of all entries
         
     | 
| 
      
 351 
     | 
    
         
            +
             
     | 
| 
      
 352 
     | 
    
         
            +
              * Re-organized NMatrix Ruby sources into multiple files: math.rb
         
     | 
| 
      
 353 
     | 
    
         
            +
                for instance methods which are mathematical in nature or are
         
     | 
| 
      
 354 
     | 
    
         
            +
                essentially ATLAS/LAPACK/BLAS calls, enumerate.rb for methods
         
     | 
| 
      
 355 
     | 
    
         
            +
                involving enumeration; and existing shortcuts.rb for convenience
         
     | 
| 
      
 356 
     | 
    
         
            +
                functions and shortcut constructors, and nmatrix.rb for core
         
     | 
| 
      
 357 
     | 
    
         
            +
                functionality (#inspect, #to_h, #to_a, #to_s, #pretty_print,
         
     | 
| 
      
 358 
     | 
    
         
            +
                and so on)
         
     | 
| 
      
 359 
     | 
    
         
            +
             
     | 
| 
      
 360 
     | 
    
         
            +
              * Improved #pretty_print, which now also prints layers (the third
         
     | 
| 
      
 361 
     | 
    
         
            +
                dimension in a 3D matrix)
         
     | 
| 
      
 362 
     | 
    
         
            +
             
     | 
| 
      
 363 
     | 
    
         
            +
              * Re-factored some of dense slicing to remove some redundant code
         
     | 
| 
      
 364 
     | 
    
         
            +
             
     | 
| 
      
 365 
     | 
    
         
            +
              * Added shortcut functions #list?, #dense?, #yale? for quickly
         
     | 
| 
      
 366 
     | 
    
         
            +
                testing matrix storage type
         
     | 
| 
      
 367 
     | 
    
         
            +
             
     | 
| 
      
 368 
     | 
    
         
            +
            * 5 bug fixes:
         
     | 
| 
      
 369 
     | 
    
         
            +
             
     | 
| 
      
 370 
     | 
    
         
            +
              * Fixed compilation problem involving <typeinfo> and <vector> STL
         
     | 
| 
      
 371 
     | 
    
         
            +
                headers
         
     | 
| 
      
 372 
     | 
    
         
            +
             
     | 
| 
      
 373 
     | 
    
         
            +
              * Fixed NMatrix#inverse problem with non-square matrices
         
     | 
| 
      
 374 
     | 
    
         
            +
             
     | 
| 
      
 375 
     | 
    
         
            +
              * Fixed invalid read problem detected by Valgrind for
         
     | 
| 
      
 376 
     | 
    
         
            +
                Yale element-wise subtraction in spec
         
     | 
| 
      
 377 
     | 
    
         
            +
             
     | 
| 
      
 378 
     | 
    
         
            +
              * Fixed conversion from Ruby object to Complex and Rational
         
     | 
| 
      
 379 
     | 
    
         
            +
             
     | 
| 
      
 380 
     | 
    
         
            +
              * Fixed memory leak in slicing
         
     | 
    
        data/Manifest.txt
    CHANGED
    
    | 
         @@ -7,27 +7,32 @@ Rakefile 
     | 
|
| 
       7 
7 
     | 
    
         
             
            Gemfile
         
     | 
| 
       8 
8 
     | 
    
         
             
            Guardfile
         
     | 
| 
       9 
9 
     | 
    
         
             
            nmatrix.gemspec
         
     | 
| 
      
 10 
     | 
    
         
            +
            spec/blas_spec.rb
         
     | 
| 
      
 11 
     | 
    
         
            +
            spec/elementwise_spec.rb
         
     | 
| 
       10 
12 
     | 
    
         
             
            spec/io_spec.rb
         
     | 
| 
      
 13 
     | 
    
         
            +
            spec/lapack_spec.rb
         
     | 
| 
       11 
14 
     | 
    
         
             
            spec/math_spec.rb
         
     | 
| 
       12 
     | 
    
         
            -
            spec/nmatrix_spec.rb
         
     | 
| 
       13 
15 
     | 
    
         
             
            spec/nmatrix_list_spec.rb
         
     | 
| 
      
 16 
     | 
    
         
            +
            spec/nmatrix_spec.rb
         
     | 
| 
       14 
17 
     | 
    
         
             
            spec/nmatrix_yale_spec.rb
         
     | 
| 
       15 
18 
     | 
    
         
             
            spec/nvector_spec.rb
         
     | 
| 
       16 
     | 
    
         
            -
            spec/ 
     | 
| 
      
 19 
     | 
    
         
            +
            spec/rspec_spec.rb
         
     | 
| 
       17 
20 
     | 
    
         
             
            spec/shortcuts_spec.rb
         
     | 
| 
       18 
     | 
    
         
            -
            spec/ 
     | 
| 
       19 
     | 
    
         
            -
            spec/blas_spec.rb
         
     | 
| 
       20 
     | 
    
         
            -
            spec/lapack_spec.rb
         
     | 
| 
      
 21 
     | 
    
         
            +
            spec/slice_spec.rb
         
     | 
| 
       21 
22 
     | 
    
         
             
            spec/spec_helper.rb
         
     | 
| 
       22 
23 
     | 
    
         
             
            lib/nmatrix.rb
         
     | 
| 
      
 24 
     | 
    
         
            +
            lib/nmatrix/rspec.rb
         
     | 
| 
       23 
25 
     | 
    
         
             
            lib/nmatrix/io/market.rb
         
     | 
| 
       24 
26 
     | 
    
         
             
            lib/nmatrix/io/mat5_reader.rb
         
     | 
| 
       25 
27 
     | 
    
         
             
            lib/nmatrix/io/mat_reader.rb
         
     | 
| 
       26 
28 
     | 
    
         
             
            lib/nmatrix/blas.rb
         
     | 
| 
      
 29 
     | 
    
         
            +
            lib/nmatrix/enumerate.rb
         
     | 
| 
       27 
30 
     | 
    
         
             
            lib/nmatrix/lapack.rb
         
     | 
| 
      
 31 
     | 
    
         
            +
            lib/nmatrix/math.rb
         
     | 
| 
       28 
32 
     | 
    
         
             
            lib/nmatrix/monkeys.rb
         
     | 
| 
       29 
33 
     | 
    
         
             
            lib/nmatrix/nmatrix.rb
         
     | 
| 
       30 
34 
     | 
    
         
             
            lib/nmatrix/nvector.rb
         
     | 
| 
      
 35 
     | 
    
         
            +
            lib/nmatrix/rspec.rb
         
     | 
| 
       31 
36 
     | 
    
         
             
            lib/nmatrix/shortcuts.rb
         
     | 
| 
       32 
37 
     | 
    
         
             
            lib/nmatrix/version.rb
         
     | 
| 
       33 
38 
     | 
    
         
             
            lib/nmatrix/yale_functions.rb
         
     | 
| 
         @@ -46,12 +51,34 @@ ext/nmatrix/storage/storage.cpp 
     | 
|
| 
       46 
51 
     | 
    
         
             
            ext/nmatrix/storage/storage.h
         
     | 
| 
       47 
52 
     | 
    
         
             
            ext/nmatrix/storage/yale.cpp
         
     | 
| 
       48 
53 
     | 
    
         
             
            ext/nmatrix/storage/yale.h
         
     | 
| 
       49 
     | 
    
         
            -
            ext/nmatrix/util/math.cpp
         
     | 
| 
       50 
     | 
    
         
            -
            ext/nmatrix/util/math.h
         
     | 
| 
       51 
54 
     | 
    
         
             
            ext/nmatrix/util/sl_list.cpp
         
     | 
| 
       52 
55 
     | 
    
         
             
            ext/nmatrix/util/sl_list.h
         
     | 
| 
       53 
56 
     | 
    
         
             
            ext/nmatrix/util/util.h
         
     | 
| 
       54 
57 
     | 
    
         
             
            ext/nmatrix/util/lapack.h
         
     | 
| 
      
 58 
     | 
    
         
            +
            ext/nmatrix/math.cpp
         
     | 
| 
      
 59 
     | 
    
         
            +
            ext/nmatrix/math/asum.h
         
     | 
| 
      
 60 
     | 
    
         
            +
            ext/nmatrix/math/geev.h
         
     | 
| 
      
 61 
     | 
    
         
            +
            ext/nmatrix/math/gemm.h
         
     | 
| 
      
 62 
     | 
    
         
            +
            ext/nmatrix/math/gemv.h
         
     | 
| 
      
 63 
     | 
    
         
            +
            ext/nmatrix/math/ger.h
         
     | 
| 
      
 64 
     | 
    
         
            +
            ext/nmatrix/math/gesdd.h
         
     | 
| 
      
 65 
     | 
    
         
            +
            ext/nmatrix/math/gesvd.h
         
     | 
| 
      
 66 
     | 
    
         
            +
            ext/nmatrix/math/getf2.h
         
     | 
| 
      
 67 
     | 
    
         
            +
            ext/nmatrix/math/getrf.h
         
     | 
| 
      
 68 
     | 
    
         
            +
            ext/nmatrix/math/getri.h
         
     | 
| 
      
 69 
     | 
    
         
            +
            ext/nmatrix/math/getrs.h
         
     | 
| 
      
 70 
     | 
    
         
            +
            ext/nmatrix/math/idamax.h
         
     | 
| 
      
 71 
     | 
    
         
            +
            ext/nmatrix/math/lapack.h
         
     | 
| 
      
 72 
     | 
    
         
            +
            ext/nmatrix/math/laswp.h
         
     | 
| 
      
 73 
     | 
    
         
            +
            ext/nmatrix/math/long_dtype.h
         
     | 
| 
      
 74 
     | 
    
         
            +
            ext/nmatrix/math/math.h
         
     | 
| 
      
 75 
     | 
    
         
            +
            ext/nmatrix/math/nrm2.h
         
     | 
| 
      
 76 
     | 
    
         
            +
            ext/nmatrix/math/potrs.h
         
     | 
| 
      
 77 
     | 
    
         
            +
            ext/nmatrix/math/rot.h
         
     | 
| 
      
 78 
     | 
    
         
            +
            ext/nmatrix/math/rotg.h
         
     | 
| 
      
 79 
     | 
    
         
            +
            ext/nmatrix/math/scal.h
         
     | 
| 
      
 80 
     | 
    
         
            +
            ext/nmatrix/math/swap.h
         
     | 
| 
      
 81 
     | 
    
         
            +
            ext/nmatrix/math/trsm.h
         
     | 
| 
       55 
82 
     | 
    
         
             
            ext/nmatrix/nmatrix.cpp
         
     | 
| 
       56 
83 
     | 
    
         
             
            ext/nmatrix/nmatrix.h
         
     | 
| 
       57 
84 
     | 
    
         
             
            ext/nmatrix/ruby_constants.cpp
         
     | 
    
        data/README.rdoc
    CHANGED
    
    | 
         @@ -79,17 +79,17 @@ Read the instructions in +CONTRIBUTING.md+ if you want to help NMatrix. 
     | 
|
| 
       79 
79 
     | 
    
         | 
| 
       80 
80 
     | 
    
         
             
            == Features
         
     | 
| 
       81 
81 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
            The following features exist in the current version of NMatrix (0.0. 
     | 
| 
      
 82 
     | 
    
         
            +
            The following features exist in the current version of NMatrix (0.0.7):
         
     | 
| 
       83 
83 
     | 
    
         | 
| 
       84 
84 
     | 
    
         
             
            * Matrix and vector storage containers: dense, yale, list (more to come)
         
     | 
| 
       85 
85 
     | 
    
         
             
            * Data types: byte (uint8), int8, int16, int32, int64, float32, float64, complex64, complex128, rational64, rational128,
         
     | 
| 
       86 
86 
     | 
    
         
             
              Ruby object
         
     | 
| 
       87 
     | 
    
         
            -
            *  
     | 
| 
      
 87 
     | 
    
         
            +
            * Interconversion between storage and data types
         
     | 
| 
       88 
88 
     | 
    
         
             
            * Element-wise and right-hand-scalar operations and comparisons for all matrix types
         
     | 
| 
       89 
89 
     | 
    
         
             
            * Matrix-matrix multiplication for dense (with and without ATLAS) and yale
         
     | 
| 
       90 
90 
     | 
    
         
             
            * Matrix-vector multiplication for dense (with and without ATLAS)
         
     | 
| 
       91 
     | 
    
         
            -
            *  
     | 
| 
       92 
     | 
    
         
            -
            *  
     | 
| 
      
 91 
     | 
    
         
            +
            * Lots of enumerators (each, each_with_indices, each_row, each_column, each_rank, map, etc.)
         
     | 
| 
      
 92 
     | 
    
         
            +
            * Matrix slicing by copy and reference (for dense, yale, and list)
         
     | 
| 
       93 
93 
     | 
    
         
             
            * Native reading and writing of dense and yale matrices
         
     | 
| 
       94 
94 
     | 
    
         
             
              * Optional compression for dense matrices with symmetry or triangularity: symmetric, skew, hermitian, upper, lower
         
     | 
| 
       95 
95 
     | 
    
         
             
            * Matlab .MAT v5 file input
         
     | 
| 
         @@ -106,6 +106,9 @@ The following features exist in the current version of NMatrix (0.0.6): 
     | 
|
| 
       106 
106 
     | 
    
         
             
              * xGETRF
         
     | 
| 
       107 
107 
     | 
    
         
             
              * xLASWP, xSCAL
         
     | 
| 
       108 
108 
     | 
    
         
             
              * xLAUUM (no LAPACK needed, but BLAS dtypes only)
         
     | 
| 
      
 109 
     | 
    
         
            +
            * LAPACK (non-ATLAS) access:
         
     | 
| 
      
 110 
     | 
    
         
            +
              * xGESVD, xGESDD (singular value decomposition)
         
     | 
| 
      
 111 
     | 
    
         
            +
              * xGEEV (eigenvalue decomposition of a asymmetric square matrices)
         
     | 
| 
       109 
112 
     | 
    
         
             
            * LU decomposition
         
     | 
| 
       110 
113 
     | 
    
         
             
            * Matrix inversions (requires LAPACK; BLAS dtypes only)
         
     | 
| 
       111 
114 
     | 
    
         
             
            * Determinant calculation for BLAS dtypes
         
     | 
| 
         @@ -114,20 +117,17 @@ The following features exist in the current version of NMatrix (0.0.6): 
     | 
|
| 
       114 
117 
     | 
    
         | 
| 
       115 
118 
     | 
    
         
             
            === Planned Features (Short-to-Medium Term)
         
     | 
| 
       116 
119 
     | 
    
         | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
      
 120 
     | 
    
         
            +
            We are nearly the release of NMatrix 0.1.0, our first beta.
         
     | 
| 
       118 
121 
     | 
    
         | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
            *  
     | 
| 
       122 
     | 
    
         
            -
            *  
     | 
| 
       123 
     | 
    
         
            -
            * matrix  
     | 
| 
       124 
     | 
    
         
            -
            * calculation of additional norms
         
     | 
| 
      
 122 
     | 
    
         
            +
            These are features planned for NMatrix 0.2.0:
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
            * slice assignments (`x[1..3,0..4] = some_other_matrix`)
         
     | 
| 
      
 125 
     | 
    
         
            +
            * LAPACK-free calculation of determinant, trace, and eigenvalues (characteristic polynomial)
         
     | 
| 
      
 126 
     | 
    
         
            +
            * LAPACK-free matrix inversions
         
     | 
| 
       125 
127 
     | 
    
         
             
            * tensor products
         
     | 
| 
       126 
128 
     | 
    
         
             
            * principal component analysis (PCA)
         
     | 
| 
       127 
129 
     | 
    
         
             
            * improved file I/O
         
     | 
| 
       128 
130 
     | 
    
         
             
              * compression of yale symmetries in I/O
         
     | 
| 
       129 
     | 
    
         
            -
            * operation scheduling
         
     | 
| 
       130 
     | 
    
         
            -
            * parallelization of some types of operations
         
     | 
| 
       131 
131 
     | 
    
         
             
            * optimization of non-BLAS data types on BLAS-like operations (e.g., matrix multiplication for rational numbers)
         
     | 
| 
       132 
132 
     | 
    
         | 
| 
       133 
133 
     | 
    
         
             
            === Warning
         
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -33,7 +33,8 @@ require 'rspec/core/rake_task' 
     | 
|
| 
       33 
33 
     | 
    
         
             
            require 'rspec/core'
         
     | 
| 
       34 
34 
     | 
    
         
             
            require 'rspec/core/rake_task'
         
     | 
| 
       35 
35 
     | 
    
         
             
            RSpec::Core::RakeTask.new(:spec) do |spec|
         
     | 
| 
       36 
     | 
    
         
            -
               
     | 
| 
      
 36 
     | 
    
         
            +
              # Load nmatrix_spec first.
         
     | 
| 
      
 37 
     | 
    
         
            +
              spec.pattern = FileList['spec/nmatrix_spec.rb', 'spec/**/*_spec.rb'].uniq
         
     | 
| 
       37 
38 
     | 
    
         
             
            end
         
     | 
| 
       38 
39 
     | 
    
         | 
| 
       39 
40 
     | 
    
         
             
            BASEDIR = Pathname( __FILE__ ).dirname.relative_path_from( Pathname.pwd )
         
     | 
| 
         @@ -69,23 +70,31 @@ task :pry do |task| 
     | 
|
| 
       69 
70 
     | 
    
         
             
              run *cmd
         
     | 
| 
       70 
71 
     | 
    
         
             
            end
         
     | 
| 
       71 
72 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
      
 73 
     | 
    
         
            +
            namespace :pry do
         
     | 
| 
      
 74 
     | 
    
         
            +
              task :valgrind => [ :compile ] do |task|
         
     | 
| 
      
 75 
     | 
    
         
            +
                cmd  = [ 'valgrind' ] + VALGRIND_OPTIONS
         
     | 
| 
      
 76 
     | 
    
         
            +
                cmd += ['ruby', '-Ilib:ext', "-r './lib/nmatrix.rb'", "-r 'pry'", "-e 'binding.pry'"]
         
     | 
| 
      
 77 
     | 
    
         
            +
                run *cmd
         
     | 
| 
      
 78 
     | 
    
         
            +
              end
         
     | 
| 
      
 79 
     | 
    
         
            +
            end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
            namespace :console do
         
     | 
| 
      
 82 
     | 
    
         
            +
              CONSOLE_CMD = ['irb', "-r './lib/nmatrix.rb'"]
         
     | 
| 
      
 83 
     | 
    
         
            +
              desc "Run console under GDB."
         
     | 
| 
      
 84 
     | 
    
         
            +
              task :gdb => [ :compile ] do |task|
         
     | 
| 
      
 85 
     | 
    
         
            +
                      cmd = [ 'gdb' ] + GDB_OPTIONS
         
     | 
| 
      
 86 
     | 
    
         
            +
                      cmd += [ '--args' ]
         
     | 
| 
      
 87 
     | 
    
         
            +
                      cmd += CONSOLE_CMD
         
     | 
| 
      
 88 
     | 
    
         
            +
                      run( *cmd )
         
     | 
| 
      
 89 
     | 
    
         
            +
              end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
              desc "Run console under Valgrind."
         
     | 
| 
      
 92 
     | 
    
         
            +
              task :valgrind => [ :compile ] do |task|
         
     | 
| 
      
 93 
     | 
    
         
            +
                      cmd = [ 'valgrind' ] + VALGRIND_OPTIONS
         
     | 
| 
      
 94 
     | 
    
         
            +
                      cmd += CONSOLE_CMD
         
     | 
| 
      
 95 
     | 
    
         
            +
                      run( *cmd )
         
     | 
| 
      
 96 
     | 
    
         
            +
              end
         
     | 
| 
      
 97 
     | 
    
         
            +
            end
         
     | 
| 
       89 
98 
     | 
    
         | 
| 
       90 
99 
     | 
    
         
             
            task :default => :spec
         
     | 
| 
       91 
100 
     | 
    
         | 
| 
         @@ -98,7 +107,7 @@ namespace :spec do 
     | 
|
| 
       98 
107 
     | 
    
         
             
              # spurious (and eminently ignorable) warnings from the ruby
         
     | 
| 
       99 
108 
     | 
    
         
             
              # interpreter
         
     | 
| 
       100 
109 
     | 
    
         | 
| 
       101 
     | 
    
         
            -
              RSPEC_CMD = [ 'ruby', '-S', 'rspec', '-Ilib:ext', SPECDIR ]
         
     | 
| 
      
 110 
     | 
    
         
            +
              RSPEC_CMD = [ 'ruby', '-S', 'rspec', '-Ilib:ext', "#{SPECDIR}/nmatrix_spec.rb #{SPECDIR}" ]
         
     | 
| 
       102 
111 
     | 
    
         | 
| 
       103 
112 
     | 
    
         
             
              #desc "Run the spec for generator.rb"
         
     | 
| 
       104 
113 
     | 
    
         
             
              #task :generator do |task|
         
     | 
| 
         @@ -107,7 +116,7 @@ namespace :spec do 
     | 
|
| 
       107 
116 
     | 
    
         | 
| 
       108 
117 
     | 
    
         
             
              desc "Run specs under GDB."
         
     | 
| 
       109 
118 
     | 
    
         
             
              task :gdb => [ :compile ] do |task|
         
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
      
 119 
     | 
    
         
            +
                      cmd = [ 'gdb' ] + GDB_OPTIONS
         
     | 
| 
       111 
120 
     | 
    
         
             
                cmd += [ '--args' ]
         
     | 
| 
       112 
121 
     | 
    
         
             
                cmd += RSPEC_CMD
         
     | 
| 
       113 
122 
     | 
    
         
             
                run( *cmd )
         
     | 
| 
         @@ -116,22 +125,23 @@ namespace :spec do 
     | 
|
| 
       116 
125 
     | 
    
         
             
              desc "Run specs under cgdb."
         
     | 
| 
       117 
126 
     | 
    
         
             
              task :cgdb => [ :compile ] do |task|
         
     | 
| 
       118 
127 
     | 
    
         
             
                cmd = [ 'cgdb' ] + GDB_OPTIONS
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
      
 128 
     | 
    
         
            +
                      cmd += [ '--args' ]
         
     | 
| 
      
 129 
     | 
    
         
            +
                      cmd += RSPEC_CMD
         
     | 
| 
      
 130 
     | 
    
         
            +
                      run( *cmd )
         
     | 
| 
       122 
131 
     | 
    
         
             
              end
         
     | 
| 
       123 
132 
     | 
    
         | 
| 
       124 
133 
     | 
    
         
             
              desc "Run specs under Valgrind."
         
     | 
| 
       125 
134 
     | 
    
         
             
              task :valgrind => [ :compile ] do |task|
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
      
 135 
     | 
    
         
            +
                      cmd = [ 'valgrind' ] + VALGRIND_OPTIONS
         
     | 
| 
      
 136 
     | 
    
         
            +
                      cmd += RSPEC_CMD
         
     | 
| 
      
 137 
     | 
    
         
            +
                      run( *cmd )
         
     | 
| 
       129 
138 
     | 
    
         
             
              end
         
     | 
| 
       130 
139 
     | 
    
         
             
            end
         
     | 
| 
       131 
140 
     | 
    
         | 
| 
       132 
141 
     | 
    
         | 
| 
       133 
142 
     | 
    
         
             
            LEAKCHECK_CMD = [ 'ruby', '-Ilib:ext', "#{SPECDIR}/leakcheck.rb" ]
         
     | 
| 
       134 
143 
     | 
    
         | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
       135 
145 
     | 
    
         
             
            desc "Run leakcheck script."
         
     | 
| 
       136 
146 
     | 
    
         
             
            task :leakcheck => [ :compile ] do |task|
         
     | 
| 
       137 
147 
     | 
    
         
             
              cmd = [ 'valgrind' ] + VALGRIND_OPTIONS
         
     | 
    
        data/ext/nmatrix/data/data.cpp
    CHANGED
    
    | 
         @@ -83,6 +83,8 @@ namespace nm { 
     | 
|
| 
       83 
83 
     | 
    
         
             
                  break;
         
     | 
| 
       84 
84 
     | 
    
         
             
                case T_FLOAT:
         
     | 
| 
       85 
85 
     | 
    
         
             
                case T_RATIONAL:
         
     | 
| 
      
 86 
     | 
    
         
            +
                case T_FIXNUM:
         
     | 
| 
      
 87 
     | 
    
         
            +
                case T_BIGNUM:
         
     | 
| 
       86 
88 
     | 
    
         
             
                  r = NUM2DBL(other.rval);
         
     | 
| 
       87 
89 
     | 
    
         
             
                  i = 0.0;
         
     | 
| 
       88 
90 
     | 
    
         
             
                  break;
         
     | 
| 
         @@ -91,14 +93,16 @@ namespace nm { 
     | 
|
| 
       91 
93 
     | 
    
         
             
                }
         
     | 
| 
       92 
94 
     | 
    
         
             
              }
         
     | 
| 
       93 
95 
     | 
    
         | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
       94 
97 
     | 
    
         
             
              template <typename Type>
         
     | 
| 
       95 
98 
     | 
    
         
             
              Rational<Type>::Rational(const RubyObject& other) {
         
     | 
| 
       96 
99 
     | 
    
         
             
                switch (TYPE(other.rval)) {
         
     | 
| 
       97 
100 
     | 
    
         
             
                case T_RATIONAL:
         
     | 
| 
       98 
     | 
    
         
            -
                  n = NUM2LONG(rb_funcall( 
     | 
| 
       99 
     | 
    
         
            -
                  d = NUM2LONG(rb_funcall( 
     | 
| 
      
 101 
     | 
    
         
            +
                  n = NUM2LONG(rb_funcall(other.rval, rb_intern("numerator"), 0));
         
     | 
| 
      
 102 
     | 
    
         
            +
                  d = NUM2LONG(rb_funcall(other.rval, rb_intern("denominator"), 0));
         
     | 
| 
       100 
103 
     | 
    
         
             
                  break;
         
     | 
| 
       101 
104 
     | 
    
         
             
                case T_FIXNUM:
         
     | 
| 
      
 105 
     | 
    
         
            +
                case T_BIGNUM:
         
     | 
| 
       102 
106 
     | 
    
         
             
                  n = NUM2LONG(other.rval);
         
     | 
| 
       103 
107 
     | 
    
         
             
                  d = 1;
         
     | 
| 
       104 
108 
     | 
    
         
             
                  break;
         
     | 
| 
         @@ -340,5 +344,14 @@ void* rubyobj_to_cval(VALUE val, nm::dtype_t dtype) { 
     | 
|
| 
       340 
344 
     | 
    
         
             
              return ret_val;
         
     | 
| 
       341 
345 
     | 
    
         
             
            }
         
     | 
| 
       342 
346 
     | 
    
         | 
| 
      
 347 
     | 
    
         
            +
            void nm_init_data() {
         
     | 
| 
      
 348 
     | 
    
         
            +
                nm::RubyObject obj(INT2FIX(1));
         
     | 
| 
      
 349 
     | 
    
         
            +
                nm::Rational32 x(obj);
         
     | 
| 
      
 350 
     | 
    
         
            +
                nm::Rational64 y(obj);
         
     | 
| 
      
 351 
     | 
    
         
            +
                nm::Rational128 z(obj);
         
     | 
| 
      
 352 
     | 
    
         
            +
                nm::Complex64 a(obj);
         
     | 
| 
      
 353 
     | 
    
         
            +
                nm::Complex128 b(obj);
         
     | 
| 
      
 354 
     | 
    
         
            +
            }
         
     | 
| 
      
 355 
     | 
    
         
            +
             
     | 
| 
       343 
356 
     | 
    
         | 
| 
       344 
357 
     | 
    
         
             
            } // end of extern "C" block
         
     | 
    
        data/ext/nmatrix/data/data.h
    CHANGED
    
    | 
         @@ -46,6 +46,8 @@ 
     | 
|
| 
       46 
46 
     | 
    
         
             
            #include "ruby_object.h"
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
            namespace nm {
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
       49 
51 
     | 
    
         
             
              /*
         
     | 
| 
       50 
52 
     | 
    
         
             
               * Constants
         
     | 
| 
       51 
53 
     | 
    
         
             
               */
         
     | 
| 
         @@ -776,6 +778,8 @@ void  		  		rubyval_to_cval(VALUE val, nm::dtype_t dtype, void* loc); 
     | 
|
| 
       776 
778 
     | 
    
         
             
            nm::RubyObject	rubyobj_from_cval(void* val, nm::dtype_t dtype);
         
     | 
| 
       777 
779 
     | 
    
         
             
            nm::RubyObject  rubyobj_from_cval_by_itype(void* val, nm::itype_t itype);
         
     | 
| 
       778 
780 
     | 
    
         | 
| 
      
 781 
     | 
    
         
            +
            void nm_init_data();
         
     | 
| 
      
 782 
     | 
    
         
            +
             
     | 
| 
       779 
783 
     | 
    
         
             
            } // end of extern "C" block
         
     | 
| 
       780 
784 
     | 
    
         | 
| 
       781 
785 
     | 
    
         
             
            #endif // DATA_H
         
     | 
| 
         @@ -123,21 +123,12 @@ class RubyObject { 
     | 
|
| 
       123 
123 
     | 
    
         
             
              inline operator double()   const { RETURN_OBJ2NUM(NUM2DBL)        }
         
     | 
| 
       124 
124 
     | 
    
         
             
              inline operator float()  const { RETURN_OBJ2NUM(NUM2DBL)          }
         
     | 
| 
       125 
125 
     | 
    
         | 
| 
       126 
     | 
    
         
            -
               
     | 
| 
       127 
     | 
    
         
            -
               
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
              //template <typename IntType>
         
     | 
| 
       130 
     | 
    
         
            -
              //inline operator Rational<typename std::enable_if<std::is_integral<IntType>::value, IntType>::type>&() const { static Rational<IntType> x = this->to<Rational<IntType> >(); return x; }
         
     | 
| 
       131 
     | 
    
         
            -
              //inline operator Rational32() const { return this->to<Rational32>();   }
         
     | 
| 
       132 
     | 
    
         
            -
              //inline operator Rational64() const { return this->to<Rational64>();   }
         
     | 
| 
       133 
     | 
    
         
            -
              //inline operator Rational128() const { return this->to<Rational128>(); }
         
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
              //template <typename FloatType>
         
     | 
| 
       136 
     | 
    
         
            -
              //inline operator Complex<typename std::enable_if<std::is_floating_point<FloatType>::value, FloatType>::type>() const { return this->to<Complex<FloatType> >();    }
         
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
              //template <typename FloatType>
         
     | 
| 
       139 
     | 
    
         
            -
              //inline operator Complex<typename std::enable_if<std::is_floating_point<FloatType>::value, FloatType>::type>&() const { static Complex<FloatType> x = this->to<Complex<FloatType> >(); return x;    }
         
     | 
| 
      
 126 
     | 
    
         
            +
              inline operator Rational32() const { return this->to<Rational32>();   }
         
     | 
| 
      
 127 
     | 
    
         
            +
              inline operator Rational64() const { return this->to<Rational64>();   }
         
     | 
| 
      
 128 
     | 
    
         
            +
              inline operator Rational128() const { return this->to<Rational128>(); }
         
     | 
| 
       140 
129 
     | 
    
         | 
| 
      
 130 
     | 
    
         
            +
              inline operator Complex64() const { return this->to<Complex64>(); }
         
     | 
| 
      
 131 
     | 
    
         
            +
              inline operator Complex128() const { return this->to<Complex128>(); }
         
     | 
| 
       141 
132 
     | 
    
         
             
              /*
         
     | 
| 
       142 
133 
     | 
    
         
             
            	 * Copy constructors.
         
     | 
| 
       143 
134 
     | 
    
         
             
            	 */
         
     |