Skip to content

Lapack routines' wrapper C functions #26

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 27 commits into from
Aug 22, 2019
Merged
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
1b6103f
Add cgetrf() and zgetrf()
Uditgulati Jul 10, 2019
97b5fd6
Add lu_factor
Uditgulati Jul 10, 2019
a5dd2c9
Write initial code of nm_qr()
Uditgulati Jul 21, 2019
21f2f48
Initial structre for linalg methods
Uditgulati Jul 29, 2019
4a89051
Write constructors like functions for nmattrix. Write declaration of …
Uditgulati Aug 1, 2019
51c5580
Implement geqrf C wrapper
Uditgulati Aug 1, 2019
0e2fc96
Fix matrix constructors elements switch
Uditgulati Aug 1, 2019
6ae0ce0
Implement initial part of qr
Uditgulati Aug 1, 2019
7d3b2f9
Fix geqrf function segfault
Uditgulati Aug 2, 2019
9ac53ff
Implement orgqr
Uditgulati Aug 2, 2019
ca2626a
Implement geqp3
Uditgulati Aug 3, 2019
5e5d7fe
Declare all required lapack routines
Uditgulati Aug 3, 2019
325c973
Implement potrf
Uditgulati Aug 4, 2019
9110c4c
Implement potrs
Uditgulati Aug 6, 2019
ac8a0ac
Partially implement gessdd
Uditgulati Aug 6, 2019
4cb2c26
Implement getrf
Uditgulati Aug 6, 2019
e48b1dd
Implement getrs and fix a minor bug
Uditgulati Aug 7, 2019
2bfda60
Implement getri
Uditgulati Aug 7, 2019
5411af7
Implement posv
Uditgulati Aug 10, 2019
b6409cc
Implement gesv
Uditgulati Aug 10, 2019
fe81936
Fix minor issue in gesv
Uditgulati Aug 10, 2019
1754c32
Implement lange
Uditgulati Aug 10, 2019
03cf163
Wriet tests for geqrf, orgqr and potrf
Uditgulati Aug 15, 2019
939423e
Add forward declarations for lapack wrapper functions
Uditgulati Aug 15, 2019
94126b5
Fix potrs and write it's tests
Uditgulati Aug 15, 2019
9e1d648
Add tests for getrf, getrs and getri
Uditgulati Aug 18, 2019
ecb07f7
Add tests for posv and gesv
Uditgulati Aug 18, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix matrix constructors elements switch
  • Loading branch information
Uditgulati committed Aug 1, 2019
commit 0e2fc96eb0e65abc483d24256158c6125d92ea00
134 changes: 125 additions & 9 deletions ext/ruby_nmatrix.c
Original file line number Diff line number Diff line change
Expand Up @@ -136,10 +136,68 @@ nmatrix* nmatrix_new(
for(size_t i = 0; i < ndims; ++i) {
matrix->shape[i] = shape[i];
}

matrix->elements = ALLOC_N(size_t, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix->elements[i] = elements[i];

switch(dtype) {
case nm_bool:
{
bool* temp_elements = (bool*)elements;
bool* matrix_elements = ALLOC_N(bool, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix_elements[i] = temp_elements[i];
}
matrix->elements = matrix_elements;
break;
}
case nm_int:
{
int* temp_elements = (int*)elements;
int* matrix_elements = ALLOC_N(int, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix_elements[i] = temp_elements[i];
}
matrix->elements = matrix_elements;
break;
}
case nm_float32:
{
float* temp_elements = (float*)elements;
float* matrix_elements = ALLOC_N(float, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix_elements[i] = temp_elements[i];
}
matrix->elements = matrix_elements;
break;
}
case nm_float64:
{
double* temp_elements = (double*)elements;
double* matrix_elements = ALLOC_N(double, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix_elements[i] = temp_elements[i];
}
matrix->elements = matrix_elements;
break;
}
case nm_complex32:
{
float complex* temp_elements = (float complex*)elements;
float complex* matrix_elements = ALLOC_N(float complex, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix_elements[i] = temp_elements[i];
}
matrix->elements = matrix_elements;
break;
}
case nm_complex64:
{
double complex* temp_elements = (double complex*)elements;
double complex* matrix_elements = ALLOC_N(double complex, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix_elements[i] = temp_elements[i];
}
matrix->elements = matrix_elements;
break;
}
}

return matrix;
Expand All @@ -151,15 +209,73 @@ nmatrix* matrix_copy(nmatrix* original_matrix) {
matrix->stype = original_matrix->stype;
matrix->ndims = original_matrix->ndims;
matrix->count = original_matrix->count;

matrix->shape = ALLOC_N(size_t, matrix->ndims);
for(size_t i = 0; i < ndims; ++i) {
matrix->shape[i] = original_matrix->shape[i];
}

matrix->elements = ALLOC_N(size_t, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix->elements[i] = original_matrix->elements[i];

switch(dtype) {
case nm_bool:
{
bool* temp_elements = (bool*)original_matrix->elements;
bool* matrix_elements = ALLOC_N(bool, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix_elements[i] = temp_elements[i];
}
matrix->elements = matrix_elements;
break;
}
case nm_int:
{
int* temp_elements = (int*)original_matrix->elements;
int* matrix_elements = ALLOC_N(int, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix_elements[i] = temp_elements[i];
}
matrix->elements = matrix_elements;
break;
}
case nm_float32:
{
float* temp_elements = (float*)original_matrix->elements;
float* matrix_elements = ALLOC_N(float, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix_elements[i] = temp_elements[i];
}
matrix->elements = matrix_elements;
break;
}
case nm_float64:
{
double* temp_elements = (double*)original_matrix->elements;
double* matrix_elements = ALLOC_N(double, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix_elements[i] = temp_elements[i];
}
matrix->elements = matrix_elements;
break;
}
case nm_complex32:
{
float complex* temp_elements = (float complex*)original_matrix->elements;
float complex* matrix_elements = ALLOC_N(float complex, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix_elements[i] = temp_elements[i];
}
matrix->elements = matrix_elements;
break;
}
case nm_complex64:
{
double complex* temp_elements = (double complex*)original_matrix->elements;
double complex* matrix_elements = ALLOC_N(double complex, matrix->count);
for(size_t i = 0; i < count; ++i) {
matrix_elements[i] = temp_elements[i];
}
matrix->elements = matrix_elements;
break;
}
}

return matrix;
Expand Down