internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: qutip/qutip

Issue:
Bloch3d add_points failing
**Describe the bug**
The add_points method of BLoch3d seems to broken. There is an easy fix in the merge request #1400 

**To Reproduce**
Minimal working instance
```python
from qutip import Bloch3d
import numpy as np

# This works
points = np.array([[0,0,1.0],[1.0,0,0],[0,1,0]])
b = Bloch3d()
b.add_points(points.transpose())
b.show()


# This fails
points = np.array([[0,0,1.0],[0,.5,0.3],[0,-1.0,0]])
b = Bloch3d()
b.add_points(points.transpose())
b.show()

```
The terminal out put is
```
  File "/home/philipp/.local/lib/python3.8/site-packages/qutip/bloch3d.py", line 379, in plot_points
    zipped.sort()  # sort rates from lowest to highest
AttributeError: 'zip' object has no attribute 'sort'

```

**Expected behavior**
There should be no exception raised

**Your Environment**
Please use `qutip.about()` to get the information about your environment and paste it here.

**Additional context**
Add any other context about the problem here.



Discussion:

Resolving patch:
diff --git a/qutip/bloch3d.py b/qutip/bloch3d.py
--- a/qutip/bloch3d.py
+++ b/qutip/bloch3d.py
@@ -374,8 +374,8 @@ def plot_points(self):
                             self.points[k][2][j] ** 2) for j in range(num)]
             if any(abs(dist - dist[0]) / dist[0] > 1e-12):
                 # combine arrays so that they can be sorted together
-                zipped = zip(dist, range(num))
-                zipped.sort()  # sort rates from lowest to highest
+                # and sort rates from lowest to highest
+                zipped = sorted(zip(dist, range(num)))
                 dist, indperm = zip(*zipped)
                 indperm = np.array(indperm)
             else:


Test patch:
Repository: qutip/qutip

Issue:
Bloch sphere deformed for matplotlib >= 3.3.0
**Describe the bug**
When plotting the Bloch sphere with qutip and matplotlib >=3.3.0 the sphere appears deformed in z-direction.
This is a result of a change in matplotlib Axes3D: https://matplotlib.org/3.3.0/users/whats_new.html#d-axes-improvements

**To Reproduce**

```python
import qutip
b = qutip.Bloch()
b.show()
```

**Work around**
1) downgrade to matplotlib 3.2.2
or
2) set aspect ratio manually
```python
import qutip
b = qutip.Bloch()
b.show()
if hasattr(b.axes, 'set_box_aspect'):
    b.axes.set_box_aspect([1,1,1])
```

**Environment**
QuTiP Version:      4.5.2
Numpy Version:      1.19.2
Scipy Version:      1.5.2
Cython Version:     0.29.21
Matplotlib Version: 3.3.2
Python Version:     3.7.9
Number of CPUs:     6
BLAS Info:          INTEL MKL
OPENMP Installed:   False
INTEL MKL Ext:      True
Platform Info:      Linux (x86_64)


