Repository: Qiskit/qiskit

Issue:
controlled-phase gate (CPhase) should draw symmetrically
Instead of this:
<img width="55" alt="image" src="https://user-images.githubusercontent.com/8622381/106840450-2d74d800-666e-11eb-97d9-7d0603660492.png">


It should show like this, because it is symmetric (similar to CU1, RZZ, etc.)
<img width="55" alt="image" src="https://user-images.githubusercontent.com/8622381/106840231-bccdbb80-666d-11eb-93ad-22d4c3c525e7.png">

This applies to all circuit drawers.




Discussion:
I can take this one.

Resolving patch:
diff --git a/qiskit/visualization/latex.py b/qiskit/visualization/latex.py
--- a/qiskit/visualization/latex.py
+++ b/qiskit/visualization/latex.py
@@ -250,7 +250,7 @@ def _get_image_depth(self):
                 boxed_gates = ['u0', 'u1', 'u2', 'u3', 'x', 'y', 'z', 'h', 's',
                                'sdg', 't', 'tdg', 'rx', 'ry', 'rz', 'ch', 'cy',
                                'crz', 'cu3', 'id']
-                target_gates = ['cx', 'ccx']
+                target_gates = ['cx', 'ccx', 'cu1', 'cp', 'rzz']
                 if op.name in boxed_gates:
                     self.has_box = True
                 if op.name in target_gates:
@@ -292,8 +292,8 @@ def _get_image_depth(self):
         for layer in self.ops:
             column_width = 1
             for nd in layer:
-                if nd.name in ['cu1', 'rzz']:
-                    column_width = 2
+                if nd.name in ['cu1', 'cp', 'rzz']:
+                    column_width = 3
             columns += column_width
 
         # every 3 characters is roughly one extra 'unit' of width in the cell
@@ -379,7 +379,7 @@ def _build_latex_array(self):
                     if_value = format(op.condition[1],
                                       'b').zfill(self.cregs[if_reg])[::-1]
                 if isinstance(op.op, ControlledGate) and op.name not in [
-                        'ccx', 'cx', 'cz', 'cu1', 'cu3', 'crz',
+                        'ccx', 'cx', 'cz', 'cu1', 'cp', 'cu3', 'crz',
                         'cswap']:
                     qarglist = op.qargs
                     name = generate_latex_label(
@@ -657,20 +657,22 @@ def _build_latex_array(self):
                                         "\\ctrl{" + str(pos_2 - pos_1) + "}"
                                 self._latex[pos_2][column] = \
                                     "\\gate{R_z(%s)}" % (self.parse_params(op.op.params[0]))
-                            elif nm == "cu1":
+                            elif nm in ['cu1', 'cp']:
                                 if cond == '0':
                                     self._latex[pos_1][column] = \
                                         "\\ctrlo{" + str(pos_2 - pos_1) + "}"
                                 elif cond == '1':
                                     self._latex[pos_1][column] = \
                                         "\\ctrl{" + str(pos_2 - pos_1) + "}"
+                                dname = 'U_1' if nm == 'cu1' else 'P'
                                 self._latex[pos_2][column] = "\\control \\qw"
                                 self._latex[min(pos_1, pos_2)][column + 1] = \
-                                    "\\dstick{%s}\\qw" % (self.parse_params(op.op.params[0]))
+                                    "\\dstick{\\hspace{12pt}%s(%s)}\\qw" % \
+                                    (dname, self.parse_params(op.op.params[0]))
                                 self._latex[max(pos_1, pos_2)][column + 1] = "\\qw"
-                                # this is because this gate takes up 2 columns,
+                                # this is because this gate takes up 3 columns,
                                 # and we have just written to the next column
-                                num_cols_used = 2
+                                num_cols_used = 3
                             elif nm == "cu3":
                                 if cond == '0':
                                     self._latex[pos_1][column] = \
@@ -688,12 +690,15 @@ def _build_latex_array(self):
                                     pos_2 - pos_1) + "}"
                                 self._latex[pos_2][column] = "\\control \\qw"
                                 # Based on the \cds command of the qcircuit package
