docs: def add_library(self, library):
          """
          Adds functions from a library module
          :param library: the library module
          :return:
          """
          for fn in library.__dict__.copy().values():
              # ignore imported methods and anything beginning __
              if inspect.isfunction(fn) and inspect.getmodule(fn) == library and not fn.__name__.startswith('__'):
                  name = fn.__name__.lower()
  
                  # strip preceding _ chars used to avoid conflicts with Java keywords
                  if name.startswith('_'):
                      name = name[1:]
  
                  self._functions[name] = fn