File Coverage

lib/PDL/Primitive-pp-pchip_chim.c
Criterion Covered Total %
statement 49 141 34.7
branch 62 636 9.7
condition n/a
subroutine n/a
pod n/a
total 111 777 14.2


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 lib/PDL/Primitive.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_Primitive
21             extern Core* PDL; /* Structure hold core C functions */
22             #line 23 "lib/PDL/Primitive-pp-pchip_chim.c"
23             extern int pdl_srand_threads;
24             extern uint64_t *pdl_rand_state;
25             void pdl_srand(uint64_t **s, uint64_t seed, int n);
26             double pdl_drand(uint64_t *s);
27             #define PDL_MAYBE_SRAND \
28             if (pdl_srand_threads < 0) \
29             pdl_srand(&pdl_rand_state, PDL->pdl_seed(), PDL->online_cpus());
30             #define PDL_RAND_SET_OFFSET(v, thr, pdl) \
31             if (v < 0) { \
32             if (thr.mag_nthr >= 0) { \
33             int thr_no = PDL->magic_get_thread(pdl); \
34             if (thr_no < 0) return PDL->make_error_simple(PDL_EFATAL, "Invalid pdl_magic_get_thread!"); \
35             v = thr_no == 0 ? thr_no : thr_no % PDL->online_cpus(); \
36             } else { \
37             v = 0; \
38             } \
39             }
40              
41             #line 1857 "lib/PDL/PP.pm"
42             pdl_error pdl_pchip_chim_redodims(pdl_trans *__privtrans) {
43             pdl_error PDL_err = {0, NULL, 0};
44             #line 45 "lib/PDL/Primitive-pp-pchip_chim.c"
45             #ifndef PDL_DECLARE_PARAMS_pchip_chim_0
46             #define PDL_DECLARE_PARAMS_pchip_chim_0(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_ierr,PDL_PPSYM_PARAM_ierr) \
47             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, x, (__privtrans->pdls[0]), 0, PDL_PPSYM_OP) \
48             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, f, (__privtrans->pdls[1]), 0, PDL_PPSYM_OP) \
49             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, d, (__privtrans->pdls[2]), 0, PDL_PPSYM_OP) \
50             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_ierr, ierr, (__privtrans->pdls[3]), 0, PDL_PPSYM_PARAM_ierr)
51             #endif
52             #define PDL_IF_BAD(t,f) f
53 8           switch (__privtrans->__datatype) { /* Start generic switch */
54 0           case PDL_SB: {
55 0 0         PDL_DECLARE_PARAMS_pchip_chim_0(PDL_SByte,A,PDL_Indx,N)
    0          
    0          
    0          
56 0 0         {if (__privtrans->ind_sizes[0] < 2) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "NUMBER OF DATA POINTS LESS THAN TWO");
57             }
58 0           } break;
59 0           case PDL_B: {
60 0 0         PDL_DECLARE_PARAMS_pchip_chim_0(PDL_Byte,B,PDL_Indx,N)
    0          
    0          
    0          
61 0 0         {if (__privtrans->ind_sizes[0] < 2) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "NUMBER OF DATA POINTS LESS THAN TWO");
62             }
63 0           } break;
64 0           case PDL_S: {
65 0 0         PDL_DECLARE_PARAMS_pchip_chim_0(PDL_Short,S,PDL_Indx,N)
    0          
    0          
    0          
66 0 0         {if (__privtrans->ind_sizes[0] < 2) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "NUMBER OF DATA POINTS LESS THAN TWO");
67             }
68 0           } break;
69 0           case PDL_US: {
70 0 0         PDL_DECLARE_PARAMS_pchip_chim_0(PDL_Ushort,U,PDL_Indx,N)
    0          
    0          
    0          
71 0 0         {if (__privtrans->ind_sizes[0] < 2) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "NUMBER OF DATA POINTS LESS THAN TWO");
72             }
73 0           } break;
74 0           case PDL_L: {
75 0 0         PDL_DECLARE_PARAMS_pchip_chim_0(PDL_Long,L,PDL_Indx,N)
    0          
    0          
    0          
76 0 0         {if (__privtrans->ind_sizes[0] < 2) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "NUMBER OF DATA POINTS LESS THAN TWO");
77             }
78 0           } break;
79 0           case PDL_UL: {
80 0 0         PDL_DECLARE_PARAMS_pchip_chim_0(PDL_ULong,K,PDL_Indx,N)
    0          
    0          
    0          
81 0 0         {if (__privtrans->ind_sizes[0] < 2) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "NUMBER OF DATA POINTS LESS THAN TWO");
82             }
83 0           } break;
84 0           case PDL_IND: {
85 0 0         PDL_DECLARE_PARAMS_pchip_chim_0(PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
86 0 0         {if (__privtrans->ind_sizes[0] < 2) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "NUMBER OF DATA POINTS LESS THAN TWO");
87             }
88 0           } break;
89 0           case PDL_ULL: {
90 0 0         PDL_DECLARE_PARAMS_pchip_chim_0(PDL_ULongLong,P,PDL_Indx,N)
    0          
    0          
    0          
91 0 0         {if (__privtrans->ind_sizes[0] < 2) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "NUMBER OF DATA POINTS LESS THAN TWO");
92             }
93 0           } break;
94 0           case PDL_LL: {
95 0 0         PDL_DECLARE_PARAMS_pchip_chim_0(PDL_LongLong,Q,PDL_Indx,N)
    0          
    0          
    0          
96 0 0         {if (__privtrans->ind_sizes[0] < 2) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "NUMBER OF DATA POINTS LESS THAN TWO");
97             }
98 0           } break;
99 2           case PDL_F: {
100 2 50         PDL_DECLARE_PARAMS_pchip_chim_0(PDL_Float,F,PDL_Indx,N)
    50          
    50          
    50          
101 2 50         {if (__privtrans->ind_sizes[0] < 2) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "NUMBER OF DATA POINTS LESS THAN TWO");
102             }
103 2           } break;
104 6           case PDL_D: {
105 6 50         PDL_DECLARE_PARAMS_pchip_chim_0(PDL_Double,D,PDL_Indx,N)
    50          
    50          
    50          
106 6 50         {if (__privtrans->ind_sizes[0] < 2) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "NUMBER OF DATA POINTS LESS THAN TWO");
107             }
108 6           } break;
109 0           case PDL_LD: {
110 0 0         PDL_DECLARE_PARAMS_pchip_chim_0(PDL_LDouble,E,PDL_Indx,N)
    0          
    0          
    0          
111 0 0         {if (__privtrans->ind_sizes[0] < 2) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "NUMBER OF DATA POINTS LESS THAN TWO");
112             }
113 0           } break;
114 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in pchip_chim: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
115             }
116             #undef PDL_IF_BAD
117              
118 8 50         PDL_RETERROR(PDL_err, PDL->redodims_default(__privtrans));
119 8           return PDL_err;
120             }
121              
122              
123             #line 1857 "lib/PDL/PP.pm"
124             pdl_error pdl_pchip_chim_readdata(pdl_trans *__privtrans) {
125             pdl_error PDL_err = {0, NULL, 0};
126             #line 127 "lib/PDL/Primitive-pp-pchip_chim.c"
127 8           register PDL_Indx __n_size = __privtrans->ind_sizes[0];
128 8 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "broadcast.incs NULL");
129             /* broadcastloop declarations */
130             int __brcloopval;
131             register PDL_Indx __tind0,__tind1; /* counters along dim */
132 8           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
133             /* dims here are how many steps along those dims */
134 8           register PDL_Indx __tinc0_x = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
135 8           register PDL_Indx __tinc0_f = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
136 8           register PDL_Indx __tinc0_d = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
137 8           register PDL_Indx __tinc0_ierr = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
138 8           register PDL_Indx __tinc1_x = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
139 8           register PDL_Indx __tinc1_f = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
140 8           register PDL_Indx __tinc1_d = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
141 8           register PDL_Indx __tinc1_ierr = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
142             #define PDL_BROADCASTLOOP_START_pchip_chim_readdata PDL_BROADCASTLOOP_START( \
143             readdata, \
144             __privtrans->broadcast, \
145             __privtrans->vtable, \
146             x_datap += __offsp[0]; \
147             f_datap += __offsp[1]; \
148             d_datap += __offsp[2]; \
149             ierr_datap += __offsp[3]; \
150             , \
151             ( ,x_datap += __tinc1_x - __tinc0_x * __tdims0 \
152             ,f_datap += __tinc1_f - __tinc0_f * __tdims0 \
153             ,d_datap += __tinc1_d - __tinc0_d * __tdims0 \
154             ,ierr_datap += __tinc1_ierr - __tinc0_ierr * __tdims0 \
155             ), \
156             ( ,x_datap += __tinc0_x \
157             ,f_datap += __tinc0_f \
158             ,d_datap += __tinc0_d \
159             ,ierr_datap += __tinc0_ierr \
160             ) \
161             )
162             #define PDL_BROADCASTLOOP_END_pchip_chim_readdata PDL_BROADCASTLOOP_END( \
163             __privtrans->broadcast, \
164             x_datap -= __tinc1_x * __tdims1 + __offsp[0]; \
165             f_datap -= __tinc1_f * __tdims1 + __offsp[1]; \
166             d_datap -= __tinc1_d * __tdims1 + __offsp[2]; \
167             ierr_datap -= __tinc1_ierr * __tdims1 + __offsp[3]; \
168             )
169 8           register PDL_Indx __inc_d_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_d_n;
170 8           register PDL_Indx __inc_f_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_f_n;
171 8           register PDL_Indx __inc_x_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_x_n;
172             #ifndef PDL_DECLARE_PARAMS_pchip_chim_1
173             #define PDL_DECLARE_PARAMS_pchip_chim_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_ierr,PDL_PPSYM_PARAM_ierr) \
174             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, x, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
175             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, f, (__privtrans->pdls[1]), 1, PDL_PPSYM_OP) \
176             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, d, (__privtrans->pdls[2]), 1, PDL_PPSYM_OP) \
177             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_ierr, ierr, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_ierr)
178             #endif
179             #define PDL_IF_BAD(t,f) f
180 8           switch (__privtrans->__datatype) { /* Start generic switch */
181 0           case PDL_SB: {
182 0 0         PDL_DECLARE_PARAMS_pchip_chim_1(PDL_SByte,A,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
183 0 0         PDL_BROADCASTLOOP_START_pchip_chim_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
184             #line 4398 "lib/PDL/Primitive.pd"
185             /* Local variables */
186             PDL_SByte dmax, hsumt3;
187             PDL_Indx n = __privtrans->ind_sizes[0];
188             /* VALIDITY-CHECK ARGUMENTS. */
189             {/* Open n=1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
190             #line 4403 "lib/PDL/Primitive.pd"
191             if ((x_datap)[0+(__inc_x_n*(n))] > (x_datap)[0+(__inc_x_n*(n-1))]) continue;
192             (ierr_datap)[0] = -1;
193             return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "X-ARRAY NOT STRICTLY INCREASING");
194             }} /* Close n=1 */
195             #line 4407 "lib/PDL/Primitive.pd"
196             /* FUNCTION DEFINITION IS OK, GO ON. */
197             (ierr_datap)[0] = 0;
198             PDL_SByte h1 = (x_datap)[0+(__inc_x_n*(1))] - (x_datap)[0+(__inc_x_n*(0))];
199             PDL_SByte del1 = ((f_datap)[0+(__inc_f_n*(1))] - (f_datap)[0+(__inc_f_n*(0))]) / h1;
200             PDL_SByte dsave = del1;
201             /* SPECIAL CASE N=2 -- USE LINEAR INTERPOLATION. */
202             if (n <= 2) {
203             (d_datap)[0+(__inc_d_n*(0))] = (d_datap)[0+(__inc_d_n*(1))] = del1;
204             continue;
205             }
206             /* NORMAL CASE (N .GE. 3). */
207             PDL_SByte h2 = (x_datap)[0+(__inc_x_n*(2))] - (x_datap)[0+(__inc_x_n*(1))];
208             PDL_SByte del2 = ((f_datap)[0+(__inc_f_n*(2))] - (f_datap)[0+(__inc_f_n*(1))]) / h2;
209             /* SET D(1) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
210             /* SHAPE-PRESERVING. */
211             PDL_SByte hsum = h1 + h2;
212             PDL_SByte w1 = (h1 + hsum) / hsum;
213             PDL_SByte w2 = -h1 / hsum;
214             (d_datap)[0+(__inc_d_n*(0))] = w1 * del1 + w2 * del2;
215             if (((((d_datap)[0+(__inc_d_n*(0))]) == 0. || (del1) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(0))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
216             (d_datap)[0+(__inc_d_n*(0))] = 0.;
217             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
218             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
219             dmax = 3. * del1;
220             if (PDL_ABS((d_datap)[0+(__inc_d_n*(0))]) > PDL_ABS(dmax)) {
221             (d_datap)[0+(__inc_d_n*(0))] = dmax;
222             }
223             }
224             /* LOOP THROUGH INTERIOR POINTS. */
225             {/* Open n=1:-1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size-1)); for(; n<__n_stop; n+=1) {
226             #line 4437 "lib/PDL/Primitive.pd"
227             if (n != 1) {
228             h1 = h2;
229             h2 = (x_datap)[0+(__inc_x_n*(n+1))] - (x_datap)[0+(__inc_x_n*(n))];
230             hsum = h1 + h2;
231             del1 = del2;
232             del2 = ((f_datap)[0+(__inc_f_n*(n+1))] - (f_datap)[0+(__inc_f_n*(n))]) / h2;
233             }
234             /* SET D(I)=0 UNLESS DATA ARE STRICTLY MONOTONIC. */
235             (d_datap)[0+(__inc_d_n*(n))] = 0.;
236             PDL_SByte dtmp = (((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)));
237             if (dtmp <= 0) {
238             if (dtmp == 0.) {
239             /* COUNT NUMBER OF CHANGES IN DIRECTION OF MONOTONICITY. */
240             if (del2 == 0.) {
241             continue;
242             }
243             if ((((dsave) == 0. || (del2) == 0.) ? 0. : (((dsave)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
244             ++((ierr_datap)[0]);
245             }
246             dsave = del2;
247             continue;
248             }
249             ++((ierr_datap)[0]);
250             dsave = del2;
251             continue;
252             }
253             /* USE BRODLIE MODIFICATION OF BUTLAND FORMULA. */
254             hsumt3 = hsum + hsum + hsum;
255             w1 = (hsum + h1) / hsumt3;
256             w2 = (hsum + h2) / hsumt3;
257             /* Computing MAX */
258             dmax = PDLMAX(PDL_ABS(del1),PDL_ABS(del2));
259             /* Computing MIN */
260             PDL_SByte dmin = PDLMIN(PDL_ABS(del1),PDL_ABS(del2));
261             PDL_SByte drat1 = del1 / dmax;
262             PDL_SByte drat2 = del2 / dmax;
263             (d_datap)[0+(__inc_d_n*(n))] = dmin / (w1 * drat1 + w2 * drat2);
264             }} /* Close n=1:-1 */
265             #line 4475 "lib/PDL/Primitive.pd"
266             /* SET D(N) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
267             /* SHAPE-PRESERVING. */
268             w1 = -h2 / hsum;
269             w2 = (h2 + hsum) / hsum;
270             (d_datap)[0+(__inc_d_n*(n-1))] = w1 * del1 + w2 * del2;
271             if (((((d_datap)[0+(__inc_d_n*(n-1))]) == 0. || (del2) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(n-1))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
272             (d_datap)[0+(__inc_d_n*(n-1))] = 0.;
273             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
274             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
275             dmax = 3. * del2;
276             if (PDL_ABS((d_datap)[0+(__inc_d_n*(n-1))]) > PDL_ABS(dmax)) {
277             (d_datap)[0+(__inc_d_n*(n-1))] = dmax;
278             }
279             }
280             #line 281 "lib/PDL/Primitive-pp-pchip_chim.c"
281 0 0         }PDL_BROADCASTLOOP_END_pchip_chim_readdata
    0          
282 0           } break;
283 0           case PDL_B: {
284 0 0         PDL_DECLARE_PARAMS_pchip_chim_1(PDL_Byte,B,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
285 0 0         PDL_BROADCASTLOOP_START_pchip_chim_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
286             #line 4398 "lib/PDL/Primitive.pd"
287             /* Local variables */
288             PDL_Byte dmax, hsumt3;
289             PDL_Indx n = __privtrans->ind_sizes[0];
290             /* VALIDITY-CHECK ARGUMENTS. */
291             {/* Open n=1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
292             #line 4403 "lib/PDL/Primitive.pd"
293             if ((x_datap)[0+(__inc_x_n*(n))] > (x_datap)[0+(__inc_x_n*(n-1))]) continue;
294             (ierr_datap)[0] = -1;
295             return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "X-ARRAY NOT STRICTLY INCREASING");
296             }} /* Close n=1 */
297             #line 4407 "lib/PDL/Primitive.pd"
298             /* FUNCTION DEFINITION IS OK, GO ON. */
299             (ierr_datap)[0] = 0;
300             PDL_Byte h1 = (x_datap)[0+(__inc_x_n*(1))] - (x_datap)[0+(__inc_x_n*(0))];
301             PDL_Byte del1 = ((f_datap)[0+(__inc_f_n*(1))] - (f_datap)[0+(__inc_f_n*(0))]) / h1;
302             PDL_Byte dsave = del1;
303             /* SPECIAL CASE N=2 -- USE LINEAR INTERPOLATION. */
304             if (n <= 2) {
305             (d_datap)[0+(__inc_d_n*(0))] = (d_datap)[0+(__inc_d_n*(1))] = del1;
306             continue;
307             }
308             /* NORMAL CASE (N .GE. 3). */
309             PDL_Byte h2 = (x_datap)[0+(__inc_x_n*(2))] - (x_datap)[0+(__inc_x_n*(1))];
310             PDL_Byte del2 = ((f_datap)[0+(__inc_f_n*(2))] - (f_datap)[0+(__inc_f_n*(1))]) / h2;
311             /* SET D(1) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
312             /* SHAPE-PRESERVING. */
313             PDL_Byte hsum = h1 + h2;
314             PDL_Byte w1 = (h1 + hsum) / hsum;
315             PDL_Byte w2 = -h1 / hsum;
316             (d_datap)[0+(__inc_d_n*(0))] = w1 * del1 + w2 * del2;
317             if (((((d_datap)[0+(__inc_d_n*(0))]) == 0. || (del1) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(0))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
318             (d_datap)[0+(__inc_d_n*(0))] = 0.;
319             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
320             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
321             dmax = 3. * del1;
322             if (PDL_ABS((d_datap)[0+(__inc_d_n*(0))]) > PDL_ABS(dmax)) {
323             (d_datap)[0+(__inc_d_n*(0))] = dmax;
324             }
325             }
326             /* LOOP THROUGH INTERIOR POINTS. */
327             {/* Open n=1:-1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size-1)); for(; n<__n_stop; n+=1) {
328             #line 4437 "lib/PDL/Primitive.pd"
329             if (n != 1) {
330             h1 = h2;
331             h2 = (x_datap)[0+(__inc_x_n*(n+1))] - (x_datap)[0+(__inc_x_n*(n))];
332             hsum = h1 + h2;
333             del1 = del2;
334             del2 = ((f_datap)[0+(__inc_f_n*(n+1))] - (f_datap)[0+(__inc_f_n*(n))]) / h2;
335             }
336             /* SET D(I)=0 UNLESS DATA ARE STRICTLY MONOTONIC. */
337             (d_datap)[0+(__inc_d_n*(n))] = 0.;
338             PDL_Byte dtmp = (((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)));
339             if (dtmp <= 0) {
340             if (dtmp == 0.) {
341             /* COUNT NUMBER OF CHANGES IN DIRECTION OF MONOTONICITY. */
342             if (del2 == 0.) {
343             continue;
344             }
345             if ((((dsave) == 0. || (del2) == 0.) ? 0. : (((dsave)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
346             ++((ierr_datap)[0]);
347             }
348             dsave = del2;
349             continue;
350             }
351             ++((ierr_datap)[0]);
352             dsave = del2;
353             continue;
354             }
355             /* USE BRODLIE MODIFICATION OF BUTLAND FORMULA. */
356             hsumt3 = hsum + hsum + hsum;
357             w1 = (hsum + h1) / hsumt3;
358             w2 = (hsum + h2) / hsumt3;
359             /* Computing MAX */
360             dmax = PDLMAX(PDL_ABS(del1),PDL_ABS(del2));
361             /* Computing MIN */
362             PDL_Byte dmin = PDLMIN(PDL_ABS(del1),PDL_ABS(del2));
363             PDL_Byte drat1 = del1 / dmax;
364             PDL_Byte drat2 = del2 / dmax;
365             (d_datap)[0+(__inc_d_n*(n))] = dmin / (w1 * drat1 + w2 * drat2);
366             }} /* Close n=1:-1 */
367             #line 4475 "lib/PDL/Primitive.pd"
368             /* SET D(N) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
369             /* SHAPE-PRESERVING. */
370             w1 = -h2 / hsum;
371             w2 = (h2 + hsum) / hsum;
372             (d_datap)[0+(__inc_d_n*(n-1))] = w1 * del1 + w2 * del2;
373             if (((((d_datap)[0+(__inc_d_n*(n-1))]) == 0. || (del2) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(n-1))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
374             (d_datap)[0+(__inc_d_n*(n-1))] = 0.;
375             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
376             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
377             dmax = 3. * del2;
378             if (PDL_ABS((d_datap)[0+(__inc_d_n*(n-1))]) > PDL_ABS(dmax)) {
379             (d_datap)[0+(__inc_d_n*(n-1))] = dmax;
380             }
381             }
382             #line 383 "lib/PDL/Primitive-pp-pchip_chim.c"
383 0 0         }PDL_BROADCASTLOOP_END_pchip_chim_readdata
    0          
384 0           } break;
385 0           case PDL_S: {
386 0 0         PDL_DECLARE_PARAMS_pchip_chim_1(PDL_Short,S,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
387 0 0         PDL_BROADCASTLOOP_START_pchip_chim_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
388             #line 4398 "lib/PDL/Primitive.pd"
389             /* Local variables */
390             PDL_Short dmax, hsumt3;
391             PDL_Indx n = __privtrans->ind_sizes[0];
392             /* VALIDITY-CHECK ARGUMENTS. */
393             {/* Open n=1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
394             #line 4403 "lib/PDL/Primitive.pd"
395             if ((x_datap)[0+(__inc_x_n*(n))] > (x_datap)[0+(__inc_x_n*(n-1))]) continue;
396             (ierr_datap)[0] = -1;
397             return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "X-ARRAY NOT STRICTLY INCREASING");
398             }} /* Close n=1 */
399             #line 4407 "lib/PDL/Primitive.pd"
400             /* FUNCTION DEFINITION IS OK, GO ON. */
401             (ierr_datap)[0] = 0;
402             PDL_Short h1 = (x_datap)[0+(__inc_x_n*(1))] - (x_datap)[0+(__inc_x_n*(0))];
403             PDL_Short del1 = ((f_datap)[0+(__inc_f_n*(1))] - (f_datap)[0+(__inc_f_n*(0))]) / h1;
404             PDL_Short dsave = del1;
405             /* SPECIAL CASE N=2 -- USE LINEAR INTERPOLATION. */
406             if (n <= 2) {
407             (d_datap)[0+(__inc_d_n*(0))] = (d_datap)[0+(__inc_d_n*(1))] = del1;
408             continue;
409             }
410             /* NORMAL CASE (N .GE. 3). */
411             PDL_Short h2 = (x_datap)[0+(__inc_x_n*(2))] - (x_datap)[0+(__inc_x_n*(1))];
412             PDL_Short del2 = ((f_datap)[0+(__inc_f_n*(2))] - (f_datap)[0+(__inc_f_n*(1))]) / h2;
413             /* SET D(1) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
414             /* SHAPE-PRESERVING. */
415             PDL_Short hsum = h1 + h2;
416             PDL_Short w1 = (h1 + hsum) / hsum;
417             PDL_Short w2 = -h1 / hsum;
418             (d_datap)[0+(__inc_d_n*(0))] = w1 * del1 + w2 * del2;
419             if (((((d_datap)[0+(__inc_d_n*(0))]) == 0. || (del1) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(0))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
420             (d_datap)[0+(__inc_d_n*(0))] = 0.;
421             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
422             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
423             dmax = 3. * del1;
424             if (PDL_ABS((d_datap)[0+(__inc_d_n*(0))]) > PDL_ABS(dmax)) {
425             (d_datap)[0+(__inc_d_n*(0))] = dmax;
426             }
427             }
428             /* LOOP THROUGH INTERIOR POINTS. */
429             {/* Open n=1:-1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size-1)); for(; n<__n_stop; n+=1) {
430             #line 4437 "lib/PDL/Primitive.pd"
431             if (n != 1) {
432             h1 = h2;
433             h2 = (x_datap)[0+(__inc_x_n*(n+1))] - (x_datap)[0+(__inc_x_n*(n))];
434             hsum = h1 + h2;
435             del1 = del2;
436             del2 = ((f_datap)[0+(__inc_f_n*(n+1))] - (f_datap)[0+(__inc_f_n*(n))]) / h2;
437             }
438             /* SET D(I)=0 UNLESS DATA ARE STRICTLY MONOTONIC. */
439             (d_datap)[0+(__inc_d_n*(n))] = 0.;
440             PDL_Short dtmp = (((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)));
441             if (dtmp <= 0) {
442             if (dtmp == 0.) {
443             /* COUNT NUMBER OF CHANGES IN DIRECTION OF MONOTONICITY. */
444             if (del2 == 0.) {
445             continue;
446             }
447             if ((((dsave) == 0. || (del2) == 0.) ? 0. : (((dsave)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
448             ++((ierr_datap)[0]);
449             }
450             dsave = del2;
451             continue;
452             }
453             ++((ierr_datap)[0]);
454             dsave = del2;
455             continue;
456             }
457             /* USE BRODLIE MODIFICATION OF BUTLAND FORMULA. */
458             hsumt3 = hsum + hsum + hsum;
459             w1 = (hsum + h1) / hsumt3;
460             w2 = (hsum + h2) / hsumt3;
461             /* Computing MAX */
462             dmax = PDLMAX(PDL_ABS(del1),PDL_ABS(del2));
463             /* Computing MIN */
464             PDL_Short dmin = PDLMIN(PDL_ABS(del1),PDL_ABS(del2));
465             PDL_Short drat1 = del1 / dmax;
466             PDL_Short drat2 = del2 / dmax;
467             (d_datap)[0+(__inc_d_n*(n))] = dmin / (w1 * drat1 + w2 * drat2);
468             }} /* Close n=1:-1 */
469             #line 4475 "lib/PDL/Primitive.pd"
470             /* SET D(N) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
471             /* SHAPE-PRESERVING. */
472             w1 = -h2 / hsum;
473             w2 = (h2 + hsum) / hsum;
474             (d_datap)[0+(__inc_d_n*(n-1))] = w1 * del1 + w2 * del2;
475             if (((((d_datap)[0+(__inc_d_n*(n-1))]) == 0. || (del2) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(n-1))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
476             (d_datap)[0+(__inc_d_n*(n-1))] = 0.;
477             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
478             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
479             dmax = 3. * del2;
480             if (PDL_ABS((d_datap)[0+(__inc_d_n*(n-1))]) > PDL_ABS(dmax)) {
481             (d_datap)[0+(__inc_d_n*(n-1))] = dmax;
482             }
483             }
484             #line 485 "lib/PDL/Primitive-pp-pchip_chim.c"
485 0 0         }PDL_BROADCASTLOOP_END_pchip_chim_readdata
    0          
486 0           } break;
487 0           case PDL_US: {
488 0 0         PDL_DECLARE_PARAMS_pchip_chim_1(PDL_Ushort,U,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
489 0 0         PDL_BROADCASTLOOP_START_pchip_chim_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
490             #line 4398 "lib/PDL/Primitive.pd"
491             /* Local variables */
492             PDL_Ushort dmax, hsumt3;
493             PDL_Indx n = __privtrans->ind_sizes[0];
494             /* VALIDITY-CHECK ARGUMENTS. */
495             {/* Open n=1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
496             #line 4403 "lib/PDL/Primitive.pd"
497             if ((x_datap)[0+(__inc_x_n*(n))] > (x_datap)[0+(__inc_x_n*(n-1))]) continue;
498             (ierr_datap)[0] = -1;
499             return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "X-ARRAY NOT STRICTLY INCREASING");
500             }} /* Close n=1 */
501             #line 4407 "lib/PDL/Primitive.pd"
502             /* FUNCTION DEFINITION IS OK, GO ON. */
503             (ierr_datap)[0] = 0;
504             PDL_Ushort h1 = (x_datap)[0+(__inc_x_n*(1))] - (x_datap)[0+(__inc_x_n*(0))];
505             PDL_Ushort del1 = ((f_datap)[0+(__inc_f_n*(1))] - (f_datap)[0+(__inc_f_n*(0))]) / h1;
506             PDL_Ushort dsave = del1;
507             /* SPECIAL CASE N=2 -- USE LINEAR INTERPOLATION. */
508             if (n <= 2) {
509             (d_datap)[0+(__inc_d_n*(0))] = (d_datap)[0+(__inc_d_n*(1))] = del1;
510             continue;
511             }
512             /* NORMAL CASE (N .GE. 3). */
513             PDL_Ushort h2 = (x_datap)[0+(__inc_x_n*(2))] - (x_datap)[0+(__inc_x_n*(1))];
514             PDL_Ushort del2 = ((f_datap)[0+(__inc_f_n*(2))] - (f_datap)[0+(__inc_f_n*(1))]) / h2;
515             /* SET D(1) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
516             /* SHAPE-PRESERVING. */
517             PDL_Ushort hsum = h1 + h2;
518             PDL_Ushort w1 = (h1 + hsum) / hsum;
519             PDL_Ushort w2 = -h1 / hsum;
520             (d_datap)[0+(__inc_d_n*(0))] = w1 * del1 + w2 * del2;
521             if (((((d_datap)[0+(__inc_d_n*(0))]) == 0. || (del1) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(0))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
522             (d_datap)[0+(__inc_d_n*(0))] = 0.;
523             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
524             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
525             dmax = 3. * del1;
526             if (PDL_ABS((d_datap)[0+(__inc_d_n*(0))]) > PDL_ABS(dmax)) {
527             (d_datap)[0+(__inc_d_n*(0))] = dmax;
528             }
529             }
530             /* LOOP THROUGH INTERIOR POINTS. */
531             {/* Open n=1:-1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size-1)); for(; n<__n_stop; n+=1) {
532             #line 4437 "lib/PDL/Primitive.pd"
533             if (n != 1) {
534             h1 = h2;
535             h2 = (x_datap)[0+(__inc_x_n*(n+1))] - (x_datap)[0+(__inc_x_n*(n))];
536             hsum = h1 + h2;
537             del1 = del2;
538             del2 = ((f_datap)[0+(__inc_f_n*(n+1))] - (f_datap)[0+(__inc_f_n*(n))]) / h2;
539             }
540             /* SET D(I)=0 UNLESS DATA ARE STRICTLY MONOTONIC. */
541             (d_datap)[0+(__inc_d_n*(n))] = 0.;
542             PDL_Ushort dtmp = (((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)));
543             if (dtmp <= 0) {
544             if (dtmp == 0.) {
545             /* COUNT NUMBER OF CHANGES IN DIRECTION OF MONOTONICITY. */
546             if (del2 == 0.) {
547             continue;
548             }
549             if ((((dsave) == 0. || (del2) == 0.) ? 0. : (((dsave)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
550             ++((ierr_datap)[0]);
551             }
552             dsave = del2;
553             continue;
554             }
555             ++((ierr_datap)[0]);
556             dsave = del2;
557             continue;
558             }
559             /* USE BRODLIE MODIFICATION OF BUTLAND FORMULA. */
560             hsumt3 = hsum + hsum + hsum;
561             w1 = (hsum + h1) / hsumt3;
562             w2 = (hsum + h2) / hsumt3;
563             /* Computing MAX */
564             dmax = PDLMAX(PDL_ABS(del1),PDL_ABS(del2));
565             /* Computing MIN */
566             PDL_Ushort dmin = PDLMIN(PDL_ABS(del1),PDL_ABS(del2));
567             PDL_Ushort drat1 = del1 / dmax;
568             PDL_Ushort drat2 = del2 / dmax;
569             (d_datap)[0+(__inc_d_n*(n))] = dmin / (w1 * drat1 + w2 * drat2);
570             }} /* Close n=1:-1 */
571             #line 4475 "lib/PDL/Primitive.pd"
572             /* SET D(N) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
573             /* SHAPE-PRESERVING. */
574             w1 = -h2 / hsum;
575             w2 = (h2 + hsum) / hsum;
576             (d_datap)[0+(__inc_d_n*(n-1))] = w1 * del1 + w2 * del2;
577             if (((((d_datap)[0+(__inc_d_n*(n-1))]) == 0. || (del2) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(n-1))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
578             (d_datap)[0+(__inc_d_n*(n-1))] = 0.;
579             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
580             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
581             dmax = 3. * del2;
582             if (PDL_ABS((d_datap)[0+(__inc_d_n*(n-1))]) > PDL_ABS(dmax)) {
583             (d_datap)[0+(__inc_d_n*(n-1))] = dmax;
584             }
585             }
586             #line 587 "lib/PDL/Primitive-pp-pchip_chim.c"
587 0 0         }PDL_BROADCASTLOOP_END_pchip_chim_readdata
    0          
588 0           } break;
589 0           case PDL_L: {
590 0 0         PDL_DECLARE_PARAMS_pchip_chim_1(PDL_Long,L,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
591 0 0         PDL_BROADCASTLOOP_START_pchip_chim_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
592             #line 4398 "lib/PDL/Primitive.pd"
593             /* Local variables */
594             PDL_Long dmax, hsumt3;
595             PDL_Indx n = __privtrans->ind_sizes[0];
596             /* VALIDITY-CHECK ARGUMENTS. */
597             {/* Open n=1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
598             #line 4403 "lib/PDL/Primitive.pd"
599             if ((x_datap)[0+(__inc_x_n*(n))] > (x_datap)[0+(__inc_x_n*(n-1))]) continue;
600             (ierr_datap)[0] = -1;
601             return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "X-ARRAY NOT STRICTLY INCREASING");
602             }} /* Close n=1 */
603             #line 4407 "lib/PDL/Primitive.pd"
604             /* FUNCTION DEFINITION IS OK, GO ON. */
605             (ierr_datap)[0] = 0;
606             PDL_Long h1 = (x_datap)[0+(__inc_x_n*(1))] - (x_datap)[0+(__inc_x_n*(0))];
607             PDL_Long del1 = ((f_datap)[0+(__inc_f_n*(1))] - (f_datap)[0+(__inc_f_n*(0))]) / h1;
608             PDL_Long dsave = del1;
609             /* SPECIAL CASE N=2 -- USE LINEAR INTERPOLATION. */
610             if (n <= 2) {
611             (d_datap)[0+(__inc_d_n*(0))] = (d_datap)[0+(__inc_d_n*(1))] = del1;
612             continue;
613             }
614             /* NORMAL CASE (N .GE. 3). */
615             PDL_Long h2 = (x_datap)[0+(__inc_x_n*(2))] - (x_datap)[0+(__inc_x_n*(1))];
616             PDL_Long del2 = ((f_datap)[0+(__inc_f_n*(2))] - (f_datap)[0+(__inc_f_n*(1))]) / h2;
617             /* SET D(1) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
618             /* SHAPE-PRESERVING. */
619             PDL_Long hsum = h1 + h2;
620             PDL_Long w1 = (h1 + hsum) / hsum;
621             PDL_Long w2 = -h1 / hsum;
622             (d_datap)[0+(__inc_d_n*(0))] = w1 * del1 + w2 * del2;
623             if (((((d_datap)[0+(__inc_d_n*(0))]) == 0. || (del1) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(0))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
624             (d_datap)[0+(__inc_d_n*(0))] = 0.;
625             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
626             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
627             dmax = 3. * del1;
628             if (PDL_ABS((d_datap)[0+(__inc_d_n*(0))]) > PDL_ABS(dmax)) {
629             (d_datap)[0+(__inc_d_n*(0))] = dmax;
630             }
631             }
632             /* LOOP THROUGH INTERIOR POINTS. */
633             {/* Open n=1:-1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size-1)); for(; n<__n_stop; n+=1) {
634             #line 4437 "lib/PDL/Primitive.pd"
635             if (n != 1) {
636             h1 = h2;
637             h2 = (x_datap)[0+(__inc_x_n*(n+1))] - (x_datap)[0+(__inc_x_n*(n))];
638             hsum = h1 + h2;
639             del1 = del2;
640             del2 = ((f_datap)[0+(__inc_f_n*(n+1))] - (f_datap)[0+(__inc_f_n*(n))]) / h2;
641             }
642             /* SET D(I)=0 UNLESS DATA ARE STRICTLY MONOTONIC. */
643             (d_datap)[0+(__inc_d_n*(n))] = 0.;
644             PDL_Long dtmp = (((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)));
645             if (dtmp <= 0) {
646             if (dtmp == 0.) {
647             /* COUNT NUMBER OF CHANGES IN DIRECTION OF MONOTONICITY. */
648             if (del2 == 0.) {
649             continue;
650             }
651             if ((((dsave) == 0. || (del2) == 0.) ? 0. : (((dsave)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
652             ++((ierr_datap)[0]);
653             }
654             dsave = del2;
655             continue;
656             }
657             ++((ierr_datap)[0]);
658             dsave = del2;
659             continue;
660             }
661             /* USE BRODLIE MODIFICATION OF BUTLAND FORMULA. */
662             hsumt3 = hsum + hsum + hsum;
663             w1 = (hsum + h1) / hsumt3;
664             w2 = (hsum + h2) / hsumt3;
665             /* Computing MAX */
666             dmax = PDLMAX(PDL_ABS(del1),PDL_ABS(del2));
667             /* Computing MIN */
668             PDL_Long dmin = PDLMIN(PDL_ABS(del1),PDL_ABS(del2));
669             PDL_Long drat1 = del1 / dmax;
670             PDL_Long drat2 = del2 / dmax;
671             (d_datap)[0+(__inc_d_n*(n))] = dmin / (w1 * drat1 + w2 * drat2);
672             }} /* Close n=1:-1 */
673             #line 4475 "lib/PDL/Primitive.pd"
674             /* SET D(N) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
675             /* SHAPE-PRESERVING. */
676             w1 = -h2 / hsum;
677             w2 = (h2 + hsum) / hsum;
678             (d_datap)[0+(__inc_d_n*(n-1))] = w1 * del1 + w2 * del2;
679             if (((((d_datap)[0+(__inc_d_n*(n-1))]) == 0. || (del2) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(n-1))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
680             (d_datap)[0+(__inc_d_n*(n-1))] = 0.;
681             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
682             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
683             dmax = 3. * del2;
684             if (PDL_ABS((d_datap)[0+(__inc_d_n*(n-1))]) > PDL_ABS(dmax)) {
685             (d_datap)[0+(__inc_d_n*(n-1))] = dmax;
686             }
687             }
688             #line 689 "lib/PDL/Primitive-pp-pchip_chim.c"
689 0 0         }PDL_BROADCASTLOOP_END_pchip_chim_readdata
    0          
690 0           } break;
691 0           case PDL_UL: {
692 0 0         PDL_DECLARE_PARAMS_pchip_chim_1(PDL_ULong,K,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
693 0 0         PDL_BROADCASTLOOP_START_pchip_chim_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
694             #line 4398 "lib/PDL/Primitive.pd"
695             /* Local variables */
696             PDL_ULong dmax, hsumt3;
697             PDL_Indx n = __privtrans->ind_sizes[0];
698             /* VALIDITY-CHECK ARGUMENTS. */
699             {/* Open n=1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
700             #line 4403 "lib/PDL/Primitive.pd"
701             if ((x_datap)[0+(__inc_x_n*(n))] > (x_datap)[0+(__inc_x_n*(n-1))]) continue;
702             (ierr_datap)[0] = -1;
703             return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "X-ARRAY NOT STRICTLY INCREASING");
704             }} /* Close n=1 */
705             #line 4407 "lib/PDL/Primitive.pd"
706             /* FUNCTION DEFINITION IS OK, GO ON. */
707             (ierr_datap)[0] = 0;
708             PDL_ULong h1 = (x_datap)[0+(__inc_x_n*(1))] - (x_datap)[0+(__inc_x_n*(0))];
709             PDL_ULong del1 = ((f_datap)[0+(__inc_f_n*(1))] - (f_datap)[0+(__inc_f_n*(0))]) / h1;
710             PDL_ULong dsave = del1;
711             /* SPECIAL CASE N=2 -- USE LINEAR INTERPOLATION. */
712             if (n <= 2) {
713             (d_datap)[0+(__inc_d_n*(0))] = (d_datap)[0+(__inc_d_n*(1))] = del1;
714             continue;
715             }
716             /* NORMAL CASE (N .GE. 3). */
717             PDL_ULong h2 = (x_datap)[0+(__inc_x_n*(2))] - (x_datap)[0+(__inc_x_n*(1))];
718             PDL_ULong del2 = ((f_datap)[0+(__inc_f_n*(2))] - (f_datap)[0+(__inc_f_n*(1))]) / h2;
719             /* SET D(1) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
720             /* SHAPE-PRESERVING. */
721             PDL_ULong hsum = h1 + h2;
722             PDL_ULong w1 = (h1 + hsum) / hsum;
723             PDL_ULong w2 = -h1 / hsum;
724             (d_datap)[0+(__inc_d_n*(0))] = w1 * del1 + w2 * del2;
725             if (((((d_datap)[0+(__inc_d_n*(0))]) == 0. || (del1) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(0))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
726             (d_datap)[0+(__inc_d_n*(0))] = 0.;
727             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
728             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
729             dmax = 3. * del1;
730             if (PDL_ABS((d_datap)[0+(__inc_d_n*(0))]) > PDL_ABS(dmax)) {
731             (d_datap)[0+(__inc_d_n*(0))] = dmax;
732             }
733             }
734             /* LOOP THROUGH INTERIOR POINTS. */
735             {/* Open n=1:-1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size-1)); for(; n<__n_stop; n+=1) {
736             #line 4437 "lib/PDL/Primitive.pd"
737             if (n != 1) {
738             h1 = h2;
739             h2 = (x_datap)[0+(__inc_x_n*(n+1))] - (x_datap)[0+(__inc_x_n*(n))];
740             hsum = h1 + h2;
741             del1 = del2;
742             del2 = ((f_datap)[0+(__inc_f_n*(n+1))] - (f_datap)[0+(__inc_f_n*(n))]) / h2;
743             }
744             /* SET D(I)=0 UNLESS DATA ARE STRICTLY MONOTONIC. */
745             (d_datap)[0+(__inc_d_n*(n))] = 0.;
746             PDL_ULong dtmp = (((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)));
747             if (dtmp <= 0) {
748             if (dtmp == 0.) {
749             /* COUNT NUMBER OF CHANGES IN DIRECTION OF MONOTONICITY. */
750             if (del2 == 0.) {
751             continue;
752             }
753             if ((((dsave) == 0. || (del2) == 0.) ? 0. : (((dsave)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
754             ++((ierr_datap)[0]);
755             }
756             dsave = del2;
757             continue;
758             }
759             ++((ierr_datap)[0]);
760             dsave = del2;
761             continue;
762             }
763             /* USE BRODLIE MODIFICATION OF BUTLAND FORMULA. */
764             hsumt3 = hsum + hsum + hsum;
765             w1 = (hsum + h1) / hsumt3;
766             w2 = (hsum + h2) / hsumt3;
767             /* Computing MAX */
768             dmax = PDLMAX(PDL_ABS(del1),PDL_ABS(del2));
769             /* Computing MIN */
770             PDL_ULong dmin = PDLMIN(PDL_ABS(del1),PDL_ABS(del2));
771             PDL_ULong drat1 = del1 / dmax;
772             PDL_ULong drat2 = del2 / dmax;
773             (d_datap)[0+(__inc_d_n*(n))] = dmin / (w1 * drat1 + w2 * drat2);
774             }} /* Close n=1:-1 */
775             #line 4475 "lib/PDL/Primitive.pd"
776             /* SET D(N) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
777             /* SHAPE-PRESERVING. */
778             w1 = -h2 / hsum;
779             w2 = (h2 + hsum) / hsum;
780             (d_datap)[0+(__inc_d_n*(n-1))] = w1 * del1 + w2 * del2;
781             if (((((d_datap)[0+(__inc_d_n*(n-1))]) == 0. || (del2) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(n-1))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
782             (d_datap)[0+(__inc_d_n*(n-1))] = 0.;
783             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
784             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
785             dmax = 3. * del2;
786             if (PDL_ABS((d_datap)[0+(__inc_d_n*(n-1))]) > PDL_ABS(dmax)) {
787             (d_datap)[0+(__inc_d_n*(n-1))] = dmax;
788             }
789             }
790             #line 791 "lib/PDL/Primitive-pp-pchip_chim.c"
791 0 0         }PDL_BROADCASTLOOP_END_pchip_chim_readdata
    0          
792 0           } break;
793 0           case PDL_IND: {
794 0 0         PDL_DECLARE_PARAMS_pchip_chim_1(PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
795 0 0         PDL_BROADCASTLOOP_START_pchip_chim_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
796             #line 4398 "lib/PDL/Primitive.pd"
797             /* Local variables */
798             PDL_Indx dmax, hsumt3;
799             PDL_Indx n = __privtrans->ind_sizes[0];
800             /* VALIDITY-CHECK ARGUMENTS. */
801             {/* Open n=1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
802             #line 4403 "lib/PDL/Primitive.pd"
803             if ((x_datap)[0+(__inc_x_n*(n))] > (x_datap)[0+(__inc_x_n*(n-1))]) continue;
804             (ierr_datap)[0] = -1;
805             return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "X-ARRAY NOT STRICTLY INCREASING");
806             }} /* Close n=1 */
807             #line 4407 "lib/PDL/Primitive.pd"
808             /* FUNCTION DEFINITION IS OK, GO ON. */
809             (ierr_datap)[0] = 0;
810             PDL_Indx h1 = (x_datap)[0+(__inc_x_n*(1))] - (x_datap)[0+(__inc_x_n*(0))];
811             PDL_Indx del1 = ((f_datap)[0+(__inc_f_n*(1))] - (f_datap)[0+(__inc_f_n*(0))]) / h1;
812             PDL_Indx dsave = del1;
813             /* SPECIAL CASE N=2 -- USE LINEAR INTERPOLATION. */
814             if (n <= 2) {
815             (d_datap)[0+(__inc_d_n*(0))] = (d_datap)[0+(__inc_d_n*(1))] = del1;
816             continue;
817             }
818             /* NORMAL CASE (N .GE. 3). */
819             PDL_Indx h2 = (x_datap)[0+(__inc_x_n*(2))] - (x_datap)[0+(__inc_x_n*(1))];
820             PDL_Indx del2 = ((f_datap)[0+(__inc_f_n*(2))] - (f_datap)[0+(__inc_f_n*(1))]) / h2;
821             /* SET D(1) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
822             /* SHAPE-PRESERVING. */
823             PDL_Indx hsum = h1 + h2;
824             PDL_Indx w1 = (h1 + hsum) / hsum;
825             PDL_Indx w2 = -h1 / hsum;
826             (d_datap)[0+(__inc_d_n*(0))] = w1 * del1 + w2 * del2;
827             if (((((d_datap)[0+(__inc_d_n*(0))]) == 0. || (del1) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(0))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
828             (d_datap)[0+(__inc_d_n*(0))] = 0.;
829             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
830             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
831             dmax = 3. * del1;
832             if (PDL_ABS((d_datap)[0+(__inc_d_n*(0))]) > PDL_ABS(dmax)) {
833             (d_datap)[0+(__inc_d_n*(0))] = dmax;
834             }
835             }
836             /* LOOP THROUGH INTERIOR POINTS. */
837             {/* Open n=1:-1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size-1)); for(; n<__n_stop; n+=1) {
838             #line 4437 "lib/PDL/Primitive.pd"
839             if (n != 1) {
840             h1 = h2;
841             h2 = (x_datap)[0+(__inc_x_n*(n+1))] - (x_datap)[0+(__inc_x_n*(n))];
842             hsum = h1 + h2;
843             del1 = del2;
844             del2 = ((f_datap)[0+(__inc_f_n*(n+1))] - (f_datap)[0+(__inc_f_n*(n))]) / h2;
845             }
846             /* SET D(I)=0 UNLESS DATA ARE STRICTLY MONOTONIC. */
847             (d_datap)[0+(__inc_d_n*(n))] = 0.;
848             PDL_Indx dtmp = (((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)));
849             if (dtmp <= 0) {
850             if (dtmp == 0.) {
851             /* COUNT NUMBER OF CHANGES IN DIRECTION OF MONOTONICITY. */
852             if (del2 == 0.) {
853             continue;
854             }
855             if ((((dsave) == 0. || (del2) == 0.) ? 0. : (((dsave)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
856             ++((ierr_datap)[0]);
857             }
858             dsave = del2;
859             continue;
860             }
861             ++((ierr_datap)[0]);
862             dsave = del2;
863             continue;
864             }
865             /* USE BRODLIE MODIFICATION OF BUTLAND FORMULA. */
866             hsumt3 = hsum + hsum + hsum;
867             w1 = (hsum + h1) / hsumt3;
868             w2 = (hsum + h2) / hsumt3;
869             /* Computing MAX */
870             dmax = PDLMAX(PDL_ABS(del1),PDL_ABS(del2));
871             /* Computing MIN */
872             PDL_Indx dmin = PDLMIN(PDL_ABS(del1),PDL_ABS(del2));
873             PDL_Indx drat1 = del1 / dmax;
874             PDL_Indx drat2 = del2 / dmax;
875             (d_datap)[0+(__inc_d_n*(n))] = dmin / (w1 * drat1 + w2 * drat2);
876             }} /* Close n=1:-1 */
877             #line 4475 "lib/PDL/Primitive.pd"
878             /* SET D(N) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
879             /* SHAPE-PRESERVING. */
880             w1 = -h2 / hsum;
881             w2 = (h2 + hsum) / hsum;
882             (d_datap)[0+(__inc_d_n*(n-1))] = w1 * del1 + w2 * del2;
883             if (((((d_datap)[0+(__inc_d_n*(n-1))]) == 0. || (del2) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(n-1))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
884             (d_datap)[0+(__inc_d_n*(n-1))] = 0.;
885             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
886             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
887             dmax = 3. * del2;
888             if (PDL_ABS((d_datap)[0+(__inc_d_n*(n-1))]) > PDL_ABS(dmax)) {
889             (d_datap)[0+(__inc_d_n*(n-1))] = dmax;
890             }
891             }
892             #line 893 "lib/PDL/Primitive-pp-pchip_chim.c"
893 0 0         }PDL_BROADCASTLOOP_END_pchip_chim_readdata
    0          
894 0           } break;
895 0           case PDL_ULL: {
896 0 0         PDL_DECLARE_PARAMS_pchip_chim_1(PDL_ULongLong,P,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
897 0 0         PDL_BROADCASTLOOP_START_pchip_chim_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
898             #line 4398 "lib/PDL/Primitive.pd"
899             /* Local variables */
900             PDL_ULongLong dmax, hsumt3;
901             PDL_Indx n = __privtrans->ind_sizes[0];
902             /* VALIDITY-CHECK ARGUMENTS. */
903             {/* Open n=1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
904             #line 4403 "lib/PDL/Primitive.pd"
905             if ((x_datap)[0+(__inc_x_n*(n))] > (x_datap)[0+(__inc_x_n*(n-1))]) continue;
906             (ierr_datap)[0] = -1;
907             return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "X-ARRAY NOT STRICTLY INCREASING");
908             }} /* Close n=1 */
909             #line 4407 "lib/PDL/Primitive.pd"
910             /* FUNCTION DEFINITION IS OK, GO ON. */
911             (ierr_datap)[0] = 0;
912             PDL_ULongLong h1 = (x_datap)[0+(__inc_x_n*(1))] - (x_datap)[0+(__inc_x_n*(0))];
913             PDL_ULongLong del1 = ((f_datap)[0+(__inc_f_n*(1))] - (f_datap)[0+(__inc_f_n*(0))]) / h1;
914             PDL_ULongLong dsave = del1;
915             /* SPECIAL CASE N=2 -- USE LINEAR INTERPOLATION. */
916             if (n <= 2) {
917             (d_datap)[0+(__inc_d_n*(0))] = (d_datap)[0+(__inc_d_n*(1))] = del1;
918             continue;
919             }
920             /* NORMAL CASE (N .GE. 3). */
921             PDL_ULongLong h2 = (x_datap)[0+(__inc_x_n*(2))] - (x_datap)[0+(__inc_x_n*(1))];
922             PDL_ULongLong del2 = ((f_datap)[0+(__inc_f_n*(2))] - (f_datap)[0+(__inc_f_n*(1))]) / h2;
923             /* SET D(1) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
924             /* SHAPE-PRESERVING. */
925             PDL_ULongLong hsum = h1 + h2;
926             PDL_ULongLong w1 = (h1 + hsum) / hsum;
927             PDL_ULongLong w2 = -h1 / hsum;
928             (d_datap)[0+(__inc_d_n*(0))] = w1 * del1 + w2 * del2;
929             if (((((d_datap)[0+(__inc_d_n*(0))]) == 0. || (del1) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(0))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
930             (d_datap)[0+(__inc_d_n*(0))] = 0.;
931             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
932             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
933             dmax = 3. * del1;
934             if (PDL_ABS((d_datap)[0+(__inc_d_n*(0))]) > PDL_ABS(dmax)) {
935             (d_datap)[0+(__inc_d_n*(0))] = dmax;
936             }
937             }
938             /* LOOP THROUGH INTERIOR POINTS. */
939             {/* Open n=1:-1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size-1)); for(; n<__n_stop; n+=1) {
940             #line 4437 "lib/PDL/Primitive.pd"
941             if (n != 1) {
942             h1 = h2;
943             h2 = (x_datap)[0+(__inc_x_n*(n+1))] - (x_datap)[0+(__inc_x_n*(n))];
944             hsum = h1 + h2;
945             del1 = del2;
946             del2 = ((f_datap)[0+(__inc_f_n*(n+1))] - (f_datap)[0+(__inc_f_n*(n))]) / h2;
947             }
948             /* SET D(I)=0 UNLESS DATA ARE STRICTLY MONOTONIC. */
949             (d_datap)[0+(__inc_d_n*(n))] = 0.;
950             PDL_ULongLong dtmp = (((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)));
951             if (dtmp <= 0) {
952             if (dtmp == 0.) {
953             /* COUNT NUMBER OF CHANGES IN DIRECTION OF MONOTONICITY. */
954             if (del2 == 0.) {
955             continue;
956             }
957             if ((((dsave) == 0. || (del2) == 0.) ? 0. : (((dsave)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
958             ++((ierr_datap)[0]);
959             }
960             dsave = del2;
961             continue;
962             }
963             ++((ierr_datap)[0]);
964             dsave = del2;
965             continue;
966             }
967             /* USE BRODLIE MODIFICATION OF BUTLAND FORMULA. */
968             hsumt3 = hsum + hsum + hsum;
969             w1 = (hsum + h1) / hsumt3;
970             w2 = (hsum + h2) / hsumt3;
971             /* Computing MAX */
972             dmax = PDLMAX(PDL_ABS(del1),PDL_ABS(del2));
973             /* Computing MIN */
974             PDL_ULongLong dmin = PDLMIN(PDL_ABS(del1),PDL_ABS(del2));
975             PDL_ULongLong drat1 = del1 / dmax;
976             PDL_ULongLong drat2 = del2 / dmax;
977             (d_datap)[0+(__inc_d_n*(n))] = dmin / (w1 * drat1 + w2 * drat2);
978             }} /* Close n=1:-1 */
979             #line 4475 "lib/PDL/Primitive.pd"
980             /* SET D(N) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
981             /* SHAPE-PRESERVING. */
982             w1 = -h2 / hsum;
983             w2 = (h2 + hsum) / hsum;
984             (d_datap)[0+(__inc_d_n*(n-1))] = w1 * del1 + w2 * del2;
985             if (((((d_datap)[0+(__inc_d_n*(n-1))]) == 0. || (del2) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(n-1))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
986             (d_datap)[0+(__inc_d_n*(n-1))] = 0.;
987             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
988             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
989             dmax = 3. * del2;
990             if (PDL_ABS((d_datap)[0+(__inc_d_n*(n-1))]) > PDL_ABS(dmax)) {
991             (d_datap)[0+(__inc_d_n*(n-1))] = dmax;
992             }
993             }
994             #line 995 "lib/PDL/Primitive-pp-pchip_chim.c"
995 0 0         }PDL_BROADCASTLOOP_END_pchip_chim_readdata
    0          
996 0           } break;
997 0           case PDL_LL: {
998 0 0         PDL_DECLARE_PARAMS_pchip_chim_1(PDL_LongLong,Q,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
999 0 0         PDL_BROADCASTLOOP_START_pchip_chim_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
1000             #line 4398 "lib/PDL/Primitive.pd"
1001             /* Local variables */
1002             PDL_LongLong dmax, hsumt3;
1003             PDL_Indx n = __privtrans->ind_sizes[0];
1004             /* VALIDITY-CHECK ARGUMENTS. */
1005             {/* Open n=1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
1006             #line 4403 "lib/PDL/Primitive.pd"
1007             if ((x_datap)[0+(__inc_x_n*(n))] > (x_datap)[0+(__inc_x_n*(n-1))]) continue;
1008             (ierr_datap)[0] = -1;
1009             return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "X-ARRAY NOT STRICTLY INCREASING");
1010             }} /* Close n=1 */
1011             #line 4407 "lib/PDL/Primitive.pd"
1012             /* FUNCTION DEFINITION IS OK, GO ON. */
1013             (ierr_datap)[0] = 0;
1014             PDL_LongLong h1 = (x_datap)[0+(__inc_x_n*(1))] - (x_datap)[0+(__inc_x_n*(0))];
1015             PDL_LongLong del1 = ((f_datap)[0+(__inc_f_n*(1))] - (f_datap)[0+(__inc_f_n*(0))]) / h1;
1016             PDL_LongLong dsave = del1;
1017             /* SPECIAL CASE N=2 -- USE LINEAR INTERPOLATION. */
1018             if (n <= 2) {
1019             (d_datap)[0+(__inc_d_n*(0))] = (d_datap)[0+(__inc_d_n*(1))] = del1;
1020             continue;
1021             }
1022             /* NORMAL CASE (N .GE. 3). */
1023             PDL_LongLong h2 = (x_datap)[0+(__inc_x_n*(2))] - (x_datap)[0+(__inc_x_n*(1))];
1024             PDL_LongLong del2 = ((f_datap)[0+(__inc_f_n*(2))] - (f_datap)[0+(__inc_f_n*(1))]) / h2;
1025             /* SET D(1) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
1026             /* SHAPE-PRESERVING. */
1027             PDL_LongLong hsum = h1 + h2;
1028             PDL_LongLong w1 = (h1 + hsum) / hsum;
1029             PDL_LongLong w2 = -h1 / hsum;
1030             (d_datap)[0+(__inc_d_n*(0))] = w1 * del1 + w2 * del2;
1031             if (((((d_datap)[0+(__inc_d_n*(0))]) == 0. || (del1) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(0))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
1032             (d_datap)[0+(__inc_d_n*(0))] = 0.;
1033             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
1034             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
1035             dmax = 3. * del1;
1036             if (PDL_ABS((d_datap)[0+(__inc_d_n*(0))]) > PDL_ABS(dmax)) {
1037             (d_datap)[0+(__inc_d_n*(0))] = dmax;
1038             }
1039             }
1040             /* LOOP THROUGH INTERIOR POINTS. */
1041             {/* Open n=1:-1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size-1)); for(; n<__n_stop; n+=1) {
1042             #line 4437 "lib/PDL/Primitive.pd"
1043             if (n != 1) {
1044             h1 = h2;
1045             h2 = (x_datap)[0+(__inc_x_n*(n+1))] - (x_datap)[0+(__inc_x_n*(n))];
1046             hsum = h1 + h2;
1047             del1 = del2;
1048             del2 = ((f_datap)[0+(__inc_f_n*(n+1))] - (f_datap)[0+(__inc_f_n*(n))]) / h2;
1049             }
1050             /* SET D(I)=0 UNLESS DATA ARE STRICTLY MONOTONIC. */
1051             (d_datap)[0+(__inc_d_n*(n))] = 0.;
1052             PDL_LongLong dtmp = (((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)));
1053             if (dtmp <= 0) {
1054             if (dtmp == 0.) {
1055             /* COUNT NUMBER OF CHANGES IN DIRECTION OF MONOTONICITY. */
1056             if (del2 == 0.) {
1057             continue;
1058             }
1059             if ((((dsave) == 0. || (del2) == 0.) ? 0. : (((dsave)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
1060             ++((ierr_datap)[0]);
1061             }
1062             dsave = del2;
1063             continue;
1064             }
1065             ++((ierr_datap)[0]);
1066             dsave = del2;
1067             continue;
1068             }
1069             /* USE BRODLIE MODIFICATION OF BUTLAND FORMULA. */
1070             hsumt3 = hsum + hsum + hsum;
1071             w1 = (hsum + h1) / hsumt3;
1072             w2 = (hsum + h2) / hsumt3;
1073             /* Computing MAX */
1074             dmax = PDLMAX(PDL_ABS(del1),PDL_ABS(del2));
1075             /* Computing MIN */
1076             PDL_LongLong dmin = PDLMIN(PDL_ABS(del1),PDL_ABS(del2));
1077             PDL_LongLong drat1 = del1 / dmax;
1078             PDL_LongLong drat2 = del2 / dmax;
1079             (d_datap)[0+(__inc_d_n*(n))] = dmin / (w1 * drat1 + w2 * drat2);
1080             }} /* Close n=1:-1 */
1081             #line 4475 "lib/PDL/Primitive.pd"
1082             /* SET D(N) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
1083             /* SHAPE-PRESERVING. */
1084             w1 = -h2 / hsum;
1085             w2 = (h2 + hsum) / hsum;
1086             (d_datap)[0+(__inc_d_n*(n-1))] = w1 * del1 + w2 * del2;
1087             if (((((d_datap)[0+(__inc_d_n*(n-1))]) == 0. || (del2) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(n-1))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
1088             (d_datap)[0+(__inc_d_n*(n-1))] = 0.;
1089             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
1090             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
1091             dmax = 3. * del2;
1092             if (PDL_ABS((d_datap)[0+(__inc_d_n*(n-1))]) > PDL_ABS(dmax)) {
1093             (d_datap)[0+(__inc_d_n*(n-1))] = dmax;
1094             }
1095             }
1096             #line 1097 "lib/PDL/Primitive-pp-pchip_chim.c"
1097 0 0         }PDL_BROADCASTLOOP_END_pchip_chim_readdata
    0          
1098 0           } break;
1099 2           case PDL_F: {
1100 2 50         PDL_DECLARE_PARAMS_pchip_chim_1(PDL_Float,F,PDL_Indx,N)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
1101 8 50         PDL_BROADCASTLOOP_START_pchip_chim_readdata {
    50          
    50          
    50          
    50          
    100          
    100          
1102             #line 4398 "lib/PDL/Primitive.pd"
1103             /* Local variables */
1104             PDL_Float dmax, hsumt3;
1105             PDL_Indx n = __privtrans->ind_sizes[0];
1106             /* VALIDITY-CHECK ARGUMENTS. */
1107             {/* Open n=1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
1108             #line 4403 "lib/PDL/Primitive.pd"
1109             if ((x_datap)[0+(__inc_x_n*(n))] > (x_datap)[0+(__inc_x_n*(n-1))]) continue;
1110             (ierr_datap)[0] = -1;
1111             return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "X-ARRAY NOT STRICTLY INCREASING");
1112             }} /* Close n=1 */
1113             #line 4407 "lib/PDL/Primitive.pd"
1114             /* FUNCTION DEFINITION IS OK, GO ON. */
1115             (ierr_datap)[0] = 0;
1116             PDL_Float h1 = (x_datap)[0+(__inc_x_n*(1))] - (x_datap)[0+(__inc_x_n*(0))];
1117             PDL_Float del1 = ((f_datap)[0+(__inc_f_n*(1))] - (f_datap)[0+(__inc_f_n*(0))]) / h1;
1118             PDL_Float dsave = del1;
1119             /* SPECIAL CASE N=2 -- USE LINEAR INTERPOLATION. */
1120             if (n <= 2) {
1121             (d_datap)[0+(__inc_d_n*(0))] = (d_datap)[0+(__inc_d_n*(1))] = del1;
1122             continue;
1123             }
1124             /* NORMAL CASE (N .GE. 3). */
1125             PDL_Float h2 = (x_datap)[0+(__inc_x_n*(2))] - (x_datap)[0+(__inc_x_n*(1))];
1126             PDL_Float del2 = ((f_datap)[0+(__inc_f_n*(2))] - (f_datap)[0+(__inc_f_n*(1))]) / h2;
1127             /* SET D(1) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
1128             /* SHAPE-PRESERVING. */
1129             PDL_Float hsum = h1 + h2;
1130             PDL_Float w1 = (h1 + hsum) / hsum;
1131             PDL_Float w2 = -h1 / hsum;
1132             (d_datap)[0+(__inc_d_n*(0))] = w1 * del1 + w2 * del2;
1133             if (((((d_datap)[0+(__inc_d_n*(0))]) == 0. || (del1) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(0))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
1134             (d_datap)[0+(__inc_d_n*(0))] = 0.;
1135             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
1136             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
1137             dmax = 3. * del1;
1138             if (PDL_ABS((d_datap)[0+(__inc_d_n*(0))]) > PDL_ABS(dmax)) {
1139             (d_datap)[0+(__inc_d_n*(0))] = dmax;
1140             }
1141             }
1142             /* LOOP THROUGH INTERIOR POINTS. */
1143             {/* Open n=1:-1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size-1)); for(; n<__n_stop; n+=1) {
1144             #line 4437 "lib/PDL/Primitive.pd"
1145             if (n != 1) {
1146             h1 = h2;
1147             h2 = (x_datap)[0+(__inc_x_n*(n+1))] - (x_datap)[0+(__inc_x_n*(n))];
1148             hsum = h1 + h2;
1149             del1 = del2;
1150             del2 = ((f_datap)[0+(__inc_f_n*(n+1))] - (f_datap)[0+(__inc_f_n*(n))]) / h2;
1151             }
1152             /* SET D(I)=0 UNLESS DATA ARE STRICTLY MONOTONIC. */
1153             (d_datap)[0+(__inc_d_n*(n))] = 0.;
1154             PDL_Float dtmp = (((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)));
1155             if (dtmp <= 0) {
1156             if (dtmp == 0.) {
1157             /* COUNT NUMBER OF CHANGES IN DIRECTION OF MONOTONICITY. */
1158             if (del2 == 0.) {
1159             continue;
1160             }
1161             if ((((dsave) == 0. || (del2) == 0.) ? 0. : (((dsave)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
1162             ++((ierr_datap)[0]);
1163             }
1164             dsave = del2;
1165             continue;
1166             }
1167             ++((ierr_datap)[0]);
1168             dsave = del2;
1169             continue;
1170             }
1171             /* USE BRODLIE MODIFICATION OF BUTLAND FORMULA. */
1172             hsumt3 = hsum + hsum + hsum;
1173             w1 = (hsum + h1) / hsumt3;
1174             w2 = (hsum + h2) / hsumt3;
1175             /* Computing MAX */
1176             dmax = PDLMAX(PDL_ABS(del1),PDL_ABS(del2));
1177             /* Computing MIN */
1178             PDL_Float dmin = PDLMIN(PDL_ABS(del1),PDL_ABS(del2));
1179             PDL_Float drat1 = del1 / dmax;
1180             PDL_Float drat2 = del2 / dmax;
1181             (d_datap)[0+(__inc_d_n*(n))] = dmin / (w1 * drat1 + w2 * drat2);
1182             }} /* Close n=1:-1 */
1183             #line 4475 "lib/PDL/Primitive.pd"
1184             /* SET D(N) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
1185             /* SHAPE-PRESERVING. */
1186             w1 = -h2 / hsum;
1187             w2 = (h2 + hsum) / hsum;
1188             (d_datap)[0+(__inc_d_n*(n-1))] = w1 * del1 + w2 * del2;
1189             if (((((d_datap)[0+(__inc_d_n*(n-1))]) == 0. || (del2) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(n-1))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
1190             (d_datap)[0+(__inc_d_n*(n-1))] = 0.;
1191             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
1192             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
1193             dmax = 3. * del2;
1194             if (PDL_ABS((d_datap)[0+(__inc_d_n*(n-1))]) > PDL_ABS(dmax)) {
1195             (d_datap)[0+(__inc_d_n*(n-1))] = dmax;
1196             }
1197             }
1198             #line 1199 "lib/PDL/Primitive-pp-pchip_chim.c"
1199 2 50         }PDL_BROADCASTLOOP_END_pchip_chim_readdata
    50          
1200 2           } break;
1201 6           case PDL_D: {
1202 6 50         PDL_DECLARE_PARAMS_pchip_chim_1(PDL_Double,D,PDL_Indx,N)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
1203 27 50         PDL_BROADCASTLOOP_START_pchip_chim_readdata {
    50          
    50          
    50          
    50          
    100          
    100          
1204             #line 4398 "lib/PDL/Primitive.pd"
1205             /* Local variables */
1206             PDL_Double dmax, hsumt3;
1207             PDL_Indx n = __privtrans->ind_sizes[0];
1208             /* VALIDITY-CHECK ARGUMENTS. */
1209             {/* Open n=1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
1210             #line 4403 "lib/PDL/Primitive.pd"
1211             if ((x_datap)[0+(__inc_x_n*(n))] > (x_datap)[0+(__inc_x_n*(n-1))]) continue;
1212             (ierr_datap)[0] = -1;
1213             return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "X-ARRAY NOT STRICTLY INCREASING");
1214             }} /* Close n=1 */
1215             #line 4407 "lib/PDL/Primitive.pd"
1216             /* FUNCTION DEFINITION IS OK, GO ON. */
1217             (ierr_datap)[0] = 0;
1218             PDL_Double h1 = (x_datap)[0+(__inc_x_n*(1))] - (x_datap)[0+(__inc_x_n*(0))];
1219             PDL_Double del1 = ((f_datap)[0+(__inc_f_n*(1))] - (f_datap)[0+(__inc_f_n*(0))]) / h1;
1220             PDL_Double dsave = del1;
1221             /* SPECIAL CASE N=2 -- USE LINEAR INTERPOLATION. */
1222             if (n <= 2) {
1223             (d_datap)[0+(__inc_d_n*(0))] = (d_datap)[0+(__inc_d_n*(1))] = del1;
1224             continue;
1225             }
1226             /* NORMAL CASE (N .GE. 3). */
1227             PDL_Double h2 = (x_datap)[0+(__inc_x_n*(2))] - (x_datap)[0+(__inc_x_n*(1))];
1228             PDL_Double del2 = ((f_datap)[0+(__inc_f_n*(2))] - (f_datap)[0+(__inc_f_n*(1))]) / h2;
1229             /* SET D(1) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
1230             /* SHAPE-PRESERVING. */
1231             PDL_Double hsum = h1 + h2;
1232             PDL_Double w1 = (h1 + hsum) / hsum;
1233             PDL_Double w2 = -h1 / hsum;
1234             (d_datap)[0+(__inc_d_n*(0))] = w1 * del1 + w2 * del2;
1235             if (((((d_datap)[0+(__inc_d_n*(0))]) == 0. || (del1) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(0))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
1236             (d_datap)[0+(__inc_d_n*(0))] = 0.;
1237             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
1238             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
1239             dmax = 3. * del1;
1240             if (PDL_ABS((d_datap)[0+(__inc_d_n*(0))]) > PDL_ABS(dmax)) {
1241             (d_datap)[0+(__inc_d_n*(0))] = dmax;
1242             }
1243             }
1244             /* LOOP THROUGH INTERIOR POINTS. */
1245             {/* Open n=1:-1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size-1)); for(; n<__n_stop; n+=1) {
1246             #line 4437 "lib/PDL/Primitive.pd"
1247             if (n != 1) {
1248             h1 = h2;
1249             h2 = (x_datap)[0+(__inc_x_n*(n+1))] - (x_datap)[0+(__inc_x_n*(n))];
1250             hsum = h1 + h2;
1251             del1 = del2;
1252             del2 = ((f_datap)[0+(__inc_f_n*(n+1))] - (f_datap)[0+(__inc_f_n*(n))]) / h2;
1253             }
1254             /* SET D(I)=0 UNLESS DATA ARE STRICTLY MONOTONIC. */
1255             (d_datap)[0+(__inc_d_n*(n))] = 0.;
1256             PDL_Double dtmp = (((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)));
1257             if (dtmp <= 0) {
1258             if (dtmp == 0.) {
1259             /* COUNT NUMBER OF CHANGES IN DIRECTION OF MONOTONICITY. */
1260             if (del2 == 0.) {
1261             continue;
1262             }
1263             if ((((dsave) == 0. || (del2) == 0.) ? 0. : (((dsave)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
1264             ++((ierr_datap)[0]);
1265             }
1266             dsave = del2;
1267             continue;
1268             }
1269             ++((ierr_datap)[0]);
1270             dsave = del2;
1271             continue;
1272             }
1273             /* USE BRODLIE MODIFICATION OF BUTLAND FORMULA. */
1274             hsumt3 = hsum + hsum + hsum;
1275             w1 = (hsum + h1) / hsumt3;
1276             w2 = (hsum + h2) / hsumt3;
1277             /* Computing MAX */
1278             dmax = PDLMAX(PDL_ABS(del1),PDL_ABS(del2));
1279             /* Computing MIN */
1280             PDL_Double dmin = PDLMIN(PDL_ABS(del1),PDL_ABS(del2));
1281             PDL_Double drat1 = del1 / dmax;
1282             PDL_Double drat2 = del2 / dmax;
1283             (d_datap)[0+(__inc_d_n*(n))] = dmin / (w1 * drat1 + w2 * drat2);
1284             }} /* Close n=1:-1 */
1285             #line 4475 "lib/PDL/Primitive.pd"
1286             /* SET D(N) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
1287             /* SHAPE-PRESERVING. */
1288             w1 = -h2 / hsum;
1289             w2 = (h2 + hsum) / hsum;
1290             (d_datap)[0+(__inc_d_n*(n-1))] = w1 * del1 + w2 * del2;
1291             if (((((d_datap)[0+(__inc_d_n*(n-1))]) == 0. || (del2) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(n-1))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
1292             (d_datap)[0+(__inc_d_n*(n-1))] = 0.;
1293             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
1294             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
1295             dmax = 3. * del2;
1296             if (PDL_ABS((d_datap)[0+(__inc_d_n*(n-1))]) > PDL_ABS(dmax)) {
1297             (d_datap)[0+(__inc_d_n*(n-1))] = dmax;
1298             }
1299             }
1300             #line 1301 "lib/PDL/Primitive-pp-pchip_chim.c"
1301 6 50         }PDL_BROADCASTLOOP_END_pchip_chim_readdata
    50          
1302 6           } break;
1303 0           case PDL_LD: {
1304 0 0         PDL_DECLARE_PARAMS_pchip_chim_1(PDL_LDouble,E,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1305 0 0         PDL_BROADCASTLOOP_START_pchip_chim_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
1306             #line 4398 "lib/PDL/Primitive.pd"
1307             /* Local variables */
1308             PDL_LDouble dmax, hsumt3;
1309             PDL_Indx n = __privtrans->ind_sizes[0];
1310             /* VALIDITY-CHECK ARGUMENTS. */
1311             {/* Open n=1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
1312             #line 4403 "lib/PDL/Primitive.pd"
1313             if ((x_datap)[0+(__inc_x_n*(n))] > (x_datap)[0+(__inc_x_n*(n-1))]) continue;
1314             (ierr_datap)[0] = -1;
1315             return PDL->make_error(PDL_EUSERERROR, "Error in pchip_chim:" "X-ARRAY NOT STRICTLY INCREASING");
1316             }} /* Close n=1 */
1317             #line 4407 "lib/PDL/Primitive.pd"
1318             /* FUNCTION DEFINITION IS OK, GO ON. */
1319             (ierr_datap)[0] = 0;
1320             PDL_LDouble h1 = (x_datap)[0+(__inc_x_n*(1))] - (x_datap)[0+(__inc_x_n*(0))];
1321             PDL_LDouble del1 = ((f_datap)[0+(__inc_f_n*(1))] - (f_datap)[0+(__inc_f_n*(0))]) / h1;
1322             PDL_LDouble dsave = del1;
1323             /* SPECIAL CASE N=2 -- USE LINEAR INTERPOLATION. */
1324             if (n <= 2) {
1325             (d_datap)[0+(__inc_d_n*(0))] = (d_datap)[0+(__inc_d_n*(1))] = del1;
1326             continue;
1327             }
1328             /* NORMAL CASE (N .GE. 3). */
1329             PDL_LDouble h2 = (x_datap)[0+(__inc_x_n*(2))] - (x_datap)[0+(__inc_x_n*(1))];
1330             PDL_LDouble del2 = ((f_datap)[0+(__inc_f_n*(2))] - (f_datap)[0+(__inc_f_n*(1))]) / h2;
1331             /* SET D(1) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
1332             /* SHAPE-PRESERVING. */
1333             PDL_LDouble hsum = h1 + h2;
1334             PDL_LDouble w1 = (h1 + hsum) / hsum;
1335             PDL_LDouble w2 = -h1 / hsum;
1336             (d_datap)[0+(__inc_d_n*(0))] = w1 * del1 + w2 * del2;
1337             if (((((d_datap)[0+(__inc_d_n*(0))]) == 0. || (del1) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(0))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
1338             (d_datap)[0+(__inc_d_n*(0))] = 0.;
1339             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
1340             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
1341             dmax = 3. * del1;
1342             if (PDL_ABS((d_datap)[0+(__inc_d_n*(0))]) > PDL_ABS(dmax)) {
1343             (d_datap)[0+(__inc_d_n*(0))] = dmax;
1344             }
1345             }
1346             /* LOOP THROUGH INTERIOR POINTS. */
1347             {/* Open n=1:-1 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((1),0), __n_stop=(__n_size-1)); for(; n<__n_stop; n+=1) {
1348             #line 4437 "lib/PDL/Primitive.pd"
1349             if (n != 1) {
1350             h1 = h2;
1351             h2 = (x_datap)[0+(__inc_x_n*(n+1))] - (x_datap)[0+(__inc_x_n*(n))];
1352             hsum = h1 + h2;
1353             del1 = del2;
1354             del2 = ((f_datap)[0+(__inc_f_n*(n+1))] - (f_datap)[0+(__inc_f_n*(n))]) / h2;
1355             }
1356             /* SET D(I)=0 UNLESS DATA ARE STRICTLY MONOTONIC. */
1357             (d_datap)[0+(__inc_d_n*(n))] = 0.;
1358             PDL_LDouble dtmp = (((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)));
1359             if (dtmp <= 0) {
1360             if (dtmp == 0.) {
1361             /* COUNT NUMBER OF CHANGES IN DIRECTION OF MONOTONICITY. */
1362             if (del2 == 0.) {
1363             continue;
1364             }
1365             if ((((dsave) == 0. || (del2) == 0.) ? 0. : (((dsave)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
1366             ++((ierr_datap)[0]);
1367             }
1368             dsave = del2;
1369             continue;
1370             }
1371             ++((ierr_datap)[0]);
1372             dsave = del2;
1373             continue;
1374             }
1375             /* USE BRODLIE MODIFICATION OF BUTLAND FORMULA. */
1376             hsumt3 = hsum + hsum + hsum;
1377             w1 = (hsum + h1) / hsumt3;
1378             w2 = (hsum + h2) / hsumt3;
1379             /* Computing MAX */
1380             dmax = PDLMAX(PDL_ABS(del1),PDL_ABS(del2));
1381             /* Computing MIN */
1382             PDL_LDouble dmin = PDLMIN(PDL_ABS(del1),PDL_ABS(del2));
1383             PDL_LDouble drat1 = del1 / dmax;
1384             PDL_LDouble drat2 = del2 / dmax;
1385             (d_datap)[0+(__inc_d_n*(n))] = dmin / (w1 * drat1 + w2 * drat2);
1386             }} /* Close n=1:-1 */
1387             #line 4475 "lib/PDL/Primitive.pd"
1388             /* SET D(N) VIA NON-CENTERED THREE-POINT FORMULA, ADJUSTED TO BE */
1389             /* SHAPE-PRESERVING. */
1390             w1 = -h2 / hsum;
1391             w2 = (h2 + hsum) / hsum;
1392             (d_datap)[0+(__inc_d_n*(n-1))] = w1 * del1 + w2 * del2;
1393             if (((((d_datap)[0+(__inc_d_n*(n-1))]) == 0. || (del2) == 0.) ? 0. : ((((d_datap)[0+(__inc_d_n*(n-1))])) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) <= 0.) {
1394             (d_datap)[0+(__inc_d_n*(n-1))] = 0.;
1395             } else if ((((del1) == 0. || (del2) == 0.) ? 0. : (((del1)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1)) * (((del2)) >= 0 ? PDL_ABS(1) : -PDL_ABS(1))) < 0.) {
1396             /* NEED DO THIS CHECK ONLY IF MONOTONICITY SWITCHES. */
1397             dmax = 3. * del2;
1398             if (PDL_ABS((d_datap)[0+(__inc_d_n*(n-1))]) > PDL_ABS(dmax)) {
1399             (d_datap)[0+(__inc_d_n*(n-1))] = dmax;
1400             }
1401             }
1402             #line 1403 "lib/PDL/Primitive-pp-pchip_chim.c"
1403 0 0         }PDL_BROADCASTLOOP_END_pchip_chim_readdata
    0          
1404 0           } break;
1405 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in pchip_chim: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
1406             }
1407             #undef PDL_IF_BAD
1408 8           return PDL_err;
1409             }
1410              
1411             static pdl_datatypes pdl_pchip_chim_vtable_gentypes[] = { PDL_SB, PDL_B, PDL_S, PDL_US, PDL_L, PDL_UL, PDL_IND, PDL_ULL, PDL_LL, PDL_F, PDL_D, PDL_LD, -1 };
1412             static PDL_Indx pdl_pchip_chim_vtable_realdims[] = { 1, 1, 1, 0 };
1413             static char *pdl_pchip_chim_vtable_parnames[] = { "x","f","d","ierr" };
1414             static short pdl_pchip_chim_vtable_parflags[] = {
1415             0,
1416             0,
1417             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE,
1418             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
1419             };
1420             static pdl_datatypes pdl_pchip_chim_vtable_partypes[] = { -1, -1, -1, PDL_IND };
1421             static PDL_Indx pdl_pchip_chim_vtable_realdims_starts[] = { 0, 1, 2, 3 };
1422             static PDL_Indx pdl_pchip_chim_vtable_realdims_ind_ids[] = { 0, 0, 0 };
1423             static char *pdl_pchip_chim_vtable_indnames[] = { "n" };
1424             pdl_transvtable pdl_pchip_chim_vtable = {
1425             PDL_TRANS_DO_BROADCAST, 0, pdl_pchip_chim_vtable_gentypes, 2, 4, NULL /*CORE21*/,
1426             pdl_pchip_chim_vtable_realdims, pdl_pchip_chim_vtable_parnames,
1427             pdl_pchip_chim_vtable_parflags, pdl_pchip_chim_vtable_partypes,
1428             pdl_pchip_chim_vtable_realdims_starts, pdl_pchip_chim_vtable_realdims_ind_ids, 3,
1429             1, pdl_pchip_chim_vtable_indnames,
1430             pdl_pchip_chim_redodims, pdl_pchip_chim_readdata, NULL,
1431             NULL,
1432             0,"PDL::Primitive::pchip_chim"
1433             };
1434              
1435              
1436 8           pdl_error pdl_run_pchip_chim(pdl *x,pdl *f,pdl *d,pdl *ierr) {
1437 8           pdl_error PDL_err = {0, NULL, 0};
1438 8 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
1439 8           pdl_trans *__privtrans = PDL->create_trans(&pdl_pchip_chim_vtable);
1440 8 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
1441 8           __privtrans->pdls[0] = x;
1442 8           __privtrans->pdls[1] = f;
1443 8           __privtrans->pdls[2] = d;
1444 8           __privtrans->pdls[3] = ierr;
1445 8 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
1446 8 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
1447 8           return PDL_err;
1448             }