+                                # self._latex[min(pos_1, pos_2)][column + 1] = \
+                                #    "*+<0em,0em>{\\hphantom{zz()}} \\POS [0,0].[%d,0]=" \
+                                #    "\"e\",!C *{zz(%s)};\"e\"+ R \\qw" % \
+                                #    (max(pos_1, pos_2), self.parse_params(op.op.params[0]))
                                 self._latex[min(pos_1, pos_2)][column + 1] = \
-                                    "*+<0em,0em>{\\hphantom{zz()}} \\POS [0,0].[%d,0]=" \
-                                    "\"e\",!C *{zz(%s)};\"e\"+ R \\qw" % \
-                                    (max(pos_1, pos_2), self.parse_params(op.op.params[0]))
+                                    "\\dstick{\\hspace{12pt}ZZ(%s)}\\qw" % \
+                                    self.parse_params(op.op.params[0])
                                 self._latex[max(pos_1, pos_2)][column + 1] = "\\qw"
-                                num_cols_used = 2
+                                num_cols_used = 3
                         else:
                             temp = [pos_1, pos_2]
                             temp.sort(key=int)
@@ -743,18 +748,20 @@ def _build_latex_array(self):
                                         "\\ctrl{" + str(pos_2 - pos_1) + "}"
                                 self._latex[pos_2][column] = \
                                     "\\gate{R_z(%s)}" % (self.parse_params(op.op.params[0]))
-                            elif nm == "cu1":
+                            elif nm in ['cu1', 'cp']:
                                 if cond == '0':
                                     self._latex[pos_1][column] = \
                                         "\\ctrlo{" + str(pos_2 - pos_1) + "}"
                                 elif cond == '1':
                                     self._latex[pos_1][column] = \
                                         "\\ctrl{" + str(pos_2 - pos_1) + "}"
+                                dname = 'U_1' if nm == 'cu1' else 'P'
                                 self._latex[pos_2][column] = "\\control \\qw"
                                 self._latex[min(pos_1, pos_2)][column + 1] = \
-                                    "\\dstick{%s}\\qw" % (self.parse_params(op.op.params[0]))
+                                    "\\dstick{\\hspace{12pt}%s(%s)}\\qw" % \
+                                    (dname, self.parse_params(op.op.params[0]))
                                 self._latex[max(pos_1, pos_2)][column + 1] = "\\qw"
-                                num_cols_used = 2
+                                num_cols_used = 3
                             elif nm == "cu3":
                                 if cond == '0':
                                     self._latex[pos_1][column] = \
@@ -772,12 +779,15 @@ def _build_latex_array(self):
                                     pos_2 - pos_1) + "}"
                                 self._latex[pos_2][column] = "\\control \\qw"
                                 # Based on the \cds command of the qcircuit package
+                                # self._latex[min(pos_1, pos_2)][column + 1] = \
+                                #    "*+<0em,0em>{\\hphantom{zz()}} \\POS [0,0].[%d,0]=" \
+                                #    "\"e\",!C *{zz(%s)};\"e\"+ R \\qw" % \
+                                #    (max(pos_1, pos_2), self.parse_params(op.op.params[0]))
                                 self._latex[min(pos_1, pos_2)][column + 1] = \
-                                    "*+<0em,0em>{\\hphantom{zz()}} \\POS [0,0].[%d,0]=" \
-                                    "\"e\",!C *{zz(%s)};\"e\"+ R \\qw" % \
-                                    (max(pos_1, pos_2), self.parse_params(op.op.params[0]))
+                                    "\\dstick{\\hspace{12pt}ZZ(%s)}\\qw" % \
+                                    self.parse_params(op.op.params[0])
                                 self._latex[max(pos_1, pos_2)][column + 1] = "\\qw"
-                                num_cols_used = 2
+                                num_cols_used = 3
                             else:
                                 start_pos = min([pos_1, pos_2])
                                 stop_pos = max([pos_1, pos_2])
