
    i                    \    d dl mZ d dlmZ d dlmZ d dlZe G d d                      ZdS )    )annotations)	dataclass)IterableNc                  h    e Zd ZU ded<   ded<   ded<   ded<   ddZedd            ZddZddZdS )TightBindingModelstrnameint	dimension
np.ndarrayonsitez#list[tuple[np.ndarray, np.ndarray]]hoppingsreturnNonec                   t          j        | j        t           j                  | _        g }| j        D ]S\  }}|                    t          j        |t                    t          j        |t           j                  f           T|| _        | j        j        dk    s&| j        j        d         | j        j        d         k    rt          d          | j
        dk    rt          d          | j        D ]I\  }}|j        | j
        fk    rt          d          |j        | j        j        k    rt          d          Jd S )	Ndtype   r      zonsite must be a square matrixzdimension must be positivez+displacement vector has the wrong dimensionz,hopping matrix shape must match onsite shape)npasarrayr   
complex128r   appendfloatndimshape
ValueErrorr   )self
normalizeddisplacementhoppings       /D:\ml\projects\myproj\tight binding\tb\model.py__post_init__zTightBindingModel.__post_init__   sM   jBMBBB:<
%)] 	 	!L'J|5999Jwbm<<<    #;q  DK$5a$8DK<Ma<P$P$P=>>>>Q9:::%)] 	Q 	Q!L'!dn%666 !NOOO} 111 !OPPP 2	Q 	Q    c                @    t          | j        j        d                   S )Nr   )r
   r   r   )r   s    r"   num_orbitalszTightBindingModel.num_orbitals'   s    4;$Q'(((r$   k_pointIterable[float]c                   t          j        t          |          t                    }|j        | j        fk    rt          d          | j                                        }| j	        D ]h\  }}t          j
        dt          j        ||          z            }|||z  z  }||                                j        t          j        |          z  z  }i|S )Nr   zk-point has the wrong dimensiony              ?)r   r   tupler   r   r   r   r   copyr   expdotconjT)r   r'   k_vectorhamiltonianr    r!   phases          r"   r1   zTightBindingModel.hamiltonian+   s    :eGnnE:::>dn...>???k&&((%)] 	= 	=!L'F2x > >>??E7U?*K7<<>>+bgenn<<KKr$   c                p    t           j                            |                     |                    j        S )N)r   linalgeigvalshr1   real)r   r'   s     r"   eigenvalueszTightBindingModel.eigenvalues7   s)    y!!$"2"27";";<<AAr$   N)r   r   )r   r
   )r'   r(   r   r   )	__name__
__module____qualname____annotations__r#   propertyr&   r1   r7    r$   r"   r   r   	   s         IIINNN1111Q Q Q Q. ) ) ) X)
 
 
 
B B B B B Br$   r   )	
__future__r   dataclassesr   typingr   numpyr   r   r=   r$   r"   <module>rB      s    " " " " " " ! ! ! ! ! !           .B .B .B .B .B .B .B .B .B .Br$   