code: def plane_intersection(strike1, dip1, strike2, dip2):
      
      norm1 = sph2cart(*pole(strike1, dip1))
      norm2 = sph2cart(*pole(strike2, dip2))
      norm1, norm2 = np.array(norm1), np.array(norm2)
      lon, lat = cart2sph(*np.cross(norm1, norm2, axis=0))
      return geographic2plunge_bearing(lon, lat)
docs: Finds the intersection of two planes. Returns a plunge/bearing of the linear
      intersection of the two planes.
  
      Also accepts sequences of strike1s, dip1s, strike2s, dip2s.
  
      Parameters
      ----------
      strike1, dip1 : numbers or sequences of numbers
          The strike and dip (in degrees, following the right-hand-rule) of the
          first plane(s).
      strike2, dip2 : numbers or sequences of numbers
          The strike and dip (in degrees, following the right-hand-rule) of the
          second plane(s).
  
      Returns
      -------
      plunge, bearing : arrays
          The plunge and bearing(s) (in degrees) of the line representing the
          intersection of the two planes.