Skip to content

Commit 2dac9e6

Browse files
authored
gh-116738: Statically initialize special constants in cmath module (gh-142161)
The initialization during `mod_exec` wasn't thread-safe with multiple interpreters.
1 parent 8392095 commit 2dac9e6

File tree

2 files changed

+101
-126
lines changed

2 files changed

+101
-126
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix :mod:`cmath` data race when initializing trigonometric tables with
2+
subinterpreters.

Modules/cmathmodule.c

Lines changed: 99 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,15 @@ special_type(double d)
163163
raised.
164164
*/
165165

166-
static Py_complex acos_special_values[7][7];
167-
166+
static Py_complex acos_special_values[7][7] = {
167+
{ {P34,INF}, {P,INF}, {P,INF}, {P,-INF}, {P,-INF}, {P34,-INF}, {N,INF} },
168+
{ {P12,INF}, {U,U}, {U,U}, {U,U}, {U,U}, {P12,-INF}, {N,N} },
169+
{ {P12,INF}, {U,U}, {P12,0.}, {P12,-0.}, {U,U}, {P12,-INF}, {P12,N} },
170+
{ {P12,INF}, {U,U}, {P12,0.}, {P12,-0.}, {U,U}, {P12,-INF}, {P12,N} },
171+
{ {P12,INF}, {U,U}, {U,U}, {U,U}, {U,U}, {P12,-INF}, {N,N} },
172+
{ {P14,INF}, {0.,INF}, {0.,INF}, {0.,-INF}, {0.,-INF}, {P14,-INF}, {N,INF} },
173+
{ {N,INF}, {N,N}, {N,N}, {N,N}, {N,N}, {N,-INF}, {N,N} }
174+
};
168175
/*[clinic input]
169176
cmath.acos -> Py_complex_protected
170177
@@ -202,7 +209,15 @@ cmath_acos_impl(PyObject *module, Py_complex z)
202209
}
203210

204211

205-
static Py_complex acosh_special_values[7][7];
212+
static Py_complex acosh_special_values[7][7] = {
213+
{ {INF,-P34}, {INF,-P}, {INF,-P}, {INF,P}, {INF,P}, {INF,P34}, {INF,N} },
214+
{ {INF,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,P12}, {N,N} },
215+
{ {INF,-P12}, {U,U}, {0.,-P12}, {0.,P12}, {U,U}, {INF,P12}, {N,P12} },
216+
{ {INF,-P12}, {U,U}, {0.,-P12}, {0.,P12}, {U,U}, {INF,P12}, {N,P12} },
217+
{ {INF,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,P12}, {N,N} },
218+
{ {INF,-P14}, {INF,-0.}, {INF,-0.}, {INF,0.}, {INF,0.}, {INF,P14}, {INF,N} },
219+
{ {INF,N}, {N,N}, {N,N}, {N,N}, {N,N}, {INF,N}, {N,N} }
220+
};
206221

207222
/*[clinic input]
208223
cmath.acosh = cmath.acos
@@ -257,7 +272,15 @@ cmath_asin_impl(PyObject *module, Py_complex z)
257272
}
258273

259274

260-
static Py_complex asinh_special_values[7][7];
275+
static Py_complex asinh_special_values[7][7] = {
276+
{ {-INF,-P14}, {-INF,-0.}, {-INF,-0.}, {-INF,0.}, {-INF,0.}, {-INF,P14}, {-INF,N} },
277+
{ {-INF,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {-INF,P12}, {N,N} },
278+
{ {-INF,-P12}, {U,U}, {-0.,-0.}, {-0.,0.}, {U,U}, {-INF,P12}, {N,N} },
279+
{ {INF,-P12}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {INF,P12}, {N,N} },
280+
{ {INF,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,P12}, {N,N} },
281+
{ {INF,-P14}, {INF,-0.}, {INF,-0.}, {INF,0.}, {INF,0.}, {INF,P14}, {INF,N} },
282+
{ {INF,N}, {N,N}, {N,-0.}, {N,0.}, {N,N}, {INF,N}, {N,N} }
283+
};
261284

262285
/*[clinic input]
263286
cmath.asinh = cmath.acos
@@ -318,7 +341,15 @@ cmath_atan_impl(PyObject *module, Py_complex z)
318341
}
319342

320343

321-
static Py_complex atanh_special_values[7][7];
344+
static Py_complex atanh_special_values[7][7] = {
345+
{ {-0.,-P12}, {-0.,-P12}, {-0.,-P12}, {-0.,P12}, {-0.,P12}, {-0.,P12}, {-0.,N} },
346+
{ {-0.,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {-0.,P12}, {N,N} },
347+
{ {-0.,-P12}, {U,U}, {-0.,-0.}, {-0.,0.}, {U,U}, {-0.,P12}, {-0.,N} },
348+
{ {0.,-P12}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {0.,P12}, {0.,N} },
349+
{ {0.,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {0.,P12}, {N,N} },
350+
{ {0.,-P12}, {0.,-P12}, {0.,-P12}, {0.,P12}, {0.,P12}, {0.,P12}, {0.,N} },
351+
{ {0.,-P12}, {N,N}, {N,N}, {N,N}, {N,N}, {0.,P12}, {N,N} }
352+
};
322353

323354
/*[clinic input]
324355
cmath.atanh = cmath.acos
@@ -391,7 +422,15 @@ cmath_cos_impl(PyObject *module, Py_complex z)
391422

392423

393424
/* cosh(infinity + i*y) needs to be dealt with specially */
394-
static Py_complex cosh_special_values[7][7];
425+
static Py_complex cosh_special_values[7][7] = {
426+
{ {INF,N}, {U,U}, {INF,0.}, {INF,-0.}, {U,U}, {INF,N}, {INF,N} },
427+
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
428+
{ {N,0.}, {U,U}, {1.,0.}, {1.,-0.}, {U,U}, {N,0.}, {N,0.} },
429+
{ {N,0.}, {U,U}, {1.,-0.}, {1.,0.}, {U,U}, {N,0.}, {N,0.} },
430+
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
431+
{ {INF,N}, {U,U}, {INF,-0.}, {INF,0.}, {U,U}, {INF,N}, {INF,N} },
432+
{ {N,N}, {N,N}, {N,0.}, {N,0.}, {N,N}, {N,N}, {N,N} }
433+
};
395434

