docs: def get_polygon_constraints_m(self, polygons_m, print_out=False):
          """
          :param range_polygones: list of numbers of polygones to test.
  
          :return A, b: the constraints on the theta-vector of the form A*theta = b
          """
          rows_b = []
          rows_A = []
          m = len(polygons_m[0])
          rows_b.append((m - 2) * pi * np.ones(
              len(polygons_m), ))
          for p in polygons_m:
              row = np.zeros((self.theta.shape[0], ))
              for k in range(m):
                  index = get_index(self.corners, p[1], (p[0], p[2]))
                  row[index] = 1
                  p = np.roll(p, 1)
              assert np.sum(row) == m
              rows_A.append(row)
          A = np.vstack(rows_A)
          b = np.hstack(rows_b)
          num_constraints = A.shape[0]
          A_repeat = np.repeat(A.astype(bool), 3).reshape((1, -1))
          corners = self.corners.reshape((1, -1))
          corners_tiled = np.tile(corners, num_constraints)
          if (print_out):
              print('shape of A {}'.format(A.shape))
          if (print_out):
              print('chosen angles m={}:\n{}'.format(m, (corners_tiled)[A_repeat]
                                                     .reshape((-1, m * 3))))
          if (print_out):
              print('{}-polygones: {}'.format(m, rows_A))
          self.A = A
          self.b = b
          return A, b