numba-cuda 0.8.0__py3-none-any.whl → 0.9.0__py3-none-any.whl

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 (227) hide show
  1. _numba_cuda_redirector.py +17 -13
  2. numba_cuda/VERSION +1 -1
  3. numba_cuda/_version.py +4 -1
  4. numba_cuda/numba/cuda/__init__.py +6 -2
  5. numba_cuda/numba/cuda/api.py +129 -86
  6. numba_cuda/numba/cuda/api_util.py +3 -3
  7. numba_cuda/numba/cuda/args.py +12 -16
  8. numba_cuda/numba/cuda/cg.py +6 -6
  9. numba_cuda/numba/cuda/codegen.py +74 -43
  10. numba_cuda/numba/cuda/compiler.py +232 -113
  11. numba_cuda/numba/cuda/cpp_function_wrappers.cu +1 -2
  12. numba_cuda/numba/cuda/cuda_fp16.h +661 -661
  13. numba_cuda/numba/cuda/cuda_fp16.hpp +3 -3
  14. numba_cuda/numba/cuda/cuda_paths.py +291 -99
  15. numba_cuda/numba/cuda/cudadecl.py +125 -69
  16. numba_cuda/numba/cuda/cudadrv/__init__.py +3 -1
  17. numba_cuda/numba/cuda/cudadrv/devicearray.py +185 -135
  18. numba_cuda/numba/cuda/cudadrv/devices.py +16 -11
  19. numba_cuda/numba/cuda/cudadrv/driver.py +463 -297
  20. numba_cuda/numba/cuda/cudadrv/drvapi.py +241 -207
  21. numba_cuda/numba/cuda/cudadrv/dummyarray.py +66 -54
  22. numba_cuda/numba/cuda/cudadrv/enums.py +1 -1
  23. numba_cuda/numba/cuda/cudadrv/error.py +6 -2
  24. numba_cuda/numba/cuda/cudadrv/libs.py +67 -63
  25. numba_cuda/numba/cuda/cudadrv/linkable_code.py +16 -1
  26. numba_cuda/numba/cuda/cudadrv/mappings.py +16 -14
  27. numba_cuda/numba/cuda/cudadrv/nvrtc.py +138 -29
  28. numba_cuda/numba/cuda/cudadrv/nvvm.py +296 -161
  29. numba_cuda/numba/cuda/cudadrv/rtapi.py +1 -1
  30. numba_cuda/numba/cuda/cudadrv/runtime.py +20 -8
  31. numba_cuda/numba/cuda/cudaimpl.py +317 -233
  32. numba_cuda/numba/cuda/cudamath.py +1 -1
  33. numba_cuda/numba/cuda/debuginfo.py +8 -6
  34. numba_cuda/numba/cuda/decorators.py +75 -45
  35. numba_cuda/numba/cuda/descriptor.py +1 -1
  36. numba_cuda/numba/cuda/device_init.py +69 -18
  37. numba_cuda/numba/cuda/deviceufunc.py +143 -98
  38. numba_cuda/numba/cuda/dispatcher.py +300 -213
  39. numba_cuda/numba/cuda/errors.py +13 -10
  40. numba_cuda/numba/cuda/extending.py +1 -1
  41. numba_cuda/numba/cuda/initialize.py +5 -3
  42. numba_cuda/numba/cuda/intrinsic_wrapper.py +3 -3
  43. numba_cuda/numba/cuda/intrinsics.py +31 -27
  44. numba_cuda/numba/cuda/kernels/reduction.py +13 -13
  45. numba_cuda/numba/cuda/kernels/transpose.py +3 -6
  46. numba_cuda/numba/cuda/libdevice.py +317 -317
  47. numba_cuda/numba/cuda/libdeviceimpl.py +3 -2
  48. numba_cuda/numba/cuda/locks.py +16 -0
  49. numba_cuda/numba/cuda/mathimpl.py +62 -57
  50. numba_cuda/numba/cuda/models.py +1 -5
  51. numba_cuda/numba/cuda/nvvmutils.py +103 -88
  52. numba_cuda/numba/cuda/printimpl.py +9 -5
  53. numba_cuda/numba/cuda/random.py +46 -36
  54. numba_cuda/numba/cuda/reshape_funcs.cu +1 -1
  55. numba_cuda/numba/cuda/runtime/__init__.py +1 -1
  56. numba_cuda/numba/cuda/runtime/memsys.cu +1 -1
  57. numba_cuda/numba/cuda/runtime/memsys.cuh +1 -1
  58. numba_cuda/numba/cuda/runtime/nrt.cu +3 -3
  59. numba_cuda/numba/cuda/runtime/nrt.py +48 -43
  60. numba_cuda/numba/cuda/simulator/__init__.py +22 -12
  61. numba_cuda/numba/cuda/simulator/api.py +38 -22
  62. numba_cuda/numba/cuda/simulator/compiler.py +2 -2
  63. numba_cuda/numba/cuda/simulator/cudadrv/__init__.py +8 -2
  64. numba_cuda/numba/cuda/simulator/cudadrv/devicearray.py +63 -55
  65. numba_cuda/numba/cuda/simulator/cudadrv/devices.py +13 -11
  66. numba_cuda/numba/cuda/simulator/cudadrv/driver.py +5 -5
  67. numba_cuda/numba/cuda/simulator/cudadrv/drvapi.py +2 -2
  68. numba_cuda/numba/cuda/simulator/cudadrv/libs.py +1 -1
  69. numba_cuda/numba/cuda/simulator/cudadrv/nvvm.py +3 -3
  70. numba_cuda/numba/cuda/simulator/cudadrv/runtime.py +3 -3
  71. numba_cuda/numba/cuda/simulator/kernel.py +43 -34
  72. numba_cuda/numba/cuda/simulator/kernelapi.py +31 -26
  73. numba_cuda/numba/cuda/simulator/reduction.py +1 -0
  74. numba_cuda/numba/cuda/simulator/vector_types.py +13 -9
  75. numba_cuda/numba/cuda/simulator_init.py +2 -4
  76. numba_cuda/numba/cuda/stubs.py +139 -102
  77. numba_cuda/numba/cuda/target.py +64 -47
  78. numba_cuda/numba/cuda/testing.py +24 -19
  79. numba_cuda/numba/cuda/tests/__init__.py +14 -12
  80. numba_cuda/numba/cuda/tests/cudadrv/test_array_attr.py +16 -17
  81. numba_cuda/numba/cuda/tests/cudadrv/test_context_stack.py +7 -7
  82. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_array_slicing.py +73 -54
  83. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_auto_context.py +1 -1
  84. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_devicerecord.py +48 -50
  85. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_driver.py +47 -29
  86. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_libraries.py +3 -3
  87. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_memory.py +19 -19
  88. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_ndarray.py +108 -103
  89. numba_cuda/numba/cuda/tests/cudadrv/test_deallocations.py +20 -11
  90. numba_cuda/numba/cuda/tests/cudadrv/test_detect.py +20 -17
  91. numba_cuda/numba/cuda/tests/cudadrv/test_emm_plugins.py +8 -6
  92. numba_cuda/numba/cuda/tests/cudadrv/test_events.py +1 -1
  93. numba_cuda/numba/cuda/tests/cudadrv/test_host_alloc.py +8 -7
  94. numba_cuda/numba/cuda/tests/cudadrv/test_init.py +13 -13
  95. numba_cuda/numba/cuda/tests/cudadrv/test_inline_ptx.py +12 -9
  96. numba_cuda/numba/cuda/tests/cudadrv/test_linker.py +36 -31
  97. numba_cuda/numba/cuda/tests/cudadrv/test_managed_alloc.py +8 -7
  98. numba_cuda/numba/cuda/tests/cudadrv/test_module_callbacks.py +294 -0
  99. numba_cuda/numba/cuda/tests/cudadrv/test_mvc.py +10 -7
  100. numba_cuda/numba/cuda/tests/cudadrv/test_nvjitlink.py +24 -15
  101. numba_cuda/numba/cuda/tests/cudadrv/test_nvvm_driver.py +43 -41
  102. numba_cuda/numba/cuda/tests/cudadrv/test_pinned.py +4 -5
  103. numba_cuda/numba/cuda/tests/cudadrv/test_profiler.py +2 -2
  104. numba_cuda/numba/cuda/tests/cudadrv/test_ptds.py +28 -17
  105. numba_cuda/numba/cuda/tests/cudadrv/test_reset_device.py +1 -2
  106. numba_cuda/numba/cuda/tests/cudadrv/test_runtime.py +22 -14
  107. numba_cuda/numba/cuda/tests/cudadrv/test_select_device.py +1 -1
  108. numba_cuda/numba/cuda/tests/cudadrv/test_streams.py +4 -3
  109. numba_cuda/numba/cuda/tests/cudapy/cache_usecases.py +10 -4
  110. numba_cuda/numba/cuda/tests/cudapy/cache_with_cpu_usecases.py +1 -0
  111. numba_cuda/numba/cuda/tests/cudapy/extensions_usecases.py +7 -6
  112. numba_cuda/numba/cuda/tests/cudapy/jitlink.ptx +0 -2
  113. numba_cuda/numba/cuda/tests/cudapy/recursion_usecases.py +1 -0
  114. numba_cuda/numba/cuda/tests/cudapy/test_alignment.py +6 -5
  115. numba_cuda/numba/cuda/tests/cudapy/test_array.py +52 -42
  116. numba_cuda/numba/cuda/tests/cudapy/test_array_args.py +5 -6
  117. numba_cuda/numba/cuda/tests/cudapy/test_array_methods.py +1 -1
  118. numba_cuda/numba/cuda/tests/cudapy/test_atomics.py +501 -304
  119. numba_cuda/numba/cuda/tests/cudapy/test_blackscholes.py +57 -21
  120. numba_cuda/numba/cuda/tests/cudapy/test_boolean.py +3 -3
  121. numba_cuda/numba/cuda/tests/cudapy/test_caching.py +50 -37
  122. numba_cuda/numba/cuda/tests/cudapy/test_casting.py +29 -24
  123. numba_cuda/numba/cuda/tests/cudapy/test_cffi.py +11 -6
  124. numba_cuda/numba/cuda/tests/cudapy/test_compiler.py +84 -50
  125. numba_cuda/numba/cuda/tests/cudapy/test_complex.py +144 -73
  126. numba_cuda/numba/cuda/tests/cudapy/test_complex_kernel.py +2 -2
  127. numba_cuda/numba/cuda/tests/cudapy/test_const_string.py +37 -27
  128. numba_cuda/numba/cuda/tests/cudapy/test_constmem.py +43 -45
  129. numba_cuda/numba/cuda/tests/cudapy/test_cooperative_groups.py +21 -14
  130. numba_cuda/numba/cuda/tests/cudapy/test_cuda_array_interface.py +60 -55
  131. numba_cuda/numba/cuda/tests/cudapy/test_cuda_jit_no_types.py +3 -2
  132. numba_cuda/numba/cuda/tests/cudapy/test_datetime.py +26 -22
  133. numba_cuda/numba/cuda/tests/cudapy/test_debug.py +29 -27
  134. numba_cuda/numba/cuda/tests/cudapy/test_debuginfo.py +31 -28
  135. numba_cuda/numba/cuda/tests/cudapy/test_device_func.py +52 -45
  136. numba_cuda/numba/cuda/tests/cudapy/test_dispatcher.py +55 -43
  137. numba_cuda/numba/cuda/tests/cudapy/test_enums.py +6 -7
  138. numba_cuda/numba/cuda/tests/cudapy/test_errors.py +30 -15
  139. numba_cuda/numba/cuda/tests/cudapy/test_exception.py +11 -12
  140. numba_cuda/numba/cuda/tests/cudapy/test_extending.py +19 -12
  141. numba_cuda/numba/cuda/tests/cudapy/test_fastmath.py +77 -66
  142. numba_cuda/numba/cuda/tests/cudapy/test_forall.py +5 -3
  143. numba_cuda/numba/cuda/tests/cudapy/test_freevar.py +5 -3
  144. numba_cuda/numba/cuda/tests/cudapy/test_frexp_ldexp.py +1 -1
  145. numba_cuda/numba/cuda/tests/cudapy/test_globals.py +3 -5
  146. numba_cuda/numba/cuda/tests/cudapy/test_gufunc.py +144 -126
  147. numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scalar.py +23 -18
  148. numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scheduling.py +16 -22
  149. numba_cuda/numba/cuda/tests/cudapy/test_idiv.py +1 -3
  150. numba_cuda/numba/cuda/tests/cudapy/test_inspect.py +29 -20
  151. numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py +147 -99
  152. numba_cuda/numba/cuda/tests/cudapy/test_ipc.py +50 -36
  153. numba_cuda/numba/cuda/tests/cudapy/test_iterators.py +1 -2
  154. numba_cuda/numba/cuda/tests/cudapy/test_lang.py +4 -4
  155. numba_cuda/numba/cuda/tests/cudapy/test_laplace.py +6 -6
  156. numba_cuda/numba/cuda/tests/cudapy/test_libdevice.py +24 -20
  157. numba_cuda/numba/cuda/tests/cudapy/test_lineinfo.py +36 -31
  158. numba_cuda/numba/cuda/tests/cudapy/test_localmem.py +13 -13
  159. numba_cuda/numba/cuda/tests/cudapy/test_mandel.py +13 -6
  160. numba_cuda/numba/cuda/tests/cudapy/test_math.py +83 -66
  161. numba_cuda/numba/cuda/tests/cudapy/test_matmul.py +1 -3
  162. numba_cuda/numba/cuda/tests/cudapy/test_minmax.py +19 -58
  163. numba_cuda/numba/cuda/tests/cudapy/test_montecarlo.py +4 -4
  164. numba_cuda/numba/cuda/tests/cudapy/test_multigpu.py +9 -7
  165. numba_cuda/numba/cuda/tests/cudapy/test_multiprocessing.py +9 -8
  166. numba_cuda/numba/cuda/tests/cudapy/test_multithreads.py +12 -10
  167. numba_cuda/numba/cuda/tests/cudapy/test_nondet.py +1 -1
  168. numba_cuda/numba/cuda/tests/cudapy/test_operator.py +180 -96
  169. numba_cuda/numba/cuda/tests/cudapy/test_optimization.py +5 -5
  170. numba_cuda/numba/cuda/tests/cudapy/test_overload.py +37 -18
  171. numba_cuda/numba/cuda/tests/cudapy/test_powi.py +7 -7
  172. numba_cuda/numba/cuda/tests/cudapy/test_print.py +9 -7
  173. numba_cuda/numba/cuda/tests/cudapy/test_py2_div_issue.py +1 -1
  174. numba_cuda/numba/cuda/tests/cudapy/test_random.py +15 -10
  175. numba_cuda/numba/cuda/tests/cudapy/test_record_dtype.py +88 -87
  176. numba_cuda/numba/cuda/tests/cudapy/test_recursion.py +12 -10
  177. numba_cuda/numba/cuda/tests/cudapy/test_reduction.py +26 -11
  178. numba_cuda/numba/cuda/tests/cudapy/test_retrieve_autoconverted_arrays.py +7 -10
  179. numba_cuda/numba/cuda/tests/cudapy/test_serialize.py +4 -6
  180. numba_cuda/numba/cuda/tests/cudapy/test_slicing.py +1 -1
  181. numba_cuda/numba/cuda/tests/cudapy/test_sm.py +10 -9
  182. numba_cuda/numba/cuda/tests/cudapy/test_sm_creation.py +62 -43
  183. numba_cuda/numba/cuda/tests/cudapy/test_stream_api.py +7 -3
  184. numba_cuda/numba/cuda/tests/cudapy/test_sync.py +7 -5
  185. numba_cuda/numba/cuda/tests/cudapy/test_transpose.py +18 -11
  186. numba_cuda/numba/cuda/tests/cudapy/test_ufuncs.py +111 -88
  187. numba_cuda/numba/cuda/tests/cudapy/test_userexc.py +2 -3
  188. numba_cuda/numba/cuda/tests/cudapy/test_vector_type.py +305 -130
  189. numba_cuda/numba/cuda/tests/cudapy/test_vectorize.py +33 -36
  190. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_complex.py +5 -5
  191. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_decor.py +16 -12
  192. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_device.py +7 -7
  193. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_scalar_arg.py +6 -7
  194. numba_cuda/numba/cuda/tests/cudapy/test_warning.py +31 -29
  195. numba_cuda/numba/cuda/tests/cudapy/test_warp_ops.py +31 -25
  196. numba_cuda/numba/cuda/tests/cudasim/test_cudasim_issues.py +19 -13
  197. numba_cuda/numba/cuda/tests/data/jitlink.cu +1 -1
  198. numba_cuda/numba/cuda/tests/data/jitlink.ptx +0 -2
  199. numba_cuda/numba/cuda/tests/doc_examples/test_cg.py +15 -8
  200. numba_cuda/numba/cuda/tests/doc_examples/test_cpu_gpu_compat.py +4 -7
  201. numba_cuda/numba/cuda/tests/doc_examples/test_ffi.py +14 -9
  202. numba_cuda/numba/cuda/tests/doc_examples/test_laplace.py +22 -18
  203. numba_cuda/numba/cuda/tests/doc_examples/test_matmul.py +7 -4
  204. numba_cuda/numba/cuda/tests/doc_examples/test_montecarlo.py +2 -0
  205. numba_cuda/numba/cuda/tests/doc_examples/test_random.py +8 -4
  206. numba_cuda/numba/cuda/tests/doc_examples/test_reduction.py +2 -1
  207. numba_cuda/numba/cuda/tests/doc_examples/test_sessionize.py +94 -19
  208. numba_cuda/numba/cuda/tests/doc_examples/test_vecadd.py +2 -2
  209. numba_cuda/numba/cuda/tests/nocuda/test_dummyarray.py +91 -62
  210. numba_cuda/numba/cuda/tests/nocuda/test_function_resolution.py +14 -5
  211. numba_cuda/numba/cuda/tests/nocuda/test_import.py +25 -25
  212. numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py +40 -40
  213. numba_cuda/numba/cuda/tests/nocuda/test_nvvm.py +12 -10
  214. numba_cuda/numba/cuda/tests/nrt/test_nrt.py +16 -20
  215. numba_cuda/numba/cuda/tests/nrt/test_nrt_refct.py +12 -10
  216. numba_cuda/numba/cuda/tests/test_binary_generation/generate_raw_ltoir.py +2 -2
  217. numba_cuda/numba/cuda/types.py +5 -2
  218. numba_cuda/numba/cuda/ufuncs.py +382 -362
  219. numba_cuda/numba/cuda/utils.py +2 -2
  220. numba_cuda/numba/cuda/vector_types.py +2 -2
  221. numba_cuda/numba/cuda/vectorizers.py +37 -32
  222. {numba_cuda-0.8.0.dist-info → numba_cuda-0.9.0.dist-info}/METADATA +1 -1
  223. numba_cuda-0.9.0.dist-info/RECORD +253 -0
  224. {numba_cuda-0.8.0.dist-info → numba_cuda-0.9.0.dist-info}/WHEEL +1 -1
  225. numba_cuda-0.8.0.dist-info/RECORD +0 -251
  226. {numba_cuda-0.8.0.dist-info → numba_cuda-0.9.0.dist-info}/licenses/LICENSE +0 -0
  227. {numba_cuda-0.8.0.dist-info → numba_cuda-0.9.0.dist-info}/top_level.txt +0 -0
