[4.2.1] CZ should be CX in VQLS demo
https://github.com/Qiskit/qiskit-textbook/blob/ade2870a2a24a7d97a790737c8b45e7999fce828/content/ch-paper-implementations/vqls.ipynb#L1582
I think one of the .cz( should be .cx(
My reading of this code was that the gate_type bi-list is a bitmask for whether to perform X and then whether to perform Z (Y being the case where both are 1). At least that's my understanding...

@singular-value have you tested this? When I apply this change my results don't seem to converge. Admittedly I need to bring myself up to speed with VQLS.
You're right that it doesn't converge if I change one of the CZs to a CX (by the way, the in-browser interactivity is amazing, nice work!).
But I think it's still off conceptually. My understanding is that gate_set is supposed to two lists: the first one should indicate which qubits we perform a (controlled) X on, and the second one should indicate which qubits we perform a (controlled) Z on. Since Y = -XZ, this makes gate_set universal for {X,Y,Z}^N. For example, if we wanted X on the first qubit, Y on the second qubit, and Z on the third qubit, we'd set gate_set to [[1, 1, 0], [0, 1, 1]].
Context for my interpretation of gate_set's meaning:

Right now, the code is treating both lists inside gate_set as 'which qubits we perform a (controlled) Z on", which is redundant and misses out on the (controlled) X's.
Disclaimer: I could be totally wrong about this.