_NDArray_1 = NDArray . var ( "X" ) \n",
"assume_dtype ( _NDArray_1 , DType . float64 ) \n",
"assume_shape ( _NDArray_1 , TupleInt ( Int ( 1000000 )) + TupleInt ( Int ( 20 ))) \n",
"assume_isfinite ( _NDArray_1 ) \n",
"_NDArray_2 = NDArray . var ( "y" ) \n",
"assume_dtype ( _NDArray_2 , DType . int64 ) \n",
"assume_shape ( _NDArray_2 , TupleInt ( Int ( 1000000 ))) \n",
"assume_value_one_of ( _NDArray_2 , TupleValue ( Value . int ( Int ( 0 ))) + TupleValue ( Value . int ( Int ( 1 )))) \n",
"_NDArray_3 = asarray ( reshape ( asarray ( _NDArray_2 ), TupleInt ( Int ( - 1 )))) \n",
"_NDArray_4 = astype ( unique_counts ( _NDArray_3 )[ Int ( 1 )], asarray ( _NDArray_1 ) . dtype ) / NDArray . scalar ( Value . float ( Float ( 1000000.0 ))) \n",
"_NDArray_5 = zeros ( \n",
" TupleInt ( unique_inverse ( _NDArray_3 )[ Int ( 0 )] . shape [ Int ( 0 )]) + TupleInt ( asarray ( _NDArray_1 ) . shape [ Int ( 1 )]), \n",
" OptionalDType . some ( asarray ( _NDArray_1 ) . dtype ), \n",
" OptionalDevice . some ( asarray ( _NDArray_1 ) . device ), \n",
") \n",
"_MultiAxisIndexKey_1 = MultiAxisIndexKey ( MultiAxisIndexKeyItem . slice ( Slice ())) \n",
"_IndexKey_1 = IndexKey . multi_axis ( MultiAxisIndexKey ( MultiAxisIndexKeyItem . int ( Int ( 0 ))) + _MultiAxisIndexKey_1 ) \n",
"_OptionalIntOrTuple_1 = OptionalIntOrTuple . some ( IntOrTuple . int ( Int ( 0 ))) \n",
"_NDArray_5 [ _IndexKey_1 ] = mean ( asarray ( _NDArray_1 )[ ndarray_index ( unique_inverse ( _NDArray_3 )[ Int ( 1 )] == NDArray . scalar ( Value . int ( Int ( 0 ))))], _OptionalIntOrTuple_1 ) \n",
"_IndexKey_2 = IndexKey . multi_axis ( MultiAxisIndexKey ( MultiAxisIndexKeyItem . int ( Int ( 1 ))) + _MultiAxisIndexKey_1 ) \n",
"_NDArray_5 [ _IndexKey_2 ] = mean ( asarray ( _NDArray_1 )[ ndarray_index ( unique_inverse ( _NDArray_3 )[ Int ( 1 )] == NDArray . scalar ( Value . int ( Int ( 1 ))))], _OptionalIntOrTuple_1 ) \n",
"_NDArray_6 = unique_values ( concat ( TupleNDArray ( unique_values ( asarray ( _NDArray_3 ))))) \n",
"_NDArray_7 = concat ( \n",
" TupleNDArray ( asarray ( _NDArray_1 )[ ndarray_index ( _NDArray_3 == _NDArray_6 [ IndexKey . int ( Int ( 0 ))])] - _NDArray_5 [ _IndexKey_1 ]) \n",
" + TupleNDArray ( asarray ( _NDArray_1 )[ ndarray_index ( _NDArray_3 == _NDArray_6 [ IndexKey . int ( Int ( 1 ))])] - _NDArray_5 [ _IndexKey_2 ]), \n",
" OptionalInt . some ( Int ( 0 )), \n",
") \n",
"_NDArray_8 = std ( _NDArray_7 , _OptionalIntOrTuple_1 ) \n",
"_NDArray_8 [ ndarray_index ( std ( _NDArray_7 , _OptionalIntOrTuple_1 ) == NDArray . scalar ( Value . int ( Int ( 0 ))))] = NDArray . scalar ( Value . float ( Float ( 1.0 ))) \n",
"_TupleNDArray_1 = svd ( \n",
" sqrt ( asarray ( NDArray . scalar ( Value . float ( Float ( 1.0 ) / Float . from_int ( asarray ( _NDArray_1 ) . shape [ Int ( 0 )] - _NDArray_6 . shape [ Int ( 0 )]))))) * ( _NDArray_7 / _NDArray_8 ), FALSE \n",
") \n",
"_Slice_1 = Slice ( OptionalInt . none , OptionalInt . some ( sum ( astype ( _TupleNDArray_1 [ Int ( 1 )] > NDArray . scalar ( Value . float ( Float ( 0.0001 ))), DType . int32 )) . to_value () . to_int )) \n",
"_NDArray_9 = ( _TupleNDArray_1 [ Int ( 2 )][ IndexKey . multi_axis ( MultiAxisIndexKey ( MultiAxisIndexKeyItem . slice ( _Slice_1 )) + _MultiAxisIndexKey_1 )] / _NDArray_8 ) . T / _TupleNDArray_1 [ \n",
" Int ( 1 ) \n",
"][ IndexKey . slice ( _Slice_1 )] \n",
"_TupleNDArray_2 = svd ( \n",
" ( \n",
" sqrt ( \n",
" ( NDArray . scalar ( Value . int ( asarray ( _NDArray_1 ) . shape [ Int ( 0 )])) * _NDArray_4 ) \n",
" * NDArray . scalar ( Value . float ( Float ( 1.0 ) / Float . from_int ( _NDArray_6 . shape [ Int ( 0 )] - Int ( 1 )))) \n",
" ) \n",
" * ( _NDArray_5 - ( _NDArray_4 @ _NDArray_5 )) . T \n",
" ) . T \n",
" @ _NDArray_9 , \n",
" FALSE , \n",
") \n",
"( \n",
" ( asarray ( _NDArray_1 ) - ( _NDArray_4 @ _NDArray_5 )) \n",
" @ ( \n",
" _NDArray_9 \n",
" @ _TupleNDArray_2 [ Int ( 2 )] . T [ \n",
" IndexKey . multi_axis ( \n",
" _MultiAxisIndexKey_1 \n",
" + MultiAxisIndexKey ( \n",
" MultiAxisIndexKeyItem . slice ( \n",
" Slice ( \n",
" OptionalInt . none , \n",
" OptionalInt . some ( \n",
" sum ( astype ( _TupleNDArray_2 [ Int ( 1 )] > ( NDArray . scalar ( Value . float ( Float ( 0.0001 ))) * _TupleNDArray_2 [ Int ( 1 )][ IndexKey . int ( Int ( 0 ))]), DType . int32 )) \n",
" . to_value () \n",
" . to_int \n",
" ), \n",
" ) \n",
" ) \n",
" ) \n",
" ) \n",
" ] \n",
" ) \n",
")[ IndexKey . multi_axis ( _MultiAxisIndexKey_1 + MultiAxisIndexKey ( MultiAxisIndexKeyItem . slice ( Slice ( OptionalInt . none , OptionalInt . some ( _NDArray_6 . shape [ Int ( 0 )] - Int ( 1 ))))))] \n",
" \n"
],
"text/latex": [
"\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}1} \\PY{o}{=} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{var}\\PY{p}{(}\\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{X}\\PY{l+s+s2}{\\PYZdq{}}\\PY{p}{)}\n",
"\\PY{n}{assume\\PYZus{}dtype}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{,} \\PY{n}{DType}\\PY{o}{.}\\PY{n}{float64}\\PY{p}{)}\n",
"\\PY{n}{assume\\PYZus{}shape}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{,} \\PY{n}{TupleInt}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1000000}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{TupleInt}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{20}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{assume\\PYZus{}isfinite}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}2} \\PY{o}{=} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{var}\\PY{p}{(}\\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{y}\\PY{l+s+s2}{\\PYZdq{}}\\PY{p}{)}\n",
"\\PY{n}{assume\\PYZus{}dtype}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}2}\\PY{p}{,} \\PY{n}{DType}\\PY{o}{.}\\PY{n}{int64}\\PY{p}{)}\n",
"\\PY{n}{assume\\PYZus{}shape}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}2}\\PY{p}{,} \\PY{n}{TupleInt}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1000000}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{assume\\PYZus{}value\\PYZus{}one\\PYZus{}of}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}2}\\PY{p}{,} \\PY{n}{TupleValue}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{TupleValue}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}3} \\PY{o}{=} \\PY{n}{asarray}\\PY{p}{(}\\PY{n}{reshape}\\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}2}\\PY{p}{)}\\PY{p}{,} \\PY{n}{TupleInt}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{o}{\\PYZhy{}}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}4} \\PY{o}{=} \\PY{n}{astype}\\PY{p}{(}\\PY{n}{unique\\PYZus{}counts}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}3}\\PY{p}{)}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{]}\\PY{p}{,} \\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)}\\PY{o}{.}\\PY{n}{dtype}\\PY{p}{)} \\PY{o}{/} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{float}\\PY{p}{(}\\PY{n}{Float}\\PY{p}{(}\\PY{l+m+mf}{1000000.0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}5} \\PY{o}{=} \\PY{n}{zeros}\\PY{p}{(}\n",
" \\PY{n}{TupleInt}\\PY{p}{(}\\PY{n}{unique\\PYZus{}inverse}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}3}\\PY{p}{)}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{]}\\PY{o}{.}\\PY{n}{shape}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{]}\\PY{p}{)} \\PY{o}{+} \\PY{n}{TupleInt}\\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)}\\PY{o}{.}\\PY{n}{shape}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{]}\\PY{p}{)}\\PY{p}{,}\n",
" \\PY{n}{OptionalDType}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)}\\PY{o}{.}\\PY{n}{dtype}\\PY{p}{)}\\PY{p}{,}\n",
" \\PY{n}{OptionalDevice}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)}\\PY{o}{.}\\PY{n}{device}\\PY{p}{)}\\PY{p}{,}\n",
"\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}MultiAxisIndexKey\\PYZus{}1} \\PY{o}{=} \\PY{n}{MultiAxisIndexKey}\\PY{p}{(}\\PY{n}{MultiAxisIndexKeyItem}\\PY{o}{.}\\PY{n}{slice}\\PY{p}{(}\\PY{n}{Slice}\\PY{p}{(}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}IndexKey\\PYZus{}1} \\PY{o}{=} \\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{multi\\PYZus{}axis}\\PY{p}{(}\\PY{n}{MultiAxisIndexKey}\\PY{p}{(}\\PY{n}{MultiAxisIndexKeyItem}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{\\PYZus{}MultiAxisIndexKey\\PYZus{}1}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}OptionalIntOrTuple\\PYZus{}1} \\PY{o}{=} \\PY{n}{OptionalIntOrTuple}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\\PY{n}{IntOrTuple}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}5}\\PY{p}{[}\\PY{n}{\\PYZus{}IndexKey\\PYZus{}1}\\PY{p}{]} \\PY{o}{=} \\PY{n}{mean}\\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)}\\PY{p}{[}\\PY{n}{ndarray\\PYZus{}index}\\PY{p}{(}\\PY{n}{unique\\PYZus{}inverse}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}3}\\PY{p}{)}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{]} \\PY{o}{==} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{]}\\PY{p}{,} \\PY{n}{\\PYZus{}OptionalIntOrTuple\\PYZus{}1}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}IndexKey\\PYZus{}2} \\PY{o}{=} \\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{multi\\PYZus{}axis}\\PY{p}{(}\\PY{n}{MultiAxisIndexKey}\\PY{p}{(}\\PY{n}{MultiAxisIndexKeyItem}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{\\PYZus{}MultiAxisIndexKey\\PYZus{}1}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}5}\\PY{p}{[}\\PY{n}{\\PYZus{}IndexKey\\PYZus{}2}\\PY{p}{]} \\PY{o}{=} \\PY{n}{mean}\\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)}\\PY{p}{[}\\PY{n}{ndarray\\PYZus{}index}\\PY{p}{(}\\PY{n}{unique\\PYZus{}inverse}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}3}\\PY{p}{)}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{]} \\PY{o}{==} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{]}\\PY{p}{,} \\PY{n}{\\PYZus{}OptionalIntOrTuple\\PYZus{}1}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}6} \\PY{o}{=} \\PY{n}{unique\\PYZus{}values}\\PY{p}{(}\\PY{n}{concat}\\PY{p}{(}\\PY{n}{TupleNDArray}\\PY{p}{(}\\PY{n}{unique\\PYZus{}values}\\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}3}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}7} \\PY{o}{=} \\PY{n}{concat}\\PY{p}{(}\n",
" \\PY{n}{TupleNDArray}\\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)}\\PY{p}{[}\\PY{n}{ndarray\\PYZus{}index}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}3} \\PY{o}{==} \\PY{n}{\\PYZus{}NDArray\\PYZus{}6}\\PY{p}{[}\\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{]}\\PY{p}{)}\\PY{p}{]} \\PY{o}{\\PYZhy{}} \\PY{n}{\\PYZus{}NDArray\\PYZus{}5}\\PY{p}{[}\\PY{n}{\\PYZus{}IndexKey\\PYZus{}1}\\PY{p}{]}\\PY{p}{)}\n",
" \\PY{o}{+} \\PY{n}{TupleNDArray}\\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)}\\PY{p}{[}\\PY{n}{ndarray\\PYZus{}index}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}3} \\PY{o}{==} \\PY{n}{\\PYZus{}NDArray\\PYZus{}6}\\PY{p}{[}\\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{]}\\PY{p}{)}\\PY{p}{]} \\PY{o}{\\PYZhy{}} \\PY{n}{\\PYZus{}NDArray\\PYZus{}5}\\PY{p}{[}\\PY{n}{\\PYZus{}IndexKey\\PYZus{}2}\\PY{p}{]}\\PY{p}{)}\\PY{p}{,}\n",
" \\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{,}\n",
"\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}8} \\PY{o}{=} \\PY{n}{std}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}7}\\PY{p}{,} \\PY{n}{\\PYZus{}OptionalIntOrTuple\\PYZus{}1}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}8}\\PY{p}{[}\\PY{n}{ndarray\\PYZus{}index}\\PY{p}{(}\\PY{n}{std}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}7}\\PY{p}{,} \\PY{n}{\\PYZus{}OptionalIntOrTuple\\PYZus{}1}\\PY{p}{)} \\PY{o}{==} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{]} \\PY{o}{=} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{float}\\PY{p}{(}\\PY{n}{Float}\\PY{p}{(}\\PY{l+m+mf}{1.0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}1} \\PY{o}{=} \\PY{n}{svd}\\PY{p}{(}\n",
" \\PY{n}{sqrt}\\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{float}\\PY{p}{(}\\PY{n}{Float}\\PY{p}{(}\\PY{l+m+mf}{1.0}\\PY{p}{)} \\PY{o}{/} \\PY{n}{Float}\\PY{o}{.}\\PY{n}{from\\PYZus{}int}\\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)}\\PY{o}{.}\\PY{n}{shape}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{]} \\PY{o}{\\PYZhy{}} \\PY{n}{\\PYZus{}NDArray\\PYZus{}6}\\PY{o}{.}\\PY{n}{shape}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{]}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)} \\PY{o}{*} \\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}7} \\PY{o}{/} \\PY{n}{\\PYZus{}NDArray\\PYZus{}8}\\PY{p}{)}\\PY{p}{,} \\PY{n}{FALSE}\n",
"\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}Slice\\PYZus{}1} \\PY{o}{=} \\PY{n}{Slice}\\PY{p}{(}\\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{none}\\PY{p}{,} \\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\\PY{n+nb}{sum}\\PY{p}{(}\\PY{n}{astype}\\PY{p}{(}\\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}1}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{]} \\PY{o}{\\PYZgt{}} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{float}\\PY{p}{(}\\PY{n}{Float}\\PY{p}{(}\\PY{l+m+mf}{0.0001}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{,} \\PY{n}{DType}\\PY{o}{.}\\PY{n}{int32}\\PY{p}{)}\\PY{p}{)}\\PY{o}{.}\\PY{n}{to\\PYZus{}value}\\PY{p}{(}\\PY{p}{)}\\PY{o}{.}\\PY{n}{to\\PYZus{}int}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}9} \\PY{o}{=} \\PY{p}{(}\\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}1}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{2}\\PY{p}{)}\\PY{p}{]}\\PY{p}{[}\\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{multi\\PYZus{}axis}\\PY{p}{(}\\PY{n}{MultiAxisIndexKey}\\PY{p}{(}\\PY{n}{MultiAxisIndexKeyItem}\\PY{o}{.}\\PY{n}{slice}\\PY{p}{(}\\PY{n}{\\PYZus{}Slice\\PYZus{}1}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{\\PYZus{}MultiAxisIndexKey\\PYZus{}1}\\PY{p}{)}\\PY{p}{]} \\PY{o}{/} \\PY{n}{\\PYZus{}NDArray\\PYZus{}8}\\PY{p}{)}\\PY{o}{.}\\PY{n}{T} \\PY{o}{/} \\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}1}\\PY{p}{[}\n",
" \\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\n",
"\\PY{p}{]}\\PY{p}{[}\\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{slice}\\PY{p}{(}\\PY{n}{\\PYZus{}Slice\\PYZus{}1}\\PY{p}{)}\\PY{p}{]}\n",
"\\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}2} \\PY{o}{=} \\PY{n}{svd}\\PY{p}{(}\n",
" \\PY{p}{(}\n",
" \\PY{n}{sqrt}\\PY{p}{(}\n",
" \\PY{p}{(}\\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)}\\PY{o}{.}\\PY{n}{shape}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{]}\\PY{p}{)}\\PY{p}{)} \\PY{o}{*} \\PY{n}{\\PYZus{}NDArray\\PYZus{}4}\\PY{p}{)}\n",
" \\PY{o}{*} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{float}\\PY{p}{(}\\PY{n}{Float}\\PY{p}{(}\\PY{l+m+mf}{1.0}\\PY{p}{)} \\PY{o}{/} \\PY{n}{Float}\\PY{o}{.}\\PY{n}{from\\PYZus{}int}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}6}\\PY{o}{.}\\PY{n}{shape}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{]} \\PY{o}{\\PYZhy{}} \\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
" \\PY{p}{)}\n",
" \\PY{o}{*} \\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}5} \\PY{o}{\\PYZhy{}} \\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}4} \\PY{o}{@} \\PY{n}{\\PYZus{}NDArray\\PYZus{}5}\\PY{p}{)}\\PY{p}{)}\\PY{o}{.}\\PY{n}{T}\n",
" \\PY{p}{)}\\PY{o}{.}\\PY{n}{T}\n",
" \\PY{o}{@} \\PY{n}{\\PYZus{}NDArray\\PYZus{}9}\\PY{p}{,}\n",
" \\PY{n}{FALSE}\\PY{p}{,}\n",
"\\PY{p}{)}\n",
"\\PY{p}{(}\n",
" \\PY{p}{(}\\PY{n}{asarray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)} \\PY{o}{\\PYZhy{}} \\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}4} \\PY{o}{@} \\PY{n}{\\PYZus{}NDArray\\PYZus{}5}\\PY{p}{)}\\PY{p}{)}\n",
" \\PY{o}{@} \\PY{p}{(}\n",
" \\PY{n}{\\PYZus{}NDArray\\PYZus{}9}\n",
" \\PY{o}{@} \\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}2}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{2}\\PY{p}{)}\\PY{p}{]}\\PY{o}{.}\\PY{n}{T}\\PY{p}{[}\n",
" \\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{multi\\PYZus{}axis}\\PY{p}{(}\n",
" \\PY{n}{\\PYZus{}MultiAxisIndexKey\\PYZus{}1}\n",
" \\PY{o}{+} \\PY{n}{MultiAxisIndexKey}\\PY{p}{(}\n",
" \\PY{n}{MultiAxisIndexKeyItem}\\PY{o}{.}\\PY{n}{slice}\\PY{p}{(}\n",
" \\PY{n}{Slice}\\PY{p}{(}\n",
" \\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{none}\\PY{p}{,}\n",
" \\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\n",
" \\PY{n+nb}{sum}\\PY{p}{(}\\PY{n}{astype}\\PY{p}{(}\\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}2}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{]} \\PY{o}{\\PYZgt{}} \\PY{p}{(}\\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{float}\\PY{p}{(}\\PY{n}{Float}\\PY{p}{(}\\PY{l+m+mf}{0.0001}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)} \\PY{o}{*} \\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}2}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{]}\\PY{p}{[}\\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{]}\\PY{p}{)}\\PY{p}{,} \\PY{n}{DType}\\PY{o}{.}\\PY{n}{int32}\\PY{p}{)}\\PY{p}{)}\n",
" \\PY{o}{.}\\PY{n}{to\\PYZus{}value}\\PY{p}{(}\\PY{p}{)}\n",
" \\PY{o}{.}\\PY{n}{to\\PYZus{}int}\n",
" \\PY{p}{)}\\PY{p}{,}\n",
" \\PY{p}{)}\n",
" \\PY{p}{)}\n",
" \\PY{p}{)}\n",
" \\PY{p}{)}\n",
" \\PY{p}{]}\n",
" \\PY{p}{)}\n",
"\\PY{p}{)}\\PY{p}{[}\\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{multi\\PYZus{}axis}\\PY{p}{(}\\PY{n}{\\PYZus{}MultiAxisIndexKey\\PYZus{}1} \\PY{o}{+} \\PY{n}{MultiAxisIndexKey}\\PY{p}{(}\\PY{n}{MultiAxisIndexKeyItem}\\PY{o}{.}\\PY{n}{slice}\\PY{p}{(}\\PY{n}{Slice}\\PY{p}{(}\\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{none}\\PY{p}{,} \\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}6}\\PY{o}{.}\\PY{n}{shape}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{]} \\PY{o}{\\PYZhy{}} \\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{]}\n",
"\\end{Verbatim}\n"
],
"text/plain": [
"_NDArray_1 = NDArray.var(\"X\")\n",
"assume_dtype(_NDArray_1, DType.float64)\n",
"assume_shape(_NDArray_1, TupleInt(Int(1000000)) + TupleInt(Int(20)))\n",
"assume_isfinite(_NDArray_1)\n",
"_NDArray_2 = NDArray.var(\"y\")\n",
"assume_dtype(_NDArray_2, DType.int64)\n",
"assume_shape(_NDArray_2, TupleInt(Int(1000000)))\n",
"assume_value_one_of(_NDArray_2, TupleValue(Value.int(Int(0))) + TupleValue(Value.int(Int(1))))\n",
"_NDArray_3 = asarray(reshape(asarray(_NDArray_2), TupleInt(Int(-1))))\n",
"_NDArray_4 = astype(unique_counts(_NDArray_3)[Int(1)], asarray(_NDArray_1).dtype) / NDArray.scalar(Value.float(Float(1000000.0)))\n",
"_NDArray_5 = zeros(\n",
" TupleInt(unique_inverse(_NDArray_3)[Int(0)].shape[Int(0)]) + TupleInt(asarray(_NDArray_1).shape[Int(1)]),\n",
" OptionalDType.some(asarray(_NDArray_1).dtype),\n",
" OptionalDevice.some(asarray(_NDArray_1).device),\n",
")\n",
"_MultiAxisIndexKey_1 = MultiAxisIndexKey(MultiAxisIndexKeyItem.slice(Slice()))\n",
"_IndexKey_1 = IndexKey.multi_axis(MultiAxisIndexKey(MultiAxisIndexKeyItem.int(Int(0))) + _MultiAxisIndexKey_1)\n",
"_OptionalIntOrTuple_1 = OptionalIntOrTuple.some(IntOrTuple.int(Int(0)))\n",
"_NDArray_5[_IndexKey_1] = mean(asarray(_NDArray_1)[ndarray_index(unique_inverse(_NDArray_3)[Int(1)] == NDArray.scalar(Value.int(Int(0))))], _OptionalIntOrTuple_1)\n",
"_IndexKey_2 = IndexKey.multi_axis(MultiAxisIndexKey(MultiAxisIndexKeyItem.int(Int(1))) + _MultiAxisIndexKey_1)\n",
"_NDArray_5[_IndexKey_2] = mean(asarray(_NDArray_1)[ndarray_index(unique_inverse(_NDArray_3)[Int(1)] == NDArray.scalar(Value.int(Int(1))))], _OptionalIntOrTuple_1)\n",
"_NDArray_6 = unique_values(concat(TupleNDArray(unique_values(asarray(_NDArray_3)))))\n",
"_NDArray_7 = concat(\n",
" TupleNDArray(asarray(_NDArray_1)[ndarray_index(_NDArray_3 == _NDArray_6[IndexKey.int(Int(0))])] - _NDArray_5[_IndexKey_1])\n",
" + TupleNDArray(asarray(_NDArray_1)[ndarray_index(_NDArray_3 == _NDArray_6[IndexKey.int(Int(1))])] - _NDArray_5[_IndexKey_2]),\n",
" OptionalInt.some(Int(0)),\n",
")\n",
"_NDArray_8 = std(_NDArray_7, _OptionalIntOrTuple_1)\n",
"_NDArray_8[ndarray_index(std(_NDArray_7, _OptionalIntOrTuple_1) == NDArray.scalar(Value.int(Int(0))))] = NDArray.scalar(Value.float(Float(1.0)))\n",
"_TupleNDArray_1 = svd(\n",
" sqrt(asarray(NDArray.scalar(Value.float(Float(1.0) / Float.from_int(asarray(_NDArray_1).shape[Int(0)] - _NDArray_6.shape[Int(0)]))))) * (_NDArray_7 / _NDArray_8), FALSE\n",
")\n",
"_Slice_1 = Slice(OptionalInt.none, OptionalInt.some(sum(astype(_TupleNDArray_1[Int(1)] > NDArray.scalar(Value.float(Float(0.0001))), DType.int32)).to_value().to_int))\n",
"_NDArray_9 = (_TupleNDArray_1[Int(2)][IndexKey.multi_axis(MultiAxisIndexKey(MultiAxisIndexKeyItem.slice(_Slice_1)) + _MultiAxisIndexKey_1)] / _NDArray_8).T / _TupleNDArray_1[\n",
" Int(1)\n",
"][IndexKey.slice(_Slice_1)]\n",
"_TupleNDArray_2 = svd(\n",
" (\n",
" sqrt(\n",
" (NDArray.scalar(Value.int(asarray(_NDArray_1).shape[Int(0)])) * _NDArray_4)\n",
" * NDArray.scalar(Value.float(Float(1.0) / Float.from_int(_NDArray_6.shape[Int(0)] - Int(1))))\n",
" )\n",
" * (_NDArray_5 - (_NDArray_4 @ _NDArray_5)).T\n",
" ).T\n",
" @ _NDArray_9,\n",
" FALSE,\n",
")\n",
"(\n",
" (asarray(_NDArray_1) - (_NDArray_4 @ _NDArray_5))\n",
" @ (\n",
" _NDArray_9\n",
" @ _TupleNDArray_2[Int(2)].T[\n",
" IndexKey.multi_axis(\n",
" _MultiAxisIndexKey_1\n",
" + MultiAxisIndexKey(\n",
" MultiAxisIndexKeyItem.slice(\n",
" Slice(\n",
" OptionalInt.none,\n",
" OptionalInt.some(\n",
" sum(astype(_TupleNDArray_2[Int(1)] > (NDArray.scalar(Value.float(Float(0.0001))) * _TupleNDArray_2[Int(1)][IndexKey.int(Int(0))]), DType.int32))\n",
" .to_value()\n",
" .to_int\n",
" ),\n",
" )\n",
" )\n",
" )\n",
" )\n",
" ]\n",
" )\n",
")[IndexKey.multi_axis(_MultiAxisIndexKey_1 + MultiAxisIndexKey(MultiAxisIndexKeyItem.slice(Slice(OptionalInt.none, OptionalInt.some(_NDArray_6.shape[Int(0)] - Int(1))))))]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"res"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In order to run this, scikit-learn treated these objects as \"array like\", meaning they conformed to [the Array API](https://data-apis.org/array-api/latest/).\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Conversions: From Python to egglog\n",
"\n",
"_Use conversions if you want your egglog API to be called with existing Python objects, without manually upcasting them_\n",
"\n",
"_We will see this in our example:_\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```python\n",
"class LinearDiscriminantAnalysis:\n",
" ...\n",
" def fit(self, X, y):\n",
" ...\n",
" _, cnts = xp.unique_counts(y) # non-negative ints\n",
" self.priors_ = xp.astype(cnts, X.dtype) / float(y.shape[0])\n",
"```\n",
"\n",
"Ends up resulting in this expression:\n",
"\n",
"```python\n",
"astype(unique_counts(_NDArray_3)[Int(1)], asarray(_NDArray_1).dtype) / NDArray.scalar(Value.float(Float(1000000.0)))\n",
"```\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"How?\n",
"\n",
"We have exposed a global conversion logic, where if you pass an arg to egglog and it isn't the correct type, it will try to upcast the arg to the required egglog type.\n",
"\n",
"There is a graph of all conversions and it will find the shortest path from the input to the desired type and automatically upcast to that.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Example\n",
"\n",
"For example, in indexing, if we do a slice (i.e. `1:10:2`), we convert this to our custom egglog `Slice` expressions:\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"class Slice(Expr):\n",
" def __init__(\n",
" self,\n",
" start: OptionalInt = OptionalInt.none,\n",
" stop: OptionalInt = OptionalInt.none,\n",
" step: OptionalInt = OptionalInt.none,\n",
" ) -> None: ...\n",
"\n",
"\n",
"converter(\n",
" slice,\n",
" Slice,\n",
" lambda x: Slice(\n",
" convert(x.start, OptionalInt),\n",
" convert(x.stop, OptionalInt),\n",
" convert(x.step, OptionalInt),\n",
" ),\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"class A(Expr):\n",
" def __init__(self) -> None: ...\n",
" def __getitem__(self, s: Slice) -> Int: ..."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"class ListOfInts(Expr):\n",
" def __init__(self) -> None: ...\n",
" def __getitem__(self, i: i64Like) -> Int: ...\n",
"\n",
" def __setitem__(self, i: i64Like, v: Int) -> None: ...\n",
"\n",
"\n",
"xs = ListOfInts()\n",
"xs[0] = Int(1)\n",
"\n",
"egraph = EGraph()\n",
"egraph.register(xs[0])\n",
"egraph.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Subsumption\n",
"\n",
"_mark a rewrite as subsumed to replace a smaller expression with a larger one_\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now that we have a program, what do we do with it? Well first, we can optimize it, running rewrites, including those to translate from Numba forms to others.\n",
"\n",
"We have added \"subsumption\" to egglog, to support directional rewrites, so that the left hand side is not extractable and not matchable.\n",
"This is handy when we want to extract a value with more expressions or a higher cost, in a particular instance:\n",
"\n",
"```python\n",
"@array_api_numba_ruleset.register\n",
"def _mean(y: NDArray, x: NDArray, i: Int):\n",
" axis = OptionalIntOrTuple.some(IntOrTuple.int(i))\n",
" res = sum(x, axis) / NDArray.scalar(Value.int(x.shape[i]))\n",
"\n",
" yield rewrite(mean(x, axis, FALSE), subsume=True).to(res)\n",
" yield rewrite(mean(x, axis, TRUE), subsume=True).to(expand_dims(res, i))\n",
"```\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can optimize this with the numba rules and we can see this rule take place in the `_NDArray_9` line:\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"_NDArray_1 = NDArray . var ( "X" ) \n",
"assume_dtype ( _NDArray_1 , DType . float64 ) \n",
"assume_shape ( _NDArray_1 , TupleInt ( Int ( 1000000 )) + TupleInt ( Int ( 20 ))) \n",
"assume_isfinite ( _NDArray_1 ) \n",
"_NDArray_2 = NDArray . var ( "y" ) \n",
"assume_dtype ( _NDArray_2 , DType . int64 ) \n",
"assume_shape ( _NDArray_2 , TupleInt ( Int ( 1000000 ))) \n",
"assume_value_one_of ( _NDArray_2 , TupleValue ( Value . int ( Int ( 0 ))) + TupleValue ( Value . int ( Int ( 1 )))) \n",
"_NDArray_3 = astype ( \n",
" NDArray . vector ( TupleValue ( sum ( _NDArray_2 == NDArray . scalar ( Value . int ( Int ( 0 )))) . to_value ()) + TupleValue ( sum ( _NDArray_2 == NDArray . scalar ( Value . int ( Int ( 1 )))) . to_value ())), \n",
" DType . float64 , \n",
") / NDArray . scalar ( Value . float ( Float ( 1000000.0 ))) \n",
"_NDArray_4 = zeros ( TupleInt ( Int ( 2 )) + TupleInt ( Int ( 20 )), OptionalDType . some ( DType . float64 ), OptionalDevice . some ( _NDArray_1 . device )) \n",
"_MultiAxisIndexKey_1 = MultiAxisIndexKey ( MultiAxisIndexKeyItem . slice ( Slice ())) \n",
"_IndexKey_1 = IndexKey . multi_axis ( MultiAxisIndexKey ( MultiAxisIndexKeyItem . int ( Int ( 0 ))) + _MultiAxisIndexKey_1 ) \n",
"_NDArray_5 = _NDArray_1 [ ndarray_index ( _NDArray_2 == NDArray . scalar ( Value . int ( Int ( 0 ))))] \n",
"_OptionalIntOrTuple_1 = OptionalIntOrTuple . some ( IntOrTuple . int ( Int ( 0 ))) \n",
"_NDArray_4 [ _IndexKey_1 ] = sum ( _NDArray_5 , _OptionalIntOrTuple_1 ) / NDArray . scalar ( Value . int ( _NDArray_5 . shape [ Int ( 0 )])) \n",
"_IndexKey_2 = IndexKey . multi_axis ( MultiAxisIndexKey ( MultiAxisIndexKeyItem . int ( Int ( 1 ))) + _MultiAxisIndexKey_1 ) \n",
"_NDArray_6 = _NDArray_1 [ ndarray_index ( _NDArray_2 == NDArray . scalar ( Value . int ( Int ( 1 ))))] \n",
"_NDArray_4 [ _IndexKey_2 ] = sum ( _NDArray_6 , _OptionalIntOrTuple_1 ) / NDArray . scalar ( Value . int ( _NDArray_6 . shape [ Int ( 0 )])) \n",
"_NDArray_7 = concat ( TupleNDArray ( _NDArray_5 - _NDArray_4 [ _IndexKey_1 ]) + TupleNDArray ( _NDArray_6 - _NDArray_4 [ _IndexKey_2 ]), OptionalInt . some ( Int ( 0 ))) \n",
"_NDArray_8 = square ( _NDArray_7 - expand_dims ( sum ( _NDArray_7 , _OptionalIntOrTuple_1 ) / NDArray . scalar ( Value . int ( _NDArray_7 . shape [ Int ( 0 )])))) \n",
"_NDArray_9 = sqrt ( sum ( _NDArray_8 , _OptionalIntOrTuple_1 ) / NDArray . scalar ( Value . int ( _NDArray_8 . shape [ Int ( 0 )]))) \n",
"_NDArray_10 = copy ( _NDArray_9 ) \n",
"_NDArray_10 [ ndarray_index ( _NDArray_9 == NDArray . scalar ( Value . int ( Int ( 0 ))))] = NDArray . scalar ( Value . float ( Float ( 1.0 ))) \n",
"_TupleNDArray_1 = svd ( sqrt ( NDArray . scalar ( Value . float ( Float . rational ( Rational ( 1 , 999998 ))))) * ( _NDArray_7 / _NDArray_10 ), FALSE ) \n",
"_Slice_1 = Slice ( OptionalInt . none , OptionalInt . some ( sum ( astype ( _TupleNDArray_1 [ Int ( 1 )] > NDArray . scalar ( Value . float ( Float ( 0.0001 ))), DType . int32 )) . to_value () . to_int )) \n",
"_NDArray_11 = ( _TupleNDArray_1 [ Int ( 2 )][ IndexKey . multi_axis ( MultiAxisIndexKey ( MultiAxisIndexKeyItem . slice ( _Slice_1 )) + _MultiAxisIndexKey_1 )] / _NDArray_10 ) . T / _TupleNDArray_1 [ \n",
" Int ( 1 ) \n",
"][ IndexKey . slice ( _Slice_1 )] \n",
"_TupleNDArray_2 = svd ( \n",
" ( sqrt (( NDArray . scalar ( Value . int ( Int ( 1000000 ))) * _NDArray_3 ) * NDArray . scalar ( Value . float ( Float ( 1.0 )))) * ( _NDArray_4 - ( _NDArray_3 @ _NDArray_4 )) . T ) . T @ _NDArray_11 , FALSE \n",
") \n",
"( \n",
" ( _NDArray_1 - ( _NDArray_3 @ _NDArray_4 )) \n",
" @ ( \n",
" _NDArray_11 \n",
" @ _TupleNDArray_2 [ Int ( 2 )] . T [ \n",
" IndexKey . multi_axis ( \n",
" _MultiAxisIndexKey_1 \n",
" + MultiAxisIndexKey ( \n",
" MultiAxisIndexKeyItem . slice ( \n",
" Slice ( \n",
" OptionalInt . none , \n",
" OptionalInt . some ( \n",
" sum ( astype ( _TupleNDArray_2 [ Int ( 1 )] > ( NDArray . scalar ( Value . float ( Float ( 0.0001 ))) * _TupleNDArray_2 [ Int ( 1 )][ IndexKey . int ( Int ( 0 ))]), DType . int32 )) \n",
" . to_value () \n",
" . to_int \n",
" ), \n",
" ) \n",
" ) \n",
" ) \n",
" ) \n",
" ] \n",
" ) \n",
")[ IndexKey . multi_axis ( _MultiAxisIndexKey_1 + MultiAxisIndexKey ( MultiAxisIndexKeyItem . slice ( Slice ( OptionalInt . none , OptionalInt . some ( Int ( 1 ))))))] \n",
" \n"
],
"text/latex": [
"\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}1} \\PY{o}{=} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{var}\\PY{p}{(}\\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{X}\\PY{l+s+s2}{\\PYZdq{}}\\PY{p}{)}\n",
"\\PY{n}{assume\\PYZus{}dtype}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{,} \\PY{n}{DType}\\PY{o}{.}\\PY{n}{float64}\\PY{p}{)}\n",
"\\PY{n}{assume\\PYZus{}shape}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{,} \\PY{n}{TupleInt}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1000000}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{TupleInt}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{20}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{assume\\PYZus{}isfinite}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}2} \\PY{o}{=} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{var}\\PY{p}{(}\\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{y}\\PY{l+s+s2}{\\PYZdq{}}\\PY{p}{)}\n",
"\\PY{n}{assume\\PYZus{}dtype}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}2}\\PY{p}{,} \\PY{n}{DType}\\PY{o}{.}\\PY{n}{int64}\\PY{p}{)}\n",
"\\PY{n}{assume\\PYZus{}shape}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}2}\\PY{p}{,} \\PY{n}{TupleInt}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1000000}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{assume\\PYZus{}value\\PYZus{}one\\PYZus{}of}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}2}\\PY{p}{,} \\PY{n}{TupleValue}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{TupleValue}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}3} \\PY{o}{=} \\PY{n}{astype}\\PY{p}{(}\n",
" \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{vector}\\PY{p}{(}\\PY{n}{TupleValue}\\PY{p}{(}\\PY{n+nb}{sum}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}2} \\PY{o}{==} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{o}{.}\\PY{n}{to\\PYZus{}value}\\PY{p}{(}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{TupleValue}\\PY{p}{(}\\PY{n+nb}{sum}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}2} \\PY{o}{==} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{o}{.}\\PY{n}{to\\PYZus{}value}\\PY{p}{(}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{,}\n",
" \\PY{n}{DType}\\PY{o}{.}\\PY{n}{float64}\\PY{p}{,}\n",
"\\PY{p}{)} \\PY{o}{/} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{float}\\PY{p}{(}\\PY{n}{Float}\\PY{p}{(}\\PY{l+m+mf}{1000000.0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}4} \\PY{o}{=} \\PY{n}{zeros}\\PY{p}{(}\\PY{n}{TupleInt}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{2}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{TupleInt}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{20}\\PY{p}{)}\\PY{p}{)}\\PY{p}{,} \\PY{n}{OptionalDType}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\\PY{n}{DType}\\PY{o}{.}\\PY{n}{float64}\\PY{p}{)}\\PY{p}{,} \\PY{n}{OptionalDevice}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{o}{.}\\PY{n}{device}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}MultiAxisIndexKey\\PYZus{}1} \\PY{o}{=} \\PY{n}{MultiAxisIndexKey}\\PY{p}{(}\\PY{n}{MultiAxisIndexKeyItem}\\PY{o}{.}\\PY{n}{slice}\\PY{p}{(}\\PY{n}{Slice}\\PY{p}{(}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}IndexKey\\PYZus{}1} \\PY{o}{=} \\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{multi\\PYZus{}axis}\\PY{p}{(}\\PY{n}{MultiAxisIndexKey}\\PY{p}{(}\\PY{n}{MultiAxisIndexKeyItem}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{\\PYZus{}MultiAxisIndexKey\\PYZus{}1}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}5} \\PY{o}{=} \\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{[}\\PY{n}{ndarray\\PYZus{}index}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}2} \\PY{o}{==} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{]}\n",
"\\PY{n}{\\PYZus{}OptionalIntOrTuple\\PYZus{}1} \\PY{o}{=} \\PY{n}{OptionalIntOrTuple}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\\PY{n}{IntOrTuple}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}4}\\PY{p}{[}\\PY{n}{\\PYZus{}IndexKey\\PYZus{}1}\\PY{p}{]} \\PY{o}{=} \\PY{n+nb}{sum}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}5}\\PY{p}{,} \\PY{n}{\\PYZus{}OptionalIntOrTuple\\PYZus{}1}\\PY{p}{)} \\PY{o}{/} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}5}\\PY{o}{.}\\PY{n}{shape}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{]}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}IndexKey\\PYZus{}2} \\PY{o}{=} \\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{multi\\PYZus{}axis}\\PY{p}{(}\\PY{n}{MultiAxisIndexKey}\\PY{p}{(}\\PY{n}{MultiAxisIndexKeyItem}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{\\PYZus{}MultiAxisIndexKey\\PYZus{}1}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}6} \\PY{o}{=} \\PY{n}{\\PYZus{}NDArray\\PYZus{}1}\\PY{p}{[}\\PY{n}{ndarray\\PYZus{}index}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}2} \\PY{o}{==} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{]}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}4}\\PY{p}{[}\\PY{n}{\\PYZus{}IndexKey\\PYZus{}2}\\PY{p}{]} \\PY{o}{=} \\PY{n+nb}{sum}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}6}\\PY{p}{,} \\PY{n}{\\PYZus{}OptionalIntOrTuple\\PYZus{}1}\\PY{p}{)} \\PY{o}{/} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}6}\\PY{o}{.}\\PY{n}{shape}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{]}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}7} \\PY{o}{=} \\PY{n}{concat}\\PY{p}{(}\\PY{n}{TupleNDArray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}5} \\PY{o}{\\PYZhy{}} \\PY{n}{\\PYZus{}NDArray\\PYZus{}4}\\PY{p}{[}\\PY{n}{\\PYZus{}IndexKey\\PYZus{}1}\\PY{p}{]}\\PY{p}{)} \\PY{o}{+} \\PY{n}{TupleNDArray}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}6} \\PY{o}{\\PYZhy{}} \\PY{n}{\\PYZus{}NDArray\\PYZus{}4}\\PY{p}{[}\\PY{n}{\\PYZus{}IndexKey\\PYZus{}2}\\PY{p}{]}\\PY{p}{)}\\PY{p}{,} \\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}8} \\PY{o}{=} \\PY{n}{square}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}7} \\PY{o}{\\PYZhy{}} \\PY{n}{expand\\PYZus{}dims}\\PY{p}{(}\\PY{n+nb}{sum}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}7}\\PY{p}{,} \\PY{n}{\\PYZus{}OptionalIntOrTuple\\PYZus{}1}\\PY{p}{)} \\PY{o}{/} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}7}\\PY{o}{.}\\PY{n}{shape}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{]}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}9} \\PY{o}{=} \\PY{n}{sqrt}\\PY{p}{(}\\PY{n+nb}{sum}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}8}\\PY{p}{,} \\PY{n}{\\PYZus{}OptionalIntOrTuple\\PYZus{}1}\\PY{p}{)} \\PY{o}{/} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}8}\\PY{o}{.}\\PY{n}{shape}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{]}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}10} \\PY{o}{=} \\PY{n}{copy}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}9}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}10}\\PY{p}{[}\\PY{n}{ndarray\\PYZus{}index}\\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}9} \\PY{o}{==} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{]} \\PY{o}{=} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{float}\\PY{p}{(}\\PY{n}{Float}\\PY{p}{(}\\PY{l+m+mf}{1.0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}1} \\PY{o}{=} \\PY{n}{svd}\\PY{p}{(}\\PY{n}{sqrt}\\PY{p}{(}\\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{float}\\PY{p}{(}\\PY{n}{Float}\\PY{o}{.}\\PY{n}{rational}\\PY{p}{(}\\PY{n}{Rational}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{,} \\PY{l+m+mi}{999998}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)} \\PY{o}{*} \\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}7} \\PY{o}{/} \\PY{n}{\\PYZus{}NDArray\\PYZus{}10}\\PY{p}{)}\\PY{p}{,} \\PY{n}{FALSE}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}Slice\\PYZus{}1} \\PY{o}{=} \\PY{n}{Slice}\\PY{p}{(}\\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{none}\\PY{p}{,} \\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\\PY{n+nb}{sum}\\PY{p}{(}\\PY{n}{astype}\\PY{p}{(}\\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}1}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{]} \\PY{o}{\\PYZgt{}} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{float}\\PY{p}{(}\\PY{n}{Float}\\PY{p}{(}\\PY{l+m+mf}{0.0001}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{,} \\PY{n}{DType}\\PY{o}{.}\\PY{n}{int32}\\PY{p}{)}\\PY{p}{)}\\PY{o}{.}\\PY{n}{to\\PYZus{}value}\\PY{p}{(}\\PY{p}{)}\\PY{o}{.}\\PY{n}{to\\PYZus{}int}\\PY{p}{)}\\PY{p}{)}\n",
"\\PY{n}{\\PYZus{}NDArray\\PYZus{}11} \\PY{o}{=} \\PY{p}{(}\\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}1}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{2}\\PY{p}{)}\\PY{p}{]}\\PY{p}{[}\\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{multi\\PYZus{}axis}\\PY{p}{(}\\PY{n}{MultiAxisIndexKey}\\PY{p}{(}\\PY{n}{MultiAxisIndexKeyItem}\\PY{o}{.}\\PY{n}{slice}\\PY{p}{(}\\PY{n}{\\PYZus{}Slice\\PYZus{}1}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{\\PYZus{}MultiAxisIndexKey\\PYZus{}1}\\PY{p}{)}\\PY{p}{]} \\PY{o}{/} \\PY{n}{\\PYZus{}NDArray\\PYZus{}10}\\PY{p}{)}\\PY{o}{.}\\PY{n}{T} \\PY{o}{/} \\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}1}\\PY{p}{[}\n",
" \\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\n",
"\\PY{p}{]}\\PY{p}{[}\\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{slice}\\PY{p}{(}\\PY{n}{\\PYZus{}Slice\\PYZus{}1}\\PY{p}{)}\\PY{p}{]}\n",
"\\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}2} \\PY{o}{=} \\PY{n}{svd}\\PY{p}{(}\n",
" \\PY{p}{(}\\PY{n}{sqrt}\\PY{p}{(}\\PY{p}{(}\\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1000000}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)} \\PY{o}{*} \\PY{n}{\\PYZus{}NDArray\\PYZus{}3}\\PY{p}{)} \\PY{o}{*} \\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{float}\\PY{p}{(}\\PY{n}{Float}\\PY{p}{(}\\PY{l+m+mf}{1.0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)} \\PY{o}{*} \\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}4} \\PY{o}{\\PYZhy{}} \\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}3} \\PY{o}{@} \\PY{n}{\\PYZus{}NDArray\\PYZus{}4}\\PY{p}{)}\\PY{p}{)}\\PY{o}{.}\\PY{n}{T}\\PY{p}{)}\\PY{o}{.}\\PY{n}{T} \\PY{o}{@} \\PY{n}{\\PYZus{}NDArray\\PYZus{}11}\\PY{p}{,} \\PY{n}{FALSE}\n",
"\\PY{p}{)}\n",
"\\PY{p}{(}\n",
" \\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}1} \\PY{o}{\\PYZhy{}} \\PY{p}{(}\\PY{n}{\\PYZus{}NDArray\\PYZus{}3} \\PY{o}{@} \\PY{n}{\\PYZus{}NDArray\\PYZus{}4}\\PY{p}{)}\\PY{p}{)}\n",
" \\PY{o}{@} \\PY{p}{(}\n",
" \\PY{n}{\\PYZus{}NDArray\\PYZus{}11}\n",
" \\PY{o}{@} \\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}2}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{2}\\PY{p}{)}\\PY{p}{]}\\PY{o}{.}\\PY{n}{T}\\PY{p}{[}\n",
" \\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{multi\\PYZus{}axis}\\PY{p}{(}\n",
" \\PY{n}{\\PYZus{}MultiAxisIndexKey\\PYZus{}1}\n",
" \\PY{o}{+} \\PY{n}{MultiAxisIndexKey}\\PY{p}{(}\n",
" \\PY{n}{MultiAxisIndexKeyItem}\\PY{o}{.}\\PY{n}{slice}\\PY{p}{(}\n",
" \\PY{n}{Slice}\\PY{p}{(}\n",
" \\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{none}\\PY{p}{,}\n",
" \\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\n",
" \\PY{n+nb}{sum}\\PY{p}{(}\\PY{n}{astype}\\PY{p}{(}\\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}2}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{]} \\PY{o}{\\PYZgt{}} \\PY{p}{(}\\PY{n}{NDArray}\\PY{o}{.}\\PY{n}{scalar}\\PY{p}{(}\\PY{n}{Value}\\PY{o}{.}\\PY{n}{float}\\PY{p}{(}\\PY{n}{Float}\\PY{p}{(}\\PY{l+m+mf}{0.0001}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)} \\PY{o}{*} \\PY{n}{\\PYZus{}TupleNDArray\\PYZus{}2}\\PY{p}{[}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{]}\\PY{p}{[}\\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{int}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)}\\PY{p}{]}\\PY{p}{)}\\PY{p}{,} \\PY{n}{DType}\\PY{o}{.}\\PY{n}{int32}\\PY{p}{)}\\PY{p}{)}\n",
" \\PY{o}{.}\\PY{n}{to\\PYZus{}value}\\PY{p}{(}\\PY{p}{)}\n",
" \\PY{o}{.}\\PY{n}{to\\PYZus{}int}\n",
" \\PY{p}{)}\\PY{p}{,}\n",
" \\PY{p}{)}\n",
" \\PY{p}{)}\n",
" \\PY{p}{)}\n",
" \\PY{p}{)}\n",
" \\PY{p}{]}\n",
" \\PY{p}{)}\n",
"\\PY{p}{)}\\PY{p}{[}\\PY{n}{IndexKey}\\PY{o}{.}\\PY{n}{multi\\PYZus{}axis}\\PY{p}{(}\\PY{n}{\\PYZus{}MultiAxisIndexKey\\PYZus{}1} \\PY{o}{+} \\PY{n}{MultiAxisIndexKey}\\PY{p}{(}\\PY{n}{MultiAxisIndexKeyItem}\\PY{o}{.}\\PY{n}{slice}\\PY{p}{(}\\PY{n}{Slice}\\PY{p}{(}\\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{none}\\PY{p}{,} \\PY{n}{OptionalInt}\\PY{o}{.}\\PY{n}{some}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{]}\n",
"\\end{Verbatim}\n"
],
"text/plain": [
"_NDArray_1 = NDArray.var(\"X\")\n",
"assume_dtype(_NDArray_1, DType.float64)\n",
"assume_shape(_NDArray_1, TupleInt(Int(1000000)) + TupleInt(Int(20)))\n",
"assume_isfinite(_NDArray_1)\n",
"_NDArray_2 = NDArray.var(\"y\")\n",
"assume_dtype(_NDArray_2, DType.int64)\n",
"assume_shape(_NDArray_2, TupleInt(Int(1000000)))\n",
"assume_value_one_of(_NDArray_2, TupleValue(Value.int(Int(0))) + TupleValue(Value.int(Int(1))))\n",
"_NDArray_3 = astype(\n",
" NDArray.vector(TupleValue(sum(_NDArray_2 == NDArray.scalar(Value.int(Int(0)))).to_value()) + TupleValue(sum(_NDArray_2 == NDArray.scalar(Value.int(Int(1)))).to_value())),\n",
" DType.float64,\n",
") / NDArray.scalar(Value.float(Float(1000000.0)))\n",
"_NDArray_4 = zeros(TupleInt(Int(2)) + TupleInt(Int(20)), OptionalDType.some(DType.float64), OptionalDevice.some(_NDArray_1.device))\n",
"_MultiAxisIndexKey_1 = MultiAxisIndexKey(MultiAxisIndexKeyItem.slice(Slice()))\n",
"_IndexKey_1 = IndexKey.multi_axis(MultiAxisIndexKey(MultiAxisIndexKeyItem.int(Int(0))) + _MultiAxisIndexKey_1)\n",
"_NDArray_5 = _NDArray_1[ndarray_index(_NDArray_2 == NDArray.scalar(Value.int(Int(0))))]\n",
"_OptionalIntOrTuple_1 = OptionalIntOrTuple.some(IntOrTuple.int(Int(0)))\n",
"_NDArray_4[_IndexKey_1] = sum(_NDArray_5, _OptionalIntOrTuple_1) / NDArray.scalar(Value.int(_NDArray_5.shape[Int(0)]))\n",
"_IndexKey_2 = IndexKey.multi_axis(MultiAxisIndexKey(MultiAxisIndexKeyItem.int(Int(1))) + _MultiAxisIndexKey_1)\n",
"_NDArray_6 = _NDArray_1[ndarray_index(_NDArray_2 == NDArray.scalar(Value.int(Int(1))))]\n",
"_NDArray_4[_IndexKey_2] = sum(_NDArray_6, _OptionalIntOrTuple_1) / NDArray.scalar(Value.int(_NDArray_6.shape[Int(0)]))\n",
"_NDArray_7 = concat(TupleNDArray(_NDArray_5 - _NDArray_4[_IndexKey_1]) + TupleNDArray(_NDArray_6 - _NDArray_4[_IndexKey_2]), OptionalInt.some(Int(0)))\n",
"_NDArray_8 = square(_NDArray_7 - expand_dims(sum(_NDArray_7, _OptionalIntOrTuple_1) / NDArray.scalar(Value.int(_NDArray_7.shape[Int(0)]))))\n",
"_NDArray_9 = sqrt(sum(_NDArray_8, _OptionalIntOrTuple_1) / NDArray.scalar(Value.int(_NDArray_8.shape[Int(0)])))\n",
"_NDArray_10 = copy(_NDArray_9)\n",
"_NDArray_10[ndarray_index(_NDArray_9 == NDArray.scalar(Value.int(Int(0))))] = NDArray.scalar(Value.float(Float(1.0)))\n",
"_TupleNDArray_1 = svd(sqrt(NDArray.scalar(Value.float(Float.rational(Rational(1, 999998))))) * (_NDArray_7 / _NDArray_10), FALSE)\n",
"_Slice_1 = Slice(OptionalInt.none, OptionalInt.some(sum(astype(_TupleNDArray_1[Int(1)] > NDArray.scalar(Value.float(Float(0.0001))), DType.int32)).to_value().to_int))\n",
"_NDArray_11 = (_TupleNDArray_1[Int(2)][IndexKey.multi_axis(MultiAxisIndexKey(MultiAxisIndexKeyItem.slice(_Slice_1)) + _MultiAxisIndexKey_1)] / _NDArray_10).T / _TupleNDArray_1[\n",
" Int(1)\n",
"][IndexKey.slice(_Slice_1)]\n",
"_TupleNDArray_2 = svd(\n",
" (sqrt((NDArray.scalar(Value.int(Int(1000000))) * _NDArray_3) * NDArray.scalar(Value.float(Float(1.0)))) * (_NDArray_4 - (_NDArray_3 @ _NDArray_4)).T).T @ _NDArray_11, FALSE\n",
")\n",
"(\n",
" (_NDArray_1 - (_NDArray_3 @ _NDArray_4))\n",
" @ (\n",
" _NDArray_11\n",
" @ _TupleNDArray_2[Int(2)].T[\n",
" IndexKey.multi_axis(\n",
" _MultiAxisIndexKey_1\n",
" + MultiAxisIndexKey(\n",
" MultiAxisIndexKeyItem.slice(\n",
" Slice(\n",
" OptionalInt.none,\n",
" OptionalInt.some(\n",
" sum(astype(_TupleNDArray_2[Int(1)] > (NDArray.scalar(Value.float(Float(0.0001))) * _TupleNDArray_2[Int(1)][IndexKey.int(Int(0))]), DType.int32))\n",
" .to_value()\n",
" .to_int\n",
" ),\n",
" )\n",
" )\n",
" )\n",
" )\n",
" ]\n",
" )\n",
")[IndexKey.multi_axis(_MultiAxisIndexKey_1 + MultiAxisIndexKey(MultiAxisIndexKeyItem.slice(Slice(OptionalInt.none, OptionalInt.some(Int(1))))))]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from egglog.exp.array_api_numba import array_api_numba_schedule\n",
"\n",
"simplified_res = EGraph().simplify(res, array_api_numba_schedule)\n",
"simplified_res"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Program Gen\n",
"\n",
"_Generate an imperative program from your e-graph with replacement rules that walk the graph in a fixed order_\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now that we have a program, what do we do with it?\n",
"\n",
"Well we showed how we can use eager evaluation to get a result, but what if we don't want to do the computation in egglog, but instead export a program so we can execute that back in Python or in this case feed it to Python?\n",
"\n",
"Well in this case we have designed a `Program` object which we can use to convert a funtional egglog expression back to imperative Python code:\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from egglog.exp.array_api_program_gen import *\n",
"\n",
"egraph = EGraph()\n",
"fn_program = egraph.let(\n",
" \"fn_program\",\n",
" ndarray_function_two(simplified_res, NDArray.var(\"X\"), NDArray.var(\"y\")),\n",
")\n",
"egraph.run(array_api_program_gen_schedule)\n",
"fn = egraph.eval(fn_program.py_object)\n",
"\n",
"fn"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"def __fn(X, y):\n",
" assert X.dtype == np.dtype(np.float64)\n",
" assert X.shape == (1000000, 20,)\n",
" assert np.all(np.isfinite(X))\n",
" assert y.dtype == np.dtype(np.int64)\n",
" assert y.shape == (1000000,)\n",
" assert set(np.unique(y)) == set((0, 1,))\n",
" _0 = y == np.array(0)\n",
" _1 = np.sum(_0)\n",
" _2 = y == np.array(1)\n",
" _3 = np.sum(_2)\n",
" _4 = np.array((_1, _3,)).astype(np.dtype(np.float64))\n",
" _5 = _4 / np.array(1000000.0)\n",
" _6 = np.zeros((2, 20,), dtype=np.dtype(np.float64))\n",
" _7 = np.sum(X[_0], axis=0)\n",
" _8 = _7 / np.array(X[_0].shape[0])\n",
" _6[0, :] = _8\n",
" _9 = np.sum(X[_2], axis=0)\n",
" _10 = _9 / np.array(X[_2].shape[0])\n",
" _6[1, :] = _10\n",
" _11 = _5 @ _6\n",
" _12 = X - _11\n",
" _13 = np.sqrt(np.array(float(1 / 999998)))\n",
" _14 = X[_0] - _6[0, :]\n",
" _15 = X[_2] - _6[1, :]\n",
" _16 = np.concatenate((_14, _15,), axis=0)\n",
" _17 = np.sum(_16, axis=0)\n",
" _18 = _17 / np.array(_16.shape[0])\n",
" _19 = np.expand_dims(_18, 0)\n",
" _20 = _16 - _19\n",
" _21 = np.square(_20)\n",
" _22 = np.sum(_21, axis=0)\n",
" _23 = _22 / np.array(_21.shape[0])\n",
" _24 = np.sqrt(_23)\n",
" _25 = _24 == np.array(0)\n",
" _24[_25] = np.array(1.0)\n",
" _26 = _16 / _24\n",
" _27 = _13 * _26\n",
" _28 = np.linalg.svd(_27, full_matrices=False)\n",
" _29 = _28[1] > np.array(0.0001)\n",
" _30 = _29.astype(np.dtype(np.int32))\n",
" _31 = np.sum(_30)\n",
" _32 = _28[2][:_31, :] / _24\n",
" _33 = _32.T / _28[1][:_31]\n",
" _34 = np.array(1000000) * _5\n",
" _35 = _34 * np.array(1.0)\n",
" _36 = np.sqrt(_35)\n",
" _37 = _6 - _11\n",
" _38 = _36 * _37.T\n",
" _39 = _38.T @ _33\n",
" _40 = np.linalg.svd(_39, full_matrices=False)\n",
" _41 = np.array(0.0001) * _40[1][0]\n",
" _42 = _40[1] > _41\n",
" _43 = _42.astype(np.dtype(np.int32))\n",
" _44 = np.sum(_43)\n",
" _45 = _33 @ _40[2].T[:, :_44]\n",
" _46 = _12 @ _45\n",
" return _46[:, :1]\n",
"\n"
]
}
],
"source": [
"import inspect\n",
"\n",
"print(inspect.getsource(fn))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"From there we can complete our work, by optimizing with numba and we can call with our original values:\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/var/folders/xn/05ktz3056kqd9n8frgd6236h0000gn/T/egglog-9b40af4a-3b8a-4996-a78a-fd6284dbf541.py:56: NumbaPerformanceWarning: '@' is faster on contiguous arrays, called on (Array(float64, 2, 'C', False, aligned=True), Array(float64, 2, 'A', False, aligned=True))\n",
" _45 = _33 @ _40[2].T[:, :_44]\n"
]
},
{
"data": {
"text/plain": [
"array([[ 0.64233002],\n",
" [ 0.63661245],\n",
" [-1.603293 ],\n",
" ...,\n",
" [-1.1506433 ],\n",
" [ 0.71687176],\n",
" [-1.51119579]])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from numba import njit\n",
"\n",
"njit(fn)(X_np, y_np)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These program rewrites work by first translating the code into an intermediate IR of just program assignments and statements, and then turning this into source. It does this by walking the graph first top to bottom, recording the first parent that saw every child. Then it goes from bottom to top, building up a larger set of statements as well as an expression representing each node. If a node has already been emitted somewhere else, we record that, and we always wait for all the children to complete before moving forward. That way, we can enforce some ordering and we know that everything will be emitted only once.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Example\n",
"\n",
"Here is a small example, we might want to compile, let's say we want a function like this:\n",
"\n",
"```python\n",
"def __fn(x, y)\n",
" x[1] = 10\n",
" z = x + x\n",
" return sum(z) + y\n",
"```\n",
"\n",
"We can build up a functional program for this and then compile it to Python source:\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"def __fn(x, y):\n",
" x[1] = 10\n",
" _0 = x + x\n",
" return sum(_0) + y\n",
"\n"
]
}
],
"source": [
"from egglog.exp.program_gen import *\n",
"\n",
"x = Program(\"x\", is_identifier=True)\n",
"y = Program(\"y\", is_identifier=True)\n",
"# To reference x, we need to first emit the statement\n",
"x_modified = Program(\"x\").statement(x + \"[1] = 10\")\n",
"\n",
"z = (x_modified + \" + \" + x_modified).assign()\n",
"res = Program(\"sum(\") + z + \") + \" + y\n",
"fn = res.function_two(x, y)\n",
"\n",
"egraph = EGraph()\n",
"egraph.register(fn.compile())\n",
"egraph.run(program_gen_ruleset.saturate())\n",
"print(egraph.eval(fn.statements))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This happens, by first going top to bottom with the `compile`, which will put a total ordering on all nodes, by defining one, and only one, parent expression for each expression.\n",
"\n",
"Then, from the bottom up, for each node we compute an expression string and a list of statements string.\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" \n",
"\n",
"outer_cluster_9 \n",
" \n",
"\n",
"cluster_9 \n",
" \n",
" \n",
"\n",
"outer_cluster_6 \n",
" \n",
"\n",
"cluster_6 \n",
" \n",
" \n",
"\n",
"outer_cluster_13 \n",
" \n",
"\n",
"cluster_13 \n",
" \n",
" \n",
"\n",
"outer_cluster_2 \n",
" \n",
"\n",
"cluster_2 \n",
" \n",
" \n",
"\n",
"outer_cluster_12 \n",
" \n",
"\n",
"cluster_12 \n",
" \n",
" \n",
"\n",
"outer_cluster_10 \n",
" \n",
"\n",
"cluster_10 \n",
" \n",
" \n",
"\n",
"outer_cluster_5 \n",
" \n",
"\n",
"cluster_5 \n",
" \n",
" \n",
"\n",
"outer_cluster_11 \n",
" \n",
"\n",
"cluster_11 \n",
" \n",
" \n",
"\n",
"outer_cluster_0 \n",
" \n",
"\n",
"cluster_0 \n",
" \n",
" \n",
"\n",
"outer_cluster_4 \n",
" \n",
"\n",
"cluster_4 \n",
" \n",
" \n",
"\n",
"outer_cluster_15 \n",
" \n",
"\n",
"cluster_15 \n",
" \n",
" \n",
"\n",
"outer_cluster_3 \n",
" \n",
"\n",
"cluster_3 \n",
" \n",
" \n",
"\n",
"outer_cluster_16 \n",
" \n",
"\n",
"cluster_16 \n",
" \n",
" \n",
"\n",
"outer_cluster_8 \n",
" \n",
"\n",
"cluster_8 \n",
" \n",
" \n",
"\n",
"outer_cluster_1 \n",
" \n",
"\n",
"cluster_1 \n",
" \n",
" \n",
"\n",
"outer_cluster_7 \n",
" \n",
"\n",
"cluster_7 \n",
" \n",
" \n",
"\n",
"outer_cluster_14 \n",
" \n",
"\n",
"cluster_14 \n",
" \n",
" \n",
"\n",
"outer_cluster_bool-0 \n",
" \n",
"\n",
"cluster_bool-0 \n",
" \n",
" \n",
"\n",
"outer_cluster_i64-0 \n",
" \n",
"\n",
"cluster_i64-0 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-9249358851075372135-value \n",
" \n",
"\n",
"cluster_Program_next_sym-9249358851075372135-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-5040379952546458196-value \n",
" \n",
"\n",
"cluster_Program_next_sym-5040379952546458196-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-2546176790493825425-value \n",
" \n",
"\n",
"cluster_Program_next_sym-2546176790493825425-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-8417957797057827878-value \n",
" \n",
"\n",
"cluster_Program_next_sym-8417957797057827878-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-3377577844511369682-value \n",
" \n",
"\n",
"cluster_Program_next_sym-3377577844511369682-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-5871781006564002453-value \n",
" \n",
"\n",
"cluster_Program_next_sym-5871781006564002453-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-4208978898528913939-value \n",
" \n",
"\n",
"cluster_Program_next_sym-4208978898528913939-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-1714775736476281168-value \n",
" \n",
"\n",
"cluster_Program_next_sym-1714775736476281168-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-11743562013128004906-value \n",
" \n",
"\n",
"cluster_Program_expr-11743562013128004906-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-9249358851075372135-value \n",
" \n",
"\n",
"cluster_Program_expr-9249358851075372135-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-17615343019692007359-value \n",
" \n",
"\n",
"cluster_Program_expr-17615343019692007359-value \n",
" \n",
" \n",
"\n",
"outer_cluster_String-12969792886956269196 \n",
" \n",
"\n",
"cluster_String-12969792886956269196 \n",
" \n",
" \n",
"\n",
"outer_cluster_String-11226098287981005201 \n",
" \n",
"\n",
"cluster_String-11226098287981005201 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-10080759905092916392-value \n",
" \n",
"\n",
"cluster_Program_expr-10080759905092916392-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-5871781006564002453-value \n",
" \n",
"\n",
"cluster_Program_expr-5871781006564002453-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-2546176790493825425-value \n",
" \n",
"\n",
"cluster_Program_expr-2546176790493825425-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-14289738803621830331-value \n",
" \n",
"\n",
"cluster_Program_expr-14289738803621830331-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-4208978898528913939-value \n",
" \n",
"\n",
"cluster_Program_expr-4208978898528913939-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-5040379952546458196-value \n",
" \n",
"\n",
"cluster_Program_expr-5040379952546458196-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-1714775736476281168-value \n",
" \n",
"\n",
"cluster_Program_expr-1714775736476281168-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-10912160959110460649-value \n",
" \n",
"\n",
"cluster_Program_expr-10912160959110460649-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-8417957797057827878-value \n",
" \n",
"\n",
"cluster_Program_expr-8417957797057827878-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-16783941965674463102-value \n",
" \n",
"\n",
"cluster_Program_expr-16783941965674463102-value \n",
" \n",
" \n",
"\n",
"outer_cluster_String-11355304735691241393 \n",
" \n",
"\n",
"cluster_String-11355304735691241393 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-3377577844511369682-value \n",
" \n",
"\n",
"cluster_Program_expr-3377577844511369682-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-15121139857639374588-value \n",
" \n",
"\n",
"cluster_Program_expr-15121139857639374588-value \n",
" \n",
" \n",
"\n",
"outer_cluster_String-13189374861551619161 \n",
" \n",
"\n",
"cluster_String-13189374861551619161 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-15952540911656918845-value \n",
" \n",
"\n",
"cluster_Program_expr-15952540911656918845-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-11413373673517832166-value \n",
" \n",
"\n",
"cluster_Program_compile-11413373673517832166-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-6662973804773207269-value \n",
" \n",
"\n",
"cluster_Program_compile-6662973804773207269-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-395596399104602408-value \n",
" \n",
"\n",
"cluster_Program_compile-395596399104602408-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-12930351210441812130-value \n",
" \n",
"\n",
"cluster_Program_compile-12930351210441812130-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-1351883367118893594-value \n",
" \n",
"\n",
"cluster_Program_compile-1351883367118893594-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-8179951341697187233-value \n",
" \n",
"\n",
"cluster_Program_compile-8179951341697187233-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-956286968014291186-value \n",
" \n",
"\n",
"cluster_Program_compile-956286968014291186-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-9896396136593852202-value \n",
" \n",
"\n",
"cluster_Program_compile-9896396136593852202-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-5145996267849227305-value \n",
" \n",
"\n",
"cluster_Program_compile-5145996267849227305-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-5706686836758916083-value \n",
" \n",
"\n",
"cluster_Program_compile-5706686836758916083-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-17845845248991523397-value \n",
" \n",
"\n",
"cluster_Program_compile-17845845248991523397-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-12369660641532123352-value \n",
" \n",
"\n",
"cluster_Program_compile-12369660641532123352-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-7619260772787498455-value \n",
" \n",
"\n",
"cluster_Program_compile-7619260772787498455-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-2868860904042873558-value \n",
" \n",
"\n",
"cluster_Program_compile-2868860904042873558-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-10457086705503540980-value \n",
" \n",
"\n",
"cluster_Program_compile-10457086705503540980-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-1912573936028582372-value \n",
" \n",
"\n",
"cluster_Program_compile-1912573936028582372-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-0-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-0-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-0-value \n",
" \n",
"\n",
"cluster_Program_expr-0-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-0-value \n",
" \n",
"\n",
"cluster_Program_statements-0-value \n",
" \n",
" \n",
"\n",
"outer_cluster_String-2096353982008678537 \n",
" \n",
"\n",
"cluster_String-2096353982008678537 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-0-value \n",
" \n",
"\n",
"cluster_Program_compile-0-value \n",
" \n",
" \n",
"\n",
"outer_cluster_bool-5871781006564002453 \n",
" \n",
"\n",
"cluster_bool-5871781006564002453 \n",
" \n",
" \n",
"\n",
"outer_cluster_String-9754068158704536254 \n",
" \n",
"\n",
"cluster_String-9754068158704536254 \n",
" \n",
" \n",
"\n",
"outer_cluster_String-5935442095835774456 \n",
" \n",
"\n",
"cluster_String-5935442095835774456 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-0-value \n",
" \n",
"\n",
"cluster_Program_next_sym-0-value \n",
" \n",
" \n",
"\n",
"outer_cluster_i64-5871781006564002453 \n",
" \n",
"\n",
"cluster_i64-5871781006564002453 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-17615343019692007359-value \n",
" \n",
"\n",
"cluster_Program_statements-17615343019692007359-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-16783941965674463102-value \n",
" \n",
"\n",
"cluster_Program_statements-16783941965674463102-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-4208978898528913939-value \n",
" \n",
"\n",
"cluster_Program_statements-4208978898528913939-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-9249358851075372135-value \n",
" \n",
"\n",
"cluster_Program_statements-9249358851075372135-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-14289738803621830331-value \n",
" \n",
"\n",
"cluster_Program_statements-14289738803621830331-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-10080759905092916392-value \n",
" \n",
"\n",
"cluster_Program_statements-10080759905092916392-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-5871781006564002453-value \n",
" \n",
"\n",
"cluster_Program_statements-5871781006564002453-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-10912160959110460649-value \n",
" \n",
"\n",
"cluster_Program_statements-10912160959110460649-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-2546176790493825425-value \n",
" \n",
"\n",
"cluster_Program_statements-2546176790493825425-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-10912160959110460649-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-10912160959110460649-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-16783941965674463102-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-16783941965674463102-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-10080759905092916392-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-10080759905092916392-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-2546176790493825425-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-2546176790493825425-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-3377577844511369682-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-3377577844511369682-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-9249358851075372135-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-9249358851075372135-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-10912160959110460649-value \n",
" \n",
"\n",
"cluster_Program_next_sym-10912160959110460649-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-10080759905092916392-value \n",
" \n",
"\n",
"cluster_Program_next_sym-10080759905092916392-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-15121139857639374588-value \n",
" \n",
"\n",
"cluster_Program_next_sym-15121139857639374588-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-17615343019692007359-value \n",
" \n",
"\n",
"cluster_Program_next_sym-17615343019692007359-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-15952540911656918845-value \n",
" \n",
"\n",
"cluster_Program_next_sym-15952540911656918845-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-8417957797057827878-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-8417957797057827878-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-11743562013128004906-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-11743562013128004906-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-1714775736476281168-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-1714775736476281168-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-14289738803621830331-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-14289738803621830331-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-5040379952546458196-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-5040379952546458196-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-4208978898528913939-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-4208978898528913939-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-5871781006564002453-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-5871781006564002453-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-15952540911656918845-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-15952540911656918845-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-15121139857639374588-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-15121139857639374588-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-17615343019692007359-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-17615343019692007359-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-15952540911656918845-value \n",
" \n",
"\n",
"cluster_Program_statements-15952540911656918845-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-3377577844511369682-value \n",
" \n",
"\n",
"cluster_Program_statements-3377577844511369682-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-1714775736476281168-value \n",
" \n",
"\n",
"cluster_Program_statements-1714775736476281168-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-11743562013128004906-value \n",
" \n",
"\n",
"cluster_Program_statements-11743562013128004906-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-5040379952546458196-value \n",
" \n",
"\n",
"cluster_Program_statements-5040379952546458196-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-8417957797057827878-value \n",
" \n",
"\n",
"cluster_Program_statements-8417957797057827878-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-15121139857639374588-value \n",
" \n",
"\n",
"cluster_Program_statements-15121139857639374588-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-11743562013128004906-value \n",
" \n",
"\n",
"cluster_Program_next_sym-11743562013128004906-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-16783941965674463102-value \n",
" \n",
"\n",
"cluster_Program_next_sym-16783941965674463102-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-14289738803621830331-value \n",
" \n",
"\n",
"cluster_Program_next_sym-14289738803621830331-value \n",
" \n",
" \n",
"\n",
"\n",
"Program_assign-10080759905092916392:s->Program_parent-4208978898528913939 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-4208978898528913939:s->Program___add__-13095445380246898500 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-10080759905092916392:s->Program_parent-4208978898528913939 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4696794513835434606:s->String-13189374861551619161 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4696794513835434606:s->bool-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-16291883994304651111:s->String-5935442095835774456 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-16291883994304651111:s->bool-5871781006564002453 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4485927643096296218:s->bool-5871781006564002453 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4485927643096296218:s->String-11226098287981005201 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-3377577844511369682:s->Program___add__-15952540911656918845 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-15952540911656918845:s->Program_parent-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-15952540911656918845:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-9249358851075372135:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-853919951260367888:s->bool-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-853919951260367888:s->String-9754068158704536254 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-2651793105796594534:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-2651793105796594534:s->Program_parent-15952540911656918845 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-15952540911656918845:s->Program_assign-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-0:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4019982253596759903:s->bool-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4019982253596759903:s->String-2096353982008678537 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statement-5996666920560749382:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statement-5996666920560749382:s->Program_parent-17615343019692007359 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-10357708649660298671:s->bool-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-10357708649660298671:s->String-11226098287981005201 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-17615343019692007359:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-5871781006564002453:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-1714775736476281168:s->Program_expr_to_statement-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr_to_statement-5040379952546458196:s->Program_parent-17615343019692007359 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-2671062704490572354:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-2671062704490572354:s->Program_expr_to_statement-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-14236238857028323759:s->bool-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-14236238857028323759:s->String-11355304735691241393 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-1081172882011038115:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-1081172882011038115:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-11743562013128004906:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-2546176790493825425:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-8417957797057827878:s->Program___add__-13761752264459356387 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13761752264459356387:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13761752264459356387:s->Program_parent-9249358851075372135 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_function_two-3497168771395161443:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_function_two-3497168771395161443:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_function_two-3497168771395161443:s->Program___add__-13761752264459356387 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_function_two-3497168771395161443:s->String-12969792886956269196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-5040379952546458196:s->Program_parent-17615343019692007359 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13095445380246898500:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13095445380246898500:s->Program_parent-1714775736476281168 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13241269951358007050:s->Program___add__-2671062704490572354 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13241269951358007050:s->Program_parent-16783941965674463102 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-16783941965674463102:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-10912160959110460649:s->Program_parent-1714775736476281168 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-15121139857639374588:s->Program___add__-2651793105796594534 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-15952540911656918845:s->Program_assign-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-11743562013128004906:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-9249358851075372135:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-0:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-3377577844511369682:s->Program_parent-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-1714775736476281168:s->Program_expr_to_statement-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-11743562013128004906:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-17615343019692007359:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-10080759905092916392:s->Program_parent-4208978898528913939 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-5040379952546458196:s->Program_parent-17615343019692007359 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-8417957797057827878:s->Program___add__-13761752264459356387 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-0:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-15121139857639374588:s->Program_parent-3377577844511369682 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-5871781006564002453:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-2546176790493825425:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-14289738803621830331:s->Program_parent-2546176790493825425 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-14289738803621830331:s->Program_function_two-3497168771395161443 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-4208978898528913939:s->Program___add__-13095445380246898500 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-5040379952546458196:s->Program___add__-1081172882011038115 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-10080759905092916392:s->Program_parent-4208978898528913939 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-5871781006564002453:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-1714775736476281168:s->Program_parent-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-10912160959110460649:s->Program_parent-5871781006564002453 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-8417957797057827878:s->Program_parent-15121139857639374588 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-10912160959110460649:s->Program_statement-5996666920560749382 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-16783941965674463102:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-2546176790493825425:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-3377577844511369682:s->Program___add__-15952540911656918845 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-15121139857639374588:s->Program___add__-2651793105796594534 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-17615343019692007359:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-16783941965674463102:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-4208978898528913939:s->Program_parent-10912160959110460649 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-9249358851075372135:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-15952540911656918845:s->Program_assign-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-11413373673517832166:s->Program_parent-15121139857639374588 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-11413373673517832166:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-6662973804773207269:s->Program___add__-13241269951358007050 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-6662973804773207269:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-395596399104602408:s->Program___add__-1081172882011038115 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-395596399104602408:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12930351210441812130:s->Program_parent-9249358851075372135 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12930351210441812130:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1351883367118893594:s->Program_parent-5871781006564002453 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1351883367118893594:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-8179951341697187233:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-8179951341697187233:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-956286968014291186:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-956286968014291186:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-0:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-0:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-9896396136593852202:s->Program_parent-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-9896396136593852202:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5145996267849227305:s->Program_parent-15952540911656918845 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5145996267849227305:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5706686836758916083:s->Program_parent-16783941965674463102 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5706686836758916083:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-17845845248991523397:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-17845845248991523397:s->i64-5871781006564002453 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12369660641532123352:s->Program_parent-11743562013128004906 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12369660641532123352:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-7619260772787498455:s->Program_parent-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-7619260772787498455:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-2868860904042873558:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-2868860904042873558:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-10457086705503540980:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-10457086705503540980:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1912573936028582372:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1912573936028582372:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-8417957797057827878:s->Program___add__-13761752264459356387 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-11743562013128004906:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-1714775736476281168:s->Program_expr_to_statement-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-14289738803621830331:s->Program_parent-2546176790493825425 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-5040379952546458196:s->Program___add__-1081172882011038115 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-4208978898528913939:s->Program_parent-16783941965674463102 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-5871781006564002453:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-0:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-15952540911656918845:s->Program_parent-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-15121139857639374588:s->Program_parent-9249358851075372135 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-17615343019692007359:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-10912160959110460649:s->Program_parent-5871781006564002453 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-16783941965674463102:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-10080759905092916392:s->Program___add__-13241269951358007050 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-2546176790493825425:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-3377577844511369682:s->Program_parent-15952540911656918845 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-9249358851075372135:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-9249358851075372135:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-10912160959110460649:s->Program___add__-2671062704490572354 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-10080759905092916392:s->Program___add__-13241269951358007050 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-15121139857639374588:s->Program___add__-2651793105796594534 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-17615343019692007359:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-5040379952546458196:s->Program___add__-1081172882011038115 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-2546176790493825425:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-8417957797057827878:s->Program_parent-15121139857639374588 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-15952540911656918845:s->Program_parent-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-3377577844511369682:s->Program___add__-15952540911656918845 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-11743562013128004906:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-5871781006564002453:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-4208978898528913939:s->Program___add__-13095445380246898500 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-1714775736476281168:s->Program_parent-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-0:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-16783941965674463102:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-14289738803621830331:s->Program_parent-8417957797057827878 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_assign-10080759905092916392 \n",
"\n",
" \n",
"·.assign \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-4208978898528913939 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-10080759905092916392 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4696794513835434606 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-13189374861551619161 \n",
"\n",
" \n",
"" + " \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"bool-0 \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-16291883994304651111 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-5935442095835774456 \n",
"\n",
" \n",
""y" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"bool-5871781006564002453 \n",
"\n",
" \n",
"true \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4485927643096296218 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-11226098287981005201 \n",
"\n",
" \n",
""x" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-3377577844511369682 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-15952540911656918845 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-9249358851075372135 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-853919951260367888 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-2651793105796594534 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-15952540911656918845 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-0 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4019982253596759903 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statement-5996666920560749382 \n",
"\n",
" \n",
"·.statement \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-10357708649660298671 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-17615343019692007359 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-5871781006564002453 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-1714775736476281168 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr_to_statement-5040379952546458196 \n",
"\n",
" \n",
"·.expr_to_statement \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-2671062704490572354 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-9754068158704536254 \n",
"\n",
" \n",
"") + " \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-2096353982008678537 \n",
"\n",
" \n",
""sum(" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-14236238857028323759 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-1081172882011038115 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-11743562013128004906 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-2546176790493825425 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-8417957797057827878 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13761752264459356387 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_function_two-3497168771395161443 \n",
"\n",
" \n",
"·.function_two \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-12969792886956269196 \n",
"\n",
" \n",
""__fn" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-11355304735691241393 \n",
"\n",
" \n",
""[1] = 10" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-5040379952546458196 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13095445380246898500 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13241269951358007050 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-16783941965674463102 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-10912160959110460649 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-15121139857639374588 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-15952540911656918845 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-15952540911656918845-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"_0 = x + x \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-11743562013128004906 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-11743562013128004906-value \n",
"\n",
" \n",
""x" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-9249358851075372135 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-9249358851075372135-value \n",
"\n",
" \n",
"") + " \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-0 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-0-value \n",
"\n",
" \n",
""sum(" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-3377577844511369682 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-3377577844511369682-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"_0 = x + x \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-1714775736476281168 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-1714775736476281168-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-11743562013128004906 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-11743562013128004906-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-17615343019692007359 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-17615343019692007359-value \n",
"\n",
" \n",
""[1] = 10" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-10080759905092916392 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-10080759905092916392-value \n",
"\n",
" \n",
""x + x" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-5040379952546458196 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-5040379952546458196-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-8417957797057827878 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-8417957797057827878-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"_0 = x + x \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-0 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-0-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-15121139857639374588 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-15121139857639374588-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"_0 = x + x \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-5871781006564002453 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-5871781006564002453-value \n",
"\n",
" \n",
""x" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-2546176790493825425 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-2546176790493825425-value \n",
"\n",
" \n",
""y" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-14289738803621830331 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-14289738803621830331-value \n",
"\n",
" \n",
""__fn" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-14289738803621830331 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-14289738803621830331-value \n",
"\n",
" \n",
""def __fn(x, y): \n",
" x[1] = 10 \n",
" _0 = x + x \n",
" return sum(_0) + y \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-4208978898528913939 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-4208978898528913939-value \n",
"\n",
" \n",
""x + " \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-5040379952546458196 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-5040379952546458196-value \n",
"\n",
" \n",
""x[1] = 10" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-10080759905092916392 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-10080759905092916392-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-5871781006564002453 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-5871781006564002453-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-1714775736476281168 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-1714775736476281168-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-10912160959110460649 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-10912160959110460649-value \n",
"\n",
" \n",
""x" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-8417957797057827878 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-8417957797057827878-value \n",
"\n",
" \n",
""sum(_0) + y" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-10912160959110460649 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-10912160959110460649-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-16783941965674463102 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-16783941965674463102-value \n",
"\n",
" \n",
"" + " \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-2546176790493825425 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-2546176790493825425-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-3377577844511369682 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-3377577844511369682-value \n",
"\n",
" \n",
""sum(_0" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-15121139857639374588 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-15121139857639374588-value \n",
"\n",
" \n",
""sum(_0) + " \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-17615343019692007359 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-17615343019692007359-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-16783941965674463102 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-16783941965674463102-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-4208978898528913939 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-4208978898528913939-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-9249358851075372135 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-9249358851075372135-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-15952540911656918845 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-15952540911656918845-value \n",
"\n",
" \n",
""_0" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-11413373673517832166 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"i64-0 \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-11413373673517832166-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-6662973804773207269 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-6662973804773207269-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-395596399104602408 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-395596399104602408-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12930351210441812130 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12930351210441812130-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1351883367118893594 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1351883367118893594-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-8179951341697187233 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-8179951341697187233-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-956286968014291186 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-956286968014291186-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-0 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-0-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-9896396136593852202 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-9896396136593852202-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5145996267849227305 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5145996267849227305-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5706686836758916083 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5706686836758916083-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-17845845248991523397 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"i64-5871781006564002453 \n",
"\n",
" \n",
"1 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-17845845248991523397-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12369660641532123352 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12369660641532123352-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-7619260772787498455 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-7619260772787498455-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-2868860904042873558 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-2868860904042873558-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-10457086705503540980 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-10457086705503540980-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1912573936028582372 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1912573936028582372-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-8417957797057827878 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-8417957797057827878-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-11743562013128004906 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-11743562013128004906-value \n",
"\n",
" \n",
"true \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-1714775736476281168 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-1714775736476281168-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-14289738803621830331 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-14289738803621830331-value \n",
"\n",
" \n",
"true \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-5040379952546458196 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-5040379952546458196-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-4208978898528913939 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-4208978898528913939-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-5871781006564002453 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-5871781006564002453-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-0 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-0-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-15952540911656918845 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-15952540911656918845-value \n",
"\n",
" \n",
"true \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-15121139857639374588 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-15121139857639374588-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-17615343019692007359 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-17615343019692007359-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-10912160959110460649 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-10912160959110460649-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-16783941965674463102 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-16783941965674463102-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-10080759905092916392 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-10080759905092916392-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-2546176790493825425 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-2546176790493825425-value \n",
"\n",
" \n",
"true \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-3377577844511369682 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-3377577844511369682-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-9249358851075372135 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-9249358851075372135-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-9249358851075372135 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-9249358851075372135-value \n",
"\n",
" \n",
"1 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-10912160959110460649 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-10912160959110460649-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-10080759905092916392 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-10080759905092916392-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-15121139857639374588 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-15121139857639374588-value \n",
"\n",
" \n",
"1 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-17615343019692007359 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-17615343019692007359-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-5040379952546458196 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-5040379952546458196-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-2546176790493825425 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-2546176790493825425-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-8417957797057827878 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-8417957797057827878-value \n",
"\n",
" \n",
"1 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-15952540911656918845 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-15952540911656918845-value \n",
"\n",
" \n",
"1 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-3377577844511369682 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-3377577844511369682-value \n",
"\n",
" \n",
"1 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-11743562013128004906 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-11743562013128004906-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-5871781006564002453 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-5871781006564002453-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-4208978898528913939 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-4208978898528913939-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-1714775736476281168 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-1714775736476281168-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-0 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-0-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-16783941965674463102 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-16783941965674463102-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-14289738803621830331 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-14289738803621830331-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n"
],
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-5871781006564002453-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-5871781006564002453-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-5040379952546458196-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-5040379952546458196-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-16783941965674463102-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-16783941965674463102-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-8417957797057827878-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-8417957797057827878-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-14289738803621830331-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-14289738803621830331-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-3377577844511369682-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-3377577844511369682-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-15121139857639374588-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-15121139857639374588-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-10080759905092916392-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-10080759905092916392-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-10912160959110460649-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-10912160959110460649-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-1714775736476281168-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-1714775736476281168-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-10912160959110460649-value \n",
" \n",
"\n",
"cluster_Program_next_sym-10912160959110460649-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-15121139857639374588-value \n",
" \n",
"\n",
"cluster_Program_next_sym-15121139857639374588-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-14289738803621830331-value \n",
" \n",
"\n",
"cluster_Program_next_sym-14289738803621830331-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-10080759905092916392-value \n",
" \n",
"\n",
"cluster_Program_next_sym-10080759905092916392-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-11743562013128004906-value \n",
" \n",
"\n",
"cluster_Program_next_sym-11743562013128004906-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-16783941965674463102-value \n",
" \n",
"\n",
"cluster_Program_next_sym-16783941965674463102-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-17615343019692007359-value \n",
" \n",
"\n",
"cluster_Program_next_sym-17615343019692007359-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-15952540911656918845-value \n",
" \n",
"\n",
"cluster_Program_next_sym-15952540911656918845-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-2546176790493825425-value \n",
" \n",
"\n",
"cluster_Program_statements-2546176790493825425-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-10080759905092916392-value \n",
" \n",
"\n",
"cluster_Program_statements-10080759905092916392-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-9249358851075372135-value \n",
" \n",
"\n",
"cluster_Program_statements-9249358851075372135-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-1714775736476281168-value \n",
" \n",
"\n",
"cluster_Program_statements-1714775736476281168-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-17615343019692007359-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-17615343019692007359-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-4208978898528913939-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-4208978898528913939-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-2546176790493825425-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-2546176790493825425-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-9249358851075372135-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-9249358851075372135-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-15952540911656918845-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-15952540911656918845-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-11743562013128004906-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-11743562013128004906-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-8417957797057827878-value \n",
" \n",
"\n",
"cluster_Program_statements-8417957797057827878-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-5871781006564002453-value \n",
" \n",
"\n",
"cluster_Program_statements-5871781006564002453-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-15952540911656918845-value \n",
" \n",
"\n",
"cluster_Program_statements-15952540911656918845-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-10912160959110460649-value \n",
" \n",
"\n",
"cluster_Program_statements-10912160959110460649-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-17615343019692007359-value \n",
" \n",
"\n",
"cluster_Program_statements-17615343019692007359-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-16783941965674463102-value \n",
" \n",
"\n",
"cluster_Program_statements-16783941965674463102-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-3377577844511369682-value \n",
" \n",
"\n",
"cluster_Program_statements-3377577844511369682-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-5040379952546458196-value \n",
" \n",
"\n",
"cluster_Program_statements-5040379952546458196-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-14289738803621830331-value \n",
" \n",
"\n",
"cluster_Program_statements-14289738803621830331-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-11743562013128004906-value \n",
" \n",
"\n",
"cluster_Program_statements-11743562013128004906-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-4208978898528913939-value \n",
" \n",
"\n",
"cluster_Program_statements-4208978898528913939-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-15121139857639374588-value \n",
" \n",
"\n",
"cluster_Program_statements-15121139857639374588-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-12369660641532123352-value \n",
" \n",
"\n",
"cluster_Program_compile-12369660641532123352-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-12930351210441812130-value \n",
" \n",
"\n",
"cluster_Program_compile-12930351210441812130-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-10457086705503540980-value \n",
" \n",
"\n",
"cluster_Program_compile-10457086705503540980-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-9896396136593852202-value \n",
" \n",
"\n",
"cluster_Program_compile-9896396136593852202-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-6662973804773207269-value \n",
" \n",
"\n",
"cluster_Program_compile-6662973804773207269-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-1351883367118893594-value \n",
" \n",
"\n",
"cluster_Program_compile-1351883367118893594-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-5145996267849227305-value \n",
" \n",
"\n",
"cluster_Program_compile-5145996267849227305-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_is_identifer-0-value \n",
" \n",
"\n",
"cluster_Program_is_identifer-0-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-1714775736476281168-value \n",
" \n",
"\n",
"cluster_Program_next_sym-1714775736476281168-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-2546176790493825425-value \n",
" \n",
"\n",
"cluster_Program_next_sym-2546176790493825425-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-9249358851075372135-value \n",
" \n",
"\n",
"cluster_Program_next_sym-9249358851075372135-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-4208978898528913939-value \n",
" \n",
"\n",
"cluster_Program_next_sym-4208978898528913939-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-5040379952546458196-value \n",
" \n",
"\n",
"cluster_Program_next_sym-5040379952546458196-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-8417957797057827878-value \n",
" \n",
"\n",
"cluster_Program_next_sym-8417957797057827878-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-3377577844511369682-value \n",
" \n",
"\n",
"cluster_Program_next_sym-3377577844511369682-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-5871781006564002453-value \n",
" \n",
"\n",
"cluster_Program_next_sym-5871781006564002453-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-4208978898528913939-value \n",
" \n",
"\n",
"cluster_Program_expr-4208978898528913939-value \n",
" \n",
" \n",
"\n",
"outer_cluster_String-11226098287981005201 \n",
" \n",
"\n",
"cluster_String-11226098287981005201 \n",
" \n",
" \n",
"\n",
"outer_cluster_String-13189374861551619161 \n",
" \n",
"\n",
"cluster_String-13189374861551619161 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-1714775736476281168-value \n",
" \n",
"\n",
"cluster_Program_expr-1714775736476281168-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-8417957797057827878-value \n",
" \n",
"\n",
"cluster_Program_expr-8417957797057827878-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-2546176790493825425-value \n",
" \n",
"\n",
"cluster_Program_expr-2546176790493825425-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-10080759905092916392-value \n",
" \n",
"\n",
"cluster_Program_expr-10080759905092916392-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-5040379952546458196-value \n",
" \n",
"\n",
"cluster_Program_expr-5040379952546458196-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-14289738803621830331-value \n",
" \n",
"\n",
"cluster_Program_expr-14289738803621830331-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-11743562013128004906-value \n",
" \n",
"\n",
"cluster_Program_expr-11743562013128004906-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-10912160959110460649-value \n",
" \n",
"\n",
"cluster_Program_expr-10912160959110460649-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-5871781006564002453-value \n",
" \n",
"\n",
"cluster_Program_expr-5871781006564002453-value \n",
" \n",
" \n",
"\n",
"outer_cluster_String-12969792886956269196 \n",
" \n",
"\n",
"cluster_String-12969792886956269196 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-17615343019692007359-value \n",
" \n",
"\n",
"cluster_Program_expr-17615343019692007359-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-3377577844511369682-value \n",
" \n",
"\n",
"cluster_Program_expr-3377577844511369682-value \n",
" \n",
" \n",
"\n",
"outer_cluster_String-11355304735691241393 \n",
" \n",
"\n",
"cluster_String-11355304735691241393 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-15121139857639374588-value \n",
" \n",
"\n",
"cluster_Program_expr-15121139857639374588-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-15952540911656918845-value \n",
" \n",
"\n",
"cluster_Program_expr-15952540911656918845-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-16783941965674463102-value \n",
" \n",
"\n",
"cluster_Program_expr-16783941965674463102-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-9249358851075372135-value \n",
" \n",
"\n",
"cluster_Program_expr-9249358851075372135-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-8179951341697187233-value \n",
" \n",
"\n",
"cluster_Program_compile-8179951341697187233-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-956286968014291186-value \n",
" \n",
"\n",
"cluster_Program_compile-956286968014291186-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-11413373673517832166-value \n",
" \n",
"\n",
"cluster_Program_compile-11413373673517832166-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-2868860904042873558-value \n",
" \n",
"\n",
"cluster_Program_compile-2868860904042873558-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-7619260772787498455-value \n",
" \n",
"\n",
"cluster_Program_compile-7619260772787498455-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-17845845248991523397-value \n",
" \n",
"\n",
"cluster_Program_compile-17845845248991523397-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-5706686836758916083-value \n",
" \n",
"\n",
"cluster_Program_compile-5706686836758916083-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-1912573936028582372-value \n",
" \n",
"\n",
"cluster_Program_compile-1912573936028582372-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-395596399104602408-value \n",
" \n",
"\n",
"cluster_Program_compile-395596399104602408-value \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_expr-0-value \n",
" \n",
"\n",
"cluster_Program_expr-0-value \n",
" \n",
" \n",
"\n",
"outer_cluster_String-2096353982008678537 \n",
" \n",
"\n",
"cluster_String-2096353982008678537 \n",
" \n",
" \n",
"\n",
"outer_cluster_bool-5871781006564002453 \n",
" \n",
"\n",
"cluster_bool-5871781006564002453 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_compile-0-value \n",
" \n",
"\n",
"cluster_Program_compile-0-value \n",
" \n",
" \n",
"\n",
"outer_cluster_String-9754068158704536254 \n",
" \n",
"\n",
"cluster_String-9754068158704536254 \n",
" \n",
" \n",
"\n",
"outer_cluster_String-5935442095835774456 \n",
" \n",
"\n",
"cluster_String-5935442095835774456 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_statements-0-value \n",
" \n",
"\n",
"cluster_Program_statements-0-value \n",
" \n",
" \n",
"\n",
"outer_cluster_i64-5871781006564002453 \n",
" \n",
"\n",
"cluster_i64-5871781006564002453 \n",
" \n",
" \n",
"\n",
"outer_cluster_Program_next_sym-0-value \n",
" \n",
"\n",
"cluster_Program_next_sym-0-value \n",
" \n",
" \n",
"\n",
"outer_cluster_3 \n",
" \n",
"\n",
"cluster_3 \n",
" \n",
" \n",
"\n",
"outer_cluster_13 \n",
" \n",
"\n",
"cluster_13 \n",
" \n",
" \n",
"\n",
"outer_cluster_6 \n",
" \n",
"\n",
"cluster_6 \n",
" \n",
" \n",
"\n",
"outer_cluster_10 \n",
" \n",
"\n",
"cluster_10 \n",
" \n",
" \n",
"\n",
"outer_cluster_14 \n",
" \n",
"\n",
"cluster_14 \n",
" \n",
" \n",
"\n",
"outer_cluster_12 \n",
" \n",
"\n",
"cluster_12 \n",
" \n",
" \n",
"\n",
"outer_cluster_9 \n",
" \n",
"\n",
"cluster_9 \n",
" \n",
" \n",
"\n",
"outer_cluster_15 \n",
" \n",
"\n",
"cluster_15 \n",
" \n",
" \n",
"\n",
"outer_cluster_5 \n",
" \n",
"\n",
"cluster_5 \n",
" \n",
" \n",
"\n",
"outer_cluster_16 \n",
" \n",
"\n",
"cluster_16 \n",
" \n",
" \n",
"\n",
"outer_cluster_11 \n",
" \n",
"\n",
"cluster_11 \n",
" \n",
" \n",
"\n",
"outer_cluster_7 \n",
" \n",
"\n",
"cluster_7 \n",
" \n",
" \n",
"\n",
"outer_cluster_8 \n",
" \n",
"\n",
"cluster_8 \n",
" \n",
" \n",
"\n",
"outer_cluster_0 \n",
" \n",
"\n",
"cluster_0 \n",
" \n",
" \n",
"\n",
"outer_cluster_4 \n",
" \n",
"\n",
"cluster_4 \n",
" \n",
" \n",
"\n",
"outer_cluster_2 \n",
" \n",
"\n",
"cluster_2 \n",
" \n",
" \n",
"\n",
"outer_cluster_1 \n",
" \n",
"\n",
"cluster_1 \n",
" \n",
" \n",
"\n",
"outer_cluster_bool-0 \n",
" \n",
"\n",
"cluster_bool-0 \n",
" \n",
" \n",
"\n",
"outer_cluster_i64-0 \n",
" \n",
"\n",
"cluster_i64-0 \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-14236238857028323759:s->String-11355304735691241393 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-14236238857028323759:s->bool-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-16291883994304651111:s->String-5935442095835774456 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-16291883994304651111:s->bool-5871781006564002453 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4696794513835434606:s->bool-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4696794513835434606:s->String-13189374861551619161 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-0:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4019982253596759903:s->bool-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4019982253596759903:s->String-2096353982008678537 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-15952540911656918845:s->Program_assign-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_assign-10080759905092916392:s->Program_parent-4208978898528913939 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-15952540911656918845:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-15952540911656918845:s->Program_parent-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-10080759905092916392:s->Program_parent-4208978898528913939 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-15121139857639374588:s->Program___add__-2651793105796594534 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-2651793105796594534:s->Program_parent-15952540911656918845 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-2651793105796594534:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13761752264459356387:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13761752264459356387:s->Program_parent-9249358851075372135 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-9249358851075372135:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-3377577844511369682:s->Program___add__-15952540911656918845 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-853919951260367888:s->bool-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-853919951260367888:s->String-9754068158704536254 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-4208978898528913939:s->Program___add__-13095445380246898500 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-11743562013128004906:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4485927643096296218:s->bool-5871781006564002453 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4485927643096296218:s->String-11226098287981005201 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-2546176790493825425:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-8417957797057827878:s->Program___add__-13761752264459356387 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_function_two-3497168771395161443:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_function_two-3497168771395161443:s->Program___add__-13761752264459356387 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_function_two-3497168771395161443:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_function_two-3497168771395161443:s->String-12969792886956269196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statement-5996666920560749382:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statement-5996666920560749382:s->Program_parent-17615343019692007359 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-10357708649660298671:s->bool-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-10357708649660298671:s->String-11226098287981005201 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-17615343019692007359:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-5871781006564002453:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-1714775736476281168:s->Program_expr_to_statement-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr_to_statement-5040379952546458196:s->Program_parent-17615343019692007359 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-2671062704490572354:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-2671062704490572354:s->Program_expr_to_statement-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-5040379952546458196:s->Program_parent-17615343019692007359 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-10912160959110460649:s->Program_parent-1714775736476281168 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-16783941965674463102:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13095445380246898500:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13095445380246898500:s->Program_parent-1714775736476281168 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13241269951358007050:s->Program___add__-2671062704490572354 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13241269951358007050:s->Program_parent-16783941965674463102 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-1081172882011038115:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-1081172882011038115:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-4208978898528913939:s->Program___add__-13095445380246898500 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-8417957797057827878:s->Program___add__-13761752264459356387 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-5871781006564002453:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-15952540911656918845:s->Program_assign-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-10912160959110460649:s->Program_statement-5996666920560749382 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-17615343019692007359:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-16783941965674463102:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-3377577844511369682:s->Program_parent-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-1714775736476281168:s->Program_parent-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-5040379952546458196:s->Program_parent-17615343019692007359 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-8417957797057827878:s->Program_parent-15121139857639374588 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-2546176790493825425:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-10080759905092916392:s->Program_parent-4208978898528913939 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-5040379952546458196:s->Program___add__-1081172882011038115 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-0:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-14289738803621830331:s->Program_parent-2546176790493825425 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-11743562013128004906:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-14289738803621830331:s->Program_function_two-3497168771395161443 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-10912160959110460649:s->Program_parent-5871781006564002453 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-5871781006564002453:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-11743562013128004906:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-4208978898528913939:s->Program_parent-10912160959110460649 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-15121139857639374588:s->Program_parent-3377577844511369682 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-17615343019692007359:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-3377577844511369682:s->Program___add__-15952540911656918845 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-2546176790493825425:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-0:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-10080759905092916392:s->Program_parent-4208978898528913939 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-9249358851075372135:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-1714775736476281168:s->Program_expr_to_statement-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-15121139857639374588:s->Program___add__-2651793105796594534 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-15952540911656918845:s->Program_assign-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-16783941965674463102:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-9249358851075372135:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-8179951341697187233:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-8179951341697187233:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-956286968014291186:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-956286968014291186:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-11413373673517832166:s->Program_parent-15121139857639374588 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-11413373673517832166:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-2868860904042873558:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-2868860904042873558:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-7619260772787498455:s->Program_parent-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-7619260772787498455:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-17845845248991523397:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-17845845248991523397:s->i64-5871781006564002453 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-0:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-0:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5706686836758916083:s->Program_parent-16783941965674463102 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5706686836758916083:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1912573936028582372:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1912573936028582372:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-395596399104602408:s->Program___add__-1081172882011038115 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-395596399104602408:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12369660641532123352:s->Program_parent-11743562013128004906 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12369660641532123352:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12930351210441812130:s->Program_parent-9249358851075372135 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12930351210441812130:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-10457086705503540980:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-10457086705503540980:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-9896396136593852202:s->Program_parent-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-9896396136593852202:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-6662973804773207269:s->Program___add__-13241269951358007050 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-6662973804773207269:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1351883367118893594:s->Program_parent-5871781006564002453 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1351883367118893594:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5145996267849227305:s->Program_parent-15952540911656918845 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5145996267849227305:s->i64-0 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-17615343019692007359:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-4208978898528913939:s->Program_parent-16783941965674463102 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-2546176790493825425:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-9249358851075372135:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-15952540911656918845:s->Program_parent-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-11743562013128004906:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-0:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-5871781006564002453:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-5040379952546458196:s->Program___add__-1081172882011038115 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-16783941965674463102:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-8417957797057827878:s->Program___add__-13761752264459356387 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-14289738803621830331:s->Program_parent-2546176790493825425 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-3377577844511369682:s->Program_parent-15952540911656918845 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-15121139857639374588:s->Program_parent-9249358851075372135 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-10080759905092916392:s->Program___add__-13241269951358007050 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-10912160959110460649:s->Program_parent-5871781006564002453 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-1714775736476281168:s->Program_expr_to_statement-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-10912160959110460649:s->Program___add__-2671062704490572354 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-15121139857639374588:s->Program___add__-2651793105796594534 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-14289738803621830331:s->Program_parent-8417957797057827878 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-1714775736476281168:s->Program_parent-5040379952546458196 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-2546176790493825425:s->Program___init__-16291883994304651111 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-10080759905092916392:s->Program___add__-13241269951358007050 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-11743562013128004906:s->Program___init__-4485927643096296218 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-0:s->Program___init__-4019982253596759903 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-9249358851075372135:s->Program___init__-853919951260367888 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-4208978898528913939:s->Program___add__-13095445380246898500 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-5040379952546458196:s->Program___add__-1081172882011038115 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-16783941965674463102:s->Program___init__-4696794513835434606 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-17615343019692007359:s->Program___init__-14236238857028323759 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-15952540911656918845:s->Program_parent-10080759905092916392 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-8417957797057827878:s->Program_parent-15121139857639374588 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-3377577844511369682:s->Program___add__-15952540911656918845 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-5871781006564002453:s->Program___init__-10357708649660298671 \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-14236238857028323759 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-11355304735691241393 \n",
"\n",
" \n",
""[1] = 10" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"bool-0 \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-16291883994304651111 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-5935442095835774456 \n",
"\n",
" \n",
""y" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"bool-5871781006564002453 \n",
"\n",
" \n",
"true \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4696794513835434606 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-13189374861551619161 \n",
"\n",
" \n",
"" + " \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-0 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4019982253596759903 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-15952540911656918845 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_assign-10080759905092916392 \n",
"\n",
" \n",
"·.assign \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-15952540911656918845 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-10080759905092916392 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-15121139857639374588 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-2651793105796594534 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13761752264459356387 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-9249358851075372135 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-3377577844511369682 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-853919951260367888 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-4208978898528913939 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-11743562013128004906 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-4485927643096296218 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-2546176790493825425 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-8417957797057827878 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_function_two-3497168771395161443 \n",
"\n",
" \n",
"·.function_two \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-12969792886956269196 \n",
"\n",
" \n",
""__fn" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statement-5996666920560749382 \n",
"\n",
" \n",
"·.statement \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___init__-10357708649660298671 \n",
"\n",
" \n",
"Program \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-17615343019692007359 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-5871781006564002453 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-1714775736476281168 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr_to_statement-5040379952546458196 \n",
"\n",
" \n",
"·.expr_to_statement \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-2671062704490572354 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-5040379952546458196 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-9754068158704536254 \n",
"\n",
" \n",
"") + " \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-10912160959110460649 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_parent-16783941965674463102 \n",
"\n",
" \n",
"·.parent \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13095445380246898500 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-13241269951358007050 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-2096353982008678537 \n",
"\n",
" \n",
""sum(" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program___add__-1081172882011038115 \n",
"\n",
" \n",
"(· + ·) \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"String-11226098287981005201 \n",
"\n",
" \n",
""x" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-4208978898528913939 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-4208978898528913939-value \n",
"\n",
" \n",
""x + " \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-8417957797057827878 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-8417957797057827878-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"_0 = x + x \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-5871781006564002453 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-5871781006564002453-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-15952540911656918845 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-15952540911656918845-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"_0 = x + x \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-10912160959110460649 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-10912160959110460649-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-17615343019692007359 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-17615343019692007359-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-16783941965674463102 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-16783941965674463102-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-3377577844511369682 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-3377577844511369682-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"_0 = x + x \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-1714775736476281168 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-1714775736476281168-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-5040379952546458196 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-5040379952546458196-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-8417957797057827878 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-8417957797057827878-value \n",
"\n",
" \n",
""sum(_0) + y" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-2546176790493825425 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-2546176790493825425-value \n",
"\n",
" \n",
""y" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-10080759905092916392 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-10080759905092916392-value \n",
"\n",
" \n",
""x + x" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-5040379952546458196 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-5040379952546458196-value \n",
"\n",
" \n",
""x[1] = 10" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-0 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-0-value \n",
"\n",
" \n",
""sum(" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-14289738803621830331 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-14289738803621830331-value \n",
"\n",
" \n",
""__fn" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-11743562013128004906 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-11743562013128004906-value \n",
"\n",
" \n",
""x" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-14289738803621830331 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-14289738803621830331-value \n",
"\n",
" \n",
""def __fn(x, y): \n",
" x[1] = 10 \n",
" _0 = x + x \n",
" return sum(_0) + y \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-10912160959110460649 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-10912160959110460649-value \n",
"\n",
" \n",
""x" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-5871781006564002453 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-5871781006564002453-value \n",
"\n",
" \n",
""x" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-11743562013128004906 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-11743562013128004906-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-4208978898528913939 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-4208978898528913939-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-15121139857639374588 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-15121139857639374588-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"_0 = x + x \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-17615343019692007359 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-17615343019692007359-value \n",
"\n",
" \n",
""[1] = 10" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-3377577844511369682 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-3377577844511369682-value \n",
"\n",
" \n",
""sum(_0" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-2546176790493825425 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-2546176790493825425-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-0 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-0-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-10080759905092916392 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-10080759905092916392-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-9249358851075372135 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-9249358851075372135-value \n",
"\n",
" \n",
""" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-1714775736476281168 \n",
"\n",
" \n",
"·.statements \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_statements-1714775736476281168-value \n",
"\n",
" \n",
""x[1] = 10 \n",
"" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-15121139857639374588 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-15121139857639374588-value \n",
"\n",
" \n",
""sum(_0) + " \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-15952540911656918845 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-15952540911656918845-value \n",
"\n",
" \n",
""_0" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-16783941965674463102 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-16783941965674463102-value \n",
"\n",
" \n",
"" + " \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-9249358851075372135 \n",
"\n",
" \n",
"·.expr \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_expr-9249358851075372135-value \n",
"\n",
" \n",
"") + " \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-8179951341697187233 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"i64-0 \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-8179951341697187233-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-956286968014291186 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-956286968014291186-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-11413373673517832166 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-11413373673517832166-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-2868860904042873558 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-2868860904042873558-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-7619260772787498455 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-7619260772787498455-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-17845845248991523397 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"i64-5871781006564002453 \n",
"\n",
" \n",
"1 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-17845845248991523397-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-0 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-0-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5706686836758916083 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5706686836758916083-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1912573936028582372 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1912573936028582372-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-395596399104602408 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-395596399104602408-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12369660641532123352 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12369660641532123352-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12930351210441812130 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-12930351210441812130-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-10457086705503540980 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-10457086705503540980-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-9896396136593852202 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-9896396136593852202-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-6662973804773207269 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-6662973804773207269-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1351883367118893594 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-1351883367118893594-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5145996267849227305 \n",
"\n",
" \n",
"·.compile \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_compile-5145996267849227305-value \n",
"\n",
" \n",
"() \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-17615343019692007359 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-17615343019692007359-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-4208978898528913939 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-4208978898528913939-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-2546176790493825425 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-2546176790493825425-value \n",
"\n",
" \n",
"true \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-9249358851075372135 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-9249358851075372135-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-15952540911656918845 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-15952540911656918845-value \n",
"\n",
" \n",
"true \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-11743562013128004906 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-11743562013128004906-value \n",
"\n",
" \n",
"true \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-0 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-0-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-5871781006564002453 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-5871781006564002453-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-5040379952546458196 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-5040379952546458196-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-16783941965674463102 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-16783941965674463102-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-8417957797057827878 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-8417957797057827878-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-14289738803621830331 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-14289738803621830331-value \n",
"\n",
" \n",
"true \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-3377577844511369682 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-3377577844511369682-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-15121139857639374588 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-15121139857639374588-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-10080759905092916392 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-10080759905092916392-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-10912160959110460649 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-10912160959110460649-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-1714775736476281168 \n",
"\n",
" \n",
"·.is_identifer \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_is_identifer-1714775736476281168-value \n",
"\n",
" \n",
"false \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-10912160959110460649 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-10912160959110460649-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-15121139857639374588 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-15121139857639374588-value \n",
"\n",
" \n",
"1 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-14289738803621830331 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-14289738803621830331-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-1714775736476281168 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-1714775736476281168-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-2546176790493825425 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-2546176790493825425-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-10080759905092916392 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-10080759905092916392-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-11743562013128004906 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-11743562013128004906-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-0 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-0-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-9249358851075372135 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-9249358851075372135-value \n",
"\n",
" \n",
"1 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-4208978898528913939 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-4208978898528913939-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-5040379952546458196 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-5040379952546458196-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-16783941965674463102 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-16783941965674463102-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-17615343019692007359 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-17615343019692007359-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-15952540911656918845 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-15952540911656918845-value \n",
"\n",
" \n",
"1 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-8417957797057827878 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-8417957797057827878-value \n",
"\n",
" \n",
"1 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-3377577844511369682 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-3377577844511369682-value \n",
"\n",
" \n",
"1 \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-5871781006564002453 \n",
"\n",
" \n",
"·.next_sym \n",
" \n",
" \n",
" \n",
" \n",
"\n",
"\n",
"Program_next_sym-5871781006564002453-value \n",
"\n",
" \n",
"0 \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n"
],
"text/plain": [
"EGraph(_flatted_deps=[], default_ruleset=None)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"egraph"
]
},
{
"cell_type": "markdown",
"metadata": {
"jp-MarkdownHeadingCollapsed": true
},
"source": [
"## PyObject - Python objects in EGraphs\n",
"\n",
"_We can also add Python objects directly to the e-graph as primitives and run rewrite rules that call back into Python_\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Future Work\n",
"\n",
"The next milestone use case is to be able to optimize functional array programs and rewrite them.\n",
"\n",
"To implement this we need to at least support **functions as values** and ideally also **generic types**.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Example\n",
"\n",
"There is a concrete example [provided by Siu from the Numba project](https://gist.github.com/sklam/5e5737137d48d6e5b816d14a90076f1d).\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"jp-MarkdownHeadingCollapsed": true
},
"source": [
"We would want users to be able to write code like this:\n",
"\n",
"```python\n",
"def linalg_norm_loopnest_egglog(X: enp.NDArray, axis: enp.TupleInt) -> enp.NDArray:\n",
" # peel off the outer shape for result array\n",
" outshape = ShapeAPI(X.shape).deselect(axis).to_tuple()\n",
" # get only the inner shape for reduction\n",
" reduce_axis = ShapeAPI(X.shape).select(axis).to_tuple()\n",
"\n",
" return enp.NDArray.from_fn(\n",
" outshape,\n",
" X.dtype,\n",
" lambda k: enp.sqrt(\n",
" LoopNestAPI.from_tuple(reduce_axis)\n",
" .unwrap()\n",
" .reduce(lambda carry, i: carry + enp.real(enp.conj(x := X[i + k]) * x), init=0.0)\n",
" ).to_value(),\n",
" )\n",
"```\n",
"\n",
"Which would then be rewritten to:\n",
"\n",
"```python\n",
"def linalg_norm_array_api(X: enp.NDArray, axis: enp.TupleInt) -> enp.NDArray:\n",
" outdim = enp.range_(X.ndim).filter(lambda x: ~axis.contains(x))\n",
" outshape = convert(convert(X.shape, enp.NDArray)[outdim], enp.TupleInt)\n",
" row_axis, col_axis = axis\n",
" return enp.NDArray.from_fn(\n",
" outshape,\n",
" X.dtype,\n",
" lambda k: enp.sqrt(\n",
" enp.int_product(enp.range_(X.shape[row_axis]), enp.range_(X.shape[col_axis]))\n",
" .map_to_ndarray(lambda rc: enp.real(enp.conj(x := X[rc + k]) * x))\n",
" .sum()\n",
" ).to_value(),\n",
" )\n",
"```\n",
"\n",
"And finally could be lowered to Python as:\n",
"\n",
"```python\n",
"def linalg_norm_low_level(\n",
" X: np.ndarray[tuple, np.dtype[np.float64]], axis: tuple[int, int]\n",
") -> np.ndarray[tuple, np.dtype[np.float64]]:\n",
" # # If X ndim>=3 and axis is a 2-tuple\n",
" assert X.ndim >= 3\n",
" assert len(axis) == 2\n",
" # Y - 2\n",
" outdim = [dim for dim in range(X.ndim) if dim not in axis]\n",
"\n",
" outshape = tuple(np.asarray(X.shape)[outdim])\n",
"\n",
" res = np.zeros(outshape, dtype=X.dtype)\n",
" row_axis, col_axis = axis\n",
" for k in np.ndindex(outshape):\n",
" tmp = 0.0\n",
" for row in range(X.shape[row_axis]):\n",
" for col in range(X.shape[col_axis]):\n",
" idx = (row, col, *k)\n",
" x = X[idx]\n",
" tmp += (x.conj() * x).real\n",
" res[k] = np.sqrt(tmp)\n",
" return res\n",
"```\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Conclusion\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this talk I have gone through some details of what is needed to connect data science users to egglog:\n",
"\n",
"![](./2024_03_17_map.svg)\n",
"\n",
"Overall, the idea is that if we can get egglog in more users hands, in particular for data intensive workloads where the tradeoff of time for pre-computation is worth it, than this can help drive exciting future research directions and also build meaningful useful tools for the scientific open source ecosystem in Python.\n",
"\n",
"**If you are building DSLs in Python, or more generally want to play with e-graphs, try out `egglog-python`!**\n",
"\n",
"Around on the e-graphs Zulip for any questions.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}