@@ -10,8 +10,10 @@ import math
10
10
  import numpy as np
11
11
  from functools import lru_cache
12
12
  from numba.core import typing
13
- from numba.cuda.mathimpl import (get_unary_impl_for_fn_and_ty,
14
- get_binary_impl_for_fn_and_ty)
13
+ from numba.cuda.mathimpl import (
14
+ get_unary_impl_for_fn_and_ty,
15
+ get_binary_impl_for_fn_and_ty,
16
+ )
15
17
 
16
18
 
17
19
  def get_ufunc_info(ufunc_key):
@@ -173,490 +175,508 @@ def ufunc_db():
173
175
  db = {}
174
176
 
175
177
  db[np.sin] = {
176
- 'f->f': np_real_sin_impl,
177
- 'd->d': np_real_sin_impl,
178
- 'F->F': npyfuncs.np_complex_sin_impl,
179
- 'D->D': npyfuncs.np_complex_sin_impl,
178
+ "f->f": np_real_sin_impl,
179
+ "d->d": np_real_sin_impl,
180
+ "F->F": npyfuncs.np_complex_sin_impl,
181
+ "D->D": npyfuncs.np_complex_sin_impl,
180
182
  }
181
183
 
182
184
  db[np.cos] = {
183
- 'f->f': np_real_cos_impl,
184
- 'd->d': np_real_cos_impl,
185
- 'F->F': npyfuncs.np_complex_cos_impl,
186
- 'D->D': npyfuncs.np_complex_cos_impl,
185
+ "f->f": np_real_cos_impl,
186
+ "d->d": np_real_cos_impl,
187
+ "F->F": npyfuncs.np_complex_cos_impl,
188
+ "D->D": npyfuncs.np_complex_cos_impl,
187
189
  }
