MonoshiTonmoy/Code_Statement_Prediction_Dataset huggingface dataset:
Project Name: benjamincrom+scrabble
Language: Python
Statement Type: API

Source Code:
def get_word_letter_location_set(word, start_location, is_vertical_move):
    letter_location_set = set()
    next_location_func = get_next_location_function(
        use_positive_seek=True,
        use_vertical_words=is_vertical_move
    )

    current_location = start_location
    word_iterator = iter(word)
    for character in word_iterator:
        if character == '(':  # characters in parenthesis are existing tiles
            character = next(word_iterator, None)
            while character != ')':
                current_location = next_location_func(current_location)
                character = next(word_iterator, None)

            character = next(word_iterator, None)

        if character:
            letter_location_set.add((character, current_location))
            current_location = next_location_func(current_location)

    return letter_location_set

get_word_letter_location_set(word='BAKER', start_location=('h', 8), is_vertical_move=False)

Selected Statement: word_iterator = iter(word)

Function Input:
word: 'BAKER'
start_location: ('h', 8)
is_vertical_move: False

Variable Values Before Statement:
word: 'BAKER'

Value After Statement Execution: REPR FAILED

Variable States During Runtime (line, value):
word: 1
'BAKER'
start_location: 1
('h', 8)
is_vertical_move: 1
False
letter_location_set: 2
set()
20
{('B', ('h', 8))}
20
{('B', ('h', 8)), ('A', ('i', 8))}
20
{('K', ('j', 8)), ('B', ('h', 8)), ('A', ('i', 8))}
20
{('K', ('j', 8)), ('B', ('h', 8)), ('E', ('k', 8)), ('A', ('i', 8))}
20
{('K', ('j', 8)), ('B', ('h', 8)), ('A', ('i', 8)), ('E', ('k', 8)), ('R', ('l', 8))}
next_location_func: 3
<function get_next_location_function.<locals>.<lambda> at 0x7feb6dd68f70>
current_location: 8
('h', 8)
21
('i', 8)
21
('j', 8)
21
('k', 8)
21
('l', 8)
21
('m', 8)
word_iterator: 9
REPR FAILED
character: 10
'B'
10
'A'
10
'K'
10
'E'
10
'R'
Project Name: benjamincrom+scrabble
Language: Python
Statement Type: API

Source Code:
def all_move_tiles_connected(board, location_set):
    column_list = [column for column, _ in location_set]
    row_list = [row for _, row in location_set]
    move_is_vertical = (len(set(column_list)) == 1)

    if move_is_vertical:
        this_column = column_list[0]
        for this_row in range(min(row_list), max(row_list) + 1):
            this_tile = board[(this_column, this_row)]
            if not (this_tile or (this_column, this_row) in location_set):
                # print('Not all tiles in vertical move are connected: '
                #       'location {} is empty'.format((this_column, this_row)))

                return False
    else:
        column_range = range(
            config.LETTER_CODE_DICT[min(column_list)],
            config.LETTER_CODE_DICT[max(column_list)] + 1
        )

        this_row = row_list[0]
        for this_column_num in column_range:
            this_column = chr(this_column_num)
            this_tile = board[(this_column, this_row)]
            if not (this_tile or (this_column, this_row) in location_set):
                # print('Not all tiles in horizontal move are connected: '
                #       'location {} is empty'.format((this_column, this_row)))

                return False

    return True

all_move_tiles_connected(board=  abcdefghijklmno1 _______________2 _______________3 _______________4 _______________5 _______________6 _______________7 _______________8 _______★_______9 _______________10_______________11_______________12_______________13_______________14_______________15_______________, location_set={('j', 8), ('l', 8), ('h', 8), ('i', 8), ('k', 8)})

Selected Statement: move_is_vertical = (len(set(column_list)) == 1)

Function Input:
board:   abcdefghijklmno1 _______________2 _______________3 _______________4 _______________5 _______________6 _______________7 _______________8 _______★_______9 _______________10_______________11_______________12_______________13_______________14_______________15_______________
location_set: {('j', 8), ('l', 8), ('h', 8), ('i', 8), ('k', 8)}

Variable Values Before Statement:
column_list: j, l, h, i, k

Value After Statement Execution: False

