
    oVhB              
          d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZmZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d d	l/m0Z0m1Z1 d d
l2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d dlCmEZE  ed      xZFZGeGrd dlHZHdeHj                  d<    e;ddd      ZJ e;ddd      ZK e;ddd      ZL e;ddd      ZM ed      \  ZNZOZPZQeFA eRd dd      D  cg c]  }  eS eR| | dz                c} ZTeFj                  eT      ZV e3eT      ZWd,dZXd,dZYd ZZd fdZ[d  fd!Z\d" Z]eEd#        Z^d$ Z_d% Z`eEd&        Zad' Zbd( Zcd) Zdd* Zed+ Zfyc c} w )-    N)
Derivative)symbols)	Piecewise)ArrayTensorProductArrayAddPermuteDimsArrayDiagonal)EqNeGeGtLeLt)import_module)Absceilingexpfloorsignsinasinsqrtcosacostanatanatan2coshacoshsinhasinhtanhatanhreimargerfloggammalog)isnanisinf)Matrix
MatrixBaseeye
randMatrix)DeterminantHadamardProductInverseMatrixSymbolTrace)tensorflow_code)convert_matrix_to_array)lambdify)skip)XFAIL
tensorflow2TF_CPP_MIN_LOG_LEVELM   NPQzx y z t	   c           	         t        | |d      }|s.| D cg c]"  }t        |j                  |j                        $ }}n0| D cg c]%  }t        |j                  |j                        dz  ' }}t        j                         }d }|j                         5  |D cg c]  }t        t        |             }	}t        j                  j                  j                  |      }
|
j                   ||	       }d d d        |j                  t        t        | |                  }|j!                         }|j"                  r0t%        |t&              s|j)                         }|j+                         }|s||k(  j-                         sJ y |D cg c]  }|D ]  }|  }}}|D cg c]  }|D ]  }|  }}}t-        d t        ||      D              sJ y c c}w c c}w c c}w # 1 sw Y   xY wc c}}w c c}}w )Nr:   g      Y@graphc              3      K   | ];  \  }}t        ||z
        d dt        t        t        |      d             z
   z  k   = yw
      Nabsintr)   .0abs      T/home/dcms/DCMS/lib/python3.12/site-packages/sympy/printing/tests/test_tensorflow.py	<genexpr>z-_compare_tensorflow_matrix.<locals>.<genexpr>G   D      L9=AC!HrQs3s1vr?33444L   AA)r7   r/   rowscolstfGraph
as_defaultevalr5   compatv1Sessionrunsubsdictzipdoit	is_Matrix
isinstancer-   as_explicittolistall	variablesexpr	use_floatfvrandom_matricesrE   rirandom_variablessessionerows                rQ   _compare_tensorflow_matrixru   -   s   D,/A?HI!:affaff5IIDMNq:affaff5d:NNHHJEA				 .>MND!34NN)),,&&U&3KK+,-.
 			$s9o678A	A{{!Z(AHHJQ||~~)3S)Q)Q)))3S)Q)Q)) LADQL L 	L L/ JN
 O. . *)s6   'G*GG"G4A G"	G.!G4G""G+c           	         t        | |d      }|s1| D cg c]%  }t        |j                  |j                        dz  ' }}n0| D cg c]%  }t        |j                  |j                        dz  ' }}t        j                         }d }|j                         5  |D cg c]  }t        t        |             }	}t        j                  j                  j                  |      }
|
j                   ||	       }d d d        |j                  t        t        | |                  }|j!                         }|j"                  r0t%        |t&              s|j)                         }|j+                         }|s||k(  j-                         sJ y |D cg c]  }|D ]  }|  }}}|D cg c]  }|D ]  }|  }}}t-        d t        ||      D              sJ y c c}w c c}w c c}w # 1 sw Y   xY wc c}}w c c}}w )Nr:   rI   gQ	@rD   c              3      K   | ];  \  }}t        ||z
        d dt        t        t        |      d             z
   z  k   = ywrG   rJ   rM   s      rQ   rR   z5_compare_tensorflow_matrix_inverse.<locals>.<genexpr>g   rS   rT   )r7   r.   rU   rV   rW   rX   rY   rZ   r5   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   r-   re   rf   rg   rh   s                rQ   "_compare_tensorflow_matrix_inverserx   M   s   D,/A:CDQ3qvvqvv.q0DD=FG3qvvqvv.t3GGHHJEA				 .>MND!34NN)),,&&U&3KK+,-.
 			$s9o678A	A{{!Z(AHHJQ||~~)3S)Q)Q)))3S)Q)Q)) LADQL L 	L L/ EG
 O. . *)s6   *G*GG%G 7A G%G1$G7 G%%G.c           	      p   t        | |d      }| D cg c]3  }t        |j                  |j                        j	                         dz  5 }}t
        j                         }d }|j                         5  |D cg c]  }t        t        |             }}t
        j                  j                  j                  |      }	|	j                   ||       }d d d        |j                  t        t!        | |                  }
