%%
%% This is file `nicematrix.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% nicematrix.dtx  (with options: `package')
%% 
%% Copyright (C) 2017-2019 by F. Pantigny
%% 
%% This file may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.3 of this license or (at your option) any later
%% version.  The latest version of this license is in:
%% 
%%      http://www.latex-project.org/lppl.txt
%% 
%% and version 1.3 or later is part of all distributions of
%% LaTeX version 2005/12/01 or later.
%% 
\def\myfileversion{2.1.4}
\def\myfiledate{2019/01/28}
\RequirePackage{tikz}
\usetikzlibrary{fit}
\RequirePackage{expl3}[2018-01-01]
\RequirePackage{l3keys2e}
\ProvidesExplPackage
  {nicematrix}
  {\myfiledate}
  {\myfileversion}
  {Several features to improve the typesetting of mathematical matrices with TikZ}
\bool_new:N \c__nicem_draft_bool
\DeclareOption {draft} {\bool_set_true:N \c__nicem_draft_bool}
\DeclareOption* {}
\ProcessOptions \relax
\RequirePackage{array}
\RequirePackage{amsmath}
\RequirePackage{xparse}[2018-10-17]
\cs_new_protected:Nn \__nicem_error:n
        {\msg_error:nn {nicematrix} {#1}}
\cs_new_protected:Nn \__nicem_error:nn
        {\msg_error:nn {nicematrix} {#1} {#2}}
\cs_new_protected:Nn \__nicem_bool_new:N
      {\bool_if_exist:NTF #1
         {\bool_set_false:N #1}
         {\bool_new:N #1}}
\ProvideDocumentCommand \iddots {}
      {\mathinner{\mkern 1mu
                  \raise \p@ \hbox{.}
                  \mkern 2mu
                  \raise 4\p@ \hbox{.}
                  \mkern 2mu
                  \raise 7\p@ \vbox{\kern 7pt
                                    \hbox{.}}
                  \mkern 1mu}}
\int_new:N \g__nicem_env_int
\dim_new:N \l__nicem_columns_width_dim
\seq_new:N \g__nicem_names_seq
\int_new:N \l__nicem_nb_first_row_int
\int_set:Nn \l__nicem_nb_first_row_int 1
\bool_new:N \l__nicem_exterior_column_bool
\tl_new:N \l__nicem_pos_env_tl
\tl_set:Nn \l__nicem_pos_env_tl c
\bool_new:N \l__nicem_exterior_arraycolsep_bool
\bool_new:N \l__nicem_parallelize_diags_bool
\bool_set_true:N \l__nicem_parallelize_diags_bool
\bool_new:N \l__nicem_nullify_dots_bool
\bool_new:N \l__nicem_auto_columns_width_bool
\tl_new:N \l__nicem_code_for_last_col_tl
\tl_new:N \g__nicem_name_tl
\tl_new:N \l__nicem_name_tl
\bool_new:N \l__nicem_extra_nodes_bool
\bool_new:N \g__nicem_extra_nodes_bool
\dim_new:N \l__nicem_left_margin_dim
\dim_new:N \l__nicem_right_margin_dim
\dim_new:N \g__nicem_left_margin_dim
\dim_new:N \g__nicem_right_margin_dim
\dim_new:N \l__nicem_extra_left_margin_dim
\dim_new:N \l__nicem_extra_right_margin_dim
\dim_new:N \g__nicem_extra_right_margin_dim
\keys_define:nn {NiceMatrix/NiceMatrixOptions}
     {parallelize-diags    .bool_set:N = \l__nicem_parallelize_diags_bool,
      parallelize-diags    .default:n  = true,
      ParallelizeDiagonals .meta:n = parallelize-diags,
      renew-dots        .bool_set:N = \l__nicem_renew_dots_bool,
      renew-dots        .default:n  = true,
      RenewDots         .meta:n = renew-dots,
      renew-matrix      .code:n     = \__nicem_renew_matrix:,
      renew-matrix      .value_forbidden:n = true,
      RenewMatrix       .meta:n     = renew-matrix,
      transparent       .meta:n     = {renew-dots,renew-matrix},
      transparent       .value_forbidden:n = true,
      Transparent       .meta:n     = transparent,
      nullify-dots      .bool_set:N = \l__nicem_nullify_dots_bool ,
      nullify-dots      .default:n  = true,
      NullifyDots       .meta:n     = nullify-dots,
      code-for-last-col  .tl_set:N         = \l__nicem_code_for_last_col_tl,
      code-for-last-col  .value_required:n = true,
      code-for-first-row   .tl_set:N   = \l__nicem_code_for_first_row_tl,
      code-for-first-row    .value_required:n = true,
      exterior-arraycolsep .bool_set:N = \l__nicem_exterior_arraycolsep_bool ,
      exterior-arraycolsep .default:n  = true,
      columns-width     .code:n    = \str_if_eq:nnTF {#1} {auto}
                                     {\__nicem_error:n {Option~auto~for~columns-width}}
                                     {\dim_set:Nn \l__nicem_columns_width_dim {#1}},
      create-extra-nodes  .bool_set:N   = \l__nicem_extra_nodes_bool,
      create-extra-nodes  .default:n    = true,
      left-margin  .dim_set:N  = \l__nicem_left_margin_dim,
      left-margin  .default:n  = \arraycolsep,
      right-margin .dim_set:N  = \l__nicem_right_margin_dim,
      right-margin  .default:n  = \arraycolsep,
      unknown .code:n  = \__nicem_error:n {Unknown~key~for~NiceMatrixOptions}}
\msg_new:nnnn {nicematrix}
              {Unknown~key~for~NiceMatrixOptions}
              {The~key~"\tl_use:N\l_keys_key_tl"~is~unknown~for~the~command~
               \token_to_str:N \NiceMatrixOptions.\\
               If~you~go~on,~it~will~be~ignored.\\
               For~a~list~of~the~available~keys,~type~H~<return>.}
              {The~available~keys~are~(in~alphabetic~order):~
               code-for-last-col,~
               exterior-arraycolsep,~
               left-margin,~
               nullify-dots,~
               parallelize-diags,~
               renew-dots,~
               renew-matrix,~
               right-margin,~
               and~transparent}
\msg_new:nnn {nicematrix}
             {Option~auto~for~columns-width}
             {You~can't~give~the~value~"auto"~to~the~option~"columns-width"~here.~
              If~you~go~on,~the~option~will~be~ignored.}
\NewDocumentCommand \NiceMatrixOptions {m}
    {\keys_set:nn {NiceMatrix/NiceMatrixOptions} {#1}}
\keys_define:nn {NiceMatrix/NiceMatrix}
     {parallelize-diags .bool_set:N  = \l__nicem_parallelize_diags_bool,
      parallelize-diags .default:n   = true,
      renew-dots        .bool_set:N  = \l__nicem_renew_dots_bool,
      renew-dots        .default:n   = true,
      nullify-dots      .bool_set:N  = \l__nicem_nullify_dots_bool ,
      nullify-dots      .default:n   = true,
      columns-width     .code:n      = \str_if_eq:nnTF {#1} {auto}
                                           {\bool_set_true:N
                                                \l__nicem_auto_columns_width_bool}
                                           {\dim_set:Nn \l__nicem_columns_width_dim {#1}},
      name    .code:n                = {\seq_if_in:NnTF \g__nicem_names_seq {#1}
                                           {\__nicem_error:nn {Duplicate~name} {#1}}
                                           {\seq_gput_left:Nn \g__nicem_names_seq {#1}}
                                        \tl_set:Nn \l__nicem_name_tl {#1}},
      name    .value_required:n      = true,
      code-after         .tl_set:N     = \l__nicem_code_after_tl,
      code-after         .initial:n    = \c_empty_tl,
      code-after         .value_required:n = true,
      create-extra-nodes  .bool_set:N   = \l__nicem_extra_nodes_bool,
      create-extra-nodes  .default:n    = true,
      left-margin  .dim_set:N  = \l__nicem_left_margin_dim,
      left-margin  .default:n  = \arraycolsep,
      right-margin .dim_set:N  = \l__nicem_right_margin_dim,
      right-margin .default:n  = \arraycolsep,
      extra-left-margin  .dim_set:N  = \l__nicem_extra_left_margin_dim,
      extra-right-margin .dim_set:N  = \l__nicem_extra_right_margin_dim,
      unknown .code:n  = \__nicem_error:n {Unknown~option~for~NiceMatrix}}
\msg_new:nnnn {nicematrix}
              {Unknown~option~for~NiceMatrix}
              {The~option~"\tl_use:N\l_keys_key_tl"~is~unknown~for~the~environment~
               \{NiceMatrix\}~and~its~variants.\\
               If~you~go~on,~it~will~be~ignored.\\
               For~a~list~of~the~available~options,~type~H~<return>.}
              {The~available~options~are~(in~alphabetic~order):~
               code-after,~
               columns-width,~
               create-extra-nodes,~
               extra-left-margin,~
               extra-right-margin,~
               left-margin,~
               name,~
               nullify-dots,~
               parallelize-diags,~
               renew-dots~
               and~right-margin.}
\msg_new:nnnn {nicematrix}
              {Duplicate~name}
              {The~name~"#1"~is~already~used~and~you~shouldn't~use~
               the~same~environment~name~twice.~You~can~go~on,~but,~
               maybe,~you~will~have~incorrect~results~especially~
               if~you~use~"columns-width=auto".\\
               For~a~list~of~the~names~already~used,~type~H~<return>.}
              {The~names~already~defined~in~this~document~are:~
               \seq_use:Nnnn~\g__nicem_names_seq~{,~} {,~} {~and~}.}
\keys_define:nn {NiceMatrix/NiceArray}
     {parallelize-diags    .bool_set:N = \l__nicem_parallelize_diags_bool,
      parallelize-diags    .default:n  = true,
      renew-dots           .bool_set:N = \l__nicem_renew_dots_bool,
      renew-dots           .default:n  = true,
      nullify-dots         .bool_set:N = \l__nicem_nullify_dots_bool ,
      nullify-dots         .default:n  = true,
      columns-width        .code:n = \str_if_eq:nnTF {#1} {auto}
                                       {\bool_set_true:N \l__nicem_auto_columns_width_bool}
                                       {\dim_set:Nn \l__nicem_columns_width_dim {#1}},
      columns-width        .value_required:n = true,
      name                 .code:n     = {\seq_if_in:NnTF \g__nicem_names_seq {#1}
                                            {\__nicem_error:nn {Duplicate~name} {#1}}
                                            {\seq_gput_left:Nn \g__nicem_names_seq {#1}}
                                          \tl_set:Nn \l__nicem_name_tl {#1}},
      name                 .value_required:n = true,
      c                  .code:n    = \tl_set:Nn \l__nicem_pos_env_tl c,
      t                  .code:n    = \tl_set:Nn \l__nicem_pos_env_tl t,
      b                  .code:n    = \tl_set:Nn \l__nicem_pos_env_tl b,
      code-after         .tl_set:N  = \l__nicem_code_after_tl,
      code-after         .initial:n = \c_empty_tl,
      code-after         .value_required:n = true,
      create-extra-nodes  .bool_set:N   = \l__nicem_extra_nodes_bool,
      create-extra-nodes  .default:n    = true,
      left-margin  .dim_set:N  = \l__nicem_left_margin_dim,
      left-margin  .default:n  = \arraycolsep,
      right-margin .dim_set:N  = \l__nicem_right_margin_dim,
      right-margin .default:n  = \arraycolsep,
      extra-left-margin  .dim_set:N  = \l__nicem_extra_left_margin_dim,
      extra-right-margin .dim_set:N  = \l__nicem_extra_right_margin_dim,
      unknown .code:n  = \__nicem_error:n {Unknown~option~for~NiceArray}}
\msg_new:nnnn {nicematrix}
              {Unknown~option~for~NiceArray}
              {The~option~"\tl_use:N\l_keys_key_tl"~is~unknown~for~the~environment~
               \{NiceArray\}.\\
               If~you~go~on,~it~will~be~ignored.\\
               For~a~list~of~the~available~options,~type~H~<return>.}
              {The~available~options~are~(in~alphabetic~order):~
               b,~
               c,~
               code-after,~
               create-extra-nodes,~
               columns-width,~
               extra-left-margin,~
               extra-right-margin,~
               left-margin,~
               name,~
               nullify-dots,~
               parallelize-diags,~
               renew-dots,~
               right-margin,~
               and~t.}
\cs_new_protected:Nn \__nicem_Cell:
   {
    \int_gincr:N \g__nicem_column_int
    \int_compare:nNnT \g__nicem_column_int = 1
          {\int_gincr:N \g__nicem_row_int}
    \int_gset:Nn \g__nicem_column_total_int
                 {\int_max:nn \g__nicem_column_total_int \g__nicem_column_int}
    \hbox_set:Nw \l_tmpa_box $ % $
    \int_compare:nNnT \g__nicem_row_int = 0
             \l__nicem_code_for_first_row_tl}
\cs_new_protected:Nn \__nicem_end_Cell:
   {$ % $
    \hbox_set_end:
    \dim_gset:Nn \g__nicem_max_cell_width_dim
          {\dim_max:nn \g__nicem_max_cell_width_dim {\box_wd:N \l_tmpa_box}}
    \int_compare:nNnT \g__nicem_row_int = 0
       {\dim_gset:Nn \g__nicem_max_dp_row_zero_dim
            {\dim_max:nn \g__nicem_max_dp_row_zero_dim {\box_dp:N \l_tmpa_box}}
        \dim_gset:Nn \g__nicem_max_ht_row_zero_dim
            {\dim_max:nn \g__nicem_max_ht_row_zero_dim {\box_ht:N \l_tmpa_box}}}
    \int_compare:nNnT \g__nicem_row_int = 1
       {\dim_gset:Nn \g__nicem_max_ht_row_one_dim
            {\dim_max:nn \g__nicem_max_ht_row_one_dim {\box_ht:N \l_tmpa_box}}}
    \tikz[remember~picture, inner~sep = 0pt, minimum~width = 0pt, baseline]
       \node [anchor = base,
              name = nm-\int_use:N \g__nicem_env_int-
                        \int_use:N \g__nicem_row_int-
                        \int_use:N \g__nicem_column_int,
              alias = \tl_if_empty:NF \l__nicem_name_tl
                         {\tl_use:N \l__nicem_name_tl-
                          \int_use:N \g__nicem_row_int-
                          \int_use:N \g__nicem_column_int} ]
       \bgroup
       \box_use:N \l_tmpa_box
       \egroup ;}
\NewDocumentEnvironment {NiceMatrix} {!O{}}
    {\keys_set:nn {NiceMatrix/NiceMatrix} {#1}
     \tl_set:Nn \l__nicem_pos_env_tl c
     \bool_set_false:N \l__nicem_exterior_arraycolsep_bool
         \NiceArray{*\c@MaxMatrixCols{C}}
      }
    {\endarray
     \skip_horizontal:n {-\arraycolsep}
     \skip_horizontal:n {\g__nicem_right_margin_dim + \g__nicem_extra_right_margin_dim}}
\cs_generate_variant:Nn \dim_set:Nn {Nx}
\msg_new:nnn {nicematrix}
             {We~are~yet~in~an~environment~NiceArray}
             {Environments~\{NiceArray\}~(or~\{NiceMatrix\},~etc.)~can't~be~
              nested.~We~can~go~on,~but,~maybe,~you~will~have~errors~or~an~incorrect~
              result.}
\cs_new_protected:Npn \__nicem_define_dots:
    {\cs_set_eq:NN \Ldots \__nicem_Ldots
     \cs_set_eq:NN \Cdots \__nicem_Cdots
     \cs_set_eq:NN \Vdots \__nicem_Vdots
     \cs_set_eq:NN \Ddots \__nicem_Ddots
     \cs_set_eq:NN \Iddots \__nicem_Iddots
     \bool_if:NT \l__nicem_renew_dots_bool
        {\cs_set_eq:NN \ldots \__nicem_Ldots
         \cs_set_eq:NN \cdots \__nicem_Cdots
         \cs_set_eq:NN \vdots \__nicem_Vdots
         \cs_set_eq:NN \ddots \__nicem_Ddots
         \cs_set_eq:NN \iddots \__nicem_Iddots
         \cs_set_eq:NN \dots \__nicem_Ldots
         \cs_set_eq:NN \hdotsfor \__nicem_Hdotsfor}}
\cs_new_protected:Npn \__nicem_define_dots_to_nil:
    {\cs_set_eq:NN \Ldots \prg_do_nothing:
     \cs_set_eq:NN \Cdots \prg_do_nothing:
     \cs_set_eq:NN \Vdots \prg_do_nothing:
     \cs_set_eq:NN \Ddots \prg_do_nothing:
     \cs_set_eq:NN \Iddots \prg_do_nothing:
     \bool_if:NT \l__nicem_renew_dots_bool
        {\cs_set_eq:NN \ldots \prg_do_nothing:
         \cs_set_eq:NN \cdots \prg_do_nothing:
         \cs_set_eq:NN \vdots \prg_do_nothing:
         \cs_set_eq:NN \ddots \prg_do_nothing:
         \cs_set_eq:NN \iddots \prg_do_nothing:
         \cs_set_eq:NN \dots \prg_do_nothing:
         \cs_set_eq:NN \hdotsfor \__nicem_Hdotsfor}}
\NewDocumentEnvironment {NiceArray} {O{} m !O{}}
    {\cs_if_exist:NT \__nicem_in_NiceArray:
           {\__nicem_error:n {We~are~yet~in~an~environment~NiceArray}}
     \cs_if_exist:NT \tikz@library@external@loaded
        {\tikzset{external/export = false}}
     \cs_set:Npn \__nicem_in_NiceArray: {--Void--}
     \group_insert_after:N \__nicem_after_array:
     \tl_gclear_new:N \g__nicem_lines_to_draw_tl
     \int_gincr:N \g__nicem_env_int
     \bool_if:NF \l__nicem_block_auto_columns_width_bool
              {\dim_gzero_new:N \g__nicem_max_cell_width_dim}
     \dim_gzero_new:N \g__nicem_max_dp_row_zero_dim
     \dim_gzero_new:N \g__nicem_max_ht_row_zero_dim
     \dim_gzero_new:N \g__nicem_max_ht_row_one_dim
     \keys_set:nn {NiceMatrix/NiceArray} {#1,#3}
     \bool_if:NT \l__nicem_auto_columns_width_bool
         {\group_insert_after:N \__nicem_write_max_cell_width:
          \cs_if_free:cTF {__nicem_max_cell_width_\int_use:N \g__nicem_env_int}
                {\dim_set:Nn \l__nicem_columns_width_dim \c_zero_dim}
                {\dim_set:Nx \l__nicem_columns_width_dim
                     {\use:c {__nicem_max_cell_width_\int_use:N \g__nicem_env_int}}}
          \tl_if_empty:NF \l__nicem_name_tl
            {\cs_if_free:cF {__nicem_max_cell_width_\l__nicem_name_tl}
                {\dim_set:Nx \l__nicem_columns_width_dim
                     {\use:c {__nicem_max_cell_width_\l__nicem_name_tl}}}}
         }
     \bool_gset_eq:NN \g__nicem_extra_nodes_bool \l__nicem_extra_nodes_bool
     \dim_gset_eq:NN \g__nicem_left_margin_dim \l__nicem_left_margin_dim
     \dim_gset_eq:NN \g__nicem_right_margin_dim \l__nicem_right_margin_dim
     \dim_gset_eq:NN \g__nicem_extra_right_margin_dim \l__nicem_extra_right_margin_dim
     \tl_gset_eq:NN \g__nicem_code_after_tl \l__nicem_code_after_tl
     \tl_gset_eq:NN \g__nicem_name_tl \l__nicem_name_tl
     \cs_set:Npn \ialign
          {\everycr{\noalign{\int_gzero:N \g__nicem_column_int}}
          \tabskip = \c_zero_skip
          \cs_set:Npn \ialign {\everycr{}
                               \tabskip = \c_zero_skip
                               \halign}
          \halign}
     \dim_compare:nNnTF \l__nicem_columns_width_dim = \c_zero_dim
        {\newcolumntype{L}{>{\__nicem_Cell:}l<{\__nicem_end_Cell:}}
         \newcolumntype{C}{>{\__nicem_Cell:}c<{\__nicem_end_Cell:}}
         \newcolumntype{R}{>{\__nicem_Cell:}r<{\__nicem_end_Cell:}}}
        {\newcolumntype{L}{wl{\dim_use:N \l__nicem_columns_width_dim}}
         \newcolumntype{C}{wc{\dim_use:N \l__nicem_columns_width_dim}}
         \newcolumntype{R}{wr{\dim_use:N \l__nicem_columns_width_dim}}}
     \cs_set_eq:NN \NC@find@w \relax
     \cs_set_eq:NN \NC@find@W \relax
     \newcolumntype{w}[2]
       {>{\hbox_set:Nw \l_tmpa_box
          \__nicem_Cell:}
        c
        <{\__nicem_end_Cell:
          \hbox_set_end:
          \makebox[##2][##1]{\box_use:N \l_tmpa_box}}}
     \newcolumntype{W}[2]
       {>{\hbox_set:Nw \l_tmpa_box
          \__nicem_Cell:}
        c
        <{\__nicem_end_Cell:
          \hbox_set_end:
          \cs_set_eq:NN \hss \hfil
          \makebox[##2][##1]{\box_use:N \l_tmpa_box}}}
     \bool_if:NTF \c__nicem_draft_bool
            \__nicem_define_dots_to_nil:
            \__nicem_define_dots:
     \cs_set_eq:NN \Hspace \__nicem_Hspace:
     \cs_set_eq:NN \Hdotsfor \__nicem_Hdotsfor
     \cs_set_eq:NN \multicolumn \__nicem_multicolumn:nnn
     \seq_gclear_new:N  \g__nicem_empty_cells_seq
     \seq_gclear_new:N \g__nicem_multicolumn_cells_seq
     \seq_gclear_new:N \g__nicem_multicolumn_sizes_seq
     \int_gzero_new:N \g__nicem_row_int
     \int_gset:Nn \g__nicem_row_int {\l__nicem_nb_first_row_int - 1}
     \int_gzero_new:N \g__nicem_column_int
     \int_gzero_new:N \g__nicem_column_total_int
     \cs_set_eq:NN \@ifnextchar \new@ifnextchar
     \bool_if:NF \l__nicem_exterior_arraycolsep_bool
         {\skip_horizontal:n {-\arraycolsep}}
     \skip_horizontal:n {\l__nicem_left_margin_dim + \l__nicem_extra_left_margin_dim}
     \array[\l__nicem_pos_env_tl]{#2}}
    {\endarray
     \bool_if:NF \l__nicem_exterior_arraycolsep_bool
         {\skip_horizontal:n {-\arraycolsep}}
     \skip_horizontal:n {\g__nicem_right_margin_dim + \g__nicem_extra_right_margin_dim}}
\NewDocumentEnvironment {pNiceMatrix} {}
   {\left(\begin{NiceMatrix}}
   {\end{NiceMatrix}\right)}
\NewDocumentEnvironment {bNiceMatrix} {}
   {\left[\begin{NiceMatrix}}
   {\end{NiceMatrix}\right]}
\NewDocumentEnvironment {BNiceMatrix} {}
   {\left\{\begin{NiceMatrix}}
   {\end{NiceMatrix}\right\}}
\NewDocumentEnvironment {vNiceMatrix} {}
   {\left\lvert\begin{NiceMatrix}}
   {\end{NiceMatrix}\right\rvert}
\NewDocumentEnvironment {VNiceMatrix} {}
   {\left\lVert\begin{NiceMatrix}}
   {\end{NiceMatrix}\right\rVert}
\cs_new_protected:Nn \__nicem_write_max_cell_width:
    {\bool_if:NF \l__nicem_block_auto_columns_width_bool
       {\iow_now:Nn \@mainaux {\ExplSyntaxOn}
        \iow_now:Nx \@mainaux {\cs_gset:cpn
                               {__nicem_max_cell_width_\int_use:N \g__nicem_env_int}
                               {\dim_use:N \g__nicem_max_cell_width_dim} }
          \iow_now:Nx \@mainaux {\cs_gset:cpn {__nicem_max_cell_width_\g__nicem_name_tl}
                                              {\dim_use:N \g__nicem_max_cell_width_dim} }
        \iow_now:Nn \@mainaux {\ExplSyntaxOff}}}
\prg_set_conditional:Npnn \__nicem_if_not_empty_cell:nn #1#2 {T,TF}
       {\cs_if_exist:cTF {pgf@sh@ns@nm-\int_use:N \g__nicem_env_int-
                                       \int_use:N #1-
                                       \int_use:N #2}
          {\seq_if_in:NxTF \g__nicem_empty_cells_seq
                           {\int_use:N #1-\int_use:N #2}
             {\prg_return_false:}
             {\begin{pgfpicture}
                \tl_set:Nx \l_tmpa_tl {nm-\int_use:N \g__nicem_env_int-
                                          \int_use:N #1-
                                          \int_use:N #2}
                \pgfpointanchor \l_tmpa_tl {east}
                \dim_gset:Nn \g_tmpa_dim \pgf@x
                \pgfpointanchor \l_tmpa_tl {west}
                \dim_gset:Nn \g_tmpb_dim \pgf@x
              \end{pgfpicture}
              \dim_compare:nNnTF {\dim_abs:n {\g_tmpb_dim-\g_tmpa_dim}} < {0.5 pt}
                    \prg_return_false:
                    \prg_return_true:
             }}
          \prg_return_false:
       }
\cs_new_protected:Nn \__nicem_instruction_of_type:n
     {\tl_gput_right:Nx \g__nicem_lines_to_draw_tl
           {\exp_not:c {__nicem_draw_#1:nn}
                       {\int_use:N \g__nicem_row_int}
                       {\int_use:N \g__nicem_column_int}}}
\cs_new_protected:Nn \__nicem_after_array:
    {\group_begin:
     \cs_if_exist:NT \tikz@library@external@loaded
         {\tikzset{external/export = false}}
     \int_gset_eq:NN \g__nicem_column_int \g__nicem_column_total_int
     \bool_if:NT \l__nicem_exterior_column_bool {\int_gdecr:N \g__nicem_column_int}
     \seq_gclear_new:N \g__nicem_yet_drawn_seq
     \bool_if:NT \l__nicem_parallelize_diags_bool
          {\int_zero_new:N \l__nicem_ddots_int
           \int_zero_new:N \l__nicem_iddots_int
           \dim_zero_new:N \l__nicem_delta_x_one_dim
           \dim_zero_new:N \l__nicem_delta_y_one_dim
           \dim_zero_new:N \l__nicem_delta_x_two_dim
           \dim_zero_new:N \l__nicem_delta_y_two_dim}
     \bool_if:NT \g__nicem_extra_nodes_bool \__nicem_create_extra_nodes:
     \tl_if_empty:NF \g__nicem_lines_to_draw_tl
           {\int_zero_new:N  \l__nicem_initial_i_int
            \int_zero_new:N  \l__nicem_initial_j_int
            \int_zero_new:N  \l__nicem_final_i_int
            \int_zero_new:N  \l__nicem_final_j_int
            \__nicem_bool_new:N \l__nicem_initial_open_bool
            \__nicem_bool_new:N \l__nicem_final_open_bool
            \g__nicem_lines_to_draw_tl}
     \tl_gclear:N \g__nicem_lines_to_draw_tl
     \tikzset{every~picture/.style = {overlay,
                                      remember~picture,
                                      name~prefix = nm-\int_use:N \g__nicem_env_int-}}
     \cs_set_eq:NN \line \__nicem_line:nn
     \g__nicem_code_after_tl
     \group_end:}
\cs_new_protected:Nn \__nicem_find_extremities_of_line:nnnn
          {\int_set:Nn \l__nicem_initial_i_int {#1}
           \int_set:Nn \l__nicem_initial_j_int {#2}
           \int_set:Nn \l__nicem_final_i_int {#1}
           \int_set:Nn \l__nicem_final_j_int {#2}
           \bool_set_false:N \l__nicem_initial_open_bool
           \bool_set_false:N \l__nicem_final_open_bool
           \__nicem_bool_new:N \l__nicem_stop_loop_bool
           \bool_do_until:Nn \l__nicem_stop_loop_bool
              {\int_add:Nn \l__nicem_final_i_int {#3}
               \int_add:Nn \l__nicem_final_j_int {#4}
               \bool_if:nTF { \int_compare_p:nNn
                                  \l__nicem_final_i_int < {\l__nicem_nb_first_row_int - 1}
                           || \int_compare_p:nNn
                                  \l__nicem_final_i_int > \g__nicem_row_int
                           || \int_compare_p:nNn
                                  \l__nicem_final_j_int < 1
                           || \int_compare_p:nNn
                                  \l__nicem_final_j_int > \g__nicem_column_total_int
                           || \int_compare_p:nNn
                                  \l__nicem_final_j_int > \g__nicem_column_int
                              && \int_compare_p:nNn {#4} > 0 }
                       {\bool_set_true:N \l__nicem_final_open_bool
                        \int_sub:Nn \l__nicem_final_i_int {#3}
                        \int_sub:Nn \l__nicem_final_j_int {#4}
                        \bool_set_true:N \l__nicem_stop_loop_bool}
                       {\__nicem_if_not_empty_cell:nnT
                              \l__nicem_final_i_int
                              \l__nicem_final_j_int
                              {\bool_set_true:N \l__nicem_stop_loop_bool}}
               }
           \bool_set_false:N \l__nicem_stop_loop_bool
           \bool_do_until:Nn \l__nicem_stop_loop_bool
              {\int_sub:Nn \l__nicem_initial_i_int {#3}
               \int_sub:Nn \l__nicem_initial_j_int {#4}
               \bool_if:nTF
                       {   \int_compare_p:nNn
                               \l__nicem_initial_i_int < \l__nicem_nb_first_row_int
                        || \int_compare_p:nNn
                               \l__nicem_initial_i_int > \g__nicem_row_int
                        || \int_compare_p:nNn
                               \l__nicem_initial_j_int < 1
                        || \int_compare_p:nNn
                               \l__nicem_initial_j_int > \g__nicem_column_total_int}
                       {\bool_set_true:N \l__nicem_initial_open_bool
                        \int_add:Nn \l__nicem_initial_i_int {#3}
                        \int_add:Nn \l__nicem_initial_j_int {#4}
                        \bool_set_true:N \l__nicem_stop_loop_bool}
                       {\__nicem_if_not_empty_cell:nnT
                              \l__nicem_initial_i_int
                              \l__nicem_initial_j_int
                              {\bool_set_true:N \l__nicem_stop_loop_bool}}
               }
           \bool_if:nT {\l__nicem_initial_open_bool || \l__nicem_final_open_bool}
                       \__nicem_create_extra_nodes: }
\prg_set_conditional:Npnn \__nicem_if_yet_drawn: {F}
            {\tl_set:Nx \l_tmpa_tl {\int_use:N \l__nicem_initial_i_int-
                                    \int_use:N \l__nicem_initial_j_int-
                                    \int_use:N \l__nicem_final_i_int-
                                    \int_use:N \l__nicem_final_j_int}
             \seq_if_in:NVTF \g__nicem_yet_drawn_seq \l_tmpa_tl
              {\prg_return_true:}
              {\seq_gput_left:NV \g__nicem_yet_drawn_seq \l_tmpa_tl
               \prg_return_false:}}
\cs_new_protected:Nn \__nicem_retrieve_coords:nn
     {\dim_gzero_new:N \g__nicem_x_initial_dim
      \dim_gzero_new:N \g__nicem_y_initial_dim
      \dim_gzero_new:N \g__nicem_x_final_dim
      \dim_gzero_new:N \g__nicem_y_final_dim
      \begin{tikzpicture}[remember~picture]
      \tikz@parse@node\pgfutil@firstofone
             (nm-\int_use:N \g__nicem_env_int-
                 \int_use:N \l__nicem_initial_i_int-
                 \int_use:N \l__nicem_initial_j_int #1)
      \dim_gset:Nn \g__nicem_x_initial_dim \pgf@x
      \dim_gset:Nn \g__nicem_y_initial_dim \pgf@y
      \tikz@parse@node\pgfutil@firstofone
             (nm-\int_use:N \g__nicem_env_int-
                 \int_use:N \l__nicem_final_i_int-
                 \int_use:N \l__nicem_final_j_int #2)
      \dim_gset:Nn \g__nicem_x_final_dim \pgf@x
      \dim_gset:Nn \g__nicem_y_final_dim \pgf@y
      \end{tikzpicture} }
\cs_generate_variant:Nn \__nicem_retrieve_coords:nn {xx}
\cs_new_protected:Nn \__nicem_draw_Ldots:nn
      {\__nicem_find_extremities_of_line:nnnn {#1} {#2} 0 1
       \__nicem_if_yet_drawn:F \__nicem_actually_draw_Ldots:}
\cs_new_protected:Nn \__nicem_actually_draw_Ldots:
          {\__nicem_retrieve_coords:xx {\bool_if:NTF \l__nicem_initial_open_bool
                                     {-medium.base~west}
                                     {.base~east}}
                                  {\bool_if:NTF \l__nicem_final_open_bool
                                     {-medium.base~east}
                                     {.base~west}}
           \bool_if:NT \l__nicem_initial_open_bool
                 {\dim_gset_eq:NN \g__nicem_y_initial_dim \g__nicem_y_final_dim }
           \bool_if:NT \l__nicem_final_open_bool
                 {\dim_gset_eq:NN \g__nicem_y_final_dim \g__nicem_y_initial_dim }
           \dim_gadd:Nn \g__nicem_y_initial_dim {0.53pt}
           \dim_gadd:Nn \g__nicem_y_final_dim {0.53pt}
           \__nicem_draw_tikz_line:}
\cs_new_protected:Nn \__nicem_draw_Cdots:nn
      {\__nicem_find_extremities_of_line:nnnn {#1} {#2} 0 1
       \__nicem_if_yet_drawn:F
            {\__nicem_retrieve_coords:xx {\bool_if:NTF \l__nicem_initial_open_bool
                                        {-medium.mid~west}
                                        {.mid~east}}
                                    {\bool_if:NTF \l__nicem_final_open_bool
                                        {-medium.mid~east}
                                        {.mid~west}}
             \bool_if:NT \l__nicem_initial_open_bool
                   {\dim_gset_eq:NN \g__nicem_y_initial_dim \g__nicem_y_final_dim }
             \bool_if:NT \l__nicem_final_open_bool
                   {\dim_gset_eq:NN \g__nicem_y_final_dim \g__nicem_y_initial_dim }
             \__nicem_draw_tikz_line:}}
\cs_new_protected:Nn \__nicem_draw_Vdots:nn
      {\__nicem_find_extremities_of_line:nnnn {#1} {#2} 1 0
       \__nicem_if_yet_drawn:F
       {\__nicem_retrieve_coords:xx {\bool_if:NTF \l__nicem_initial_open_bool
                                  {-medium.north~west}
                                  {.south~west}}
                               {\bool_if:NTF \l__nicem_final_open_bool
                                   {-medium.south~west}
                                   {.north~west}}
       \bool_set:Nn \l_tmpa_bool
                    {\dim_compare_p:nNn \g__nicem_x_initial_dim = \g__nicem_x_final_dim}
       \__nicem_retrieve_coords:xx {\bool_if:NTF \l__nicem_initial_open_bool
                                 {-medium.north}
                                 {.south}}
                              {\bool_if:NTF \l__nicem_final_open_bool
                                 {-medium.south}
                                 {.north}}
       \bool_set:Nn \l_tmpb_bool
                    {\dim_compare_p:nNn \g__nicem_x_initial_dim = \g__nicem_x_final_dim}
       \bool_if:NF \l_tmpb_bool
            {\dim_gset:Nn \g__nicem_x_initial_dim
                         {\bool_if:NTF \l_tmpa_bool \dim_min:nn \dim_max:nn
                                       \g__nicem_x_initial_dim \g__nicem_x_final_dim}
             \dim_gset_eq:NN \g__nicem_x_final_dim \g__nicem_x_initial_dim}
       \__nicem_draw_tikz_line:}}
\cs_new_protected:Nn \__nicem_draw_Ddots:nn
   {\__nicem_find_extremities_of_line:nnnn {#1} {#2} 1 1
    \__nicem_if_yet_drawn:F
    {\__nicem_retrieve_coords:xx {\bool_if:NTF \l__nicem_initial_open_bool
                                 {-medium.north~west}
                                 {.south~east}}
                            {\bool_if:NTF \l__nicem_final_open_bool
                                 {-medium.south~east}
                                 {.north~west}}
    \bool_if:NT \l__nicem_parallelize_diags_bool
       {\int_incr:N \l__nicem_ddots_int
        \int_compare:nNnTF \l__nicem_ddots_int = 1
          {\dim_set:Nn \l__nicem_delta_x_one_dim {\g__nicem_x_final_dim - \g__nicem_x_initial_dim }
           \dim_set:Nn \l__nicem_delta_y_one_dim {\g__nicem_y_final_dim - \g__nicem_y_initial_dim }}
          {\dim_gset:Nn \g__nicem_y_final_dim
                  {\g__nicem_y_initial_dim +
                      (\g__nicem_x_final_dim - \g__nicem_x_initial_dim)
                      * \dim_ratio:nn \l__nicem_delta_y_one_dim \l__nicem_delta_x_one_dim }}}
    \__nicem_draw_tikz_line:}}
\cs_new_protected:Nn \__nicem_draw_Iddots:nn
   {\__nicem_find_extremities_of_line:nnnn {#1} {#2} 1 {-1}
    \__nicem_if_yet_drawn:F
    {\__nicem_retrieve_coords:xx {\bool_if:NTF \l__nicem_initial_open_bool
                              {-medium.north~east}
                              {.south~west}}
                           {\bool_if:NTF \l__nicem_final_open_bool
                              {-medium.south~west}
                              {.north~east}}
     \bool_if:NT \l__nicem_parallelize_diags_bool
        {\int_incr:N \l__nicem_iddots_int
         \int_compare:nNnTF \l__nicem_iddots_int = 1
           {\dim_set:Nn \l__nicem_delta_x_two_dim {\g__nicem_x_final_dim - \g__nicem_x_initial_dim}
            \dim_set:Nn \l__nicem_delta_y_two_dim {\g__nicem_y_final_dim - \g__nicem_y_initial_dim}}
           {\dim_gset:Nn \g__nicem_y_final_dim
                   {\g__nicem_y_initial_dim +
                       (\g__nicem_x_final_dim - \g__nicem_x_initial_dim)
                       * \dim_ratio:nn \l__nicem_delta_y_two_dim \l__nicem_delta_x_two_dim }}}
    \__nicem_draw_tikz_line:}}
\cs_new_protected:Nn \__nicem_draw_tikz_line:
                 {
                   \dim_zero_new:N \l__nicem_l_dim
                   \dim_set:Nn \l__nicem_l_dim
                              { \fp_to_dim:n
                                  { sqrt( (  \dim_use:N \g__nicem_x_final_dim
                                            -\dim_use:N \g__nicem_x_initial_dim) ^2
                                         +(  \dim_use:N \g__nicem_y_final_dim
                                            -\dim_use:N \g__nicem_y_initial_dim) ^2 )}
                              }
                   \dim_compare:nNnF \l__nicem_l_dim = \c_zero_dim
                     {\bool_if:NTF \l__nicem_initial_open_bool
                       {\bool_if:NTF \l__nicem_final_open_bool
                           {\int_set:Nn \l_tmpa_int
                                        {\dim_ratio:nn {\l__nicem_l_dim} {0.45em}}}
                           {\int_set:Nn \l_tmpa_int
                                        {\dim_ratio:nn {\l__nicem_l_dim - 0.3em} {0.45em}}}}
                       {\bool_if:NTF \l__nicem_final_open_bool
                           {\int_set:Nn \l_tmpa_int
                                        {\dim_ratio:nn {\l__nicem_l_dim - 0.3em} {0.45em}}}
                           {\int_set:Nn \l_tmpa_int
                                        {\dim_ratio:nn {\l__nicem_l_dim - 0.6em} {0.45em}}}}
                      \dim_set:Nn \l_tmpa_dim {(\g__nicem_x_final_dim - \g__nicem_x_initial_dim)
                                                 * \dim_ratio:nn {0.45em} \l__nicem_l_dim}
                      \dim_set:Nn \l_tmpb_dim {(\g__nicem_y_final_dim - \g__nicem_y_initial_dim)
                                                 * \dim_ratio:nn {0.45em} \l__nicem_l_dim}
                      \int_set:Nn \l_tmpb_int
                          {\bool_if:NTF \l__nicem_initial_open_bool
                             {\bool_if:NTF \l__nicem_final_open_bool 1 0}
                             {\bool_if:NTF \l__nicem_final_open_bool 2 1}}
                      \dim_gadd:Nn \g__nicem_x_initial_dim
                          {  (\g__nicem_x_final_dim - \g__nicem_x_initial_dim)
                              * \dim_ratio:nn {\l__nicem_l_dim - 0.45 em * \l_tmpa_int}
                                              {\l__nicem_l_dim * 2}
                              * \l_tmpb_int}
                      \dim_gadd:Nn \g__nicem_y_initial_dim
                          {   (\g__nicem_y_final_dim - \g__nicem_y_initial_dim)
                             * \dim_ratio:nn {\l__nicem_l_dim - 0.45 em * \l_tmpa_int}
                                             {\l__nicem_l_dim * 2}
                             * \l_tmpb_int}
                      \begin{tikzpicture}[overlay]
                      \int_step_inline:nnnn 0 1 \l_tmpa_int
                         { \pgfpathcircle{\pgfpoint{\g__nicem_x_initial_dim}
                                                   {\g__nicem_y_initial_dim}}
                                         {0.53pt}
                           \pgfusepath{fill}
                           \dim_gadd:Nn \g__nicem_x_initial_dim \l_tmpa_dim
                           \dim_gadd:Nn \g__nicem_y_initial_dim \l_tmpb_dim }
                      \end{tikzpicture}}
}
\cs_set_eq:NN \__nicem_ldots \ldots
\cs_set_eq:NN \__nicem_cdots \cdots
\cs_set_eq:NN \__nicem_vdots \vdots
\cs_set_eq:NN \__nicem_ddots \ddots
\cs_set_eq:NN \__nicem_iddots \iddots
\cs_new_protected:Nn \__nicem_add_to_empty_cells:
    {\seq_gput_right:Nx \g__nicem_empty_cells_seq
          {\int_use:N \g__nicem_row_int-
           \int_use:N \g__nicem_column_int}}
\NewDocumentCommand \__nicem_Ldots {s}
    {\bool_if:nF {#1} {\__nicem_instruction_of_type:n {Ldots}}
     \bool_if:NF \l__nicem_nullify_dots_bool {\phantom \__nicem_ldots}
     \__nicem_add_to_empty_cells:}
\NewDocumentCommand \__nicem_Cdots {s}
    {\bool_if:nF {#1} {\__nicem_instruction_of_type:n {Cdots}}
     \bool_if:NF \l__nicem_nullify_dots_bool {\phantom \__nicem_cdots}
     \__nicem_add_to_empty_cells:}
\NewDocumentCommand \__nicem_Vdots {s}
    {\bool_if:nF {#1} {\__nicem_instruction_of_type:n {Vdots}}
     \bool_if:NF \l__nicem_nullify_dots_bool {\phantom \__nicem_vdots}
     \__nicem_add_to_empty_cells:}
\NewDocumentCommand \__nicem_Ddots {s}
    {\bool_if:nF {#1} {\__nicem_instruction_of_type:n {Ddots}}
     \bool_if:NF \l__nicem_nullify_dots_bool {\phantom \__nicem_ddots}
     \__nicem_add_to_empty_cells:}
\NewDocumentCommand \__nicem_Iddots {s}
    {\bool_if:nF {#1} {\__nicem_instruction_of_type:n {Iddots}}
     \bool_if:NF \l__nicem_nullify_dots_bool {\phantom \__nicem_iddots}
     \__nicem_add_to_empty_cells:}
\cs_new_protected:Nn \__nicem_Hspace:
  {\__nicem_add_to_empty_cells:
   \hspace}
\cs_set_eq:NN \__nicem_old_multicolumn \multicolumn
\cs_new:Nn \__nicem_multicolumn:nnn
       {\__nicem_old_multicolumn{#1}{#2}{#3}
        \int_compare:nNnT #1 > 1
            {\seq_gput_left:Nx \g__nicem_multicolumn_cells_seq
                               {\int_eval:n \g__nicem_row_int -
                                \int_use:N \g__nicem_column_int}
             \seq_gput_left:Nn \g__nicem_multicolumn_sizes_seq {#1}}
        \int_gadd:Nn \g__nicem_column_int {#1-1}}
\NewDocumentCommand {\__nicem_Hdotsfor} {O{} m}
     {\tl_gput_right:Nx \g__nicem_lines_to_draw_tl
           {\exp_not:N \__nicem_draw_Hdotsfor:nnn
                       {\int_use:N \g__nicem_row_int}
                       {\int_use:N \g__nicem_column_int}
                       {#2}}
      \prg_replicate:nn {#2-1} {&}}
\cs_new_protected:Nn \__nicem_draw_Hdotsfor:nnn
       {\bool_set_false:N \l__nicem_initial_open_bool
        \bool_set_false:N \l__nicem_final_open_bool
        \int_set:Nn \l__nicem_initial_i_int {#1}
        \int_set:Nn \l__nicem_final_i_int {#1}
        \int_compare:nNnTF #2 = 1
              {\int_set:Nn \l__nicem_initial_j_int 1
               \bool_set_true:N \l__nicem_initial_open_bool}
              {\int_set:Nn \l_tmpa_int {#2-1}
               \__nicem_if_not_empty_cell:nnTF \l__nicem_initial_i_int \l_tmpa_int
                 {\int_set:Nn \l__nicem_initial_j_int {#2-1}}
                 {\int_set:Nn \l__nicem_initial_j_int {#2}
                  \bool_set_true:N \l__nicem_initial_open_bool}}
        \int_compare:nNnTF {#2+#3-1} = \g__nicem_column_int
              {\int_set:Nn \l__nicem_final_j_int {#2+#3-1}
               \bool_set_true:N \l__nicem_final_open_bool}
              {\int_set:Nn \l_tmpa_int {#2+#3}
               \__nicem_if_not_empty_cell:nnTF \l__nicem_final_i_int \l_tmpa_int
                 {\int_set:Nn \l__nicem_final_j_int {#2+#3}}
                 {\int_set:Nn \l__nicem_final_j_int {#2+#3-1}
                  \bool_set_true:N \l__nicem_final_open_bool}}
        \bool_if:nT {\l__nicem_initial_open_bool || \l__nicem_final_open_bool}
                    \__nicem_create_extra_nodes:
        \__nicem_actually_draw_Ldots:}
\cs_new_protected:Nn \__nicem_line:nn
     {\dim_zero_new:N \g__nicem_x_initial_dim
      \dim_zero_new:N \g__nicem_y_initial_dim
      \dim_zero_new:N \g__nicem_x_final_dim
      \dim_zero_new:N \g__nicem_y_final_dim
      \__nicem_bool_new:N \l__nicem_initial_open_bool
      \__nicem_bool_new:N \l__nicem_final_open_bool
      \begin{tikzpicture}
         \path~(#1)~--~(#2)~node[at~start]~(i)~{}~node[at~end]~(f)~{} ;
         \tikz@parse@node\pgfutil@firstofone (i)
         \dim_gset:Nn \g__nicem_x_initial_dim \pgf@x
         \dim_gset:Nn \g__nicem_y_initial_dim \pgf@y
         \tikz@parse@node\pgfutil@firstofone (f)
         \dim_gset:Nn \g__nicem_x_final_dim \pgf@x
         \dim_gset:Nn \g__nicem_y_final_dim \pgf@y
      \end{tikzpicture}
      \__nicem_draw_tikz_line:}
\bool_new:N \l__nicem_block_auto_columns_width_bool
\keys_define:nn {NiceMatrix/NiceMatrixBlock}
      {auto-columns-width .code:n =
                           {\bool_set_true:N \l__nicem_block_auto_columns_width_bool
                            \dim_gzero_new:N \g__nicem_max_cell_width_dim
                            \bool_set_true:N \l__nicem_auto_columns_width_bool}}
\NewDocumentEnvironment {NiceMatrixBlock} {!O{}}
    {\keys_set:nn {NiceMatrix/NiceMatrixBlock} {#1}
     \int_zero_new:N \l__nicem_first_env_block_int
     \int_set:Nn \l__nicem_first_env_block_int {\g__nicem_env_int + 1}}
    {\bool_if:NT \l__nicem_block_auto_columns_width_bool
          {\iow_now:Nn \@mainaux \ExplSyntaxOn
           \int_step_inline:nnnn \l__nicem_first_env_block_int 1 \g__nicem_env_int
               {\iow_now:Nx \@mainaux
                   {\cs_gset:cpn {__nicem_max_cell_width_##1}
                                 {\dim_use:N \g__nicem_max_cell_width_dim}}}
           \iow_now:Nn \@mainaux \ExplSyntaxOff}}
\keys_define:nn {NiceMatrix/NiceArrayC}
     {parallelize-diags .bool_set:N       = \l__nicem_parallelize_diags_bool,
      parallelize-diags .default:n        = true,
      renew-dots        .bool_set:N       = \l__nicem_renew_dots_bool,
      renew-dots        .default:n        = true,
      nullify-dots      .bool_set:N       = \l__nicem_nullify_dots_bool ,
      nullify-dots      .default:n        = true,
      code-for-last-col .tl_set:N         = \l__nicem_code_for_last_col_tl,
      code-for-last-col .value_required:n = true,
      columns-width     .code:n           = \str_if_eq:nnTF {#1} {auto}
                                            {\bool_set_true:N
                                                   \l__nicem_auto_columns_width_bool}
                                            {\dim_set:Nn \l__nicem_columns_width_dim {#1}},
      columns-width     .value_required:n = true,
      name              .code:n           = {\seq_if_in:NnTF \g__nicem_names_seq {#1}
                                                {\__nicem_error:nn {Duplicate~name} {#1}}
                                                {\seq_gput_left:Nn \g__nicem_names_seq {#1}}
                                             \tl_set:Nn \l__nicem_name_tl {#1}},
      name              .value_required:n = true,
      code-after        .tl_set:N          = \l__nicem_code_after_tl,
      code-after        .initial:n         = \c_empty_tl,
      code-after        .value_required:n = true,
      create-extra-nodes  .bool_set:N   = \l__nicem_extra_nodes_bool,
      create-extra-nodes  .default:n    = true,
      left-margin  .dim_set:N  = \l__nicem_left_margin_dim,
      left-margin  .default:n  = \arraycolsep,
      right-margin .dim_set:N  = \l__nicem_right_margin_dim,
      right-margin .default:n  = \arraycolsep,
      extra-left-margin  .dim_set:N  = \l__nicem_extra_left_margin_dim,
      extra-right-margin .dim_set:N  = \l__nicem_extra_right_margin_dim,
      unknown .code:n  = \__nicem_error:n {Unknown~option~for~NiceArrayC}}
\msg_new:nnnn {nicematrix}
              {Unknown~option~for~NiceArrayC}
              {The~option~"\tl_use:N\l_keys_key_tl"~is~unknown~for~the~environment~
               \{\@currenvir\}.\\
               If~you~go~on,~it~will~be~ignored.\\
               For~a~list~of~the~available~options,~type~H~<return>.}
              {The~available~options~are~(in~alphabetic~order):~
               code-after,~
               code-for-last-col,~
               columns-width,~
               create-extra-nodes,~
               extra-left-margin,~
               extra-right-margin,~
               left-margin,~
               name,~
               nullify-dots,~
               parallelize-diags~
               renew-dots~
               and~right-margin.}
\cs_new_protected:Nn \__nicem_NiceArrayC:n
    {\bool_set_true:N \l__nicem_exterior_column_bool
     \begin{NiceArray}
             {#1
                >{\int_gincr:N \g__nicem_column_int
                 \int_gset:Nn \g__nicem_column_total_int
                              {\int_max:nn \g__nicem_column_total_int \g__nicem_column_int}
                  \hbox_set:Nw \l_tmpa_box $ % $
                     \l__nicem_code_for_last_col_tl
                 }
                l
                <{   $ % $
                  \hbox_set_end:
                  \dim_gset:Nn \g__nicem_width_last_col_dim
                     {\dim_max:nn \g__nicem_width_last_col_dim
                                  {\box_wd:N \l_tmpa_box}}
                  \skip_horizontal:n {-2\arraycolsep}
                  \hbox_overlap_right:n
                       {\skip_horizontal:n
                               { 2\arraycolsep + \l__nicem_right_margin_dim
                                               + \l__nicem_extra_right_margin_dim}
                        \tikz[remember~picture, inner~sep=0pt, minimum~width=0pt, baseline]
                           \node [anchor=base,
                                  name = nm-\int_use:N \g__nicem_env_int-
                                            \int_use:N \g__nicem_row_int-
                                            \int_use:N \g__nicem_column_int,
                                  alias = \tl_if_empty:NF \l__nicem_name_tl
                                            {\l__nicem_name_tl-
                                             \int_use:N \g__nicem_row_int-
                                             \int_use:N \g__nicem_column_int}]
                                   {\box_use:N \l_tmpa_box} ; } }}}
\NewDocumentEnvironment{NiceArrayCwithDelims} {mm O{} m !O{}}
    {\dim_gzero_new:N \g__nicem_width_last_col_dim
     \keys_set:nn {NiceMatrix/NiceArrayC} {#3,#5}
     \bool_set_false:N \l__nicem_exterior_arraycolsep_bool
     \tl_set:Nn \l__nicem_pos_env_tl c
     \left#1
     \__nicem_NiceArrayC:n {#4}}
    {\end{NiceArray}
     \right#2
     \skip_horizontal:n \g__nicem_width_last_col_dim
    }
\NewDocumentEnvironment {pNiceArrayC} {}
    {\NiceArrayCwithDelims{(}{)}}
    {\endNiceArrayCwithDelims}
\NewDocumentEnvironment {vNiceArrayC} {}
    {\NiceArrayCwithDelims{|}{|}}
    {\endNiceArrayCwithDelims}
\NewDocumentEnvironment {VNiceArrayC} {}
    {\NiceArrayCwithDelims{\|}{\|}}
    {\endNiceArrayCwithDelims}
\NewDocumentEnvironment {bNiceArrayC} {}
    {\NiceArrayCwithDelims{[}{]}}
    {\endNiceArrayCwithDelims}
\NewDocumentEnvironment {BNiceArrayC} {}
    {\NiceArrayCwithDelims{\{}{\}}}
    {\endNiceArrayCwithDelims}
\keys_define:nn {NiceMatrix/NiceArrayRC}
  {parallelize-diags    .bool_set:N = \l__nicem_parallelize_diags_bool,
   parallelize-diags    .default:n  = true,
   renew-dots           .bool_set:N = \l__nicem_renew_dots_bool,
   renew-dots           .default:n  = true,
   nullify-dots         .bool_set:N = \l__nicem_nullify_dots_bool ,
   nullify-dots         .default:n  = true,
   code-for-first-row   .tl_set:N   = \l__nicem_code_for_first_row_tl,
   code-for-first-row    .value_required:n = true,
   code-for-last-col    .tl_set:N   = \l__nicem_code_for_last_col_tl,
   code-for-last-col    .value_required:n = true,
   columns-width        .code:n     = \str_if_eq:nnTF {#1} {auto}
                                         {\bool_set_true:N
                                                \l__nicem_auto_columns_width_bool}
                                         {\dim_set:Nn \l__nicem_columns_width_dim {#1}},
   columns-width        .value_required:n = true,
   name                 .code:n     = {\seq_if_in:NnTF \g__nicem_names_seq {#1}
                                          {\__nicem_error:nn {Duplicate~name} {#1}}
                                          {\seq_gput_left:Nn \g__nicem_names_seq {#1}}
                                       \tl_set:Nn \l__nicem_name_tl {#1}},
   code-after           .tl_set:N    = \l__nicem_code_after_tl,
   create-extra-nodes   .bool_set:N  = \l__nicem_extra_nodes_bool,
   create-extra-nodes   .default:n   = true,
   left-margin  .dim_set:N  = \l__nicem_left_margin_dim,
   left-margin  .default:n  = \arraycolsep,
   right-margin .dim_set:N  = \l__nicem_right_margin_dim,
   right-margin .default:n  = \arraycolsep,
   extra-left-margin  .dim_set:N  = \l__nicem_extra_left_margin_dim,
   extra-right-margin .dim_set:N  = \l__nicem_extra_right_margin_dim,
   unknown .code:n  = \__nicem_error:n {Unknown~option~for~NiceArrayRC}}
\msg_new:nnnn {nicematrix}
              {Unknown~option~for~NiceArrayRC}
              {The~option~"\tl_use:N\l_keys_key_tl"~is~unknown~for~the~environment~
               \{\@currenvir\}.\\
               If~you~go~on,~it~will~be~ignored.\\
               For~a~list~of~the~available~options,~type~H~<return>.}
              {The~available~options~are~(in~alphabetic~order):~
               code-after,~
               code-for-last-col,~
               code-for-first-row,~
               columns-width,~
               create-extra-nodes,~
               extra-left-margin,~
               extra-right-margin,~
               left-margin,~
               name,~
               nullify-dots,~
               parallelize-diags,~
               renew-dots~
               and~right-margin.}
\NewDocumentEnvironment {NiceArrayRCwithDelims} {mm O{} m !O{}}
    {\int_zero:N \l__nicem_nb_first_row_int
     \dim_gzero_new:N \g__nicem_width_last_col_dim
     \keys_set:nn {NiceMatrix/NiceArrayRC} {#3,#5}
     \bool_set_false:N \l__nicem_exterior_arraycolsep_bool
     \tl_set:Nn \l__nicem_pos_env_tl c
     \box_clear_new:N \l__nicem_the_array_box
     \hbox_set:Nw \l__nicem_the_array_box
           $ % $
           \__nicem_NiceArrayC:n {#4}}
    {      \end{NiceArray}
           $ % $
     \hbox_set_end:
     \dim_set:Nn \l_tmpa_dim
            { ( \dim_max:nn {12pt}
                            {\g__nicem_max_ht_row_one_dim + \g__nicem_max_dp_row_zero_dim})
              + \g__nicem_max_ht_row_zero_dim
              - \g__nicem_max_ht_row_one_dim }
     \hbox_set:Nn \l_tmpa_box
        {$ % $
         \left#1
         \vcenter {\skip_vertical:n {- \l_tmpa_dim}
                   \box_use_drop:N \l__nicem_the_array_box}
         \right#2
         $ % $
         \skip_horizontal:n \g__nicem_width_last_col_dim}
     \box_set_ht:Nn \l_tmpa_box {\box_ht:N \l_tmpa_box + \l_tmpa_dim}
     \box_use_drop:N \l_tmpa_box
    }
\NewDocumentEnvironment {pNiceArrayRC} {}
     {\NiceArrayRCwithDelims{(}{)}}
     {\endNiceArrayRCwithDelims}
\NewDocumentEnvironment {bNiceArrayRC} {}
     {\NiceArrayRCwithDelims{[}{]}}
     {\endNiceArrayRCwithDelims}
\NewDocumentEnvironment {vNiceArrayRC} {}
     {\NiceArrayRCwithDelims{|}{|}}
     {\endNiceArrayRCwithDelims}
\NewDocumentEnvironment {VNiceArrayRC} {}
     {\NiceArrayRCwithDelims{\|}{\|}}
     {\endNiceArrayRCwithDelims}
\NewDocumentEnvironment {BNiceArrayRC} {}
     {\NiceArrayRCwithDelims{\{}{\}}}
     {\endNiceArrayRCwithDelims}
\cs_generate_variant:Nn \dim_min:nn {vn}
\cs_generate_variant:Nn \dim_max:nn {vn}
\cs_new_protected:Nn \__nicem_create_extra_nodes:
     {\begin{tikzpicture}[remember~picture,overlay]
      \int_step_variable:nnnNn \l__nicem_nb_first_row_int 1 \g__nicem_row_int \__nicem_i
          {\dim_zero_new:c {l__nicem_row_\__nicem_i _min_dim}
           \dim_set_eq:cN {l__nicem_row_\__nicem_i _min_dim} \c_max_dim
           \dim_zero_new:c {l__nicem_row_\__nicem_i _max_dim}
           \dim_set:cn {l__nicem_row_\__nicem_i _max_dim} {-\c_max_dim}}
      \int_step_variable:nnnNn 1 1 \g__nicem_column_total_int \__nicem_j
          {\dim_zero_new:c {l__nicem_column_\__nicem_j _min_dim}
           \dim_set_eq:cN {l__nicem_column_\__nicem_j _min_dim} \c_max_dim
           \dim_zero_new:c {l__nicem_column_\__nicem_j _max_dim}
           \dim_set:cn {l__nicem_column_\__nicem_j _max_dim} {-\c_max_dim}}
      \int_step_variable:nnnNn \l__nicem_nb_first_row_int 1 \g__nicem_row_int \__nicem_i
          {\int_step_variable:nnnNn 1 1 \g__nicem_column_total_int \__nicem_j
            {\cs_if_exist:cT {pgf@sh@ns@nm-\int_use:N \g__nicem_env_int-\__nicem_i-\__nicem_j}
               {\tikz@parse@node \pgfutil@firstofone
                           (nm-\int_use:N \g__nicem_env_int-\__nicem_i-\__nicem_j.south~west)
                \dim_set:cn {l__nicem_row_\__nicem_i _min_dim}
                            {\dim_min:vn {l__nicem_row_\__nicem_i _min_dim} \pgf@y}
                \seq_if_in:NxF \g__nicem_multicolumn_cells_seq {\__nicem_i-\__nicem_j}
                   {\dim_set:cn {l__nicem_column_\__nicem_j _min_dim}
                               {\dim_min:vn {l__nicem_column_\__nicem_j _min_dim} \pgf@x}}
                \tikz@parse@node \pgfutil@firstofone
                           (nm-\int_use:N \g__nicem_env_int-\__nicem_i-\__nicem_j.north~east)
                \dim_set:cn {l__nicem_row_\__nicem_i _max_dim}
                            {\dim_max:vn {l__nicem_row_\__nicem_i _max_dim} \pgf@y}
                \seq_if_in:NxF \g__nicem_multicolumn_cells_seq {\__nicem_i-\__nicem_j}
                   {\dim_set:cn {l__nicem_column_\__nicem_j _max_dim}
                               {\dim_max:vn {l__nicem_column_\__nicem_j _max_dim} \pgf@x}}}
          }}
      \tikzset{name~suffix = -medium}
      \__nicem_create_nodes:
      \int_set:Nn \l__nicem_nb_first_row_int 1
      \int_step_variable:nnnNn 1 1 {\g__nicem_row_int-1} \__nicem_i
         {\dim_set:cn {l__nicem_row_\__nicem_i _min_dim}
                      {(  \dim_use:c {l__nicem_row_\__nicem_i _min_dim}
                        + \dim_use:c {l__nicem_row_\int_eval:n{\__nicem_i+1}_max_dim}) / 2}
          \dim_set_eq:cc {l__nicem_row_\int_eval:n{\__nicem_i+1}_max_dim}
                         {l__nicem_row_\__nicem_i _min_dim} }
      \int_step_variable:nnnNn 1 1 {\g__nicem_column_int-1} \__nicem_j
         {\dim_set:cn {l__nicem_column_\__nicem_j _max_dim}
                      {(  \dim_use:c {l__nicem_column_\__nicem_j _max_dim}
                        + \dim_use:c {l__nicem_column_\int_eval:n{\__nicem_j+1}_min_dim}) / 2}
          \dim_set_eq:cc {l__nicem_column_\int_eval:n{\__nicem_j+1}_min_dim}
                         {l__nicem_column_\__nicem_j _max_dim} }
      \dim_sub:cn {l__nicem_column_1_min_dim} \g__nicem_left_margin_dim
      \dim_add:cn {l__nicem_column_\int_use:N \g__nicem_column_int _max_dim}
                  \g__nicem_right_margin_dim
      \tikzset{name~suffix = -large}
      \__nicem_create_nodes:
      \end{tikzpicture}
      \cs_set:Nn \__nicem_create_extra_nodes: {}}
\cs_new_protected:Nn \__nicem_create_nodes:
      {\int_step_variable:nnnNn \l__nicem_nb_first_row_int 1 \g__nicem_row_int \__nicem_i
          {\int_step_variable:nnnNn 1 1 \g__nicem_column_total_int \__nicem_j
              {\coordinate (__nicem~south~west)
                           at (\dim_use:c {l__nicem_column_\__nicem_j _min_dim},
                               \dim_use:c {l__nicem_row_\__nicem_i _min_dim}) ;
               \coordinate (__nicem~north~east)
                           at (\dim_use:c {l__nicem_column_\__nicem_j _max_dim},
                               \dim_use:c {l__nicem_row_\__nicem_i _max_dim}) ;
               \draw node [fit = {(__nicem~south~west) (__nicem~north~east)},
                           inner~sep=0pt,
                           name = nm-\int_use:N \g__nicem_env_int-\__nicem_i-\__nicem_j,
                           alias = \tl_if_empty:NF \g__nicem_name_tl
                                         {\tl_use:N \g__nicem_name_tl-\__nicem_i-\__nicem_j}]
                          {} ;
              }
          }
      \__nicem_seq_mapthread_function:NNN \g__nicem_multicolumn_cells_seq
                                     \g__nicem_multicolumn_sizes_seq
                                     \__nicem_node_for_multicolumn:nn
      }
\cs_set:Npn \__nicem_extract_coords: #1-#2\q_stop{\cs_set:Npn \__nicem_i {#1}
                                             \cs_set:Npn \__nicem_j {#2}}
\cs_new_protected:Nn \__nicem_node_for_multicolumn:nn
       {\__nicem_extract_coords: #1\q_stop
        \coordinate (__nicem~south~west)
                    at (\dim_use:c {l__nicem_column_\__nicem_j _min_dim},
                        \dim_use:c {l__nicem_row_\__nicem_i _min_dim}) ;
        \coordinate (__nicem~north~east)
                    at (\dim_use:c {l__nicem_column_\int_eval:n{\__nicem_j+#2-1}_max_dim},
                        \dim_use:c {l__nicem_row_\__nicem_i _max_dim}) ;
        \draw node [fit = {(__nicem~south~west) (__nicem~north~east)},
                    inner~sep=0pt,
                    name = nm-\int_use:N \g__nicem_env_int-\__nicem_i-\__nicem_j,
                    alias = \tl_if_empty:NF \g__nicem_name_tl
                                  {\tl_use:N \g__nicem_name_tl-\__nicem_i-\__nicem_j}]
                   {} ;
        }
\ProcessKeysOptions {NiceMatrix}
\cs_new:Npn \__nicem_seq_mapthread_function:NNN #1#2#3
  {\group_begin:
   \int_step_inline:nnnn 1 1 {\seq_count:N #1}
         {\seq_pop:NN #1 \l_tmpa_tl
          \seq_pop:NN #2 \l_tmpb_tl
          \exp_args:NVV #3 \l_tmpa_tl \l_tmpb_tl}
   \group_end:
  }
\cs_set:Nn \__nicem_renew_matrix:
    {\RenewDocumentEnvironment {pmatrix} {}
         {\begin{pNiceMatrix}}
         {\end{pNiceMatrix}}
     \RenewDocumentEnvironment {vmatrix} {}
         {\begin{vNiceMatrix}}
         {\end{vNiceMatrix}}
     \RenewDocumentEnvironment {Vmatrix} {}
         {\begin{VNiceMatrix}}
         {\end{VNiceMatrix}}
     \RenewDocumentEnvironment {bmatrix} {}
         {\begin{bNiceMatrix}}
         {\end{bNiceMatrix}}
     \RenewDocumentEnvironment {Bmatrix} {}
         {\begin{BNiceMatrix}}
         {\end{BNiceMatrix}}}
\endinput
%%
%% End of file `nicematrix.sty'.
