Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ndarray of text does not display correctly in variable explorer #22466

Closed
10 tasks done
PhilipYip1988 opened this issue Sep 7, 2024 · 5 comments · Fixed by #22484
Closed
10 tasks done

ndarray of text does not display correctly in variable explorer #22466

PhilipYip1988 opened this issue Sep 7, 2024 · 5 comments · Fixed by #22484

Comments

@PhilipYip1988
Copy link

Issue Report Checklist

  • Searched the issues page for similar reports
  • Read the relevant sections of the Spyder Troubleshooting Guide and followed its advice
  • Reproduced the issue after updating with conda update spyder (or pip, if not using Anaconda)
  • Could not reproduce inside jupyter qtconsole (if console-related)
  • Tried basic troubleshooting (if a bug/error)
    • Restarted Spyder
    • Reset preferences with spyder --reset
    • Reinstalled the latest version of Anaconda
    • Tried the other applicable steps from the Troubleshooting Guide
  • Completed the Problem Description, Steps to Reproduce and Version sections below

Problem Description

Create an ndarray:

import numpy as np
mosaic = np.array([['a', 'b'],
                   ['c', 'd']])

What steps reproduce the problem?

  1. Create ndarray of text values
  2. Open in variable explorer
  3. strings are empty

What is the expected output? What do you see instead?

1

There is an empty array, the text should display in it.

2

Paste Traceback/Error Below (if applicable)

PASTE TRACEBACK HERE

Versions

  • Spyder version: 6.0.0 (standalone)
  • Python version: 3.11.9 64-bit
  • Qt version: 5.15.8
  • PyQt5 version: 5.15.9
  • Operating System: Windows-10-10.0.26100-SP0

Dependencies

# Mandatory:
aiohttp >=3.9.3                  :  3.10.5 (OK)
asyncssh >=2.14.0,<3.0.0         :  2.17.0 (OK)
atomicwrites >=1.2.0             :  1.4.1 (OK)
chardet >=2.0.0                  :  5.2.0 (OK)
cloudpickle >=0.5.0              :  3.0.0 (OK)
cookiecutter >=1.6.0             :  2.6.0 (OK)
diff_match_patch >=20181111      :  20230430 (OK)
github >=2.3.0                   :  2.4.0 (OK)
importlib_metadata >=4.6.0       :  8.4.0 (OK)
intervaltree >=3.0.2             :  3.1.0 (OK)
IPython >=8.13.0,<9.0.0,!=8.17.1 :  8.27.0 (OK)
jedi >=0.17.2,<0.20.0            :  0.19.1 (OK)
jellyfish >=0.7                  :  1.1.0 (OK)
jsonschema >=3.2.0               :  4.23.0 (OK)
keyring >=17.0.0                 :  25.3.0 (OK)
nbconvert >=4.0                  :  7.16.4 (OK)
numpydoc >=0.6.0                 :  1.8.0 (OK)
parso >=0.7.0,<0.9.0             :  0.8.4 (OK)
pexpect >=4.4.0                  :  4.9.0 (OK)
pickleshare >=0.4                :  0.7.5 (OK)
psutil >=5.3                     :  6.0.0 (OK)
pygments >=2.0                   :  2.18.0 (OK)
pylint >=3.1,<4                  :  3.2.7 (OK)
pylint_venv >=3.0.2              :  3.0.3 (OK)
pyls_spyder >=0.4.0              :  0.4.0 (OK)
pylsp >=1.12.0,<1.13.0           :  1.12.0 (OK)
pylsp_black >=2.0.0,<3.0.0       :  2.0.0 (OK)
pyuca >=1.2                      :  1.2 (OK)
qdarkstyle >=3.2.0,<3.3.0        :  3.2.3 (OK)
qstylizer >=0.2.2                :  0.2.3 (OK)
qtawesome >=1.3.1,<1.4.0         :  1.3.1 (OK)
qtconsole >=5.6.0,<5.7.0         :  5.6.0 (OK)
qtpy >=2.4.0                     :  2.4.1 (OK)
rtree >=0.9.7                    :  1.3.0 (OK)
setuptools >=49.6.0              :  73.0.1 (OK)
sphinx >=0.6.6                   :  8.0.2 (OK)
spyder_kernels >=3.0.0,<3.1.0    :  3.0.0 (OK)
superqt >=0.6.2,<1.0.0           :  0.6.7 (OK)
textdistance >=4.2.0             :  4.6.2 (OK)
three_merge >=0.1.1              :  0.1.1 (OK)
watchdog >=0.10.3                :  5.0.1 (OK)
yarl >=1.9.4                     :  1.9.7 (OK)
zmq >=24.0.0                     :  26.2.0 (OK)

# Optional:
cython >=0.21                    :  3.0.11 (OK)
matplotlib >=3.0.0               :  3.9.2 (OK)
numpy >=1.7                      :  2.1.0 (OK)
pandas >=1.1.1                   :  2.2.2 (OK)
scipy >=0.17.0                   :  1.14.1 (OK)
sympy >=0.7.3                    :  1.13.2 (OK)
@ccordoba12
Copy link
Member

Hey @PhilipYip1988, thanks for reporting. I was able to reproduce this problem and we'll try to fix it in a future version.

@jitseniesen
Copy link
Member

I tried to bisect and I think this issue may be caused by PR #20473 by myself, so I will try to fix it.

@jitseniesen jitseniesen self-assigned this Sep 10, 2024
@jitseniesen
Copy link
Member

I think I figured out what is going on: Spyder uses format(..., 's') to convert array elements to strings. Here, this returns something that looks like an str but it is actually a different type:

>>> import numpy as np
>>> mosaic = np.array([['a', 'b'],
...                    ['c', 'd']])
>>> format(mosaic[0,0], 's')
'a'
>>> isinstance(format(mosaic[0,0], 's'), str)
True
>>> type(format(mosaic[0,0], 's'))
<class 'numpy.str_'>

That seems to confuse the Qt widget that displays the array. PR should be arriving soon.

@PhilipYip1988
Copy link
Author

Just updated to 6.0.1 and it looks much better.

However it still says ndarray object of numpy module in the variable explorer (red) instead of:

np.array([[a, b],
          [c, d]])

Also I can double click into a text field for example the a and edit the text to abcde (shown in blue). When I click out of the field, it reverts to the original value. This means Save and Close (shown in green) cannot be used:

spyder6 0 1b

@jitseniesen
Copy link
Member

However it still says ndarray object of numpy module in the variable explorer (red)

Spyder 5 did the same, but I agree that we can do better. This is a separate issue so I opened a new one in order to stay organized: #22570.

Also I can double click into a text field for example the a and edit the text to abcde (shown in blue). When I click out of the field, it reverts to the original value.

This reflects how numpy works:

>>> import numpy as np
>>> arr = np.array([['a','b'],['c','d']])
>>> arr[0,0] = 'abcde'
>>> arr
array([['a', 'b'],
       ['c', 'd']], dtype='<U1')

The reason is that arr is an array of strings of length 1 and longer strings are (apparently) truncated. This is pretty confusing and it took me a while to figure it out. However, I don't know what we should do about it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants