("CONSERVATIVE").
  Returns:
     name of the operator as inferred from the schema.

  Example::
     >>> my_lib = Library("foo", "DEF")
     >>> my_lib.define("sum(Tensor self) -> Tensor")

impl(op_name, fn, dispatch_key='')
  Registers the function implementation for an operator defined in
  the library.

  Parameters:
     * **op_name** -- operator name (along with the overload) or
       OpOverload object.

     * **fn** -- function that's the operator implementation for
       the input dispatch key.

     * **dispatch_key** -- dispatch key that the input function
       should be registered for. By default, it uses the dispatch
       key that the library was created with.

  Example::
     >>> my_lib = Library("aten", "IMPL")
     >>> def div_cpu(self, other):
     >>>     return self * (1 / other)
     >>> my_lib.impl("div.Tensor", "CPU")

We have also added some function decorators to make it convenient to