
    z	i*                    >    S r SSKJr  SSKrSSKJr  SSKJr  SS jr	g)	z(
Random CNOTDihedral operator functions
    )annotationsN)default_rng   )CNOTDihedralc           	        Uc  [         R                  R                  5       nO7[        U[         R                  R                  5      (       a  UnO[        U5      n[        U S9nUR                  SU S9nXCR                  l        SUR                  S[        X S-
  -  S-  5      S9-  nXSR                  l
        SUR                  S[        X S-
  -  U S-
  -  S-  5      S9-  nXcR                  l        SS	KJn  UR                  S
S[         R                  S9S   nU" XS9R                  [        SS9nXl        UR                  SU S9n	Xl        U$ )a  Return a random CNOTDihedral element.

Args:
    num_qubits (int): the number of qubits for the CNOTDihedral object.
    seed (int or RandomState): Optional. Set a fixed seed or
                               generator for RNG.
Returns:
    CNOTDihedral: a random CNOTDihedral element.
)
num_qubits   )size      r      r   )random_invertible_binary_matrixi )r
   dtype)seedF)copy)nprandomr   
isinstance	Generatorr   integerspolyweight_1intweight_2weight_3qiskit.synthesis.linearr   uint64astypelinearshift)
r   r   rngelemr   r   r   r   r   r    s
             g/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/quantum_info/operators/dihedral/random.pyrandom_cnotdihedralr$      s:    |ii##%	D"))--	.	.$:.D ||AJ|/H!II3<<Jq.,IA,M(N<OOH!II3<<Jq.,IZZ[^,\_`,`(a<bbH!II <<Qbii<8;D,ZCJJ3UZJ[FK LLL,EJK    )N)
__doc__
__future__r   numpyr   numpy.randomr   dihedralr   r$    r%   r#   <module>r,      s    #  $ "*r%   