File Coverage

pp-rCpolynomial.c
Criterion Covered Total %
statement 47 84 55.9
branch 30 132 22.7
condition n/a
subroutine n/a
pod n/a
total 77 216 35.6


line stmt bran cond sub pod time code
1              
2             #line 453 "lib/PDL/PP.pm"
3             /*
4             * THIS FILE WAS GENERATED BY PDL::PP from complex.pd! Do not modify!
5             */
6              
7             #define PDL_FREE_CODE(trans, destroy, comp_free_code, ntpriv_free_code) \
8             if (destroy) { \
9             comp_free_code \
10             } \
11             if ((trans)->dims_redone) { \
12             ntpriv_free_code \
13             }
14              
15             #include "EXTERN.h"
16             #include "perl.h"
17             #include "XSUB.h"
18             #include "pdl.h"
19             #include "pdlcore.h"
20             #define PDL PDL_Complex
21             extern Core* PDL; /* Structure hold core C functions */
22             #line 23 "pp-rCpolynomial.c"
23              
24             #include
25              
26             #ifndef M_PI
27             # define M_PI 3.1415926535897932384626433832795029
28             #endif
29             #ifndef M_2PI
30             # define M_2PI (2. * M_PI)
31             #endif
32              
33             #if __GLIBC__ > 1 && (defined __USE_MISC || defined __USE_XOPEN || defined __USE_ISOC9X)
34             # define CABS(r,i) hypot (r, i)
35             #else
36             static double
37             CABS (double r, double i)
38             {
39             double t;
40              
41             if (r < 0) r = - r;
42             if (i < 0) i = - i;
43              
44             if (i > r)
45             {
46             t = r; r = i; i = t;
47             }
48              
49             if (r + i == r)
50             return r;
51              
52             t = i / r;
53             return r * sqrt (1 + t*t);
54             }
55             #endif
56              
57             #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 && defined __USE_GNU
58             # define SINCOS(x,s,c) sincos ((x), &(s), &(c))
59             #else
60             # define SINCOS(x,s,c) \
61             (s) = sin (x); \
62             (c) = cos (x);
63             #endif
64              
65              
66             #define CSQRT(type,ar,ai,cr,ci) \
67             type mag = CABS ((ar), (ai)); \
68             type t; \
69             \
70             if (mag == 0) \
71             (cr) = (ci) = 0; \
72             else if ((ar) > 0) \
73             { \
74             t = sqrt (0.5 * (mag + (ar))); \
75             (cr) = t; \
76             (ci) = 0.5 * (ai) / t; \
77             } \
78             else \
79             { \
80             t = sqrt (0.5 * (mag - (ar))); \
81             \
82             if ((ai) < 0) \
83             t = -t; \
84             \
85             (cr) = 0.5 * (ai) / t; \
86             (ci) = t; \
87             }
88              
89              
90             #define CLOG(ar,ai,cr,ci) \
91             (cr) = log (CABS ((ar), (ai))); \
92             (ci) = atan2 ((ai), (ar));
93              
94              
95             #line 1857 "lib/PDL/PP.pm"
96             pdl_error pdl_rCpolynomial_redodims(pdl_trans *__privtrans) {
97             pdl_error PDL_err = {0, NULL, 0};
98             #line 99 "pp-rCpolynomial.c"
99 2           __privtrans->ind_sizes[0] = 2;
100 2 50         PDL_RETERROR(PDL_err, PDL->redodims_default(__privtrans));
101 2           return PDL_err;
102             }
103              
104              
105             #line 1857 "lib/PDL/PP.pm"
106             pdl_error pdl_rCpolynomial_readdata(pdl_trans *__privtrans) {
107             pdl_error PDL_err = {0, NULL, 0};
108             #line 109 "pp-rCpolynomial.c"
109 2           register PDL_Indx __m_size = __privtrans->ind_sizes[1];
110 2           register PDL_Indx __n_size = __privtrans->ind_sizes[2];
111 2 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in rCpolynomial:" "broadcast.incs NULL");
112             /* broadcastloop declarations */
113             int __brcloopval;
114             register PDL_Indx __tind0,__tind1; /* counters along dim */
115 2           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
116             /* dims here are how many steps along those dims */
117 2           register PDL_Indx __tinc0_coeffs = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
118 2           register PDL_Indx __tinc0_x = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
119 2           register PDL_Indx __tinc0_out = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
120 2           register PDL_Indx __tinc1_coeffs = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
121 2           register PDL_Indx __tinc1_x = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
122 2           register PDL_Indx __tinc1_out = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
123             #define PDL_BROADCASTLOOP_START_rCpolynomial_readdata PDL_BROADCASTLOOP_START( \
124             readdata, \
125             __privtrans->broadcast, \
126             __privtrans->vtable, \
127             coeffs_datap += __offsp[0]; \
128             x_datap += __offsp[1]; \
129             out_datap += __offsp[2]; \
130             , \
131             ( ,coeffs_datap += __tinc1_coeffs - __tinc0_coeffs * __tdims0 \
132             ,x_datap += __tinc1_x - __tinc0_x * __tdims0 \
133             ,out_datap += __tinc1_out - __tinc0_out * __tdims0 \
134             ), \
135             ( ,coeffs_datap += __tinc0_coeffs \
136             ,x_datap += __tinc0_x \
137             ,out_datap += __tinc0_out \
138             ) \
139             )
140             #define PDL_BROADCASTLOOP_END_rCpolynomial_readdata PDL_BROADCASTLOOP_END( \
141             __privtrans->broadcast, \
142             coeffs_datap -= __tinc1_coeffs * __tdims1 + __offsp[0]; \
143             x_datap -= __tinc1_x * __tdims1 + __offsp[1]; \
144             out_datap -= __tinc1_out * __tdims1 + __offsp[2]; \
145             )
146 2           register PDL_Indx __inc_coeffs_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_coeffs_n;
147 2           register PDL_Indx __inc_out_c = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_out_c;register PDL_Indx __inc_out_m = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,1)]; (void)__inc_out_m;
148 2           register PDL_Indx __inc_x_c = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_x_c;register PDL_Indx __inc_x_m = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_x_m;
149             #ifndef PDL_DECLARE_PARAMS_rCpolynomial_1
150             #define PDL_DECLARE_PARAMS_rCpolynomial_1(PDL_TYPE_OP,PDL_PPSYM_OP) \
151             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, coeffs, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
152             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, x, (__privtrans->pdls[1]), 1, PDL_PPSYM_OP) \
153             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, out, (__privtrans->pdls[2]), 1, PDL_PPSYM_OP)
154             #endif
155             #define PDL_IF_BAD(t,f) f
156 2           switch (__privtrans->__datatype) { /* Start generic switch */
157 0           case PDL_F: {
158 0 0         PDL_DECLARE_PARAMS_rCpolynomial_1(PDL_Float,F)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
159 0 0         PDL_BROADCASTLOOP_START_rCpolynomial_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
160 0 0         {/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
161 0           double xr = 1;
162 0           double xi = 0;
163 0           double or = 0;
164 0           double oi = 0;
165             double Xr;
166 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
167 0           or += (coeffs_datap)[0+(__inc_coeffs_n*(n))] * xr;
168 0           oi += (coeffs_datap)[0+(__inc_coeffs_n*(n))] * xi;
169 0           Xr = xr;
170 0           xr = Xr * (x_datap)[0+(__inc_x_c*(0))+(__inc_x_m*(m))] - xi * (x_datap)[0+(__inc_x_c*(1))+(__inc_x_m*(m))];
171 0           xi = xi * (x_datap)[0+(__inc_x_c*(0))+(__inc_x_m*(m))] + Xr * (x_datap)[0+(__inc_x_c*(1))+(__inc_x_m*(m))];
172             }} /* Close n */
173 0           (out_datap)[0+(__inc_out_c*(0))+(__inc_out_m*(m))] = or;
174 0           (out_datap)[0+(__inc_out_c*(1))+(__inc_out_m*(m))] = oi;
175             }} /* Close m */
176 0 0         }PDL_BROADCASTLOOP_END_rCpolynomial_readdata
    0          