396435
/*[clinic input]
397436
cmath.cosh = cmath.acos
@@ -453,7 +492,15 @@ cmath_cosh_impl(PyObject *module, Py_complex z)
453492

454493
/* exp(infinity + i*y) and exp(-infinity + i*y) need special treatment for
455494
finite y */
456-
static Py_complex exp_special_values[7][7];
495+
static Py_complex exp_special_values[7][7] = {
496+
{ {0.,0.}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {0.,0.}, {0.,0.} },
497+
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
498+
{ {N,N}, {U,U}, {1.,-0.}, {1.,0.}, {U,U}, {N,N}, {N,N} },
499+
{ {N,N}, {U,U}, {1.,-0.}, {1.,0.}, {U,U}, {N,N}, {N,N} },
500+
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
501+
{ {INF,N}, {U,U}, {INF,-0.}, {INF,0.}, {U,U}, {INF,N}, {INF,N} },
502+
{ {N,N}, {N,N}, {N,-0.}, {N,0.}, {N,N}, {N,N}, {N,N} }
503+
};
457504

458505
/*[clinic input]
459506
cmath.exp = cmath.acos
@@ -512,7 +559,15 @@ cmath_exp_impl(PyObject *module, Py_complex z)
512559
return r;
513560
}
514561

515-
static Py_complex log_special_values[7][7];
562+
static Py_complex log_special_values[7][7] = {
563+
{ {INF,-P34}, {INF,-P}, {INF,-P}, {INF,P}, {INF,P}, {INF,P34}, {INF,N} },
564+
{ {INF,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,P12}, {N,N} },
565+
{ {INF,-P12}, {U,U}, {-INF,-P}, {-INF,P}, {U,U}, {INF,P12}, {N,N} },
566+
{ {INF,-P12}, {U,U}, {-INF,-0.}, {-INF,0.}, {U,U}, {INF,P12}, {N,N} },
567+
{ {INF,-P12}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,P12}, {N,N} },
568+
{ {INF,-P14}, {INF,-0.}, {INF,-0.}, {INF,0.}, {INF,0.}, {INF,P14}, {INF,N} },
569+
{ {INF,N}, {N,N}, {N,N}, {N,N}, {N,N}, {INF,N}, {N,N} }
570+
};
516571

517572
static Py_complex
518573
c_log(Py_complex z)
@@ -628,7 +683,15 @@ cmath_sin_impl(PyObject *module, Py_complex z)
628683

629684

630685
/* sinh(infinity + i*y) needs to be dealt with specially */
631-
static Py_complex sinh_special_values[7][7];
686+
static Py_complex sinh_special_values[7][7] = {
687+
{ {INF,N}, {U,U}, {-INF,-0.}, {-INF,0.}, {U,U}, {INF,N}, {INF,N} },
688+
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
689+
{ {0.,N}, {U,U}, {-0.,-0.}, {-0.,0.}, {U,U}, {0.,N}, {0.,N} },
690+
{ {0.,N}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {0.,N}, {0.,N} },
691+
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
692+
{ {INF,N}, {U,U}, {INF,-0.}, {INF,0.}, {U,U}, {INF,N}, {INF,N} },
693+
{ {N,N}, {N,N}, {N,-0.}, {N,0.}, {N,N}, {N,N}, {N,N} }
694+
};
632695

