%%
%% This is file `tikzlibrarypenrose.code.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% penrose_code.dtx  (with options: `package')
%% ----------------------------------------------------------------
%% penrose --- TikZ library for producing Penrose tilings
%% E-mail: loopspace@mathforge.org
%% Released under the LaTeX Project Public License v1.3c or later
%% See http://www.latex-project.org/lppl.txt
%% ----------------------------------------------------------------
%% 
\ProvidesExplFile {tikzlibrarypenrose.code.tex} {2021/01/22} {1.4} {TikZ pics for Penrose and other tiles}
\RequirePackage{spath3}
\usetikzlibrary{spath3}
\ExplSyntaxOn
\tl_new:N \g__penrose_side_a_tl
\tl_new:N \g__penrose_side_b_tl
\tl_new:N \g__penrose_side_c_tl
\tl_new:N \g__penrose_side_d_tl
\tl_new:N \g__penrose_side_e_tl
\tl_new:N \g__penrose_side_A_tl
\tl_new:N \g__penrose_side_B_tl
\tl_new:N \g__penrose_side_C_tl
\tl_new:N \g__penrose_side_D_tl
\tl_new:N \g__penrose_side_E_tl
\tl_gset:Nn \g__penrose_side_a_tl
{
  \pgfsyssoftpath@movetotoken{0pt}{0pt}
  \pgfsyssoftpath@linetotoken{1pt}{0pt}
}
\tl_gset_eq:NN \g__penrose_side_b_tl \g__penrose_side_a_tl
\tl_gset_eq:NN \g__penrose_side_c_tl \g__penrose_side_a_tl
\tl_gset_eq:NN \g__penrose_side_d_tl \g__penrose_side_a_tl
\tl_gset_eq:NN \g__penrose_side_e_tl \g__penrose_side_a_tl
\tl_gset_eq:NN \g__penrose_side_A_tl \g__penrose_side_a_tl
\tl_gset_eq:NN \g__penrose_side_B_tl \g__penrose_side_a_tl
\tl_gset_eq:NN \g__penrose_side_C_tl \g__penrose_side_a_tl
\tl_gset_eq:NN \g__penrose_side_D_tl \g__penrose_side_a_tl
\tl_gset_eq:NN \g__penrose_side_E_tl \g__penrose_side_a_tl
\fp_new:N \l__penrose_tmpa_fp
\fp_new:N \l__penrose_tmpb_fp
\fp_new:N \l__penrose_tmpc_fp
\str_new:N \l__penrose_tmpa_str
\str_new:N \l__penrose_tmpb_str
\tl_new:N \l__penrose_tmpa_tl
\tl_new:N \l__penrose_tmpb_tl
\tl_new:N \l__penrose_tmpc_tl
\tl_new:N \l__penrose_tmpd_tl
\tl_new:N \l__penrose_tmp_tile_path_tl
\tl_new:N \g__penrose_smuggle_tl
\int_new:N \l__penrose_tmpa_int
\int_new:N \l__penrose_tmpb_int
\dim_new:N \l__penrose_xa_dim
\dim_new:N \l__penrose_ya_dim
\dim_new:N \l__penrose_xb_dim
\dim_new:N \l__penrose_yb_dim
\prop_new:N \l__penrose_tmpa_prop
\cs_new_nopar:Npn \__penrose_normalise_path:Nn #1#2
{
  \group_begin:
  \spath_initialpoint:Nn \l__penrose_tmpa_tl {#2}
  \fp_set:Nn \l__penrose_tmpa_fp {\tl_head:N \l__penrose_tmpa_tl}
  \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
  \fp_set:Nn \l__penrose_tmpb_fp {\tl_head:N \l__penrose_tmpa_tl}
  \spath_finalpoint:Nn \l__penrose_tmpa_tl {#2}
  \fp_set:Nn \l__penrose_tmpa_fp
  {\tl_head:N \l__penrose_tmpa_tl - \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
  \fp_set:Nn \l__penrose_tmpb_fp
  {\tl_head:N \l__penrose_tmpa_tl - \l__penrose_tmpb_fp}
  \fp_set:Nn \l__penrose_tmpc_fp
  {\l__penrose_tmpa_fp^2 + \l__penrose_tmpb_fp^2}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_tmpa_fp/\l__penrose_tmpc_fp}
  \fp_set:Nn \l__penrose_tmpb_fp {\l__penrose_tmpb_fp/\l__penrose_tmpc_fp}
  \fp_set:Nn \l__penrose_tmpc_fp {-\l__penrose_tmpb_fp}
  \tl_set:Nx \l__penrose_tmpb_tl
  {
    {\fp_use:N \l__penrose_tmpa_fp}
    {\fp_use:N \l__penrose_tmpc_fp} % swapped
    {\fp_use:N \l__penrose_tmpb_fp} % swapped
    {\fp_use:N \l__penrose_tmpa_fp}
  }
  \spath_initialpoint:Nn \l__penrose_tmpa_tl {#2}
  \fp_set:Nn \l__penrose_tmpa_fp
  {
    (-1) * \l__penrose_tmpa_fp * \tl_head:N \l__penrose_tmpa_tl
    + (-1) * \l__penrose_tmpb_fp * \tl_tail:N \l__penrose_tmpa_tl
  }
  \fp_set:Nn \l__penrose_tmpb_fp
  {
    (-1) * \l__penrose_tmpa_fp * \tl_tail:N \l__penrose_tmpa_tl
    +  \l__penrose_tmpb_fp * \tl_head:N \l__penrose_tmpa_tl
  }
  \tl_put_right:Nx \l__penrose_tmpb_tl {
    {\fp_to_dim:N \l__penrose_tmpa_fp}
    {\fp_to_dim:N \l__penrose_tmpb_fp}
  }
  \spath_transform:NnV \l__penrose_tmpa_tl {#2} \l__penrose_tmpb_tl
  \tl_gset_eq:NN \g__penrose_smuggle_tl \l__penrose_tmpa_tl
  \group_end:
  \tl_set_eq:NN #1 \g__penrose_smuggle_tl
  \tl_gclear:N \g__penrose_smuggle_tl
}
\cs_generate_variant:Nn \__penrose_normalise_path:Nn {NV, cn, cV}
\cs_new_protected_nopar:Npn \__penrose_normalise_path:N #1
{
  \__penrose_normalise_path:NV #1#1
}
\cs_generate_variant:Nn \__penrose_normalise_path:N {c}
\NewDocumentCommand \SetPenrosePath { m }
{
  \pgfsyssoftpath@getcurrentpath\l__penrose_tmpa_tl
  \__penrose_normalise_path:N \l__penrose_tmpa_tl
  \tl_gset_eq:cN {g__penrose_side_#1_tl} \l__penrose_tmpa_tl
}
\cs_new_nopar:Npn \tikz_scan_point:n #1
{
  \tikz@scan@one@point\pgfutil@firstofone#1\relax
}
\cs_generate_variant:Nn \tikz_scan_point:n {V}
\cs_new_nopar:Npn \__penrose_make_tile:nnn #1#2#3
{
  \group_begin:
  \tl_set:Nn \l__penrose_tmpa_tl {#3}
  \tl_set:Nx \l__penrose_tmpb_tl {\tl_head:N \l__penrose_tmpa_tl}
  \tl_set:Nn \l__penrose_tmpa_tl {\pgfsyssoftpath@movetotoken}
  \tikz_scan_point:V \l__penrose_tmpb_tl
  \tl_put_right:Nx \l__penrose_tmpa_tl
  {
    {\dim_use:N \pgf@x}{\dim_use:N \pgf@y}
  }
  \tl_set_eq:NN \l__penrose_tmp_tile_path_tl \l__penrose_tmpa_tl
  \tl_set:Nn \l__penrose_tmpa_tl {#3}
  \tl_put_right:Nx \l__penrose_tmpa_tl {{\tl_head:N \l__penrose_tmpa_tl}}
  \tl_map_inline:nn {#2} {
    \tl_set:Nx \l__penrose_tmpc_tl {\tl_head:n {##1}}
    \tl_set_eq:Nc \l__penrose_tmpd_tl {g__penrose_side_ \tl_use:N \l__penrose_tmpc_tl _tl}
    \tl_set:Nx \l__penrose_tmpb_tl {\tl_head:N \l__penrose_tmpa_tl}
    \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
    \tikz_scan_point:V \l__penrose_tmpb_tl
    \fp_set:Nn \l__penrose_tmpa_fp { \pgf@x }
    \fp_set:Nn \l__penrose_tmpb_fp { \pgf@y }
    \tl_set:Nx \l__penrose_tmpb_tl {\tl_head:N \l__penrose_tmpa_tl}
    \tikz_scan_point:V \l__penrose_tmpb_tl
    \fp_set:Nn \l__penrose_tmpa_fp {\pgf@x - \l__penrose_tmpa_fp}
    \fp_set:Nn \l__penrose_tmpb_fp {\pgf@y - \l__penrose_tmpb_fp}
    \fp_set:Nn \l__penrose_tmpc_fp {-\l__penrose_tmpb_fp}
    \tl_set:Nx \l__penrose_tmpb_tl
    {
      {\fp_use:N \l__penrose_tmpa_fp}
      {\fp_use:N \l__penrose_tmpb_fp} % not swapped
      {\fp_use:N \l__penrose_tmpc_fp} % not swapped
      {\fp_use:N \l__penrose_tmpa_fp}
      {0}
      {0}
    }
    \spath_transform:NV \l__penrose_tmpd_tl \l__penrose_tmpb_tl
    \spath_weld:NV \l__penrose_tmp_tile_path_tl \l__penrose_tmpd_tl
  }
  \spath_close:N \l__penrose_tmp_tile_path_tl
  \tl_gset_eq:NN \g__penrose_smuggle_tl \l__penrose_tmp_tile_path_tl
  \group_end:
  \tl_gclear_new:c {g__penrose_tile_#1_tl}
  \tl_gset_eq:cN {g__penrose_tile_#1_tl} \g__penrose_smuggle_tl
  \tl_gclear:N \g__penrose_smuggle_tl
}
\cs_new_nopar:Npn \__penrose_make_tile:nn #1#2
{
  \__penrose_make_tile:nnn {#1} #2
}
\cs_generate_variant:Nn \__penrose_make_tile:nn {nV}
\prop_new:N \g__penrose_tiles_prop
\cs_new_nopar:Npn \__penrose_add_coordinate:Nnn #1#2#3 {
  \fp_set:Nn \l__penrose_tmpa_fp{#2}
  \fp_set:Nn \l__penrose_tmpb_fp{#3}
  \tl_put_right:Nx #1
  {
    {(\fp_use:N \l__penrose_tmpa_fp, \fp_use:N \l__penrose_tmpb_fp)}
  }
}
\cs_new_nopar:Npn \__penrose_add_coordinate:w #1#2,#3 \q_stop
{
  \__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {#2}{#3}
}
\tl_clear:N \l__penrose_tmpa_tl
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{sind(18)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(18)}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{-sind(18)}

\prop_gput:Nnx \g__penrose_tiles_prop {thin~ rhombus}
{{a A B b} {\tl_use:N \l__penrose_tmpa_tl}}
\tl_clear:N \l__penrose_tmpa_tl
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{sind(36)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(36)}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{-sind(36)}

\prop_gput:Nnx \g__penrose_tiles_prop {thick~ rhombus}
{{B a A b} {\tl_use:N \l__penrose_tmpa_tl}}
\tl_clear:N \l__penrose_tmpa_tl
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl
{2*sind(18)*cosd(108)}{2*sind(18)*sind(108)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {2*sind(18)}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl
{2*sind(18)*cosd(108)}{-2*sind(18)*sind(108)}

\prop_gput:Nnx \g__penrose_tiles_prop {dart}
{{c a A C} {\tl_use:N \l__penrose_tmpa_tl}}
\tl_clear:N \l__penrose_tmpa_tl
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{sind(36)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {1}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{-sind(36)}

\prop_gput:Nnx \g__penrose_tiles_prop {kite}
{{a c C A} {\tl_use:N \l__penrose_tmpa_tl}}
\tl_clear:N \l__penrose_tmpa_tl
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{sind(18)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{-sind(18)}

\prop_gput:Nnx \g__penrose_tiles_prop {golden~ triangle}
{{a c b} {\tl_use:N \l__penrose_tmpa_tl}}
\tl_clear:N \l__penrose_tmpa_tl
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{sind(18)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{-sind(18)}

\prop_gput:Nnx \g__penrose_tiles_prop {reverse~ golden~ triangle}
{{B C A} {\tl_use:N \l__penrose_tmpa_tl}}
\tl_clear:N \l__penrose_tmpa_tl
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{sind(36)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(36)}{0}

\prop_gput:Nnx \g__penrose_tiles_prop {golden~ gnomon}
{{C b A} {\tl_use:N \l__penrose_tmpa_tl}}
\tl_clear:N \l__penrose_tmpa_tl
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(36)}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{-sind(36)}
\prop_gput:Nnx \g__penrose_tiles_prop {reverse~ golden~ gnomon}
{{a B c} {\tl_use:N \l__penrose_tmpa_tl}}
\tl_clear:N \l__penrose_tmpa_tl
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(108)}{sind(108)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl
{1+cosd(72)+cosd(144)}{sind(72)+sind(144)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {1+cosd(72)}{sind(72)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {1}{0}
\prop_gput:Nnx \g__penrose_tiles_prop {pentagon~ 5}
{{a a a a a} {\tl_use:N \l__penrose_tmpa_tl}}
\prop_gput:Nnx \g__penrose_tiles_prop {pentagon~ 3}
{{A b a a b} {\tl_use:N \l__penrose_tmpa_tl}}
\prop_gput:Nnx \g__penrose_tiles_prop {pentagon~ 2}
{{d A e c A} {\tl_use:N \l__penrose_tmpa_tl}}
\tl_clear:N \l__penrose_tmpa_tl
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {1}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {1-cosd(36)}{-sind(36)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl
{1-cosd(36)-cosd(108)}{-sind(36)-sind(108)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(108)}{-sind(108)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl
{-1+3*cosd(108)+cosd(36)}{-sind(36)-sind(108)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl
{-1+2*cosd(108)+cosd(36)}{-sind(36)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {-1+2*cosd(108)}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(108)}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(108)}{sind(108)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
\prop_gput:Nnx \g__penrose_tiles_prop {pentagram}
{{C E C E C E C E C E} {\tl_use:N \l__penrose_tmpa_tl}}
\tl_clear:N \l__penrose_tmpa_tl
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {-1+2*cosd(108)}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(108)}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(108)}{sind(108)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {1}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {1-cosd(36)}{-sind(36)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl
{-1+2*cosd(108)+cosd(36)}{-sind(36)}
\prop_gput:Nnx \g__penrose_tiles_prop {boat}
{{C E C E B D B} {\tl_use:N \l__penrose_tmpa_tl}}
\tl_clear:N \l__penrose_tmpa_tl
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{sind(18)}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(18)}{0}
\__penrose_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{-sind(18)}
\prop_gput:Nnx \g__penrose_tiles_prop {diamond}
{{D B B D} {\tl_use:N \l__penrose_tmpa_tl}}
\NewDocumentCommand \BakePenroseTile {m}
{
  \prop_get:NnN \g__penrose_tiles_prop {#1} \l__penrose_tmpa_tl
  \__penrose_make_tile:nV {#1} \l__penrose_tmpa_tl
}
\cs_set_eq:NN \MakePenroseTile \BakePenroseTile
\NewDocumentCommand \UsePenroseTile {O{} m}
{
  \tl_set_eq:Nc \l__penrose_tmp_tile_path_tl {g__penrose_tile_#2_tl}
  \pgfgettransform \l__penrose_tmpa_tl
  \spath_transform:NV \l__penrose_tmp_tile_path_tl \l__penrose_tmpa_tl
  \spath_tikz_path:nV {#1} \l__penrose_tmp_tile_path_tl
}
\tikzset{
  save~ Penrose~ path/.code={
    \tikz@addmode{
      \pgfsyssoftpath@getcurrentpath\l__penrose_tmpa_tl
      \__penrose_normalise_path:N \l__penrose_tmpa_tl
      \tl_gclear_new:c {g__penrose_side_#1_tl}
      \tl_gset_eq:cN {g__penrose_side_#1_tl} \l__penrose_tmpa_tl
      \tl_set:Nx \l__penrose_tmpb_tl {\str_uppercase:n {#1}}
      \spath_reverse:N \l__penrose_tmpa_tl
      \spath_transform:Nnnnnnn \l__penrose_tmpa_tl {-1} {0} {0} {-1} {1} {0}
      \tl_gclear_new:c {g__penrose_side_ \tl_use:N \l__penrose_tmpb_tl _tl}
      \tl_gset_eq:cN {g__penrose_side_ \tl_use:N \l__penrose_tmpb_tl _tl} \l__penrose_tmpa_tl
    }
  },
  clone~ Penrose~ side~ path/.style~ 2~ args={
    spath/set~ name=Penrose~side,
    spath/clone~ global={#1}{#2}
  },
  spath/prefix/Penrose~side/.style={
    spath/set~ prefix=g__penrose_side_,
  },
  spath/suffix/Penrose~side/.style={
    spath/set~ suffix=_tl,
  },
  clone~ Penrose~ tile~ path/.style~ 2~ args={
    spath/set~ name=Penrose~tile,
    spath/clone~ global={#1}{#2}
  },
  spath/prefix/Penrose~tile/.style={
    spath/set~ prefix=g__penrose_tile_,
  },
  spath/suffix/Penrose~tile/.style={
    spath/set~ suffix=_tl,
  },
  expand~ key/.code={
    \exp_args:NV \pgfkeysalso #1
  }
}
\BakePenroseTile {thin~ rhombus}
\BakePenroseTile {thick~ rhombus}
\BakePenroseTile {dart}
\BakePenroseTile {kite}
\BakePenroseTile {golden~ triangle}
\BakePenroseTile {reverse~ golden~ triangle}
\BakePenroseTile {golden~ gnomon}
\BakePenroseTile {reverse~ golden~ gnomon}
\BakePenroseTile {pentagon~ 5}
\BakePenroseTile {pentagon~ 3}
\BakePenroseTile {pentagon~ 2}
\BakePenroseTile {pentagram}
\BakePenroseTile {boat}
\BakePenroseTile {diamond}
\cs_new_nopar:Npn \__penrose_transform_side:nn #1#2
{
  \prop_get:NnN \g__penrose_tiles_prop {#1} \l__penrose_tmpa_tl
  \int_zero:N \l__penrose_tmpb_int
  \int_incr:N \l__penrose_tmpb_int
  \tl_set:Nx \l__penrose_tmpc_tl {\tl_head:N \l__penrose_tmpa_tl}
  \tl_map_inline:Nn \l__penrose_tmpc_tl {
    \str_if_eq:nnT {##1} {#2} {
      \tl_map_break:
    }
    \int_incr:N \l__penrose_tmpb_int
  }
  \tl_set:Nx \l__penrose_tmpc_tl {\tl_tail:N \l__penrose_tmpa_tl}
  \tl_set:Nx \l__penrose_tmpc_tl {\tl_item:Nn \l__penrose_tmpc_tl {1}}
  \tl_put_right:Nx \l__penrose_tmpc_tl
  {{\tl_item:Nn \l__penrose_tmpc_tl {1}}}
  \tl_set:Nx \l__penrose_tmpa_tl
  {\tl_item:Nn \l__penrose_tmpc_tl {\int_use:N \l__penrose_tmpb_int}}
  \tl_set:Nx \l__penrose_tmpb_tl
  {\tl_item:Nn \l__penrose_tmpc_tl {\int_use:N \l__penrose_tmpb_int + 1}}
  \tikz_scan_point:V \l__penrose_tmpb_tl
  \dim_set_eq:Nc \l__penrose_xa_dim {pgf@x}
  \dim_set_eq:Nc \l__penrose_ya_dim {pgf@y}
  \tikz_scan_point:V \l__penrose_tmpa_tl
  \dim_set_eq:Nc \l__penrose_xb_dim {pgf@x}
  \dim_set_eq:Nc \l__penrose_yb_dim {pgf@y}

  \dim_sub:Nn \l__penrose_xb_dim {\l__penrose_xa_dim }
  \dim_sub:Nn \l__penrose_yb_dim {\l__penrose_ya_dim }
  \pgfpointnormalised{\pgfpoint{\l__penrose_xb_dim}{\l__penrose_yb_dim}}
  \dim_set_eq:Nc \l__penrose_xb_dim {pgf@x}
  \dim_set_eq:Nc \l__penrose_yb_dim {pgf@y}
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\l__penrose_xb_dim}{-\l__penrose_yb_dim}}
    {\pgfpoint{\l__penrose_yb_dim}{\l__penrose_xb_dim}}

  \pgftransformshift{\pgfpoint{-\l__penrose_xa_dim}{-\l__penrose_ya_dim}}

}
\cs_generate_variant:Nn \tl_if_eq:nnT {nVT}
\cs_generate_variant:Nn \__penrose_transform_side:nn {nx,nV}
\DeclareDocumentCommand \TransformAlongSide {m m}
{
  \__penrose_transform_side:nx {#1}{#2}
}
\cs_new_nopar:Npn \__penrose_coordinates_at_vertices:n #1
{
  \prop_get:NnN \g__penrose_tiles_prop {#1} \l__penrose_tmpa_tl
  \tl_set:Nx \l__penrose_tmpb_tl {\tl_head:N \l__penrose_tmpa_tl}
  \tl_set:Nx \l__penrose_tmpc_tl {\tl_tail:N \l__penrose_tmpa_tl}
  \tl_set:Nx \l__penrose_tmpc_tl
  {\tl_item:Nn \l__penrose_tmpc_tl {1}}
  \tl_put_right:Nx \l__penrose_tmpc_tl
  {{\tl_item:Nn \l__penrose_tmpc_tl {1}}}
  \tl_set:Nx \l__penrose_tmpa_tl {\tl_head:N \l__penrose_tmpc_tl}
  \tl_set:Nx \l__penrose_tmpc_tl {\tl_tail:N \l__penrose_tmpc_tl}
  \tl_map_inline:Nn \l__penrose_tmpb_tl {
    \tl_set:Nx \l__penrose_tmpd_tl {
      \exp_not:N \coordinate
      (-edge~ ##1~ start)~ at \tl_use:N \l__penrose_tmpa_tl;
    }
    \tl_use:N \l__penrose_tmpd_tl
    \tl_set:Nx \l__penrose_tmpa_tl {\tl_head:N \l__penrose_tmpc_tl}
    \tl_set:Nx \l__penrose_tmpc_tl {\tl_tail:N \l__penrose_tmpc_tl}
    \tl_set:Nx \l__penrose_tmpd_tl {
      \exp_not:N \coordinate
      (-edge~ ##1~ end)~ at \tl_use:N \l__penrose_tmpa_tl;
    }
    \tl_use:N \l__penrose_tmpd_tl
  }
}
\DeclareDocumentCommand \CoordinatesAtVertices {m}
{
  \__penrose_coordinates_at_vertices:n {#1}
}
\DeclareDocumentCommand \DefineTile { m m m }
{
  \tl_clear:N \l__penrose_tmpa_tl
  \tl_map_inline:nn {#3} {
    \__penrose_add_coordinate:w \l__penrose_tmpa_tl ##1 \q_stop
  }
  \prop_clear:N \l__penrose_tmpa_prop
  \tl_map_inline:nn {#2} {
    \prop_if_in:NnTF \l__penrose_tmpa_prop {##1}
    {
      \prop_put:Nnn \l__penrose_tmpa_prop {##1} {1}
    }
    {
      \prop_put:Nnn \l__penrose_tmpa_prop {##1} {0}
    }
  }
  \tl_clear:N \l__penrose_tmpb_tl
  \tl_map_inline:nn {#2}
  {
    \tl_clear:N \l__penrose_tmpc_tl
    \tl_put_right:Nn \l__penrose_tmpc_tl {##1}
    \int_compare:nF {\prop_item:Nn \l__penrose_tmpa_prop {##1} == 0} {
      \tl_put_right:Nx \l__penrose_tmpc_tl
      {\prop_item:Nn \l__penrose_tmpa_prop {##1}}
      \prop_put:Nnx \l__penrose_tmpa_prop {##1}
      {\int_eval:n {\prop_item:Nn \l__penrose_tmpa_prop {##1} + 1}}
    }
    \tl_put_right:Nx \l__penrose_tmpb_tl {{ \l__penrose_tmpc_tl }}
  }
  \prop_gput:Nnx \g__penrose_tiles_prop {#1}
  {{\tl_use:N \l__penrose_tmpb_tl} {\tl_use:N \l__penrose_tmpa_tl}}
  \tikzset{
    #1/.pic={
      \begin{scope}
      \pgfkeysgetvalue{/tikz/Penrose/alignment~ location}{\prloc}
      \ifx\prloc\pgfutil@empty
      \else
    \begingroup
      \tikzset{name~ prefix~ ..}%
      \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge~ \pgfkeysvalueof{/tikz/Penrose/alignment~ edge}~ start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge~ \pgfkeysvalueof{/tikz/Penrose/alignment~ edge}~ end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
      \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}
    \str_set:Nx \l__penrose_tmpa_str
    {\pgfkeysvalueof{/tikz/Penrose/alignment~ edge}}
    \str_set:Nx \l__penrose_tmpa_str {\str_head:N \l__penrose_tmpa_str}
    \str_put_right:Nx \l__penrose_tmpa_str
    {\pgfkeysvalueof{/tikz/Penrose/alignment~ new~ edge}}
    \str_set:Nx \l__penrose_tmpb_str {\str_lowercase:f { \l__penrose_tmpa_str}}
    \str_if_eq:NNT \l__penrose_tmpa_str \l__penrose_tmpb_str
    {
      \str_set:Nx \l__penrose_tmpb_str
      {\str_uppercase:f { \l__penrose_tmpa_str}}
    }

    \__penrose_transform_side:nV {#1} \l__penrose_tmpb_str
    \fi
    \UsePenroseTile[
      every~ Penrose~ tile~ clip/.try,
      every~ #1~ clip/.try
    ]{#1}
    \UsePenroseTile[
      every~ Penrose~ tile/.try,
      every~ #1/.try,
      pic~ actions
    ]{#1}
    \__penrose_coordinates_at_vertices:n {#1}
    \end{scope}
    },
  #1/.style={
    every~ Penrose~ pic/.try,
    pic~ type=#1,
    },
  }
}
\prop_new:N \g__penrose_rhombus_lms_rule_prop
\prop_gput:Nnn \g__penrose_rhombus_lms_rule_prop {T} {[f*sT][f>g]}
\prop_gput:Nnn \g__penrose_rhombus_lms_rule_prop {t} {[f_st][f>G]}
\prop_gput:Nnn \g__penrose_rhombus_lms_rule_prop {G} {[f+sG][sf>g][sf*sT]}
\prop_gput:Nnn \g__penrose_rhombus_lms_rule_prop {g} {[f-sg][sf>G][sf_st]}
\prop_new:N \g__penrose_kite_lms_rule_prop
\prop_gput:Nnn \g__penrose_kite_lms_rule_prop {T} {[f*sT][f>st][+sg]}
\prop_gput:Nnn \g__penrose_kite_lms_rule_prop {t} {[f_st][f>sT][-sG]}
\prop_gput:Nnn \g__penrose_kite_lms_rule_prop {G} {[f*+sG][sT]}
\prop_gput:Nnn \g__penrose_kite_lms_rule_prop {g} {[f-_sg][st]}
\prop_new:N \g__penrose_pentagon_lms_rule_prop
\prop_gput:Nnn \g__penrose_pentagon_lms_rule_prop {P}
{[s>P][1sF+Q][1+sF+Q][1*sF+Q][1-sF+Q][1_sF+Q]} % pentagon 5
\prop_gput:Nnn \g__penrose_pentagon_lms_rule_prop {Q}
{[s>P][1+sFR][1*sF*R][1-sF+Q][1_sF+Q][1sF+Q][->fsD]} % pentagon 3
\prop_gput:Nnn \g__penrose_pentagon_lms_rule_prop {R}
{[s>P][1-sF+Q][1+sF*R][1*sFR][1_sF*R][1sFR][_>fsD][>fsD]} % pentagon 2
\prop_gput:Nnn \g__penrose_pentagon_lms_rule_prop {G}
{
  [s>G]
  [se[>d+R][e1B]]
  [+se[>d+R][e1B]]
  [-se[>d+R][e1B]]
  [*se[>d+R][e1B]]
  [_se[>d+R][e1B]]
} % pentagram
\prop_gput:Nnn \g__penrose_pentagon_lms_rule_prop {B}
{
  [s>G]
  [se[>d+R][e1B]]
  [+se[>d+R][e1B]]
  [-se[>d+R][e1B]]
} % boat
\prop_gput:Nnn \g__penrose_pentagon_lms_rule_prop {D}
{[s>d+R][s>eG][se1B]} % diamond
\prop_gset_eq:NN \g__penrose_rtriangle_lms_rule_prop
\g__penrose_rhombus_lms_rule_prop
\prop_gset_eq:NN \g__penrose_ktriangle_lms_rule_prop
\g__penrose_kite_lms_rule_prop
\prop_new:N \g__penrose_default_lms_action_prop
\prop_new:N \g__penrose_rhombus_lms_action_prop
\prop_new:N \g__penrose_kite_lms_action_prop
\prop_new:N \g__penrose_rtriangle_lms_action_prop
\prop_new:N \g__penrose_ktriangle_lms_action_prop
\prop_new:N \g__penrose_pentagon_lms_action_prop
\dim_new:N \l__penrose_step_dim
\dim_set:Nn \l__penrose_step_dim {1cm}
\prop_gput:Nnn \g__penrose_default_lms_action_prop {[} {\group_begin:}
\prop_gput:Nnn \g__penrose_default_lms_action_prop {]} {\group_end:}
\prop_gput:Nnn \g__penrose_default_lms_action_prop {f}
{\pgftransformxshift{\l__penrose_step_dim}}
\prop_gput:Nnn \g__penrose_default_lms_action_prop {s} {
  \fp_set:Nn \l__penrose_tmpa_fp { 2 * sind(18) * \l__penrose_step_dim }
  \dim_set:Nn \l__penrose_step_dim {\fp_to_dim:N \l__penrose_tmpa_fp}
}
\prop_gput:Nnn \g__penrose_rhombus_lms_action_prop {+}
{\pgftransformrotate{144}}
\prop_gput:Nnn \g__penrose_rhombus_lms_action_prop {*}
{\pgftransformrotate{108}}
\prop_gput:Nnn \g__penrose_rhombus_lms_action_prop {-}
{\pgftransformrotate{216}}
\prop_gput:Nnn \g__penrose_rhombus_lms_action_prop {_}
{\pgftransformrotate{252}}
\prop_gput:Nnn \g__penrose_rhombus_lms_action_prop {>}
{\pgftransformrotate{180}}
\prop_gset_eq:NN \g__penrose_rtriangle_lms_action_prop
\g__penrose_rhombus_lms_action_prop
\prop_gput:Nnn \g__penrose_rhombus_lms_action_prop {T} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \pgftransformrotate{198}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*2*cosd(18)}
  \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ thin~ rhombus/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{thin~rhombus}
  \group_end:
}
\prop_gput:Nnn \g__penrose_rhombus_lms_action_prop {G} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ thick~ rhombus/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{thick~rhombus}
  \group_end:
}
\prop_gput:Nnn \g__penrose_kite_lms_action_prop {+} {\pgftransformrotate{36}}
\prop_gput:Nnn \g__penrose_kite_lms_action_prop {*} {\pgftransformrotate{108}}
\prop_gput:Nnn \g__penrose_kite_lms_action_prop {-} {\pgftransformrotate{-36}}
\prop_gput:Nnn \g__penrose_kite_lms_action_prop {_}
{\pgftransformrotate{-108}}
\prop_gput:Nnn \g__penrose_kite_lms_action_prop {>} {\pgftransformrotate{180}}
\prop_gset_eq:NN \g__penrose_ktriangle_lms_action_prop
\g__penrose_kite_lms_action_prop
\prop_gput:Nnn \g__penrose_kite_lms_action_prop {T} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \pgftransformrotate{36}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ kite/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{kite}
  \group_end:
}
\prop_gput:Nnn \g__penrose_kite_lms_action_prop {g} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \pgftransformrotate{144}
  \pgftransformxshift{-\l__penrose_step_dim * 2 * sin(18)}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ dart/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{dart}
  \group_end:
}
\prop_gput:Nnn \g__penrose_rtriangle_lms_action_prop {T} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \pgftransformrotate{18}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ reverse~ golden~ triangle/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{reverse~ golden~ triangle}
  \group_end:
}
\prop_gput:Nnn \g__penrose_rtriangle_lms_action_prop {t} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \pgftransformrotate{-18}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ golden~ triangle/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{golden~ triangle}
  \group_end:
}
\prop_gput:Nnn \g__penrose_rtriangle_lms_action_prop {G} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \pgftransformrotate{180}
  \pgftransformxshift{-\l__penrose_step_dim}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ reverse~ golden~ gnomon/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{reverse~ golden~ gnomon}
  \group_end:
}
\prop_gput:Nnn \g__penrose_rtriangle_lms_action_prop {g} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \pgftransformrotate{180}
  \pgftransformxshift{-\l__penrose_step_dim}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ golden~ gnomon/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{golden~ gnomon}
  \group_end:
}
\prop_gput:Nnn \g__penrose_ktriangle_lms_action_prop {T} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \pgftransformrotate{18}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ reverse~ golden~ triangle/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{reverse~ golden~ triangle}
  \group_end:
}
\prop_gput:Nnn \g__penrose_ktriangle_lms_action_prop {t} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \pgftransformrotate{-18}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ golden~ triangle/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{golden~ triangle}
  \group_end:
}
\prop_gput:Nnn \g__penrose_ktriangle_lms_action_prop {G} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \pgftransformrotate{180}
  \pgftransformxshift{-\l__penrose_step_dim}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ reverse~ golden~ gnomon/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{reverse~ golden~ gnomon}
  \group_end:
}
\prop_gput:Nnn \g__penrose_ktriangle_lms_action_prop {g} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \pgftransformrotate{180}
  \pgftransformxshift{-\l__penrose_step_dim}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ golden~ gnomon/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{golden~ gnomon}
  \group_end:
}
\int_new:N \l__penrose_pentagon_parity_int
\seq_new:N \l__penrose_pentagon_parity_seq
\seq_set_from_clist:Nn \l__penrose_pentagon_parity_seq {odd,even}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {1} {
  \int_set:Nn \l__penrose_pentagon_parity_int
  {3 -  \l__penrose_pentagon_parity_int}
  }
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {+}
{\pgftransformrotate{72}}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {*}
{\pgftransformrotate{144}}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {-}
{\pgftransformrotate{288}}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {_}
{\pgftransformrotate{216}}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {>}
{\pgftransformrotate{180}}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {|}
{\pgftransformxscale{-1}}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {s} {
  \fp_set:Nn \l__penrose_tmpa_fp
  {
    1/(2 + 2 * cosd(72) ) * \l__penrose_step_dim
  }
  \dim_set:Nn \l__penrose_step_dim {\fp_to_dim:N \l__penrose_tmpa_fp}
}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {f} {
  \fp_set:Nn \l__penrose_tmpa_fp {  tand(54)/2 * \l__penrose_step_dim }
  \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {F} {
  \fp_set:Nn \l__penrose_tmpa_fp {  tand(54) * \l__penrose_step_dim }
  \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {d} {
  \fp_set:Nn \l__penrose_tmpa_fp
  {
    (tand(54)/2 - tand(72)/2 + sind(36) ) * \l__penrose_step_dim
  }
  \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {e} {
  \fp_set:Nn \l__penrose_tmpa_fp
  {
    tand(54) * cosd(36) * \l__penrose_step_dim
  }
  \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {P} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/2}
  \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)/2}
  \pgftransformyshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ pentagon/.try,
    every~
    \seq_item:Nn \l__penrose_pentagon_parity_seq
    {\l__penrose_pentagon_parity_int}
    \space pentagon/.try,
    every~ pentagon~ 5/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{pentagon~5}
  \group_end:
}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {Q} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/2}
  \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)/2}
  \pgftransformyshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ pentagon/.try,
    every~
    \seq_item:Nn \l__penrose_pentagon_parity_seq
    {\l__penrose_pentagon_parity_int}
    \space pentagon/.try,
    every~ pentagon~ 3/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{pentagon~3}
  \group_end:
}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {R} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/2}
  \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)/2}
  \pgftransformyshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ pentagon/.try,
    every~
    \seq_item:Nn \l__penrose_pentagon_parity_seq
    {\l__penrose_pentagon_parity_int}
    \space pentagon/.try,
    every~ pentagon~ 2/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{pentagon~2}
  \group_end:
}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {G} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*cosd(72)}
  \pgftransformxshift{\fp_to_dim:N \l__penrose_tmpa_fp}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)*cosd(72)}
  \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ pentagram/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{pentagram}
  \group_end:
}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {B} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*cosd(72)}
  \pgftransformxshift{\fp_to_dim:N \l__penrose_tmpa_fp}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)*cosd(72)}
  \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ boat/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{boat}
  \group_end:
}
\prop_gput:Nnn \g__penrose_pentagon_lms_action_prop {D} {
  \group_begin:
  \int_gincr:N \g__penrose_tile_int
  \pgftransformrotate{90}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*cosd(18)}
  \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
  \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
  \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
  \tl_set:Nx \l__penrose_tmpc_tl
  {
    {\int_use:N  \g__penrose_tile_int}
    {\int_use:N \g__penrose_tiles_int}
  }
  \UsePenroseTile[
    every~ Penrose~ tile/.try,
    every~ diamond/.try,
    Penrose~ tile~ \int_use:N \g__penrose_tile_int/.try,
    Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
  ]{diamond}
  \group_end:
}
\cs_new_nopar:Npn \__penrose_make_lms:Nnnn #1#2#3#4
{
  \group_begin:
  \tl_set:Nn \l__penrose_tmpb_tl {#4}
  \prg_replicate:nn {#3} {
    \tl_set_eq:NN \l__penrose_tmpa_tl \l__penrose_tmpb_tl
    \tl_clear:N \l__penrose_tmpb_tl
    \tl_map_inline:Nn \l__penrose_tmpa_tl
    {
      \prop_if_in:cnTF {g__penrose_#2_lms_rule_prop} {##1}
      {
        \tl_put_right:Nx \l__penrose_tmpb_tl
        {\prop_item:cn {g__penrose_#2_lms_rule_prop} {##1} }
      }
      {
        \tl_put_right:Nn \l__penrose_tmpb_tl {##1}
      }
    }
  }
  \tl_set:Nn \l__penrose_tmpa_tl {
    \group_end:
    \tl_set:Nn #1
  }
  \tl_put_right:Nx \l__penrose_tmpa_tl {{\tl_use:N \l__penrose_tmpb_tl}}
  \tl_use:N \l__penrose_tmpa_tl
}
\cs_generate_variant:Nn \__penrose_make_lms:Nnnn {Nnnx}
\cs_new_nopar:Npn \__penrose_invoke_lms:Nn #1#2
{
  \group_begin:
  \tl_map_inline:Nn #1 {
    \prop_if_in:cnTF {g__penrose_#2_lms_action_prop} {##1}
    {
      \prop_item:cn {g__penrose_#2_lms_action_prop} {##1}
    }
    {
      \prop_if_in:cnT {g__penrose_default_lms_action_prop} {##1}
      {
        \prop_item:cn {g__penrose_default_lms_action_prop} {##1}
      }
    }
  }
  \group_end:
}
\int_new:N \g__penrose_tile_int
\int_new:N \g__penrose_tiles_int
\NewDocumentCommand \PenroseDecomposition { O{} m m m }
{
  \group_begin:
  \tikzset{#1}
  \__penrose_make_lms:Nnnx \l__penrose_tmpa_tl {#2} {#3} {#4}
  \__penrose_count_lms:N \l__penrose_tmpa_tl
  \int_gzero:N \g__penrose_tile_int
  \int_set:Nn \l__penrose_pentagon_parity_int {2}
  \__penrose_invoke_lms:Nn \l__penrose_tmpa_tl {#2}
  \group_end:
}
\cs_new_nopar:Npn \__penrose_count_lms:N #1
{
  \int_gzero:N \g__penrose_tiles_int
  \tl_map_inline:Nn #1
  {
    \tl_if_eq:nnT {##1} {T}
    {
      \int_gincr:N \g__penrose_tiles_int
    }
    \tl_if_eq:nnT {##1} {t}
    {
      \int_gincr:N \g__penrose_tiles_int
    }
    \tl_if_eq:nnT {##1} {G}
    {
      \int_gincr:N \g__penrose_tiles_int
    }
    \tl_if_eq:nnT {##1} {g}
    {
      \int_gincr:N \g__penrose_tiles_int
    }
  }
}
\tikzset{
  Penrose~ step/.code={
    \dim_set:Nn \l__penrose_step_dim {#1}
  }
}
\ExplSyntaxOff
\pgfmathsetmacro\pr@chphi{cos(18)}
\pgfmathsetmacro\pr@shphi{sin(18)}
\pgfmathsetmacro\pr@cphi{cos(36)}
\pgfmathsetmacro\pr@sphi{sin(36)}
\pgfmathsetmacro\pr@invphi{2/(sqrt(5)+1)}
\pgfmathsetmacro\pr@phi{(sqrt(5)+1)/2}
\pgfmathsetmacro\pr@invphisq{\pr@invphi*\pr@invphi}
\pgfmathsetmacro\pr@ominvphisq{\pr@invphi - \pr@invphisq}
\pgfmathsetmacro\pr@ominvphi{1 - \pr@invphi}
\newif\if@edgealign
\def\pr@getfirst#1#2\pr@stop{#1}%
\def\test@edgealign#1{%
  \pgfkeysgetvalue{/tikz/Penrose/alignment edge}{\@penrose@tmpa}%
  \edef\@penrose@tmpb{#1}%
  \edef\@penrose@tmpa{\expandafter\pr@getfirst\@penrose@tmpa.\pr@stop}%
  \ifx\@penrose@tmpa\@penrose@tmpb
  \@edgealigntrue
  \else
  \@edgealignfalse
  \fi
}%
\newif\if@newedge
\def\test@newedge#1{%
  \pgfkeysgetvalue{/tikz/Penrose/alignment new edge}{\@penrose@tmpa}%
  \edef\@penrose@tmpb{#1}%
  \edef\@penrose@tmpa{\@penrose@tmpa}%
  \ifx\@penrose@tmpa\@penrose@tmpb
  \@newedgetrue
  \else
  \@newedgefalse
  \fi
}%
\tikzset{
  align with/.code args={#1 along #2}{%
    \pgfutil@in@{ using }{#2}
    \ifpgfutil@in@%
    \tikzset{
      Penrose/alignment location=#1,
      Penrose/alignment set edges=#2,
    }%
    \else
    \tikzset{
      Penrose/alignment location=#1,
      Penrose/alignment edge=#2,
    }%
    \fi
  },
  Penrose/alignment set edges/.code args={#1 using #2}{%
    \tikzset{
      Penrose/alignment edge=#1,
      Penrose/alignment new edge=#2
    },
  },
  Penrose/alignment location/.initial={},
  Penrose/alignment edge/.initial=a,
  Penrose/alignment new edge/.initial={},
  every Penrose tile clip/.style={clip},
  thin rhombus/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}b\relax
    \pgftransformrotate{-18}%
    \pgftransformshift{\pgfpoint{-\pr@chphi cm}{\pr@shphi cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}B\relax
    \pgftransformrotate{18}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}a\relax
    \pgftransformrotate{198}%
    \pgftransformshift{\pgfpoint{-2*\pr@chphi cm}{0 cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}A\relax
    \pgftransformrotate{162}%
    \pgftransformshift{\pgfpoint{-\pr@chphi cm}{-\pr@shphi cm}}%
    \fi\fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every thin rhombus clip/.try
    ]{thin rhombus}
    \UsePenroseTile[
      every Penrose tile/.try,
      every thin rhombus/.try,
      pic actions
    ]{thin rhombus}
    \UsePenroseTile[
      every Penrose arc clip/.try,
      every thin rhombus arc clip/.try
    ]{thin rhombus}
    \path[every circle arc/.try] (18:1) circle[radius=1/4];
    \path[every long arc/.try] (-18:1) circle[radius=1/4];
\coordinate (-edge a start) at (0,0);
\coordinate (-edge a end) at (18:1);
\coordinate (-edge A start) at (18:1);
\coordinate (-edge A end) at (2*\pr@chphi,0);
\coordinate (-edge B start) at (2*\pr@chphi,0);
\coordinate (-edge B end) at (-18:1);
\coordinate (-edge b start) at (-18:1);
\coordinate (-edge b end) at (0,0);
    \end{scope}
  },
  thin rhombus/.style={
    every Penrose pic/.try,
    pic type=thin rhombus,
  },
  thick rhombus/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}b\relax
    \pgftransformrotate{144}%
    \pgftransformshift{\pgfpoint{-\pr@cphi cm}{-\pr@sphi cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}B\relax
    \pgftransformrotate{36}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}a\relax
    \pgftransformrotate{-36}%
    \pgftransformshift{\pgfpoint{-\pr@cphi cm}{\pr@sphi cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}A\relax
    \pgftransformrotate{216}%
    \pgftransformshift{\pgfpoint{-2*\pr@cphi cm}{0 cm}}%
    \fi\fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every thick rhombus clip/.try
    ]{thick rhombus}
    \UsePenroseTile[
      every Penrose tile/.try,
      every thick rhombus/.try,
      pic actions
    ]{thick rhombus}
    \UsePenroseTile[
      every Penrose arc clip/.try,
      every thick rhombus arc clip/.try
    ]{thick rhombus}
\path[every circle arc/.try] (2*\pr@cphi,0) circle[radius=1/4];
\path[every long arc/.try] (0,0) circle[radius=3/4];
\coordinate (-edge B start) at (0,0);
\coordinate (-edge B end) at (36:1);
\coordinate (-edge a start) at (36:1);
\coordinate (-edge a end) at (2*\pr@cphi,0);
\coordinate (-edge A start) at (2*\pr@cphi,0);
\coordinate (-edge A end) at (-36:1);
\coordinate (-edge b start) at (-36:1);
\coordinate (-edge b end) at (0,0);
    \end{scope}
  },
  thick rhombus/.style={
    every Penrose pic/.try,
    pic type=thick rhombus,
  },
  kite/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}c\relax
    \pgftransformrotate{-72}%
    \pgftransformshift{\pgfpoint{-\pr@cphi cm}{\pr@sphi cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}C\relax
    \pgftransformrotate{-108}%
    \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}a\relax
    \pgftransformrotate{36}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}A\relax
    \pgftransformrotate{144}%
    \pgftransformshift{\pgfpoint{-\pr@cphi cm}{-\pr@sphi cm}}%
    \fi\fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every kite clip/.try
    ]{kite}
    \UsePenroseTile[
      every Penrose tile/.try,
      every kite/.try,
      pic actions
    ]{kite}
    \UsePenroseTile[
      every Penrose arc clip/.try,
      every kite arc clip/.try
    ]{kite}
\path[every circle arc/.try] (0,0) circle[radius=\pr@invphi];
\path[every long arc/.try] (1,0) circle[radius=\pr@invphisq];
\coordinate (-edge a start) at (0,0);
\coordinate (-edge a end) at (36:1);
\coordinate (-edge c start) at (36:1);
\coordinate (-edge c end) at (1,0);
\coordinate (-edge C start) at (1,0);
\coordinate (-edge C end) at (-36:1);
\coordinate (-edge A start) at (-36:1);
\coordinate (-edge A end) at (0,0);
    \end{scope}
  },
  dart/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}c\relax
    \pgftransformrotate{108}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}C\relax
    \pgftransformrotate{72}%
    \pgftransformshift%
    {\pgfpoint{\pr@invphi*\pr@shphi cm}{-\pr@invphi*\pr@chphi cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}a\relax
    \pgftransformrotate{-36}%
    \pgftransformshift%
    {\pgfpoint{\pr@invphi*\pr@shphi cm}{\pr@invphi*\pr@chphi cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}A\relax
    \pgftransformrotate{216}%
    \pgftransformshift{\pgfpoint{-\pr@invphi cm}{0 cm}}%
    \fi\fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every dart clip/.try
    ]{dart}
    \UsePenroseTile[
      every Penrose tile/.try,
      every dart/.try,
      pic actions
    ]{dart}
    \UsePenroseTile[
      every Penrose arc clip/.try,
      every dart arc clip/.try
    ]{dart}
\path[every circle arc/.try] (\pr@invphi,0) circle[radius=\pr@ominvphi];
\path[every long arc/.try] (0,0) circle[radius=\pr@ominvphisq];
\coordinate (-edge c start) at (0,0);
\coordinate (-edge c end) at (108:\pr@invphi);
\coordinate (-edge a start) at (108:\pr@invphi);
\coordinate (-edge a end) at (\pr@invphi,0);
\coordinate (-edge A start) at (\pr@invphi,0);
\coordinate (-edge A end) at (-108:\pr@invphi);
\coordinate (-edge C start) at (-108:\pr@invphi);
\coordinate (-edge C end) at (0,0);
    \end{scope}
  },
  kite/.style={
    every Penrose pic/.try,
    pic type=kite,
  },
  dart/.style={
    every Penrose pic/.try,
    pic type=dart,
  },
  golden triangle/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}B\relax
    \pgftransformrotate{18}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}C\relax
    \pgftransformrotate{-90}%
    \pgftransformshift{\pgfpoint{-\pr@chphi cm}{\pr@shphi cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}A\relax
    \pgftransformrotate{162}%
    \pgftransformshift{\pgfpoint{-\pr@chphi cm}{-\pr@shphi cm}}%
    \fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every golden triangle clip/.try
    ]{golden triangle}
    \UsePenroseTile[
      every Penrose tile/.try,
      every golden triangle/.try,
      pic actions
    ]{golden triangle}
\coordinate (-edge a start) at (0,0);
\coordinate (-edge a end) at (18:1);
\coordinate (-edge c start) at (18:1);
\coordinate (-edge c end) at (-18:1);
\coordinate (-edge b start) at (-18:1);
\coordinate (-edge b end) at (0,0);
    \end{scope}
  },
  golden triangle/.style={
    every Penrose pic/.try,
    pic type=golden triangle,
  },
  reverse golden triangle/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}b\relax
    \pgftransformrotate{162}%
    \pgftransformshift{\pgfpoint{-\pr@chphi cm}{-\pr@shphi cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}c\relax
    \pgftransformrotate{-90}%
    \pgftransformshift{\pgfpoint{-\pr@chphi cm}{\pr@shphi cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}a\relax
    \pgftransformrotate{18}%
    \fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every reverse golden triangle clip/.try
    ]{reverse golden triangle}
    \UsePenroseTile[
      every Penrose tile/.try,
      every reverse golden triangle/.try,
      pic actions
    ]{reverse golden triangle}
\coordinate (-edge B start) at (0,0);
\coordinate (-edge B end) at (18:1);
\coordinate (-edge C start) at (18:1);
\coordinate (-edge C end) at (-18:1);
\coordinate (-edge A start) at (-18:1);
\coordinate (-edge A end) at (0,0);
    \end{scope}
  },
  reverse golden triangle/.style={
    every Penrose pic/.try,
    pic type=reverse golden triangle,
  },
  golden gnomon/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}c\relax
    \pgftransformrotate{144}%
    \pgftransformshift{\pgfpoint{-\pr@cphi cm}{-\pr@sphi cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}B\relax
    \pgftransformrotate{-144}%
    \pgftransformshift{\pgfpoint{-2*\pr@cphi cm}{0 cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}a\relax
    \fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every golden gnomon clip/.try
    ]{golden gnomon}
    \UsePenroseTile[
      every Penrose tile/.try,
      every golden gnomon/.try,
      pic actions
    ]{golden gnomon}
\coordinate (-edge C start) at (0,0);
\coordinate (-edge C end) at (36:1);
\coordinate (-edge b start) at (36:1);
\coordinate (-edge b end) at (2*\pr@cphi,0);
\coordinate (-edge A start) at (2*\pr@cphi,0);
\coordinate (-edge A end) at (0,0);
    \end{scope}
  },
  golden gnomon/.style={
    every Penrose pic/.try,
    pic type=golden gnomon,
  },
  reverse golden gnomon/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}C\relax
    \pgftransformrotate{36}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}b\relax
    \pgftransformrotate{-36}%
    \pgftransformshift{\pgfpoint{-\pr@cphi cm}{\pr@sphi cm}}%
    \else
    \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}A\relax
    \pgftransformrotate{180}%
    \pgftransformshift{\pgfpoint{-2*\pr@cphi cm}{0 cm}}%
    \fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every reverse golden gnomon clip/.try
    ]{reverse golden gnomon}
    \UsePenroseTile[
      every Penrose tile/.try,
      every reverse golden gnomon/.try,
      pic actions
    ]{reverse golden gnomon}
\coordinate (-edge a start) at (0,0);
\coordinate (-edge a end) at (2*\pr@cphi,0);
\coordinate (-edge B start) at (2*\pr@cphi,0);
\coordinate (-edge B end) at (-36:1);
\coordinate (-edge c start) at (-36:1);
\coordinate (-edge c end) at (0,0);
    \end{scope}
  },
  reverse golden gnomon/.style={
    every Penrose pic/.try,
    pic type=reverse golden gnomon,
  },
  pentagon 5/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
    \test@newedge{1}%
    \if@newedge
    \pgftransformrotate{180}%
    \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
    \else
    \test@newedge{2}%
    \if@newedge
    \pgftransformshift{\pgfpoint{1 cm}{0 cm}}%
    \pgftransformrotate{108}%
    \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
    \else
    \test@newedge{3}%
    \if@newedge
    \pgftransformshift%
    {\pgfpoint{\pr@phi * \pr@shphi cm}{- \pr@phi * \pr@chphi cm}}%
    \pgftransformrotate{36}%
    \else
    \test@newedge{4}%
    \if@newedge
    \pgftransformshift{\pgfpoint{- \pr@shphi cm}{-\pr@chphi cm}}%
    \pgftransformrotate{-36}%
    \else
    \test@newedge{5}%
    \if@newedge
    \pgftransformrotate{-108}%
    \fi\fi\fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every pentagon clip/.try,
      every pentagon 5 clip/.try
    ]{pentagon 5}
    \UsePenroseTile[
      every Penrose tile/.try,
      every pentagon/.try,
      every pentagon 5/.try,
      pic actions
    ]{pentagon 5}
\coordinate (-edge a1 start) at (0,0);
\coordinate (-edge a1 end) at (1,0);
\coordinate (-edge a2 start) at (1,0);
\coordinate (-edge a2 end) at (1+\pr@shphi,\pr@chphi);
\coordinate (-edge a3 start) at (1+\pr@shphi,\pr@chphi);
\coordinate (-edge a3 end) at (\pr@cphi-\pr@shphi,\pr@sphi+\pr@chphi);
\coordinate (-edge a4 start) at (\pr@cphi-\pr@shphi,\pr@sphi+\pr@chphi);
\coordinate (-edge a4 end) at (-\pr@shphi,\pr@chphi);
\coordinate (-edge a5 start) at (-\pr@shphi,\pr@chphi);
\coordinate (-edge a5 end) at (0,0);
    \end{scope}
  },
  pentagon 5/.style={
    every Penrose pic/.try,
    pic type=pentagon 5,
  },
  pentagon 3/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
    \test@edgealign{a}%
    \if@edgealign
    \pgftransformrotate{180}%
    \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
    \else
    \test@edgealign{B}%
    \if@edgealign%
    \test@newedge{1}%
    \if@newedge
    \pgftransformshift{\pgfpoint{1 cm}{0 cm}}%
    \pgftransformrotate{108}%
    \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
    \else
    \pgftransformrotate{-108}%
    \fi
    \else
    \test@newedge{1}%
    \if@newedge
    \pgftransformshift%
    {\pgfpoint{\pr@phi * \pr@shphi cm}{- \pr@phi * \pr@chphi cm}}%
    \pgftransformrotate{36}%
    \else
    \pgftransformshift{\pgfpoint{- \pr@shphi cm}{-\pr@chphi cm}}%
    \pgftransformrotate{-36}%
    \fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every pentagon clip/.try,
      every pentagon 3 clip/.try
    ]{pentagon 3}
    \UsePenroseTile[
      every Penrose tile/.try,
      every pentagon/.try,
      every pentagon 3/.try,
      pic actions
    ]{pentagon 3}
\coordinate (-edge A start) at (0,0);
\coordinate (-edge A end) at (1,0);
\coordinate (-edge b1 start) at (1,0);
\coordinate (-edge b1 end) at (1+\pr@shphi,\pr@chphi);
\coordinate (-edge a1 start) at (1+\pr@shphi,\pr@chphi);
\coordinate (-edge a1 end) at (\pr@cphi-\pr@shphi,\pr@sphi+\pr@chphi);
\coordinate (-edge a2 start) at (\pr@cphi-\pr@shphi,\pr@sphi+\pr@chphi);
\coordinate (-edge a2 end) at (-\pr@shphi,\pr@chphi);
\coordinate (-edge b2 start) at (-\pr@shphi,\pr@chphi);
\coordinate (-edge b2 end) at (0,0);
    \end{scope}
  },
  pentagon 3/.style={
    every Penrose pic/.try,
    pic type=pentagon 3,
  },
  pentagon 2/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
    \test@edgealign{D}%
    \if@edgealign
    \pgftransformrotate{180}%
    \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
    \else
    \test@edgealign{a}%
    \if@edgealign%
    \test@newedge{1}%
    \if@newedge
    \pgftransformshift{\pgfpoint{1 cm}{0 cm}}%
    \pgftransformrotate{108}%
    \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
    \else
    \pgftransformrotate{-108}%
    \fi
    \else
    \test@newedge{1}%
    \if@newedge
    \pgftransformshift%
    {\pgfpoint{\pr@phi * \pr@shphi cm}{- \pr@phi * \pr@chphi cm}}%
    \pgftransformrotate{36}%
    \else
    \pgftransformshift{\pgfpoint{- \pr@shphi cm}{-\pr@chphi cm}}%
    \pgftransformrotate{-36}%
    \fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every pentagon clip/.try,
      every pentagon 2 clip/.try
    ]{pentagon 2}
    \UsePenroseTile[
      every Penrose tile/.try,
      every pentagon/.try,
      every pentagon 2/.try,
      pic actions
    ]{pentagon 2}
\coordinate (-edge d start) at (0,0);
\coordinate (-edge d end) at (1,0);
\coordinate (-edge A1 start) at (1,0);
\coordinate (-edge A1 end) at (1+\pr@shphi,\pr@chphi);
\coordinate (-edge c1 start) at (1+\pr@shphi,\pr@chphi);
\coordinate (-edge c1 end) at (\pr@cphi-\pr@shphi,\pr@sphi+\pr@chphi);
\coordinate (-edge c2 start) at (\pr@cphi-\pr@shphi,\pr@sphi+\pr@chphi);
\coordinate (-edge c2 end) at (-\pr@shphi,\pr@chphi);
\coordinate (-edge A2 start) at (-\pr@shphi,\pr@chphi);
\coordinate (-edge A2 end) at (0,0);
    \end{scope}
  },
  pentagon 2/.style={
    every Penrose pic/.try,
    pic type=pentagon 2,
  },
  pentagram/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
    \test@newedge{2}%
    \if@newedge
    \pgftransformshift{\pgfpoint{1 cm}{0 cm}}%
    \pgftransformrotate{72}%
    \else
    \test@newedge{3}%
    \if@newedge
    \pgftransformrotate{-72}%
    \pgftransformshift{\pgfpoint{2 * \pr@shphi cm}{0 cm}}%
    \else
    \test@newedge{4}%
    \if@newedge
    \pgftransformshift{\pgfpoint{1 cm + 2 * \pr@shphi cm}{0 cm}}%
    \else
    \test@newedge{5}%
    \if@newedge
    \pgftransformrotate{216}%
    \pgftransformshift{\pgfpoint{\pr@cphi cm}{\pr@sphi cm}}%
    \else
    \test@newedge{6}%
    \if@newedge
    \pgftransformshift{\pgfpoint{1cm}{0cm}}%
    \pgftransformrotate{-72}%
    \pgftransformshift{\pgfpoint{\pr@cphi cm}{\pr@sphi cm}}%
    \else
    \test@newedge{7}%
    \if@newedge
    \pgftransformrotate{144}%
    \pgftransformshift{\pgfpoint{\pr@shphi cm}{\pr@chphi cm}}%
    \else
    \test@newedge{8}%
    \if@newedge
    \pgftransformshift{\pgfpoint{1 cm + 2*\pr@shphi cm}{0cm}}%
    \pgftransformrotate{216}%
    \pgftransformshift{\pgfpoint{\pr@cphi cm}{\pr@sphi cm}}%
    \else
    \test@newedge{9}%
    \if@newedge
    \pgftransformshift{\pgfpoint{-2*\pr@shphi cm}{0cm}}%
    \pgftransformrotate{72}%
    \else
    \test@newedge{10}%
    \if@newedge
    \pgftransformrotate{144}%
    \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
    \else
    \fi\fi\fi\fi\fi\fi\fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every pentagram clip/.try
    ]{pentagram}
    \UsePenroseTile[
      every Penrose tile/.try,
      every pentagram/.try,
      pic actions
    ]{pentagram}
\coordinate (-edge C1 start) at (1,0);
\coordinate (-edge C1 end) at (0,0);
\coordinate (-edge C2 start) at (0,0);
\coordinate (-edge C2 end) at (-\pr@shphi,\pr@chphi);
\coordinate (-edge C3 start) at (-\pr@shphi,\pr@chphi);
\coordinate (-edge C3 end) at (-2*\pr@shphi,0);
\coordinate (-edge C4 start) at (-2*\pr@shphi,0);
\coordinate (-edge C4 end) at (-1-2*\pr@shphi,0);
\coordinate (-edge C5 start) at (-1-2*\pr@shphi,0);
\coordinate (-edge C5 end) at (-\pr@cphi,-\pr@sphi);
\coordinate (-edge C6 start) at (-\pr@cphi,-\pr@sphi);
\coordinate (-edge C6 end) at (-\pr@cphi-\pr@shphi,-\pr@sphi-\pr@chphi);
\coordinate (-edge C7 start) at (-\pr@cphi-\pr@shphi,-\pr@sphi-\pr@chphi);
\coordinate (-edge C7 end) at (-\pr@shphi,-\pr@chphi);
\coordinate (-edge C8 start) at (-\pr@shphi,-\pr@chphi);
\coordinate (-edge C8 end) at (1-\pr@cphi+\pr@shphi,-\pr@sphi-\pr@chphi);
\coordinate (-edge C9 start) at (1-\pr@cphi+\pr@shphi,-\pr@sphi-\pr@chphi);
\coordinate (-edge C9 end) at (1-\pr@cphi,-\pr@sphi);
\coordinate (-edge C10 start) at (1-\pr@cphi,-\pr@sphi);
\coordinate (-edge C10 end) at (1,0);
    \end{scope}
  },
  pentagram/.style={
    every Penrose pic/.try,
    pic type=pentagram,
  },
  boat/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
    \test@edgealign{d}%
    \if@edgealign
    \pgftransformrotate{180}%
    \pgftransformshift{\pgfpoint{\pr@cphi cm - 1cm}{\pr@sphi cm}}%
    \else
    \test@edgealign{b}%
    \if@edgealign%
    \test@newedge{2}%
    \if@newedge
    \pgftransformrotate{144}%
    \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
    \else
    \pgftransformrotate{216}%
    \pgftransformshift{\pgfpoint{\pr@cphi cm}{\pr@sphi cm}}%
    \fi
    \else
    \test@edgealign{c}%
    \if@edgealign%
    \test@newedge{2}%
    \if@newedge
    \pgftransformshift{\pgfpoint{1 cm}{0 cm}}%
    \pgftransformrotate{72}%
    \else
    \test@newedge{3}%
    \if@newedge
    \pgftransformrotate{-72}%
    \pgftransformshift{\pgfpoint{2 * \pr@shphi cm}{0 cm}}%
    \else
    \test@newedge{4}%
    \if@newedge
    \pgftransformshift{\pgfpoint{1 cm + 2 * \pr@shphi cm}{0 cm}}%
    \else
    \fi\fi\fi\fi\fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every boat clip/.try
    ]{boat}
    \UsePenroseTile[
      every Penrose tile/.try,
      every boat/.try,
      pic actions
    ]{boat}
\coordinate (-edge C1 start) at (1,0);
\coordinate (-edge C1 end) at (0,0);
\coordinate (-edge C2 start) at (0,0);
\coordinate (-edge C2 end) at (-\pr@shphi,\pr@chphi);
\coordinate (-edge C3 start) at (-\pr@shphi,\pr@chphi);
\coordinate (-edge C3 end) at (-2*\pr@shphi,0);
\coordinate (-edge C4 start) at (-2*\pr@shphi,0);
\coordinate (-edge C4 end) at (-1-2*\pr@shphi,0);
\coordinate (-edge B1 start) at (-1-2*\pr@shphi,0);
\coordinate (-edge B1 end) at (-\pr@cphi,-\pr@sphi);
\coordinate (-edge D start) at (-\pr@cphi,-\pr@sphi);
\coordinate (-edge D end) at (1-\pr@cphi,-\pr@sphi);
\coordinate (-edge B2 start) at (1-\pr@cphi,-\pr@sphi);
\coordinate (-edge B2 end) at (1,0);
    \end{scope}
  },
  boat/.style={
    every Penrose pic/.try,
    pic type=boat,
  },
  diamond/.pic={
    \begin{scope}
    \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
    \ifx\prloc\pgfutil@empty
    \else
    \begingroup
    \tikzset{name prefix ..}%
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
    \global\pgf@xa=\pgf@x
    \global\pgf@ya=\pgf@y
    \tikz@scan@one@point\pgfutil@firstofone%
    (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
    \global\pgf@xb=\pgf@x
    \global\pgf@yb=\pgf@y
    \endgroup
    \advance\pgf@xb by -\pgf@xa
    \advance\pgf@yb by -\pgf@ya
    \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
    \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
    \pgf@xb=\pgf@x
    \pgf@yb=\pgf@y
    \pgftransformtriangle%
    {\pgfpoint{0pt}{0pt}}%
    {\pgfpoint{\pgf@xb}{\pgf@yb}}%
    {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
    \test@edgealign{d}%
    \if@edgealign%
    \test@newedge{2}%
    \if@newedge
    \pgftransformshift{\pgfpoint{1cm}{0cm}}%
    \pgftransformrotate{-162}%
    \else
    \pgftransformrotate{-18}%
    \fi
    \else
    \test@newedge{2}%
    \if@newedge
    \pgftransformrotate{162}%
    \pgftransformshift{\pgfpoint{- 2 * \pr@chphi cm}{0cm}}%
    \else
    \pgftransformshift{\pgfpoint{- \pr@cphi cm}{-\pr@sphi cm}}%
    \pgftransformrotate{18}%
    \fi\fi
    \fi
    \UsePenroseTile[
      every Penrose tile clip/.try,
      every diamond clip/.try
    ]{diamond}
    \UsePenroseTile[
      every Penrose tile/.try,
      every diamond/.try,
      pic actions
    ]{diamond}
\coordinate (-edge D1 start) at (0,0);
\coordinate (-edge D1 end) at (\pr@chphi,\pr@shphi);
\coordinate (-edge B1 start) at (\pr@chphi,\pr@shphi);
\coordinate (-edge B1 end) at (2*\pr@chphi,0);
\coordinate (-edge B2 start) at (2*\pr@chphi,0);
\coordinate (-edge B2 end) at (\pr@chphi,-\pr@shphi);
\coordinate (-edge D2 start) at (\pr@chphi,-\pr@shphi);
\coordinate (-edge D2 end) at (0,0);
    \end{scope}
  },
  diamond/.style={
    every Penrose pic/.try,
    pic type=diamond,
  },
}
%% 
%% Copyright (C) 2014-2019 by Andrew Stacey <loopspace@mathforge.org>
%% 
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License (LPPL), either
%% version 1.3c of this license or (at your option) any later
%% version.  The latest version of this license is in the file:
%% 
%% http://www.latex-project.org/lppl.txt
%% 
%% This work is "maintained" (as per LPPL maintenance status) by
%% Andrew Stacey.
%% 
%% This work consists of the files  penrose_code.dtx
%%                                  penrose.tex
%% and the derived files            penrose.ins
%%                                  penrose_code.pdf
%%                                  penrose.pdf
%%                                  tikzlibrarypenrose.code.tex
%%                                  README.txt
%% 
%%
%% End of file `tikzlibrarypenrose.code.tex'.
