'Registers a new optimizer.
Once an optimizer is registered, we can create an instance of this
optimizer with `create_optimizer` later.
Examples
>>> @mx.optimizer.Optimizer.register
... class MyOptimizer(mx.optimizer.Optimizer):
...     pass
>>> optim = mx.optimizer.Optimizer.create_optimizer(\'MyOptimizer\')
>>> print(type(optim))
<class \'__main__.MyOptimizer\'>'

@staticmethod
def register(klass):

    assert isinstance(klass, type)
    name = klass.__name__.lower()
    if (name in Optimizer.opt_registry):
        logging.warning('WARNING:    New    optimizer    %s.%s    is    overriding    existing    optimizer    %s.%s', klass.__module__, klass.__name__, Optimizer.opt_registry[name].__module__, Optimizer.opt_registry[name].__name__)
    Optimizer.opt_registry[name] = klass
    return klass
