Loading [MathJax]/extensions/TeX/AMSsymbols.js
LAL 7.7.0.1-00ddc7f
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
SWIGTestLALPython.py
Go to the documentation of this file.
1# Check SWIG Python bindings for LAL
2# Author: Karl Wette, 2011--2014
3
4import contextlib
5import datetime
6import os
7import pickle
8import sys
9import inspect
10import gc
11
12import pytest
13
14import numpy
15from numpy.testing import assert_array_equal
16
17try:
18 from numpy.exceptions import ComplexWarning
19except ImportError:
20 # FIXME: Remove this once we require at least Numpy >= 1.25.0.
21 from numpy import ComplexWarning
22
23# return if 'x' has both value 'v' and type 't'
24def is_value_and_type(x, v, t):
25 return x == v and type(x) is t
26
27
28# check module load
29print("checking module load ...", file=sys.stderr)
30import lal
31from lal import globalvar as lalglobalvar
32
33lal_c_si = lal.C_SI
34lal_180_pi = lal.LAL_180_PI
35print("PASSED module load", file=sys.stderr)
36
37
38# -- configure error handling
39
40# set error handlers
42 lal.swig_set_nice_error_handlers()
43
44
46 if "NASTY_ERROR_HANDLERS" in os.environ:
47 lal.swig_set_nasty_error_handlers()
48 else:
49 lal.swig_set_nice_error_handlers()
50
51
53
54
55@contextlib.contextmanager
56def catch_errors(*args, **kwargs):
58 with pytest.raises(*args, **kwargs):
59 yield
61
62
63# -- check for memory leaks
64
65
67 # pytest's rewrite of assert() can keep references
68 # to SWIGLAL objects around; find and clear them
69 frame = inspect.currentframe()
70 try:
71 for v in frame.f_back.f_locals:
72 if v.startswith("@py_assert"):
73 frame.f_back.f_locals[v] = None
74 finally:
75 del frame
76
77 # garbage collector should free all SWIGLAL objects
78 gc.collect()
79
80 # check that all LAL memory has been freed
81 lal.CheckMemoryLeaks()
82
83
84# -- tests
85
86
87@pytest.mark.skipif(
88 lal.MEMORY_FUNCTIONS_DISABLED,
89 reason="LAL was built with MEMORY_FUNCTIONS_DISABLED",
90)
92 """check memory allocation"""
93 print("checking memory allocation ...", file=sys.stderr)
95 mem1 = lal.Detector()
96 mem2 = lal.CreateCOMPLEX8Vector(5)
97 mem3 = lal.CreateREAL8Vector(3)
98 mem4 = lal.CreateREAL4TimeSeries(
99 "test", lal.LIGOTimeGPS(0), 100, 0.1, lal.DimensionlessUnit, 10
100 )
101 print(
102 "*** below should be an error message from CheckMemoryLeaks() ***",
103 file=sys.stderr,
104 )
105
106 with catch_errors(RuntimeError, match="Generic failure"):
108 print(
109 "*** above should be an error message from CheckMemoryLeaks() ***",
110 file=sys.stderr,
111 )
112 del mem1
113 del mem2
114 del mem3
115 del mem4
117 print("PASSED memory allocation", file=sys.stderr)
118
119
121 """check object parent tracking"""
122 print("checking object parent tracking ...", file=sys.stderr)
123 a = lal.gsl_vector(3)
124 a.data = [1.1, 2.2, 3.3]
125 b = a.data
126 assert not b.flags["OWNDATA"]
127 assert_array_equal(b, [1.1, 2.2, 3.3])
128 del a
129 assert_array_equal(b, [1.1, 2.2, 3.3])
130 ts = lal.CreateREAL8TimeSeries(
131 "test", lal.LIGOTimeGPS(0), 0, 0.1, lal.DimensionlessUnit, 10
132 )
133 ts.data.data = list(range(0, 10))
134 for i in range(0, 7):
135 v = ts.data
136 assert_array_equal(v.data, list(range(0, 10)))
137 del ts
138 assert_array_equal(v.data, list(range(0, 10)))
139 del v
141 print("PASSED object parent tracking", file=sys.stderr)
142
143
145 """check equal return/first argument type handling"""
146 print("checking equal return/first argument type handling", file=sys.stderr)
147 sv = lal.CreateStringVector("1")
148 assert sv.length == 1
149 lal.AppendString2Vector(sv, "2")
150 assert sv.length == 2
151 sv = lal.AppendString2Vector(sv, "3")
152 assert sv.length == 3
153 sv2 = lal.AppendString2Vector(sv, "4")
154 assert sv.length == 4
155 assert sv2.length == 4
156 assert sv == sv2
157 del sv
158 del sv2
160 ts = lal.CreateREAL8TimeSeries("ts", 800000000, 100, 0.1, lal.HertzUnit, 10)
161 assert ts.data.length == 10
162 lal.ResizeREAL8TimeSeries(ts, 0, 20)
163 assert ts.data.length == 20
164 ts = lal.ResizeREAL8TimeSeries(ts, 0, 30)
165 assert ts.data.length == 30
166 ts2 = lal.ResizeREAL8TimeSeries(ts, 0, 40)
167 assert ts.data.length == 40
168 assert ts2.data.length == 40
169 assert ts == ts2
170 del ts
171 del ts2
173 print("PASSED equal return/first argument type handling", file=sys.stderr)
174
175
177 """check string conversions"""
178 print("checking string conversions ...", file=sys.stderr)
179 strs = ["a", "bc", "def"]
180 sv = lal.CreateStringVector(*strs)
181 assert sv.length == 3
182 assert_array_equal(sv.data.astype(object), strs)
183 strs[0] = "ghijk"
184 sv.data[0] = strs[0]
185 strs.append("lmnopq")
186 sv = lal.AppendString2Vector(sv, strs[3])
187 assert sv.length == 4
188 for i in range(0, 4):
189 assert sv.data[i] == strs[i]
190 del sv
192 print("PASSED string conversions", file=sys.stderr)
193
194
196 """check static vector/matrix conversions"""
197 print("checking static vector/matrix conversions ...", file=sys.stderr)
198 lalglobalvar.swig_lal_test_struct_vector[
199 0
200 ] = lalglobalvar.swig_lal_test_struct_const
201 assert (
202 lalglobalvar.swig_lal_test_struct_vector[0].n
203 == lalglobalvar.swig_lal_test_struct_const.n
204 )
205 assert (
206 lalglobalvar.swig_lal_test_struct_vector[0].i
207 == lalglobalvar.swig_lal_test_struct_const.i
208 )
209 assert (
210 lalglobalvar.swig_lal_test_struct_vector[0].f
211 == lalglobalvar.swig_lal_test_struct_const.f
212 )
213 assert (
214 lalglobalvar.swig_lal_test_struct_vector[0].str
215 == lalglobalvar.swig_lal_test_struct_const.str
216 )
217 assert_array_equal(
218 lalglobalvar.swig_lal_test_struct_vector[0].vec,
219 lalglobalvar.swig_lal_test_struct_const.vec,
220 )
221 lalglobalvar.swig_lal_test_struct_matrix[
222 0, 0
223 ] = lalglobalvar.swig_lal_test_struct_const
224 assert (
225 lalglobalvar.swig_lal_test_struct_matrix[0, 0].n
226 == lalglobalvar.swig_lal_test_struct_const.n
227 )
228 assert (
229 lalglobalvar.swig_lal_test_struct_matrix[0, 0].i
230 == lalglobalvar.swig_lal_test_struct_const.i
231 )
232 assert (
233 lalglobalvar.swig_lal_test_struct_matrix[0, 0].f
234 == lalglobalvar.swig_lal_test_struct_const.f
235 )
236 assert (
237 lalglobalvar.swig_lal_test_struct_matrix[0, 0].str
238 == lalglobalvar.swig_lal_test_struct_const.str
239 )
240 assert_array_equal(
241 lalglobalvar.swig_lal_test_struct_matrix[0, 0].vec,
242 lalglobalvar.swig_lal_test_struct_const.vec,
243 )
244 sts = lal.swig_lal_test_struct()
245 assert len(sts.vec) == 3
246 assert len(sts.evec) == 3
247 assert sts.mat.shape == (2, 3)
248 sts.vec = [3, 2, 1]
249 assert_array_equal(sts.vec, [3, 2, 1])
250 sts.mat = [[4, 5, 6], (9, 8, 7)]
251 with catch_errors(TypeError):
252 sts.mat = [[1.1, 2.3, 4.5], [6.5, 4.3, 2.1]]
253 assert_array_equal(sts.mat, [[4, 5, 6], [9, 8, 7]])
254 for i in range(0, 3):
255 sts.evec[i] = 2 * i + 3
256 assert sts.evec[i] == (2 * i + 3)
257 del sts
258 assert not lalglobalvar.swig_lal_test_enum_vector.any()
259 assert not lalglobalvar.swig_lal_test_enum_matrix.any()
260 assert len(lalglobalvar.swig_lal_test_empty_INT4_vector) == 0
261 assert not lalglobalvar.swig_lal_test_INT4_vector.any()
262 assert not lalglobalvar.swig_lal_test_INT4_matrix.any()
263 assert not lalglobalvar.swig_lal_test_REAL8_vector.any()
264 assert not lalglobalvar.swig_lal_test_REAL8_matrix.any()
265 assert not lalglobalvar.swig_lal_test_COMPLEX8_vector.any()
266 assert not lalglobalvar.swig_lal_test_COMPLEX8_matrix.any()
267 lalglobalvar.swig_lal_test_INT4_vector[0] = 10
268 assert lalglobalvar.swig_lal_test_INT4_vector[0] == 10
269 lalglobalvar.swig_lal_test_INT4_matrix[0, 0] = 11
270 assert lalglobalvar.swig_lal_test_INT4_matrix[0, 0] == 11
271 lalglobalvar.swig_lal_test_INT4_vector = (
272 lalglobalvar.swig_lal_test_INT4_const_vector
273 )
274 assert_array_equal(lalglobalvar.swig_lal_test_INT4_vector, [1, 2, 4])
275 assert lalglobalvar.swig_lal_test_INT4_const_vector[2] == 4
276 lalglobalvar.swig_lal_test_INT4_matrix = (
277 lalglobalvar.swig_lal_test_INT4_const_matrix
278 )
279 assert_array_equal(
280 lalglobalvar.swig_lal_test_INT4_matrix,
281 [[1, 2, 4], [2, 4, 8]],
282 )
283 assert lalglobalvar.swig_lal_test_INT4_const_matrix[1, 2] == 8
284 with catch_errors(TypeError):
285 lalglobalvar.swig_lal_test_INT4_const_vector(20)
286 lalglobalvar.swig_lal_test_REAL8_vector[0] = 3.4
287 assert lalglobalvar.swig_lal_test_REAL8_vector[0] == 3.4
288 lalglobalvar.swig_lal_test_REAL8_matrix[0, 0] = 5.6
289 assert lalglobalvar.swig_lal_test_REAL8_matrix[0, 0] == 5.6
290 lalglobalvar.swig_lal_test_COMPLEX8_vector[0] = complex(3.5, 4.75)
291 assert lalglobalvar.swig_lal_test_COMPLEX8_vector[0] == complex(3.5, 4.75)
292 lalglobalvar.swig_lal_test_COMPLEX8_matrix[0, 0] = complex(5.5, 6.25)
293 assert lalglobalvar.swig_lal_test_COMPLEX8_matrix[0, 0] == complex(5.5, 6.25)
294 print("PASSED static vector/matrix conversions", file=sys.stderr)
295
296
298 """check dynamic vector/matrix conversions"""
299 print("checking dynamic vector/matrix conversions ...", file=sys.stderr)
300
301 def check_dynamic_vector_matrix(iv, ivl, rv, rvl, cm, cms1, cms2):
302 iv.data = numpy.zeros(ivl, dtype=iv.data.dtype)
303 rv.data = numpy.zeros(rvl, dtype=rv.data.dtype)
304 cm.data = numpy.zeros((cms1, cms2), dtype=cm.data.dtype)
305 assert ivl == 5
306 iv.data = [1, 3, 2, 4, 3]
307 assert_array_equal(iv.data, [1, 3, 2, 4, 3])
308 iv.data[3] = 7
309 assert iv.data[3] == 7
310 assert rvl == 5
311 rv.data = [1.2, 3.4, 2.6, 4.8, 3.5]
312 assert_array_equal(rv.data, [1.2, 3.4, 2.6, 4.8, 3.5])
313 rv.data[rvl - 1] = 7.5
314 assert rv.data[rvl - 1] == 7.5
315 with catch_errors(IndexError):
316 rv.data[rvl] = 99.9
317 with catch_errors(TypeError):
318 iv.data = rv.data
319 rv.data = iv.data
320 assert_array_equal(rv.data, iv.data)
321 assert cms1 == 4
322 assert cms2 == 6
323 for i in range(0, cms1):
324 for j in range(0, cms2):
325 cm.data[i, j] = complex(i / 4.0, j / 2.0)
326 assert cm.data[2, 3] == complex(0.5, 1.5)
327 assert cm.data[3, 2] == complex(0.75, 1.0)
329 with pytest.warns(ComplexWarning):
330 iv.data[0] = cm.data[2, 3]
333 with pytest.warns(ComplexWarning):
334 rv.data[0] = cm.data[3, 2]
336
337 # check LAL vector and matrix datatypes
338 iv = lal.CreateINT4Vector(5)
339 rv = lal.CreateREAL8Vector(5)
340 cm = lal.CreateCOMPLEX8VectorSequence(4, 6)
341 check_dynamic_vector_matrix(
342 iv, iv.length, rv, rv.length, cm, cm.length, cm.vectorLength
343 )
344 del iv
345 del rv
346 del cm
347 rv0 = lal.CreateREAL8Vector(0)
348 assert rv0.length == 0
349 assert rv0.data is None
350 del rv0
351 rv1 = lal.CreateREAL8Vector(1)
352 rv1.data[0] = 1
353 del rv1
355 print("PASSED dynamic vector/matrix conversions (LAL)", file=sys.stderr)
356 # check GSL vectors and matrices
357 iv = lal.gsl_vector_int(5)
358 rv = lal.gsl_vector(5)
359 cm = lal.gsl_matrix_complex_float(4, 6)
360 check_dynamic_vector_matrix(iv, iv.size, rv, rv.size, cm, cm.size1, cm.size2)
361 del iv
362 del rv
363 del cm
364 rv1 = lal.gsl_vector(1)
365 rv1.data[0] = 1
366 del rv1
367 print("PASSED dynamic vector/matrix conversions (GSL)", file=sys.stderr)
368
369
371 """check fixed and dynamic arrays typemaps"""
372 print("checking fixed and dynamic arrays typemaps ...", file=sys.stderr)
373 a1in = numpy.array([1.2, 3.5, 7.9], dtype=numpy.double)
374 a1out = a1in * 2.5
375 assert_array_equal(lal.swig_lal_test_copyin_array1(a1in, 2.5), a1out)
376 a2in = numpy.array([[3, 2], [7, 6], [12, 10]], dtype=numpy.int32)
377 a2out = a2in * 15
378 assert_array_equal(lal.swig_lal_test_copyin_array2(a2in, 15), a2out)
379 a3in = numpy.array([lal.LIGOTimeGPS(1234.5), lal.LIGOTimeGPS(678.9)])
380 a3out = a3in * 3
381 assert_array_equal(lal.swig_lal_test_copyin_array3(a3in, 3), a3out)
382 with catch_errors(ValueError):
383 lal.swig_lal_test_copyin_array1(
384 numpy.array([0, 0, 0, 0], dtype=numpy.double), 0
385 )
386 with catch_errors(TypeError):
387 lal.swig_lal_test_copyin_array2(
388 numpy.array([[1.2, 3.4], [0, 0], [0, 0]], dtype=numpy.double), 0
389 )
390 del a3in
391 del a3out
393 print("PASSED fixed and dynamic arrays typemaps", file=sys.stderr)
394
395
397 """check input views of string array structs"""
398 print("checking input views of string array structs ...", file=sys.stderr)
399 svdat = ["a", "bc", "def"]
400 sv = lal.CreateEmptyStringVector(len(svdat))
401 sv.data = svdat
402 svout = lal.CreateEmptyStringVector(len(svdat))
403 svout.data = [""] * len(svdat)
404 assert lal.swig_lal_test_viewin_LALStringVector(svout, sv)
405 assert all(map(lambda x, y: x == y, svout.data, sv.data))
406 svout.data = [""] * len(svdat)
407 assert lal.swig_lal_test_viewin_LALStringVector(svout, svdat)
408 assert all(map(lambda x, y: x == y, svout.data, svdat))
409 sv.data = svdat
410 assert lal.swig_lal_test_copyinout_LALStringVector(sv)
411 assert all(map(lambda x, y: x == y.upper(), sv.data, svdat))
412 sv.data = svdat
413 retn, sv = lal.swig_lal_test_copyinout_LALStringVector(sv)
414 assert retn
415 assert all(map(lambda x, y: x == y.upper(), sv.data, svdat))
416 sv = svdat
417 retn, sv = lal.swig_lal_test_copyinout_LALStringVector(sv)
418 assert retn
419 assert all(map(lambda x, y: x == y.upper(), sv, svdat))
420 del sv
421 del svout
422 del svdat
424 print("PASSED input views of string array structs", file=sys.stderr)
425
426
428 """check input views of numeric array structs"""
429 print("checking input views of numeric array structs ...", file=sys.stderr)
430 r4dat = numpy.array([1.2, 2.3, 3.4, 4.5, 5.6], dtype=numpy.float32)
431 r8dat = numpy.array([3.4, 4.5, 5.6, 6.7, 7.8, 8.9], dtype=numpy.float64)
432 c8dat = numpy.array(
433 numpy.vectorize(complex)(r4dat, 8 + r4dat), dtype=numpy.complex64
434 )
435 c16dat = numpy.array(
436 numpy.vectorize(complex)(r8dat, 16 + r8dat), dtype=numpy.complex128
437 )
438 r4 = lal.CreateREAL4Vector(len(r4dat))
439 r4.data = r4dat
440 r4out = lal.CreateREAL4Vector(len(r4dat))
441 r4out.data = numpy.zeros(numpy.shape(r4dat), dtype=r4dat.dtype)
442 assert lal.swig_lal_test_viewin_REAL4Vector(r4out, r4)
443 assert_array_equal(r4out.data, r4.data)
444 r4out.data = numpy.zeros(numpy.shape(r4dat), dtype=r4dat.dtype)
445 assert lal.swig_lal_test_viewin_REAL4Vector(r4out, r4dat)
446 assert_array_equal(r4out.data, r4dat)
447 r4out.data = numpy.zeros(numpy.shape(r4dat), dtype=r4dat.dtype)
448 assert lal.swig_lal_test_viewinout_REAL4Vector(r4out, r4)
449 assert_array_equal(2 * r4out.data, r4.data)
450 r4out.data = numpy.zeros(numpy.shape(r4dat), dtype=r4dat.dtype)
451 assert lal.swig_lal_test_viewinout_REAL4Vector(r4out, r4dat)
452 assert_array_equal(2 * r4out.data, r4dat)
453 r4.data = r4dat
454 assert lal.swig_lal_test_copyinout_REAL4Vector(r4)
455 assert_array_equal(r4.data, 3 * r4dat)
456 r4.data = r4dat
457 retn, r4 = lal.swig_lal_test_copyinout_REAL4Vector(r4)
458 assert retn
459 assert_array_equal(r4.data, 3 * r4dat)
460 r4 = r4dat
461 retn, r4 = lal.swig_lal_test_copyinout_REAL4Vector(r4)
462 assert retn
463 assert_array_equal(r4, 3 * r4dat)
464 del r4
465 del r4out
466 del r4dat
468 r8 = lal.CreateREAL8Vector(len(r8dat))
469 r8.data = r8dat
470 r8out = lal.CreateREAL8Vector(len(r8dat))
471 r8out.data = numpy.zeros(numpy.shape(r8dat), dtype=r8dat.dtype)
472 assert lal.swig_lal_test_viewin_REAL8Vector(r8out, r8)
473 assert_array_equal(r8out.data, r8.data)
474 r8out.data = numpy.zeros(numpy.shape(r8dat), dtype=r8dat.dtype)
475 assert lal.swig_lal_test_viewin_REAL8Vector(r8out, r8dat)
476 assert_array_equal(r8out.data, r8dat)
477 r8out.data = numpy.zeros(numpy.shape(r8dat), dtype=r8dat.dtype)
478 assert lal.swig_lal_test_viewinout_REAL8Vector(r8out, r8)
479 assert_array_equal(2 * r8out.data, r8.data)
480 r8out.data = numpy.zeros(numpy.shape(r8dat), dtype=r8dat.dtype)
481 assert lal.swig_lal_test_viewinout_REAL8Vector(r8out, r8dat)
482 assert_array_equal(2 * r8out.data, r8dat)
483 r8.data = r8dat
484 assert lal.swig_lal_test_copyinout_REAL8Vector(r8)
485 assert_array_equal(r8.data, 3 * r8dat)
486 r8.data = r8dat
487 retn, r8 = lal.swig_lal_test_copyinout_REAL8Vector(r8)
488 assert retn
489 assert_array_equal(r8.data, 3 * r8dat)
490 r8 = r8dat
491 retn, r8 = lal.swig_lal_test_copyinout_REAL8Vector(r8)
492 assert retn
493 assert_array_equal(r8, 3 * r8dat)
494 del r8
495 del r8out
496 del r8dat
498 c8 = lal.CreateCOMPLEX8Vector(len(c8dat))
499 c8.data = c8dat
500 c8out = lal.CreateCOMPLEX8Vector(len(c8dat))
501 c8out.data = numpy.zeros(numpy.shape(c8dat), dtype=c8dat.dtype)
502 assert lal.swig_lal_test_viewin_COMPLEX8Vector(c8out, c8)
503 assert_array_equal(c8out.data, c8.data)
504 c8out.data = numpy.zeros(numpy.shape(c8dat), dtype=c8dat.dtype)
505 assert lal.swig_lal_test_viewin_COMPLEX8Vector(c8out, c8dat)
506 assert_array_equal(c8out.data, c8dat)
507 c8out.data = numpy.zeros(numpy.shape(c8dat), dtype=c8dat.dtype)
508 assert lal.swig_lal_test_viewinout_COMPLEX8Vector(c8out, c8)
509 assert_array_equal(2 * c8out.data, c8.data)
510 c8out.data = numpy.zeros(numpy.shape(c8dat), dtype=c8dat.dtype)
511 assert lal.swig_lal_test_viewinout_COMPLEX8Vector(c8out, c8dat)
512 assert_array_equal(2 * c8out.data, c8dat)
513 c8.data = c8dat
514 assert lal.swig_lal_test_copyinout_COMPLEX8Vector(c8)
515 assert_array_equal(c8.data, 3 * c8dat)
516 c8.data = c8dat
517 retn, c8 = lal.swig_lal_test_copyinout_COMPLEX8Vector(c8)
518 assert retn
519 assert_array_equal(c8.data, 3 * c8dat)
520 c8 = c8dat
521 retn, c8 = lal.swig_lal_test_copyinout_COMPLEX8Vector(c8)
522 assert retn
523 assert_array_equal(c8, 3 * c8dat)
524 del c8
525 del c8out
526 del c8dat
528 c16 = lal.CreateCOMPLEX16Vector(len(c16dat))
529 c16.data = c16dat
530 c16out = lal.CreateCOMPLEX16Vector(len(c16dat))
531 c16out.data = numpy.zeros(numpy.shape(c16dat), dtype=c16dat.dtype)
532 assert lal.swig_lal_test_viewin_COMPLEX16Vector(c16out, c16)
533 assert_array_equal(c16out.data, c16.data)
534 c16out.data = numpy.zeros(numpy.shape(c16dat), dtype=c16dat.dtype)
535 assert lal.swig_lal_test_viewin_COMPLEX16Vector(c16out, c16dat)
536 assert_array_equal(c16out.data, c16dat)
537 c16out.data = numpy.zeros(numpy.shape(c16dat), dtype=c16dat.dtype)
538 assert lal.swig_lal_test_viewinout_COMPLEX16Vector(c16out, c16)
539 assert_array_equal(2 * c16out.data, c16.data)
540 c16out.data = numpy.zeros(numpy.shape(c16dat), dtype=c16dat.dtype)
541 assert lal.swig_lal_test_viewinout_COMPLEX16Vector(c16out, c16dat)
542 assert_array_equal(2 * c16out.data, c16dat)
543 c16.data = c16dat
544 assert lal.swig_lal_test_copyinout_COMPLEX16Vector(c16)
545 assert_array_equal(c16.data, 3 * c16dat)
546 c16.data = c16dat
547 retn, c16 = lal.swig_lal_test_copyinout_COMPLEX16Vector(c16)
548 assert retn
549 assert_array_equal(c16.data, 3 * c16dat)
550 c16 = c16dat
551 retn, c16 = lal.swig_lal_test_copyinout_COMPLEX16Vector(c16)
552 assert retn
553 assert_array_equal(c16, 3 * c16dat)
554 del c16
555 del c16out
556 del c16dat
558 r4dat = numpy.array([[1.2, 2.3, 3.4], [4.5, 5.6, 6.7]], dtype=numpy.float32)
559 r8dat = numpy.array([[3.4, 4.5], [5.6, 6.7], [7.8, 8.9]], dtype=numpy.float64)
560 c8dat = numpy.array(
561 numpy.vectorize(complex)(r4dat, 8 + r4dat), dtype=numpy.complex64
562 )
563 c16dat = numpy.array(
564 numpy.vectorize(complex)(r8dat, 16 + r8dat), dtype=numpy.complex128
565 )
566 r4 = lal.CreateREAL4VectorSequence(r4dat.shape[0], r4dat.shape[1])
567 r4.data = r4dat
568 r4out = lal.CreateREAL4VectorSequence(r4dat.shape[0], r4dat.shape[1])
569 r4out.data = numpy.zeros(numpy.shape(r4dat), dtype=r4dat.dtype)
570 assert lal.swig_lal_test_viewin_REAL4VectorSequence(r4out, r4)
571 assert_array_equal(r4out.data, r4.data)
572 r4out.data = numpy.zeros(numpy.shape(r4dat), dtype=r4dat.dtype)
573 assert lal.swig_lal_test_viewin_REAL4VectorSequence(r4out, r4dat)
574 assert_array_equal(r4out.data, r4dat)
575 r4out.data = numpy.zeros(numpy.shape(r4dat), dtype=r4dat.dtype)
576 assert lal.swig_lal_test_viewinout_REAL4VectorSequence(r4out, r4)
577 assert_array_equal(2 * r4out.data, r4.data)
578 r4out.data = numpy.zeros(numpy.shape(r4dat), dtype=r4dat.dtype)
579 assert lal.swig_lal_test_viewinout_REAL4VectorSequence(r4out, r4dat)
580 assert_array_equal(2 * r4out.data, r4dat)
581 r4.data = r4dat
582 assert lal.swig_lal_test_copyinout_REAL4VectorSequence(r4)
583 assert_array_equal(r4.data, 3 * r4dat)
584 r4.data = r4dat
585 retn, r4 = lal.swig_lal_test_copyinout_REAL4VectorSequence(r4)
586 assert retn
587 assert_array_equal(r4.data, 3 * r4dat)
588 r4 = r4dat
589 retn, r4 = lal.swig_lal_test_copyinout_REAL4VectorSequence(r4)
590 assert retn
591 assert_array_equal(r4, 3 * r4dat)
592 del r4
593 del r4out
594 del r4dat
596 r8 = lal.CreateREAL8VectorSequence(r8dat.shape[0], r8dat.shape[1])
597 r8.data = r8dat
598 r8out = lal.CreateREAL8VectorSequence(r8dat.shape[0], r8dat.shape[1])
599 r8out.data = numpy.zeros(numpy.shape(r8dat), dtype=r8dat.dtype)
600 assert lal.swig_lal_test_viewin_REAL8VectorSequence(r8out, r8)
601 assert_array_equal(r8out.data, r8.data)
602 r8out.data = numpy.zeros(numpy.shape(r8dat), dtype=r8dat.dtype)
603 assert lal.swig_lal_test_viewin_REAL8VectorSequence(r8out, r8dat)
604 assert_array_equal(r8out.data, r8dat)
605 r8out.data = numpy.zeros(numpy.shape(r8dat), dtype=r8dat.dtype)
606 assert lal.swig_lal_test_viewinout_REAL8VectorSequence(r8out, r8)
607 assert_array_equal(2 * r8out.data, r8.data)
608 r8out.data = numpy.zeros(numpy.shape(r8dat), dtype=r8dat.dtype)
609 assert lal.swig_lal_test_viewinout_REAL8VectorSequence(r8out, r8dat)
610 assert_array_equal(2 * r8out.data, r8dat)
611 r8.data = r8dat
612 assert lal.swig_lal_test_copyinout_REAL8VectorSequence(r8)
613 assert_array_equal(r8.data, 3 * r8dat)
614 r8.data = r8dat
615 retn, r8 = lal.swig_lal_test_copyinout_REAL8VectorSequence(r8)
616 assert retn
617 assert_array_equal(r8.data, 3 * r8dat)
618 r8 = r8dat
619 retn, r8 = lal.swig_lal_test_copyinout_REAL8VectorSequence(r8)
620 assert retn
621 assert_array_equal(r8, 3 * r8dat)
622 del r8
623 del r8out
624 del r8dat
626 c8 = lal.CreateCOMPLEX8VectorSequence(c8dat.shape[0], c8dat.shape[1])
627 c8.data = c8dat
628 c8out = lal.CreateCOMPLEX8VectorSequence(c8dat.shape[0], c8dat.shape[1])
629 c8out.data = numpy.zeros(numpy.shape(c8dat), dtype=c8dat.dtype)
630 assert lal.swig_lal_test_viewin_COMPLEX8VectorSequence(c8out, c8)
631 assert_array_equal(c8out.data, c8.data)
632 c8out.data = numpy.zeros(numpy.shape(c8dat), dtype=c8dat.dtype)
633 assert lal.swig_lal_test_viewin_COMPLEX8VectorSequence(c8out, c8dat)
634 assert_array_equal(c8out.data, c8dat)
635 c8out.data = numpy.zeros(numpy.shape(c8dat), dtype=c8dat.dtype)
636 assert lal.swig_lal_test_viewinout_COMPLEX8VectorSequence(c8out, c8)
637 assert_array_equal(2 * c8out.data, c8.data)
638 c8out.data = numpy.zeros(numpy.shape(c8dat), dtype=c8dat.dtype)
639 assert lal.swig_lal_test_viewinout_COMPLEX8VectorSequence(c8out, c8dat)
640 assert_array_equal(2 * c8out.data, c8dat)
641 c8.data = c8dat
642 assert lal.swig_lal_test_copyinout_COMPLEX8VectorSequence(c8)
643 assert_array_equal(c8.data, 3 * c8dat)
644 c8.data = c8dat
645 retn, c8 = lal.swig_lal_test_copyinout_COMPLEX8VectorSequence(c8)
646 assert retn
647 assert_array_equal(c8.data, 3 * c8dat)
648 c8 = c8dat
649 retn, c8 = lal.swig_lal_test_copyinout_COMPLEX8VectorSequence(c8)
650 assert retn
651 assert_array_equal(c8, 3 * c8dat)
652 del c8
653 del c8out
654 del c8dat
656 c16 = lal.CreateCOMPLEX16VectorSequence(c16dat.shape[0], c16dat.shape[1])
657 c16.data = c16dat
658 c16out = lal.CreateCOMPLEX16VectorSequence(c16dat.shape[0], c16dat.shape[1])
659 c16out.data = numpy.zeros(numpy.shape(c16dat), dtype=c16dat.dtype)
660 assert lal.swig_lal_test_viewin_COMPLEX16VectorSequence(c16out, c16)
661 assert_array_equal(c16out.data, c16.data)
662 c16out.data = numpy.zeros(numpy.shape(c16dat), dtype=c16dat.dtype)
663 assert lal.swig_lal_test_viewin_COMPLEX16VectorSequence(c16out, c16dat)
664 assert_array_equal(c16out.data, c16dat)
665 c16out.data = numpy.zeros(numpy.shape(c16dat), dtype=c16dat.dtype)
666 assert lal.swig_lal_test_viewinout_COMPLEX16VectorSequence(c16out, c16)
667 assert_array_equal(2 * c16out.data, c16.data)
668 c16out.data = numpy.zeros(numpy.shape(c16dat), dtype=c16dat.dtype)
669 assert lal.swig_lal_test_viewinout_COMPLEX16VectorSequence(c16out, c16dat)
670 assert_array_equal(2 * c16out.data, c16dat)
671 c16.data = c16dat
672 assert lal.swig_lal_test_copyinout_COMPLEX16VectorSequence(c16)
673 assert_array_equal(c16.data, 3 * c16dat)
674 c16.data = c16dat
675 retn, c16 = lal.swig_lal_test_copyinout_COMPLEX16VectorSequence(c16)
676 assert retn
677 assert_array_equal(c16.data, 3 * c16dat)
678 c16 = c16dat
679 retn, c16 = lal.swig_lal_test_copyinout_COMPLEX16VectorSequence(c16)
680 assert retn
681 assert_array_equal(c16, 3 * c16dat)
682 del c16
683 del c16out
684 del c16dat
686 print("PASSED input views of numeric array structs (LAL)", file=sys.stderr)
687 vfdat = numpy.array([1.2, 2.3, 3.4, 4.5, 5.6], dtype=numpy.float32)
688 vddat = numpy.array([3.4, 4.5, 5.6, 6.7, 7.8, 8.9], dtype=numpy.float64)
689 vcfdat = numpy.array(
690 numpy.vectorize(complex)(vfdat, 8 + vfdat), dtype=numpy.complex64
691 )
692 vcddat = numpy.array(
693 numpy.vectorize(complex)(vddat, 16 + vddat), dtype=numpy.complex128
694 )
695 vf = lal.gsl_vector_float(len(vfdat))
696 vf.data = vfdat
697 vfout = lal.gsl_vector_float(len(vfdat))
698 vfout.data = numpy.zeros(numpy.shape(vfdat), dtype=vfdat.dtype)
699 assert lal.swig_lal_test_viewin_gsl_vector_float(vfout, vf)
700 assert_array_equal(vfout.data, vf.data)
701 vfout.data = numpy.zeros(numpy.shape(vfdat), dtype=vfdat.dtype)
702 assert lal.swig_lal_test_viewin_gsl_vector_float(vfout, vfdat)
703 assert_array_equal(vfout.data, vfdat)
704 vfout.data = numpy.zeros(numpy.shape(vfdat), dtype=vfdat.dtype)
705 assert lal.swig_lal_test_viewinout_gsl_vector_float(vfout, vf)
706 assert_array_equal(2 * vfout.data, vf.data)
707 vfout.data = numpy.zeros(numpy.shape(vfdat), dtype=vfdat.dtype)
708 assert lal.swig_lal_test_viewinout_gsl_vector_float(vfout, vfdat)
709 assert_array_equal(2 * vfout.data, vfdat)
710 vf.data = vfdat
711 assert lal.swig_lal_test_copyinout_gsl_vector_float(vf)
712 assert_array_equal(vf.data, 3 * vfdat)
713 vf.data = vfdat
714 retn, vf = lal.swig_lal_test_copyinout_gsl_vector_float(vf)
715 assert retn
716 assert_array_equal(vf.data, 3 * vfdat)
717 vf = vfdat
718 retn, vf = lal.swig_lal_test_copyinout_gsl_vector_float(vf)
719 assert retn
720 assert_array_equal(vf, 3 * vfdat)
721 del vf
722 del vfout
723 del vfdat
725 vd = lal.gsl_vector(len(vddat))
726 vd.data = vddat
727 vdout = lal.gsl_vector(len(vddat))
728 vdout.data = numpy.zeros(numpy.shape(vddat), dtype=vddat.dtype)
729 assert lal.swig_lal_test_viewin_gsl_vector(vdout, vd)
730 assert_array_equal(vdout.data, vd.data)
731 vdout.data = numpy.zeros(numpy.shape(vddat), dtype=vddat.dtype)
732 assert lal.swig_lal_test_viewin_gsl_vector(vdout, vddat)
733 assert_array_equal(vdout.data, vddat)
734 vdout.data = numpy.zeros(numpy.shape(vddat), dtype=vddat.dtype)
735 assert lal.swig_lal_test_viewinout_gsl_vector(vdout, vd)
736 assert_array_equal(2 * vdout.data, vd.data)
737 vdout.data = numpy.zeros(numpy.shape(vddat), dtype=vddat.dtype)
738 assert lal.swig_lal_test_viewinout_gsl_vector(vdout, vddat)
739 assert_array_equal(2 * vdout.data, vddat)
740 vd.data = vddat
741 assert lal.swig_lal_test_copyinout_gsl_vector(vd)
742 assert_array_equal(vd.data, 3 * vddat)
743 vd.data = vddat
744 retn, vd = lal.swig_lal_test_copyinout_gsl_vector(vd)
745 assert retn
746 assert_array_equal(vd.data, 3 * vddat)
747 vd = vddat
748 retn, vd = lal.swig_lal_test_copyinout_gsl_vector(vd)
749 assert retn
750 assert_array_equal(vd, 3 * vddat)
751 del vd
752 del vdout
753 del vddat
755 vcf = lal.gsl_vector_complex_float(len(vcfdat))
756 vcf.data = vcfdat
757 vcfout = lal.gsl_vector_complex_float(len(vcfdat))
758 vcfout.data = numpy.zeros(numpy.shape(vcfdat), dtype=vcfdat.dtype)
759 assert lal.swig_lal_test_viewin_gsl_vector_complex_float(vcfout, vcf)
760 assert_array_equal(vcfout.data, vcf.data)
761 vcfout.data = numpy.zeros(numpy.shape(vcfdat), dtype=vcfdat.dtype)
762 assert lal.swig_lal_test_viewin_gsl_vector_complex_float(vcfout, vcfdat)
763 assert_array_equal(vcfout.data, vcfdat)
764 vcfout.data = numpy.zeros(numpy.shape(vcfdat), dtype=vcfdat.dtype)
765 assert lal.swig_lal_test_viewinout_gsl_vector_complex_float(vcfout, vcf)
766 assert_array_equal(2 * vcfout.data, vcf.data)
767 vcfout.data = numpy.zeros(numpy.shape(vcfdat), dtype=vcfdat.dtype)
768 assert lal.swig_lal_test_viewinout_gsl_vector_complex_float(vcfout, vcfdat)
769 assert_array_equal(2 * vcfout.data, vcfdat)
770 vcf.data = vcfdat
771 assert lal.swig_lal_test_copyinout_gsl_vector_complex_float(vcf)
772 assert_array_equal(vcf.data, 3 * vcfdat)
773 vcf.data = vcfdat
774 retn, vcf = lal.swig_lal_test_copyinout_gsl_vector_complex_float(vcf)
775 assert retn
776 assert_array_equal(vcf.data, 3 * vcfdat)
777 vcf = vcfdat
778 retn, vcf = lal.swig_lal_test_copyinout_gsl_vector_complex_float(vcf)
779 assert retn
780 assert_array_equal(vcf, 3 * vcfdat)
781 del vcf
782 del vcfout
783 del vcfdat
785 vcd = lal.gsl_vector_complex(len(vcddat))
786 vcd.data = vcddat
787 vcdout = lal.gsl_vector_complex(len(vcddat))
788 vcdout.data = numpy.zeros(numpy.shape(vcddat), dtype=vcddat.dtype)
789 assert lal.swig_lal_test_viewin_gsl_vector_complex(vcdout, vcd)
790 assert_array_equal(vcdout.data, vcd.data)
791 vcdout.data = numpy.zeros(numpy.shape(vcddat), dtype=vcddat.dtype)
792 assert lal.swig_lal_test_viewin_gsl_vector_complex(vcdout, vcddat)
793 assert_array_equal(vcdout.data, vcddat)
794 vcdout.data = numpy.zeros(numpy.shape(vcddat), dtype=vcddat.dtype)
795 assert lal.swig_lal_test_viewinout_gsl_vector_complex(vcdout, vcd)
796 assert_array_equal(2 * vcdout.data, vcd.data)
797 vcdout.data = numpy.zeros(numpy.shape(vcddat), dtype=vcddat.dtype)
798 assert lal.swig_lal_test_viewinout_gsl_vector_complex(vcdout, vcddat)
799 assert_array_equal(2 * vcdout.data, vcddat)
800 vcd.data = vcddat
801 assert lal.swig_lal_test_copyinout_gsl_vector_complex(vcd)
802 assert_array_equal(vcd.data, 3 * vcddat)
803 vcd.data = vcddat
804 retn, vcd = lal.swig_lal_test_copyinout_gsl_vector_complex(vcd)
805 assert retn
806 assert_array_equal(vcd.data, 3 * vcddat)
807 vcd = vcddat
808 retn, vcd = lal.swig_lal_test_copyinout_gsl_vector_complex(vcd)
809 assert retn
810 assert_array_equal(vcd, 3 * vcddat)
811 del vcd
812 del vcdout
813 del vcddat
815 mfdat = numpy.array([[1.2, 2.3, 3.4], [4.5, 5.6, 6.7]], dtype=numpy.float32)
816 mddat = numpy.array([[3.4, 4.5], [5.6, 6.7], [7.8, 8.9]], dtype=numpy.float64)
817 mcfdat = numpy.array(
818 numpy.vectorize(complex)(mfdat, 8 + mfdat), dtype=numpy.complex64
819 )
820 mcddat = numpy.array(
821 numpy.vectorize(complex)(mddat, 16 + mddat), dtype=numpy.complex128
822 )
823 mf = lal.gsl_matrix_float(mfdat.shape[0], mfdat.shape[1])
824 mf.data = mfdat
825 mfout = lal.gsl_matrix_float(mfdat.shape[0], mfdat.shape[1])
826 mfout.data = numpy.zeros(numpy.shape(mfdat), dtype=mfdat.dtype)
827 assert lal.swig_lal_test_viewin_gsl_matrix_float(mfout, mf)
828 assert_array_equal(mfout.data, mf.data)
829 mfout.data = numpy.zeros(numpy.shape(mfdat), dtype=mfdat.dtype)
830 assert lal.swig_lal_test_viewin_gsl_matrix_float(mfout, mfdat)
831 assert_array_equal(mfout.data, mfdat)
832 mfout.data = numpy.zeros(numpy.shape(mfdat), dtype=mfdat.dtype)
833 assert lal.swig_lal_test_viewinout_gsl_matrix_float(mfout, mf)
834 assert_array_equal(2 * mfout.data, mf.data)
835 mfout.data = numpy.zeros(numpy.shape(mfdat), dtype=mfdat.dtype)
836 assert lal.swig_lal_test_viewinout_gsl_matrix_float(mfout, mfdat)
837 assert_array_equal(2 * mfout.data, mfdat)
838 mf.data = mfdat
839 assert lal.swig_lal_test_copyinout_gsl_matrix_float(mf)
840 assert_array_equal(mf.data, 3 * mfdat)
841 mf.data = mfdat
842 retn, mf = lal.swig_lal_test_copyinout_gsl_matrix_float(mf)
843 assert retn
844 assert_array_equal(mf.data, 3 * mfdat)
845 mf = mfdat
846 retn, mf = lal.swig_lal_test_copyinout_gsl_matrix_float(mf)
847 assert retn
848 assert_array_equal(mf, 3 * mfdat)
849 del mf
850 del mfout
851 del mfdat
853 md = lal.gsl_matrix(mddat.shape[0], mddat.shape[1])
854 md.data = mddat
855 mdout = lal.gsl_matrix(mddat.shape[0], mddat.shape[1])
856 mdout.data = numpy.zeros(numpy.shape(mddat), dtype=mddat.dtype)
857 assert lal.swig_lal_test_viewin_gsl_matrix(mdout, md)
858 assert_array_equal(mdout.data, md.data)
859 mdout.data = numpy.zeros(numpy.shape(mddat), dtype=mddat.dtype)
860 assert lal.swig_lal_test_viewin_gsl_matrix(mdout, mddat)
861 assert_array_equal(mdout.data, mddat)
862 mdout.data = numpy.zeros(numpy.shape(mddat), dtype=mddat.dtype)
863 assert lal.swig_lal_test_viewinout_gsl_matrix(mdout, md)
864 assert_array_equal(2 * mdout.data, md.data)
865 mdout.data = numpy.zeros(numpy.shape(mddat), dtype=mddat.dtype)
866 assert lal.swig_lal_test_viewinout_gsl_matrix(mdout, mddat)
867 assert_array_equal(2 * mdout.data, mddat)
868 md.data = mddat
869 assert lal.swig_lal_test_copyinout_gsl_matrix(md)
870 assert_array_equal(md.data, 3 * mddat)
871 md.data = mddat
872 retn, md = lal.swig_lal_test_copyinout_gsl_matrix(md)
873 assert retn
874 assert_array_equal(md.data, 3 * mddat)
875 md = mddat
876 retn, md = lal.swig_lal_test_copyinout_gsl_matrix(md)
877 assert retn
878 assert_array_equal(md, 3 * mddat)
879 del md
880 del mdout
881 del mddat
883 mcf = lal.gsl_matrix_complex_float(mcfdat.shape[0], mcfdat.shape[1])
884 mcf.data = mcfdat
885 mcfout = lal.gsl_matrix_complex_float(mcfdat.shape[0], mcfdat.shape[1])
886 mcfout.data = numpy.zeros(numpy.shape(mcfdat), dtype=mcfdat.dtype)
887 assert lal.swig_lal_test_viewin_gsl_matrix_complex_float(mcfout, mcf)
888 assert_array_equal(mcfout.data, mcf.data)
889 mcfout.data = numpy.zeros(numpy.shape(mcfdat), dtype=mcfdat.dtype)
890 assert lal.swig_lal_test_viewin_gsl_matrix_complex_float(mcfout, mcfdat)
891 assert_array_equal(mcfout.data, mcfdat)
892 mcfout.data = numpy.zeros(numpy.shape(mcfdat), dtype=mcfdat.dtype)
893 assert lal.swig_lal_test_viewinout_gsl_matrix_complex_float(mcfout, mcf)
894 assert_array_equal(2 * mcfout.data, mcf.data)
895 mcfout.data = numpy.zeros(numpy.shape(mcfdat), dtype=mcfdat.dtype)
896 assert lal.swig_lal_test_viewinout_gsl_matrix_complex_float(mcfout, mcfdat)
897 assert_array_equal(2 * mcfout.data, mcfdat)
898 mcf.data = mcfdat
899 assert lal.swig_lal_test_copyinout_gsl_matrix_complex_float(mcf)
900 assert_array_equal(mcf.data, 3 * mcfdat)
901 mcf.data = mcfdat
902 retn, mcf = lal.swig_lal_test_copyinout_gsl_matrix_complex_float(mcf)
903 assert retn
904 assert_array_equal(mcf.data, 3 * mcfdat)
905 mcf = mcfdat
906 retn, mcf = lal.swig_lal_test_copyinout_gsl_matrix_complex_float(mcf)
907 assert retn
908 assert_array_equal(mcf, 3 * mcfdat)
909 del mcf
910 del mcfout
911 del mcfdat
913 mcd = lal.gsl_matrix_complex(mcddat.shape[0], mcddat.shape[1])
914 mcd.data = mcddat
915 mcdout = lal.gsl_matrix_complex(mcddat.shape[0], mcddat.shape[1])
916 mcdout.data = numpy.zeros(numpy.shape(mcddat), dtype=mcddat.dtype)
917 assert lal.swig_lal_test_viewin_gsl_matrix_complex(mcdout, mcd)
918 assert_array_equal(mcdout.data, mcd.data)
919 mcdout.data = numpy.zeros(numpy.shape(mcddat), dtype=mcddat.dtype)
920 assert lal.swig_lal_test_viewin_gsl_matrix_complex(mcdout, mcddat)
921 assert_array_equal(mcdout.data, mcddat)
922 mcdout.data = numpy.zeros(numpy.shape(mcddat), dtype=mcddat.dtype)
923 assert lal.swig_lal_test_viewinout_gsl_matrix_complex(mcdout, mcd)
924 assert_array_equal(2 * mcdout.data, mcd.data)
925 mcdout.data = numpy.zeros(numpy.shape(mcddat), dtype=mcddat.dtype)
926 assert lal.swig_lal_test_viewinout_gsl_matrix_complex(mcdout, mcddat)
927 assert_array_equal(2 * mcdout.data, mcddat)
928 mcd.data = mcddat
929 assert lal.swig_lal_test_copyinout_gsl_matrix_complex(mcd)
930 assert_array_equal(mcd.data, 3 * mcddat)
931 mcd.data = mcddat
932 retn, mcd = lal.swig_lal_test_copyinout_gsl_matrix_complex(mcd)
933 assert retn
934 assert_array_equal(mcd.data, 3 * mcddat)
935 mcd = mcddat
936 retn, mcd = lal.swig_lal_test_copyinout_gsl_matrix_complex(mcd)
937 assert retn
938 assert_array_equal(mcd, 3 * mcddat)
939 del mcd
940 del mcdout
941 del mcddat
943 print("PASSED input views of numeric array structs (GSL)", file=sys.stderr)
944
945 def check_input_view_type_safety(f, a, b, expect_exception):
946 if expect_exception:
947 with catch_errors(TypeError):
948 f(a, b)
949 with catch_errors(TypeError):
950 f(b, a)
951 else:
952 f(a, b)
953 f(b, a)
954
955 r4 = numpy.zeros(10, dtype=numpy.float32)
956 r8 = numpy.zeros(10, dtype=numpy.float64)
957 c8 = numpy.zeros(10, dtype=numpy.complex64)
958 c16 = numpy.zeros(10, dtype=numpy.complex128)
959 check_input_view_type_safety(lal.swig_lal_test_viewinout_REAL4Vector, r4, r4, False)
960 check_input_view_type_safety(lal.swig_lal_test_viewinout_REAL4Vector, r4, r8, True)
961 check_input_view_type_safety(lal.swig_lal_test_viewinout_REAL4Vector, r4, c8, True)
962 check_input_view_type_safety(lal.swig_lal_test_viewinout_REAL4Vector, r4, c16, True)
963 check_input_view_type_safety(lal.swig_lal_test_viewinout_REAL8Vector, r8, r4, True)
964 check_input_view_type_safety(lal.swig_lal_test_viewinout_REAL8Vector, r8, r8, False)
965 check_input_view_type_safety(lal.swig_lal_test_viewinout_REAL8Vector, r8, c8, True)
966 check_input_view_type_safety(lal.swig_lal_test_viewinout_REAL8Vector, r8, c16, True)
967 check_input_view_type_safety(
968 lal.swig_lal_test_viewinout_COMPLEX8Vector, c8, r4, True
969 )
970 check_input_view_type_safety(
971 lal.swig_lal_test_viewinout_COMPLEX8Vector, c8, r8, True
972 )
973 check_input_view_type_safety(
974 lal.swig_lal_test_viewinout_COMPLEX8Vector, c8, c8, False
975 )
976 check_input_view_type_safety(
977 lal.swig_lal_test_viewinout_COMPLEX8Vector, c8, c16, True
978 )
979 check_input_view_type_safety(
980 lal.swig_lal_test_viewinout_COMPLEX16Vector, c16, r4, True
981 )
982 check_input_view_type_safety(
983 lal.swig_lal_test_viewinout_COMPLEX16Vector, c16, r8, True
984 )
985 check_input_view_type_safety(
986 lal.swig_lal_test_viewinout_COMPLEX16Vector, c16, c8, True
987 )
988 check_input_view_type_safety(
989 lal.swig_lal_test_viewinout_COMPLEX16Vector, c16, c16, False
990 )
991 check_input_view_type_safety(
992 lal.swig_lal_test_viewinout_gsl_vector_float, r4, r4, False
993 )
994 check_input_view_type_safety(
995 lal.swig_lal_test_viewinout_gsl_vector_float, r4, r8, True
996 )
997 check_input_view_type_safety(
998 lal.swig_lal_test_viewinout_gsl_vector_float, r4, c8, True
999 )
1000 check_input_view_type_safety(
1001 lal.swig_lal_test_viewinout_gsl_vector_float, r4, c16, True
1002 )
1003 check_input_view_type_safety(lal.swig_lal_test_viewinout_gsl_vector, r8, r4, True)
1004 check_input_view_type_safety(lal.swig_lal_test_viewinout_gsl_vector, r8, r8, False)
1005 check_input_view_type_safety(lal.swig_lal_test_viewinout_gsl_vector, r8, c8, True)
1006 check_input_view_type_safety(lal.swig_lal_test_viewinout_gsl_vector, r8, c16, True)
1007 check_input_view_type_safety(
1008 lal.swig_lal_test_viewinout_gsl_vector_complex_float, c8, r4, True
1009 )
1010 check_input_view_type_safety(
1011 lal.swig_lal_test_viewinout_gsl_vector_complex_float, c8, r8, True
1012 )
1013 check_input_view_type_safety(
1014 lal.swig_lal_test_viewinout_gsl_vector_complex_float, c8, c8, False
1015 )
1016 check_input_view_type_safety(
1017 lal.swig_lal_test_viewinout_gsl_vector_complex_float, c8, c16, True
1018 )
1019 check_input_view_type_safety(
1020 lal.swig_lal_test_viewinout_gsl_vector_complex, c16, r4, True
1021 )
1022 check_input_view_type_safety(
1023 lal.swig_lal_test_viewinout_gsl_vector_complex, c16, r8, True
1024 )
1025 check_input_view_type_safety(
1026 lal.swig_lal_test_viewinout_gsl_vector_complex, c16, c8, True
1027 )
1028 check_input_view_type_safety(
1029 lal.swig_lal_test_viewinout_gsl_vector_complex, c16, c16, False
1030 )
1031 del r4
1032 del r8
1033 del c8
1034 del c16
1036 print("PASSED input views of numeric array structs (type safety)", file=sys.stderr)
1037
1038
1040 """check FFT functions with input views"""
1041 print("check FFT functions with input views ...", file=sys.stderr)
1042 r4in = numpy.array(list(range(0, 32)), dtype=numpy.float32)
1043 r8in = numpy.array(list(range(0, 64)), dtype=numpy.float64)
1044 c8in = numpy.array(numpy.vectorize(complex)(8 + r4in, r4in), dtype=numpy.complex64)
1045 c16in = numpy.array(
1046 numpy.vectorize(complex)(16 + r8in, r8in), dtype=numpy.complex128
1047 )
1048 c8inv = lal.CreateCOMPLEX8Vector(len(c8in))
1049 c8inv.data = c8in
1050 c8outv = lal.CreateCOMPLEX8Vector(len(c8in))
1051 plan = lal.CreateForwardCOMPLEX8FFTPlan(len(c8in), 0)
1052 lal.COMPLEX8VectorFFT(c8outv, c8inv, plan)
1053 c8out = numpy.zeros(numpy.shape(c8outv.data), dtype=c8outv.data.dtype)
1054 lal.COMPLEX8VectorFFT(c8out, c8in, plan)
1055 assert_array_equal(c8out, c8outv.data)
1056 del c8inv
1057 del c8outv
1058 del plan
1060 c16inv = lal.CreateCOMPLEX16Vector(len(c16in))
1061 c16inv.data = c16in
1062 c16outv = lal.CreateCOMPLEX16Vector(len(c16in))
1063 plan = lal.CreateForwardCOMPLEX16FFTPlan(len(c16in), 0)
1064 lal.COMPLEX16VectorFFT(c16outv, c16inv, plan)
1065 c16out = numpy.zeros(numpy.shape(c16outv.data), dtype=c16outv.data.dtype)
1066 lal.COMPLEX16VectorFFT(c16out, c16in, plan)
1067 assert_array_equal(c16out, c16outv.data)
1068 del c16inv
1069 del c16outv
1070 del plan
1072 r4inv = lal.CreateREAL4Vector(len(r4in))
1073 r4inv.data = r4in
1074 c8outv = lal.CreateCOMPLEX8Vector(len(r4in) // 2 + 1)
1075 plan = lal.CreateForwardREAL4FFTPlan(len(r4in), 0)
1076 lal.REAL4ForwardFFT(c8outv, r4inv, plan)
1077 c8out = numpy.zeros(numpy.shape(c8outv.data), dtype=c8outv.data.dtype)
1078 lal.REAL4ForwardFFT(c8out, r4in, plan)
1079 assert_array_equal(c8out, c8outv.data)
1080 del r4inv
1081 del c8outv
1082 del plan
1084 c8inv = lal.CreateCOMPLEX8Vector(len(c8in))
1085 c8inv.data = c8in
1086 r4outv = lal.CreateREAL4Vector((len(c8in) - 1) * 2)
1087 plan = lal.CreateReverseREAL4FFTPlan((len(c8in) - 1) * 2, 0)
1088 lal.REAL4ReverseFFT(r4outv, c8inv, plan)
1089 r4out = numpy.zeros(numpy.shape(r4outv.data), dtype=r4outv.data.dtype)
1090 lal.REAL4ReverseFFT(r4out, c8in, plan)
1091 assert_array_equal(r4out, r4outv.data)
1092 del c8inv
1093 del r4outv
1094 del plan
1096 r8inv = lal.CreateREAL8Vector(len(r8in))
1097 r8inv.data = r8in
1098 c16outv = lal.CreateCOMPLEX16Vector(len(r8in) // 2 + 1)
1099 plan = lal.CreateForwardREAL8FFTPlan(len(r8in), 0)
1100 lal.REAL8ForwardFFT(c16outv, r8inv, plan)
1101 c16out = numpy.zeros(numpy.shape(c16outv.data), dtype=c16outv.data.dtype)
1102 lal.REAL8ForwardFFT(c16out, r8in, plan)
1103 assert_array_equal(c16out, c16outv.data)
1104 del r8inv
1105 del c16outv
1106 del plan
1108 c16inv = lal.CreateCOMPLEX16Vector(len(c16in))
1109 c16inv.data = c16in
1110 r8outv = lal.CreateREAL8Vector((len(c16in) - 1) * 2)
1111 plan = lal.CreateReverseREAL8FFTPlan((len(c16in) - 1) * 2, 0)
1112 lal.REAL8ReverseFFT(r8outv, c16inv, plan)
1113 r8out = numpy.zeros(numpy.shape(r8outv.data), dtype=r8outv.data.dtype)
1114 lal.REAL8ReverseFFT(r8out, c16in, plan)
1115 assert_array_equal(r8out, r8outv.data)
1116 del c16inv
1117 del r8outv
1118 del plan
1120 r4inv = lal.CreateREAL4Vector(len(r4in))
1121 r4inv.data = r4in
1122 r4outv = lal.CreateREAL4Vector(len(r4in))
1123 plan = lal.CreateForwardREAL4FFTPlan(len(r4in), 0)
1124 lal.REAL4VectorFFT(r4outv, r4inv, plan)
1125 r4out = numpy.zeros(numpy.shape(r4outv.data), dtype=r4outv.data.dtype)
1126 lal.REAL4VectorFFT(r4out, r4in, plan)
1127 assert_array_equal(r4out, r4outv.data)
1128 del r4inv
1129 del r4outv
1130 del plan
1132 r8inv = lal.CreateREAL8Vector(len(r8in))
1133 r8inv.data = r8in
1134 r8outv = lal.CreateREAL8Vector(len(r8in))
1135 plan = lal.CreateForwardREAL8FFTPlan(len(r8in), 0)
1136 lal.REAL8VectorFFT(r8outv, r8inv, plan)
1137 r8out = numpy.zeros(numpy.shape(r8outv.data), dtype=r8outv.data.dtype)
1138 lal.REAL8VectorFFT(r8out, r8in, plan)
1139 assert_array_equal(r8out, r8outv.data)
1140 del r8inv
1141 del r8outv
1142 del plan
1144 r4inv = lal.CreateREAL4Vector(len(r4in))
1145 r4inv.data = r4in
1146 r4outv = lal.CreateREAL4Vector(len(r4in) // 2 + 1)
1147 plan = lal.CreateForwardREAL4FFTPlan(len(r4in), 0)
1148 lal.REAL4PowerSpectrum(r4outv, r4inv, plan)
1149 r4out = numpy.zeros(numpy.shape(r4outv.data), dtype=r4outv.data.dtype)
1150 lal.REAL4PowerSpectrum(r4out, r4in, plan)
1151 assert_array_equal(r4out, r4outv.data)
1152 del r4inv
1153 del r4outv
1154 del plan
1156 r8inv = lal.CreateREAL8Vector(len(r8in))
1157 r8inv.data = r8in
1158 r8outv = lal.CreateREAL8Vector(len(r8in) // 2 + 1)
1159 plan = lal.CreateForwardREAL8FFTPlan(len(r8in), 0)
1160 lal.REAL8PowerSpectrum(r8outv, r8inv, plan)
1161 r8out = numpy.zeros(numpy.shape(r8outv.data), dtype=r8outv.data.dtype)
1162 lal.REAL8PowerSpectrum(r8out, r8in, plan)
1163 assert_array_equal(r8out, r8outv.data)
1164 del r8inv
1165 del r8outv
1166 del plan
1168 print("PASSED FFT functions with input views ...", file=sys.stderr)
1169
1170
1172 """check dynamic array of pointers access"""
1173 print("checking dynamic array of pointers access ...", file=sys.stderr)
1174 ap = lal.swig_lal_test_Create_arrayofptrs(3)
1175 assert ap.length == 3
1176 for i in range(0, ap.length):
1177 assert ap.data[i].length == 6
1178 for j in range(0, ap.data[i].length):
1179 assert ap.data[i].data[j] == 42 * ap.length * i + j
1180 del ap
1182 print("PASSED dynamic array of pointers access", file=sys.stderr)
1183
1184
1186 """check typemaps for strings and double pointers"""
1187 print("checking typemaps for strings and double pointers ...", file=sys.stderr)
1188 sts = lal.swig_lal_test_struct()
1189 ptr_ptr, ptr_null_ptr, null_ptr_ptr = lal.swig_lal_test_typemaps_string_ptrptr(
1190 "abcde", "", None, sts, 0, None
1191 )
1192 assert ptr_ptr == sts
1193 assert ptr_null_ptr is not None
1194 assert null_ptr_ptr is None
1195 del sts
1196 del ptr_ptr
1197 del ptr_null_ptr
1198 del null_ptr_ptr
1200 ptr_ptr = 0
1201 for i in range(1, 10):
1202 ptr_ptr = lal.swig_lal_test_typemaps_ptrptr(ptr_ptr)
1203 assert ptr_ptr is not None
1204 assert ptr_ptr.n == i
1205 del ptr_ptr
1207 ptr_ptr_list = [0]
1208 for i in range(1, 10):
1209 ptr_ptr_list.append(lal.swig_lal_test_typemaps_ptrptr(ptr_ptr_list[-1]))
1210 assert ptr_ptr_list[-1] is not None
1211 assert ptr_ptr_list[-1].n == i
1212 while len(ptr_ptr_list) > 0:
1213 assert ptr_ptr_list[-1] is not None
1214 assert ptr_ptr_list[-1].n == i
1215 del ptr_ptr_list[0]
1216 del ptr_ptr_list
1218 print("PASSED typemaps for strings and double pointers", file=sys.stderr)
1219
1220
1222 """check 'tm' struct conversions"""
1223 print("checking 'tm' struct conversions ...", file=sys.stderr)
1224 gps0 = 989168284
1225 utc0 = [2011, 5, 11, 16, 57, 49, 2, 131, 0]
1226 assert lal.GPSToUTC(gps0) == tuple(utc0)
1227 assert lal.UTCToGPS(utc0) == gps0
1228 for i in range(0, 10):
1229 gps = gps0 + i * 86400
1230 utc = list(utc0)
1231 utc[2] = utc[2] + i
1232 utc[6] = (utc[6] + i) % 7
1233 utc[7] = utc[7] + i
1234 utc[8] = -1 + (i % 3)
1235 assert lal.GPSToUTC(gps)[0:8] == tuple(utc[0:8])
1236 assert lal.UTCToGPS(utc) == gps
1237 utc = lal.GPSToUTC(lal.UTCToGPS(utc))
1238 dt = datetime.datetime(*utc[0:6])
1239 assert utc[6] == dt.weekday()
1241 print("PASSED 'tm' struct conversions", file=sys.stderr)
1242
1243
1245 """check LIGOTimeGPS operations"""
1246 print("checking LIGOTimeGPS operations ...", file=sys.stderr)
1247 from lal import LIGOTimeGPS
1248
1249 t0 = LIGOTimeGPS()
1250 assert type(LIGOTimeGPS(t0)) is LIGOTimeGPS
1251 assert is_value_and_type(t0, 0, LIGOTimeGPS)
1252 assert t0 != None and not t0 is None
1253 t1 = LIGOTimeGPS(10.5)
1254 t2 = LIGOTimeGPS(10, 500000000)
1255 assert not t0 and t1 and t2
1256 assert is_value_and_type(t1, t2, LIGOTimeGPS)
1257 t3 = +t1
1258 t3 = -t2
1259 assert t1 == t2 and t1 >= t2 and t2 >= t1
1260 assert abs(-t1) == t1
1261 assert float(t1) == 10.5
1262 assert is_value_and_type(t1 + 3.5, 14, LIGOTimeGPS)
1263 assert is_value_and_type(3.5 + t1, 14, LIGOTimeGPS)
1264 t2 -= 5.5
1265 assert is_value_and_type(t2, 5, LIGOTimeGPS)
1266 assert t2 + 5.5 >= t1 and t2 + 3 != t2
1267 assert is_value_and_type(t2 - 5, t0, LIGOTimeGPS)
1268 assert is_value_and_type(t1 * 3, 31.5, LIGOTimeGPS)
1269 assert is_value_and_type(3 * t1, 31.5, LIGOTimeGPS)
1270 assert is_value_and_type(t2 / 2.5, 2, LIGOTimeGPS)
1271 assert is_value_and_type(21 / t1, 2, LIGOTimeGPS)
1272 assert is_value_and_type(t1 + t2, 15.5, LIGOTimeGPS)
1273 assert is_value_and_type(t1 - t2, 5.5, LIGOTimeGPS)
1274 assert is_value_and_type(t1 * t2, 52.5, LIGOTimeGPS)
1275 assert is_value_and_type(t2 * t1, 52.5, LIGOTimeGPS)
1276 assert is_value_and_type(t1 / t2, 2.1, LIGOTimeGPS)
1277 assert is_value_and_type(t1 % t2, 0.5, LIGOTimeGPS)
1278 assert t1 > t2 and t2 < t1 and t1 >= t2 and t2 <= t1
1279 assert LIGOTimeGPS(333333333, 333333333) == LIGOTimeGPS(1000000000) / 3
1280 assert LIGOTimeGPS(666666666, 666666667) == LIGOTimeGPS(2000000000) / 3
1281 assert LIGOTimeGPS("-62997760.825036067") == LIGOTimeGPS(
1282 "-47044285.062262587"
1283 ) - LIGOTimeGPS("15953475.76277348")
1284 assert (
1285 LIGOTimeGPS("-6542354.389038577")
1286 == LIGOTimeGPS("-914984.929117316") * 7.1502318572066237
1287 )
1288 assert LIGOTimeGPS("-6542354.389038577") == 7.1502318572066237 * LIGOTimeGPS(
1289 "-914984.929117316"
1290 )
1291 assert (
1292 LIGOTimeGPS("-127965.770535834")
1293 == LIGOTimeGPS("-914984.929117316") / 7.1502318572066237
1294 )
1295 t1 += 812345667.75
1296 assert str(t1) == "812345678.25"
1297 assert type(eval(repr(t1))) is type(t1)
1298 assert eval(repr(t1)) == t1
1299 assert (
1300 LIGOTimeGPS(1100000000).asutcstr() == "Fri, 14 Nov 2014 11:33:04 +0000"
1301 ) # lalapps_tconvert -u -R
1302 assert (
1303 LIGOTimeGPS(1100000000, 100).asutcstr()
1304 == "Fri, 14 Nov 2014 11:33:04.0000001 +0000"
1305 )
1306 assert LIGOTimeGPS(0, 0).asutcstr() == "Sun, 06 Jan 1980 00:00:00 +0000"
1307 assert LIGOTimeGPS(-1, 0).asutcstr() == "Sat, 05 Jan 1980 23:59:59 +0000"
1308 assert LIGOTimeGPS(0, -1).asutcstr() == "Sat, 05 Jan 1980 23:59:59.999999999 +0000"
1309 assert int(t1) == 812345678
1310 assert t1.ns() == 812345678250000000
1311 assert hash(t1) == 1049484238
1312 t4struct = lal.swig_lal_test_gps()
1313 t4struct.t = 1234.5
1314 assert t4struct.t == 1234.5
1315 t5 = LIGOTimeGPS("1000")
1316 assert t5 == 1000
1317 print(
1318 "*** below should be error messages from LIGOTimeGPS constructor ***",
1319 file=sys.stderr,
1320 )
1321 with catch_errors(RuntimeError):
1322 t5 = LIGOTimeGPS("abc1000")
1323 with catch_errors(RuntimeError):
1324 t5 = LIGOTimeGPS("1000abc")
1325 print(
1326 "*** above should be error messages from LIGOTimeGPS constructor ***",
1327 file=sys.stderr,
1328 )
1329 assert lal.swig_lal_test_noptrgps(
1330 LIGOTimeGPS(1234.5)
1331 ) == lal.swig_lal_test_noptrgps(1234.5)
1332 print(
1333 "*** below should be error messages from LIGOTimeGPS constructor ***",
1334 file=sys.stderr,
1335 )
1336 with catch_errors(RuntimeError):
1337 LIGOTimeGPS(None)
1338 print(
1339 "*** above should be error messages from LIGOTimeGPS constructor ***",
1340 file=sys.stderr,
1341 )
1342 del t0
1343 del t1
1344 del t2
1345 del t3
1346 del t4struct
1347 del t5
1349 print("PASSED LIGOTimeGPS operations", file=sys.stderr)
1350 print("checking LIGOTimeGPS operations (Python specific) ...", file=sys.stderr)
1351
1352 class my_gps_class:
1353 def __init__(self, s, ns):
1354 self.gpsSeconds = s
1355 self.gpsNanoSeconds = ns
1356
1357 tmy = my_gps_class(987, 654321)
1358 tsw = LIGOTimeGPS(tmy)
1359 assert type(tsw) is LIGOTimeGPS
1360 assert tsw.gpsSeconds == 987
1361 assert tsw.gpsNanoSeconds == 654321
1362 assert is_value_and_type(tsw + tmy, tsw + tsw, LIGOTimeGPS)
1363 assert is_value_and_type(tmy + tsw, tsw + tsw, LIGOTimeGPS)
1364 assert is_value_and_type(tsw - tmy, tsw - tsw, LIGOTimeGPS)
1365 assert is_value_and_type(tmy - tsw, tsw - tsw, LIGOTimeGPS)
1366 assert is_value_and_type(tsw * tmy, tsw * tsw, LIGOTimeGPS)
1367 assert is_value_and_type(tmy * tsw, tsw * tsw, LIGOTimeGPS)
1368 assert is_value_and_type(tsw / tmy, tsw / tsw, LIGOTimeGPS)
1369 assert is_value_and_type(tmy / tsw, tsw / tsw, LIGOTimeGPS)
1370 assert lal.swig_lal_test_noptrgps(tmy) == lal.swig_lal_test_noptrgps(tsw)
1371 del tsw
1373 print("PASSED LIGOTimeGPS operations (Python specific)", file=sys.stderr)
1374
1375
1377 """check LALUnit operations"""
1378 print("checking LALUnit operations ...", file=sys.stderr)
1379 u1 = lal.Unit("kg m s^-2")
1380 assert type(lal.Unit(u1)) is lal.Unit
1381 assert is_value_and_type(u1, lal.NewtonUnit, lal.Unit)
1382 assert str(u1) == "m kg s^-2"
1383 u2 = lal.MeterUnit * lal.KiloGramUnit / lal.SecondUnit**2
1384 assert is_value_and_type(u2, u1, lal.Unit)
1385 u2 = lal.MeterUnit ** (1, 2) * lal.KiloGramUnit ** (1, 2) * lal.SecondUnit**-1
1386 assert is_value_and_type(u2, u1 ** (1, 2), lal.Unit)
1388 with catch_errors((RuntimeError, TypeError)):
1389 lal.SecondUnit ** (1, 0)
1390 u1 *= lal.MeterUnit
1391 assert is_value_and_type(u1, lal.JouleUnit, lal.Unit)
1392 assert repr(u1) == "m^2 kg s^-2"
1393 u1 /= lal.SecondUnit
1394 assert is_value_and_type(u1, lal.WattUnit, lal.Unit)
1395 assert u1 == "m^2 kg s^-3"
1396 u1 *= 1000
1397 assert u1 == lal.KiloUnit * lal.WattUnit
1398 assert u1 == 1000 * lal.WattUnit
1399 assert u1 == lal.WattUnit * 1000
1400 assert u1 == lal.MegaUnit / 1000 * lal.WattUnit
1401 assert int(u1) == 1000
1402 u1 /= 10000
1403 assert u1 == 100 * lal.MilliUnit * lal.WattUnit
1404 with catch_errors(
1405 (
1406 ValueError, # swig < 4.0.0
1407 TypeError, # swig >= 4.0.0
1408 )
1409 ):
1410 u1 *= 1.234
1411 assert u1.norm() == u1
1412 del u1
1413 del u2
1415 print("PASSED LALUnit operations", file=sys.stderr)
1416
1417
1419 """check Python non-dynamic structs"""
1420 print("checking Python non-dynamic structs", file=sys.stderr)
1421 sts = lal.swig_lal_test_struct()
1422 sts.n = 1
1423 sts.Alpha = 1.234
1425 with catch_errors(AttributeError):
1426 sts.N = 1
1427 sts.alpha = 1.234
1428 sts.zzzzz = "does not exist"
1429 del sts
1430 t = lal.LIGOTimeGPS(1234)
1431 t.event = "this happened"
1432 del t
1434 print("PASSED Python non-dynamic structs", file=sys.stderr)
1435
1436
1438 """check Python pickling"""
1439 print("checking Python pickling ...", file=sys.stderr)
1440 for datatype in [
1441 "INT2",
1442 "INT4",
1443 "INT8",
1444 "UINT2",
1445 "UINT4",
1446 "UINT8",
1447 "REAL4",
1448 "REAL8",
1449 "COMPLEX8",
1450 "COMPLEX16",
1451 ]:
1452
1453 creator = getattr(lal, "Create{}FrequencySeries".format(datatype))
1454 a = creator("foobar", lal.LIGOTimeGPS(1e9), 0, 1, lal.StrainUnit, 1024)
1455 a.data.data = numpy.arange(1024)
1456 pickled = pickle.dumps(a, 0)
1457 b = pickle.loads(pickled)
1458 assert type(a) == type(b)
1459 assert a.name == b.name
1460 assert a.epoch == b.epoch
1461 assert a.f0 == b.f0
1462 assert a.deltaF == b.deltaF
1463 assert a.sampleUnits == b.sampleUnits
1464 assert_array_equal(a.data.data, b.data.data)
1465
1466 creator = getattr(lal, "Create{}TimeSeries".format(datatype))
1467 a = creator("foobar", lal.LIGOTimeGPS(1e9), 0, 1, lal.StrainUnit, 1024)
1468 a.data.data = numpy.arange(1024)
1469 pickled = pickle.dumps(a, 0)
1470 b = pickle.loads(pickled)
1471 assert type(a) == type(b)
1472 assert a.name == b.name
1473 assert a.epoch == b.epoch
1474 assert a.f0 == b.f0
1475 assert a.deltaT == b.deltaT
1476 assert a.sampleUnits == b.sampleUnits
1477 assert_array_equal(a.data.data, b.data.data)
1478 print("PASSED Python pickling", file=sys.stderr)
1479
1480
1482 """check Python dict to LALDict typemap"""
1483 print("checking Python Python dict to LALDict typemap ...", file=sys.stderr)
1484 pydict = {
1485 "str": "A string value",
1486 "2-byte-unsigned:UINT2": 32767,
1487 "4-byte-unsigned:UINT4": 123456,
1488 "8-byte-unsigned:UINT8": 9223372036854775807,
1489 "2-byte-signed:INT2": -32768,
1490 "4-byte-signed:INT4": -123456,
1491 "8-byte-signed:INT8": 9223372036854775807,
1492 "single:REAL4": 987e6,
1493 "double:REAL8": -543e-21,
1494 "single complex:COMPLEX8": complex(987e6, -123e4),
1495 "double complex:COMPLEX16": complex(-543e-21, 345e43),
1496 }
1497 laldict = lal.CreateDict()
1498 lal.DictInsertStringValue(laldict, "str", pydict["str"])
1499 lal.DictInsertUINT2Value(
1500 laldict, "2-byte-unsigned", pydict["2-byte-unsigned:UINT2"]
1501 )
1502 lal.DictInsertUINT4Value(
1503 laldict, "4-byte-unsigned", pydict["4-byte-unsigned:UINT4"]
1504 )
1505 lal.DictInsertUINT8Value(
1506 laldict, "8-byte-unsigned", pydict["8-byte-unsigned:UINT8"]
1507 )
1508 lal.DictInsertINT2Value(laldict, "2-byte-signed", pydict["2-byte-signed:INT2"])
1509 lal.DictInsertINT4Value(laldict, "4-byte-signed", pydict["4-byte-signed:INT4"])
1510 lal.DictInsertINT8Value(laldict, "8-byte-signed", pydict["8-byte-signed:INT8"])
1511 lal.DictInsertREAL4Value(laldict, "single", pydict["single:REAL4"])
1512 lal.DictInsertREAL8Value(laldict, "double", pydict["double:REAL8"])
1513 lal.DictInsertCOMPLEX8Value(
1514 laldict, "single complex", pydict["single complex:COMPLEX8"]
1515 )
1516 lal.DictInsertCOMPLEX16Value(
1517 laldict, "double complex", pydict["double complex:COMPLEX16"]
1518 )
1519 lal.swig_lal_test_pydict_to_laldict(laldict)
1520 lal.swig_lal_test_pydict_to_laldict(pydict)
1521 print("PASSED Python dict to LALDict typemap", file=sys.stderr)
1522
1523
1524@pytest.mark.parametrize(
1525 ("inputs", "result"),
1526 [
1527 ((10, numpy.int16(20), numpy.int32(30), numpy.int64(-40)), 20),
1528 ((numpy.int8(10), numpy.int16(20), numpy.int32(30), numpy.int64(-40)), 20),
1529 ((numpy.int16(10), numpy.int16(20), numpy.int32(30), numpy.int64(-40)), 20),
1530 ((numpy.int32(10), numpy.int16(20), numpy.int32(30), numpy.int64(-40)), 20),
1531 ((numpy.int64(10), numpy.int16(20), numpy.int32(30), numpy.int64(-40)), 20),
1532 ],
1533)
1535 """Check conversion of NumPy fixed-width int types."""
1536 assert lal.swig_lal_test_numpy_int_types(*inputs) == result
1537
1538
1539@pytest.mark.parametrize(
1540 ("inputs", "result"),
1541 [
1542 ((10, numpy.uint16(20), numpy.uint32(30), numpy.uint64(40)), 100),
1543 ((numpy.uint8(10), numpy.uint16(20), numpy.uint32(30), numpy.uint64(40)), 100),
1544 ((numpy.uint16(10), numpy.uint16(20), numpy.uint32(30), numpy.uint64(40)), 100),
1545 ((numpy.uint32(10), numpy.uint16(20), numpy.uint32(30), numpy.uint64(40)), 100),
1546 ((numpy.uint64(10), numpy.uint16(20), numpy.uint32(30), numpy.uint64(40)), 100),
1547 ],
1548)
1550 """Check conversion of NumPy fixed-width uint types."""
1551 assert lal.swig_lal_test_numpy_uint_types(*inputs) == result
1552
1553
1554@pytest.mark.parametrize(
1555 ("inputs", "result"),
1556 [
1557 ((numpy.int8(10), numpy.int16(20), numpy.int32(30), numpy.int64(-40)), 20),
1558 ((numpy.uint8(10), numpy.uint16(20), numpy.uint32(30), numpy.uint64(40)), 100),
1559 (
1560 (float(10), numpy.float16(20), numpy.float32(30), numpy.float64(40)),
1561 100,
1562 ),
1563 ],
1564)
1566 """Check conversion of NumPy fixed-width float types."""
1567 assert lal.swig_lal_test_numpy_flt_types(*inputs) == result
1568
1569
1570@pytest.mark.parametrize(
1571 ("inputs", "result"),
1572 [
1573 ((numpy.int8(10), numpy.int16(20), numpy.int32(30), numpy.int64(-40)), 20),
1574 ((numpy.uint8(10), numpy.uint16(20), numpy.uint32(30), numpy.uint64(40)), 100),
1575 (
1576 (float(10), numpy.float16(20), numpy.float32(30), numpy.float64(40)),
1577 100,
1578 ),
1579 (
1580 (
1581 complex(10),
1582 numpy.complex64(20),
1583 numpy.complex64(30),
1584 numpy.complex128(40),
1585 ),
1586 100,
1587 ),
1588 ],
1589)
1591 """Check conversion of NumPy complex types."""
1592 assert lal.swig_lal_test_numpy_cpx_types(*inputs) == result
1593
1594
1595@pytest.mark.parametrize(
1596 ("input_", "result"),
1597 [
1598 (numpy.int8(123), 123),
1599 (numpy.int16(123), 123),
1600 (numpy.int32(123), 123),
1601 (numpy.int64(123), 123),
1602 ],
1603)
1605 """Check conversion of NumPy fixed-width types with LIGOTimeGPS."""
1606 assert int(lal.LIGOTimeGPS(input_)) == result
1607
1608
1609if __name__ == "__main__":
1610 args = sys.argv[1:] or ["-v", "-rs", "--junit-xml=junit-SWIGTestLALPython.xml"]
1611 sys.exit(pytest.main(args=[__file__] + args))
static size_t hash(const char *s)
Definition: LALDict.c:51
static double f(double theta, double y, double xi)
Definition: XLALMarcumQ.c:258
def test_Python_pickling()
check Python pickling
def test_input_views_of_string_array_structs()
check input views of string array structs
def test_conversion_of_numpy_fixed_width_types_ligotimegps(input_, result)
Check conversion of NumPy fixed-width types with LIGOTimeGPS.
def test_LIGOTimeGPS_operations()
check LIGOTimeGPS operations
def catch_errors(*args, **kwargs)
def test_conversion_of_numpy_fixed_width_types_cpx(inputs, result)
Check conversion of NumPy complex types.
def is_value_and_type(x, v, t)
def test_string_conversions()
check string conversions
def test_fixed_and_dynamic_arrays_typemaps()
check fixed and dynamic arrays typemaps
def test_memory_allocation()
check memory allocation
def test_LALUnit_operations()
check LALUnit operations
def test_dynamic_vector_matrix_conversions()
check dynamic vector/matrix conversions
def test_object_parent_tracking()
check object parent tracking
def test_conversion_of_numpy_fixed_width_types_int(inputs, result)
Check conversion of NumPy fixed-width int types.
def test_equal_return_first_argument_type_handling()
check equal return/first argument type handling
def test_dynamic_array_of_pointers_access()
check dynamic array of pointers access
def test_Python_dict_to_LALDict_typemap()
check Python dict to LALDict typemap
def test_Python_non_dynamic_structs()
check Python non-dynamic structs
def test_static_vector_matrix_conversions()
check static vector/matrix conversions
def test_input_views_of_numeric_array_structs()
check input views of numeric array structs
def test_tm_struct_conversions()
check 'tm' struct conversions
def test_conversion_of_numpy_fixed_width_types_uint(inputs, result)
Check conversion of NumPy fixed-width uint types.
def test_typemaps_for_strings_and_double_pointers()
check typemaps for strings and double pointers
def test_conversion_of_numpy_fixed_width_types_flt(inputs, result)
Check conversion of NumPy fixed-width float types.
def test_FFT_functions_with_input_views()
check FFT functions with input views
Epoch relative to GPS epoch, see LIGOTimeGPS type for more details.
Definition: LALDatatypes.h:458