Duplicar y reflejar contenidos en el diagrama TikZ

Duplicar y reflejar contenidos en el diagrama TikZ

Tengo el siguiente diagrama, hecho en TikZ:

ingrese la descripción de la imagen aquí

Este es el código para ello:

\documentclass[tikz,border=2mm]{standalone} 
\usetikzlibrary{positioning, fit, arrows.meta}

\begin{document}

\begin{tikzpicture}[
    prod/.style={circle, draw, inner sep=0pt, fill=black!5, black!20},
    ct/.style={circle, draw, inner sep=5pt, ultra thick, minimum width=10mm, fill=black!5, black!20},
    ft/.style={circle, draw, minimum width=8mm, inner sep=1pt, fill=black!5, black!20},
    filter/.style={circle, draw, minimum width=7mm, inner sep=1pt, fill=black!5, black!20},
    mylabel/.style={font=\scriptsize\sffamily},
    >=LaTeX
    ]

\node[ct, label={[mylabel, black!20]Memory cell}, fill=black!5] (ct) {};
\node[filter, right=of ct, fill=black!5] (int1) {$f_g$};
\node[prod, right=of int1, fill=black!5] (x1) {$\times$}; 
\node[right=of x1] (ht) {$h_t$};
\node[prod, left=of ct, fill=black!5] (x2) {$\times$}; 
\node[filter, left=of x2, fill=black!5] (int2) {$f_h$};
\node[prod, below=5mm of ct, fill=black!5] (x3) {$\times$}; 
\node[ft, below=5mm of x3, label={[mylabel, black!20]right:Forget gate}, fill=black!5] (ft) {$f_t$};
\node[ft, above=of x2, label={[mylabel, black!20]left:Input gate}, fill=black!5] (it) {$f_t$};
\node[ft, above=of x1, label={[mylabel, black!20]left:Output gate}, fill=black!5] (ot) {$f_t$};

\foreach \i/\j in {int2/x2, x2/ct, ct/int1, int1/x1, x1/ht, it/x2, ct/it, ct/ot, ot/x1, ft/x3}
    \draw[->, black!20] (\i)--(\j);

\draw[->, black!20] (ct) to[bend right=45] (ft);

\draw[->, black!20] (ct) to[bend right=30] (x3);
\draw[->, black!20] (x3) to[bend right=30] (ct);

\node[fit=(int2) (it) (ot) (ft), draw, inner sep=0pt] (fit) {};

\draw[<-] (fit.west|-int2) coordinate (aux)--++(180:7mm) node[left]{$x_t$};
\draw[<-, black!20] ([yshift=1mm]aux)--++(135:7mm);
\draw[<-, black!20] ([yshift=-1mm]aux)--++(-135:7mm);

\draw[<-] (fit.north-|it) coordinate (aux)--++(90:7mm) node[above]{$x_t$};
\draw[<-, black!20] ([xshift=1mm]aux)--++(45:7mm);
\draw[<-, black!20] ([xshift=-1mm]aux)--++(135:7mm);

\draw[<-] (fit.north-|ot) coordinate (aux)--++(90:7mm) node[above]{$x_t$};
\draw[<-, black!20] ([xshift=1mm]aux)--++(45:7mm);
\draw[<-, black!20] ([xshift=-1mm]aux)--++(135:7mm);

\draw[<-] (fit.south-|ft) coordinate (aux)--++(-90:7mm) node[below]{$x_t$};
\draw[<-, black!20] ([xshift=1mm]aux)--++(-45:7mm);
\draw[<-, black!20] ([xshift=-1mm]aux)--++(-135:7mm);

\end{tikzpicture}


\end{document}

Ahora estoy intentando "reflejar" todo como muestra la siguiente imagen. es posible? (No te preocupes por las letras reflejadas, no quiero que se reflejen, solo la estructura de los círculos y las flechas dentro del cuadro).

ingrese la descripción de la imagen aquí

Para empezar, tengo problemas incluso para crear un segundo diagrama que aparece debajo del primero. Intenté usar un bucle for externo, pero no funcionó en absoluto.

