Home / Class/ NonLocals Class — langchain Architecture

NonLocals Class — langchain Architecture

Architecture documentation for the NonLocals class in utils.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  5690aac6_57db_e54e_c8e1_26c4d7669bfe["NonLocals"]
  ca66092c_447c_d201_0d3c_cfa6ca2cc9d3["utils.py"]
  5690aac6_57db_e54e_c8e1_26c4d7669bfe -->|defined in| ca66092c_447c_d201_0d3c_cfa6ca2cc9d3
  09951445_4b48_a4ba_41ac_19b9cffd35ba["__init__()"]
  5690aac6_57db_e54e_c8e1_26c4d7669bfe -->|method| 09951445_4b48_a4ba_41ac_19b9cffd35ba
  70c5a5d3_a55a_3a49_4d0c_0b5e4e980559["visit_Name()"]
  5690aac6_57db_e54e_c8e1_26c4d7669bfe -->|method| 70c5a5d3_a55a_3a49_4d0c_0b5e4e980559
  fde09d3c_ec2d_8141_f314_c5f0810ab34f["visit_Attribute()"]
  5690aac6_57db_e54e_c8e1_26c4d7669bfe -->|method| fde09d3c_ec2d_8141_f314_c5f0810ab34f

Relationship Graph

Source Code

libs/core/langchain_core/runnables/utils.py lines 252–301

class NonLocals(ast.NodeVisitor):
    """Get nonlocal variables accessed."""

    def __init__(self) -> None:
        """Create a NonLocals visitor."""
        self.loads: set[str] = set()
        self.stores: set[str] = set()

    @override
    def visit_Name(self, node: ast.Name) -> None:
        """Visit a name node.

        Args:
            node: The node to visit.
        """
        if isinstance(node.ctx, ast.Load):
            self.loads.add(node.id)
        elif isinstance(node.ctx, ast.Store):
            self.stores.add(node.id)

    @override
    def visit_Attribute(self, node: ast.Attribute) -> None:
        """Visit an attribute node.

        Args:
            node: The node to visit.
        """
        if isinstance(node.ctx, ast.Load):
            parent = node.value
            attr_expr = node.attr
            while isinstance(parent, ast.Attribute):
                attr_expr = parent.attr + "." + attr_expr
                parent = parent.value
            if isinstance(parent, ast.Name):
                self.loads.add(parent.id + "." + attr_expr)
                self.loads.discard(parent.id)
            elif isinstance(parent, ast.Call):
                if isinstance(parent.func, ast.Name):
                    self.loads.add(parent.func.id)
                else:
                    parent = parent.func
                    attr_expr = ""
                    while isinstance(parent, ast.Attribute):
                        if attr_expr:
                            attr_expr = parent.attr + "." + attr_expr
                        else:
                            attr_expr = parent.attr
                        parent = parent.value
                    if isinstance(parent, ast.Name):
                        self.loads.add(parent.id + "." + attr_expr)

Frequently Asked Questions

What is the NonLocals class?
NonLocals is a class in the langchain codebase, defined in libs/core/langchain_core/runnables/utils.py.
Where is NonLocals defined?
NonLocals is defined in libs/core/langchain_core/runnables/utils.py at line 252.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free