class_docstr: This represents the origin of some object in some string.
  
  For example, if we have an object ``x1_obj`` that was produced by parsing
  the ``x1`` in the formula ``"y ~ x1:x2"``, then we conventionally keep
  track of that relationship by doing::
  
    x1_obj.origin = Origin("y ~ x1:x2", 4, 6)
  
  Then later if we run into a problem, we can do::
  
    raise PatsyError("invalid factor", x1_obj)
  
  and we'll produce a nice error message like::
  
    PatsyError: invalid factor
        y ~ x1:x2
            ^^
  
  Origins are compared by value, and hashable.
class_docstr_tok: ["This","represents","the","origin","of","some","object","in","some","string",".","For","example",",","if","we","have","an","object","``","x1_obj","``","that","was","produced","by","parsing","the","``","x1","``","in","the","formula","``","``","y","~","x1",":","x2","''","``",",","then","we","conventionally","keep","track","of","that","relationship","by","doing",":",":","x1_obj.origin","=","Origin","(","``","y","~","x1",":","x2","''",",","4",",","6",")","Then","later","if","we","run","into","a","problem",",","we","can","do",":",":","raise","PatsyError","(","``","invalid","factor","''",",","x1_obj",")","and","we","'ll","produce","a","nice","error","message","like",":",":","PatsyError",":","invalid","factor","y","~","x1",":","x2","^^","Origins","are","compared","by","value",",","and","hashable","."]
code: def __hash__(self):
      return hash((Origin, self.code, self.start, self.end))
  
file_path: patsy/patsy/origin.py
label_desc: Use image node_id 6 for calling the Origin obj's underlying member method code with example usage: obj.__hash__() and returns: hash