188
190
 
189
191
  db[np.tan] = {
190
- 'f->f': np_real_tan_impl,
191
- 'd->d': np_real_tan_impl,
192
- 'F->F': cmathimpl.tan_impl,
193
- 'D->D': cmathimpl.tan_impl,
192
+ "f->f": np_real_tan_impl,
193
+ "d->d": np_real_tan_impl,
194
+ "F->F": cmathimpl.tan_impl,
195
+ "D->D": cmathimpl.tan_impl,
194
196
  }
195
197
 
196
198
  db[np.arcsin] = {
197
- 'f->f': np_real_asin_impl,
198
- 'd->d': np_real_asin_impl,
199
- 'F->F': cmathimpl.asin_impl,
200
- 'D->D': cmathimpl.asin_impl,
199
+ "f->f": np_real_asin_impl,
200
+ "d->d": np_real_asin_impl,
201
+ "F->F": cmathimpl.asin_impl,
202
+ "D->D": cmathimpl.asin_impl,
201
203
  }
202
204
 
203
205
  db[np.arccos] = {
204
- 'f->f': np_real_acos_impl,
205
- 'd->d': np_real_acos_impl,
206
- 'F->F': cmathimpl.acos_impl,
207
- 'D->D': cmathimpl.acos_impl,
206
+ "f->f": np_real_acos_impl,
207
+ "d->d": np_real_acos_impl,
208
+ "F->F": cmathimpl.acos_impl,
209
+ "D->D": cmathimpl.acos_impl,
208
210
  }
209
211
 
210
212
  db[np.arctan] = {
211
- 'f->f': np_real_atan_impl,
212
- 'd->d': np_real_atan_impl,
213
- 'F->F': cmathimpl.atan_impl,
214
- 'D->D': cmathimpl.atan_impl,
213
+ "f->f": np_real_atan_impl,
214
+ "d->d": np_real_atan_impl,
215
+ "F->F": cmathimpl.atan_impl,
216
+ "D->D": cmathimpl.atan_impl,
215
217
  }
216
218
 
217
219
  db[np.arctan2] = {
218
- 'ff->f': np_real_atan2_impl,
219
- 'dd->d': np_real_atan2_impl,
220
+ "ff->f": np_real_atan2_impl,
221
+ "dd->d": np_real_atan2_impl,
220
222
  }
221
223
 
222
224
  db[np.hypot] = {
223
- 'ff->f': np_real_hypot_impl,
224
- 'dd->d': np_real_hypot_impl,
225
+ "ff->f": np_real_hypot_impl,
226
+ "dd->d": np_real_hypot_impl,
225
227
  }
226
228
 
227
229
  db[np.sinh] = {
228
- 'f->f': np_real_sinh_impl,
229
- 'd->d': np_real_sinh_impl,
230
- 'F->F': np_complex_sinh_impl,
231
- 'D->D': np_complex_sinh_impl,
230
+ "f->f": np_real_sinh_impl,
231
+ "d->d": np_real_sinh_impl,
232
+ "F->F": np_complex_sinh_impl,
233
+ "D->D": np_complex_sinh_impl,
232
234
  }
233
235
 
234
236
  db[np.cosh] = {
235
- 'f->f': np_real_cosh_impl,
236
- 'd->d': np_real_cosh_impl,
237
- 'F->F': np_complex_cosh_impl,
238
- 'D->D': np_complex_cosh_impl,
237
+ "f->f": np_real_cosh_impl,
238
+ "d->d": np_real_cosh_impl,
239
+ "F->F": np_complex_cosh_impl,
240
+ "D->D": np_complex_cosh_impl,
239
241
  }
240
242
 
241
243
  db[np.tanh] = {
242
- 'f->f': np_real_tanh_impl,
243
- 'd->d': np_real_tanh_impl,
244
- 'F->F': np_complex_tanh_impl,
245
- 'D->D': np_complex_tanh_impl,
244
+ "f->f": np_real_tanh_impl,
245
+ "d->d": np_real_tanh_impl,
246
+ "F->F": np_complex_tanh_impl,
247
+ "D->D": np_complex_tanh_impl,
246
248
  }
247
249
 