Variable States During Runtime (line, value):
board: 1
  abcdefghijklmno1 _______________2 _______________3 _______________4 _______________5 _______________6 _______________7 _______________8 _______★_______9 _______________10_______________11_______________12_______________13_______________14_______________15_______________
location_set: 1
{('j', 8), ('l', 8), ('h', 8), ('i', 8), ('k', 8)}
column_list: 2
j, l, h, i, k
row_list: 3
[8, 8, 8, 8, 8]
move_is_vertical: 4
False
column_range: 16
range(104, 109)
this_row: 21
8
this_column_num: 22
104
22
105
22
106
22
107
22
108
this_column: 23
'h'
23
'i'
23
'j'
23
'k'
23
'l'
this_tile: 24
None
Project Name: benjamincrom+scrabble
Language: Python
Statement Type: API

Source Code:
def location_touches_tile(board, location):
    adjacent_location_set = get_adjacent_location_set(location)
    for adjacent_location in adjacent_location_set:
        if board[adjacent_location]:
            return True

    return False

location_touches_tile(board=  abcdefghijklmno1 _______________2 _______________3 _______________4 _______________5 _______________6 _______________7 _______________8 _______SCRAB___9 _______________10_______________11_______________12_______________13_______________14_______________15_______________, location=('i', 13))

Selected Statement: adjacent_location_set = get_adjacent_location_set(location)

Function Input:
board:   abcdefghijklmno1 _______________2 _______________3 _______________4 _______________5 _______________6 _______________7 _______________8 _______SCRAB___9 _______________10_______________11_______________12_______________13_______________14_______________15_______________
location: ('i', 13)

Variable Values Before Statement:
location: ('i', 13)

Value After Statement Execution: {('j', 13), ('h', 13), ('i', 14), ('i', 12)}

Variable States During Runtime (line, value):
board: 1
  abcdefghijklmno1 _______________2 _______________3 _______________4 _______________5 _______________6 _______________7 _______________8 _______SCRAB___9 _______________10_______________11_______________12_______________13_______________14_______________15_______________
location: 1
('i', 13)
adjacent_location_set: 2
{('j', 13), ('h', 13), ('i', 14), ('i', 12)}
adjacent_location: 3
('j', 13)
3
('h', 13)
3
('i', 14)
3
('i', 12)
Project Name: boto+boto3
Language: Python
Statement Type: API

Source Code:
def create_request_parameters(parent, request_model, params=None, index=None):
    """
    Handle request parameters that can be filled in from identifiers,
    resource data members or constants.

    By passing ``params``, you can invoke this method multiple times and
    build up a parameter dict over time, which is particularly useful
    for reverse JMESPath expressions that append to lists.

    :type parent: ServiceResource
    :param parent: The resource instance to which this action is attached.
    :type request_model: :py:class:`~boto3.resources.model.Request`
    :param request_model: The action request model.
    :type params: dict
    :param params: If set, then add to this existing dict. It is both
                   edited in-place and returned.
    :type index: int
    :param index: The position of an item within a list
    :rtype: dict
    :return: Pre-filled parameters to be sent to the request operation.
    """
    if params is None:
        params = {}

    for param in request_model.params:
        source = param.source
        target = param.target

        if source == 'identifier':
            # Resource identifier, e.g. queue.url
            value = getattr(parent, xform_name(param.name))
        elif source == 'data':
            # If this is a data member then it may incur a load
            # action before returning the value.
            value = get_data_member(parent, param.path)
        elif source in ['string', 'integer', 'boolean']:
            # These are hard-coded values in the definition
            value = param.value
        elif source == 'input':
            # This is provided by the user, so ignore it here
            continue
        else:
            raise NotImplementedError(f'Unsupported source type: {source}')

        build_param_structure(params, target, value, index)

    return params

create_request_parameters(parent=dynamodb.Table(name='MyTable'), request_model={_definition=OrderedDict([('operation', 'Scan'), ('params', [OrderedDict([('target', 'TableName'), ('source', 'identifier'), ('name', 'Name')])])]), operation='Scan'}, params=None, index=None)

Selected Statement: build_param_structure(params, target, value, index)

Function Input:
parent: dynamodb.Table(name='MyTable')
request_model: {_definition=OrderedDict([('operation', 'Scan'), ('params', [OrderedDict([('target', 'TableName'), ('source', 'identifier'), ('name', 'Name')])])]), operation='Scan'}
params: None
index: None

