code: def estimate_voc(photocurrent, saturation_current, nNsVth):
      
  
      return nNsVth * np.log(np.asarray(photocurrent) / saturation_current + 1.0)
docs: Rough estimate of open circuit voltage useful for bounding searches for
      ``i`` of ``v`` when using :func:`~pvlib.pvsystem.singlediode`.
  
      Parameters
      ----------
      photocurrent : numeric
          photo-generated current [A]
      saturation_current : numeric
          diode reverse saturation current [A]
      nNsVth : numeric
          product of thermal voltage ``Vth`` [V], diode ideality factor ``n``,
          and number of series cells ``Ns``
  
      Returns
      -------
      numeric
          rough estimate of open circuit voltage [V]
  
      Notes
      -----
      Calculating the open circuit voltage, :math:`V_{oc}`, of an ideal device
      with infinite shunt resistance, :math:`R_{sh} \\to \\infty`, and zero
      series resistance, :math:`R_s = 0`, yields the following equation [1]. As
      an estimate of :math:`V_{oc}` it is useful as an upper bound for the
      bisection method.
  
      .. math::
  
          V_{oc, est}=n Ns V_{th} \\log \\left( \\frac{I_L}{I_0} + 1 \\right)
  
      [1] http://www.pveducation.org/pvcdrom/open-circuit-voltage