o
    GZh#                     @   s  d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZmZ g dZG dd deZG dd deZG dd deZG dd deZedZedZedZ edZ!G dd deZ"G dd deZ#G dd deZ$G dd  d ee$Z%G d!d" d"ee$Z&G d#d$ d$eZ'G d%d& d&eZ(d'd( Z)d)d* Z*d+d, Z+d-S ).zuOperators and states for 1D cartesian position and momentum.

TODO:

* Add 3D classes to mappings in operatorset.py

    )Ipi)S)exp)sqrt)
DiracDelta)Interval)hbar)L2)DifferentialOperatorHermitianOperator)KetBraState)XOpYOpZOpPxOpXYZPxXKetXBraPxKetPxBraPositionState3DPositionKet3DPositionBra3Dc                   @   sN   e Zd ZdZedd Zedd Zdd Zdd	 Zd
d Z	ddddZ
dS )r   z1D cartesian position operator.c                 C      dS )N)r    selfr    r    N/var/www/auris/lib/python3.10/site-packages/sympy/physics/quantum/cartesian.pydefault_args/      zXOp.default_argsc                 C      t ttjtjS Nr
   r   r   NegativeInfinityInfinityr"   argsr    r    r#   _eval_hilbert_space3      zXOp._eval_hilbert_spacec                 C   s   t t S r'   )r   r	   )r"   otherr    r    r#   _eval_commutator_PxOp7   s   zXOp._eval_commutator_PxOpc                 K   
   |j | S r'   )positionr"   Zketoptionsr    r    r#   _apply_operator_XKet:      
zXOp._apply_operator_XKetc                 K   r1   r'   )
position_xr3   r    r    r#   _apply_operator_PositionKet3D=   r6   z!XOp._apply_operator_PositionKet3D   indexc          	      K   sF   |j d|d}|d j}|d j}t|}t|| }tt ||  S N   )start_indexr   r9   )_enumerate_statemomentumr   r   r   r	   	r"   Zbasisr;   r4   ZstatesZcoord1Zcoord2ddeltar    r    r#   _represent_PxKet@   s   

zXOp._represent_PxKetN)__name__
__module____qualname____doc__classmethodr$   r-   r0   r5   r8   rD   r    r    r    r#   r   ,   s    

r   c                   @   0   e Zd ZdZedd Zedd Zdd ZdS )	r   z8 Y cartesian coordinate operator (for 2D or 3D systems) c                 C   r   )N)r   r    r!   r    r    r#   r$   M   r%   zYOp.default_argsc                 C   r&   r'   r(   r+   r    r    r#   r-   Q   r.   zYOp._eval_hilbert_spacec                 K   r1   r'   )
position_yr3   r    r    r#   r8   U   r6   z!YOp._apply_operator_PositionKet3DNrE   rF   rG   rH   rI   r$   r-   r8   r    r    r    r#   r   J       

r   c                   @   rJ   )	r   z2 Z cartesian coordinate operator (for 3D systems) c                 C   r   )N)r   r    r!   r    r    r#   r$   \   r%   zZOp.default_argsc                 C   r&   r'   r(   r+   r    r    r#   r-   `   r.   zZOp._eval_hilbert_spacec                 K   r1   r'   )
position_zr3   r    r    r#   r8   d   r6   z!ZOp._apply_operator_PositionKet3DNrL   r    r    r    r#   r   Y   rM   r   c                   @   s>   e Zd ZdZedd Zedd Zdd Zdd	d
dZdS )r   z1D cartesian momentum operator.c                 C   r   )N)r   r    r!   r    r    r#   r$   o   r%   zPxOp.default_argsc                 C   r&   r'   r(   r+   r    r    r#   r-   s   r.   zPxOp._eval_hilbert_spacec                 K   r1   r'   )r@   r3   r    r    r#   _apply_operator_PxKetw   r6   zPxOp._apply_operator_PxKetr9   r:   c          	      K   sH   |j d|d}|d j}|d j}t|}t|| }t t ||  S r<   )r?   r2   r   r   r   r	   rA   r    r    r#   _represent_XKetz   s   