|
j#                         }
t%        ||
z
        dk  sJ y c c}w c c}w # 1 sw Y   [xY w)Nr:   d   rD   ư>)r7   r/   rU   rV   evalfrW   rX   rY   rZ   r5   r[   r\   r]   r^   r_   r`   ra   rb   rK   )ri   rj   rl   rm   rn   rE   ro   rp   rq   rr   rs   s              rQ   !_compare_tensorflow_matrix_scalarr}   k   s   D,/A:CE56
166166"((*S0EO E HHJEA				 .>MND!34NN)),,&&U&3KK+,-.
 			$s9o678A	Aqs8fE O. .s$   8D"2D,7D'A D,'D,,D5c                  .    t        j                  dd      S Nr   rH   randomrandint     rQ   <lambda>r   }       2!6 r   c           	      4   t        | |d      }| D cg c]	  } |        }}t        j                         }d }|j                         5  |D cg c]  }t	        t        |             }	}t        j                  j                  j                  |      }
|
j                   ||	       }d d d        |j                  t        t        | |                  j                         j                         }t        ||z
        dk  sJ y c c}w c c}w # 1 sw Y   gxY w)Nr:   rD   r{   )r7   rW   rX   rY   rZ   r5   r[   r\   r]   r^   r_   r`   ra   r|   rb   rK   ri   rj   rngrl   rm   rvsrE   ro   rp   tf_rvsrr   rs   s               rQ   _compare_tensorflow_scalarr   |   s    D,/A#
$Q35
$C
$HHJEA				 $478q$q)*88)),,&&U&3KK6
#$
 			$s9c*+,22499;Aqs8f %
 9$ $s$   DDD	(A D	DDc                  .    t        j                  dd      S r   r   r   r   rQ   r   r      r   r   c           	          t        | |d      }| D cg c]	  } |        }}t        j                         }d }|j                         5  |D cg c]  }t	        t        |             }	}t        j                  j                  j                  |      }