Discussion:
This is an issue with `matplotlib` rather than `QuTiP`. A possible workaround is downgrading to version 3.2.2.
The underlying reason is that matplotlib made some [changes](https://matplotlib.org/3.3.0/users/whats_new.html#axes3d-no-longer-distorts-the-3d-plot-to-match-the-2d-aspect-ratio) in the `Axes3D` module.

Resolving patch:
diff --git a/qutip/bloch.py b/qutip/bloch.py
--- a/qutip/bloch.py
+++ b/qutip/bloch.py
@@ -461,6 +461,9 @@ def render(self, fig=None, axes=None):
             self.axes.set_xlim3d(-0.7, 0.7)
             self.axes.set_ylim3d(-0.7, 0.7)
             self.axes.set_zlim3d(-0.7, 0.7)
+        # Manually set aspect ratio to fit a square bounding box.
+        # Matplotlib did this stretching for < 3.3.0, but not above.
+        self.axes.set_box_aspect((1, 1, 1))
 
         self.axes.grid(False)
         self.plot_back()


Test patch:
Repository: qutip/qutip

Issue:
Documentation for rand_dm
**Describe the bug**
Providing seed as an integer to `rand_dm` does not fixate the seed but randomizes it for each run. In the documentation of `rand_dm` a description of seed is missing.

**To Reproduce**
```python
from qutip import rand_dm
rho = rand_dm(2, density=0.75, pure = True, seed = 1)
print(rho)
```
The terminal out put is different for each run

**Expected behavior**
This gives the correct expected behavior
```python
from qutip import rand_dm
rho = rand_dm(2, density=0.75, pure = True, seed = np.random.seed(1))
print(rho)
```

**Additional context**
Please add a description of seed in `rand_dm` that specifies that the seed parameter should be given as `np.random.seed`



Discussion:
The seed is ignored when `pure=True`.
Thank you for catching this. 

Resolving patch:
diff --git a/qutip/random_objects.py b/qutip/random_objects.py
--- a/qutip/random_objects.py
+++ b/qutip/random_objects.py
@@ -309,6 +309,8 @@ def rand_ket(N=None, density=1, dims=None, seed=None):
     dims : list
         Dimensions of quantum object.  Used for specifying
         tensor structure. Default is dims=[[N],[1]].
+    seed : int
+        Seed for the random number generator.
 
     Returns
     -------
@@ -398,6 +400,8 @@ def rand_dm(N, density=0.75, pure=False, dims=None, seed=None):
     dims : list
         Dimensions of quantum object.  Used for specifying
         tensor structure. Default is dims=[[N],[N]].
+    seed : int
+        Seed for the random number generator.
 
     Returns
     -------
@@ -428,7 +432,7 @@ def rand_dm(N, density=0.75, pure=False, dims=None, seed=None):
             _check_dims(dims, N, N)
         if pure:
             dm_density = np.sqrt(density)
-            psi = rand_ket(N, dm_density)
+            psi = rand_ket(N, dm_density, seed=seed)
             H = psi * psi.dag()
             H.data.sort_indices()
         else:


Test patch:
Repository: qutip/qutip

Issue:
Documentation error in `chi_to_choi`
The documentation is wrong for the `chi_to_choi` function https://qutip.org/docs/latest/modules/qutip/superop_reps.html#chi_to_choi

It should say "Converts a Chi matrix to a Choi matrix."


Discussion:

Resolving patch:
diff --git a/qutip/superop_reps.py b/qutip/superop_reps.py
--- a/qutip/superop_reps.py
+++ b/qutip/superop_reps.py
@@ -250,7 +250,7 @@ def choi_to_chi(q_oper):
 
 def chi_to_choi(q_oper):
     """
-    Converts a Choi matrix to a Chi matrix in the Pauli basis.
+    Converts a Chi matrix to a Choi matrix.
 
     NOTE: this is only supported for qubits right now. Need to extend to
     Heisenberg-Weyl for other subsystem dimensions.
@@ -296,7 +296,7 @@ def _generalized_kraus(q_oper, thresh=1e-10):
     #       diamond norm differences between two CP maps.
     if q_oper.type != "super" or q_oper.superrep != "choi":
         raise ValueError("Expected a Choi matrix, got a {} (superrep {}).".format(q_oper.type, q_oper.superrep))
-    
+
     # Remember the shape of the underlying space,
     # as we'll need this to make Kraus operators later.
     dL, dR = map(int, map(sqrt, q_oper.shape))
@@ -346,7 +346,7 @@ def choi_to_stinespring(q_oper, thresh=1e-10):
     for idx_kraus, (KL, KR) in enumerate(zip(kU, kV)):
         A += tensor(KL, basis(dK, idx_kraus))
         B += tensor(KR, basis(dK, idx_kraus))
-        
+
     # There is no input (right) Kraus index, so strip that off.
     del A.dims[1][-1]
     del B.dims[1][-1]


Test patch:
Repository: qutip/qutip

Issue:
`visualization.hinton` plots matrix transpose instead of matrix
### Bug Description

The `hinton` visualization method plots the transpose of the matrix instead of the matrix itself.

### Code to Reproduce the Bug

```shell
import qutip as qt
u = qt.Qobj([[1.0, 1.0],
             [0.0, 1.0]])
qt.hinton(u)
```


### Code Output

_No response_

### Expected Behaviour

Output:
![7c46ebe9-df8a-4246-898c-adb88b07fd01](https://user-images.githubusercontent.com/38159029/197494500-d3b3ab8a-59a7-4bee-b55e-94a5e44f02ba.png)

Expected:
![eeda621e-7720-42bd-b320-19ac9f2dc772](https://user-images.githubusercontent.com/38159029/197494815-885be8c9-dc3f-4b4c-a594-234220c06b41.png)


### Your Environment

```shell
QuTiP Version:      4.7.0
Numpy Version:      1.23.1
Scipy Version:      1.9.0
Cython Version:     None
Matplotlib Version: 3.5.2
Python Version:     3.9.9
Number of CPUs:     8
BLAS Info:          OPENBLAS
OPENMP Installed:   False
INTEL MKL Ext:      False
Platform Info:      Darwin (arm64)
```


### Additional Context

I am happy to help fixing this if you confirm the issue.


Discussion:

Resolving patch:
diff --git a/qutip/visualization.py b/qutip/visualization.py
--- a/qutip/visualization.py
+++ b/qutip/visualization.py
@@ -166,8 +166,8 @@ def _cb_labels(left_dims):
     return [
         map(fmt.format, basis_labels) for fmt in
         (
+            r"$\langle{}|$",
             r"$|{}\rangle$",
-            r"$\langle{}|$"
         )
     ]
 
@@ -331,8 +331,8 @@ def color_fn(w):
             _x = x + 1
             _y = y + 1
             _blob(
-                _x - 0.5, height - _y + 0.5, W[x, y], w_max,
-                min(1, abs(W[x, y]) / w_max), color_fn=color_fn, ax=ax)
+                _x - 0.5, height - _y + 0.5, W[y, x], w_max,
+                min(1, abs(W[y, x]) / w_max), color_fn=color_fn, ax=ax)
 
     # color axis
     vmax = np.pi if color_style == "phase" else abs(W).max()


Test patch:
Repository: qutip/qutip

Issue:
`visualization.hinton` scaling is incorrect
### Bug Description

The `hinton` visualization method doesn't have the correct square area scaling.

### Code to Reproduce the Bug

```shell
import qutip as qt
u = qt.Qobj([[0.1, 0.1],
             [1.0, 0.1]])
qt.hinton(u)
```


### Code Output

_No response_

### Expected Behaviour

Output:
![6ec9b5de-a6b1-4ed1-a730-e35e158c8ae3](https://user-images.githubusercontent.com/38159029/197496789-7cf89a2e-a395-43ad-a21d-87d1734d8cea.png)

Expected (including the matrix transpose correction, see also issue #2009):
![bafa400f-c2c3-4b71-8ff7-fefec3a8c9ce](https://user-images.githubusercontent.com/38159029/197497261-6b4a310a-041e-49c0-965a-75847901873c.png)


### Your Environment

```shell
QuTiP Version:      4.7.0
Numpy Version:      1.23.1
Scipy Version:      1.9.0
Cython Version:     None
Matplotlib Version: 3.5.2
Python Version:     3.9.9
Number of CPUs:     8
BLAS Info:          OPENBLAS
OPENMP Installed:   False
INTEL MKL Ext:      False
Platform Info:      Darwin (arm64)
```


### Additional Context

I am happy to help fixing this if you confirm the issue, I think the `w_max` should not be computed from the diagonal but rather from all matrix elements: https://github.com/qutip/qutip/blob/8118ee8e1a96d45dcf9187a71f7ec1413e55b22f/qutip/visualization.py#L306

Suggested correction:
```python
w_max = 1.25 * max(abs(np.array(W)).flatten())
```


Discussion:
@PierreGuilmin, Thank you for reporting.
The changes you are proposing seems good. 
If you can make a PR, we would be grateful.



Resolving patch:
diff --git a/qutip/visualization.py b/qutip/visualization.py
--- a/qutip/visualization.py
+++ b/qutip/visualization.py
@@ -303,7 +303,7 @@ def hinton(rho, xlabels=None, ylabels=None, title=None, ax=None, cmap=None,
 
     height, width = W.shape
 
-    w_max = 1.25 * max(abs(np.diag(np.array(W))))
+    w_max = 1.25 * max(abs(np.array(W)).flatten())
     if w_max <= 0.0:
         w_max = 1.0
 


Test patch:
Repository: qutip/qutip

Issue:
It seems that VS Code does not support render both basic texts and Latex together. On the other hand, the latex code generated by _repr_latex_ is not compatible with Katex (the render engine of Latex used in VS Code).
It seems that VS Code does not support render both basic texts and Latex together. On the other hand, the latex code generated by _repr_latex_ is not compatible with Katex (the render engine of Latex used in VS Code).
I tried to modify the code, and the output in VS Code works.

(The style is not beautiful, waiting for someone else to improve the code~)
![image](https://user-images.githubusercontent.com/8891351/165754296-d53b8efc-4aaf-4768-8728-c769b5f7718c.png)
[_repr_latex_.py.txt](https://github.com/qutip/qutip/files/8582772/_repr_latex_.py.txt)

_Originally posted by @hiliuzheng in https://github.com/qutip/qutip/issues/1809#issuecomment-1112157441_


Discussion:
This code can also be compatible with Jupyter Lab.
![image](https://user-images.githubusercontent.com/8891351/165754821-f99a743f-1084-4107-8586-435b8263e2d5.png)

Is anyone working on this? I see no assignee, and it would be nice to get this feature on a stable release.
@drodper If you would be up for creating a pull request with the code changes, we can review and perhaps including in 4.7.1.
@hiliuzheng Care to share the code you changed to get the renderings above?

Resolving patch:
diff --git a/qutip/qobj.py b/qutip/qobj.py
--- a/qutip/qobj.py
+++ b/qutip/qobj.py
@@ -829,7 +829,7 @@ def _repr_latex_(self):
 
         M, N = self.data.shape
 
-        s += r'\begin{equation*}\left(\begin{array}{*{11}c}'
+        s += r' $ \\ \left(\begin{matrix}'
 
         def _format_float(value):
             if value == 0.0:
@@ -916,7 +916,7 @@ def _format_element(m, n, d):
                     s += _format_element(m, n, self.data[m, n])
                 s += r'\\'
 
-        s += r'\end{array}\right)\end{equation*}'
+        s += r'\end{matrix}\right)$'
         return s
 
     def dag(self):


Test patch:
Repository: qutip/qutip

Issue:
Fix the handling of file suffixes when saving and loading Qobjs
### Bug Description

This bug was introduced n #1813 and reported by @nleehone in a post-release review of https://github.com/qutip/qutip/pull/1813#pullrequestreview-950335153

### Code to Reproduce the Bug

_No response_

### Code Output

_No response_

### Expected Behaviour

The file suffix should be added if it is not present.

### Your Environment

```shell
QuTiP version: 4.7.0
```


### Additional Context

_No response_


Discussion:

Resolving patch:
diff --git a/qutip/fileio.py b/qutip/fileio.py
--- a/qutip/fileio.py
+++ b/qutip/fileio.py
@@ -221,10 +221,10 @@ def qsave(data, name='qutip_data'):
 
     """
     # open the file for writing
-    file = Path(name)
-    file = file.with_suffix(file.suffix + ".qu")
+    path = Path(name)
+    path = path.with_suffix(path.suffix + ".qu")
 
-    with open(name, "wb") as fileObject:
+    with open(path, "wb") as fileObject:
         # this writes the object a to the file named 'filename.qu'
         pickle.dump(data, fileObject)
 
@@ -244,10 +244,10 @@ def qload(name):
         Object retrieved from requested file.
 
     """
-    file = Path(name)
-    file = file.with_suffix(file.suffix + ".qu")
+    path = Path(name)
+    path = path.with_suffix(path.suffix + ".qu")
 
-    with open(name, "rb") as fileObject:
+    with open(path, "rb") as fileObject:
         if sys.version_info >= (3, 0):
             out = pickle.load(fileObject, encoding='latin1')
         else:


Test patch:
diff --git a/qutip/tests/test_fileio.py b/qutip/tests/test_fileio.py
--- a/qutip/tests/test_fileio.py
+++ b/qutip/tests/test_fileio.py
@@ -13,6 +13,7 @@
 
 _dimension = 10
 
+
 def _random_file_name():
     return "_" + str(uuid.uuid4())
 
@@ -57,3 +58,5 @@ def test_qsave_qload(use_path, suffix):
     qutip.qsave(ops_in, filename)
     ops_out = qutip.qload(filename)
     assert ops_in == ops_out
+    # check that the file was saved with the correct name:
+    assert Path(str(filename) + ".qu").exists()
Repository: qutip/qutip

Issue:
Missing `__all__`
### Bug Description

Some files are missing `__all__` and leaking variables.

### Code to Reproduce the Bug

```shell
import qutip.measurement
qt.measurement.np
```


### Code Output

```shell
<module 'numpy' from 'miniconda3/lib/python3.10/site-packages/numpy/__init__.py'>
```


### Expected Behaviour

Only user facing qutip functions should be available.

### Your Environment

```shell
QuTiP Version:      5.0.0.dev0
```


### Additional Context

`__all__` is missing in: 
- `qutip/measurements.py`
- `qutip/solve/piqs.py`
- `qutip/core/semidefinite.py`
which contain users facing functions.


Discussion:
Hello @Ericgig,
I would like to work on this issue. I think everything is already included in __all__  in "qutip/solve/piqs.py" and in "semidefinite.py" do all the non-internal functions have to be in __all__ ?
Sorry, `piqs` is fine, when I did the scan, it's `qip.py` that was found. `qip.py` is fine without a it.
`semidefinite.py` does not have a `__all__`, it would be nice that add one.

Yes, all user facing function should be included.




Resolving patch:
diff --git a/qutip/core/semidefinite.py b/qutip/core/semidefinite.py
--- a/qutip/core/semidefinite.py
+++ b/qutip/core/semidefinite.py
@@ -4,6 +4,11 @@
 This module implements internal-use functions for semidefinite programming.
 """
 
+__all__ = [
+    'dnorm_problem',
+    'dnorm_sparse_problem',
+]
+
 import collections
 import functools
 
diff --git a/qutip/measurement.py b/qutip/measurement.py
--- a/qutip/measurement.py
+++ b/qutip/measurement.py
@@ -2,6 +2,15 @@
 Module for measuring quantum objects.
 """
 
+__all__ = [
+    'measurement_statistics_povm',
+    'measurement_statistics_observable',
+    'measure_observable',
+    'measure_povm',
+    'measurement_statistics',
+    'measure'
+]
+
 import numpy as np
 
 from . import Qobj, expect, identity, tensor


Test patch:
Repository: qutip/qutip

Issue:
Clean up qutip.ipynbtools for version 5
### Bug Description

In https://github.com/qutip/qutip-tutorials/pull/42#pullrequestreview-1119409348 @BoxiLi noticed that `qutip.ipynbtools` imports Cython without a `try: ... except: ...` around the import. This results in `qutip.ipynbtools.version_table()` failing even though Cython isn't a required dependency of QuTiP.

We should do a thorough clean up of this module in dev-major and fix this particular issue while we're there.

### Code to Reproduce the Bug

_No response_

### Code Output

_No response_

### Expected Behaviour

`qutip.ipynbtools.version_table()` can be called without Cython installed.

### Your Environment

```shell
QuTiP version: 5.0.0.dev
```


### Additional Context

_No response_


Discussion:

Resolving patch:
diff --git a/qutip/ipynbtools.py b/qutip/ipynbtools.py
--- a/qutip/ipynbtools.py
+++ b/qutip/ipynbtools.py
@@ -39,10 +39,15 @@
 import qutip
 import numpy
 import scipy
-import Cython
 import matplotlib
 import IPython
 
+try:
+    import Cython
+    _cython_available = True
+except ImportError:
+    _cython_available = False
+
 
 def version_table(verbose=False):
     """
@@ -67,13 +72,14 @@ def version_table(verbose=False):
                 ("Numpy", numpy.__version__),
                 ("SciPy", scipy.__version__),
                 ("matplotlib", matplotlib.__version__),
-                ("Cython", Cython.__version__),
                 ("Number of CPUs", available_cpu_count()),
                 ("BLAS Info", _blas_info()),
                 ("IPython", IPython.__version__),
                 ("Python", sys.version),
                 ("OS", "%s [%s]" % (os.name, sys.platform))
                 ]