diff --git a/qiskit/visualization/matplotlib.py b/qiskit/visualization/matplotlib.py
--- a/qiskit/visualization/matplotlib.py
+++ b/qiskit/visualization/matplotlib.py
@@ -471,9 +471,9 @@ def _gate(self, xy, fc=None, ec=None, gt=None, sc=None, text='', subtext=''):
     def _sidetext(self, xy, tc=None, text=''):
         xpos, ypos = xy
 
-        # 0.08 = the initial gap, add 1/2 text width to place on the right
+        # 0.11 = the initial gap, add 1/2 text width to place on the right
         text_width = self._get_text_width(text, self._style['sfs'])
-        xp = xpos + 0.08 + text_width / 2
+        xp = xpos + 0.11 + text_width / 2
         self._ax.text(xp, ypos + HIG, text, ha='center', va='top',
                       fontsize=self._style['sfs'], color=tc,
                       clip_on=True, zorder=PORDER_TEXT)
@@ -820,8 +820,13 @@ def _draw_ops(self, verbose=False):
                 else:
                     param_width = 0.0
 
-                if op.name == 'cu1' or op.name == 'rzz' or base_name == 'rzz':
-                    tname = 'U1' if op.name == 'cu1' else 'zz'
+                if op.name in ['cu1', 'cp', 'rzz'] or base_name == 'rzz':
+                    if op.name == 'cu1':
+                        tname = 'U1'
+                    elif op.name == 'cp':
+                        tname = 'P'
+                    else:
+                        tname = 'ZZ'
                     gate_width = (self._get_text_width(tname + ' ()',
                                                        fontsize=sfs)
                                   + param_width) * 1.5
@@ -985,16 +990,21 @@ def _draw_ops(self, verbose=False):
                     self._ctrl_qubit(q_xy[1], fc=ec, ec=ec, tc=tc)
                     self._line(qreg_b, qreg_t, lc=lc, zorder=PORDER_LINE + 1)
 
-                # cu1, rzz, and controlled rzz gates (sidetext gates)
-                elif (op.name == 'cu1' or op.name == 'rzz' or base_name == 'rzz'):
+                # cu1, cp, rzz, and controlled rzz gates (sidetext gates)
+                elif op.name in ['cu1', 'cp', 'rzz'] or base_name == 'rzz':
                     num_ctrl_qubits = 0 if op.name == 'rzz' else op.op.num_ctrl_qubits
                     if op.name != 'rzz':
                         self._set_ctrl_bits(op.op.ctrl_state, num_ctrl_qubits,
                                             q_xy, ec=ec, tc=tc, text=ctrl_text, qargs=op.qargs)
                     self._ctrl_qubit(q_xy[num_ctrl_qubits], fc=ec, ec=ec, tc=tc)
-                    if op.name != 'cu1':
+                    if op.name not in ['cu1', 'cp']:
                         self._ctrl_qubit(q_xy[num_ctrl_qubits + 1], fc=ec, ec=ec, tc=tc)
-                    stext = self._style['disptex']['u1'] if op.name == 'cu1' else 'zz'
+                    if op.name == 'cu1':
+                        stext = self._style['disptex']['u1']
+                    elif op.name == 'cp':
+                        stext = 'P'
+                    else:
+                        stext = 'ZZ'
                     self._sidetext(qreg_b, tc=tc,
                                    text='{}'.format(stext) + ' ' + '({})'.format(param))
                     self._line(qreg_b, qreg_t, lc=lc)
diff --git a/qiskit/visualization/text.py b/qiskit/visualization/text.py
--- a/qiskit/visualization/text.py
+++ b/qiskit/visualization/text.py
@@ -1017,7 +1017,7 @@ def add_connected_gate(instruction, gates, layer, current_cons):
 
         elif isinstance(instruction.op, RZZGate):
             # rzz