|
j                   ||	       }d d d        |j                  t        t        | |                  j                         }||k(  sJ y c c}w c c}w # 1 sw Y   MxY w)Nr:   rD   )r7   rW   rX   rY   rZ   r5   r[   r\   r]   r^   r_   r`   ra   rb   r   s               rQ   _compare_tensorflow_relationalr      s    D,/A#
$Q35
$C
$HHJEA				 $478q$q)*88)),,&&U&3KK6
#$
 			$s9c*+,113A6M6 %
 9$ $s$   C*C4C/(A C4/C44C=c                      t        t        d            dk(  sJ t        t        t	        t
              gt        t              t         gg      } t        |       dk(  sJ y )Nr>   z6tensorflow.constant([[1, 0, 0], [0, 1, 0], [0, 0, 1]])zPtensorflow.Variable([[x, tensorflow.math.sin(y)], [tensorflow.math.exp(z), -t]]))	r5   r.   r,   xr   yr   ztrj   s    rQ   test_tensorflow_printingr      sb    3q6"@A A A As1v;Q!-.D4 	.. . .r   c                     t         st        d       t        t              } t	        |       dk(  sJ t        t        f|        t        t              } t	        |       dk(  sJ t        t        f|        t        t              } t	        |       dk(  sJ t        t        f| d        t        t              } t	        |       dk(  sJ t        t        f| d        t        t              } t	        |       d	k(  sJ t        t        f| d
        t        t              } t	        |       dk(  sJ t        t        f| d        t        dz  } t	        |       dk(  sJ t        t        f| d        t        t              } t	        |       dk(  sJ t        t        f| d        t        t              } t	        |       dk(  sJ t        t        f| d        t        t              } t	        |       dk(  sJ t        t        f| d        t        t              } t	        |       dk(  sJ t        t        f| d        t        t              } t	        |       dk(  sJ t        t        f| d        t!        t              } t	        |       dk(  sJ t        t        f| d        t#        t$        t              } t	        |       dk(  sJ t        t$        t        f| d        t'        t              } t	        |       dk(  sJ t        t        f| d        t)        t              } t	        |       d k(  sJ t        t        f| d!        t+        t              } t	        |       d"k(  sJ t        t        f| d#        t-        t              } t	        |       d$k(  sJ t        t        f| d%        t/        t              } t	        |       d&k(  sJ t        t        f| d'        t1        t              } t	        |       d(k(  sJ t        t        f| d)        t3        t              } t	        |       d*k(  sJ t        t        f| d+        t5        t              } t	        |       d,k(  sJ t        t        f| d-        y ).NTensorFlow not installedztensorflow.math.abs(x)ztensorflow.math.sign(x)ztensorflow.math.ceil(x)c                  *    t        j                          S Nr   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>       v}} r   )r   ztensorflow.math.floor(x)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.exp(x)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.sqrt(x)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   rI   ztensorflow.math.pow(x, 4)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.cos(x)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.acos(x)c                  .    t        j                  dd      S )Nr   gffffff?r   uniformr   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   s    v~~a7N r   ztensorflow.math.sin(x)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.asin(x)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.tan(x)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.atan(x)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.atan2(y, x)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   s     r   ztensorflow.math.cosh(x)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.acosh(x)c                  .    t        j                  dd      S N      r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>       v~~a7K r   ztensorflow.math.sinh(x)c                  .    t        j                  dd      S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.asinh(x)c                  .    t        j                  dd      S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.tanh(x)c                  .    t        j                  dd      S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.atanh(x)c                  .    t        j                  dd      S )Ng      g      ?r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>   s    sB 7 r   ztensorflow.math.erf(x)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>       r   ztensorflow.math.lgamma(x)c                  *    t        j                          S r   r   r   r   rQ   r   z&test_tensorflow_math.<locals>.<lambda>  r   r   )rW   r8   r   r   r5   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r'   r(   r   s    rQ   test_tensorflow_mathr      s   '(q6D4 $<<<<tT*7D4 $====tT*1:D4 $====tT/FG8D4 $>>>>tT/FGq6D4 $<<<<tT/FG7D4 $====tT/FG6D4 $????tT/FGq6D4 $<<<<tT/FG7D4 $====tT/NOq6D4 $<<<<tT/FG7D4 $====tT/FGq6D4 $<<<<tT/FG7D4 $====tT/FGA;D4 $AAAA1vt1HI7D4 $====tT/FG8D4 $>>>>tT/KL7D4 $====tT/KL8D4 $>>>>tT/KL7D4 $====tT/KL8D4 $>>>>	
d79 q6D4 $<<<<	
d/1 A;D4 $????	
d/1r   c                      t        t        t                    dk(  sJ t        t        t                    dk(  sJ t        t	        t                    dk(  sJ y )Nztensorflow.math.real(x)ztensorflow.math.imag(x)ztensorflow.math.angle(x))r5   r$   r   r%   r&   r   r   rQ   test_tensorflow_complexesr   
  sJ    2a5!%>>>>2a5!%>>>>3q6"&@@@@r   c                     t         st        d       t        t        t              } t        |       dk(  sJ t        t        t        f|        t        t        t              } t        |       dk(  sJ t        t        t        f|        t        t        t              } t        |       dk(  sJ t        t        t        f|        t        t        t              } t        |       dk(  sJ t        t        t        f|        t        t        t              } t        |       dk(  sJ t        t        t        f|        t        t        t              } t        |       dk(  sJ t        t        t        f|        y )Nr   ztensorflow.math.equal(x, y)ztensorflow.math.not_equal(x, y)z#tensorflow.math.greater_equal(x, y)ztensorflow.math.greater(x, y)z tensorflow.math.less_equal(x, y)ztensorflow.math.less(x, y))rW   r8   r
   r   r   r5   r   r   r   r   r   r   r   s    rQ   test_tensorflow_relationalr     s   '(a8D4 $AAAA"Aq640a8D4 $EEEE"Aq640a8D4 $IIII"Aq640a8D4 $CCCC"Aq640a8D4 $FFFF"Aq640a8D4 $@@@@"Aq640r   c                  L   t         st        d       t        } t        |       dk(  sJ t	        t        f|        t        t
        z   } t        |       dk(  sJ t	        t        t
        f|        t        t
        z  } t        |       dk(  sJ t	        t        t
        f|        t        t        t
              } t        |       dk(  sJ t	        t        t
        f|        t        t
        z  t        z  t        z  } t        |       dk(  sJ t	        t        t
        t        t        f|        t        dz  } t        |       dk(  sJ t	        t        f|        t        t              } t        |       d	k(  sJ t	        t        f|        t        t              } t        |       d
k(  sJ t        t        f|        t        t              } t        |       dk(  sJ t        t        f| d       t        j                  } t        | d      dk(  sJ t        | d      dk(  sJ t	        t        f|        y )Nr   r=   tensorflow.math.add(M, N)ztensorflow.linalg.matmul(M, N)ztensorflow.math.multiply(M, N)zXtensorflow.linalg.matmul(tensorflow.linalg.matmul(tensorflow.linalg.matmul(M, N), P), Q)r>   z;tensorflow.linalg.matmul(tensorflow.linalg.matmul(M, M), M)ztensorflow.linalg.trace(M)ztensorflow.linalg.det(M)ztensorflow.linalg.inv(M)T)rk   z1.14)tensorflow_versionz%tensorflow.linalg.matrix_transpose(M)z1.13ztensorflow.matrix_transpose(M))rW   r8   r=   r5   ru   r?   r1   r@   rA   r4   r0   r}   r2   rx   Tr   s    rQ   test_tensorflow_matricesr   /  s   '(D4 C'''tT*q5D4 $????1vt,q5D4 $DDDD1vt,1a D4 $DDDD1vt,Q3q57D4 	99 9 9 1a|T2a4D4 EF F FtT*8D4 $@@@@tT*q>D4 $>>>>%qdD11:D4 $>>>>&tTTB33D4F;/0 0 04F;() ) ) tT*r   c                  l   t         st        d       t         j                         } | j                         5  t         j                  j
                  j                  |       }t        ddd      }t        ddd      }t        ||z        }t        ||f|d      }t         j                  ddgdd	gg      }t         j                  dd
