13 KiB
Compatibility
Supported operations
Here are the operations you can use inside the function you are compiling.
{% hint style="info" %} Some of these operations are not supported between two encrypted values. A detailed error will be raised if you try to do something that is not supported. {% endhint %}
Supported Python operators.
- __abs__
- __add__
- __and__
- __eq__
- __floordiv__
- __ge__
- __getitem__
- __gt__
- __invert__
- __le__
- __lshift__
- __lt__
- __matmul__
- __mod__
- __mul__
- __ne__
- __neg__
- __or__
- __pos__
- __pow__
- __radd__
- __rand__
- __rfloordiv__
- __rlshift__
- __rmatmul__
- __rmod__
- __rmul__
- __ror__
- __round__
- __rpow__
- __rrshift__
- __rshift__
- __rsub__
- __rtruediv__
- __rxor__
- __sub__
- __truediv__
- __xor__
Supported NumPy functions.
- np.absolute
- np.add
- np.arccos
- np.arccosh
- np.arcsin
- np.arcsinh
- np.arctan
- np.arctan2
- np.arctanh
- np.around
- np.bitwise_and
- np.bitwise_or
- np.bitwise_xor
- np.broadcast_to
- np.cbrt
- np.ceil
- np.clip
- np.concatenate
- np.copysign
- np.cos
- np.cosh
- np.deg2rad
- np.degrees
- np.dot
- np.equal
- np.exp
- np.exp2
- np.expand_dims
- np.expm1
- np.fabs
- np.float_power
- np.floor
- np.floor_divide
- np.fmax
- np.fmin
- np.fmod
- np.gcd
- np.greater
- np.greater_equal
- np.heaviside
- np.hypot
- np.invert
- np.isfinite
- np.isinf
- np.isnan
- np.lcm
- np.ldexp
- np.left_shift
- np.less
- np.less_equal
- np.log
- np.log10
- np.log1p
- np.log2
- np.logaddexp
- np.logaddexp2
- np.logical_and
- np.logical_not
- np.logical_or
- np.logical_xor
- np.matmul
- np.maximum
- np.minimum
- np.multiply
- np.negative
- np.nextafter
- np.not_equal
- np.ones_like
- np.positive
- np.power
- np.rad2deg
- np.radians
- np.reciprocal
- np.remainder
- np.reshape
- np.right_shift
- np.rint
- np.round_
- np.sign
- np.signbit
- np.sin
- np.sinh
- np.spacing
- np.sqrt
- np.square
- np.subtract
- np.sum
- np.tan
- np.tanh
- np.transpose
- np.true_divide
- np.trunc
- np.where
- np.zeros_like
Supported ndarray methods.
- np.ndarray.astype
- np.ndarray.clip
- np.ndarray.dot
- np.ndarray.flatten
- np.ndarray.reshape
- np.ndarray.transpose
Supported ndarray properties.
Limitations
Control flow constraints.
Some Python control flow statements are not supported. For example, you cannot have an if statement or a while statement for which the condition depends on an encrypted value. However, such statements are supported with constant values (e.g., for i in range(SOME_CONSTANT), if os.environ.get("SOME_FEATURE") == "ON":).
Type constraints.
Another constraint is that you cannot have floating-point inputs or floating-point outputs. You can have floating-point intermediate values as long as they can be converted to an integer Table Lookup (e.g., (60 * np.sin(x)).astype(np.int64)).
Bit width constraints.
There is a limit on the bit width of encrypted values. We are constantly working on increasing this bit width. If you go above the limit, you will get an error.