class_docstr: Base Sample class to hold the necessary info and provide atomic operations
class_docstr_tok: ["Base","Sample","class","to","hold","the","necessary","info","and","provide","atomic","operations"]
docstr: :param dict data: The dict obj that contains data info.
  :param ~textflint.sample origin: original sample obj.
  :param int sample_id: sampleindex
docstr_tok: [":","param","dict","data",":","The","dict","obj","that","contains","data","info",".",":","param","~textflint.sample","origin",":","original","sample","obj",".",":","param","int","sample_id",":","sampleindex"]
code: def __init__(self, data, origin=None, sample_id=None):
      r"""
      :param dict data: The dict obj that contains data info.
      :param ~textflint.sample origin: original sample obj.
      :param int sample_id: sampleindex
  
      """
      self.origin = origin if origin else self
      self.log = []
      self.check_data(data)
      self.load(data)
      self.sample_id = sample_id
  
imports: import copy
  from abc import ABC, abstractmethod
  from ..field import ListField, TextField
  from ....common.settings import MODIFIED_MASK
  from ....common.preprocess.en_processor import EnProcessor
label_desc: Use image node_id 1 to create a new Sample object from inherited base classes: ABC with example: obj = Sample(data, origin, sample_id)