zPxOp._represent_XKetN)	rE   rF   rG   rH   rI   r$   r-   rO   rP   r    r    r    r#   r   l   s    

r   r   r   r   r   c                   @   `   e Zd ZdZedd Zdd Zedd Zedd	 Ze	d
d Z
dd Zdd Zdd ZdS )r   z1D cartesian position eigenket.c                 K      | j | gt|R i |S r'   __new___lowercase_labelsr"   opr4   r    r    r#   _operators_to_state      zXKet._operators_to_statec                 K      |j |gt| R i |S r'   rT   _uppercase_labelsr"   Zop_classr4   r    r    r#   _state_to_operators   
   zXKet._state_to_operatorsc                 C   r   N)xr    r!   r    r    r#   r$      r%   zXKet.default_argsc                 C      t S r'   )r   r!   r    r    r#   
dual_class   r%   zXKet.dual_classc                 C   
   | j d S zThe position of the state.r   labelr!   r    r    r#   r2         
zXKet.positionc                 K   s   t | |fi |S r'   _enumerate_continuous_1D)r"   
num_statesr4   r    r    r#   r?      s   zXKet._enumerate_statec                 K      t | j|j S r'   )r   r2   r"   brahintsr    r    r#   _eval_innerproduct_XBra      zXKet._eval_innerproduct_XBrac                 K   s*   t t | j |j t tdt t  S Nr=   )r   r   r2   r@   r	   r   r   rm   r    r    r#   _eval_innerproduct_PxBra   s   *zXKet._eval_innerproduct_PxBraN)rE   rF   rG   rH   rI   rX   r^   r$   rc   propertyr2   r?   rp   rs   r    r    r    r#   r          



r   c                   @   4   e Zd ZdZedd Zedd Zedd ZdS )	r   z1D cartesian position eigenbra.c                 C   r   r`   r    r!   r    r    r#   r$      r%   zXBra.default_argsc                 C   rb   r'   )r   r!   r    r    r#   rc      r%   zXBra.dual_classc                 C   rd   re   rf   r!   r    r    r#   r2      rh   zXBra.positionN)	rE   rF   rG   rH   rI   r$   rc   rt   r2   r    r    r    r#   r          

r   c                   @   sT   e Zd ZdZedd Zdd Zedd Zedd	 Z	ed
d Z
edd ZdS )r   z2 Base class for 3D cartesian position eigenstates c                 K   rR   r'   rS   rV   r    r    r#   rX      rY   z#PositionState3D._operators_to_statec                 K   rZ   r'   r[   r]   r    r    r#   r^      r_   z#PositionState3D._state_to_operatorsc                 C   r   )N)ra   yzr    r!   r    r    r#   r$      r%   zPositionState3D.default_argsc                 C   rd   )z The x coordinate of the state r   rf   r!   r    r    r#   r7      rh   zPositionState3D.position_xc                 C   rd   )z The y coordinate of the state r9   rf   r!   r    r    r#   rK      rh   zPositionState3D.position_yc                 C   rd   )z The z coordinate of the state r=   rf   r!   r    r    r#   rN      rh   zPositionState3D.position_zN)rE   rF   rG   rH   rI   rX   r^   r$   rt   r7   rK   rN   r    r    r    r#   r      s    