248
250
  db[np.arcsinh] = {
249
- 'f->f': np_real_asinh_impl,
250
- 'd->d': np_real_asinh_impl,
251
- 'F->F': cmathimpl.asinh_impl,
252
- 'D->D': cmathimpl.asinh_impl,
251
+ "f->f": np_real_asinh_impl,
252
+ "d->d": np_real_asinh_impl,
253
+ "F->F": cmathimpl.asinh_impl,
254
+ "D->D": cmathimpl.asinh_impl,
253
255
  }
254
256
 
255
257
  db[np.arccosh] = {
256
- 'f->f': np_real_acosh_impl,
257
- 'd->d': np_real_acosh_impl,
258
- 'F->F': npyfuncs.np_complex_acosh_impl,
259
- 'D->D': npyfuncs.np_complex_acosh_impl,
258
+ "f->f": np_real_acosh_impl,
259
+ "d->d": np_real_acosh_impl,
260
+ "F->F": npyfuncs.np_complex_acosh_impl,
261
+ "D->D": npyfuncs.np_complex_acosh_impl,
260
262
  }
261
263
 
262
264
  db[np.arctanh] = {
263
- 'f->f': np_real_atanh_impl,
264
- 'd->d': np_real_atanh_impl,
265
- 'F->F': cmathimpl.atanh_impl,
266
- 'D->D': cmathimpl.atanh_impl,
265
+ "f->f": np_real_atanh_impl,
266
+ "d->d": np_real_atanh_impl,
267
+ "F->F": cmathimpl.atanh_impl,
268
+ "D->D": cmathimpl.atanh_impl,
267
269
  }
268
270
 
269
271
  db[np.deg2rad] = {
270
- 'f->f': mathimpl.radians_float_impl,
271
- 'd->d': mathimpl.radians_float_impl,
272
+ "f->f": mathimpl.radians_float_impl,
273
+ "d->d": mathimpl.radians_float_impl,
272
274
  }
273
275
 
274
276
  db[np.radians] = db[np.deg2rad]
275
277
 
276
278
  db[np.rad2deg] = {
277
- 'f->f': mathimpl.degrees_float_impl,
278
- 'd->d': mathimpl.degrees_float_impl,
279
+ "f->f": mathimpl.degrees_float_impl,
280
+ "d->d": mathimpl.degrees_float_impl,
279
281
  }
280
282
 
281
283
  db[np.degrees] = db[np.rad2deg]
282
284
 
283
285
  db[np.greater] = {
284
- '??->?': numbers.int_ugt_impl,
285
- 'bb->?': numbers.int_sgt_impl,
286
- 'BB->?': numbers.int_ugt_impl,
287
- 'hh->?': numbers.int_sgt_impl,
288
- 'HH->?': numbers.int_ugt_impl,
289
- 'ii->?': numbers.int_sgt_impl,
290
- 'II->?': numbers.int_ugt_impl,
291
- 'll->?': numbers.int_sgt_impl,
292
- 'LL->?': numbers.int_ugt_impl,
293
- 'qq->?': numbers.int_sgt_impl,
294
- 'QQ->?': numbers.int_ugt_impl,
295
- 'ff->?': numbers.real_gt_impl,
296
- 'dd->?': numbers.real_gt_impl,
297
- 'FF->?': npyfuncs.np_complex_gt_impl,
298
- 'DD->?': npyfuncs.np_complex_gt_impl,
286
+ "??->?": numbers.int_ugt_impl,
287
+ "bb->?": numbers.int_sgt_impl,
288
+ "BB->?": numbers.int_ugt_impl,
289
+ "hh->?": numbers.int_sgt_impl,
290
+ "HH->?": numbers.int_ugt_impl,
291
+ "ii->?": numbers.int_sgt_impl,
292
+ "II->?": numbers.int_ugt_impl,
293
+ "ll->?": numbers.int_sgt_impl,
294
+ "LL->?": numbers.int_ugt_impl,
295
+ "qq->?": numbers.int_sgt_impl,
296
+ "QQ->?": numbers.int_ugt_impl,
297
+ "ff->?": numbers.real_gt_impl,
298
+ "dd->?": numbers.real_gt_impl,
299
+ "FF->?": npyfuncs.np_complex_gt_impl,
300
+ "DD->?": npyfuncs.np_complex_gt_impl,
299
301
  }
300
302
  if numpy_version >= (1, 25):
301
- db[np.greater].update({
302
- 'qQ->?': numbers.int_signed_unsigned_cmp('>'),
303
- 'Qq->?': numbers.int_unsigned_signed_cmp('>')})
303
+ db[np.greater].update(
304
+ {
305
+ "qQ->?": numbers.int_signed_unsigned_cmp(">"),
306
+ "Qq->?": numbers.int_unsigned_signed_cmp(">"),
307
+ }
308
+ )
304
309
 
305
310
  db[np.greater_equal] = {
306
- '??->?': numbers.int_uge_impl,
307
- 'bb->?': numbers.int_sge_impl,
308
- 'BB->?': numbers.int_uge_impl,
309
- 'hh->?': numbers.int_sge_impl,
310
- 'HH->?': numbers.int_uge_impl,
311
- 'ii->?': numbers.int_sge_impl,
312
- 'II->?': numbers.int_uge_impl,
313
- 'll->?': numbers.int_sge_impl,
314
- 'LL->?': numbers.int_uge_impl,
315
- 'qq->?': numbers.int_sge_impl,
316
- 'QQ->?': numbers.int_uge_impl,
317
- 'ff->?': numbers.real_ge_impl,
318
- 'dd->?': numbers.real_ge_impl,
319
- 'FF->?': npyfuncs.np_complex_ge_impl,
320
- 'DD->?': npyfuncs.np_complex_ge_impl,
311
+ "??->?": numbers.int_uge_impl,
312
+ "bb->?": numbers.int_sge_impl,
313
+ "BB->?": numbers.int_uge_impl,
314
+ "hh->?": numbers.int_sge_impl,
315
+ "HH->?": numbers.int_uge_impl,
316
+ "ii->?": numbers.int_sge_impl,
317
+ "II->?": numbers.int_uge_impl,
318
+ "ll->?": numbers.int_sge_impl,
319
+ "LL->?": numbers.int_uge_impl,
320
+ "qq->?": numbers.int_sge_impl,
321
+ "QQ->?": numbers.int_uge_impl,
322
+ "ff->?": numbers.real_ge_impl,
323
+ "dd->?": numbers.real_ge_impl,
324
+ "FF->?": npyfuncs.np_complex_ge_impl,
325
+ "DD->?": npyfuncs.np_complex_ge_impl,
321
326
  }
322
327
  if numpy_version >= (1, 25):
323
- db[np.greater_equal].update({
324
- 'qQ->?': numbers.int_signed_unsigned_cmp('>='),
325
- 'Qq->?': numbers.int_unsigned_signed_cmp('>=')})
328
+ db[np.greater_equal].update(
329
+ {
330
+ "qQ->?": numbers.int_signed_unsigned_cmp(">="),
331
+ "Qq->?": numbers.int_unsigned_signed_cmp(">="),
332
+ }
333
+ )
326
334
 
327
335
  db[np.less] = {
328
- '??->?': numbers.int_ult_impl,
329
- 'bb->?': numbers.int_slt_impl,
330
- 'BB->?': numbers.int_ult_impl,
331
- 'hh->?': numbers.int_slt_impl,
332
- 'HH->?': numbers.int_ult_impl,
333
- 'ii->?': numbers.int_slt_impl,
334
- 'II->?': numbers.int_ult_impl,
335
- 'll->?': numbers.int_slt_impl,
336
- 'LL->?': numbers.int_ult_impl,
337
- 'qq->?': numbers.int_slt_impl,
338
- 'QQ->?': numbers.int_ult_impl,
339
- 'ff->?': numbers.real_lt_impl,
340
- 'dd->?': numbers.real_lt_impl,
341
- 'FF->?': npyfuncs.np_complex_lt_impl,
342
- 'DD->?': npyfuncs.np_complex_lt_impl,
336
+ "??->?": numbers.int_ult_impl,
337
+ "bb->?": numbers.int_slt_impl,
338
+ "BB->?": numbers.int_ult_impl,
339
+ "hh->?": numbers.int_slt_impl,
340
+ "HH->?": numbers.int_ult_impl,
341
+ "ii->?": numbers.int_slt_impl,
342
+ "II->?": numbers.int_ult_impl,
343
+ "ll->?": numbers.int_slt_impl,
344
+ "LL->?": numbers.int_ult_impl,
345
+ "qq->?": numbers.int_slt_impl,
346
+ "QQ->?": numbers.int_ult_impl,
347
+ "ff->?": numbers.real_lt_impl,
348
+ "dd->?": numbers.real_lt_impl,
349
+ "FF->?": npyfuncs.np_complex_lt_impl,
350
+ "DD->?": npyfuncs.np_complex_lt_impl,
343
351
  }