gddgg      }|j                   |||            }|j                  t         j                  ||            }	||	k(  j                         sJ 	 d d d        y # 1 sw Y   y xY w)Nr   rD   r=   r   r?   r:   r   r>   rI   )rW   r8   rX   rY   r[   r\   r]   r3   r6   r7   constantr^   matmulrg   )
rE   rr   r=   r?   cgrl   mambr   cs
             rQ   test_codegen_einsumr   e  s   '(HHJE				 )),,&&U&3a#a#$QU+aVR.[[1a&1a&)*[[1R&2q'*+KK"b	"KK		"b)*Q||~~  s   C*D**D3c            
      	   t         st        d       t         j                         } | j                         5  t         j                  j
                  j                         }t        ddd      }t        ddd      }t        ddd      }t        ddd      }t         j                  ddgdd	gg      }t         j                  dd
gddgg      }t         j                  ddgddgg      }t         j                  ddgd	dgg      }	t        ||      }
t        |
      dk(  sJ t        ||f|
d      }|j                   |||            }|j                  t         j                  d||            }||k(  j                         sJ t        ||      }
t        |
      dk(  sJ t        ||f|
d      }|j                   |||            }|j                  ||z         }||k(  j                         sJ t        |||      }
t        |
      dk(  sJ t        |||f|
d      }|j                   ||||            }|j                  ||z   |z         }||k(  j                         sJ t        ||||      }
t        |
      dk(  sJ t        ||||f|
d      }|j                   |||||	            }|j                  ||z   |z   |	z         }||k(  j                         sJ t!        |ddg      }
t        |
      dk(  sJ t        |f|
d      }|j                   ||            }|j                  t         j#                  |            }||k(  j                         sJ t!        t        ||      g d      }
t        |
      dk(  sJ t        ||f|
d      }|j                   |||            }|j                  t         j#                  t         j                  d||      g d            }||k(  j                         sJ t%        t        ||      d      }
t        |
      dk(  sJ t        ||f|
d      }|j                   |||            }|j                  t         j                  d||            }||k(  j                         sJ 	 d d d        y # 1 sw Y   y xY w)Nr   r=   r   r?   r@   rA   r   r>   rI   r   r   r      z'tensorflow.linalg.einsum("ab,cd", M, N)r:   zij,klr   z1tensorflow.math.add(tensorflow.math.add(M, N), P)zItensorflow.math.add(tensorflow.math.add(tensorflow.math.add(M, N), P), Q)ztensorflow.transpose(M, [1, 0]))r   r   r>   r   zKtensorflow.transpose(tensorflow.linalg.einsum("ab,cd", M, N), [1, 2, 3, 0])zab,cd)r   r   z,tensorflow.linalg.einsum("ab,bc->acb", M, N)z
ab,bc->acb)rW   r8   rX   rY   r[   r\   r]   r3   r   r   r5   r7   r^   einsumrg   r   r   	transposer	   )rE   rr   r=   r?   r@   rA   r   r   mcmdr   rl   r   r   s                 rQ   test_codegen_extrar   z  sj   '(HHJE				 B)),,&&(a#a#a#a#[[1a&1a&)*[[1R&2q'*+[[1a&1a&)*[[1R&1a&)*1%r"56 	6 6aVR.KK"b	"KK		'2r23Q||~~a^r"&AAAAaVR.KK"b	"KKR Q||~~aAr"?@ 	@ @aAYL1KK"b"&KKR"%Q||~~aAq!r"HH 	H H aAq\2|4KK"b"b)*KKR"r)*Q||~~QF#r"&GGGGaT2|,KK"KKR()Q||~~+Aq1<@r"II 	I I aVR.KK"b	"KKRYYwB%?NOQ||~~-a3V<r":; 	; ;aVR.KK"b	"KK		,B78Q||~~EB B Bs   QRR
c                      t        ddd      } t        ddd      }t        ddd      }t        | d         dk(  sJ t        d| d   z        dk(  sJ |d   j                  || |z
        }t        |      d	k(  sJ y )
NAr   r>   BC)r   r   zA[0, 0]z	3*A[0, 0]z&(tensorflow.math.add((-1)*B, A))[0, 0])r3   r5   r_   )r   r   r   Fs       rQ   test_MatrixElement_printingr     s    S!QAS!QAS!QA1T7#y0001qw;';666	$QAA1!IIIIr   c                  ^    t        t        t              t              } t        |       dk(  sJ y )Nz2tensorflow.gradients(tensorflow.math.sin(x), x)[0])r   r   r   r5   r   s    rQ   test_tensorflow_Derivativer     s,    c!fa D4 <= = =r   c                  :   t         st        d       t        d      } t        dt	        |       fd      }t        |      }d}t        |      |k(  sJ d| d|        t        d      dft        d	      d
ft        d      d
fdfD ]Q  \  }} t        | |d      t         j                  |g            }||k(  j                         j                         rQJ  t        d      } t        dt        |       fd      }t        |      }d}t        |      |k(  sJ d| d|        t        d	      dft        d      dft        d      d
fdfD ]Q  \  }} t        | |d      t         j                  |g            }||k(  j                         j                         rQJ  y )Nr   r   g        )      ?Tz5tensorflow.where(tensorflow.math.is_nan(x), 0.0, 1.0)zIncorrect printed result z, expected naninfr   z-inf)r   r   r:   )modules)r   z5tensorflow.where(tensorflow.math.is_inf(x), 0.0, 1.0))rW   r8   r   r   r*   r5   floatr7   r   numpyrg   r+   )r   
expressionprinted_codeexpected_printed_code_input	_expected_outputs          rQ   test_tensorflow_isnan_isinfr     s   '( 	ACq?K8J":.LS:&*??  NC\]i\jju  wL  vM  BN  N?$U|S1E%L#3FvX[H\^hi 4	A(A
LABKKQWPXDYZ9$++-113334
 	ACq?K8J":.LS:&*??  NC\]i\jju  wL  vM  BN  N?$U|S1E&M33G%PU,X[I\^hi 4	A(A
LABKKQWPXDYZ9$++-113334r   )F)gr   sympy.core.functionr   sympy.core.symbolr   sympyr   0sympy.tensor.array.expressions.array_expressionsr   r   r   r	   sympy.core.relationalr
   r   r   r   r   r   sympy.externalr   sympy.functionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   sympy.codegen.cfunctionsr*   r+   sympy.matricesr,   r-   r.   r/   sympy.matrices.expressionsr0   r1   r2   r3   r4   sympy.printing.tensorflowr5   3sympy.tensor.array.expressions.from_matrix_to_arrayr6   sympy.utilities.lambdifyr7   sympy.testing.pytestr8   r9   rW   r:   osenvironr=   r?   r@   rA   r   r   r   r   rangelistllor   m3x3	m3x3sympyru   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   )rp   s   0rQ   <module>r      s    * %   8 8 ($ $ $ $ $ $ $ 2 > >? ? 5 W - % &  - -Z),BJJ%& aaaaY
1a>(-aA
714a1
7C;;sDsIL@L<$ 7" 7 . ]1 ]1@A1> 2+ 2+j*GT	J=
4[ 8s   F