docs: def set_isotopic_ratio(self, compound='', element='', list_ratio=[]):
          """defines the new set of ratio of the compound/element and trigger the calculation to update the density
  
          Parameters:
          ===========
          compound: string (default is ''). Name of compound
          element: string (default is ''). Name of element
          list_ratio: list (default is []). list of new stoichiometric_ratio
  
          Raises:
          =======
          ValueError if compound does not exist
          ValueError if element does not exist
          ValueError if list_ratio does not have the right format
          """
          _stack = self.stack
  
          list_compounds = _stack.keys()
          if compound not in _stack.keys():
              list_compounds_joined = ', '.join(list_compounds)
              raise ValueError("Compound '{}' could not be find in {}".format(compound, list_compounds_joined))
  
          if element == '':
              # we assume that the element and compounds names matched
              element = compound
          list_element = _stack[compound].keys()
          if element not in list_element:
              list_element_joined = ', '.join(list_element)
              raise ValueError("Element '{}' should be any of those elements: {}".format(element, list_element_joined))
  
          old_list_ratio = _stack[compound][element]['isotopes']['list']
          if not (len(old_list_ratio) == len(list_ratio)):
              raise ValueError("New list of ratio ({} elements) does not match old list size ({} elements!".format(len(
                  list_ratio), len(old_list_ratio)))
  
          self.stack[compound][element]['isotopes']['isotopic_ratio'] = list_ratio
          self.__update_molar_mass(compound=compound, element=element)
          self.__update_density(compound=compound, element=element)
  
          # update entire stack
          self.__math_on_stack()