344
352
  if numpy_version >= (1, 25):
345
- db[np.less].update({
346
- 'qQ->?': numbers.int_signed_unsigned_cmp('<'),
347
- 'Qq->?': numbers.int_unsigned_signed_cmp('<')})
353
+ db[np.less].update(
354
+ {
355
+ "qQ->?": numbers.int_signed_unsigned_cmp("<"),
356
+ "Qq->?": numbers.int_unsigned_signed_cmp("<"),
357
+ }
358
+ )
348
359
 
349
360
  db[np.less_equal] = {
350
- '??->?': numbers.int_ule_impl,
351
- 'bb->?': numbers.int_sle_impl,
352
- 'BB->?': numbers.int_ule_impl,
353
- 'hh->?': numbers.int_sle_impl,
354
- 'HH->?': numbers.int_ule_impl,
355
- 'ii->?': numbers.int_sle_impl,
356
- 'II->?': numbers.int_ule_impl,
357
- 'll->?': numbers.int_sle_impl,
358
- 'LL->?': numbers.int_ule_impl,
359
- 'qq->?': numbers.int_sle_impl,
360
- 'QQ->?': numbers.int_ule_impl,
361
- 'ff->?': numbers.real_le_impl,
362
- 'dd->?': numbers.real_le_impl,
363
- 'FF->?': npyfuncs.np_complex_le_impl,
364
- 'DD->?': npyfuncs.np_complex_le_impl,
361
+ "??->?": numbers.int_ule_impl,
362
+ "bb->?": numbers.int_sle_impl,
363
+ "BB->?": numbers.int_ule_impl,
364
+ "hh->?": numbers.int_sle_impl,
365
+ "HH->?": numbers.int_ule_impl,
366
+ "ii->?": numbers.int_sle_impl,
367
+ "II->?": numbers.int_ule_impl,
368
+ "ll->?": numbers.int_sle_impl,
369
+ "LL->?": numbers.int_ule_impl,
370
+ "qq->?": numbers.int_sle_impl,
371
+ "QQ->?": numbers.int_ule_impl,
372
+ "ff->?": numbers.real_le_impl,
373
+ "dd->?": numbers.real_le_impl,
374
+ "FF->?": npyfuncs.np_complex_le_impl,
375
+ "DD->?": npyfuncs.np_complex_le_impl,
365
376
  }
366
377
  if numpy_version >= (1, 25):
367
- db[np.less_equal].update({
368
- 'qQ->?': numbers.int_signed_unsigned_cmp('<='),
369
- 'Qq->?': numbers.int_unsigned_signed_cmp('<=')})
378
+ db[np.less_equal].update(
379
+ {
380
+ "qQ->?": numbers.int_signed_unsigned_cmp("<="),
381
+ "Qq->?": numbers.int_unsigned_signed_cmp("<="),
382
+ }
383
+ )
370
384
 
371
385
  db[np.not_equal] = {
372
- '??->?': numbers.int_ne_impl,
373
- 'bb->?': numbers.int_ne_impl,
374
- 'BB->?': numbers.int_ne_impl,
375
- 'hh->?': numbers.int_ne_impl,
376
- 'HH->?': numbers.int_ne_impl,
377
- 'ii->?': numbers.int_ne_impl,
378
- 'II->?': numbers.int_ne_impl,
379
- 'll->?': numbers.int_ne_impl,
380
- 'LL->?': numbers.int_ne_impl,
381
- 'qq->?': numbers.int_ne_impl,
382
- 'QQ->?': numbers.int_ne_impl,
383
- 'ff->?': numbers.real_ne_impl,
384
- 'dd->?': numbers.real_ne_impl,
385
- 'FF->?': npyfuncs.np_complex_ne_impl,
386
- 'DD->?': npyfuncs.np_complex_ne_impl,
386
+ "??->?": numbers.int_ne_impl,
387
+ "bb->?": numbers.int_ne_impl,
388
+ "BB->?": numbers.int_ne_impl,
389
+ "hh->?": numbers.int_ne_impl,
390
+ "HH->?": numbers.int_ne_impl,
391
+ "ii->?": numbers.int_ne_impl,
392
+ "II->?": numbers.int_ne_impl,
393
+ "ll->?": numbers.int_ne_impl,
394
+ "LL->?": numbers.int_ne_impl,
395
+ "qq->?": numbers.int_ne_impl,
396
+ "QQ->?": numbers.int_ne_impl,
397
+ "ff->?": numbers.real_ne_impl,
398
+ "dd->?": numbers.real_ne_impl,
399
+ "FF->?": npyfuncs.np_complex_ne_impl,
400
+ "DD->?": npyfuncs.np_complex_ne_impl,
387
401
  }
388
402
  if numpy_version >= (1, 25):
389
- db[np.not_equal].update({
390
- 'qQ->?': numbers.int_signed_unsigned_cmp('!='),
391
- 'Qq->?': numbers.int_unsigned_signed_cmp('!=')})
403
+ db[np.not_equal].update(
404
+ {
405
+ "qQ->?": numbers.int_signed_unsigned_cmp("!="),
406
+ "Qq->?": numbers.int_unsigned_signed_cmp("!="),
407
+ }
408
+ )
392
409
 
393
410
  db[np.equal] = {
394
- '??->?': numbers.int_eq_impl,
395
- 'bb->?': numbers.int_eq_impl,
396
- 'BB->?': numbers.int_eq_impl,
397
- 'hh->?': numbers.int_eq_impl,
398
- 'HH->?': numbers.int_eq_impl,
399
- 'ii->?': numbers.int_eq_impl,
400
- 'II->?': numbers.int_eq_impl,
401
- 'll->?': numbers.int_eq_impl,
402
- 'LL->?': numbers.int_eq_impl,
403
- 'qq->?': numbers.int_eq_impl,
404
- 'QQ->?': numbers.int_eq_impl,
405
- 'ff->?': numbers.real_eq_impl,
406
- 'dd->?': numbers.real_eq_impl,
407
- 'FF->?': npyfuncs.np_complex_eq_impl,
408
- 'DD->?': npyfuncs.np_complex_eq_impl,
411
+ "??->?": numbers.int_eq_impl,
412
+ "bb->?": numbers.int_eq_impl,
413
+ "BB->?": numbers.int_eq_impl,
414
+ "hh->?": numbers.int_eq_impl,
415
+ "HH->?": numbers.int_eq_impl,
416
+ "ii->?": numbers.int_eq_impl,
417
+ "II->?": numbers.int_eq_impl,
418
+ "ll->?": numbers.int_eq_impl,
419
+ "LL->?": numbers.int_eq_impl,
420
+ "qq->?": numbers.int_eq_impl,
421
+ "QQ->?": numbers.int_eq_impl,
422
+ "ff->?": numbers.real_eq_impl,
423
+ "dd->?": numbers.real_eq_impl,
424
+ "FF->?": npyfuncs.np_complex_eq_impl,
425
+ "DD->?": npyfuncs.np_complex_eq_impl,
409
426
  }
410
427
  if numpy_version >= (1, 25):
411
- db[np.equal].update({
412
- 'qQ->?': numbers.int_signed_unsigned_cmp('=='),
413
- 'Qq->?': numbers.int_unsigned_signed_cmp('==')})
428
+ db[np.equal].update(
429
+ {
430
+ "qQ->?": numbers.int_signed_unsigned_cmp("=="),
431
+ "Qq->?": numbers.int_unsigned_signed_cmp("=="),
432
+ }
433
+ )
414
434
 
