
    i                     n    S r SSKrSSKJr  / SQrSqS r\" SS9SS	 j5       rS
 r	S r
S rS rS rS rg)zQ
Required functions for optimized contractions of numpy arrays using tensorflow.
    N   )to_backend_cache_wrap)to_tensorflowbuild_expressionevaluate_constantsc                  $   [         c<  SS Kn  U R                  5       nU R                  R                  5       nU(       d  SnXU4q [         $ ! [         a;     U R                  R
                  R                  5       n N^! [         a    Sn  Nmf = ff = f)Nr   Fcpu)	_CACHED_TF_DEVICE
tensorflowexecuting_eagerlyAttributeErrorcontribeagerin_eager_modetestgpu_device_name)tfr   devices      ^/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/opt_einsum/backends/tensorflow.py_get_tensorflow_and_devicer      s      	((*E ((*F-  	

((668! 	s)   A
 

B$A;;BB
BBT)	constantsc                    [        5       u  p#nU(       aM  [        U [        R                  5      (       a,  UR	                  U5         UR                  U 5      sSSS5        $ U $ [        U [        R                  5      (       a>  U(       a  UR                  U 5      $ UR                  U R                  U R                  5      $ U $ ! , (       d  f       U $ = f)zDConvert a numpy array to a ``tensorflow.placeholder`` instance.
    N)	r   
isinstancenpndarrayr   convert_to_tensorplaceholderdtypeshape)arrayconstantr   r   r   s        r   r   r   %   s     34BeRZZ((6"++E2 #" %$$''..~~ekk5;;77L #" s   C
Cc                    ^^^ [        5       u  m  nU  Vs/ s H  n[        U5      PM     snmUR                  TSS9mUUU4S jnU$ s  snf )zBBuild a tensorflow function based on ``arrays`` and ``expr``.
    r   backendc                     > TR                  5       n[        TU 5       VVs0 s H#  u  p#UR                  R                  S:X  d  M!  X#_M%     nnnUR	                  TUS9$ s  snnf )NPlaceholder)	feed_dict)get_default_sessionzipoptyperun)arrayssessionpar'   graphplaceholdersr   s        r   tensorflow_contract3build_expression_graph.<locals>.tensorflow_contractF   s]    ((*&),&?^&?da14499P]C]TQT&?	^{{5I{66 _s    AA)r   r   	_contract)r-   expr_r    r3   r1   r2   r   s        @@@r   build_expression_graphr8   >   sP     *+HB16<=fUM%(f=LNN<N>E7  >s   Ac                 X   [        5       u  n  nU  Vs/ s H  n[        USS9PM     n nU" U SSS.6u  pVUR                  5       n[        UR	                  U Vs/ s H	  oDc  M  UPM     sn5      5      nU Vs/ s H  oDc  SO[        [        U5      SS9PM     nnXV4$ s  snf s  snf s  snf )zConvert constant arguments to tensorflow constants, and perform any
possible constant contractions. Requires evaluating a tensorflow graph.
T)r!   r   r$   r   N)r   r   r(   iterr,   next)	const_arraysr6   r   r7   xnew_opsnew_contraction_listr.   
new_constss	            r   evaluate_constants_graphrB   O   s     *+HB1 >JJ\M!d3\LJ$(,ae$f!G $$&Ggkkg"Gg1g"GHIJ^ef^eYZytmD4Dt&TT^eGf(( K
 #Hfs   BB""B"7!B'c                    ^ U4S jnU$ )zHBuild a eager tensorflow function based on ``arrays`` and ``expr``.
    c                  ~   > TR                  U  Vs/ s H  n[        U5      PM     snSS9R                  5       $ s  snf )Nr   r#   )r5   r   numpy)r-   r>   r6   s     r   tensorflow_eager_contract9build_expression_eager.<locals>.tensorflow_eager_contractg   s6    ~~@A}Q/@,~W]]__@s   : )r7   r6   rF   s    ` r   build_expression_eagerrI   d   s    ` %$    c                 R    U" U  Vs/ s H  n[        U5      PM     snSSS.6$ s  snf )zgConvert constant arguments to tensorflow_eager arrays, and perform any
possible constant contractions.
r   Tr:   )r   )r=   r6   r>   s      r   evaluate_constants_eagerrL   m   s+     L9Lq-"L9<dhii9s   $c                 R    [        5       u    p#U(       a  [        O[        nU" X5      $ N)r   rI   r8   )r-   r6   r7   r   fns        r   r   r   w   s$    ,.KAq#(	.DBfrJ   c                 R    [        5       u    p#U(       a  [        O[        nU" X5      $ rN   )r   rL   rB   )r=   r6   r7   r   rO   s        r   r   r   }   s$    ,.KAq%*	!0HBl!!rJ   )F)__doc__rE   r   sharingr   __all__r
   r   r   r8   rB   rI   rL   r   r   rH   rJ   r   <module>rT      sZ     +
E . & '0")*%j"rJ   