[docs]classRemoteContext(Tracer):send:Optional[Callable]=Nonereceive:Optional[Callable]=None@classmethoddefset(cls,send:Callable,receive:Callable):cls.send=sendcls.receive=receive@classmethoddeffrom_local(cls,local_node:NodeType):local_node.target=RemoteContextgraph:GraphType=local_node.args[0]start=graph[0].indexend=graph[-1].indexuploads=[]# TODO check for swap and errorfornodeingraph.nodes[start:end+1]:fordependencyinnode.dependencies:if(isinstance(dependency.target,type)andissubclass(dependency.target,EntryPoint))ordependency.index<start:local_node.args.append(dependency)ifisinstance(node.target,type)andissubclass(node.target,EntryPoint):continuenode.args.clear()node.kwargs.clear()node.target=NoopProtocolforlistenerinnode.listeners:iflistener.index>end:uploads.append(node.index)iflen(uploads)>0:local_node.kwargs["upload"]=Truereturnuploads@classmethoddefexecute(cls,node:NodeType):graph,*dependencies=node.argsdependencies={dependency.index:dependency.valuefordependencyindependencies}cls.send((node.index,dependencies))super().execute(node)ifnode.kwargs.get("upload",False):values=cls.receive()forindex,valueinvalues.items():graph.nodes[index]._value=value