r   c                   @   s$   e Zd ZdZdd Zedd ZdS )r   z  3D cartesian position eigenket c                 K   s<   | j |j  }| j|j }| j|j }t|t| t| S r'   )r7   rK   rN   r   )r"   rn   r4   Zx_diffZy_diffZz_diffr    r    r#    _eval_innerproduct_PositionBra3D   s   z.PositionKet3D._eval_innerproduct_PositionBra3Dc                 C   rb   r'   )r   r!   r    r    r#   rc      r%   zPositionKet3D.dual_classN)rE   rF   rG   rH   rz   rI   rc   r    r    r    r#   r      s
    r   c                   @   s   e Zd ZdZedd ZdS )r   z  3D cartesian position eigenbra c                 C   rb   r'   )r   r!   r    r    r#   rc      r%   zPositionBra3D.dual_classN)rE   rF   rG   rH   rI   rc   r    r    r    r#   r      s    r   c                   @   rQ   )r   z1D cartesian momentum eigenket.c                 K   rR   r'   rS   rV   r    r    r#   rX      rY   zPxKet._operators_to_statec                 K   rZ   r'   r[   r]   r    r    r#   r^     r_   zPxKet._state_to_operatorsc                 C   r   N)Zpxr    r!   r    r    r#   r$     r%   zPxKet.default_argsc                 C   rb   r'   )r   r!   r    r    r#   rc     r%   zPxKet.dual_classc                 C   rd   zThe momentum of the state.r   rf   r!   r    r    r#   r@     rh   zPxKet.momentumc                 O   s   t | g|R i |S r'   ri   )r"   r,   r4   r    r    r#   r?     s   zPxKet._enumerate_statec                 K   s(   t t| j |j t tdt t  S rr   )r   r   r@   r2   r	   r   r   rm   r    r    r#   rp     s   (zPxKet._eval_innerproduct_XBrac                 K   rl   r'   )r   r@   rm   r    r    r#   rs     rq   zPxKet._eval_innerproduct_PxBraN)rE   rF   rG   rH   rI   rX   r^   r$   rc   rt   r@   r?   rp   rs   r    r    r    r#   r      ru   r   c                   @   rv   )	r   z1D cartesian momentum eigenbra.c                 C   r   r{   r    r!   r    r    r#   r$   "  r%   zPxBra.default_argsc                 C   rb   r'   )r   r!   r    r    r#   rc   &  r%   zPxBra.dual_classc                 C   rd   r|   rf   r!   r    r    r#   r@   *  rh   zPxBra.momentumN)	rE   rF   rG   rH   rI   r$   rc   rt   r@   r    r    r    r#   r     rw   r   c                  O   s   | d }| d }|j }|dg }t|dkr&|dd}tt||| }dd tt|D }t|D ]\}}	|jd }
|t|
d t|	 fi |||< q5|S )Nr   r9   
index_listr>   c                 S   s   g | ]}d qS r   r    ).0ir    r    r#   
<listcomp>>  s    z,_enumerate_continuous_1D.<locals>.<listcomp>_)	__class__poplenlistrange	enumerater,   str)r,   r4   staterk   Zstate_classr}   r>   Zenum_statesr   indrg   r    r    r#   rj   4  s   
&rj   c                 C   s   t | ts| g} dd | D S )Nc                 S   s   g | ]}t |jd   qS r~   )r   rg   lowerr   argr    r    r#   r   K  s    z%_lowercase_labels.<locals>.<listcomp>
isinstanceset)opsr    r    r#   rU   G  s   
rU   c                 C   s"   t | ts| g} dd | D }|S )Nc                 S   s8   g | ]}t |jd  d   t |jd  dd  qS )r   r9   N)r   rg   upperr   r    r    r#   r   R  s
    z%_uppercase_labels.<locals>.<listcomp>r   )r   new_argsr    r    r#   r\   N  s   
r\   N),rH   Zsympy.core.numbersr   r   Zsympy.core.singletonr   Z&sympy.functions.elementary.exponentialr   Z(sympy.functions.elementary.miscellaneousr   Z'sympy.functions.special.delta_functionsr   Zsympy.sets.setsr   Zsympy.physics.quantum.constantsr	   Zsympy.physics.quantum.hilbertr
   Zsympy.physics.quantum.operatorr   r   Zsympy.physics.quantum.stater   r   r   __all__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rj   rU   r\   r    r    r    r#   <module>   s<    ""