docs: def make_matrix(version, reserve_regions=True, add_timing=True):
      """\
      Creates a matrix of the provided `size` (w x h) initialized with the
      (illegal) value 0x2.
  
      The "timing pattern" is already added to the matrix and the version
      and format areas are initialized with 0x0.
  
      :param int version: The (Micro) QR Code version
      :rtype: tuple of bytearrays
      """
      size = calc_matrix_size(version)
      row = [0x2] * size
      matrix = tuple([bytearray(row) for i in range(size)])
      if reserve_regions:
          if version > 6:
              # Reserve version pattern areas
              for i in range(6):
                  # Upper right
                  matrix[i][-11] = 0x0
                  matrix[i][-10] = 0x0
                  matrix[i][-9] = 0x0
                  # Lower left
                  matrix[-11][i] = 0x0
                  matrix[-10][i] = 0x0
                  matrix[-9][i] = 0x0
          # Reserve format pattern areas
          for i in range(9):
              matrix[i][8] = 0x0  # Upper left
              matrix[8][i] = 0x0  # Upper bottom
              if version > 0:
                  matrix[-i][8] = 0x0  # Bottom left
                  matrix[8][- i] = 0x0  # Upper right
      if add_timing:
          # ISO/IEC 18004:2015 -- 6.3.5 Timing pattern (page 17)
          add_timing_pattern(matrix, version < 1)
      return matrix