From 1245027800bf39a45fc81583bf3c747b809e5f51 Mon Sep 17 00:00:00 2001 From: raphaelDkhn Date: Wed, 25 Oct 2023 11:01:10 +0300 Subject: [PATCH] add AND in fp16x16w and fp8x23w + missing doc --- docs/SUMMARY.md | 1 + docs/framework/compatibility.md | 115 +++++++++--------- src/numbers.cairo | 8 ++ .../fp16x16wide/math/comp.cairo | 9 ++ .../fp8x23wide/math/comp.cairo | 9 ++ .../implementations/tensor_fp16x16wide.cairo | 4 + .../implementations/tensor_fp8x23wide.cairo | 4 + 7 files changed, 93 insertions(+), 57 deletions(-) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index cc8fe91b1..f1543c5c6 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -88,6 +88,7 @@ * [tensor.sign](framework/operators/tensor/tensor.sign.md) * [tensor.clip](framework/operators/tensor/tensor.clip.md) * [tensor.identity](framework/operators/tensor/tensor.identity.md) + * [tensor.and](framework/operators/tensor/tensor.and.md) * [Neural Network](framework/operators/neural-network/README.md) * [nn.relu](framework/operators/neural-network/nn.relu.md) * [nn.leaky\_relu](framework/operators/neural-network/nn.leaky\_relu.md) diff --git a/docs/framework/compatibility.md b/docs/framework/compatibility.md index 35e2daf55..c2d49c2be 100644 --- a/docs/framework/compatibility.md +++ b/docs/framework/compatibility.md @@ -4,62 +4,63 @@ To see the full list of available ONNX Operators refer to [this table](https://g You can see below the list of current supported ONNX Operators: -| Operator | Implemented | -| :-------------------------------------------------------------: | :------------------: | -| [MatMul](operators/tensor/tensor.matmul.md) | :white\_check\_mark: | -| [MatMulInteger](operators/tensor/tensor.matmul.md) | :white\_check\_mark: | -| [Add](operators/tensor/#arithmetic-operations) | :white\_check\_mark: | -| [Sub](operators/tensor/#arithmetic-operations) | :white\_check\_mark: | -| [Mul](operators/tensor/#arithmetic-operations) | :white\_check\_mark: | -| [Div](operators/tensor/#arithmetic-operations) | :white\_check\_mark: | -| [Equal](operators/tensor/tensor.equal.md) | :white\_check\_mark: | -| [Greater](operators/tensor/tensor.greater.md) | :white\_check\_mark: | -| [GreaterOrEqual](operators/tensor/tensor.greater\_equal.md) | :white\_check\_mark: | -| [Less](operators/tensor/tensor.less.md) | :white\_check\_mark: | -| [LessOrEqual](operators/tensor/tensor.less\_equal.md) | :white\_check\_mark: | -| [Abs](operators/tensor/tensor.abs.md) | :white\_check\_mark: | -| [Neg](operators/tensor/tensor.neg.md) | :white\_check\_mark: | -| [Ceil](operators/tensor/tensor.ceil.md) | :white\_check\_mark: | -| [Exp](operators/tensor/tensor.exp.md) | :white\_check\_mark: | -| [Ln](operators/tensor/tensor.log.md) | :white\_check\_mark: | -| [Reshape](operators/tensor/tensor.reshape.md) | :white\_check\_mark: | -| [Transpose](operators/tensor/tensor.transpose.md) | :white\_check\_mark: | -| [ArgMax](operators/tensor/tensor.argmax.md) | :white\_check\_mark: | -| [ArgMin](operators/tensor/tensor.argmin.md) | :white\_check\_mark: | -| [ReduceSum](operators/tensor/tensor.reduce\_sum.md) | :white\_check\_mark: | -| [CumSum](operators/tensor/tensor.cumsum.md) | :white\_check\_mark: | -| [Cos](operators/tensor/tensor.cos.md) | :white\_check\_mark: | -| [Sin](operators/tensor/tensor.sin.md) | :white\_check\_mark: | -| [Asin](operators/tensor/tensor.asin.md) | :white\_check\_mark: | -| [Flatten](operators/tensor/tensor.flatten.md) | :white\_check\_mark: | -| [Relu](operators/neural-network/nn.relu.md) | :white\_check\_mark: | -| [LeakyRelu](operators/neural-network/nn.leaky\_relu.md) | :white\_check\_mark: | -|[ThresholdedRelu](operators/neural-network/nn.thresholded\_relu.md)| :white\_check\_mark: | -| [Sigmoid](operators/neural-network/nn.sigmoid.md) | :white\_check\_mark: | -| [Softmax](operators/neural-network/nn.softmax.md) | :white\_check\_mark: | -| [LogSoftmax](operators/neural-network/nn.logsoftmax.md) | :white\_check\_mark: | -| [Softsign](operators/neural-network/nn.softsign.md) | :white\_check\_mark: | -| [Softplus](operators/neural-network/nn.softplus.md) | :white\_check\_mark: | -| [Linear](operators/neural-network/nn.linear.md) | :white\_check\_mark: | -| [HardSigmoid](operators/neural-network/nn.hard\_sigmoid.md) | :white\_check\_mark: | -| [Sinh](operators/tensor/tensor.sinh.md) | :white\_check\_mark: | -| [Asinh](operators/tensor/tensor.asinh.md) | :white\_check\_mark: | -| [Cosh](operators/tensor/tensor.cosh.md) | :white\_check\_mark: | -| [ACosh](operators/tensor/tensor.acosh.md) | :white\_check\_mark: | -| [Tanh](operators/tensor/tensor.tanh.md) | :white\_check\_mark: | -| [Acos](operators/tensor/tensor.acos.md) | :white\_check\_mark: | -| [Sqrt](operators/tensor/tensor.sqrt.md) | :white\_check\_mark: | -| [Onehot](operators/tensor/tensor.onehot.md) | :white\_check\_mark: | -| [Slice](operators/tensor/tensor.slice.md) | :white\_check\_mark: | -| [Concat](operators/tensor/tensor.concat.md) | :white\_check\_mark: | -| [Gather](operators/tensor/tensor.gather.md) | :white\_check\_mark: | -| [QuantizeLinear](operators/tensor/tensor.quantize\_linear.md) | :white\_check\_mark: | -| [DequantizeLinear](operators/tensor/tensor.quantize\_linear.md) | :white\_check\_mark: | -| [Nonzero](operators/tensor/tensor.nonzero.md) | :white\_check\_mark: | -| [Squeeze](operators/tensor/tensor.squeeze.md) | :white\_check\_mark: | -| [Unsqueeze](operators/tensor/tensor.unsqueeze.md) | :white\_check\_mark: | -| [Sign](operators/tensor/tensor.sign.md) | :white\_check\_mark: | -| [Clip](operators/tensor/tensor.clip.md) | :white\_check\_mark: | -| [Identity](operators/tensor/tensor.identity.md) | :white\_check\_mark: | +| Operator | Implemented | +| :-----------------------------------------------------------------: | :------------------: | +| [MatMul](operators/tensor/tensor.matmul.md) | :white\_check\_mark: | +| [MatMulInteger](operators/tensor/tensor.matmul.md) | :white\_check\_mark: | +| [Add](operators/tensor/#arithmetic-operations) | :white\_check\_mark: | +| [Sub](operators/tensor/#arithmetic-operations) | :white\_check\_mark: | +| [Mul](operators/tensor/#arithmetic-operations) | :white\_check\_mark: | +| [Div](operators/tensor/#arithmetic-operations) | :white\_check\_mark: | +| [Equal](operators/tensor/tensor.equal.md) | :white\_check\_mark: | +| [Greater](operators/tensor/tensor.greater.md) | :white\_check\_mark: | +| [GreaterOrEqual](operators/tensor/tensor.greater\_equal.md) | :white\_check\_mark: | +| [Less](operators/tensor/tensor.less.md) | :white\_check\_mark: | +| [LessOrEqual](operators/tensor/tensor.less\_equal.md) | :white\_check\_mark: | +| [Abs](operators/tensor/tensor.abs.md) | :white\_check\_mark: | +| [Neg](operators/tensor/tensor.neg.md) | :white\_check\_mark: | +| [Ceil](operators/tensor/tensor.ceil.md) | :white\_check\_mark: | +| [Exp](operators/tensor/tensor.exp.md) | :white\_check\_mark: | +| [Ln](operators/tensor/tensor.log.md) | :white\_check\_mark: | +| [Reshape](operators/tensor/tensor.reshape.md) | :white\_check\_mark: | +| [Transpose](operators/tensor/tensor.transpose.md) | :white\_check\_mark: | +| [ArgMax](operators/tensor/tensor.argmax.md) | :white\_check\_mark: | +| [ArgMin](operators/tensor/tensor.argmin.md) | :white\_check\_mark: | +| [ReduceSum](operators/tensor/tensor.reduce\_sum.md) | :white\_check\_mark: | +| [CumSum](operators/tensor/tensor.cumsum.md) | :white\_check\_mark: | +| [Cos](operators/tensor/tensor.cos.md) | :white\_check\_mark: | +| [Sin](operators/tensor/tensor.sin.md) | :white\_check\_mark: | +| [Asin](operators/tensor/tensor.asin.md) | :white\_check\_mark: | +| [Flatten](operators/tensor/tensor.flatten.md) | :white\_check\_mark: | +| [Relu](operators/neural-network/nn.relu.md) | :white\_check\_mark: | +| [LeakyRelu](operators/neural-network/nn.leaky\_relu.md) | :white\_check\_mark: | +| [ThresholdedRelu](operators/neural-network/nn.thresholded\_relu.md) | :white\_check\_mark: | +| [Sigmoid](operators/neural-network/nn.sigmoid.md) | :white\_check\_mark: | +| [Softmax](operators/neural-network/nn.softmax.md) | :white\_check\_mark: | +| [LogSoftmax](operators/neural-network/nn.logsoftmax.md) | :white\_check\_mark: | +| [Softsign](operators/neural-network/nn.softsign.md) | :white\_check\_mark: | +| [Softplus](operators/neural-network/nn.softplus.md) | :white\_check\_mark: | +| [Linear](operators/neural-network/nn.linear.md) | :white\_check\_mark: | +| [HardSigmoid](operators/neural-network/nn.hard\_sigmoid.md) | :white\_check\_mark: | +| [Sinh](operators/tensor/tensor.sinh.md) | :white\_check\_mark: | +| [Asinh](operators/tensor/tensor.asinh.md) | :white\_check\_mark: | +| [Cosh](operators/tensor/tensor.cosh.md) | :white\_check\_mark: | +| [ACosh](operators/tensor/tensor.acosh.md) | :white\_check\_mark: | +| [Tanh](operators/tensor/tensor.tanh.md) | :white\_check\_mark: | +| [Acos](operators/tensor/tensor.acos.md) | :white\_check\_mark: | +| [Sqrt](operators/tensor/tensor.sqrt.md) | :white\_check\_mark: | +| [Onehot](operators/tensor/tensor.onehot.md) | :white\_check\_mark: | +| [Slice](operators/tensor/tensor.slice.md) | :white\_check\_mark: | +| [Concat](operators/tensor/tensor.concat.md) | :white\_check\_mark: | +| [Gather](operators/tensor/tensor.gather.md) | :white\_check\_mark: | +| [QuantizeLinear](operators/tensor/tensor.quantize\_linear.md) | :white\_check\_mark: | +| [DequantizeLinear](operators/tensor/tensor.quantize\_linear.md) | :white\_check\_mark: | +| [Nonzero](operators/tensor/tensor.nonzero.md) | :white\_check\_mark: | +| [Squeeze](operators/tensor/tensor.squeeze.md) | :white\_check\_mark: | +| [Unsqueeze](operators/tensor/tensor.unsqueeze.md) | :white\_check\_mark: | +| [Sign](operators/tensor/tensor.sign.md) | :white\_check\_mark: | +| [Clip](operators/tensor/tensor.clip.md) | :white\_check\_mark: | +| [Identity](operators/tensor/tensor.identity.md) | :white\_check\_mark: | +| [And](operators/tensor/tensor.and.md) | :white\_check\_mark: | Current Operators support: **51/156 (33%)** diff --git a/src/numbers.cairo b/src/numbers.cairo index 821e68812..5432d67f8 100644 --- a/src/numbers.cairo +++ b/src/numbers.cairo @@ -390,6 +390,10 @@ impl FP8x23WNumber of NumberTrait { fn sign(self: FP8x23W) -> FP8x23W { core_fp8x23wide::sign(self) } + + fn and(lhs: FP8x23W, rhs: FP8x23W) -> bool { + comp_fp8x23wide::and(lhs, rhs) + } } use orion::numbers::fixed_point::implementations::fp16x16::core::{FP16x16Impl, FP16x16}; @@ -732,6 +736,10 @@ impl FP16x16WNumber of NumberTrait { fn sign(self: FP16x16W) -> FP16x16W { core_fp16x16wide::sign(self) } + + fn and(lhs: FP16x16W, rhs: FP16x16W) -> bool { + comp_fp16x16wide::and(lhs, rhs) + } } use orion::numbers::fixed_point::implementations::fp64x64::core::{FP64x64Impl, FP64x64}; diff --git a/src/numbers/fixed_point/implementations/fp16x16wide/math/comp.cairo b/src/numbers/fixed_point/implementations/fp16x16wide/math/comp.cairo index 63a3e4855..4f815a124 100644 --- a/src/numbers/fixed_point/implementations/fp16x16wide/math/comp.cairo +++ b/src/numbers/fixed_point/implementations/fp16x16wide/math/comp.cairo @@ -35,6 +35,15 @@ fn or(a: FP16x16W, b: FP16x16W) -> bool { } } +fn and(a: FP16x16W, b: FP16x16W) -> bool { + let zero = FixedTrait::new(0, false); + if a == zero || b == zero { + return false; + } else { + return true; + } +} + // Tests -------------------------------------------------------------------------------------------------------------- #[test] diff --git a/src/numbers/fixed_point/implementations/fp8x23wide/math/comp.cairo b/src/numbers/fixed_point/implementations/fp8x23wide/math/comp.cairo index 95b329109..5cacb7f0e 100644 --- a/src/numbers/fixed_point/implementations/fp8x23wide/math/comp.cairo +++ b/src/numbers/fixed_point/implementations/fp8x23wide/math/comp.cairo @@ -35,6 +35,15 @@ fn or(a: FP8x23W, b: FP8x23W) -> bool { } } +fn and(a: FP8x23W, b: FP8x23W) -> bool { + let zero = FixedTrait::new(0, false); + if a == zero || b == zero { + return false; + } else { + return true; + } +} + // Tests -------------------------------------------------------------------------------------------------------------- #[test] diff --git a/src/operators/tensor/implementations/tensor_fp16x16wide.cairo b/src/operators/tensor/implementations/tensor_fp16x16wide.cairo index 2669c91e5..101ad4d21 100644 --- a/src/operators/tensor/implementations/tensor_fp16x16wide.cairo +++ b/src/operators/tensor/implementations/tensor_fp16x16wide.cairo @@ -242,6 +242,10 @@ impl FP16x16WTensor of TensorTrait { core::clip(self, min, max) } + fn and(self: @Tensor, other: @Tensor) -> Tensor { + math::and::and(self, other) + } + fn identity(self: @Tensor) -> Tensor { core::identity(self) } diff --git a/src/operators/tensor/implementations/tensor_fp8x23wide.cairo b/src/operators/tensor/implementations/tensor_fp8x23wide.cairo index a085c1f8b..e81beb028 100644 --- a/src/operators/tensor/implementations/tensor_fp8x23wide.cairo +++ b/src/operators/tensor/implementations/tensor_fp8x23wide.cairo @@ -234,6 +234,10 @@ impl FP8x23WTensor of TensorTrait { core::clip(self, min, max) } + fn and(self: @Tensor, other: @Tensor) -> Tensor { + math::and::and(self, other) + } + fn identity(self: @Tensor) -> Tensor { core::identity(self) }