feectools 0.6.0__tar.gz → 0.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. {feectools-0.6.0/feectools.egg-info → feectools-0.7.0}/PKG-INFO +1 -1
  2. {feectools-0.6.0 → feectools-0.7.0}/feectools/accelerate/compile_psydac.mk +1 -1
  3. {feectools-0.6.0 → feectools-0.7.0}/feectools/api/fem_bilinear_form.py +2 -2
  4. {feectools-0.6.0 → feectools-0.7.0}/feectools/api/fem_common.py +1 -1
  5. {feectools-0.6.0 → feectools-0.7.0}/feectools/feec/derivatives.py +15 -0
  6. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/basic.py +26 -18
  7. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kron.py +682 -82
  8. feectools-0.7.0/feectools/linalg/tests/test_kron_stencil_matrix.py +526 -0
  9. {feectools-0.6.0 → feectools-0.7.0/feectools.egg-info}/PKG-INFO +1 -1
  10. {feectools-0.6.0 → feectools-0.7.0}/pyproject.toml +1 -1
  11. feectools-0.6.0/feectools/linalg/tests/test_kron_stencil_matrix.py +0 -115
  12. {feectools-0.6.0 → feectools-0.7.0}/AUTHORS +0 -0
  13. {feectools-0.6.0 → feectools-0.7.0}/LICENSE +0 -0
  14. {feectools-0.6.0 → feectools-0.7.0}/README.md +0 -0
  15. {feectools-0.6.0 → feectools-0.7.0}/feectools/__init__.py +0 -0
  16. {feectools-0.6.0 → feectools-0.7.0}/feectools/accelerate/__init__.py +0 -0
  17. {feectools-0.6.0 → feectools-0.7.0}/feectools/accelerate/accelerate.py +0 -0
  18. {feectools-0.6.0 → feectools-0.7.0}/feectools/api/__init__.py +0 -0
  19. {feectools-0.6.0 → feectools-0.7.0}/feectools/api/essential_bc.py +0 -0
  20. {feectools-0.6.0 → feectools-0.7.0}/feectools/api/fem_sum_form.py +0 -0
  21. {feectools-0.6.0 → feectools-0.7.0}/feectools/api/settings.py +0 -0
  22. {feectools-0.6.0 → feectools-0.7.0}/feectools/core/__init__.py +0 -0
  23. {feectools-0.6.0 → feectools-0.7.0}/feectools/core/bsplines.py +0 -0
  24. {feectools-0.6.0 → feectools-0.7.0}/feectools/core/bsplines_kernels.py +0 -0
  25. {feectools-0.6.0 → feectools-0.7.0}/feectools/core/field_evaluation_kernels.py +0 -0
  26. {feectools-0.6.0 → feectools-0.7.0}/feectools/core/tests/__init__.py +0 -0
  27. {feectools-0.6.0 → feectools-0.7.0}/feectools/core/tests/test_bsplines.py +0 -0
  28. {feectools-0.6.0 → feectools-0.7.0}/feectools/core/tests/test_bsplines_kernel.py +0 -0
  29. {feectools-0.6.0 → feectools-0.7.0}/feectools/core/tests/test_bsplines_pyccel.py +0 -0
  30. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/__init__.py +0 -0
  31. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/basic.py +0 -0
  32. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/blocking_data_exchanger.py +0 -0
  33. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/cart.py +0 -0
  34. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/interface_data_exchanger.py +0 -0
  35. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/nonblocking_data_exchanger.py +0 -0
  36. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/partition.py +0 -0
  37. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/petsc.py +0 -0
  38. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/tests/__init__.py +0 -0
  39. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/tests/test_cart_1d.py +0 -0
  40. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/tests/test_cart_2d.py +0 -0
  41. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/tests/test_cart_3d.py +0 -0
  42. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/tests/test_coarsen.py +0 -0
  43. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/tests/test_device_binding.py +0 -0
  44. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/tests/test_multicart_2d.py +0 -0
  45. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/tests/test_partition.py +0 -0
  46. {feectools-0.6.0 → feectools-0.7.0}/feectools/ddm/utilities.py +0 -0
  47. {feectools-0.6.0 → feectools-0.7.0}/feectools/feec/__init__.py +0 -0
  48. {feectools-0.6.0 → feectools-0.7.0}/feectools/feec/dof_kernels.py +0 -0
  49. {feectools-0.6.0 → feectools-0.7.0}/feectools/feec/global_geometric_projectors.py +0 -0
  50. {feectools-0.6.0 → feectools-0.7.0}/feectools/feec/hodge.py +0 -0
  51. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/__init__.py +0 -0
  52. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/basic.py +0 -0
  53. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/grid.py +0 -0
  54. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/lst_preconditioner.py +0 -0
  55. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/partitioning.py +0 -0
  56. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/projectors.py +0 -0
  57. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/splines.py +0 -0
  58. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tensor.py +0 -0
  59. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tests/__init__.py +0 -0
  60. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tests/analytical_profiles_1d.py +0 -0
  61. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tests/analytical_profiles_base.py +0 -0
  62. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tests/splines_error_bounds.py +0 -0
  63. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tests/test_dirichlet_projectors.py +0 -0
  64. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tests/test_spline_histopolation.py +0 -0
  65. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tests/test_spline_interpolation.py +0 -0
  66. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tests/test_splines.py +0 -0
  67. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tests/test_splines_par.py +0 -0
  68. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tests/test_tensor.py +0 -0
  69. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tests/test_vector_spaces.py +0 -0
  70. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/tests/utilities.py +0 -0
  71. {feectools-0.6.0 → feectools-0.7.0}/feectools/fem/vector.py +0 -0
  72. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/__init__.py +0 -0
  73. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/block.py +0 -0
  74. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/direct_solvers.py +0 -0
  75. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/fft.py +0 -0
  76. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/__init__.py +0 -0
  77. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/matvec_kernels.py +0 -0
  78. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil2IJV_kernels.py +0 -0
  79. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil2coo_kernels.py +0 -0
  80. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_axpy_1d/__init__.py +0 -0
  81. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_axpy_1d/stencil_axpy_1d_cuda.cu +0 -0
  82. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_axpy_1d/stencil_axpy_1d_kernels.py +0 -0
  83. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_axpy_2d/__init__.py +0 -0
  84. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_axpy_2d/stencil_axpy_2d_cuda.cu +0 -0
  85. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_axpy_2d/stencil_axpy_2d_kernels.py +0 -0
  86. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_axpy_3d/__init__.py +0 -0
  87. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_axpy_3d/stencil_axpy_3d_cuda.cu +0 -0
  88. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_axpy_3d/stencil_axpy_3d_kernels.py +0 -0
  89. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_dot_1d/__init__.py +0 -0
  90. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_dot_1d/stencil_dot_1d_cuda.cu +0 -0
  91. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_dot_1d/stencil_dot_1d_kernels.py +0 -0
  92. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_dot_2d/__init__.py +0 -0
  93. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_dot_2d/stencil_dot_2d_cuda.cu +0 -0
  94. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_dot_2d/stencil_dot_2d_kernels.py +0 -0
  95. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_dot_3d/__init__.py +0 -0
  96. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_dot_3d/stencil_dot_3d_cuda.cu +0 -0
  97. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_dot_3d/stencil_dot_3d_kernels.py +0 -0
  98. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_inner_1d/__init__.py +0 -0
  99. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_inner_1d/stencil_inner_1d_cuda.cu +0 -0
  100. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_inner_1d/stencil_inner_1d_kernels.py +0 -0
  101. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_inner_2d/__init__.py +0 -0
  102. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_inner_2d/stencil_inner_2d_cuda.cu +0 -0
  103. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_inner_2d/stencil_inner_2d_kernels.py +0 -0
  104. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_inner_3d/__init__.py +0 -0
  105. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_inner_3d/stencil_inner_3d_cuda.cu +0 -0
  106. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_inner_3d/stencil_inner_3d_kernels.py +0 -0
  107. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_transpose_1d/__init__.py +0 -0
  108. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_transpose_1d/stencil_transpose_1d_cuda.cu +0 -0
  109. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_transpose_1d/stencil_transpose_1d_kernels.py +0 -0
  110. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_transpose_2d/__init__.py +0 -0
  111. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_transpose_2d/stencil_transpose_2d_cuda.cu +0 -0
  112. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_transpose_2d/stencil_transpose_2d_kernels.py +0 -0
  113. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_transpose_3d/__init__.py +0 -0
  114. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_transpose_3d/stencil_transpose_3d_cuda.cu +0 -0
  115. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/stencil_transpose_3d/stencil_transpose_3d_kernels.py +0 -0
  116. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/kernels/transpose_kernels.py +0 -0
  117. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/memory.py +0 -0
  118. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/solvers.py +0 -0
  119. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/sparse.py +0 -0
  120. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/stencil.py +0 -0
  121. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/__init__.py +0 -0
  122. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/cuda_parity_cases.py +0 -0
  123. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/inner_on_device_child.py +0 -0
  124. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/kernel_test_args.py +0 -0
  125. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_axpy_ghost_sync.py +0 -0
  126. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_block.py +0 -0
  127. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_cuda_emulation.py +0 -0
  128. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_cuda_parity.py +0 -0
  129. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_device_matvec.py +0 -0
  130. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_fft.py +0 -0
  131. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_inner_on_device.py +0 -0
  132. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_kron_device_solve.py +0 -0
  133. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_linalg.py +0 -0
  134. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_matrix_free.py +0 -0
  135. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_mpi_device.py +0 -0
  136. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_solvers.py +0 -0
  137. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_stencil_interface_matrix.py +0 -0
  138. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_stencil_vector.py +0 -0
  139. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_stencil_vector_space.py +0 -0
  140. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/test_toarray.py +0 -0
  141. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/tests/utilities.py +0 -0
  142. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/topetsc.py +0 -0
  143. {feectools-0.6.0 → feectools-0.7.0}/feectools/linalg/utilities.py +0 -0
  144. {feectools-0.6.0 → feectools-0.7.0}/feectools/utilities/__init__.py +0 -0
  145. {feectools-0.6.0 → feectools-0.7.0}/feectools/utilities/quadratures.py +0 -0
  146. {feectools-0.6.0 → feectools-0.7.0}/feectools/utilities/utils.py +0 -0
  147. {feectools-0.6.0 → feectools-0.7.0}/feectools/version.py +0 -0
  148. {feectools-0.6.0 → feectools-0.7.0}/feectools.egg-info/SOURCES.txt +0 -0
  149. {feectools-0.6.0 → feectools-0.7.0}/feectools.egg-info/dependency_links.txt +0 -0
  150. {feectools-0.6.0 → feectools-0.7.0}/feectools.egg-info/entry_points.txt +0 -0
  151. {feectools-0.6.0 → feectools-0.7.0}/feectools.egg-info/requires.txt +0 -0
  152. {feectools-0.6.0 → feectools-0.7.0}/feectools.egg-info/top_level.txt +0 -0
  153. {feectools-0.6.0 → feectools-0.7.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: feectools
3
- Version: 0.6.0
3
+ Version: 0.7.0
4
4
  Summary: Slimmed-down fork of Psydac (https://github.com/pyccel/psydac) with less functionality and fewer dependencies.
5
5
  Author-email: Psydac development team <psydac@googlegroups.com>
6
6
  Maintainer-email: Stefan Possanner <stefan.possanner@ipp.mpg.de>, Max Lindqvist <max.lindqvist@ipp.mpg.de>, Yaman Güçlü <yaman.guclu@gmail.com>, Martin Campos Pinto <martin.campos-pinto@ipp.mpg.de>, Ahmed Ratnani <ratnaniahmed@gmail.com>
@@ -37,7 +37,7 @@ all: $(OUTPUTS)
37
37
  @for dep in $^ ; do \
38
38
  echo $$dep ; \
39
39
  done
40
- pyccel compile -v $(FLAGS)$(FLAGS_openmp) $<
40
+ pyccel compile $(FLAGS)$(FLAGS_openmp) $<
41
41
  @echo ""
42
42
 
43
43
  #--------------------------------------
@@ -594,9 +594,9 @@ class DiscreteBilinearForm:
594
594
  if is_conformal:
595
595
  matrix[k1, k2] = global_mats[k1, k2]
596
596
  elif use_restriction:
597
- matrix.multiplicants[-1][k1, k2] = global_mats[k1, k2]
597
+ matrix.multiplicands[-1][k1, k2] = global_mats[k1, k2]
598
598
  elif use_prolongation:
599
- matrix.multiplicants[0][k1, k2] = global_mats[k1, k2]
599
+ matrix.multiplicands[0][k1, k2] = global_mats[k1, k2]
600
600
 
601
601
  else: # case of scalar equation
602
602
  if is_broken: # multi-patch
@@ -277,7 +277,7 @@ def extract_stencil_mats(mats):
277
277
  if isinstance(M, (StencilInterfaceMatrix, StencilMatrix)):
278
278
  new_mats.append(M)
279
279
  elif isinstance(M, ComposedLinearOperator):
280
- new_mats += [i for i in M.multiplicants if isinstance(i, (StencilInterfaceMatrix, StencilMatrix))]
280
+ new_mats += [i for i in M.multiplicands if isinstance(i, (StencilInterfaceMatrix, StencilMatrix))]
281
281
  return new_mats
282
282
 
283
283
  #==============================================================================
@@ -136,6 +136,21 @@ class DirectionalDerivativeOperator(LinearOperator):
136
136
  def dtype( self ):
137
137
  return self.domain.dtype
138
138
 
139
+ @property
140
+ def diffdir(self) -> int:
141
+ """Direction (axis) of the derivative."""
142
+ return self._diffdir
143
+
144
+ @property
145
+ def negative(self) -> bool:
146
+ """Whether the operator is the negative derivative."""
147
+ return self._negative
148
+
149
+ @property
150
+ def transposed(self) -> bool:
151
+ """Whether the operator is the transposed derivative."""
152
+ return self._transposed
153
+
139
154
  def __truediv__(self, a):
140
155
  """ Divide by scalar. """
141
156
  return self * (1.0 / a)
@@ -8,6 +8,7 @@ provides the fundamental classes for linear algebra operations.
8
8
  """
9
9
 
10
10
  import itertools
11
+ import warnings
11
12
  from abc import ABC, abstractmethod
12
13
  from types import LambdaType
13
14
  from inspect import signature
@@ -1057,27 +1058,27 @@ class ComposedLinearOperator(LinearOperator):
1057
1058
  for i in range(len(args)-1):
1058
1059
  assert args[i].domain == args[i+1].codomain
1059
1060
 
1060
- multiplicants = ()
1061
+ multiplicands = ()
1061
1062
  tmp_vectors = []
1062
1063
  for a in args[:-1]:
1063
1064
  if isinstance(a, ComposedLinearOperator):
1064
- multiplicants = (*multiplicants, *a.multiplicants)
1065
+ multiplicands = (*multiplicands, *a.multiplicands)
1065
1066
  tmp_vectors.extend(a.tmp_vectors)
1066
1067
  tmp_vectors.append(a.domain.zeros())
1067
1068
  else:
1068
- multiplicants = (*multiplicants, a)
1069
+ multiplicands = (*multiplicands, a)
1069
1070
  tmp_vectors.append(a.domain.zeros())
1070
1071
 
1071
1072
  last = args[-1]
1072
1073
  if isinstance(last, ComposedLinearOperator):
1073
- multiplicants = (*multiplicants, *last.multiplicants)
1074
+ multiplicands = (*multiplicands, *last.multiplicands)
1074
1075
  tmp_vectors.extend(last.tmp_vectors)
1075
1076
  else:
1076
- multiplicants = (*multiplicants, last)
1077
+ multiplicands = (*multiplicands, last)
1077
1078
 
1078
1079
  self._domain = domain
1079
1080
  self._codomain = codomain
1080
- self._multiplicants = multiplicants
1081
+ self._multiplicands = multiplicands
1081
1082
  self._tmp_vectors = tuple(tmp_vectors)
1082
1083
 
1083
1084
  @property
@@ -1098,34 +1099,41 @@ class ComposedLinearOperator(LinearOperator):
1098
1099
  return self._codomain
1099
1100
 
1100
1101
  @property
1101
- def multiplicants(self):
1102
+ def multiplicands(self):
1102
1103
  r"""
1103
- A tuple $(A_1,\dots,A_n)$ containing the multiplicants of the linear operator
1104
+ A tuple $(A_1,\dots,A_n)$ containing the multiplicands of the linear operator
1104
1105
  $self = A_n\circ\dots\circ A_1$.
1105
1106
 
1106
1107
  """
1107
- return self._multiplicants
1108
+ return self._multiplicands
1109
+
1110
+ @property
1111
+ def multiplicants(self):
1112
+ """Deprecated alias of ``multiplicands``."""
1113
+ warnings.warn("ComposedLinearOperator.multiplicants is deprecated, use multiplicands instead.",
1114
+ DeprecationWarning, stacklevel=2)
1115
+ return self._multiplicands
1108
1116
 
1109
1117
  @property
1110
1118
  def dtype(self):
1111
1119
  return None
1112
1120
 
1113
1121
  def tosparse(self):
1114
- mats = [M.tosparse() for M in self._multiplicants]
1122
+ mats = [M.tosparse() for M in self._multiplicands]
1115
1123
  M = mats[0]
1116
1124
  for Mi in mats[1:]:
1117
1125
  M = M @ Mi
1118
1126
  return coo_matrix(M)
1119
1127
 
1120
1128
  def transpose(self, conjugate=False):
1121
- t_multiplicants = ()
1122
- for a in self._multiplicants:
1123
- t_multiplicants = (a.transpose(conjugate=conjugate), *t_multiplicants)
1129
+ t_multiplicands = ()
1130
+ for a in self._multiplicands:
1131
+ t_multiplicands = (a.transpose(conjugate=conjugate), *t_multiplicands)
1124
1132
  new_dom = self.codomain
1125
1133
  new_cod = self.domain
1126
1134
  assert isinstance(new_dom, VectorSpace)
1127
1135
  assert isinstance(new_cod, VectorSpace)
1128
- return ComposedLinearOperator(self.codomain, self.domain, *t_multiplicants)
1136
+ return ComposedLinearOperator(self.codomain, self.domain, *t_multiplicands)
1129
1137
 
1130
1138
  def dot(self, v, out=None):
1131
1139
  assert isinstance(v, Vector)
@@ -1137,11 +1145,11 @@ class ComposedLinearOperator(LinearOperator):
1137
1145
  x = v
1138
1146
  for i in range(len(self._tmp_vectors)):
1139
1147
  y = self._tmp_vectors[-1-i]
1140
- A = self._multiplicants[-1-i]
1148
+ A = self._multiplicands[-1-i]
1141
1149
  A.dot(x, out=y)
1142
1150
  x = y
1143
1151
 
1144
- A = self._multiplicants[0]
1152
+ A = self._multiplicands[0]
1145
1153
  if out is not None:
1146
1154
 
1147
1155
  A.dot(x, out=out)
@@ -1150,11 +1158,11 @@ class ComposedLinearOperator(LinearOperator):
1150
1158
  return out
1151
1159
 
1152
1160
  def exchange_assembly_data(self):
1153
- for op in self._multiplicants:
1161
+ for op in self._multiplicands:
1154
1162
  op.exchange_assembly_data()
1155
1163
 
1156
1164
  def set_backend(self, backend, precompiled=False):
1157
- for op in self._multiplicants:
1165
+ for op in self._multiplicands:
1158
1166
  op.set_backend(backend)
1159
1167
 
1160
1168
  #===============================================================================