+    if _cython_available:
+        packages.append(("Cython", Cython.__version__))
 
     for name, version in packages:
         html += "<tr><td>%s</td><td>%s</td></tr>" % (name, version)


Test patch:
diff --git a/qutip/tests/test_ipynbtools.py b/qutip/tests/test_ipynbtools.py
new file mode 100644
--- /dev/null
+++ b/qutip/tests/test_ipynbtools.py
@@ -0,0 +1,24 @@
+from qutip.ipynbtools import version_table
+import pytest
+
+
+@pytest.mark.parametrize('verbose', [False, True])
+def test_version_table(verbose):
+    html_data = version_table(verbose=verbose).data
+    assert "<th>Software</th>" in html_data
+    assert "<th>Version</th>" in html_data
+    assert "<td>QuTiP</td>" in html_data
+    assert "<td>Numpy</td>" in html_data
+    assert "<td>SciPy</td>" in html_data
+    assert "<td>matplotlib</td>" in html_data
+    assert "<td>IPython</td>" in html_data
+    if verbose:
+        assert "<td>Installation path</td>" in html_data
+        if pytest.importorskip("getpass") is not None:
+            assert "<td>User</td>" in html_data
+
+
+@pytest.mark.skipif(not pytest.importorskip("Cython"), reason="cython not installed")
+def test_version_table_with_cython():
+    html_data = version_table().data
+    assert "<td>Cython</td>" in html_data
Repository: qutip/qutip

