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