415
435
  db[np.logical_and] = {
416
- '??->?': npyfuncs.np_logical_and_impl,
417
- 'bb->?': npyfuncs.np_logical_and_impl,
418
- 'BB->?': npyfuncs.np_logical_and_impl,
419
- 'hh->?': npyfuncs.np_logical_and_impl,
420
- 'HH->?': npyfuncs.np_logical_and_impl,
421
- 'ii->?': npyfuncs.np_logical_and_impl,
422
- 'II->?': npyfuncs.np_logical_and_impl,
423
- 'll->?': npyfuncs.np_logical_and_impl,
424
- 'LL->?': npyfuncs.np_logical_and_impl,
425
- 'qq->?': npyfuncs.np_logical_and_impl,
426
- 'QQ->?': npyfuncs.np_logical_and_impl,
427
- 'ff->?': npyfuncs.np_logical_and_impl,
428
- 'dd->?': npyfuncs.np_logical_and_impl,
429
- 'FF->?': npyfuncs.np_complex_logical_and_impl,
430
- 'DD->?': npyfuncs.np_complex_logical_and_impl,
436
+ "??->?": npyfuncs.np_logical_and_impl,
437
+ "bb->?": npyfuncs.np_logical_and_impl,
438
+ "BB->?": npyfuncs.np_logical_and_impl,
439
+ "hh->?": npyfuncs.np_logical_and_impl,
440
+ "HH->?": npyfuncs.np_logical_and_impl,
441
+ "ii->?": npyfuncs.np_logical_and_impl,
442
+ "II->?": npyfuncs.np_logical_and_impl,
443
+ "ll->?": npyfuncs.np_logical_and_impl,
444
+ "LL->?": npyfuncs.np_logical_and_impl,
445
+ "qq->?": npyfuncs.np_logical_and_impl,
446
+ "QQ->?": npyfuncs.np_logical_and_impl,
447
+ "ff->?": npyfuncs.np_logical_and_impl,
448
+ "dd->?": npyfuncs.np_logical_and_impl,
449
+ "FF->?": npyfuncs.np_complex_logical_and_impl,
450
+ "DD->?": npyfuncs.np_complex_logical_and_impl,
431
451
  }
432
452
 
433
453
  db[np.logical_or] = {
434
- '??->?': npyfuncs.np_logical_or_impl,
435
- 'bb->?': npyfuncs.np_logical_or_impl,
436
- 'BB->?': npyfuncs.np_logical_or_impl,
437
- 'hh->?': npyfuncs.np_logical_or_impl,
438
- 'HH->?': npyfuncs.np_logical_or_impl,
439
- 'ii->?': npyfuncs.np_logical_or_impl,
440
- 'II->?': npyfuncs.np_logical_or_impl,
441
- 'll->?': npyfuncs.np_logical_or_impl,
442
- 'LL->?': npyfuncs.np_logical_or_impl,
443
- 'qq->?': npyfuncs.np_logical_or_impl,
444
- 'QQ->?': npyfuncs.np_logical_or_impl,
445
- 'ff->?': npyfuncs.np_logical_or_impl,
446
- 'dd->?': npyfuncs.np_logical_or_impl,
447
- 'FF->?': npyfuncs.np_complex_logical_or_impl,
448
- 'DD->?': npyfuncs.np_complex_logical_or_impl,
454
+ "??->?": npyfuncs.np_logical_or_impl,
455
+ "bb->?": npyfuncs.np_logical_or_impl,
456
+ "BB->?": npyfuncs.np_logical_or_impl,
457
+ "hh->?": npyfuncs.np_logical_or_impl,
458
+ "HH->?": npyfuncs.np_logical_or_impl,
459
+ "ii->?": npyfuncs.np_logical_or_impl,
460
+ "II->?": npyfuncs.np_logical_or_impl,
461
+ "ll->?": npyfuncs.np_logical_or_impl,
462
+ "LL->?": npyfuncs.np_logical_or_impl,
463
+ "qq->?": npyfuncs.np_logical_or_impl,
464
+ "QQ->?": npyfuncs.np_logical_or_impl,
465
+ "ff->?": npyfuncs.np_logical_or_impl,
466
+ "dd->?": npyfuncs.np_logical_or_impl,
467
+ "FF->?": npyfuncs.np_complex_logical_or_impl,
468
+ "DD->?": npyfuncs.np_complex_logical_or_impl,
449
469
  }
450
470
 
451
471
  db[np.logical_xor] = {
452
- '??->?': npyfuncs.np_logical_xor_impl,
453
- 'bb->?': npyfuncs.np_logical_xor_impl,
454
- 'BB->?': npyfuncs.np_logical_xor_impl,
455
- 'hh->?': npyfuncs.np_logical_xor_impl,
456
- 'HH->?': npyfuncs.np_logical_xor_impl,
457
- 'ii->?': npyfuncs.np_logical_xor_impl,
458
- 'II->?': npyfuncs.np_logical_xor_impl,
459
- 'll->?': npyfuncs.np_logical_xor_impl,
460
- 'LL->?': npyfuncs.np_logical_xor_impl,
461
- 'qq->?': npyfuncs.np_logical_xor_impl,
462
- 'QQ->?': npyfuncs.np_logical_xor_impl,
463
- 'ff->?': npyfuncs.np_logical_xor_impl,
464
- 'dd->?': npyfuncs.np_logical_xor_impl,
465
- 'FF->?': npyfuncs.np_complex_logical_xor_impl,
466
- 'DD->?': npyfuncs.np_complex_logical_xor_impl,
472
+ "??->?": npyfuncs.np_logical_xor_impl,
473
+ "bb->?": npyfuncs.np_logical_xor_impl,
474
+ "BB->?": npyfuncs.np_logical_xor_impl,
475
+ "hh->?": npyfuncs.np_logical_xor_impl,
476
+ "HH->?": npyfuncs.np_logical_xor_impl,
477
+ "ii->?": npyfuncs.np_logical_xor_impl,
478
+ "II->?": npyfuncs.np_logical_xor_impl,
479
+ "ll->?": npyfuncs.np_logical_xor_impl,
480
+ "LL->?": npyfuncs.np_logical_xor_impl,
481
+ "qq->?": npyfuncs.np_logical_xor_impl,
482
+ "QQ->?": npyfuncs.np_logical_xor_impl,
483
+ "ff->?": npyfuncs.np_logical_xor_impl,
484
+ "dd->?": npyfuncs.np_logical_xor_impl,
485
+ "FF->?": npyfuncs.np_complex_logical_xor_impl,
486
+ "DD->?": npyfuncs.np_complex_logical_xor_impl,
467
487
  }
468
488
 
469
489
  db[np.logical_not] = {
470
- '?->?': npyfuncs.np_logical_not_impl,
471
- 'b->?': npyfuncs.np_logical_not_impl,
472
- 'B->?': npyfuncs.np_logical_not_impl,
473
- 'h->?': npyfuncs.np_logical_not_impl,
474
- 'H->?': npyfuncs.np_logical_not_impl,
475
- 'i->?': npyfuncs.np_logical_not_impl,
476
- 'I->?': npyfuncs.np_logical_not_impl,
477
- 'l->?': npyfuncs.np_logical_not_impl,
478
- 'L->?': npyfuncs.np_logical_not_impl,
479
- 'q->?': npyfuncs.np_logical_not_impl,
480
- 'Q->?': npyfuncs.np_logical_not_impl,
481
- 'f->?': npyfuncs.np_logical_not_impl,
482
- 'd->?': npyfuncs.np_logical_not_impl,
483
- 'F->?': npyfuncs.np_complex_logical_not_impl,
484
- 'D->?': npyfuncs.np_complex_logical_not_impl,
490
+ "?->?": npyfuncs.np_logical_not_impl,
491
+ "b->?": npyfuncs.np_logical_not_impl,
492
+ "B->?": npyfuncs.np_logical_not_impl,
493
+ "h->?": npyfuncs.np_logical_not_impl,
494
+ "H->?": npyfuncs.np_logical_not_impl,
495
+ "i->?": npyfuncs.np_logical_not_impl,
496
+ "I->?": npyfuncs.np_logical_not_impl,
497
+ "l->?": npyfuncs.np_logical_not_impl,
498
+ "L->?": npyfuncs.np_logical_not_impl,
499
+ "q->?": npyfuncs.np_logical_not_impl,
500
+ "Q->?": npyfuncs.np_logical_not_impl,
501
+ "f->?": npyfuncs.np_logical_not_impl,
502
+ "d->?": npyfuncs.np_logical_not_impl,
503
+ "F->?": npyfuncs.np_complex_logical_not_impl,
504
+ "D->?": npyfuncs.np_complex_logical_not_impl,
485
505
  }
486
506
 
