docs: def get_square_axes_limits(coords, margin=0.05):
      """Return N-dimensional square's limits
  
      ## Arguments
      # 'coords': list of coordinates of poins to be plotted
      # 'margin': margin to be added from boundaries of the square.
      - 'margin' can be negative if one wants to reduce the square size.
  
      ## Example
      if 'coords' was given as [x,y,z],
  
      then the resulting square's limits are given by:
  
      (xlim, ylim, zlim)
  
      where,
  
      xlim == (x_mid - max_width, x_mid + max_width)
      ylim == (y_mid - max_width, y_mid + max_width)
      zlim == (z_mid - max_width, z_mid + max_width)
  
      x_mid = 0.5 * (min(x) + max(x)) (and so on)
  
      max_width = max([x_width, y_width, z_width])
  
      where x_width = 0.5 * (max(x) - min(x)) (and so on)
      """
      #coords = [x,y,z]
      try: coords = [np.array(coord) for coord in coords]
      except: raise Exception("Failed to convert elements of 'coords' into numpy.array")
      lims = [(coord.min(), coord.max()) for coord in coords]
      mids = [0.5 * (lim[0] + lim[1]) for lim in lims]
      widths = [0.5 * (lim[1] - lim[0]) for lim in lims]
      max_width = max(widths)
      max_width += max_width * margin
      ax_lims = tuple((mid - max_width, mid + max_width) for mid in mids)
      #xlim, ylim, zlim = ax_lims
      return ax_lims