177 0           } break;
178 2           case PDL_D: {
179 2 50         PDL_DECLARE_PARAMS_rCpolynomial_1(PDL_Double,D)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
180 8 50         PDL_BROADCASTLOOP_START_rCpolynomial_readdata {
    50          
    50          
    50          
    50          
    100          
    100          
181 6 100         {/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
182 4           double xr = 1;
183 4           double xi = 0;
184 4           double or = 0;
185 4           double oi = 0;
186             double Xr;
187 16 100         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
188 12           or += (coeffs_datap)[0+(__inc_coeffs_n*(n))] * xr;
189 12           oi += (coeffs_datap)[0+(__inc_coeffs_n*(n))] * xi;
190 12           Xr = xr;
191 12           xr = Xr * (x_datap)[0+(__inc_x_c*(0))+(__inc_x_m*(m))] - xi * (x_datap)[0+(__inc_x_c*(1))+(__inc_x_m*(m))];
192 12           xi = xi * (x_datap)[0+(__inc_x_c*(0))+(__inc_x_m*(m))] + Xr * (x_datap)[0+(__inc_x_c*(1))+(__inc_x_m*(m))];
193             }} /* Close n */
194 4           (out_datap)[0+(__inc_out_c*(0))+(__inc_out_m*(m))] = or;
195 4           (out_datap)[0+(__inc_out_c*(1))+(__inc_out_m*(m))] = oi;
196             }} /* Close m */
197 2 50         }PDL_BROADCASTLOOP_END_rCpolynomial_readdata
    50          
