code: import numpy as np
  
  def build_local_integration_grid_circle(n_quad_points, r_c):
      # Guass-Legendre quadrature on the unit disk (by KyoungJoong Kim and ManSuk Song)
  
      if n_quad_points == 1:
  
          w_1 = 3.141592653589793
          x_1 = 0.0
  
          quad_point_x = np.array([x_1]) * r_c
  
          quad_point_y = np.array([x_1]) * r_c
  
          quad_weight = np.array([w_1]) * r_c * r_c
  
      elif n_quad_points == 4:
  
          w_1 = 0.785398163397448
          x_1 = 0.5
  
          quad_point_x = np.array([x_1, -x_1, -x_1, x_1]) * r_c
  
          quad_point_y = np.array([x_1, x_1, -x_1, -x_1]) * r_c
  
          quad_weight = np.array([w_1, w_1, w_1, w_1]) * r_c * r_c
  
      elif n_quad_points == 8:
  
          w_1 = 0.732786462492640
          w_2 = 0.052611700904808
          x_1 = 0.650115167343736
          x_2 = 0.888073833977115
  
          quad_point_x = np.array([x_1, 0.0, -x_1, 0.0, x_2, -x_2, -x_2, x_2]) * r_c
  
          quad_point_y = np.array([0.0, x_1, 0.0, -x_1, x_2, x_2, -x_2, -x_2]) * r_c
  
          quad_weight = np.array([w_1, w_1, w_1, w_1, w_2, w_2, w_2, w_2]) * r_c * r_c
  
      elif n_quad_points == 12:
  
          w_1 = 0.232710566932577
          w_2 = 0.387077796006226
          w_3 = 0.165609800458645
  
          x_1 = 0.866025403784439
          x_2 = 0.322914992067400
          x_3 = 0.644171310389465
  
          quad_point_x = np.array([x_1, 0.0, -x_1, 0.0, x_2, -x_2, -x_2, x_2, x_3, -x_3, -x_3, x_3]) * r_c
  
          quad_point_y = np.array([0.0, x_1, 0.0, -x_1, x_2, x_2, -x_2, -x_2, x_3, x_3, -x_3, -x_3]) * r_c
  
          quad_weight = np.array([w_1, w_1, w_1, w_1, w_2, w_2, w_2, w_2, w_3, w_3, w_3, w_3]) * r_c * r_c
  
      elif n_quad_points == 20:
  
          w_1 = 0.071488826617391
          w_2 = 0.327176874928167
          w_3 = 0.005591341512851
          w_4 = 0.190570560169519
  
          x_1 = 0.952458896434417
          x_2 = 0.415187657878755
          x_3 = 0.834794942216211
          x_4 = 0.740334457173511
          y_4 = 0.379016937530835
  
          quad_point_x = np.array(
              [x_1, 0.0, -x_1, 0.0, x_2, 0.0, -x_2, 0.0, x_3, -x_3, -x_3, x_3, x_4, -x_4, -x_4, x_4, y_4, y_4, -y_4,
               -y_4]) * r_c
  
          quad_point_y = np.array(
              [0.0, x_1, 0.0, -x_1, 0.0, x_2, 0.0, -x_2, x_3, x_3, -x_3, -x_3, y_4, y_4, -y_4, -y_4, x_4, -x_4, -x_4,
               x_4]) * r_c
  
          quad_weight = np.array(
              [w_1, w_1, w_1, w_1, w_2, w_2, w_2, w_2, w_3, w_3, w_3, w_3, w_4, w_4, w_4, w_4, w_4, w_4, w_4,
               w_4]) * r_c * r_c
  
      elif n_quad_points == 44:
  
          x_1 = 0.252863797091293
          x_2 = 0.989746802511614
          x_3 = 0.577728928444958
          x_4 = 0.873836956645035
          x_5 = 0.689299380791136
          x_6 = 0.597614304667208
          x_7 = 0.375416824626170
          x_8 = 0.883097111318591
          y_8 = 0.365790800400663
          x_9 = 0.707438744960070
          y_9 = 0.293030722710664
  
          w_1 = 0.125290208564338
          w_2 = 0.016712625496982
          w_3 = 0.109500391126365
          w_4 = 0.066237455796397
          w_5 = 0.026102860184358
          w_6 = 0.066000934661100
          w_7 = 0.127428372681720
          w_8 = 0.042523065826681
          w_9 = 0.081539591616413
  
          quad_point_x = np.array(
              [x_1, 0.0, -x_1, 0.0, x_2, 0.0, -x_2, 0.0, x_3, 0.0, -x_3, 0.0, x_4, 0.0, -x_4, 0.0,
               x_5, -x_5, -x_5, x_5, x_6, -x_6, -x_6, x_6, x_7, -x_7, -x_7, x_7,
               x_8, -x_8, -x_8, x_8, y_8, y_8, -y_8, -y_8,
               x_9, -x_9, -x_9, x_9, y_9, y_9, -y_9, -y_9]) * r_c
  
          quad_point_y = np.array(
              [0.0, x_1, 0.0, -x_1, 0.0, x_2, 0.0, -x_2, 0.0, x_3, 0.0, -x_3, 0.0, x_4, 0.0, -x_4,
               x_5, x_5, -x_5, -x_5, x_6, x_6, -x_6, -x_6, x_7, x_7, -x_7, -x_7,
               y_8, y_8, -y_8, -y_8, x_8, -x_8, -x_8, x_8,
               y_9, y_9, -y_9, -y_9, x_9, -x_9, -x_9, x_9]) * r_c
  
          quad_weight = np.array(
              [w_1, w_1, w_1, w_1, w_2, w_2, w_2, w_2, w_3, w_3, w_3, w_3, w_4, w_4, w_4, w_4,
               w_5, w_5, w_5, w_5, w_6, w_6, w_6, w_6, w_7, w_7, w_7, w_7,
               w_8, w_8, w_8, w_8, w_8, w_8, w_8, w_8,
               w_9, w_9, w_9, w_9, w_9, w_9, w_9, w_9]) * r_c * r_c
  
      elif n_quad_points == 72:
  
          w_1 = 0.082558858859169
          x_1 = 0.204668989256100
  
          w_2 = 0.009721593541193
          x_2 = 0.992309839464756
  
          w_3 = 0.061920685878045
          x_3 = 0.740931035494388
  
          w_4 = 0.079123279187043
          x_4 = 0.477987648986077
  
          w_5 = 0.087526733002317
          x_5 = 0.306138805262459
  
          w_6 = 0.057076811471306
          x_6 = 0.524780156099700
  
          w_7 = 0.020981864256888
          x_7 = 0.921806074110042
          y_7 = 0.310920075968188
  
          w_8 = 0.015226392255721
          x_8 = 0.790235832571934
          y_8 = 0.579897645710646
  
          w_9 = 0.033136884897617
          x_9 = 0.725790566968788
          y_9 = 0.525045580895713
  
          w_10 = 0.044853730819348
          x_10 = 0.788230650371813
          y_10 = 0.290244481132460
  
          w_11 = 0.065321481701811
          x_11 = 0.584894890453686
          y_11 = 0.264317463415838
  
          w_12 = 0.024214746797802
          x_12 = 0.909637445684200
          y_12 = 0.09257113237088
  
          quad_point_x = np.array(
              [x_1, 0.0, -x_1, 0.0, x_2, 0.0, -x_2, 0.0, x_3, 0.0, -x_3, 0.0, x_4, 0.0, -x_4, 0.0,
               x_5, -x_5, -x_5, x_5, x_6, -x_6, -x_6, x_6,
               x_7, -x_7, -x_7, x_7, y_7, y_7, -y_7, -y_7,
               x_8, -x_8, -x_8, x_8, y_8, y_8, -y_8, -y_8,
               x_9, -x_9, -x_9, x_9, y_9, y_9, -y_9, -y_9,
               x_10, -x_10, -x_10, x_10, y_10, y_10, -y_10, -y_10,
               x_11, -x_11, -x_11, x_11, y_11, y_11, -y_11, -y_11,
               x_12, -x_12, -x_12, x_12, y_12, y_12, -y_12, -y_12]) * r_c
  
          quad_point_y = np.array(
              [0.0, x_1, 0.0, -x_1, 0.0, x_2, 0.0, -x_2, 0.0, x_3, 0.0, -x_3, 0.0, x_4, 0.0, -x_4,
               x_5, x_5, -x_5, -x_5, x_6, x_6, -x_6, -x_6,
               y_7, y_7, -y_7, -y_7, x_7, -x_7, -x_7, x_7,
               y_8, y_8, -y_8, -y_8, x_8, -x_8, -x_8, x_8,
               y_9, y_9, -y_9, -y_9, x_9, -x_9, -x_9, x_9,
               y_10, y_10, -y_10, -y_10, x_10, -x_10, -x_10, x_10,
               y_11, y_11, -y_11, -y_11, x_11, -x_11, -x_11, x_11,
               y_12, y_12, -y_12, -y_12, x_12, -x_12, -x_12, x_12]) * r_c
  
          quad_weight = np.array(
              [w_1, w_1, w_1, w_1, w_2, w_2, w_2, w_2, w_3, w_3, w_3, w_3, w_4, w_4, w_4, w_4,
               w_5, w_5, w_5, w_5, w_6, w_6, w_6, w_6,
               w_7, w_7, w_7, w_7, w_7, w_7, w_7, w_7,
               w_8, w_8, w_8, w_8, w_8, w_8, w_8, w_8,
               w_9, w_9, w_9, w_9, w_9, w_9, w_9, w_9,
               w_10, w_10, w_10, w_10, w_10, w_10, w_10, w_10,
               w_11, w_11, w_11, w_11, w_11, w_11, w_11, w_11,
               w_12, w_12, w_12, w_12, w_12, w_12, w_12, w_12]) * r_c * r_c
  
      else:
  
          raise ValueError("No set of points/weights for the choice of " + str(n_quad_points) + " quadrature point!")
  
      return quad_point_x, quad_point_y, quad_weight
  
apis: numpy.array