Issue:
Add Solver options and list them in API doc
### Problem Description

The options that can be passed to the solvers are not entirely clear by looking at the documentation. For example:
![image](https://github.com/qutip/qutip/assets/57414022/2c36d3a5-ca7b-42aa-86d2-cc6f273ed115)
Does not show the explicit options even thought it refers to them in the parameter documentation. For comparison, SESolver does show the options.

This I assume is because the options are inherited from SESolver. But this is not clear either by looking at `MESolver`'s rendered documentation.
![image](https://github.com/qutip/qutip/assets/57414022/0d8d7a4d-6326-4d1a-a25e-d67264906f85)

When using `help(MESolver)` the documentation of the class is much clearer but perhaps too verbose for the online documentation.

### Proposed Solution

I would suggest we render the options property explicitly for each solver. I would also consider rendering the documentation related to the `run` method. If not, we should render at least `Solver` documentation which does not seem to be listed in the class API documentation for solvers.

Affected solvers:
- [ ] MESolver
- [ ] SMESolver
- [ ] SSESolver
- [ ] NonMarkovianMCSolver

### Alternate Solutions

_No response_

### Additional Context

The documentation was taken from qutip 5.0 "ReadTheDocs".


Discussion:
Plus one on adding the `options` and `run` methods to the list of methods rendered in the documentation.
Hi! If I want to address this issue, should I just fork the repo, create my own branch an open a merge request?
Yes, go ahead, we are looking forward to your contribution! 😄

Resolving patch:
diff --git a/qutip/solver/solver_base.py b/qutip/solver/solver_base.py
--- a/qutip/solver/solver_base.py
+++ b/qutip/solver/solver_base.py
@@ -110,8 +110,8 @@ def run(self, state0, tlist, *, args=None, e_ops=None):
 
         For a ``state0`` at time ``tlist[0]`` do the evolution as directed by
         ``rhs`` and for each time in ``tlist`` store the state and/or
-        expectation values in a :cls:`Result`. The evolution method and stored
-        results are determined by ``options``.
+        expectation values in a :class:`Result`. The evolution method and
+        stored results are determined by ``options``.
 
         Parameters
         ----------


Test patch:
Repository: qutip/qutip

Issue:
.pyx file is not deleted after compilation
### Bug Description

In `qutip.qobjevo.compile`, on line 1646, the `.pyx` file created by qutip is registered into the global variable `coeff_files` containing a `_file_list` object using the method `coeff_files.add(file_)`. The `add` method appends a `.pyx` extension on line 60 to the string `file_`
```
self.files += [file_ + ".pyx"]
```
However, the `file_` string generated by `_compiled_coeffs` already has the file extension, judging from the return value of `qutip.qobjevo_codegen._import_str`, on line 54
```
    return coeff_obj, try_file + ext
```
I believe this causes `coeff_files.clean()` on line 1697 of `qutip.qobjevo.compile` to not delete the `.pyx` files after the cython class has been loaded.

### Code to Reproduce the Bug

```shell
import qutip as qt
qt.sesolve([qt.identity(2), [qt.sigmax(), 'sin(t)']], qt.basis(2, 0),
    tlist=[0, 2])
```


### Code Output

```shell
creates the file cqobjevo_compiled_coeff_6095589624050.pyx in the working directory.
```


### Expected Behaviour

The `.pyx` file in the working directory should be deleted.

### Your Environment

```shell
QuTiP Version:      4.7.2
Numpy Version:      1.25.2
Scipy Version:      1.11.2
Cython Version:     0.29.36
Matplotlib Version: 3.7.2
Python Version:     3.10.12
Number of CPUs:     4
BLAS Info:          Generic
OPENMP Installed:   False
INTEL MKL Ext:      False
Platform Info:      Linux (x86_64)
```


### Additional Context

_No response_


Discussion:

Resolving patch:
diff --git a/qutip/qobjevo.py b/qutip/qobjevo.py
--- a/qutip/qobjevo.py
+++ b/qutip/qobjevo.py
@@ -87,7 +87,7 @@ def __init__(self):
         self.files = []
 
     def add(self, file_):
-        self.files += [file_ + ".pyx"]
+        self.files += [file_]
 
     def clean(self):
         to_del = []


Test patch: