decide if this decorator was called with arguments (eg, @dec(...)) or
        without (eg, @dec) so we can take the correct path when the decorator is
        invoked

        for the most part this works except for the case where you have one callback
        or class as the only passed in method to the decorator (eg, @dec(lambda x: x)),
        you can get around it by using named arguments (eg, @dec(callback=lambda x: x))
        or by setting required_args class property to True in your child decorator,
        otherwise this will try and autodiscover and have to recover when the
        decorator is actually invoked. I wracked my brain trying to figure out a
        better way to do this and I couldn't come up with anything and after the
        hours I've spent on it I'm just not sure there is a way to really know

        :param *args: any positional values passed into __new__ or __call__
        :param **kwargs: any named values passed into __new__ or __call__
        :returns: boolean

def is_wrapped_arg(self, *args, **kwargs):
        """decide if this decorator was called with arguments (eg, @dec(...)) or
        without (eg, @dec) so we can take the correct path when the decorator is
        invoked

        for the most part this works except for the case where you have one callback
        or class as the only passed in method to the decorator (eg, @dec(lambda x: x)),
        you can get around it by using named arguments (eg, @dec(callback=lambda x: x))
        or by setting required_args class property to True in your child decorator,
        otherwise this will try and autodiscover and have to recover when the
        decorator is actually invoked. I wracked my brain trying to figure out a
        better way to do this and I couldn't come up with anything and after the
        hours I've spent on it I'm just not sure there is a way to really know

        :param *args: any positional values passed into __new__ or __call__
        :param **kwargs: any named values passed into __new__ or __call__
        :returns: boolean
        """
        ret = False
        if len(args) == 1 and len(kwargs) == 0:
            #pout.v(args, self, isinstance(args[0], type), isinstance(args[0], FuncDecorator))
            ret = inspect.isfunction(args[0]) \
                or isinstance(args[0], type) \
                or isinstance(args[0], Decorator)
            if ret:
                ret = not self.required_args
#                 if ret:
#                     frames = inspect.getouterframes(inspect.currentframe())
#                     if len(frames) >= 3:
#                         dec_frame = frames[2]
#                         lines = "".join(dec_frame[4]).strip()
#                         # we have 3 possibilities here:
#                         # 1) @dec
#                         # 2) @dec(...)
#                         # 3) something else
#                         # this will return True for 1 and 3
#                         if re.match(r"^@", lines):
#                             ret = "(" not in lines

        return ret