docs: def newPacker(mode=PackingMode.Offline, 
           bin_algo=PackingBin.BBF, 
          pack_algo=MaxRectsBssf,
          sort_algo=SORT_AREA, 
          rotation=True):
      """
      Packer factory helper function
  
      Arguments:
          mode (PackingMode): Packing mode
              Online: Rectangles are packed as soon are they are added
              Offline: Rectangles aren't packed untils pack() is called
          bin_algo (PackingBin): Bin selection heuristic
          pack_algo (PackingAlgorithm): Algorithm used
          rotation (boolean): Enable or disable rectangle rotation. 
  
      Returns:
          Packer: Initialized packer instance.
      """
      packer_class = None
  
      # Online Mode
      if mode == PackingMode.Online:
          sort_algo=None
          if bin_algo == PackingBin.BNF:
              packer_class = PackerOnlineBNF
          elif bin_algo == PackingBin.BFF:
              packer_class = PackerOnlineBFF
          elif bin_algo == PackingBin.BBF:
              packer_class = PackerOnlineBBF
          else:
              raise AttributeError("Unsupported bin selection heuristic")
  
      # Offline Mode
      elif mode == PackingMode.Offline:
          if bin_algo == PackingBin.BNF:
              packer_class = PackerBNF
          elif bin_algo == PackingBin.BFF:
              packer_class = PackerBFF
          elif bin_algo == PackingBin.BBF:
              packer_class = PackerBBF
          elif bin_algo == PackingBin.Global:
              packer_class = PackerGlobal
              sort_algo=None
          else:
              raise AttributeError("Unsupported bin selection heuristic")
  
      else:
          raise AttributeError("Unknown packing mode.")
  
      if sort_algo:
          return packer_class(pack_algo=pack_algo, sort_algo=sort_algo, 
              rotation=rotation)
      else:
          return packer_class(pack_algo=pack_algo, rotation=rotation)