The following works for me
import dolfin
import sympy
from sympy import symbols, atan2, sqrt, pi, log, sin, cos, Matrix
def calculate_displacements():
# Definir símbolos
x, y = symbols('x[0] x[1]')
# Definir r en términos de x e y
r_expr = sqrt(x**2 + y**2)
# Definir theta en términos de x e y
theta_expr = atan2(y, x)
# Definir expresiones analíticas
gr = 1
a_expr = cos(theta_expr)
b_expr = -sin(theta_expr)
c_expr = sin(theta_expr)
d_expr = cos(theta_expr)
u_r_expr = -1/2*cos(theta_expr)-gr*r_expr/(4*pi)*(-1+2*log(r_expr)+cos(2*theta_expr)*(1+2*log(r_expr))+2*(pi-theta_expr)*sin(2*theta_expr))
u_theta_expr = 1/2*sin(theta_expr)+gr*r_expr/(4*pi)*(2*(theta_expr-pi)*(2-2*cos(2*theta_expr))-(1+2*log(r_expr))*sin(2*theta_expr))
# Definir las matrices con expresiones
matriz_2x2 = Matrix([[a_expr, b_expr], [c_expr, d_expr]])
matriz_2x1 = Matrix([u_r_expr, u_theta_expr])
# Realizar la multiplicación de matrices con expresiones
displacements = matriz_2x2 * matriz_2x1
return displacements
disp = calculate_displacements()
disp_ccode = [sympy.printing.ccode(disp[i]).replace("log", "std::log") for i in (0, 1)]
disp_x0 = dolfin.Expression(disp_ccode[0], degree=1)
disp_x1 = dolfin.Expression(disp_ccode[1], degree=1)