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)
Defined In
Source
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