diff --git a/hysop/backend/device/codegen/base/variables.py b/hysop/backend/device/codegen/base/variables.py
index cdcf6e586face2875622d63ee34c86216bfe9d1d..2bd543e648981a4bf9c4a7c1895091d428a68784 100644
--- a/hysop/backend/device/codegen/base/variables.py
+++ b/hysop/backend/device/codegen/base/variables.py
@@ -77,7 +77,7 @@ def dtype_to_ctype(dtype):
     from hysop.tools.numerics import get_dtype
     dtype = get_dtype(dtype)
     if dtype not in _dtype_to_ctype.keys():
-        msg='Unknown dtype {}.'.format(dtype)
+        msg=f'Unknown dtype {dtype}.'
         raise ValueError(msg)
     else:
         return _dtype_to_ctype[dtype]
@@ -93,7 +93,7 @@ def register_ctype_dtype(ctype,dtype):
     if ctype not in _ctype_to_dtype.keys():
         _ctype_to_dtype[ctype] = dtype
 
-class CodegenVariable(object):
+class CodegenVariable:
 
     def __init__(self, name, ctype, typegen,
             storage=None, const=False, volatile=False, static=False,
@@ -280,7 +280,7 @@ class CodegenVariable(object):
             ptr_volatile = self.ptr_volatile + ptr_volatile
             ptr_restrict = self.ptr_restrict + ptr_restrict
         if with_init:
-            init = '&{}'.format(self.name)
+            init = f'&{self.name}'
         else:
             init = None
         return self.newvar(name=name, ptr=ptr_level,
@@ -309,7 +309,7 @@ class CodegenVariable(object):
         const |= (storage is not None) and ('__constant' in storage)
 
         base_ctype = '{storage}${static}${const}${volatile}${ctype}'.format(
-                storage='{} '.format(storage) if (storage is not None) else '',
+                storage=f'{storage} ' if (storage is not None) else '',
                 static='static ' if static else '',
                 const='const ' if const else '',
                 volatile='volatile ' if volatile else '',
@@ -346,12 +346,12 @@ class CodegenVariable(object):
             base_ctype = self.base_ctype(storage,ctype,const,volatile,impl,align,
                     add_impl_const=add_impl_const, **kwds)
             if len(base_ctype)==0:
-                msg= 'Failed to get base ctype in {}.'.format(self.__class__)
+                msg= f'Failed to get base ctype in {self.__class__}.'
                 raise RuntimeError(msg)
 
         ptr_ctype = self.ptr_ctype(impl=impl, add_impl_const=add_impl_const, cast=cast)
 
-        full_ctype = '{}{}'.format(base_ctype, ptr_ctype)
+        full_ctype = f'{base_ctype}{ptr_ctype}'
         if not align:
             full_ctype = full_ctype.replace('$', '')
         else:
@@ -381,7 +381,7 @@ class CodegenVariable(object):
             return
         self.symbolic_mode = force
     def set_value(self, val):
-        assert not self.known(), 'Value was already set in variable {}!'.format(self.name)
+        assert not self.known(), f'Value was already set in variable {self.name}!'
         self.value = val
 
     def sval(self, symbolic=None):
@@ -419,7 +419,7 @@ class CodegenVariable(object):
         align = first_not_None(align, self.align, False)
         ctype = self.full_ctype(align=align,multidecl=multidecl,add_impl_const=const, const=_const, **kwds)
         if (not multidecl) and len(ctype)==0:
-            msg= 'Failed to get full ctype in {}.'.format(self.__class__)
+            msg= f'Failed to get full ctype in {self.__class__}.'
             raise RuntimeError(msg)
 
         # static array ctype needs to be split
@@ -432,22 +432,22 @@ class CodegenVariable(object):
         else:
             init = init if (init is not None) else self.init
         if (len(ctype)>0) and ctype[-1]=='*':
-            code = '{}${}'.format(ctype, name)
+            code = f'{ctype}${name}'
         else:
-            code = '{} ${}'.format(ctype, name)
+            code = f'{ctype} ${name}'
 
         if (init is not None):
             if compact:
-                code = '{}={}'.format(code, init)
+                code = f'{code}={init}'
             else:
-                code = '{} $= {}'.format(code, init)
+                code = f'{code} $= {init}'
         elif self.known():
             self.force_symbolic(False)
             sval = self.sval()
             if compact:
-                code = '{}={}'.format(code,sval)
+                code = f'{code}={sval}'
             else:
-                code = '{} $= {}'.format(code,sval)
+                code = f'{code} $= {sval}'
 
         if not multidecl:
             code+=';'
@@ -488,17 +488,17 @@ class CodegenVariable(object):
 
     def __getitem__(self,ss):
         if self.is_ptr:
-            return '{}[{}]'.format(self.name,ss)
+            return f'{self.name}[{ss}]'
         elif ss==0:
             return self.__call__()
         else:
-            assert self.is_ptr, '{} is not a pointer!'.format(self.name)
+            assert self.is_ptr, f'{self.name} is not a pointer!'
 
     def __repr__(self):
         if self.is_symbolic():
-            return '{}({})'.format(self.name,self.ctype)
+            return f'{self.name}({self.ctype})'
         else:
-            return '{}({},{})'.format(self.name,self.ctype,self.value)
+            return f'{self.name}({self.ctype},{self.value})'
 
     def __call__(self):
         return self.sval()
@@ -535,7 +535,7 @@ class CodegenArray(CodegenVariable):
             _value  = [None]*s0
             _svalue = [None]*s0
             for d in range(s0):
-                _name   = '{}_{}'.format(name, d)
+                _name   = f'{name}_{d}'
                 dvalue  = value[d]
                 dsvalue = svalue[d]
                 val, sval = CodegenArray._initialize_rec(_name, typegen,
@@ -628,7 +628,7 @@ class CodegenArray(CodegenVariable):
                     ptr_level, ptr_restrict, ptr_const, ptr_volatile,
                     symbolic_mode)
 
-        super(CodegenArray, self).__init__(name=name,
+        super().__init__(name=name,
                 storage=storage, ctype=ctype, typegen=typegen,
                 value=_value, svalue=_svalue,
                 const=const, add_impl_const=add_impl_const, volatile=volatile,
@@ -639,9 +639,9 @@ class CodegenArray(CodegenVariable):
 
     def decl_name(self):
         if self.shape is not None:
-            static_array = ['[{}]'.format(val) for val in self.shape]
+            static_array = [f'[{val}]' for val in self.shape]
         elif self.sshape is not None:
-            static_array = ['[{}]'.format(val) for val in self.sshape]
+            static_array = [f'[{val}]' for val in self.sshape]
         else:
             static_array = []
         return '{}{}'.format(self.name, ''.join(static_array))
@@ -687,7 +687,7 @@ class CodegenVector(CodegenVariable):
             add_impl_const=False, nl=None,
             symbolic_mode=False, struct_var=None,
             init=None):
-        super(CodegenVector,self).__init__(name=name,ctype=ctype,value=value,typegen=typegen,
+        super().__init__(name=name,ctype=ctype,value=value,typegen=typegen,
                 const=const, volatile=volatile, add_impl_const=add_impl_const,
                 storage=storage, nl=nl,
                 ptr=ptr, ptr_const=ptr_const, ptr_volatile=ptr_volatile, ptr_restrict=ptr_restrict,
@@ -710,7 +710,7 @@ class CodegenVector(CodegenVariable):
         if i is not None:
             assert i<self.dim
             if self.is_symbolic():
-                return '{}{}[{}]'.format(self.access_prefix(False),self.name,i)
+                return f'{self.access_prefix(False)}{self.name}[{i}]'
             else:
                 return self.svalue[i]
         else:
@@ -725,10 +725,10 @@ class CodegenVector(CodegenVariable):
 
     def __repr__(self):
         if self.is_symbolic():
-            return '{}({})'.format(self.name,self.ctype)
+            return f'{self.name}({self.ctype})'
         else:
             vals = '['+','.join(self.svalue)+']'
-            return '{}({},{})'.format(self.name,self.ctype,vals)
+            return f'{self.name}({self.ctype},{vals})'
 
 
 class CodegenVectorClBuiltin(CodegenVector):
@@ -746,11 +746,11 @@ class CodegenVectorClBuiltin(CodegenVector):
         if (dim > 1):
             ctype = btype+str(dim)
             access_mode = access_mode if access_mode else ('pos' if dim<=4 else 'hex')
-            msg='Wrong vector size {}'.format(dim)
+            msg=f'Wrong vector size {dim}'
             assert dim in typegen.vsizes
-            msg='Invalid basetype {} for vector.'.format(btype)
+            msg=f'Invalid basetype {btype} for vector.'
             assert btype in (typegen.float_base_types + typegen.signed_base_types + typegen.unsigned_base_types), msg
-            msg='Invalid builtin type {}.'.format(ctype)
+            msg=f'Invalid builtin type {ctype}.'
             assert ctype in typegen.builtin_types, ctype
         else:
             # scalar type
@@ -764,7 +764,7 @@ class CodegenVectorClBuiltin(CodegenVector):
             assert value.size == dim
             svalue = [typegen.dump(np.asarray([f],dtype=dtype)[0]) for f in value]
 
-        super(CodegenVectorClBuiltin,self).__init__(name=name,ctype=ctype,dim=dim,typegen=typegen,
+        super().__init__(name=name,ctype=ctype,dim=dim,typegen=typegen,
                 value=value,svalue=svalue, const=const, add_impl_const=add_impl_const,
                 storage=storage, nl=nl, symbolic_mode=symbolic_mode, struct_var=struct_var,
                 init=init)
@@ -774,7 +774,7 @@ class CodegenVectorClBuiltin(CodegenVector):
     def newvar(self, name, btype=None, dim=None, **kwds):
         btype = first_not_None(btype, self.btype)
         dim = first_not_None(dim, self.dim)
-        return super(CodegenVectorClBuiltin, self).newvar(name=name, btype=btype, dim=dim,
+        return super().newvar(name=name, btype=btype, dim=dim,
                 **kwds)
 
     def view(self, name, components, const=False):
@@ -786,7 +786,7 @@ class CodegenVectorClBuiltin(CodegenVector):
             it = tuple(range(self.dim))
             dim = self.dim
         else:
-            raise ValueError('Unknown components type {}.'.format(components.__class__.__name__))
+            raise ValueError(f'Unknown components type {components.__class__.__name__}.')
 
         if dim>self.dim:
             raise ValueError('Dimension of view is greater than original vector!')
@@ -813,7 +813,7 @@ class CodegenVectorClBuiltin(CodegenVector):
 
         if (self.value != value).any():
             if self.known():
-                msg='Value was already set in variable {}!'.format(self.name)
+                msg=f'Value was already set in variable {self.name}!'
                 raise RuntimeError(msg)
             self.value = value
 
@@ -865,21 +865,21 @@ class CodegenVectorClBuiltin(CodegenVector):
             if key<0:
                 key += dim
             if key<0 or key>=dim:
-                raise IndexError("The index {} is out of range.".format(key))
+                raise IndexError(f"The index {key} is out of range.")
             return self.sval(key)
         else:
-            msg='Invalid key type {}!'.format(type(key))
+            msg=f'Invalid key type {type(key)}!'
             raise TypeError(msg)
 
     def declare(self, codegen=None, init=None, **kargs):
         init = first_not_None(init, self.init)
         if isinstance(init, int):
             init = ','.join([self.typegen.dump(init) for _ in range(self.dim)])
-            init = '({})({})'.format(self.ctype,init)
+            init = f'({self.ctype})({init})'
         elif init.__class__ in [list,tuple,np.ndarray]:
             init = ','.join([self.typegen.dump(init[i]) for i in range(self.dim)])
-            init = '({})({})'.format(self.ctype,init)
-        return super(CodegenVectorClBuiltin,self).declare(init=init, codegen=codegen, **kargs)
+            init = f'({self.ctype})({init})'
+        return super().declare(init=init, codegen=codegen, **kargs)
 
 
 class CodegenVectorClBuiltinFunc(CodegenVectorClBuiltin):
@@ -887,7 +887,7 @@ class CodegenVectorClBuiltinFunc(CodegenVectorClBuiltin):
             value=None,access_mode='pos',
             symbolic_mode=False,
             const=False):
-        super(CodegenVectorClBuiltinFunc,self).__init__(name=name,btype=btype,dim=dim,typegen=typegen,
+        super().__init__(name=name,btype=btype,dim=dim,typegen=typegen,
                 value=value,access_mode=access_mode,const=const,symbolic_mode=symbolic_mode)
         self.fname = fname
 
@@ -897,14 +897,14 @@ class CodegenVectorClBuiltinFunc(CodegenVectorClBuiltin):
             return '({})({})'.format(self.ctype, ','.join(value))
         else:
             assert i<self.dim
-            return 'get_{}({})'.format(self.fname,i)
+            return f'get_{self.fname}({i})'
 
     def declare(self, codegen=None, init=None, **kargs):
         if init is False:
             init = None
         else:
             init = self.fval() if not self.known() else init
-        return super(CodegenVectorClBuiltinFunc,self).declare(init=init, codegen=codegen, **kargs)
+        return super().declare(init=init, codegen=codegen, **kargs)
 
 class CodegenStruct(CodegenVariable):
     def __init__(self, name, struct,
@@ -916,7 +916,7 @@ class CodegenStruct(CodegenVariable):
                     value=None,
                     var_overrides=None):
 
-        super(CodegenStruct,self).__init__(
+        super().__init__(
                 name=name,
                 ctype=struct.ctype,
                 typegen=struct.typegen,
@@ -933,12 +933,12 @@ class CodegenStruct(CodegenVariable):
 
     def newvar(self, *args, **kwds):
         kwds.setdefault('cls', CodegenVariable)
-        return super(CodegenStruct, self).newvar(*args, **kwds)
+        return super().newvar(*args, **kwds)
 
     def force_symbolic(self, force=True):
         if force is None:
             return
-        super(CodegenStruct,self).force_symbolic(force)
+        super().force_symbolic(force)
         for k,var in self.vars.items():
             var.force_symbolic(force)
 
@@ -992,7 +992,7 @@ class CodegenStruct(CodegenVariable):
                         if fieldname in var_overrides.keys():
                             pass
                         elif (fieldname not in self.value.keys()):
-                            raise ValueError('Value was given but field {} is not present.'.format(fieldname))
+                            raise ValueError(f'Value was given but field {fieldname} is not present.')
                         else:
                             field_value = self.value[fieldname]
                     else:
@@ -1027,7 +1027,7 @@ class CodegenStruct(CodegenVariable):
 
                     decl = var()
                     decl = decl.replace('\n', '\n\t')
-                    sval = '.{} $= {}'.format(fieldname,decl)
+                    sval = f'.{fieldname} $= {decl}'
                     svalue.append(sval)
 
                     var.force_symbolic(self.symbolic_mode)