add print and sprint tensor and split dim end tensor

This commit is contained in:
2024-02-20 01:20:15 +01:00
parent ede9ce4d59
commit cdc4ddf373
8 changed files with 588 additions and 52 deletions
+29 -2
View File
@@ -121,6 +121,30 @@ dimension* sub_dim_tail(dimension *root, size_t subdim){
}
return NULL;
}
/*
void split_dim_part(dimension *root, dimension **part_1, dimension **part_2, size_t sz_nb_minus_part ) */
void split_dim_part(dimension *root, dimension **part_1, dimension **part_2, size_t pivotSplit, size_t rangeInPivot ) {
if(pivotSplit < root->size){
if(rangeInPivot < root->perm[pivotSplit]){
//size_t sz_part1= (root->rank * sz_nb_minus_part)/(root->perm[(root->size)-1]);
//printf("sz_part1 :%ld \n",sz_part1);
*part_1 = init_copy_dim(root->perm, root->size);
((*part_1)->perm[pivotSplit]) -= rangeInPivot;
updateRankDim(*part_1);
/*if(sz_nb_minus_part <2)
*part_2 = init_copy_dim((root->perm), root->size-1 );
else{*/
*part_2 = init_copy_dim((root->perm), root->size );
(*part_2)->perm[pivotSplit] = rangeInPivot ;
//}
updateRankDim(*part_2);
}
}
}
void add_dimension(dimension **d, dimension *d0, dimension *d1) {
(*d) = create_dim(d0->size + d1->size);
for (size_t i = 0; i < d0->size; i++) (*d)->perm[i] = d0->perm[i];
@@ -146,10 +170,13 @@ void min_dimension(dimension **d, dimension *d0, dimension *d1) {
void printDebug_dimension(dimension *d,char *msg){
printf("%s / dim->size = %ld | dim->rank = %ld \n",msg,d->size,d->rank);
printf("(%s)->size = %ld | (%s)->rank = %ld \n",msg,d->size,msg,d->rank);
for(size_t i=0; i<d->size; ++i)
printf("[%ld: %ld] |", i,d->perm[i]);
printf("\n");
if(endian)
printf("litle endian (true)\n");
else
printf("litle endian (false) \n");
}
void updateRankDim(dimension *dim){
+11
View File
@@ -5,6 +5,15 @@
extern bool endian;
bool isLessEqThan(long int a, long int b) ;
bool isLessThan(long int a, long int b) ;
bool isGreatEqThan(long int a, long int b) ;
bool isGreatThan(long int a, long int b) ;
long int incr(long int i) ;
long int decr(long int i) ;
typedef struct PERMUTATION_TYPE_SIZE_T dimension ;
dimension * create_dim(size_t size);
@@ -22,6 +31,8 @@ dimension* sub_copy_minus_dim_tail(dimension *t, size_t minusSubdim);
dimension* sub_copy_dim_head(dimension *t, size_t sub_copydim);
dimension* sub_copy_dim_tail(dimension *t, size_t sub_copydim);
void split_dim_part(dimension *root, dimension **part_1, dimension **part_2, size_t pivotSplit, size_t rangeInPivot );
void add_copy_dimension(dimension **d, dimension *d0, dimension *d1);
void min_copy_dimension(dimension **d, dimension *d0, dimension *d1);
+73
View File
@@ -22,6 +22,7 @@ TEST(dimension0){
EXPECT_EQ(D->size,5);
free_dimension(D);
}
TEST(rank){
dimension *D=create_dim(4);
@@ -33,7 +34,71 @@ TEST(rank){
updateRankDim(D);
EXPECT_EQ(D->rank, 180);
free_dimension(D);
}
TEST(SplitDim){
dimension *D=create_dim(4);
D->perm[0]=2;
D->perm[1]=3;
D->perm[2]=5;
D->perm[3]=6;
updateRankDim(D);
printDebug_dimension(D," D root");
dimension *d_part1 = NULL,*d_part2=NULL;
split_dim_part(D, &d_part1, &d_part2, 1, 2);
printDebug_dimension(d_part1," part1 from Root");
printDebug_dimension(d_part2," part2 from Root");
dimension *ad;
add_dimension(&ad,d_part1, d_part2);
printDebug_dimension(D," D root");
printDebug_dimension(ad," ad ");
free_dimension(D);
free_dimension(ad);
free(d_part1);
free(d_part2);
}
TEST(SplitDim_2){
dimension *D=create_dim(4);
D->perm[0]=2;
D->perm[1]=3;
D->perm[2]=5;
D->perm[3]=6;
updateRankDim(D);
printDebug_dimension(D," D root");
dimension *d_part1 = NULL,*d_part2=NULL;
split_dim_part(D, &d_part1, &d_part2, 3, 2);
printDebug_dimension(d_part1," part1 from Root");
printDebug_dimension(d_part2," part2 from Root");
dimension *ad;
add_dimension(&ad,d_part1, d_part2);
printDebug_dimension(D," D root");
printDebug_dimension(ad," ad ");
free_dimension(D);
free_dimension(ad);
free(d_part1);
free(d_part2);
}
TEST(SubDim){
dimension *D=create_dim(4);
D->perm[0]=2;
@@ -49,6 +114,9 @@ TEST(SubDim){
dimension *d_tail2 = sub_minus_dim_tail(D,2);
EXPECT_EQ(d_tail2->rank, 5*6);
free_dimension(D);
free(d_tail2);
free(d_head2);
}
TEST(SubDim){
@@ -67,6 +135,9 @@ TEST(SubDim){
dimension *d_tail2 = sub_minus_dim_tail(D,2);
EXPECT_EQ(d_tail2->rank, 5*6);
free_dimension(D);
free(d_tail2);
free(d_head2);
}
TEST(Coord_linear){
@@ -86,6 +157,8 @@ TEST(Coord_linear){
}
EXPECT_EQ(line, LineFromCoord(coord, D));
free_dimension(D);
free(coord);
}
int main(int argc, char **argv){