From 1495b54458d13e77f6a5adb76889cead67642d9b Mon Sep 17 00:00:00 2001 From: syurkevi Date: Tue, 5 Jul 2016 18:05:22 -0400 Subject: [PATCH] initial v34 api additions to python wrapper --- arrayfire/algorithm.py | 57 ++++++++++++++++++++++++++++++++++++++++++ arrayfire/image.py | 22 ++++++++++++++++ arrayfire/library.py | 19 ++++++++++++++ arrayfire/signal.py | 12 +++++++++ 4 files changed, 110 insertions(+) diff --git a/arrayfire/algorithm.py b/arrayfire/algorithm.py index 6701d96a8..50c9b618d 100644 --- a/arrayfire/algorithm.py +++ b/arrayfire/algorithm.py @@ -299,6 +299,63 @@ def accum(a, dim=0): """ return _parallel_dim(a, dim, backend.get().af_accum) +def scan(a, dim=0, op=BINARYOP.BINARY_ADD, inclusive_scan=True): + """ + Generalized scan of an array. + + Parameters + ---------- + a : af.Array + Multi dimensional arrayfire array. + + dim : optional: int. default: 0 + Dimension along which the scan is performed. + + op : optional: af.BINARYOP. default: af.BINARYOP.BINARY_ADD. + - Interpolation method used for resizing. + + inclusive_scan: optional: bool. default: True + Specifies if the scan is inclusive + + Returns + --------- + out : af.Array + - will contain scan of input. + """ + out = Array() + safe_call(backend.get().af_scan(ct.pointer(out.arr), a.arr, dim, op, inclusive_scan)) + return out + +def scan_by_key(key, a, dim=0, op=BINARYOP.BINARY_ADD, inclusive_scan=True): + """ + Generalized scan by key of an array. + + Parameters + ---------- + key : af.Array + key array. + + a : af.Array + Multi dimensional arrayfire array. + + dim : optional: int. default: 0 + Dimension along which the scan is performed. + + op : optional: af.BINARYOP. default: af.BINARYOP.BINARY_ADD. + - Interpolation method used for resizing. + + inclusive_scan: optional: bool. default: True + Specifies if the scan is inclusive + + Returns + --------- + out : af.Array + - will contain scan of input. + """ + out = Array() + safe_call(backend.get().af_scan_by_key(ct.pointer(out.arr), key.arr, a.arr, dim, op, inclusive_scan)) + return out + def where(a): """ Find the indices of non zero elements diff --git a/arrayfire/image.py b/arrayfire/image.py index ac4b8ed19..94a424a21 100644 --- a/arrayfire/image.py +++ b/arrayfire/image.py @@ -1198,6 +1198,28 @@ def rgb2ycbcr(image, standard=YCC_STD.BT_601): safe_call(backend.get().af_rgb2ycbcr(ct.pointer(out.arr), image.arr, standard.value)) return out +def moments(image, moment = MOMENT.MOMENT_FIRST_ORDER): + """ + Calculate image moments. + + Parameters + ---------- + image : af.Array + - A 2 D arrayfire array representing an image, or + - A multi dimensional array representing batch of images. + + moment : optional: af.MOMENT. default: af.MOMENT.MOMENT_FIRST_ORDER. + - Moment(s) to calculate + + Returns + --------- + out : af.Array + - array containing requested moment(s) of each image + """ + output = Array() + safe_call(backend.get().af_moments(ct.pointer(output.arr), image.arr, moment.value)) + return output + def is_image_io_available(): """ Function to check if the arrayfire library was built with Image IO support. diff --git a/arrayfire/library.py b/arrayfire/library.py index ff09f051d..79aa82343 100644 --- a/arrayfire/library.py +++ b/arrayfire/library.py @@ -349,6 +349,25 @@ class MARKER(_Enum): PLUS = _Enum_Type(6) STAR = _Enum_Type(7) +class MOMENT(_Enum): + """ + Image Moments + """ + MOMENT_M00 = _Enum_Type(1) + MOMENT_M01 = _Enum_Type(2) + MOMENT_M10 = _Enum_Type(4) + MOMENT_M11 = _Enum_Type(8) + MOMENT_FIRST_ORDER = _Enum_Type(15) + +class BINARYOP(_Enum): + """ + Binary Operators + """ + BINARY_ADD = _Enum_Type(0) + BINARY_MUL = _Enum_Type(1) + BINARY_MIN = _Enum_Type(2) + BINARY_MAX = _Enum_Type(3) + def _setup(): import platform import os diff --git a/arrayfire/signal.py b/arrayfire/signal.py index fe377ed1c..78f2c6f2a 100644 --- a/arrayfire/signal.py +++ b/arrayfire/signal.py @@ -1264,3 +1264,15 @@ def iir(B, A, X): Y = Array() safe_call(backend.get().af_iir(ct.pointer(Y.arr), B.arr, A.arr, X.arr)) return Y + +def set_fft_plan_cache_size(cache_size): + """ + Sets plan cache size. + + Parameters + ---------- + + cache_size : scalar + the number of plans that shall be cached + """ + safe_call(backend.get().af_set_fft_plan_cache_size(ct.c_size_t(cache_size)))