<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _AddArtifactNodesAndEdges(self, artifact_names):
 """Add the artifact nodes to the graph. For every artifact that has to be collected, add a node to the dependency graph. The edges represent the dependencies. An artifact has outgoing edges to the attributes it provides and incoming edges from attributes it depends on. Initially, only artifacts without incoming edges are reachable. An artifact becomes reachable if all of its dependencies are reachable. Args: artifact_names: List of names of the artifacts to collect. """

    for artifact_name in artifact_names:
      self.graph[artifact_name] = self.Node(is_artifact=True)
      rdf_artifact = artifact_registry.REGISTRY.GetArtifact(artifact_name)
      self._AddDependencyEdges(rdf_artifact)
      self._AddProvidesEdges(rdf_artifact)