Variable Values Before Statement:
target: 'TableName'
value: 'MyTable'
index: None

Value After Statement Execution: TableName: MyTable

Variable States During Runtime (line, value):
parent: 1
dynamodb.Table(name='MyTable')
request_model: 1
{_definition=OrderedDict([('operation', 'Scan'), ('params', [OrderedDict([('target', 'TableName'), ('source', 'identifier'), ('name', 'Name')])])]), operation='Scan'}
params: 1
None
23
45
TableName: MyTable
index: 1
None
param: 25
{target='TableName', source='identifier', name='Name', path=None, value=None}
source: 26
'identifier'
target: 27
'TableName'
value: 31
'MyTable'
Project Name: Quansight-Labs+python-moa
Language: Python
Statement Type: API

Source Code:
def test_lexer_single_token(expression, result):
    lexer = MOALexer()
    tokens = tuple(token.type for token in lexer.tokenize(expression))
    assert tokens == result

test_lexer_single_token(expression='1234', result=('INTEGER',))

Selected Statement: tokens = tuple(token.type for token in lexer.tokenize(expression))

Function Input:
expression: '1234'
result: ('INTEGER',)

Variable Values Before Statement:
expression: '1234'

Value After Statement Execution: ('INTEGER',)

Variable States During Runtime (line, value):
expression: 1
'1234'
result: 1
('INTEGER',)
lexer: 2
3
{text='1234', index=4, lineno=1}
tokens: 3
('INTEGER',)
@py_assert1: 4
None
Project Name: dbcli+mycli
Language: Python
Statement Type: API

Source Code:
def get_mylogin_cnf_path():
    """Return the path to the login path file or None if it doesn't exist."""
    mylogin_cnf_path = os.getenv('MYSQL_TEST_LOGIN_FILE')

    if mylogin_cnf_path is None:
        app_data = os.getenv('APPDATA')
        default_dir = os.path.join(app_data, 'MySQL') if app_data else '~'
        mylogin_cnf_path = os.path.join(default_dir, '.mylogin.cnf')

    mylogin_cnf_path = os.path.expanduser(mylogin_cnf_path)

    if exists(mylogin_cnf_path):
        logger.debug("Found login path file at '{0}'".format(mylogin_cnf_path))
        return mylogin_cnf_path
    return None

get_mylogin_cnf_path()

Selected Statement: mylogin_cnf_path = os.path.expanduser(mylogin_cnf_path)

Function Input:

Variable Values Before Statement:
mylogin_cnf_path: '~/.mylogin.cnf'

Value After Statement Execution: '/home/jinjun/.mylogin.cnf'

Variable States During Runtime (line, value):
mylogin_cnf_path: 3
None
8
'~/.mylogin.cnf'
10
'/home/jinjun/.mylogin.cnf'
app_data: 6
None
default_dir: 7
'~'
Project Name: dbcli+mycli
Language: Python
Statement Type: API

Source Code:
def read_config_file(f, list_values=True):
    """Read a config file.

    *list_values* set to `True` is the default behavior of ConfigObj.
    Disabling it causes values to not be parsed for lists,
    (e.g. 'a,b,c' -> ['a', 'b', 'c']. Additionally, the config values are
    not unquoted. We are disabling list_values when reading MySQL config files
    so we can correctly interpret commas in passwords.

    """

    if isinstance(f, basestring):
        f = os.path.expanduser(f)

    try:
        config = ConfigObj(f, interpolation=False, encoding='utf8',
                           list_values=list_values)
    except ConfigObjError as e:
        log(logger, logging.WARNING, "Unable to parse line {0} of config file "
            "'{1}'.".format(e.line_number, f))
        log(logger, logging.WARNING, "Using successfully parsed config values.")
        return e.config
    except (IOError, OSError) as e:
        log(logger, logging.WARNING, "You don't have permission to read "
            "config file '{0}'.".format(e.filename))
        return None

    return config

read_config_file(f={}, list_values=True)

