18 const std::string &sSymName,
SubArguments &vSubArguments)
20 ss <<
"\ndouble " << sSymName;
22 for (
size_t i = 0;
i < vSubArguments.size();
i++)
26 vSubArguments[
i]->GenSlidingWindowDecl(ss);
29 ss <<
" int gid0=get_global_id(0);\n";
30 ss <<
" double max = -1000000000000;\n";
31 ss <<
" double value=0.0;\n";
35 if(vSubArguments[0]->GetFormulaToken()->GetType() !=
45 if(vSubArguments[dataCol]->GetFormulaToken()->GetType() !=
52 ss <<
" tmp"<<dataCol<<
"=";
53 ss << vSubArguments[dataCol]->GenSlidingWindowDeclRef()<<
";\n";
55 ss <<
"tmp"<<dataCol<<
"))\n";
56 ss <<
" tmp"<<dataCol<<
"=0;\n";
60 if(vSubArguments[dataCol + 1]->GetFormulaToken()->GetType() !=
65 tmpCur = vSubArguments[dataCol + 1]->
67 pCurDVR=
static_cast<const
69 conditionCol = pCurDVR->
GetArrays().size();
72 if(dataCol!=conditionCol)
74 if(dataCol > 0 && dataRow > 0)
87 ss <<
" int i,j,p;\n";
88 ss <<
" bool flag;\n";
89 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
92 for(
int i = 0;
i < dataCol; ++
i){
93 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
97 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
98 ss <<
" if(isnan(tmp"<<i<<
"))\n";
99 ss <<
" tmp"<<i<<
" = 0;\n";
101 ss <<
" flag = false;\n";
102 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
105 ss <<
" if (flag)\n";
108 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
109 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
112 ss <<
" tmp"<<
i<<
"=";
113 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
114 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
115 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
117 ss <<
" continue;\n";
121 ss <<
" flag=true;\n";
124 ss <<
" if (flag){\n";
125 for(
int i = 0;
i < dataCol; ++
i){
126 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
127 ss <<
" value=tmp"<<
i<<
";\n";
130 ss <<
" if(max<value)\n";
140 ss <<
" return max;\n";
145 const std::string &sSymName,
SubArguments &vSubArguments)
147 ss <<
"\ndouble " << sSymName;
149 for (
size_t i = 0;
i < vSubArguments.size();
i++)
153 vSubArguments[
i]->GenSlidingWindowDecl(ss);
156 ss <<
" int gid0=get_global_id(0);\n";
157 ss <<
" double min = 1000000000000;\n";
158 ss <<
" double value=0.0;\n";
162 if(vSubArguments[0]->GetFormulaToken()->GetType() !=
172 if(vSubArguments[dataCol]->GetFormulaToken()->GetType() !=
179 ss <<
" tmp"<<dataCol<<
"=";
180 ss << vSubArguments[dataCol]->GenSlidingWindowDeclRef()<<
";\n";
182 ss <<
"tmp"<<dataCol<<
"))\n";
183 ss <<
" tmp"<<dataCol<<
"=0;\n";
185 int conditionCol = 0;
186 int conditionRow = 0;
187 if(vSubArguments[dataCol + 1]->GetFormulaToken()->GetType() !=
192 tmpCur = vSubArguments[dataCol + 1]->
194 pCurDVR=
static_cast<const
196 conditionCol = pCurDVR->
GetArrays().size();
199 if(dataCol!=conditionCol)
201 if(dataCol > 0 && dataRow > 0)
214 ss <<
" int i,j,p;\n";
215 ss <<
" bool flag;\n";
217 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
220 for(
int i = 0;
i < dataCol; ++
i){
221 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
224 ss <<
" tmp"<<
i<<
"=";
225 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
226 ss <<
" if(isnan(tmp"<<i<<
"))\n";
227 ss <<
" tmp"<<i<<
" = 0;\n";
229 ss <<
" flag = false;\n";
230 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
233 ss <<
" if (flag)\n";
236 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
237 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
240 ss <<
" tmp"<<
i<<
"=";
241 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
242 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
243 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
245 ss <<
" continue;\n";
249 ss <<
" flag=true;\n";
252 ss <<
" if (flag){\n";
253 for(
int i = 0;
i < dataCol; ++
i){
254 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
255 ss <<
" value=tmp"<<
i<<
";\n";
258 ss <<
" if(min>value)\n";
268 ss <<
" return min;\n";
273 const std::string &sSymName,
SubArguments &vSubArguments)
275 ss <<
"\ndouble " << sSymName;
277 for (
size_t i = 0;
i < vSubArguments.size();
i++)
281 vSubArguments[
i]->GenSlidingWindowDecl(ss);
284 ss <<
" int gid0=get_global_id(0);\n";
285 ss <<
" double product = 1;\n";
286 ss <<
" double value =0;\n";
290 if(vSubArguments[0]->GetFormulaToken()->GetType() !=
300 if(vSubArguments[dataCol]->GetFormulaToken()->GetType() !=
307 ss <<
" tmp"<<dataCol<<
"=";
308 ss << vSubArguments[dataCol]->GenSlidingWindowDeclRef()<<
";\n";
310 ss <<
"tmp"<<dataCol<<
"))\n";
311 ss <<
" tmp"<<dataCol<<
"=0;\n";
313 int conditionCol = 0;
314 int conditionRow = 0;
315 if(vSubArguments[dataCol + 1]->GetFormulaToken()->GetType() !=
320 tmpCur = vSubArguments[dataCol + 1]->
322 pCurDVR=
static_cast<const
324 conditionCol = pCurDVR->
GetArrays().size();
327 if(dataCol!=conditionCol)
329 if(dataCol > 0 && dataRow > 0)
342 ss <<
" int i,j,p;\n";
343 ss <<
" bool flag;\n";
344 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
347 for(
int i = 0;
i < dataCol; ++
i){
348 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
351 ss <<
" tmp"<<
i<<
"=";
352 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
353 ss <<
" if(isnan(tmp"<<i<<
"))\n";
354 ss <<
" tmp"<<i<<
" = 0;\n";
356 ss <<
" flag = false;\n";
357 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
360 ss <<
" if (flag)\n";
363 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
364 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
367 ss <<
" tmp"<<
i<<
"=";
368 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
369 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
370 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
372 ss <<
" continue;\n";
376 ss <<
" flag=true;\n";
379 ss <<
" if (flag){\n";
380 for(
int i = 0;
i < dataCol; ++
i){
381 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
382 ss <<
" value=tmp"<<
i<<
";\n";
385 ss <<
" product*=value;\n";
390 ss <<
"product = -1;\n";
393 ss <<
"product = -1;\n";
394 ss <<
" return product;\n";
399 const std::string &sSymName,
SubArguments &vSubArguments)
401 ss <<
"\ndouble " << sSymName;
403 for (
size_t i = 0;
i < vSubArguments.size();
i++)
407 vSubArguments[
i]->GenSlidingWindowDecl(ss);
410 ss <<
" int gid0=get_global_id(0);\n";
411 ss <<
" double sum = 0;\n";
412 ss <<
" int count = 0;\n";
413 ss <<
" double value =0;\n";
417 if(vSubArguments[0]->GetFormulaToken()->GetType() !=
427 if(vSubArguments[dataCol]->GetFormulaToken()->GetType() !=
434 ss <<
" tmp"<<dataCol<<
"=";
435 ss << vSubArguments[dataCol]->GenSlidingWindowDeclRef()<<
";\n";
437 ss <<
"tmp"<<dataCol<<
"))\n";
438 ss <<
" tmp"<<dataCol<<
"=0;\n";
440 int conditionCol = 0;
441 int conditionRow = 0;
442 if(vSubArguments[dataCol + 1]->GetFormulaToken()->GetType() !=
447 tmpCur = vSubArguments[dataCol + 1]->
449 pCurDVR=
static_cast<const
451 conditionCol = pCurDVR->
GetArrays().size();
454 if(dataCol!=conditionCol)
456 if(dataCol > 0 && dataRow > 0)
469 ss <<
" int i,j,p;\n";
470 ss <<
" bool flag;\n";
472 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
475 for(
int i = 0;
i < dataCol; ++
i){
476 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
479 ss <<
" tmp"<<
i<<
"=";
480 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
481 ss <<
" if(isnan(tmp"<<i<<
"))\n";
482 ss <<
" tmp"<<i<<
" = 0;\n";
484 ss <<
" flag = false;\n";
485 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
488 ss <<
" if (flag)\n";
491 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
492 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
495 ss <<
" tmp"<<
i<<
"=";
496 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
497 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
498 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
500 ss <<
" continue;\n";
504 ss <<
" flag=true;\n";
507 ss <<
" if (flag){\n";
509 for(
int i = 0;
i < dataCol; ++
i){
510 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
511 ss <<
" value=tmp"<<
i<<
";\n";
514 ss <<
" sum+=value;\n";
523 ss <<
" if(count==0)\n";
524 ss <<
" return 0;\n";
525 ss <<
" return sum/count;\n";
530 const std::string &sSymName,
SubArguments &vSubArguments)
532 ss <<
"\ndouble " << sSymName;
534 for (
size_t i = 0;
i < vSubArguments.size();
i++)
538 vSubArguments[
i]->GenSlidingWindowDecl(ss);
541 ss <<
" int gid0=get_global_id(0);\n";
542 ss <<
" double var = 0;\n";
543 ss <<
" double mean = 0;\n";
544 ss <<
" double value =0;\n";
545 ss <<
" int count = 0;\n";
549 if(vSubArguments[0]->GetFormulaToken()->GetType() !=
559 if(vSubArguments[dataCol]->GetFormulaToken()->GetType() !=
566 ss <<
" tmp"<<dataCol<<
"=";
567 ss << vSubArguments[dataCol]->GenSlidingWindowDeclRef()<<
";\n";
569 ss <<
"tmp"<<dataCol<<
"))\n";
570 ss <<
" tmp"<<dataCol<<
"=0;\n";
572 int conditionCol = 0;
573 int conditionRow = 0;
574 if(vSubArguments[dataCol + 1]->GetFormulaToken()->GetType() !=
579 tmpCur = vSubArguments[dataCol + 1]->
581 pCurDVR=
static_cast<const
583 conditionCol = pCurDVR->
GetArrays().size();
586 if(dataCol!=conditionCol)
588 if(dataCol > 0 && dataRow > 0)
601 ss <<
" int i,j,p;\n";
602 ss <<
" bool flag;\n";
604 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
607 for(
int i = 0;
i < dataCol; ++
i){
608 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
611 ss <<
" tmp"<<
i<<
"=";
612 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
613 ss <<
" if(isnan(tmp"<<i<<
"))\n";
614 ss <<
" tmp"<<i<<
" = 0;\n";
616 ss <<
" flag = false;\n";
617 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
620 ss <<
" if (flag)\n";
623 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
624 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
627 ss <<
" tmp"<<
i<<
"=";
628 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
629 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
630 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
632 ss <<
" continue;\n";
636 ss <<
" flag=true;\n";
639 ss <<
" if (flag){\n";
641 for(
int i = 0;
i < dataCol; ++
i){
642 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
643 ss <<
" value=tmp"<<
i<<
";\n";
646 ss <<
" mean+=value;\n";
650 ss <<
" if(count<=1)\n";
651 ss <<
" return 0;\n";
653 ss <<
" mean/=count;\n";
655 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
658 for(
int i = 0;
i < dataCol; ++
i){
659 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
662 ss <<
" tmp"<<
i<<
"=";
663 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
664 ss <<
" if(isnan(tmp"<<i<<
"))\n";
665 ss <<
" tmp"<<i<<
" = 0;\n";
667 ss <<
" flag = false;\n";
668 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
671 ss <<
" if (flag)\n";
674 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
675 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
678 ss <<
" tmp"<<
i<<
"=";
679 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
680 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
681 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
683 ss <<
" continue;\n";
687 ss <<
" flag=true;\n";
690 ss <<
" if (flag){\n";
691 for(
int i = 0;
i < dataCol; ++
i){
692 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
693 ss <<
" value=tmp"<<
i<<
";\n";
696 ss <<
" var+=pow(mean-value,2);\n";
700 ss <<
" var = sqrt( var/(count-1) );\n";
707 ss <<
" return var;\n";
712 const std::string &sSymName,
SubArguments &vSubArguments)
714 ss <<
"\ndouble " << sSymName;
716 for (
size_t i = 0;
i < vSubArguments.size();
i++)
720 vSubArguments[
i]->GenSlidingWindowDecl(ss);
723 ss <<
" int gid0=get_global_id(0);\n";
724 ss <<
" double var = 0;\n";
725 ss <<
" double mean = 0;\n";
726 ss <<
" double value =0;\n";
727 ss <<
" int count = 0;\n";
731 if(vSubArguments[0]->GetFormulaToken()->GetType() !=
741 if(vSubArguments[dataCol]->GetFormulaToken()->GetType() !=
748 ss <<
" tmp"<<dataCol<<
"=";
749 ss << vSubArguments[dataCol]->GenSlidingWindowDeclRef()<<
";\n";
751 ss <<
"tmp"<<dataCol<<
"))\n";
752 ss <<
" tmp"<<dataCol<<
"=0;\n";
754 int conditionCol = 0;
755 int conditionRow = 0;
756 if(vSubArguments[dataCol + 1]->GetFormulaToken()->GetType() !=
761 tmpCur = vSubArguments[dataCol + 1]->
763 pCurDVR=
static_cast<const
765 conditionCol = pCurDVR->
GetArrays().size();
768 if(dataCol!=conditionCol)
770 if(dataCol > 0 && dataRow > 0)
783 ss <<
" int i,j,p;\n";
784 ss <<
" bool flag;\n";
786 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
789 for(
int i = 0;
i < dataCol; ++
i){
790 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
793 ss <<
" tmp"<<
i<<
"=";
794 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
795 ss <<
" if(isnan(tmp"<<i<<
"))\n";
796 ss <<
" tmp"<<i<<
" = 0;\n";
798 ss <<
" flag = false;\n";
799 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
802 ss <<
" if (flag)\n";
805 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
806 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
809 ss <<
" tmp"<<
i<<
"=";
810 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
811 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
812 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
814 ss <<
" continue;\n";
818 ss <<
" flag=true;\n";
821 ss <<
" if (flag){\n";
823 for(
int i = 0;
i < dataCol; ++
i){
824 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
825 ss <<
" value=tmp"<<
i<<
";\n";
828 ss <<
" mean+=value;\n";
832 ss <<
" if(count<=1)\n";
833 ss <<
" return 0;\n";
835 ss <<
" mean/=count;\n";
837 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
840 for(
int i = 0;
i < dataCol; ++
i){
841 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
844 ss <<
" tmp"<<
i<<
"=";
845 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
846 ss <<
" if(isnan(tmp"<<i<<
"))\n";
847 ss <<
" tmp"<<i<<
" = 0;\n";
849 ss <<
" flag = false;\n";
850 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
853 ss <<
" if (flag)\n";
856 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
857 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
860 ss <<
" tmp"<<
i<<
"=";
861 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
862 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
863 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
865 ss <<
" continue;\n";
869 ss <<
" flag=true;\n";
872 ss <<
" if (flag){\n";
873 for(
int i = 0;
i < dataCol; ++
i){
874 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
875 ss <<
" value=tmp"<<
i<<
";\n";
878 ss <<
" var+=pow(mean-value,2);\n";
882 ss <<
" var = sqrt( var/count );\n";
889 ss <<
" return var;\n";
894 const std::string &sSymName,
SubArguments &vSubArguments)
896 ss <<
"\ndouble " << sSymName;
898 for (
size_t i = 0;
i < vSubArguments.size();
i++)
902 vSubArguments[
i]->GenSlidingWindowDecl(ss);
905 ss <<
" int gid0=get_global_id(0);\n";
906 ss <<
" double sum = 0;\n";
907 ss <<
" double value =0;\n";
911 if(vSubArguments[0]->GetFormulaToken()->GetType() !=
921 if(vSubArguments[dataCol]->GetFormulaToken()->GetType() !=
928 ss <<
" tmp"<<dataCol<<
"=";
929 ss << vSubArguments[dataCol]->GenSlidingWindowDeclRef()<<
";\n";
931 ss <<
"tmp"<<dataCol<<
"))\n";
932 ss <<
" tmp"<<dataCol<<
"=0;\n";
934 int conditionCol = 0;
935 int conditionRow = 0;
936 if(vSubArguments[dataCol + 1]->GetFormulaToken()->GetType() !=
941 tmpCur = vSubArguments[dataCol + 1]->
943 pCurDVR=
static_cast<const
945 conditionCol = pCurDVR->
GetArrays().size();
948 if(dataCol!=conditionCol)
950 if(dataCol > 0 && dataRow > 0)
963 ss <<
" int i,j,p;\n";
964 ss <<
" bool flag;\n";
966 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
969 for(
int i = 0;
i < dataCol; ++
i){
970 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
973 ss <<
" tmp"<<
i<<
"=";
974 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
975 ss <<
" if(isnan(tmp"<<i<<
"))\n";
976 ss <<
" tmp"<<i<<
" = 0;\n";
978 ss <<
" flag = false;\n";
979 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
982 ss <<
" if (flag)\n";
985 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
986 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
989 ss <<
" tmp"<<
i<<
"=";
990 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
991 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
992 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
994 ss <<
" continue;\n";
998 ss <<
" flag=true;\n";
1001 ss <<
" if (flag){\n";
1002 for(
int i = 0;
i < dataCol; ++
i){
1003 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
1004 ss <<
" value=tmp"<<
i<<
";\n";
1007 ss <<
" sum+=value;\n";
1012 ss <<
"sum = -1;\n";
1015 ss <<
"sum = -1;\n";
1016 ss <<
" return sum;\n";
1021 const std::string &sSymName,
SubArguments &vSubArguments)
1023 ss <<
"\ndouble " << sSymName;
1025 for (
size_t i = 0;
i < vSubArguments.size();
i++)
1029 vSubArguments[
i]->GenSlidingWindowDecl(ss);
1032 ss <<
" int gid0=get_global_id(0);\n";
1033 ss <<
" double var = 0;\n";
1034 ss <<
" double mean = 0;\n";
1035 ss <<
" double value =0;\n";
1036 ss <<
" int count = 0;\n";
1040 if(vSubArguments[0]->GetFormulaToken()->GetType() !=
1050 if(vSubArguments[dataCol]->GetFormulaToken()->GetType() !=
1057 ss <<
" tmp"<<dataCol<<
"=";
1058 ss << vSubArguments[dataCol]->GenSlidingWindowDeclRef()<<
";\n";
1060 ss <<
"tmp"<<dataCol<<
"))\n";
1061 ss <<
" tmp"<<dataCol<<
"=0;\n";
1063 int conditionCol = 0;
1064 int conditionRow = 0;
1065 if(vSubArguments[dataCol + 1]->GetFormulaToken()->GetType() !=
1070 tmpCur = vSubArguments[dataCol + 1]->
1072 pCurDVR=
static_cast<const
1074 conditionCol = pCurDVR->
GetArrays().size();
1077 if(dataCol!=conditionCol)
1079 if(dataCol > 0 && dataRow > 0)
1092 ss <<
" int i,j,p;\n";
1093 ss <<
" bool flag;\n";
1095 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
1098 for(
int i = 0;
i < dataCol; ++
i){
1099 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
1102 ss <<
" tmp"<<
i<<
"=";
1103 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
1104 ss <<
" if(isnan(tmp"<<i<<
"))\n";
1105 ss <<
" tmp"<<i<<
" = 0;\n";
1107 ss <<
" flag = false;\n";
1108 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
1111 ss <<
" if (flag)\n";
1114 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
1115 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
1118 ss <<
" tmp"<<
i<<
"=";
1119 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
1120 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
1121 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
1123 ss <<
" continue;\n";
1127 ss <<
" flag=true;\n";
1130 ss <<
" if (flag){\n";
1131 ss <<
" count++;\n";
1132 for(
int i = 0;
i < dataCol; ++
i){
1133 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
1134 ss <<
" value=tmp"<<
i<<
";\n";
1137 ss <<
" mean+=value;\n";
1141 ss <<
" if(count<=1)\n";
1142 ss <<
" return 0;\n";
1144 ss <<
" mean/=count;\n";
1146 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
1149 for(
int i = 0;
i < dataCol; ++
i){
1150 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
1153 ss <<
" tmp"<<
i<<
"=";
1154 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
1155 ss <<
" if(isnan(tmp"<<i<<
"))\n";
1156 ss <<
" tmp"<<i<<
" = 0;\n";
1158 ss <<
" flag = false;\n";
1159 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
1162 ss <<
" if (flag)\n";
1165 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
1166 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
1169 ss <<
" tmp"<<
i<<
"=";
1170 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
1171 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
1172 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
1174 ss <<
" continue;\n";
1178 ss <<
" flag=true;\n";
1181 ss <<
" if (flag){\n";
1182 for(
int i = 0;
i < dataCol; ++
i){
1183 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
1184 ss <<
" value=tmp"<<
i<<
";\n";
1187 ss <<
" var+=pow(mean-value,2);\n";
1191 ss <<
" var = var/(count-1);\n";
1194 ss <<
"var = -1;\n";
1197 ss <<
"var = -1;\n";
1198 ss <<
" return var;\n";
1203 const std::string &sSymName,
SubArguments &vSubArguments)
1205 ss <<
"\ndouble " << sSymName;
1207 for (
size_t i = 0;
i < vSubArguments.size();
i++)
1211 vSubArguments[
i]->GenSlidingWindowDecl(ss);
1214 ss <<
" int gid0=get_global_id(0);\n";
1215 ss <<
" double var = 0;\n";
1216 ss <<
" double mean = 0;\n";
1217 ss <<
" double value =0;\n";
1218 ss <<
" int count = 0;\n";
1222 if(vSubArguments[0]->GetFormulaToken()->GetType() !=
1232 if(vSubArguments[dataCol]->GetFormulaToken()->GetType() !=
1239 ss <<
" tmp"<<dataCol<<
"=";
1240 ss << vSubArguments[dataCol]->GenSlidingWindowDeclRef()<<
";\n";
1242 ss <<
"tmp"<<dataCol<<
"))\n";
1243 ss <<
" tmp"<<dataCol<<
"=0;\n";
1245 int conditionCol = 0;
1246 int conditionRow = 0;
1247 if(vSubArguments[dataCol + 1]->GetFormulaToken()->GetType() !=
1252 tmpCur = vSubArguments[dataCol + 1]->
1254 pCurDVR=
static_cast<const
1256 conditionCol = pCurDVR->
GetArrays().size();
1259 if(dataCol!=conditionCol)
1261 if(dataCol > 0 && dataRow > 0)
1274 ss <<
" int i,j,p;\n";
1275 ss <<
" bool flag;\n";
1277 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
1280 for(
int i = 0;
i < dataCol; ++
i){
1281 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
1284 ss <<
" tmp"<<
i<<
"=";
1285 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
1286 ss <<
" if(isnan(tmp"<<i<<
"))\n";
1287 ss <<
" tmp"<<i<<
" = 0;\n";
1289 ss <<
" flag = false;\n";
1290 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
1293 ss <<
" if (flag)\n";
1296 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
1297 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
1300 ss <<
" tmp"<<
i<<
"=";
1301 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
1302 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
1303 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
1305 ss <<
" continue;\n";
1309 ss <<
" flag=true;\n";
1312 ss <<
" if (flag){\n";
1313 ss <<
" count++;\n";
1314 for(
int i = 0;
i < dataCol; ++
i){
1315 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
1316 ss <<
" value=tmp"<<
i<<
";\n";
1319 ss <<
" mean+=value;\n";
1323 ss <<
" if(count<=0)\n";
1324 ss <<
" return 0;\n";
1326 ss <<
" mean/=count;\n";
1328 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
1331 for(
int i = 0;
i < dataCol; ++
i){
1332 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
1335 ss <<
" tmp"<<
i<<
"=";
1336 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
1337 ss <<
" if(isnan(tmp"<<i<<
"))\n";
1338 ss <<
" tmp"<<i<<
" = 0;\n";
1340 ss <<
" flag = false;\n";
1341 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
1344 ss <<
" if (flag)\n";
1347 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
1348 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
1351 ss <<
" tmp"<<
i<<
"=";
1352 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
1353 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
1354 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
1356 ss <<
" continue;\n";
1360 ss <<
" flag=true;\n";
1363 ss <<
" if (flag){\n";
1364 for(
int i = 0;
i < dataCol; ++
i){
1365 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
1366 ss <<
" value=tmp"<<
i<<
";\n";
1369 ss <<
" var+=pow(mean-value,2);\n";
1373 ss <<
" var = var/count;\n";
1376 ss <<
"var = -1;\n";
1379 ss <<
"var = -1;\n";
1380 ss <<
" return var;\n";
1385 const std::string &sSymName,
SubArguments &vSubArguments)
1387 ss <<
"\ndouble " << sSymName;
1389 for (
size_t i = 0;
i < vSubArguments.size();
i++)
1393 vSubArguments[
i]->GenSlidingWindowDecl(ss);
1396 ss <<
" int gid0=get_global_id(0);\n";
1397 ss <<
" double value=0;\n";
1398 ss <<
" int count = 0;\n";
1402 if(vSubArguments[0]->GetFormulaToken()->GetType() !=
1412 if(vSubArguments[dataCol]->GetFormulaToken()->GetType() !=
1418 ->GetFormulaToken());
1419 ss <<
" tmp"<<dataCol<<
"=";
1420 ss << vSubArguments[dataCol]->GenSlidingWindowDeclRef()<<
";\n";
1422 ss <<
"tmp"<<dataCol<<
"))\n";
1423 ss <<
" tmp"<<dataCol<<
"=DBL_MIN;\n";
1425 int conditionCol = 0;
1426 int conditionRow = 0;
1427 if(vSubArguments[dataCol + 1]->GetFormulaToken()->GetType() !=
1432 tmpCur = vSubArguments[dataCol + 1]
1433 ->GetFormulaToken();
1434 pCurDVR=
static_cast<const
1436 conditionCol = pCurDVR->
GetArrays().size();
1439 if(dataCol!=conditionCol)
1441 if(dataCol > 0 && dataRow > 0)
1445 ->GetFormulaToken();
1454 ss <<
" int i,j,p;\n";
1455 ss <<
" bool flag;\n";
1457 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
1460 for(
int i = 0;
i < dataCol; ++
i){
1461 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
1464 ss <<
" tmp"<<
i<<
"=";
1465 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
1466 ss <<
" if(isnan(tmp"<<i<<
"))\n";
1467 ss <<
" tmp"<<i<<
" = 0;\n";
1469 ss <<
" flag = false;\n";
1470 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
1473 ss <<
" if (flag)\n";
1476 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
1477 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
1480 ss <<
" tmp"<<
i<<
"=";
1481 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
1482 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
1483 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
1485 ss <<
" continue;\n";
1489 ss <<
" flag=true;\n";
1492 ss <<
" if (flag){\n";
1493 for(
int i = 0;
i < dataCol; ++
i){
1494 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
1495 ss <<
" value=tmp"<<
i<<
";\n";
1498 ss <<
" if(value > DBL_MIN)\n";
1499 ss <<
" count++;\n";
1504 ss <<
"count = -1;\n";
1507 ss <<
"count = -1;\n";
1508 ss <<
" return count;\n";
1513 const std::string &sSymName,
SubArguments &vSubArguments)
1515 ss <<
"\ndouble " << sSymName;
1517 for (
size_t i = 0;
i < vSubArguments.size();
i++)
1521 vSubArguments[
i]->GenSlidingWindowDecl(ss);
1524 ss <<
" int gid0=get_global_id(0);\n";
1525 ss <<
" double value=0;\n";
1526 ss <<
" int count = 0;\n";
1530 if(vSubArguments[0]->GetFormulaToken()->GetType() !=
1540 if(vSubArguments[dataCol]->GetFormulaToken()->GetType() !=
1546 ->GetFormulaToken());
1547 ss <<
" tmp"<<dataCol<<
"=";
1548 ss << vSubArguments[dataCol]->GenSlidingWindowDeclRef()<<
";\n";
1550 ss <<
"tmp"<<dataCol<<
"))\n";
1551 ss <<
" tmp"<<dataCol<<
"=DBL_MIN;\n";
1553 int conditionCol = 0;
1554 int conditionRow = 0;
1555 if(vSubArguments[dataCol + 1]->GetFormulaToken()->GetType() !=
1560 tmpCur = vSubArguments[dataCol + 1]->
1562 pCurDVR=
static_cast<const
1564 conditionCol = pCurDVR->
GetArrays().size();
1567 if(dataCol!=conditionCol)
1569 if(dataCol > 0 && dataRow > 0)
1582 ss <<
" int i,j,p;\n";
1583 ss <<
" bool flag;\n";
1585 ss <<
" for(p = 1;p < " << dataRow <<
";++p)\n";
1588 for(
int i = 0;
i < dataCol; ++
i){
1589 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
1592 ss <<
" tmp"<<
i<<
"=";
1593 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
1594 ss <<
" if(isnan(tmp"<<i<<
"))\n";
1595 ss <<
" tmp"<<i<<
" = 0;\n";
1597 ss <<
" flag = false;\n";
1598 ss <<
" for(j = 1; j < " << conditionRow <<
";++j)\n";
1601 ss <<
" if (flag)\n";
1604 for(
int i = dataCol + 1;
i < dataCol + 1 + conditionCol; ++
i){
1605 if(vSubArguments[
i]->GetFormulaToken()->GetType() !=
1608 ss <<
" tmp"<<
i<<
"=";
1609 ss << vSubArguments[i]->GenSlidingWindowDeclRef()<<
";\n";
1610 ss <<
" if(!isnan(tmp"<<i<<
")){\n";
1611 ss <<
" if(tmp"<<(i-dataCol-1)<<
"!=tmp";
1613 ss <<
" continue;\n";
1617 ss <<
" flag=true;\n";
1620 ss <<
" if (flag){\n";
1621 for(
int i = 0;
i < dataCol; ++
i){
1622 ss <<
" if(tmp"<<dataCol<<
"=="<<(
i+1)<<
"){\n";
1623 ss <<
" value=tmp"<<
i<<
";\n";
1626 ss <<
" if(value > DBL_MIN)\n";
1627 ss <<
" count++;\n";
1632 ss <<
"count = -1;\n";
1635 ss <<
"count = -1;\n";
1636 ss <<
" return count;\n";
virtual std::string BinFuncName() const override
virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override
virtual std::string BinFuncName() const override
virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override
virtual std::string BinFuncName() const override
virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override
virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override
static void GenTmpVariables(std::stringstream &ss, const SubArguments &vSubArguments)
virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override
virtual std::string BinFuncName() const override
virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override
virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override
virtual std::string BinFuncName() const override
virtual std::string BinFuncName() const override
std::vector< DynamicKernelArgumentRef > SubArguments
Arguments that are actually compile-time constant string Currently, only the hash is passed...
virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override
virtual std::string BinFuncName() const override
virtual std::string BinFuncName() const override
virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override
virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override
virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override
virtual std::string BinFuncName() const override
virtual std::string BinFuncName() const override
virtual std::string BinFuncName() const override