633696
/*[clinic input]
634697
cmath.sinh = cmath.acos
@@ -687,7 +750,15 @@ cmath_sinh_impl(PyObject *module, Py_complex z)
687750
}
688751

689752

690-
static Py_complex sqrt_special_values[7][7];
753+
static Py_complex sqrt_special_values[7][7] = {
754+
{ {INF,-INF}, {0.,-INF}, {0.,-INF}, {0.,INF}, {0.,INF}, {INF,INF}, {N,INF} },
755+
{ {INF,-INF}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,INF}, {N,N} },
756+
{ {INF,-INF}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {INF,INF}, {N,N} },
757+
{ {INF,-INF}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {INF,INF}, {N,N} },
758+
{ {INF,-INF}, {U,U}, {U,U}, {U,U}, {U,U}, {INF,INF}, {N,N} },
759+
{ {INF,-INF}, {INF,-0.}, {INF,-0.}, {INF,0.}, {INF,0.}, {INF,INF}, {INF,N} },
760+
{ {INF,-INF}, {N,N}, {N,N}, {N,N}, {N,N}, {INF,INF}, {N,N} }
761+
};
691762

692763
/*[clinic input]
693764
cmath.sqrt = cmath.acos
@@ -786,7 +857,15 @@ cmath_tan_impl(PyObject *module, Py_complex z)
786857

787858

788859
/* tanh(infinity + i*y) needs to be dealt with specially */
789-
static Py_complex tanh_special_values[7][7];
860+
static Py_complex tanh_special_values[7][7] = {
861+
{ {-1.,0.}, {U,U}, {-1.,-0.}, {-1.,0.}, {U,U}, {-1.,0.}, {-1.,0.} },
862+
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
863+
{ {-0.0,N}, {U,U}, {-0.,-0.}, {-0.,0.}, {U,U}, {-0.0,N}, {-0.,N} },
864+
{ {0.0,N}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {0.0,N}, {0.,N} },
865+
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
866+
{ {1.,0.}, {U,U}, {1.,-0.}, {1.,0.}, {U,U}, {1.,0.}, {1.,0.} },
867+
{ {N,N}, {N,N}, {N,-0.}, {N,0.}, {N,N}, {N,N}, {N,N} }
868+
};
790869

791870
/*[clinic input]
792871
cmath.tanh = cmath.acos
@@ -969,7 +1048,15 @@ cmath_polar_impl(PyObject *module, Py_complex z)
9691048
9701049
*/
9711050

972-
static Py_complex rect_special_values[7][7];
1051+
static Py_complex rect_special_values[7][7] = {
1052+
{ {INF,N}, {U,U}, {-INF,0.}, {-INF,-0.}, {U,U}, {INF,N}, {INF,N} },
1053+
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
1054+
{ {0.,0.}, {U,U}, {-0.,0.}, {-0.,-0.}, {U,U}, {0.,0.}, {0.,0.} },
1055+
{ {0.,0.}, {U,U}, {0.,-0.}, {0.,0.}, {U,U}, {0.,0.}, {0.,0.} },
1056+
{ {N,N}, {U,U}, {U,U}, {U,U}, {U,U}, {N,N}, {N,N} },
1057+
{ {INF,N}, {U,U}, {INF,-0.}, {INF,0.}, {U,U}, {INF,N}, {INF,N} },
1058+
{ {N,N}, {N,N}, {N,0.}, {N,0.}, {N,N}, {N,N}, {N,N} }
1059+
};
9731060

