Skip to content

Commit b79a99d

Browse files
committed
Add numpy.linspace to openvino backend
1 parent 6e688ab commit b79a99d

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

keras/src/backend/openvino/excluded_concrete_tests.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ NumpyDtypeTest::test_isclose
3232
NumpyDtypeTest::test_isfinite
3333
NumpyDtypeTest::test_isinf
3434
NumpyDtypeTest::test_isnan
35-
NumpyDtypeTest::test_linspace
3635
NumpyDtypeTest::test_log10
3736
NumpyDtypeTest::test_log1p
3837
NumpyDtypeTest::test_log
@@ -158,7 +157,6 @@ NumpyTwoInputOpsCorrectnessTest::test_divide_no_nan
158157
NumpyTwoInputOpsCorrectnessTest::test_einsum
159158
NumpyTwoInputOpsCorrectnessTest::test_inner
160159
NumpyTwoInputOpsCorrectnessTest::test_isclose
161-
NumpyTwoInputOpsCorrectnessTest::test_linspace
162160
NumpyTwoInputOpsCorrectnessTest::test_logspace
163161
NumpyTwoInputOpsCorrectnessTest::test_outer
164162
NumpyTwoInputOpsCorrectnessTest::test_quantile

keras/src/backend/openvino/numpy.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -823,12 +823,39 @@ def less_equal(x1, x2):
823823

824824

825825
def linspace(
826-
start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0
826+
start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0
827827
):
828-
raise NotImplementedError(
829-
"`linspace` is not supported with openvino backend"
830-
)
828+
start = get_ov_output(start)
829+
stop = get_ov_output(stop)
830+
831+
if dtype is not None:
832+
ov_type = OPENVINO_DTYPES[standardize_dtype(dtype)]
833+
else:
834+
ov_type = OPENVINO_DTYPES[config.floatx()]
835+
836+
if num < 0:
837+
raise ValueError(f"Number of samples, {num}, must be non-negative.")
838+
elif num == 0:
839+
range_vals = ov_opset.constant([], dtype=ov_type).output(0)
840+
if retstep:
841+
return OpenVINOKerasTensor(range_vals), 0
842+
return OpenVINOKerasTensor(range_vals)
843+
844+
start = ov_opset.convert(start, ov_type).output(0)
845+
stop = ov_opset.convert(stop, ov_type).output(0)
846+
847+
if endpoint:
848+
num = num - 1
849+
step = ov_opset.divide(ov_opset.subtract(stop, start), ov_opset.constant(num, dtype=ov_type)).output(0)
850+
stop = ov_opset.add(stop, step).output(0)
851+
else:
852+
step = ov_opset.divide(ov_opset.subtract(stop, start), ov_opset.constant(num, dtype=ov_type)).output(0)
853+
854+
range_vals = ov_opset.range(start, stop, step, ov_type).output(0)
831855

856+
if retstep:
857+
return OpenVINOKerasTensor(range_vals), step
858+
return OpenVINOKerasTensor(range_vals)
832859

833860
def log(x):
834861
x = get_ov_output(x)

0 commit comments

Comments
 (0)