def line_starts_subpgm(line: str) -> Tuple[bool, Optional[str]]:
    """
    Indicates whether a line in the program is the first line of a subprogram
    definition.

    Args:
        line
    Returns:
       (True, f_name) if line begins a definition for subprogram f_name;
       (False, None) if line does not begin a subprogram definition.
    """

    match = RE_SUB_START.match(line)
    if match != None:
        f_name = match.group(1)
        return (True, f_name)

    match = RE_FN_START.match(line)
    if match != None:
        f_name = match.group(1)
        return (True, f_name)

    return (False, None)
def line_starts_subpgm ( line : str ) -> Tuple [ bool , Optional [ str ] ] : match = RE_SUB_START . match ( line ) if match != None : f_name = match . group ( 1 ) return ( True , f_name ) match = RE_FN_START . match ( line ) if match != None : f_name = match . group ( 1 ) return ( True , f_name ) return ( False , None )
Indicates whether a line in the program is the first line of a subprogram
    definition.

    Args:
        line
    Returns:
       (True, f_name) if line begins a definition for subprogram f_name;
       (False, None) if line does not begin a subprogram definition.