Numpy Arrays Being Converted to Strings in Testbook Tests #159
Description
Problem Description:
When passing numpy
arrays as arguments to a function in the notebook, they seem to be converted to strings, leading to TypeError
exceptions.
The function I’m testing is supposed to adjust the brightness of a grayscale image (represented as a 2D numpy
array).
However, during testing, it seems like the numpy
array is converted to a string before being passed to the function, which results in the following error:
TypeError: unsupported operand type(s) for -: 'str' and 'int'
Minimum Breaking Example:
1. Jupyter Notebook Code (brightAdjust
function):
import numpy as np
def brightAdjust(image, c):
return np.clip(image + c, 0, 255)
2. Test Code Using Testbook:
I’m using the testbook
library to test the function from the notebook. Here’s the test script I’m running:
# test_lab_2.py
from testbook import testbook
import numpy as np
import pytest
NOTEBOOK_PATH = '/path_to_notebook/notebook.ipynb'
@testbook(NOTEBOOK_PATH, execute=True)
def test_bright_adjust(tb):
# Get reference to the brightAdjust function in the notebook
bright_adjust_func = tb.ref('brightAdjust')
# Create a very small grayscale image (1x1 numpy array)
image_small = np.array([[100]], dtype=np.uint8)
# Apply brightness adjustment with c = 50 on the small array
adjusted_image_small = bright_adjust_func(image_small, 50)
# Expected output for the small image: brightness increased by 50
expected_image_small = np.array([[150]], dtype=np.uint8)
# Assert that the adjusted small image matches the expected output
np.testing.assert_array_equal(adjusted_image_small, expected_image_small)
3. Error Output:
Here’s the error traceback I’m getting when I run the test:
TypeError: unsupported operand type(s) for -: 'str' and 'int'
During handling of the above exception, another exception occurred:
testbook.exceptions.TestbookRuntimeError: An error occurred while executing the following cell:
------------------
brightAdjust(*("[[100]]", 50, ), **{})
------------------
It seems like the numpy
array image_small
is being passed as the string "[[100]]"
, rather than as a numpy
array, causing the function to throw an error. The 50 seems to be properly being passed in.
What I’ve Tried:
- I’ve confirmed that the notebook runs as expected when I manually execute the cell with the
brightAdjust
function in Jupyter, so the issue seems to be specifically related totestbook
. - I’ve checked that the data I’m passing from the test script is indeed a
numpy
array, but somehow it’s converted to a string when sent to the notebook function.
Expected Behavior:
The numpy
array should be passed as-is to the function in the notebook, not as a string.
Request:
Could anyone provide guidance on how to prevent numpy
arrays from being converted to strings when passing them from the test code to the notebook function? If this is a limitation of testbook
, is there a recommended workaround?
Thank you in advance for any help!