code: def add_tween(self, obj, duration = None, easing = None, on_complete = None,
                    on_update = None, round = False, delay = None, **kwargs):
          
          if duration is None:
              duration = self.default_duration
  
          easing = easing or self.default_easing
  
          tw = Tween(obj, duration, delay, easing, on_complete, on_update, round, **kwargs )
  
          if obj in self.current_tweens:
              for current_tween in tuple(self.current_tweens[obj]):
                  prev_keys = set((key for (key, tweenable) in current_tween.tweenables))
                  dif = prev_keys & set(kwargs.keys())
  
                  for key, tweenable in tuple(current_tween.tweenables):
                      if key in dif:
                          current_tween.tweenables.remove((key, tweenable))
  
                  if not current_tween.tweenables:
                      current_tween.finish()
                      self.current_tweens[obj].remove(current_tween)
  
  
          self.current_tweens[obj].add(tw)
          return tw
docs: Add tween for the object to go from current values to set ones.
              Example: add_tween(sprite, x = 500, y = 200, duration = 0.4)
              This will move the sprite to coordinates (500, 200) in 0.4 seconds.
              For parameter "easing" you can use one of the pytweener.Easing
              functions, or specify your own.
              The tweener can handle numbers, dates and color strings in hex ("#ffffff").
              This function performs overwrite style conflict solving - in case
              if a previous tween operates on same attributes, the attributes in
              question are removed from that tween.