def conjugate_gauss_beams(wavelen, waist_in, waist_out, **kwargs):
 (wavelen, waist_in, waist_out) = map(sympify, (wavelen, waist_in, waist_out))
 m = (waist_out / waist_in)
 z = waist2rayleigh(waist_in, wavelen)
 if (len(kwargs) != 1):
  raise ValueError('The function expects only one named argument')
 elif ('dist' in kwargs):
  raise NotImplementedError(filldedent('\n            Currently only focal length is supported as a parameter'))
 elif ('f' in kwargs):
  f = sympify(kwargs['f'])
  s_in = (f * (1 - sqrt(((1 / (m ** 2)) - ((z ** 2) / (f ** 2))))))
  s_out = gaussian_conj(s_in, z, f)[0]
 elif ('s_in' in kwargs):
  raise NotImplementedError(filldedent('\n            Currently only focal length is supported as a parameter'))
 else:
  raise ValueError(filldedent('\n            The functions expects the focal length as a named argument'))
 return (s_in, s_out, f)

def conjugate_gauss_beams ( wavelen , waist_in , waist_out , ** kwargs ) : ( wavelen , waist_in , waist_out ) = map ( sympify , ( wavelen , waist_in , waist_out ) ) m = ( waist_out / waist_in ) z = waist2rayleigh ( waist_in , wavelen ) if ( len ( kwargs ) != 1 ) : raise ValueError ( 'The function expects only one named argument' ) elif ( 'dist' in kwargs ) : raise NotImplementedError ( filldedent ( '\n            Currently only focal length is supported as a parameter' ) ) elif ( 'f' in kwargs ) : f = sympify ( kwargs [ 'f' ] ) s_in = ( f * ( 1 - sqrt ( ( ( 1 / ( m ** 2 ) ) - ( ( z ** 2 ) / ( f ** 2 ) ) ) ) ) ) s_out = gaussian_conj ( s_in , z , f ) [ 0 ] elif ( 's_in' in kwargs ) : raise NotImplementedError ( filldedent ( '\n            Currently only focal length is supported as a parameter' ) ) else : raise ValueError ( filldedent ( '\n            The functions expects the focal length as a named argument' ) ) return ( s_in , s_out , f )
find the optical setup conjugating the object/image waists .