code: def mark_assignment(self, lhs, rhs, inplace_op=None):
      if isinstance(lhs, (ExprNodes.NameNode, Nodes.PyArgDeclNode)):
          if lhs.entry is None:
              # TODO: This shouldn't happen...
              return
  
          if self.parallel_block_stack:
              parallel_node = self.parallel_block_stack[-1]
              previous_assignment = parallel_node.assignments.get(
                  lhs.entry
              )
  
              # If there was a previous assignment to the variable, keep the
              # previous assignment position
              if previous_assignment:
                  pos, previous_inplace_op = previous_assignment
  
                  if (
                      inplace_op
                      and previous_inplace_op
                      and inplace_op != previous_inplace_op
                  ):
                      # x += y; x *= y
                      t = (inplace_op, previous_inplace_op)
                      error(
                          lhs.pos,
                          "Reduction operator '%s' is inconsistent "
                          "with previous reduction operator '%s'" % t,
                      )
              else:
                  pos = lhs.pos
  
              parallel_node.assignments[lhs.entry] = (pos, inplace_op)
              parallel_node.assigned_nodes.append(lhs)
  
      elif isinstance(lhs, ExprNodes.SequenceNode):
          for i, arg in enumerate(lhs.args):
              if not rhs or arg.is_starred:
                  item_node = None
              else:
                  item_node = rhs.inferable_item_node(i)
              self.mark_assignment(arg, item_node)
      else:
          # Could use this info to infer cdef class attributes...
          pass
  
imports: from __future__ import absolute_import
  from .Errors import error, message
  from .None import ExprNodes
  from .None import Nodes
  from .None import Builtin
  from .None import PyrexTypes
  from ..None import Utils
  from .PyrexTypes import py_object_type, unspecified_type
  from .Visitor import CythonTransform, EnvTransform
label_desc: Use image node_id 2 for calling the MarkParallelAssignments obj's underlying member method code with example usage: obj.mark_assignment(lhs, rhs, inplace_op) without return types