487
507
  db[np.maximum] = {
488
- '??->?': npyfuncs.np_logical_or_impl,
489
- 'bb->b': npyfuncs.np_int_smax_impl,
490
- 'BB->B': npyfuncs.np_int_umax_impl,
491
- 'hh->h': npyfuncs.np_int_smax_impl,
492
- 'HH->H': npyfuncs.np_int_umax_impl,
493
- 'ii->i': npyfuncs.np_int_smax_impl,
494
- 'II->I': npyfuncs.np_int_umax_impl,
495
- 'll->l': npyfuncs.np_int_smax_impl,
496
- 'LL->L': npyfuncs.np_int_umax_impl,
497
- 'qq->q': npyfuncs.np_int_smax_impl,
498
- 'QQ->Q': npyfuncs.np_int_umax_impl,
499
- 'ff->f': npyfuncs.np_real_maximum_impl,
500
- 'dd->d': npyfuncs.np_real_maximum_impl,
501
- 'FF->F': npyfuncs.np_complex_maximum_impl,
502
- 'DD->D': npyfuncs.np_complex_maximum_impl,
508
+ "??->?": npyfuncs.np_logical_or_impl,
509
+ "bb->b": npyfuncs.np_int_smax_impl,
510
+ "BB->B": npyfuncs.np_int_umax_impl,
511
+ "hh->h": npyfuncs.np_int_smax_impl,
512
+ "HH->H": npyfuncs.np_int_umax_impl,
513
+ "ii->i": npyfuncs.np_int_smax_impl,
514
+ "II->I": npyfuncs.np_int_umax_impl,
515
+ "ll->l": npyfuncs.np_int_smax_impl,
516
+ "LL->L": npyfuncs.np_int_umax_impl,
517
+ "qq->q": npyfuncs.np_int_smax_impl,
518
+ "QQ->Q": npyfuncs.np_int_umax_impl,
519
+ "ff->f": npyfuncs.np_real_maximum_impl,
520
+ "dd->d": npyfuncs.np_real_maximum_impl,
521
+ "FF->F": npyfuncs.np_complex_maximum_impl,
522
+ "DD->D": npyfuncs.np_complex_maximum_impl,
503
523
  }
504
524
 
505
525
  db[np.minimum] = {
506
- '??->?': npyfuncs.np_logical_and_impl,
507
- 'bb->b': npyfuncs.np_int_smin_impl,
508
- 'BB->B': npyfuncs.np_int_umin_impl,
509
- 'hh->h': npyfuncs.np_int_smin_impl,
510
- 'HH->H': npyfuncs.np_int_umin_impl,
511
- 'ii->i': npyfuncs.np_int_smin_impl,
512
- 'II->I': npyfuncs.np_int_umin_impl,
513
- 'll->l': npyfuncs.np_int_smin_impl,
514
- 'LL->L': npyfuncs.np_int_umin_impl,
515
- 'qq->q': npyfuncs.np_int_smin_impl,
516
- 'QQ->Q': npyfuncs.np_int_umin_impl,
517
- 'ff->f': npyfuncs.np_real_minimum_impl,
518
- 'dd->d': npyfuncs.np_real_minimum_impl,
519
- 'FF->F': npyfuncs.np_complex_minimum_impl,
520
- 'DD->D': npyfuncs.np_complex_minimum_impl,
526
+ "??->?": npyfuncs.np_logical_and_impl,
527
+ "bb->b": npyfuncs.np_int_smin_impl,
528
+ "BB->B": npyfuncs.np_int_umin_impl,
529
+ "hh->h": npyfuncs.np_int_smin_impl,
530
+ "HH->H": npyfuncs.np_int_umin_impl,
531
+ "ii->i": npyfuncs.np_int_smin_impl,
532
+ "II->I": npyfuncs.np_int_umin_impl,
533
+ "ll->l": npyfuncs.np_int_smin_impl,
534
+ "LL->L": npyfuncs.np_int_umin_impl,
535
+ "qq->q": npyfuncs.np_int_smin_impl,
536
+ "QQ->Q": npyfuncs.np_int_umin_impl,
537
+ "ff->f": npyfuncs.np_real_minimum_impl,
538
+ "dd->d": npyfuncs.np_real_minimum_impl,
539
+ "FF->F": npyfuncs.np_complex_minimum_impl,
540
+ "DD->D": npyfuncs.np_complex_minimum_impl,
521
541
  }
522
542
 
523
543
  db[np.fmax] = {
524
- '??->?': npyfuncs.np_logical_or_impl,
525
- 'bb->b': npyfuncs.np_int_smax_impl,
526
- 'BB->B': npyfuncs.np_int_umax_impl,
527
- 'hh->h': npyfuncs.np_int_smax_impl,
528
- 'HH->H': npyfuncs.np_int_umax_impl,
529
- 'ii->i': npyfuncs.np_int_smax_impl,
530
- 'II->I': npyfuncs.np_int_umax_impl,
531
- 'll->l': npyfuncs.np_int_smax_impl,
532
- 'LL->L': npyfuncs.np_int_umax_impl,
533
- 'qq->q': npyfuncs.np_int_smax_impl,
534
- 'QQ->Q': npyfuncs.np_int_umax_impl,
535
- 'ff->f': npyfuncs.np_real_fmax_impl,
536
- 'dd->d': npyfuncs.np_real_fmax_impl,
537
- 'FF->F': npyfuncs.np_complex_fmax_impl,
538
- 'DD->D': npyfuncs.np_complex_fmax_impl,
544
+ "??->?": npyfuncs.np_logical_or_impl,
545
+ "bb->b": npyfuncs.np_int_smax_impl,
546
+ "BB->B": npyfuncs.np_int_umax_impl,
547
+ "hh->h": npyfuncs.np_int_smax_impl,
548
+ "HH->H": npyfuncs.np_int_umax_impl,
549
+ "ii->i": npyfuncs.np_int_smax_impl,
550
+ "II->I": npyfuncs.np_int_umax_impl,
551
+ "ll->l": npyfuncs.np_int_smax_impl,
552
+ "LL->L": npyfuncs.np_int_umax_impl,
553
+ "qq->q": npyfuncs.np_int_smax_impl,
554
+ "QQ->Q": npyfuncs.np_int_umax_impl,
555
+ "ff->f": npyfuncs.np_real_fmax_impl,
556
+ "dd->d": npyfuncs.np_real_fmax_impl,
557
+ "FF->F": npyfuncs.np_complex_fmax_impl,
558
+ "DD->D": npyfuncs.np_complex_fmax_impl,
539
559
  }
540
560
 
541
561
  db[np.fmin] = {
542
- '??->?': npyfuncs.np_logical_and_impl,
543
- 'bb->b': npyfuncs.np_int_smin_impl,
544
- 'BB->B': npyfuncs.np_int_umin_impl,
545
- 'hh->h': npyfuncs.np_int_smin_impl,
546
- 'HH->H': npyfuncs.np_int_umin_impl,
547
- 'ii->i': npyfuncs.np_int_smin_impl,
548
- 'II->I': npyfuncs.np_int_umin_impl,
549
- 'll->l': npyfuncs.np_int_smin_impl,
550
- 'LL->L': npyfuncs.np_int_umin_impl,
551
- 'qq->q': npyfuncs.np_int_smin_impl,
552
- 'QQ->Q': npyfuncs.np_int_umin_impl,
553
- 'ff->f': npyfuncs.np_real_fmin_impl,
554
- 'dd->d': npyfuncs.np_real_fmin_impl,
555
- 'FF->F': npyfuncs.np_complex_fmin_impl,
556
- 'DD->D': npyfuncs.np_complex_fmin_impl,
562
+ "??->?": npyfuncs.np_logical_and_impl,
563
+ "bb->b": npyfuncs.np_int_smin_impl,
564
+ "BB->B": npyfuncs.np_int_umin_impl,
565
+ "hh->h": npyfuncs.np_int_smin_impl,
566
+ "HH->H": npyfuncs.np_int_umin_impl,
567
+ "ii->i": npyfuncs.np_int_smin_impl,
568
+ "II->I": npyfuncs.np_int_umin_impl,
569
+ "ll->l": npyfuncs.np_int_smin_impl,
570
+ "LL->L": npyfuncs.np_int_umin_impl,
571
+ "qq->q": npyfuncs.np_int_smin_impl,
572
+ "QQ->Q": npyfuncs.np_int_umin_impl,
573
+ "ff->f": npyfuncs.np_real_fmin_impl,
574
+ "dd->d": npyfuncs.np_real_fmin_impl,
575
+ "FF->F": npyfuncs.np_complex_fmin_impl,
576
+ "DD->D": npyfuncs.np_complex_fmin_impl,
557
577
  }
558
578
 
559
579
  db[np.bitwise_and] = {
560
- '??->?': numbers.int_and_impl,
561
- 'bb->b': numbers.int_and_impl,
562
- 'BB->B': numbers.int_and_impl,
563
- 'hh->h': numbers.int_and_impl,
564
- 'HH->H': numbers.int_and_impl,
565
- 'ii->i': numbers.int_and_impl,
566
- 'II->I': numbers.int_and_impl,
567
- 'll->l': numbers.int_and_impl,
568
- 'LL->L': numbers.int_and_impl,
569
- 'qq->q': numbers.int_and_impl,
570
- 'QQ->Q': numbers.int_and_impl,
580
+ "??->?": numbers.int_and_impl,
581
+ "bb->b": numbers.int_and_impl,
582
+ "BB->B": numbers.int_and_impl,
583
+ "hh->h": numbers.int_and_impl,
584
+ "HH->H": numbers.int_and_impl,
585
+ "ii->i": numbers.int_and_impl,
586
+ "II->I": numbers.int_and_impl,
587
+ "ll->l": numbers.int_and_impl,
588
+ "LL->L": numbers.int_and_impl,
589
+ "qq->q": numbers.int_and_impl,
590
+ "QQ->Q": numbers.int_and_impl,
571
591
  }
