| f | from functools import wraps | f | from functools import wraps | 
            |  |  |  |  | 
            |  | class Fix: |  | class Fix: | 
            |  |  |  |  | 
            |  | def __init__(self, n): |  | def __init__(self, n): | 
            |  | self.n = n |  | self.n = n | 
            |  |  |  |  | 
            |  | def __call__(self, func): |  | def __call__(self, func): | 
            |  |  |  |  | 
            |  | @wraps(func) |  | @wraps(func) | 
            |  | def wrapper(*args, **kwargs): |  | def wrapper(*args, **kwargs): | 
            | n | rounded_args = [] | n | converted_args = [] | 
            |  | for arg in args: |  | for arg in args: | 
            |  | if isinstance(arg, float): |  | if isinstance(arg, float): | 
            | n | rounded_args.append(round(arg, self.n)) | n | converted_args.append(round(arg, self.n)) | 
            |  | else: |  | else: | 
            | n | rounded_args.append(arg) | n | converted_args.append(arg) | 
            |  | rounded_kwargs = {} |  | converted_kwargs = {} | 
            |  | for k, v in kwargs.items(): |  | for k, v in kwargs.items(): | 
            |  | if isinstance(v, float): |  | if isinstance(v, float): | 
            | n | rounded_kwargs[k] = round(v, self.n) | n | converted_kwargs[k] = round(v, self.n) | 
            |  | else: |  | else: | 
            | t | rounded_kwargs[k] = v | t | converted_kwargs[k] = v | 
            |  | result = func(*rounded_args, **rounded_kwargs) |  | out = func(*converted_args, **converted_kwargs) | 
            |  | if isinstance(result, float): |  | if isinstance(out, float): | 
            |  | return round(result, self.n) |  | out = round(out, self.n) | 
            |  | else: |  |  | 
            |  | return result |  | return out | 
            |  | return wrapper |  | return wrapper |