9741061
/*[clinic input]
9751062
cmath.rect
@@ -1202,120 +1289,6 @@ cmath_exec(PyObject *mod)
12021289
return -1;
12031290
}
12041291

1205-
/* initialize special value tables */
1206-
1207-
#define INIT_SPECIAL_VALUES(NAME, BODY) { Py_complex* p = (Py_complex*)NAME; BODY }
1208-
#define C(REAL, IMAG) p->real = REAL; p->imag = IMAG; ++p;
1209-
1210-
INIT_SPECIAL_VALUES(acos_special_values, {
1211-
C(P34,INF) C(P,INF) C(P,INF) C(P,-INF) C(P,-INF) C(P34,-INF) C(N,INF)
1212-
C(P12,INF) C(U,U) C(U,U) C(U,U) C(U,U) C(P12,-INF) C(N,N)
1213-
C(P12,INF) C(U,U) C(P12,0.) C(P12,-0.) C(U,U) C(P12,-INF) C(P12,N)
1214-
C(P12,INF) C(U,U) C(P12,0.) C(P12,-0.) C(U,U) C(P12,-INF) C(P12,N)
1215-
C(P12,INF) C(U,U) C(U,U) C(U,U) C(U,U) C(P12,-INF) C(N,N)
1216-
C(P14,INF) C(0.,INF) C(0.,INF) C(0.,-INF) C(0.,-INF) C(P14,-INF) C(N,INF)
1217-
C(N,INF) C(N,N) C(N,N) C(N,N) C(N,N) C(N,-INF) C(N,N)
1218-
})
1219-
1220-
INIT_SPECIAL_VALUES(acosh_special_values, {
1221-
C(INF,-P34) C(INF,-P) C(INF,-P) C(INF,P) C(INF,P) C(INF,P34) C(INF,N)
1222-
C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N)
1223-
C(INF,-P12) C(U,U) C(0.,-P12) C(0.,P12) C(U,U) C(INF,P12) C(N,P12)
1224-
C(INF,-P12) C(U,U) C(0.,-P12) C(0.,P12) C(U,U) C(INF,P12) C(N,P12)
1225-
C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N)
1226-
C(INF,-P14) C(INF,-0.) C(INF,-0.) C(INF,0.) C(INF,0.) C(INF,P14) C(INF,N)
1227-
C(INF,N) C(N,N) C(N,N) C(N,N) C(N,N) C(INF,N) C(N,N)
1228-
})
1229-
1230-
INIT_SPECIAL_VALUES(asinh_special_values, {
1231-
C(-INF,-P14) C(-INF,-0.) C(-INF,-0.) C(-INF,0.) C(-INF,0.) C(-INF,P14) C(-INF,N)
1232-
C(-INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(-INF,P12) C(N,N)
1233-
C(-INF,-P12) C(U,U) C(-0.,-0.) C(-0.,0.) C(U,U) C(-INF,P12) C(N,N)
1234-
C(INF,-P12) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(INF,P12) C(N,N)
1235-
C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N)
1236-
C(INF,-P14) C(INF,-0.) C(INF,-0.) C(INF,0.) C(INF,0.) C(INF,P14) C(INF,N)
1237-
C(INF,N) C(N,N) C(N,-0.) C(N,0.) C(N,N) C(INF,N) C(N,N)
1238-
})
1239-
1240-
INIT_SPECIAL_VALUES(atanh_special_values, {
1241-
C(-0.,-P12) C(-0.,-P12) C(-0.,-P12) C(-0.,P12) C(-0.,P12) C(-0.,P12) C(-0.,N)
1242-
C(-0.,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(-0.,P12) C(N,N)
1243-
C(-0.,-P12) C(U,U) C(-0.,-0.) C(-0.,0.) C(U,U) C(-0.,P12) C(-0.,N)
1244-
C(0.,-P12) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.,P12) C(0.,N)
1245-
C(0.,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(0.,P12) C(N,N)
1246-
C(0.,-P12) C(0.,-P12) C(0.,-P12) C(0.,P12) C(0.,P12) C(0.,P12) C(0.,N)
1247-
C(0.,-P12) C(N,N) C(N,N) C(N,N) C(N,N) C(0.,P12) C(N,N)
1248-
})
1249-
1250-
INIT_SPECIAL_VALUES(cosh_special_values, {
1251-
C(INF,N) C(U,U) C(INF,0.) C(INF,-0.) C(U,U) C(INF,N) C(INF,N)
1252-
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
1253-
C(N,0.) C(U,U) C(1.,0.) C(1.,-0.) C(U,U) C(N,0.) C(N,0.)
1254-
C(N,0.) C(U,U) C(1.,-0.) C(1.,0.) C(U,U) C(N,0.) C(N,0.)
1255-
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
1256-
C(INF,N) C(U,U) C(INF,-0.) C(INF,0.) C(U,U) C(INF,N) C(INF,N)
1257-
C(N,N) C(N,N) C(N,0.) C(N,0.) C(N,N) C(N,N) C(N,N)
1258-
})
1259-
1260-
INIT_SPECIAL_VALUES(exp_special_values, {
1261-
C(0.,0.) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.,0.) C(0.,0.)
1262-
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
1263-
C(N,N) C(U,U) C(1.,-0.) C(1.,0.) C(U,U) C(N,N) C(N,N)
1264-
C(N,N) C(U,U) C(1.,-0.) C(1.,0.) C(U,U) C(N,N) C(N,N)
1265-
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
1266-
C(INF,N) C(U,U) C(INF,-0.) C(INF,0.) C(U,U) C(INF,N) C(INF,N)
1267-
C(N,N) C(N,N) C(N,-0.) C(N,0.) C(N,N) C(N,N) C(N,N)
1268-
})
1269-
1270-
INIT_SPECIAL_VALUES(log_special_values, {
1271-
C(INF,-P34) C(INF,-P) C(INF,-P) C(INF,P) C(INF,P) C(INF,P34) C(INF,N)
1272-
C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N)
1273-
C(INF,-P12) C(U,U) C(-INF,-P) C(-INF,P) C(U,U) C(INF,P12) C(N,N)
1274-
C(INF,-P12) C(U,U) C(-INF,-0.) C(-INF,0.) C(U,U) C(INF,P12) C(N,N)
1275-
C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N)
1276-
C(INF,-P14) C(INF,-0.) C(INF,-0.) C(INF,0.) C(INF,0.) C(INF,P14) C(INF,N)
1277-
C(INF,N) C(N,N) C(N,N) C(N,N) C(N,N) C(INF,N) C(N,N)
1278-
})
1279-
1280-
INIT_SPECIAL_VALUES(sinh_special_values, {
1281-
C(INF,N) C(U,U) C(-INF,-0.) C(-INF,0.) C(U,U) C(INF,N) C(INF,N)
1282-
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
1283-
C(0.,N) C(U,U) C(-0.,-0.) C(-0.,0.) C(U,U) C(0.,N) C(0.,N)
1284-
C(0.,N) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.,N) C(0.,N)
1285-
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
1286-
C(INF,N) C(U,U) C(INF,-0.) C(INF,0.) C(U,U) C(INF,N) C(INF,N)
1287-
C(N,N) C(N,N) C(N,-0.) C(N,0.) C(N,N) C(N,N) C(N,N)
1288-
})
1289-
1290-
INIT_SPECIAL_VALUES(sqrt_special_values, {
1291-
C(INF,-INF) C(0.,-INF) C(0.,-INF) C(0.,INF) C(0.,INF) C(INF,INF) C(N,INF)
1292-
C(INF,-INF) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,INF) C(N,N)
1293-
C(INF,-INF) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(INF,INF) C(N,N)
1294-
C(INF,-INF) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(INF,INF) C(N,N)
1295-
C(INF,-INF) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,INF) C(N,N)
1296-
C(INF,-INF) C(INF,-0.) C(INF,-0.) C(INF,0.) C(INF,0.) C(INF,INF) C(INF,N)
1297-
C(INF,-INF) C(N,N) C(N,N) C(N,N) C(N,N) C(INF,INF) C(N,N)
1298-
})
1299-
1300-
INIT_SPECIAL_VALUES(tanh_special_values, {
1301-
C(-1.,0.) C(U,U) C(-1.,-0.) C(-1.,0.) C(U,U) C(-1.,0.) C(-1.,0.)
1302-
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
1303-
C(-0.0,N) C(U,U) C(-0.,-0.) C(-0.,0.) C(U,U) C(-0.0,N) C(-0.,N)
1304-
C(0.0,N) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.0,N) C(0.,N)
1305-
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
1306-
C(1.,0.) C(U,U) C(1.,-0.) C(1.,0.) C(U,U) C(1.,0.) C(1.,0.)
1307-
C(N,N) C(N,N) C(N,-0.) C(N,0.) C(N,N) C(N,N) C(N,N)
1308-
})
1309-
1310-
INIT_SPECIAL_VALUES(rect_special_values, {
1311-
C(INF,N) C(U,U) C(-INF,0.) C(-INF,-0.) C(U,U) C(INF,N) C(INF,N)
1312-
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
1313-
C(0.,0.) C(U,U) C(-0.,0.) C(-0.,-0.) C(U,U) C(0.,0.) C(0.,0.)
1314-
C(0.,0.) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.,0.) C(0.,0.)
1315-
C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N)
1316-
C(INF,N) C(U,U) C(INF,-0.) C(INF,0.) C(U,U) C(INF,N) C(INF,N)
1317-
C(N,N) C(N,N) C(N,0.) C(N,0.) C(N,N) C(N,N) C(N,N)
1318-
})
13191292
return 0;
13201293
}
13211294

0 commit comments

Comments
 (0)