-            connection_label = "zz(%s)" % TextDrawing.params_for_label(instruction)[0]
+            connection_label = "ZZ(%s)" % TextDrawing.params_for_label(instruction)[0]
             gates = [Bullet(conditional=conditional), Bullet(conditional=conditional)]
             add_connected_gate(instruction, gates, layer, current_cons)
 
@@ -1037,9 +1037,10 @@ def add_connected_gate(instruction, gates, layer, current_cons):
             if base_gate.name == 'z':
                 # cz
                 gates.append(Bullet(conditional=conditional))
-            elif base_gate.name == 'u1':
+            elif base_gate.name in ['u1', 'p']:
                 # cu1
-                connection_label = TextDrawing.params_for_label(instruction)[0]
+                connection_label = "%s(%s)" % (base_gate.name.upper(),
+                                               TextDrawing.params_for_label(instruction)[0])
                 gates.append(Bullet(conditional=conditional))
             elif base_gate.name == 'swap':
                 # cswap
@@ -1047,7 +1048,7 @@ def add_connected_gate(instruction, gates, layer, current_cons):
                 add_connected_gate(instruction, gates, layer, current_cons)
             elif base_gate.name == 'rzz':
                 # crzz
-                connection_label = "zz(%s)" % TextDrawing.params_for_label(instruction)[0]
+                connection_label = "ZZ(%s)" % TextDrawing.params_for_label(instruction)[0]
                 gates += [Bullet(conditional=conditional), Bullet(conditional=conditional)]
             elif len(rest) > 1:
                 top_connect = '┴' if controlled_top else None


Test patch:
diff --git a/test/ipynb/mpl/references/cswap_rzz.png b/test/ipynb/mpl/references/cswap_rzz.png
Binary files a/test/ipynb/mpl/references/cswap_rzz.png and b/test/ipynb/mpl/references/cswap_rzz.png differ
diff --git a/test/ipynb/mpl/references/iqx_color.png b/test/ipynb/mpl/references/iqx_color.png
Binary files a/test/ipynb/mpl/references/iqx_color.png and b/test/ipynb/mpl/references/iqx_color.png differ
diff --git a/test/ipynb/mpl/references/r_gates.png b/test/ipynb/mpl/references/r_gates.png
Binary files a/test/ipynb/mpl/references/r_gates.png and b/test/ipynb/mpl/references/r_gates.png differ
diff --git a/test/ipynb/mpl/references/u_gates.png b/test/ipynb/mpl/references/u_gates.png
Binary files a/test/ipynb/mpl/references/u_gates.png and b/test/ipynb/mpl/references/u_gates.png differ
diff --git a/test/ipynb/mpl/references/user_style.png b/test/ipynb/mpl/references/user_style.png
Binary files a/test/ipynb/mpl/references/user_style.png and b/test/ipynb/mpl/references/user_style.png differ
diff --git a/test/ipynb/mpl/test_circuit_matplotlib_drawer.py b/test/ipynb/mpl/test_circuit_matplotlib_drawer.py
--- a/test/ipynb/mpl/test_circuit_matplotlib_drawer.py
+++ b/test/ipynb/mpl/test_circuit_matplotlib_drawer.py
@@ -398,6 +398,7 @@ def test_iqx_colors(self):
         circuit.u1(pi/2, 4)
         circuit.cz(5, 6)
         circuit.cu1(pi/2, 5, 6)
+        circuit.cp(pi/2, 5, 6)
         circuit.y(5)
         circuit.rx(pi/3, 5)
         circuit.rzx(pi/2, 5, 6)
@@ -451,6 +452,7 @@ def test_user_style(self):
         circuit.u1(pi/2, 4)
         circuit.cz(5, 6)
         circuit.cu1(pi/2, 5, 6)
+        circuit.cp(pi/2, 5, 6)
         circuit.y(5)
         circuit.rx(pi/3, 5)
         circuit.rzx(pi/2, 5, 6)