572
592
 
573
593
  db[np.bitwise_or] = {
574
- '??->?': numbers.int_or_impl,
575
- 'bb->b': numbers.int_or_impl,
576
- 'BB->B': numbers.int_or_impl,
577
- 'hh->h': numbers.int_or_impl,
578
- 'HH->H': numbers.int_or_impl,
579
- 'ii->i': numbers.int_or_impl,
580
- 'II->I': numbers.int_or_impl,
581
- 'll->l': numbers.int_or_impl,
582
- 'LL->L': numbers.int_or_impl,
583
- 'qq->q': numbers.int_or_impl,
584
- 'QQ->Q': numbers.int_or_impl,
594
+ "??->?": numbers.int_or_impl,
595
+ "bb->b": numbers.int_or_impl,
596
+ "BB->B": numbers.int_or_impl,
597
+ "hh->h": numbers.int_or_impl,
598
+ "HH->H": numbers.int_or_impl,
599
+ "ii->i": numbers.int_or_impl,
600
+ "II->I": numbers.int_or_impl,
601
+ "ll->l": numbers.int_or_impl,
602
+ "LL->L": numbers.int_or_impl,
603
+ "qq->q": numbers.int_or_impl,
604
+ "QQ->Q": numbers.int_or_impl,
585
605
  }
586
606
 
587
607
  db[np.bitwise_xor] = {
588
- '??->?': numbers.int_xor_impl,
589
- 'bb->b': numbers.int_xor_impl,
590
- 'BB->B': numbers.int_xor_impl,
591
- 'hh->h': numbers.int_xor_impl,
592
- 'HH->H': numbers.int_xor_impl,
593
- 'ii->i': numbers.int_xor_impl,
594
- 'II->I': numbers.int_xor_impl,
595
- 'll->l': numbers.int_xor_impl,
596
- 'LL->L': numbers.int_xor_impl,
597
- 'qq->q': numbers.int_xor_impl,
598
- 'QQ->Q': numbers.int_xor_impl,
608
+ "??->?": numbers.int_xor_impl,
609
+ "bb->b": numbers.int_xor_impl,
610
+ "BB->B": numbers.int_xor_impl,
611
+ "hh->h": numbers.int_xor_impl,
612
+ "HH->H": numbers.int_xor_impl,
613
+ "ii->i": numbers.int_xor_impl,
614
+ "II->I": numbers.int_xor_impl,
615
+ "ll->l": numbers.int_xor_impl,
616
+ "LL->L": numbers.int_xor_impl,
617
+ "qq->q": numbers.int_xor_impl,
618
+ "QQ->Q": numbers.int_xor_impl,
599
619
  }
600
620
 
601
621
  db[np.invert] = {
602
- '?->?': numbers.int_invert_impl,
603
- 'b->b': numbers.int_invert_impl,
604
- 'B->B': numbers.int_invert_impl,
605
- 'h->h': numbers.int_invert_impl,
606
- 'H->H': numbers.int_invert_impl,
607
- 'i->i': numbers.int_invert_impl,
608
- 'I->I': numbers.int_invert_impl,
609
- 'l->l': numbers.int_invert_impl,
610
- 'L->L': numbers.int_invert_impl,
611
- 'q->q': numbers.int_invert_impl,
612
- 'Q->Q': numbers.int_invert_impl,
622
+ "?->?": numbers.int_invert_impl,
623
+ "b->b": numbers.int_invert_impl,
624
+ "B->B": numbers.int_invert_impl,
625
+ "h->h": numbers.int_invert_impl,
626
+ "H->H": numbers.int_invert_impl,
627
+ "i->i": numbers.int_invert_impl,
628
+ "I->I": numbers.int_invert_impl,
629
+ "l->l": numbers.int_invert_impl,
630
+ "L->L": numbers.int_invert_impl,
631
+ "q->q": numbers.int_invert_impl,
632
+ "Q->Q": numbers.int_invert_impl,
613
633
  }
614
634
 
615
635
  db[np.left_shift] = {
616
- 'bb->b': numbers.int_shl_impl,
617
- 'BB->B': numbers.int_shl_impl,
618
- 'hh->h': numbers.int_shl_impl,
619
- 'HH->H': numbers.int_shl_impl,
620
- 'ii->i': numbers.int_shl_impl,
621
- 'II->I': numbers.int_shl_impl,
622
- 'll->l': numbers.int_shl_impl,
623
- 'LL->L': numbers.int_shl_impl,
624
- 'qq->q': numbers.int_shl_impl,
625
- 'QQ->Q': numbers.int_shl_impl,
636
+ "bb->b": numbers.int_shl_impl,
637
+ "BB->B": numbers.int_shl_impl,
638
+ "hh->h": numbers.int_shl_impl,
639
+ "HH->H": numbers.int_shl_impl,
640
+ "ii->i": numbers.int_shl_impl,
641
+ "II->I": numbers.int_shl_impl,
642
+ "ll->l": numbers.int_shl_impl,
643
+ "LL->L": numbers.int_shl_impl,
644
+ "qq->q": numbers.int_shl_impl,
645
+ "QQ->Q": numbers.int_shl_impl,
626
646
  }
627
647
 
628
648
  db[np.right_shift] = {
629
- 'bb->b': numbers.int_shr_impl,
630
- 'BB->B': numbers.int_shr_impl,
631
- 'hh->h': numbers.int_shr_impl,
632
- 'HH->H': numbers.int_shr_impl,
633
- 'ii->i': numbers.int_shr_impl,
634
- 'II->I': numbers.int_shr_impl,
635
- 'll->l': numbers.int_shr_impl,
636
- 'LL->L': numbers.int_shr_impl,
637
- 'qq->q': numbers.int_shr_impl,
638
- 'QQ->Q': numbers.int_shr_impl,
649
+ "bb->b": numbers.int_shr_impl,
650
+ "BB->B": numbers.int_shr_impl,
651
+ "hh->h": numbers.int_shr_impl,
652
+ "HH->H": numbers.int_shr_impl,
653
+ "ii->i": numbers.int_shr_impl,
654
+ "II->I": numbers.int_shr_impl,
655
+ "ll->l": numbers.int_shr_impl,
656
+ "LL->L": numbers.int_shr_impl,
657
+ "qq->q": numbers.int_shr_impl,
658
+ "QQ->Q": numbers.int_shr_impl,
639
659
  }
640
660
 
641
661
  db[np.log] = {
642
- 'f->f': np_real_log_impl,
643
- 'd->d': np_real_log_impl,
644
- 'F->F': npyfuncs.np_complex_log_impl,
645
- 'D->D': npyfuncs.np_complex_log_impl,
662
+ "f->f": np_real_log_impl,
663
+ "d->d": np_real_log_impl,
664
+ "F->F": npyfuncs.np_complex_log_impl,
665
+ "D->D": npyfuncs.np_complex_log_impl,
646
666
  }
647
667
 
648
668
  db[np.log2] = {
649
- 'f->f': np_real_log2_impl,
650
- 'd->d': np_real_log2_impl,
651
- 'F->F': npyfuncs.np_complex_log2_impl,
652
- 'D->D': npyfuncs.np_complex_log2_impl,
669
+ "f->f": np_real_log2_impl,
670
+ "d->d": np_real_log2_impl,
671
+ "F->F": npyfuncs.np_complex_log2_impl,
672
+ "D->D": npyfuncs.np_complex_log2_impl,
653
673
  }
654
674
 
655
675
  db[np.log10] = {
656
- 'f->f': np_real_log10_impl,
657
- 'd->d': np_real_log10_impl,
658
- 'F->F': npyfuncs.np_complex_log10_impl,
659
- 'D->D': npyfuncs.np_complex_log10_impl,
676
+ "f->f": np_real_log10_impl,
677
+ "d->d": np_real_log10_impl,
678
+ "F->F": npyfuncs.np_complex_log10_impl,
679
+ "D->D": npyfuncs.np_complex_log10_impl,
660
680
  }
661
681
 
662
682
  return db