def of_bound_arguments(
        b: inspect.BoundArguments,
        skip_self: bool = True,
        arguments_only: bool = False,
    ) -> Bindings:
        """Populate Bindings from inspect.BoundArguments.

        Args:
            b: BoundArguments to populate from.

            skip_self: If True, skip the first argument if it is named "self".

            arguments_only: If True, only populate kwargs from arguments. This
                includes the same arguments as otherwise except it provides all of
                them by name even if they were bound by position.
        """

        firstarg: Optional[str] = _self_arg(b)

        if arguments_only:
            return Bindings(
                args=(),
                kwargs={
                    k: v
                    for k, v in b.arguments.items()
                    if (not skip_self or k != firstarg)
                },
            )

        if skip_self:
            if firstarg is not None:
                args = b.args[1:]
            else:
                args = b.args
        else:
            args = b.args

        return Bindings(args=args, kwargs=b.kwargs)
Populate Bindings from inspect.BoundArguments.

        Args:
            b: BoundArguments to populate from.

            skip_self: If True, skip the first argument if it is named "self".

            arguments_only: If True, only populate kwargs from arguments. This
                includes the same arguments as otherwise except it provides all of
                them by name even if they were bound by position.
        
src/core/trulens/core/utils/pyschema.py