nodes: 0, module; 1, function_definition; 2, function_name:normalize; 3, parameters; 4, block; 5, identifier:self; 6, dictionary_splat_pattern; 7, expression_statement; 8, comment:# FIXME:  should it be performed in place?  if it should; 9, comment:# be, the should there be no return value?; 10, for_statement; 11, return_statement; 12, identifier:kwargs; 13, comment:"""
  		Adjust the offsetvector so that a particular instrument has
  		the desired offset.  All other instruments have their
  		offsets adjusted so that the relative offsets are
  		preserved.  The instrument to noramlize, and the offset one
  		wishes it to have, are provided as a key-word argument.
  		The return value is the time slide dictionary, which is
  		modified in place.
  
  		If more than one key-word argument is provided the keys are
  		sorted and considered in order until a key is found that is
  		in the offset vector.  The offset vector is normalized to
  		that value.  This function is a no-op if no key-word
  		argument is found that applies.
  
  		Example:
  
  		>>> a = offsetvector({"H1": -10, "H2": -10, "L1": -10})
  		>>> a.normalize(L1 = 0)
  		offsetvector({'H2': 0, 'H1': 0, 'L1': 0})
  		>>> a = offsetvector({"H1": -10, "H2": -10})
  		>>> a.normalize(L1 = 0, H2 = 5)
  		offsetvector({'H2': 5, 'H1': 5})
  		"""; 14, pattern_list; 15, call; 16, block; 17, identifier:self; 18, identifier:key; 19, identifier:offset; 20, identifier:sorted; 21, argument_list; 22, if_statement; 23, call; 24, comparison_operator:key in self; 25, block; 26, attribute; 27, argument_list; 28, identifier:key; 29, identifier:self; 30, expression_statement; 31, for_statement; 32, break_statement; 33, identifier:kwargs; 34, identifier:items; 35, assignment; 36, identifier:key; 37, call; 38, block; 39, identifier:delta; 40, binary_operator:offset - self[key]; 41, attribute; 42, argument_list; 43, expression_statement; 44, identifier:offset; 45, subscript; 46, identifier:self; 47, identifier:keys; 48, augmented_assignment; 49, identifier:self; 50, identifier:key; 51, subscript; 52, identifier:delta; 53, identifier:self; 54, identifier:key
code: def normalize(self, **kwargs):
  		"""
  		Adjust the offsetvector so that a particular instrument has
  		the desired offset.  All other instruments have their
  		offsets adjusted so that the relative offsets are
  		preserved.  The instrument to noramlize, and the offset one
  		wishes it to have, are provided as a key-word argument.
  		The return value is the time slide dictionary, which is
  		modified in place.
  
  		If more than one key-word argument is provided the keys are
  		sorted and considered in order until a key is found that is
  		in the offset vector.  The offset vector is normalized to
  		that value.  This function is a no-op if no key-word
  		argument is found that applies.
  
  		Example:
  
  		>>> a = offsetvector({"H1": -10, "H2": -10, "L1": -10})
  		>>> a.normalize(L1 = 0)
  		offsetvector({'H2': 0, 'H1': 0, 'L1': 0})
  		>>> a = offsetvector({"H1": -10, "H2": -10})
  		>>> a.normalize(L1 = 0, H2 = 5)
  		offsetvector({'H2': 5, 'H1': 5})
  		"""
  		# FIXME:  should it be performed in place?  if it should
  		# be, the should there be no return value?
  		for key, offset in sorted(kwargs.items()):
  			if key in self:
  				delta = offset - self[key]
  				for key in self.keys():
  					self[key] += delta
  				break
  		return self