#NEWLINE# @ property #NEWLINE# def radius_of_convergence( self ) : #NEWLINE# #INDENT# '\n        Compute the radius of convergence of the defining series.\n\n        Note that even if this is not oo, the function may still be evaluated\n        outside of the radius of convergence by analytic continuation. But if\n        this is zero, then the function is not actually defined anywhere else.\n\n        >>> from sympy.functions import hyper\n        >>> from sympy.abc import z\n        >>> hyper((1, 2), [3], z).radius_of_convergence\n        1\n        >>> hyper((1, 2, 3), [4], z).radius_of_convergence\n        0\n        >>> hyper((1, 2), (3, 4), z).radius_of_convergence\n        oo\n        ' #NEWLINE# if any ( ( ( a . is_integer and ( ( a <= 0 ) == True ) ) for a in ( self . ap + self . bq ) ) ) : #NEWLINE# #INDENT# aints = [ a for a in self . ap if ( a . is_Integer and ( ( a <= 0 ) == True ) ) ] #NEWLINE# bints = [ a for a in self . bq if ( a . is_Integer and ( ( a <= 0 ) == True ) ) ] #NEWLINE# if ( len ( aints ) < len ( bints ) ) : #NEWLINE# #INDENT# return S ( 0 ) #NEWLINE# #UNINDENT# popped = False #NEWLINE# for b in bints : #NEWLINE# #INDENT# cancelled = False #NEWLINE# while aints : #NEWLINE# #INDENT# a = aints . pop ( ) #NEWLINE# if ( a >= b ) : #NEWLINE# #INDENT# cancelled = True #NEWLINE# break #NEWLINE# #UNINDENT# popped = True #NEWLINE# #UNINDENT# if ( not cancelled ) : #NEWLINE# #INDENT# return S ( 0 ) #NEWLINE# #UNINDENT# #UNINDENT# if ( aints or popped ) : #NEWLINE# #INDENT# return oo #NEWLINE# #UNINDENT# #UNINDENT# if ( len ( self . ap ) == ( len ( self . bq ) + 1 ) ) : #NEWLINE# #INDENT# return S ( 1 ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( len ( self . ap ) <= len ( self . bq ) ) : #NEWLINE# #INDENT# return oo #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# return S ( 0 )