class_docstr: A plane is a flat, two-dimensional surface. A plane is the two-dimensional
  analogue of a point (zero-dimensions), a line (one-dimension) and a solid
  (three-dimensions). A plane can generally be constructed by two types of
  inputs. They are:
  - three non-collinear points
  - a point and the plane's normal vector
  
  Attributes
  ==========
  
  p1
  normal_vector
  
  Examples
  ========
  
  >>> from sympy import Plane, Point3D
  >>> Plane(Point3D(1, 1, 1), Point3D(2, 3, 4), Point3D(2, 2, 2))
  Plane(Point3D(1, 1, 1), (-1, 2, -1))
  >>> Plane((1, 1, 1), (2, 3, 4), (2, 2, 2))
  Plane(Point3D(1, 1, 1), (-1, 2, -1))
  >>> Plane(Point3D(1, 1, 1), normal_vector=(1,4,7))
  Plane(Point3D(1, 1, 1), (1, 4, 7))
docstr: Return the parameter(s) corresponding to the given point.
  
  Examples
  ========
  
  >>> from sympy import pi, Plane
  >>> from sympy.abc import t, u, v
  >>> p = Plane((2, 0, 0), (0, 0, 1), (0, 1, 0))
  
  By default, the parameter value returned defines a point
  that is a distance of 1 from the Plane's p1 value and
  in line with the given point:
  
  >>> on_circle = p.arbitrary_point(t).subs(t, pi/4)
  >>> on_circle.distance(p.p1)
  1
  >>> p.parameter_value(on_circle, t)
  {t: pi/4}
  
  Moving the point twice as far from p1 does not change
  the parameter value:
  
  >>> off_circle = p.p1 + (on_circle - p.p1)*2
  >>> off_circle.distance(p.p1)
  2
  >>> p.parameter_value(off_circle, t)
  {t: pi/4}
  
  If the 2-value parameter is desired, supply the two
  parameter symbols and a replacement dictionary will
  be returned:
  
  >>> p.parameter_value(on_circle, u, v)
  {u: sqrt(10)/10, v: sqrt(10)/30}
  >>> p.parameter_value(off_circle, u, v)
  {u: sqrt(10)/5, v: sqrt(10)/15}
code: def parameter_value(self, other, u, v=None):
      """Return the parameter(s) corresponding to the given point.
  
      Examples
      ========
  
      >>> from sympy import pi, Plane
      >>> from sympy.abc import t, u, v
      >>> p = Plane((2, 0, 0), (0, 0, 1), (0, 1, 0))
  
      By default, the parameter value returned defines a point
      that is a distance of 1 from the Plane's p1 value and
      in line with the given point:
  
      >>> on_circle = p.arbitrary_point(t).subs(t, pi/4)
      >>> on_circle.distance(p.p1)
      1
      >>> p.parameter_value(on_circle, t)
      {t: pi/4}
  
      Moving the point twice as far from p1 does not change
      the parameter value:
  
      >>> off_circle = p.p1 + (on_circle - p.p1)*2
      >>> off_circle.distance(p.p1)
      2
      >>> p.parameter_value(off_circle, t)
      {t: pi/4}
  
      If the 2-value parameter is desired, supply the two
      parameter symbols and a replacement dictionary will
      be returned:
  
      >>> p.parameter_value(on_circle, u, v)
      {u: sqrt(10)/10, v: sqrt(10)/30}
      >>> p.parameter_value(off_circle, u, v)
      {u: sqrt(10)/5, v: sqrt(10)/15}
      """
      if not isinstance(other, GeometryEntity):
          other = Point(other, dim=self.ambient_dimension)
      if not isinstance(other, Point):
          raise ValueError("other must be a point")
      if other == self.p1:
          return other
      if isinstance(u, Symbol) and v is None:
          delta = self.arbitrary_point(u) - self.p1
          eq = delta - (other - self.p1).unit
          sol = solve(eq, u, dict=True)
      elif isinstance(u, Symbol) and isinstance(v, Symbol):
          pt = self.arbitrary_point(u, v)
          sol = solve(pt - other, (u, v), dict=True)
      else:
          raise ValueError("expecting 1 or 2 symbols")
      if not sol:
          raise ValueError("Given point is not on %s" % func_name(self))
      return sol[0]
  
imports: from sympy.core import Dummy, Rational, S, Symbol
  from sympy.core.symbol import _symbol
  from sympy.functions.elementary.trigonometric import cos, sin, acos, asin, sqrt
  from .entity import GeometryEntity
  from .line import Line, Ray, Segment, Line3D, LinearEntity, LinearEntity3D, Ray3D, Segment3D
  from .point import Point, Point3D
  from sympy.matrices import Matrix
  from sympy.polys.polytools import cancel
  from sympy.solvers import solve, linsolve
  from sympy.utilities.iterables import uniq, is_sequence
  from sympy.utilities.misc import filldedent, func_name, Undecidable
  from mpmath.libmp.libmpf import prec_to_dps
  import random
label_desc: Use image node_id 22 for calling the Plane obj's underlying member method code with example usage: obj.parameter_value(other, u, v) and returns: sol, other