Editar: Como el Símbolo 1 proporcionó una excelente respuesta a continuación, que es usar \Spy para crear una copia del alcance, me gustaría refinar mi pregunta y agregar que preferiría poder dibujar flechas entre los dos bloques (como visto con rojo en mi dibujo dibujado a mano). Intenté encontrar información sobre cómo hacer esto cuando Spy hizo una copia, pero no pude encontrar nada. ¿Quizás no sea posible?

Respuesta1

Puede obtener una copia gratuita de un alcance haciendo clic en\spy

\documentclass[tikz,border=2mm]{standalone} 
\usetikzlibrary{positioning, fit, arrows.meta,spy}

\begin{document}
    \begin{tikzpicture}[
                prod/.style={circle, draw, inner sep=0pt, fill=black!5, black!20},
                ct/.style={circle, draw, inner sep=5pt, ultra thick, minimum width=10mm, fill=black!5, black!20},
                ft/.style={circle, draw, minimum width=8mm, inner sep=1pt, fill=black!5, black!20},
                filter/.style={circle, draw, minimum width=7mm, inner sep=1pt, fill=black!5, black!20},
                mylabel/.style={font=\scriptsize\sffamily},
                >=LaTeX
            ]
        \begin{scope}[spy scope]
            \node[ct, label={[mylabel, black!20]Memory cell}, fill=black!5] (ct) {};
            \node[filter, right=of ct, fill=black!5] (int1) {$f_g$};
            \node[prod, right=of int1, fill=black!5] (x1) {$\times$}; 
            \node[right=of x1] (ht) {$h_t$};
            \node[prod, left=of ct, fill=black!5] (x2) {$\times$}; 
            \node[filter, left=of x2, fill=black!5] (int2) {$f_h$};
            \node[prod, below=5mm of ct, fill=black!5] (x3) {$\times$}; 
            \node[ft, below=5mm of x3, label={[mylabel, black!20]right:Forget gate}, fill=black!5] (ft) {$f_t$};
            \node[ft, above=of x2, label={[mylabel, black!20]left:Input gate}, fill=black!5] (it) {$f_t$};
            \node[ft, above=of x1, label={[mylabel, black!20]left:Output gate}, fill=black!5] (ot) {$f_t$};
            \foreach \i/\j in {int2/x2, x2/ct, ct/int1, int1/x1, x1/ht, it/x2, ct/it, ct/ot, ot/x1, ft/x3}
                \draw[->, black!20] (\i)--(\j);
            \draw[->, black!20] (ct) to[bend right=45] (ft);
            \draw[->, black!20] (ct) to[bend right=30] (x3);
            \draw[->, black!20] (x3) to[bend right=30] (ct);
            \node[fit=(int2) (it) (ot) (ft), draw, inner sep=0pt] (fit) {};
            \draw[<-] (fit.west|-int2) coordinate (aux)--++(180:7mm) node[left]{$x_t$};
            \draw[<-, black!20] ([yshift=1mm]aux)--++(135:7mm);
            \draw[<-, black!20] ([yshift=-1mm]aux)--++(-135:7mm);
            \draw[<-] (fit.north-|it) coordinate (aux)--++(90:7mm) node[above]{$x_t$};
            \draw[<-, black!20] ([xshift=1mm]aux)--++(45:7mm);
            \draw[<-, black!20] ([xshift=-1mm]aux)--++(135:7mm);
            \draw[<-] (fit.north-|ot) coordinate (aux)--++(90:7mm) node[above]{$x_t$};
            \draw[<-, black!20] ([xshift=1mm]aux)--++(45:7mm);
            \draw[<-, black!20] ([xshift=-1mm]aux)--++(135:7mm);
            \draw[<-] (fit.south-|ft) coordinate (aux)--++(-90:7mm) node[below]{$x_t$};
            \draw[<-, black!20] ([xshift=1mm]aux)--++(-45:7mm);
            \draw[<-, black!20] ([xshift=-1mm]aux)--++(-135:7mm);

            \spy [blue, size=10cm]on(0,0)in node[transform shape,yscale=-1]at(0,10);
        \end{scope}
    \end{tikzpicture}
\end{document}

información relacionada