diff --git a/test/python/visualization/references/circuit_text_ref_cp437.txt b/test/python/visualization/references/circuit_text_ref_cp437.txt
--- a/test/python/visualization/references/circuit_text_ref_cp437.txt
+++ b/test/python/visualization/references/circuit_text_ref_cp437.txt
@@ -1,13 +1,13 @@
-        ���Ŀ���Ŀ���Ŀ � ���Ŀ���Ŀ�����Ŀ���Ŀ�����Ŀ����Ŀ������Ŀ���Ŀ     �������Ŀ�������Ŀ�������Ŀ�������Ŀ���������Ŀ�����������Ŀ                                                                         �Ŀ      
-q_0: |0>� X ô Y ô Z �İĴ H ô S ô SDG ô T ô TDG ô �X ô �XDG ô I ��|0>Ĵ RX(�) ô RY(�) ô RZ(�) ô U1(�) ô U2(�,�) ô U3(�,�,�) ��X����������������������������������������������������������������������ĴM�������
-        �İ������������ � ������������������������������������������������     ������������������������������������������������������������ � ���Ŀ���Ŀ � ���Ŀ �� �����������Ŀ�������Ŀ�������Ŀ�������Ŀ  �   � ����Ŀ   
-q_1: |0>�İ���������������������������������������������������������������������������������������������������������������������������������XĴ X ô Y ���Ĵ H ����Ĵ U3(�,�,�) ô RZ(�) ô RY(�) ô RX(�) �������X���ĴM����
-          �                                                                                                                                   ����������   �����    �������������������������������������������Ŀ �  � ����Ŀ
-q_2: |0>�İ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ĵ X ��X������ĴM�
-          �                                                                                                                                                                                                 �����    �  � ���
- c_0: 0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
-                                                                                                                                                                                                                        �  � 
- c_1: 0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
-                                                                                                                                                                                                                           � 
- c_2: 0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
-                                                                                                                                                                                                                             
\ No newline at end of file
+        ���Ŀ���Ŀ���Ŀ � ���Ŀ���Ŀ�����Ŀ���Ŀ�����Ŀ����Ŀ������Ŀ���Ŀ     �������Ŀ�������Ŀ�������Ŀ�������Ŀ���������Ŀ�����������Ŀ                                                                             �Ŀ      
+q_0: |0>� X ô Y ô Z �İĴ H ô S ô SDG ô T ô TDG ô �X ô �XDG ô I ��|0>Ĵ RX(�) ô RY(�) ô RZ(�) ô U1(�) ô U2(�,�) ô U3(�,�,�) ��X��������������������������������������������������������������������������ĴM�������
+        �İ������������ � ������������������������������������������������     ������������������������������������������������������������ � ���Ŀ���Ŀ � ���Ŀ �U1(�) �����������Ŀ�������Ŀ�������Ŀ�������Ŀ  �   � ����Ŀ   
+q_1: |0>�İ���������������������������������������������������������������������������������������������������������������������������������XĴ X ô Y ���Ĵ H ��������Ĵ U3(�,�,�) ô RZ(�) ô RY(�) ô RX(�) �������X���ĴM����
+          �                                                                                                                                   ����������   �����        �������������������������������������������Ŀ �  � ����Ŀ
+q_2: |0>�İ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ĵ X ��X������ĴM�
+          �                                                                                                                                                                                                     �����    �  � ���
+ c_0: 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
+                                                                                                                                                                                                                            �  � 
+ c_1: 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
+                                                                                                                                                                                                                               � 
+ c_2: 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
+                                                                                                                                                                                                                                 
\ No newline at end of file
diff --git a/test/python/visualization/references/circuit_text_ref_utf8.txt b/test/python/visualization/references/circuit_text_ref_utf8.txt
--- a/test/python/visualization/references/circuit_text_ref_utf8.txt
+++ b/test/python/visualization/references/circuit_text_ref_utf8.txt
@@ -1,13 +1,13 @@
-        ┌───┐┌───┐┌───┐ ░ ┌───┐┌───┐┌─────┐┌───┐┌─────┐┌────┐┌──────┐┌───┐     ┌───────┐┌───────┐┌───────┐┌───────┐┌─────────┐┌───────────┐                                                                         ┌─┐      
-q_0: |0>┤ X ├┤ Y ├┤ Z ├─░─┤ H ├┤ S ├┤ SDG ├┤ T ├┤ TDG ├┤ √X ├┤ √XDG ├┤ I ├─|0>─┤ RX(π) ├┤ RY(π) ├┤ RZ(π) ├┤ U1(π) ├┤ U2(π,π) ├┤ U3(π,π,π) ├─X───■────■───■───■───■────────■──────────■────────■────────■──────■───■─┤M├──────
-        └─░─┘└───┘└───┘ ░ └───┘└───┘└─────┘└───┘└─────┘└────┘└──────┘└───┘     └───────┘└───────┘└───────┘└───────┘└─────────┘└───────────┘ │ ┌─┴─┐┌─┴─┐ │ ┌─┴─┐ │π ┌─────┴─────┐┌───┴───┐┌───┴───┐┌───┴───┐  │   │ └╥┘┌─┐   
-q_1: |0>──░─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────X─┤ X ├┤ Y ├─■─┤ H ├─■──┤ U3(π,π,π) ├┤ RZ(π) ├┤ RY(π) ├┤ RX(π) ├──■───X──╫─┤M├───
-          ░                                                                                                                                   └───┘└───┘   └───┘    └───────────┘└───────┘└───────┘└───────┘┌─┴─┐ │  ║ └╥┘┌─┐
-q_2: |0>──░─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ X ├─X──╫──╫─┤M├
-          ░                                                                                                                                                                                                 └───┘    ║  ║ └╥┘
- c_0: 0 ═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╩══╬══╬═
-                                                                                                                                                                                                                        ║  ║ 
- c_1: 0 ════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╩══╬═
-                                                                                                                                                                                                                           ║ 
- c_2: 0 ═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╩═
-                                                                                                                                                                                                                             
\ No newline at end of file
+        ┌───┐┌───┐┌───┐ ░ ┌───┐┌───┐┌─────┐┌───┐┌─────┐┌────┐┌──────┐┌───┐     ┌───────┐┌───────┐┌───────┐┌───────┐┌─────────┐┌───────────┐                                                                             ┌─┐      
+q_0: |0>┤ X ├┤ Y ├┤ Z ├─░─┤ H ├┤ S ├┤ SDG ├┤ T ├┤ TDG ├┤ √X ├┤ √XDG ├┤ I ├─|0>─┤ RX(π) ├┤ RY(π) ├┤ RZ(π) ├┤ U1(π) ├┤ U2(π,π) ├┤ U3(π,π,π) ├─X───■────■───■───■───■────────────■──────────■────────■────────■──────■───■─┤M├──────
+        └─░─┘└───┘└───┘ ░ └───┘└───┘└─────┘└───┘└─────┘└────┘└──────┘└───┘     └───────┘└───────┘└───────┘└───────┘└─────────┘└───────────┘ │ ┌─┴─┐┌─┴─┐ │ ┌─┴─┐ │U1(π) ┌─────┴─────┐┌───┴───┐┌───┴───┐┌───┴───┐  │   │ └╥┘┌─┐   
+q_1: |0>──░─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────X─┤ X ├┤ Y ├─■─┤ H ├─■──────┤ U3(π,π,π) ├┤ RZ(π) ├┤ RY(π) ├┤ RX(π) ├──■───X──╫─┤M├───
+          ░                                                                                                                                   └───┘└───┘   └───┘        └───────────┘└───────┘└───────┘└───────┘┌─┴─┐ │  ║ └╥┘┌─┐
+q_2: |0>──░─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ X ├─X──╫──╫─┤M├
+          ░                                                                                                                                                                                                     └───┘    ║  ║ └╥┘
+ c_0: 0 ═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╩══╬══╬═
+                                                                                                                                                                                                                            ║  ║ 
+ c_1: 0 ════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╩══╬═
+                                                                                                                                                                                                                               ║ 
+ c_2: 0 ═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╩═
+                                                                                                                                                                                                                                 
\ No newline at end of file
diff --git a/test/python/visualization/test_circuit_text_drawer.py b/test/python/visualization/test_circuit_text_drawer.py
--- a/test/python/visualization/test_circuit_text_drawer.py
+++ b/test/python/visualization/test_circuit_text_drawer.py
@@ -28,7 +28,7 @@
 from qiskit.visualization.circuit_visualization import _text_circuit_drawer
 from qiskit.extensions import UnitaryGate, HamiltonianGate
 from qiskit.circuit.library import HGate, U2Gate, XGate, CZGate, ZGate, YGate, U1Gate, \
