code: def reflect_ghost(self, p0):
          
          # Instead of self.p1, one could take any point on the line p1--p2.
          dist = self.p1 - p0
          alpha = numpy.einsum("ij, ij->i", dist, self.mirror_edge)
          q = dist - (alpha / self.beta)[:, None] * self.mirror_edge
          return p0 + 2 * q
docs: This method creates the ghost point p0', namely p0 reflected along the edge
          p1--p2, and the point q at the perpendicular intersection of the reflection.
  
                  p0
                _/| \\__
              _/  |    \\__
             /    |       \\
            p1----|q-------p2
            \\_   |     __/
              \\_ |  __/
                \\| /
                 p0'