Selected Statement: config = ConfigObj(f, interpolation=False, encoding='utf8',

Function Input:
list_values: True

Variable Values Before Statement:

Value After Statement Execution: ConfigObj({'main': {'weather': 'cloudy with a chance of meatballs'}})

Variable States During Runtime (line, value):
f: 1
list_values: 1
True
config: 16
ConfigObj({'main': {'weather': 'cloudy with a chance of meatballs'}})
Project Name: dbcli+mycli
Language: Python
Statement Type: API

Source Code:
def format_uptime(uptime_in_seconds):
    """Format number of seconds into human-readable string.

    :param uptime_in_seconds: The server uptime in seconds.
    :returns: A human-readable string representing the uptime.

    >>> uptime = format_uptime('56892')
    >>> print(uptime)
    15 hours 48 min 12 sec
    """

    m, s = divmod(int(uptime_in_seconds), 60)
    h, m = divmod(m, 60)
    d, h = divmod(h, 24)

    uptime_values = []

    for value, unit in ((d, 'days'), (h, 'hours'), (m, 'min'), (s, 'sec')):
        if value == 0 and not uptime_values:
            # Don't include a value/unit if the unit isn't applicable to
            # the uptime. E.g. don't do 0 days 0 hours 1 min 30 sec.
            continue
        elif value == 1 and unit.endswith('s'):
            # Remove the "s" if the unit is singular.
            unit = unit[:-1]
        uptime_values.append('{0} {1}'.format(value, unit))

    uptime = ' '.join(uptime_values)
    return uptime

format_uptime(uptime_in_seconds=59)

Selected Statement: m, s = divmod(int(uptime_in_seconds), 60)

Function Input:
uptime_in_seconds: 59

Variable Values Before Statement:
uptime_in_seconds: 59

Value After Statement Execution: 0

Variable States During Runtime (line, value):
uptime_in_seconds: 1
59
m: 12
0
s: 12
59
h: 13
0
d: 14
0
uptime_values: 16
26
59 sec
value: 18
0
18
59
unit: 18
'days'
18
'hours'
18
'min'
18
'sec'
uptime: 28
'59 sec'
Project Name: ccarocean+pyrads
Language: Python
Statement Type: API

Source Code:
def contains_sublist(list_: List[Any], sublist: List[Any]) -> bool:
    """Determine if a `list` contains a `sublist`.

    :param list_:
        list to search for the `sublist` in.
    :param sublist:
        Sub list to search for.

    :return:
        True if `list` contains `sublist`.

    """
    # Adapted from: https://stackoverflow.com/a/12576755
    if not sublist:
        return False
    for i in range(len(list_)):
        if list_[i] == sublist[0] and list_[i : i + len(sublist)] == sublist:
            return True
    return False

contains_sublist(list_=[1, 2, 3, 4], sublist=[1, 2])

Selected Statement: for i in range(len(list_)):

Function Input:
list_: [1, 2, 3, 4]
sublist: [1, 2]

Variable Values Before Statement:
list_: [1, 2, 3, 4]

Value After Statement Execution: 0

Variable States During Runtime (line, value):
list_: 1
[1, 2, 3, 4]
sublist: 1
[1, 2]
i: 16
0
Project Name: ccarocean+pyrads
Language: Python
Statement Type: API

Source Code:
def delete_sublist(list_: List[Any], sublist: List[Any]) -> List[Any]:
    """Remove a `sublist` from the given `list_`.

    :param list_:
        List to remove the `sublist` from.
    :param sublist:
        Sublist to remove from `list_`.

    :return:
        A copy of `list_` with the `sublist` removed.
    """
    if not sublist:
        return list_[:]
    for i in range(len(list_)):
        if list_[i] == sublist[0] and list_[i : i + len(sublist)] == sublist:
            return list_[:i] + list_[i + len(sublist) :]
    return list_[:]

delete_sublist(list_=[1, 2, 3, 4], sublist=[1, 2])

Selected Statement: for i in range(len(list_)):

Function Input:
list_: [1, 2, 3, 4]
sublist: [1, 2]

Variable Values Before Statement:
list_: [1, 2, 3, 4]

Value After Statement Execution: 0

Variable States During Runtime (line, value):
list_: 1
[1, 2, 3, 4]
sublist: 1
[1, 2]
i: 14
0
Project Name: chyroc+WechatSogou
Language: Python
Statement Type: API

Source Code:
def __handle_content_url(content_url):
        content_url = replace_html(content_url)
        return ('http://mp.weixin.qq.com{}'.format(
            content_url) if 'http://mp.weixin.qq.com' not in content_url else content_url) if content_url else ''

__handle_content_url(content_url='/s?timestamp=1500903767&amp;src=3&amp;ver=1&amp;signature=X4l0IQ091w0DY2ERU7fD*h0VUwBxeHPOJH-Uk-vAfaPamMl6ij7fqAIHomnXQ2X2*2J94H0pixVjsjEkL0TbILtKInZ4hqPp3-lC1nQZcN9Fd*BGbTQp7WlZyzLvCXy0Z8yFVF*lIDlo75pemv7kW8wov4Hz5-uiVzBT5q*Nwaw=')

Selected Statement: content_url = replace_html(content_url)

Function Input:
content_url: '/s?timestamp=1500903767&amp;src=3&amp;ver=1&amp;signature=X4l0IQ091w0DY2ERU7fD*h0VUwBxeHPOJH-Uk-vAfaPamMl6ij7fqAIHomnXQ2X2*2J94H0pixVjsjEkL0TbILtKInZ4hqPp3-lC1nQZcN9Fd*BGbTQp7WlZyzLvCXy0Z8yFVF*lIDlo75pemv7kW8wov4Hz5-uiVzBT5q*Nwaw='

Variable Values Before Statement:
content_url: '/s?timestamp=1500903767&amp;src=3&amp;ver=1&amp;signature=X4l0IQ091w0DY2ERU7fD*h0VUwBxeHPOJH-Uk-vAfaPamMl6ij7fqAIHomnXQ2X2*2J94H0pixVjsjEkL0TbILtKInZ4hqPp3-lC1nQZcN9Fd*BGbTQp7WlZyzLvCXy0Z8yFVF*lIDlo75pemv7kW8wov4Hz5-uiVzBT5q*Nwaw='

Value After Statement Execution: '/s?timestamp

Variable States During Runtime (line, value):
content_url: 1
'/s?timestamp=1500903767&amp;src=3&amp;ver=1&amp;signature=X4l0IQ091w0DY2ERU7fD*h0VUwBxeHPOJH-Uk-vAfaPamMl6ij7fqAIHomnXQ2X2*2J94H0pixVjsjEkL0TbILtKInZ4hqPp3-lC1nQZcN9Fd*BGbTQp7WlZyzLvCXy0Z8yFVF*lIDlo75pemv7kW8wov4Hz5-uiVzBT5q*Nwaw='
2
'/s?timestamp=1500903767&src=3&ver=1&signature=X4l0IQ091w0DY2ERU7fD*h0VUwBxeHPOJH-Uk-vAfaPamMl6ij7fqAIHomnXQ2X2*2J94H0pixVjsjEkL0TbILtKInZ4hqPp3-lC1nQZcN9Fd*BGbTQp7WlZyzLvCXy0Z8yFVF*lIDlo75pemv7kW8wov4Hz5-uiVzBT5q*Nwaw='
Project Name: zauberzeug+nicegui
Language: Python
Statement Type: API

Source Code:
def glob_absolute_paths(file: Union[str, Path]) -> List[Path]:
            path = Path(file)
            if not path.is_absolute():
                path = base / path
            return sorted(path.parent.glob(path.name), key=lambda p: p.stem)

glob_absolute_paths(file='aggrid.js', base=PosixPath('/local/rcs/jinjun/code/pytrace-collector/logs/self_collected/tried/zauberzeug+nicegui/zauberzeug+nicegui/nicegui/elements'))

Selected Statement: path = Path(file)

Function Input:
file: 'aggrid.js'
base: PosixPath('/local/rcs/jinjun/code/pytrace-collector/logs/self_collected/tried/zauberzeug+nicegui/zauberzeug+nicegui/nicegui/elements')

Variable Values Before Statement:
file: 'aggrid.js'

Value After Statement Execution: PosixPath('aggrid.js')

Variable States During Runtime (line, value):
file: 1
'aggrid.js'
base: 1
PosixPath('/local/rcs/jinjun/code/pytrace-collector/logs/self_collected/tried/zauberzeug+nicegui/zauberzeug+nicegui/nicegui/elements')
path: 2
PosixPath('aggrid.js')
4
PosixPath('/local/rcs/jinjun/code/pytrace-collector/logs/self_collected/tried/zauberzeug+nicegui/zauberzeug+nicegui/nicegui/elements/aggrid.js')
Project Name: zauberzeug+nicegui
Language: Python
Statement Type: API

Source Code:
def compute_key(path: Path) -> str:
    """Compute a key for a given path using a hash function.

    If the path is relative to the NiceGUI base directory, the key is computed from the relative path.
    """
    nicegui_base = Path(__file__).parent
    is_file = path.is_file()
    try:
        path = path.relative_to(nicegui_base)
    except ValueError:
        pass
    if is_file:
        return f'{hash_file_path(path.parent)}/{path.name}'
    return f'{hash_file_path(path)}'

compute_key(path=PosixPath('/local/rcs/jinjun/code/pytrace-collector/logs/self_collected/tried/zauberzeug+nicegui/zauberzeug+nicegui/nicegui/elements/aggrid.js'))

Selected Statement: path = path.relative_to(nicegui_base)

Function Input:
path: PosixPath('/local/rcs/jinjun/code/pytrace-collector/logs/self_collected/tried/zauberzeug+nicegui/zauberzeug+nicegui/nicegui/elements/aggrid.js')

Variable Values Before Statement:
nicegui_base: PosixPath('/local/rcs/jinjun/code/pytrace-collector/logs/self_collected/tried/zauberzeug+nicegui/zauberzeug+nicegui/nicegui')

Value After Statement Execution: PosixPath('elements/aggrid.js')

Variable States During Runtime (line, value):
path: 1
PosixPath('/local/rcs/jinjun/code/pytrace-collector/logs/self_collected/tried/zauberzeug+nicegui/zauberzeug+nicegui/nicegui/elements/aggrid.js')
9
PosixPath('elements/aggrid.js')
nicegui_base: 6
PosixPath('/local/rcs/jinjun/code/pytrace-collector/logs/self_collected/tried/zauberzeug+nicegui/zauberzeug+nicegui/nicegui')
is_file: 7
True
Project Name: sensepost+objection
Language: Python
Statement Type: API

Source Code:
def show_android_class_methods(args: list = None) -> None:
    """
        Shows the methods available on an Android class.

        :param args:
        :return:
    """

    if len(clean_argument_flags(args)) <= 0:
        click.secho('Usage: android hooking list class_methods <class name>', bold=True)
        return

    class_name = args[0]

    api = state_connection.get_api()
    methods = api.android_hooking_get_class_methods(class_name)

    # print the enumerated classes
    for class_name in sorted(methods):
        click.secho(class_name)

    click.secho('\nFound {0} method(s)'.format(len(methods)), bold=True)

show_android_class_methods(args=['com.foo.bar'])

Selected Statement: methods = api.android_hooking_get_class_methods(class_name)

Function Input:
args: com.foo.bar

Variable Values Before Statement:
class_name: 'com.foo.bar'

Value After Statement Execution: foo, bar, baz

Variable States During Runtime (line, value):
args: 1
com.foo.bar
class_name: 13
'com.foo.bar'
19
'bar'
19
'baz'
19
'foo'
api: 15
<MagicMock name='get_api()' id='140041905108928'>
methods: 16
foo, bar, baz
Project Name: sensepost+objection
Language: Python
Statement Type: API

Source Code:
def show_ios_class_methods(args: list) -> None:
    """
        Displays the methods available in a class.

        :param args:
        :return:
    """

    if len(clean_argument_flags(args)) <= 0:
        click.secho('Usage: ios hooking list class_methods <class name> (--include-parents)', bold=True)
        return

    classname = args[0]

    api = state_connection.get_api()
    methods = api.ios_hooking_get_class_methods(classname, _should_include_parent_methods(args))

    if len(methods) > 0:

        # dump the methods to screen
        for method in methods:
            click.secho(method)

        click.secho('\nFound {0} methods'.format(len(methods)), bold=True)

    else:
        click.secho('No class / methods found')

show_ios_class_methods(args=['TEKeychainManager'])

Selected Statement: methods = api.ios_hooking_get_class_methods(classname, _should_include_parent_methods(args))

Function Input:
args: TEKeychainManager

Variable Values Before Statement:
classname: 'TEKeychainManager'

Value After Statement Execution: foo, bar

Variable States During Runtime (line, value):
args: 1
TEKeychainManager
classname: 13
'TEKeychainManager'
api: 15
<MagicMock name='get_api()' id='140041837197248'>
methods: 16
foo, bar
method: 21
'foo'
21
'bar'