-    SwapGate, RZZGate, CU3Gate, CU1Gate
+    SwapGate, RZZGate, CU3Gate, CU1Gate, CPhaseGate
 
 
 class TestTextDrawerElement(QiskitTestCase):
@@ -479,9 +479,9 @@ def test_text_rzz(self):
         """ rzz drawing. See #1957 """
         expected = '\n'.join(["                          ",
                               "q_0: |0>─■────────────────",
-                              "         │zz(0)           ",
+                              "         │ZZ(0)           ",
                               "q_1: |0>─■───────■────────",
-                              "                 │zz(π/2) ",
+                              "                 │ZZ(π/2) ",
                               "q_2: |0>─────────■────────",
                               "                          "])
         qr = QuantumRegister(3, 'q')
@@ -492,28 +492,43 @@ def test_text_rzz(self):
 
     def test_text_cu1(self):
         """ cu1 drawing. """
-        expected = '\n'.join(["                    ",
-                              "q_0: |0>─■─────■────",
-                              "         │π/2  │    ",
-                              "q_1: |0>─■─────┼────",
-                              "               │π/2 ",
-                              "q_2: |0>───────■────",
-                              "                    "])
+        expected = '\n'.join(["                            ",
+                              "q_0: |0>─■─────────■────────",
+                              "         │U1(π/2)  │        ",
+                              "q_1: |0>─■─────────┼────────",
+                              "                   │U1(π/2) ",
+                              "q_2: |0>───────────■────────",
+                              "                            "])
         qr = QuantumRegister(3, 'q')
         circuit = QuantumCircuit(qr)
         circuit.append(CU1Gate(pi / 2), [qr[0], qr[1]])
         circuit.append(CU1Gate(pi / 2), [qr[2], qr[0]])
         self.assertEqual(str(_text_circuit_drawer(circuit)), expected)
 
