class_docstr: Class to wrap general DICOM files
  
  Methods:
  
  * get_data()
  * get_pixel_array()
  * is_same_series(other)
  * __getitem__ : return attributes from `dcm_data`
  * get(key[, default]) - as usual given __getitem__ above
  
  Attributes and things that look like attributes:
  
  * affine : (4, 4) array
  * dcm_data : object
  * image_shape : tuple
  * image_orient_patient : (3,2) array
  * slice_normal : (3,) array
  * rotation_matrix : (3,3) array
  * voxel_sizes : tuple length 3
  * image_position : sequence length 3
  * slice_indicator : float
  * series_signature : tuple
docstr: Return True if `other` appears to be in same series
  
  Parameters
  ----------
  other : object
     object with ``series_signature`` attribute that is a
     mapping.  Usually it's a ``Wrapper`` or sub-class instance.
  
  Returns
  -------
  tf : bool
     True if `other` might be in the same series as `self`, False
     otherwise.
docstr_tok: ["Return","True","if","`","other","`","appears","to","be","in","same","series","Parameters","--","--","--","--","--","other",":","object","object","with","``","series_signature","``","attribute","that","is","a","mapping",".","Usually","it","'s","a","``","Wrapper","``","or","sub-class","instance",".","Returns","--","--","--","-","tf",":","bool","True","if","`","other","`","might","be","in","the","same","series","as","`","self","`",",","False","otherwise","."]
code: def is_same_series(self, other):
      """Return True if `other` appears to be in same series
  
      Parameters
      ----------
      other : object
         object with ``series_signature`` attribute that is a
         mapping.  Usually it's a ``Wrapper`` or sub-class instance.
  
      Returns
      -------
      tf : bool
         True if `other` might be in the same series as `self`, False
         otherwise.
      """
      # compare signature dictionaries.  The dictionaries each contain
      # comparison rules, we prefer our own when we have them.  If a
      # key is not present in either dictionary, assume the value is
      # None.
      my_sig = self.series_signature
      your_sig = other.series_signature
      my_keys = set(my_sig)
      your_keys = set(your_sig)
      # we have values in both signatures
      for key in my_keys.intersection(your_keys):
          v1, func = my_sig[key]
          v2, _ = your_sig[key]
          if not func(v1, v2):
              return False
      # values present in one or the other but not both
      for keys, sig in (
          (my_keys - your_keys, my_sig),
          (your_keys - my_keys, your_sig),
      ):
          for key in keys:
              v1, func = sig[key]
              if not func(v1, None):
                  return False
      return True
  
imports: import operator
  import warnings
  import numpy
  from nibabel.optpkg import optional_package
  from ..onetime import auto_attr
  from ..openers import ImageOpener
  from .None import csareader
  from .dwiparams import B2q, nearest_pos_semi_def, q2bg
label_desc: Use image node_id 16 for calling the Wrapper obj's underlying member method code with example usage: obj.is_same_series(other) and returns: True, False, False