class_docstr: This is an abstract class aimed to ease the use of symmetric algorithms.
  
  A symmetric algorithm is an algorithm that can be based on users or on
  items indifferently, e.g. all the algorithms in this module.
  
  When the algo is user-based x denotes a user and y an item. Else, it's
  reversed.
class_docstr_tok: ["This","is","an","abstract","class","aimed","to","ease","the","use","of","symmetric","algorithms",".","A","symmetric","algorithm","is","an","algorithm","that","can","be","based","on","users","or","on","items","indifferently",",","e.g",".","all","the","algorithms","in","this","module",".","When","the","algo","is","user-based","x","denotes","a","user","and","y","an","item",".","Else",",","it's","reversed","."]
docstr: Return x_stuff and y_stuff depending on the user_based field.
docstr_tok: ["Return","x_stuff","and","y_stuff","depending","on","the","user_based","field","."]
code: def switch(self, u_stuff, i_stuff):
      """Return x_stuff and y_stuff depending on the user_based field."""
  
      if self.sim_options["user_based"]:
          return u_stuff, i_stuff
      else:
          return i_stuff, u_stuff
  
imports: import heapq
  import numpy
  from .algo_base import AlgoBase
  from .predictions import PredictionImpossible
label_desc: Use image node_id 3 for calling the SymmetricAlgo obj's underlying member method code with example usage: obj.switch(u_stuff, i_stuff) and returns: u_stuff,  i_stuff, i_stuff,  u_stuff