+    def test_text_cp(self):
+        """ cp drawing. """
+        expected = '\n'.join(["                          ",
+                              "q_0: |0>─■────────■───────",
+                              "         │P(π/2)  │       ",
+                              "q_1: |0>─■────────┼───────",
+                              "                  │P(π/2) ",
+                              "q_2: |0>──────────■───────",
+                              "                          "])
+        qr = QuantumRegister(3, 'q')
+        circuit = QuantumCircuit(qr)
+        circuit.append(CPhaseGate(pi / 2), [qr[0], qr[1]])
+        circuit.append(CPhaseGate(pi / 2), [qr[2], qr[0]])
+        self.assertEqual(str(_text_circuit_drawer(circuit)), expected)
+
     def test_text_cu1_reverse_bits(self):
         """ cu1 drawing with reverse_bits"""
-        expected = '\n'.join(["                    ",
-                              "q_2: |0>───────■────",
-                              "               │    ",
-                              "q_1: |0>─■─────┼────",
-                              "         │π/2  │π/2 ",
-                              "q_0: |0>─■─────■────",
-                              "                    "])
+        expected = '\n'.join(["                            ",
+                              "q_2: |0>───────────■────────",
+                              "                   │        ",
+                              "q_1: |0>─■─────────┼────────",
+                              "         │U1(π/2)  │U1(π/2) ",
+                              "q_0: |0>─■─────────■────────",
+                              "                            "])
         qr = QuantumRegister(3, 'q')
         circuit = QuantumCircuit(qr)
         circuit.append(CU1Gate(pi / 2), [qr[0], qr[1]])