198 2           } break;
199 0           case PDL_LD: {
200 0 0         PDL_DECLARE_PARAMS_rCpolynomial_1(PDL_LDouble,E)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
201 0 0         PDL_BROADCASTLOOP_START_rCpolynomial_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
202 0 0         {/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
203 0           double xr = 1;
204 0           double xi = 0;
205 0           double or = 0;
206 0           double oi = 0;
207             double Xr;
208 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
209 0           or += (coeffs_datap)[0+(__inc_coeffs_n*(n))] * xr;
210 0           oi += (coeffs_datap)[0+(__inc_coeffs_n*(n))] * xi;
211 0           Xr = xr;
212 0           xr = Xr * (x_datap)[0+(__inc_x_c*(0))+(__inc_x_m*(m))] - xi * (x_datap)[0+(__inc_x_c*(1))+(__inc_x_m*(m))];
213 0           xi = xi * (x_datap)[0+(__inc_x_c*(0))+(__inc_x_m*(m))] + Xr * (x_datap)[0+(__inc_x_c*(1))+(__inc_x_m*(m))];
214             }} /* Close n */
215 0           (out_datap)[0+(__inc_out_c*(0))+(__inc_out_m*(m))] = or;
216 0           (out_datap)[0+(__inc_out_c*(1))+(__inc_out_m*(m))] = oi;
217             }} /* Close m */
218 0 0         }PDL_BROADCASTLOOP_END_rCpolynomial_readdata
    0          
219 0           } break;
220 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in rCpolynomial: unhandled datatype(%d), only handles (FDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
221             }
222             #undef PDL_IF_BAD
223 2           return PDL_err;
224             }
225              
226             static pdl_datatypes pdl_rCpolynomial_vtable_gentypes[] = { PDL_F, PDL_D, PDL_LD, -1 };
227             static PDL_Indx pdl_rCpolynomial_vtable_realdims[] = { 1, 2, 2 };
228             static char *pdl_rCpolynomial_vtable_parnames[] = { "coeffs","x","out" };
229             static short pdl_rCpolynomial_vtable_parflags[] = {
230             0,
231             0,
232             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE
233             };
234             static pdl_datatypes pdl_rCpolynomial_vtable_partypes[] = { -1, -1, -1 };
235             static PDL_Indx pdl_rCpolynomial_vtable_realdims_starts[] = { 0, 1, 3 };
236             static PDL_Indx pdl_rCpolynomial_vtable_realdims_ind_ids[] = { 2, 0, 1, 0, 1 };
237             static char *pdl_rCpolynomial_vtable_indnames[] = { "c","m","n" };
238             pdl_transvtable pdl_rCpolynomial_vtable = {
239             PDL_TRANS_DO_BROADCAST, 0, pdl_rCpolynomial_vtable_gentypes, 2, 3, NULL /*CORE21*/,
240             pdl_rCpolynomial_vtable_realdims, pdl_rCpolynomial_vtable_parnames,
241             pdl_rCpolynomial_vtable_parflags, pdl_rCpolynomial_vtable_partypes,
242             pdl_rCpolynomial_vtable_realdims_starts, pdl_rCpolynomial_vtable_realdims_ind_ids, 5,
243             3, pdl_rCpolynomial_vtable_indnames,
244             pdl_rCpolynomial_redodims, pdl_rCpolynomial_readdata, NULL,
245             NULL,
246             0,"PDL::Complex::rCpolynomial"
247             };
248              
249              
250 2           pdl_error pdl_run_rCpolynomial(pdl *coeffs,pdl *x,pdl *out) {
251 2           pdl_error PDL_err = {0, NULL, 0};
252 2 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
253 2           pdl_trans *__privtrans = PDL->create_trans(&pdl_rCpolynomial_vtable);
254 2 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
255 2           __privtrans->pdls[0] = coeffs;
256 2           __privtrans->pdls[1] = x;
257 2           __privtrans->pdls[2] = out;
258 2 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
259 2 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
260 2           return PDL_err;
261             }