@@ -905,7 +920,7 @@ def test_rzz_on_wide_layer(self):
         See https://github.com/Qiskit/qiskit-terra/issues/4838"""
         expected = '\n'.join(["                                               ",
                               "q_0: |0>────────────────■──────────────────────",
-                              "                        │zz(π/2)               ",
+                              "                        │ZZ(π/2)               ",
                               "q_1: |0>────────────────■──────────────────────",
                               "        ┌─────────────────────────────────────┐",
                               "q_2: |0>┤ This is a really long long long box ├",
@@ -920,9 +935,9 @@ def test_cu1_on_wide_layer(self):
         """ Test a labeled gate (CU1) in a wide layer.
         See https://github.com/Qiskit/qiskit-terra/issues/4838"""
         expected = '\n'.join(["                                               ",
-                              "q_0: |0>──────────────────■────────────────────",
-                              "                          │π/2                 ",
-                              "q_1: |0>──────────────────■────────────────────",
+                              "q_0: |0>────────────────■──────────────────────",
+                              "                        │U1(π/2)               ",
+                              "q_1: |0>────────────────■──────────────────────",
                               "        ┌─────────────────────────────────────┐",
                               "q_2: |0>┤ This is a really long long long box ├",
                               "        └─────────────────────────────────────┘"])
@@ -2756,17 +2771,17 @@ def test_open_controlled_z(self):
 
     def test_open_controlled_u1(self):
         """Controlled U1 gates."""
-        expected = '\n'.join(["                                       ",
-                              "qr_0: |0>─o─────o─────o─────o─────■────",
-                              "          │0.1  │     │     │     │    ",
-                              "qr_1: |0>─■─────o─────■─────■─────o────",
-                              "                │0.2  │0.3  │     │    ",
-                              "qr_2: |0>───────■─────■─────o─────o────",
-                              "                            │0.4  │    ",
-                              "qr_3: |0>───────────────────■─────■────",
-                              "                                  │0.5 ",
-                              "qr_4: |0>─────────────────────────■────",
-                              "                                       "])
+        expected = '\n'.join(["                                                           ",
+                              "qr_0: |0>─o─────────o─────────o─────────o─────────■────────",
+                              "          │U1(0.1)  │         │         │         │        ",
+                              "qr_1: |0>─■─────────o─────────■─────────■─────────o────────",
+                              "                    │U1(0.2)  │U1(0.3)  │         │        ",
+                              "qr_2: |0>───────────■─────────■─────────o─────────o────────",
+                              "                                        │U1(0.4)  │        ",
+                              "qr_3: |0>───────────────────────────────■─────────■────────",
+                              "                                                  │U1(0.5) ",
+                              "qr_4: |0>─────────────────────────────────────────■────────",
+                              "                                                           "])
         qreg = QuantumRegister(5, 'qr')
         circuit = QuantumCircuit(qreg)
         control1 = U1Gate(0.1).control(1, ctrl_state='0')
@@ -2814,11 +2829,11 @@ def test_open_controlled_rzz(self):
                               "qr_0: |0>─o───────o───────o───────o──────",
                               "          │       │       │       │      ",
                               "qr_1: |0>─■───────o───────■───────■──────",
-                              "          │zz(1)  │       │       │      ",
+                              "          │ZZ(1)  │       │       │      ",
                               "qr_2: |0>─■───────■───────■───────o──────",
-                              "                  │zz(1)  │zz(1)  │      ",
+                              "                  │ZZ(1)  │ZZ(1)  │      ",
                               "qr_3: |0>─────────■───────■───────■──────",
-                              "                                  │zz(1) ",
+                              "                                  │ZZ(1) ",
                               "qr_4: |0>─────────────────────────■──────",
                               "                                         "])
         qreg = QuantumRegister(5, 'qr')