Spaces:
Running
Running
MilesCranmer
commited on
Merge branch 'master' of https://github.com/DhananjayAshok/PySR into DhananjayAshok-master
Browse files- datasets/FeynmanEquations.csv +101 -0
- pysr/Problems.py +158 -0
- pysr/sr.py +4 -3
datasets/FeynmanEquations.csv
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Filename,datapoints,Number,Output,Formula,# variables,v1_name,v1_low,v1_high,v2_name,v2_low,v2_high,v3_name,v3_low,v3_high,v4_name,v4_low,v4_high,v5_name,v5_low,v5_high,v6_name,v6_low,v6_high,v7_name,v7_low,v7_high,v8_name,v8_low,v8_high,v9_name,v9_low,v9_high,v10_name,v10_low,v10_high
|
2 |
+
I.6.2a,10,1,f,exp(-theta**2/2)/sqrt(2*pi),1,theta,1,3,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
3 |
+
I.6.2,100,2,f,exp(-(theta/sigma)**2/2)/(sqrt(2*pi)*sigma),2,sigma,1,3,theta,1,3,,,,,,,,,,,,,,,,,,,,,,,,
|
4 |
+
I.6.2b,1000,3,f,exp(-((theta-theta1)/sigma)**2/2)/(sqrt(2*pi)*sigma),3,sigma,1,3,theta,1,3,theta1,1,3,,,,,,,,,,,,,,,,,,,,,
|
5 |
+
I.8.14,100,4,d,sqrt((x2-x1)**2+(y2-y1)**2),4,x1,1,5,x2,1,5,y1,1,5,y2,1,5,,,,,,,,,,,,,,,,,,
|
6 |
+
I.9.18,1000000,5,F,G*m1*m2/((x2-x1)**2+(y2-y1)**2+(z2-z1)**2),9,m1,1,2,m2,1,2,G,1,2,x1,3,4,x2,1,2,y1,3,4,y2,1,2,z1,3,4,z2,1,2,,,
|
7 |
+
I.10.7,10,6,m,m_0/sqrt(1-v**2/c**2),3,m_0,1,5,v,1,2,c,3,10,,,,,,,,,,,,,,,,,,,,,
|
8 |
+
I.11.19,100,7,A,x1*y1+x2*y2+x3*y3,6,x1,1,5,x2,1,5,x3,1,5,y1,1,5,y2,1,5,y3,1,5,,,,,,,,,,,,
|
9 |
+
I.12.1,10,8,F,mu*Nn,2,mu,1,5,Nn,1,5,,,,,,,,,,,,,,,,,,,,,,,,
|
10 |
+
I.12.2,10,10,F,q1*q2*r/(4*pi*epsilon*r**3),4,q1,1,5,q2,1,5,epsilon,1,5,r,1,5,,,,,,,,,,,,,,,,,,
|
11 |
+
I.12.4,10,11,Ef,q1*r/(4*pi*epsilon*r**3),3,q1,1,5,epsilon,1,5,r,1,5,,,,,,,,,,,,,,,,,,,,,
|
12 |
+
I.12.5,10,12,F,q2*Ef,2,q2,1,5,Ef,1,5,,,,,,,,,,,,,,,,,,,,,,,,
|
13 |
+
I.12.11,10,13,F,q*(Ef+B*v*sin(theta)),5,q,1,5,Ef,1,5,B,1,5,v,1,5,theta,1,5,,,,,,,,,,,,,,,
|
14 |
+
I.13.4,10,9,K,1/2*m*(v**2+u**2+w**2),4,m,1,5,v,1,5,u,1,5,w,1,5,,,,,,,,,,,,,,,,,,
|
15 |
+
I.13.12,10,14,U,G*m1*m2*(1/r2-1/r1),5,m1,1,5,m2,1,5,r1,1,5,r2,1,5,G,1,5,,,,,,,,,,,,,,,
|
16 |
+
I.14.3,10,15,U,m*g*z,3,m,1,5,g,1,5,z,1,5,,,,,,,,,,,,,,,,,,,,,
|
17 |
+
I.14.4,10,16,U,1/2*k_spring*x**2,2,k_spring,1,5,x,1,5,,,,,,,,,,,,,,,,,,,,,,,,
|
18 |
+
I.15.3x,10,17,x1,(x-u*t)/sqrt(1-u**2/c**2),4,x,5,10,u,1,2,c,3,20,t,1,2,,,,,,,,,,,,,,,,,,
|
19 |
+
I.15.3t,100,18,t1,(t-u*x/c**2)/sqrt(1-u**2/c**2),4,x,1,5,c,3,10,u,1,2,t,1,5,,,,,,,,,,,,,,,,,,
|
20 |
+
I.15.1,10,19,p,m_0*v/sqrt(1-v**2/c**2),3,m_0,1,5,v,1,2,c,3,10,,,,,,,,,,,,,,,,,,,,,
|
21 |
+
I.16.6,10,20,v1,(u+v)/(1+u*v/c**2),3,c,1,5,v,1,5,u,1,5,,,,,,,,,,,,,,,,,,,,,
|
22 |
+
I.18.4,10,21,r,(m1*r1+m2*r2)/(m1+m2),4,m1,1,5,m2,1,5,r1,1,5,r2,1,5,,,,,,,,,,,,,,,,,,
|
23 |
+
I.18.12,10,22,tau,r*F*sin(theta),3,r,1,5,F,1,5,theta,0,5,,,,,,,,,,,,,,,,,,,,,
|
24 |
+
I.18.14,10,23,L,m*r*v*sin(theta),4,m,1,5,r,1,5,v,1,5,theta,1,5,,,,,,,,,,,,,,,,,,
|
25 |
+
I.24.6,10,24,E_n,1/2*m*(omega**2+omega_0**2)*1/2*x**2,4,m,1,3,omega,1,3,omega_0,1,3,x,1,3,,,,,,,,,,,,,,,,,,
|
26 |
+
I.25.13,10,25,Volt,q/C,2,q,1,5,C,1,5,,,,,,,,,,,,,,,,,,,,,,,,
|
27 |
+
I.26.2,100,26,theta1,arcsin(n*sin(theta2)),2,n,0,1,theta2,1,5,,,,,,,,,,,,,,,,,,,,,,,,
|
28 |
+
I.27.6,10,27,foc,1/(1/d1+n/d2),3,d1,1,5,d2,1,5,n,1,5,,,,,,,,,,,,,,,,,,,,,
|
29 |
+
I.29.4,10,28,k,omega/c,2,omega,1,10,c,1,10,,,,,,,,,,,,,,,,,,,,,,,,
|
30 |
+
I.29.16,1000,29,x,sqrt(x1**2+x2**2-2*x1*x2*cos(theta1-theta2)),4,x1,1,5,x2,1,5,theta1,1,5,theta2,1,5,,,,,,,,,,,,,,,,,,
|
31 |
+
I.30.3,100,30,Int,Int_0*sin(n*theta/2)**2/sin(theta/2)**2,3,Int_0,1,5,theta,1,5,n,1,5,,,,,,,,,,,,,,,,,,,,,
|
32 |
+
I.30.5,100,31,theta,arcsin(lambd/(n*d)),3,lambd,1,2,d,2,5,n,1,5,,,,,,,,,,,,,,,,,,,,,
|
33 |
+
I.32.5,10,32,Pwr,q**2*a**2/(6*pi*epsilon*c**3),4,q,1,5,a,1,5,epsilon,1,5,c,1,5,,,,,,,,,,,,,,,,,,
|
34 |
+
I.32.17,10,33,Pwr,(1/2*epsilon*c*Ef**2)*(8*pi*r**2/3)*(omega**4/(omega**2-omega_0**2)**2),6,epsilon,1,2,c,1,2,Ef,1,2,r,1,2,omega,1,2,omega_0,3,5,,,,,,,,,,,,
|
35 |
+
I.34.8,10,34,omega,q*v*B/p,4,q,1,5,v,1,5,B,1,5,p,1,5,,,,,,,,,,,,,,,,,,
|
36 |
+
I.34.1,10,35,omega,omega_0/(1-v/c),3,c,3,10,v,1,2,omega_0,1,5,,,,,,,,,,,,,,,,,,,,,
|
37 |
+
I.34.14,10,36,omega,(1+v/c)/sqrt(1-v**2/c**2)*omega_0,3,c,3,10,v,1,2,omega_0,1,5,,,,,,,,,,,,,,,,,,,,,
|
38 |
+
I.34.27,10,37,E_n,(h/(2*pi))*omega,2,omega,1,5,h,1,5,,,,,,,,,,,,,,,,,,,,,,,,
|
39 |
+
I.37.4,100,38,Int,I1+I2+2*sqrt(I1*I2)*cos(delta),3,I1,1,5,I2,1,5,delta,1,5,,,,,,,,,,,,,,,,,,,,,
|
40 |
+
I.38.12,10,39,r,4*pi*epsilon*(h/(2*pi))**2/(m*q**2),4,m,1,5,q,1,5,h,1,5,epsilon,1,5,,,,,,,,,,,,,,,,,,
|
41 |
+
I.39.1,10,40,E_n,3/2*pr*V,2,pr,1,5,V,1,5,,,,,,,,,,,,,,,,,,,,,,,,
|
42 |
+
I.39.11,10,41,E_n,1/(gamma-1)*pr*V,3,gamma,2,5,pr,1,5,V,1,5,,,,,,,,,,,,,,,,,,,,,
|
43 |
+
I.39.22,10,42,pr,n*kb*T/V,4,n,1,5,T,1,5,V,1,5,kb,1,5,,,,,,,,,,,,,,,,,,
|
44 |
+
I.40.1,10,43,n,n_0*exp(-m*g*x/(kb*T)),6,n_0,1,5,m,1,5,x,1,5,T,1,5,g,1,5,kb,1,5,,,,,,,,,,,,
|
45 |
+
I.41.16,10,44,L_rad,h/(2*pi)*omega**3/(pi**2*c**2*(exp((h/(2*pi))*omega/(kb*T))-1)),5,omega,1,5,T,1,5,h,1,5,kb,1,5,c,1,5,,,,,,,,,,,,,,,
|
46 |
+
I.43.16,10,45,v,mu_drift*q*Volt/d,4,mu_drift,1,5,q,1,5,Volt,1,5,d,1,5,,,,,,,,,,,,,,,,,,
|
47 |
+
I.43.31,10,46,D,mob*kb*T,3,mob,1,5,T,1,5,kb,1,5,,,,,,,,,,,,,,,,,,,,,
|
48 |
+
I.43.43,10,47,kappa,1/(gamma-1)*kb*v/A,4,gamma,2,5,kb,1,5,A,1,5,v,1,5,,,,,,,,,,,,,,,,,,
|
49 |
+
I.44.4,10,48,E_n,n*kb*T*ln(V2/V1),5,n,1,5,kb,1,5,T,1,5,V1,1,5,V2,1,5,,,,,,,,,,,,,,,
|
50 |
+
I.47.23,10,49,c,sqrt(gamma*pr/rho),3,gamma,1,5,pr,1,5,rho,1,5,,,,,,,,,,,,,,,,,,,,,
|
51 |
+
I.48.2,100,50,E_n,m*c**2/sqrt(1-v**2/c**2),3,m,1,5,v,1,2,c,3,10,,,,,,,,,,,,,,,,,,,,,
|
52 |
+
I.50.26,10,51,x,x1*(cos(omega*t)+alpha*cos(omega*t)**2),4,x1,1,3,omega,1,3,t,1,3,alpha,1,3,,,,,,,,,,,,,,,,,,
|
53 |
+
II.2.42,10,52,Pwr,kappa*(T2-T1)*A/d,5,kappa,1,5,T1,1,5,T2,1,5,A,1,5,d,1,5,,,,,,,,,,,,,,,
|
54 |
+
II.3.24,10,53,flux,Pwr/(4*pi*r**2),2,Pwr,1,5,r,1,5,,,,,,,,,,,,,,,,,,,,,,,,
|
55 |
+
II.4.23,10,54,Volt,q/(4*pi*epsilon*r),3,q,1,5,epsilon,1,5,r,1,5,,,,,,,,,,,,,,,,,,,,,
|
56 |
+
II.6.11,10,55,Volt,1/(4*pi*epsilon)*p_d*cos(theta)/r**2,4,epsilon,1,3,p_d,1,3,theta,1,3,r,1,3,,,,,,,,,,,,,,,,,,
|
57 |
+
II.6.15a,1000,56,Ef,p_d/(4*pi*epsilon)*3*z/r**5*sqrt(x**2+y**2),6,epsilon,1,3,p_d,1,3,r,1,3,x,1,3,y,1,3,z,1,3,,,,,,,,,,,,
|
58 |
+
II.6.15b,10,57,Ef,p_d/(4*pi*epsilon)*3*cos(theta)*sin(theta)/r**3,4,epsilon,1,3,p_d,1,3,theta,1,3,r,1,3,,,,,,,,,,,,,,,,,,
|
59 |
+
II.8.7,10,58,E_n,3/5*q**2/(4*pi*epsilon*d),3,q,1,5,epsilon,1,5,d,1,5,,,,,,,,,,,,,,,,,,,,,
|
60 |
+
II.8.31,10,59,E_den,epsilon*Ef**2/2,2,epsilon,1,5,Ef,1,5,,,,,,,,,,,,,,,,,,,,,,,,
|
61 |
+
II.10.9,10,60,Ef,sigma_den/epsilon*1/(1+chi),3,sigma_den,1,5,epsilon,1,5,chi,1,5,,,,,,,,,,,,,,,,,,,,,
|
62 |
+
II.11.3,10,61,x,q*Ef/(m*(omega_0**2-omega**2)),5,q,1,3,Ef,1,3,m,1,3,omega_0,3,5,omega,1,2,,,,,,,,,,,,,,,
|
63 |
+
II.11.17,10,62,n,n_0*(1+p_d*Ef*cos(theta)/(kb*T)),6,n_0,1,3,kb,1,3,T,1,3,theta,1,3,p_d,1,3,Ef,1,3,,,,,,,,,,,,
|
64 |
+
II.11.20,10,63,Pol,n_rho*p_d**2*Ef/(3*kb*T),5,n_rho,1,5,p_d,1,5,Ef,1,5,kb,1,5,T,1,5,,,,,,,,,,,,,,,
|
65 |
+
II.11.27,100,64,Pol,n*alpha/(1-(n*alpha/3))*epsilon*Ef,4,n,0,1,alpha,0,1,epsilon,1,2,Ef,1,2,,,,,,,,,,,,,,,,,,
|
66 |
+
II.11.28,100,65,theta,1+n*alpha/(1-(n*alpha/3)),2,n,0,1,alpha,0,1,,,,,,,,,,,,,,,,,,,,,,,,
|
67 |
+
II.13.17,10,66,B,1/(4*pi*epsilon*c**2)*2*I/r,4,epsilon,1,5,c,1,5,I,1,5,r,1,5,,,,,,,,,,,,,,,,,,
|
68 |
+
II.13.23,100,67,rho_c,rho_c_0/sqrt(1-v**2/c**2),3,rho_c_0,1,5,v,1,2,c,3,10,,,,,,,,,,,,,,,,,,,,,
|
69 |
+
II.13.34,10,68,j,rho_c_0*v/sqrt(1-v**2/c**2),3,rho_c_0,1,5,v,1,2,c,3,10,,,,,,,,,,,,,,,,,,,,,
|
70 |
+
II.15.4,10,69,E_n,-mom*B*cos(theta),3,mom,1,5,B,1,5,theta,1,5,,,,,,,,,,,,,,,,,,,,,
|
71 |
+
II.15.5,10,70,E_n,-p_d*Ef*cos(theta),3,p_d,1,5,Ef,1,5,theta,1,5,,,,,,,,,,,,,,,,,,,,,
|
72 |
+
II.21.32,10,71,Volt,q/(4*pi*epsilon*r*(1-v/c)),5,q,1,5,epsilon,1,5,r,1,5,v,1,2,c,3,10,,,,,,,,,,,,,,,
|
73 |
+
II.24.17,10,72,k,sqrt(omega**2/c**2-pi**2/d**2),3,omega,4,6,c,1,2,d,2,4,,,,,,,,,,,,,,,,,,,,,
|
74 |
+
II.27.16,10,73,flux,epsilon*c*Ef**2,3,epsilon,1,5,c,1,5,Ef,1,5,,,,,,,,,,,,,,,,,,,,,
|
75 |
+
II.27.18,10,74,E_den,epsilon*Ef**2,2,epsilon,1,5,Ef,1,5,,,,,,,,,,,,,,,,,,,,,,,,
|
76 |
+
II.34.2a,10,75,I,q*v/(2*pi*r),3,q,1,5,v,1,5,r,1,5,,,,,,,,,,,,,,,,,,,,,
|
77 |
+
II.34.2,10,76,mom,q*v*r/2,3,q,1,5,v,1,5,r,1,5,,,,,,,,,,,,,,,,,,,,,
|
78 |
+
II.34.11,10,77,omega,g_*q*B/(2*m),4,g_,1,5,q,1,5,B,1,5,m,1,5,,,,,,,,,,,,,,,,,,
|
79 |
+
II.34.29a,10,78,mom,q*h/(4*pi*m),3,q,1,5,h,1,5,m,1,5,,,,,,,,,,,,,,,,,,,,,
|
80 |
+
II.34.29b,10,79,E_n,g_*mom*B*Jz/(h/(2*pi)),5,g_,1,5,h,1,5,Jz,1,5,mom,1,5,B,1,5,,,,,,,,,,,,,,,
|
81 |
+
II.35.18,10,80,n,n_0/(exp(mom*B/(kb*T))+exp(-mom*B/(kb*T))),5,n_0,1,3,kb,1,3,T,1,3,mom,1,3,B,1,3,,,,,,,,,,,,,,,
|
82 |
+
II.35.21,10,81,M,n_rho*mom*tanh(mom*B/(kb*T)),5,n_rho,1,5,mom,1,5,B,1,5,kb,1,5,T,1,5,,,,,,,,,,,,,,,
|
83 |
+
II.36.38,10,82,f,mom*H/(kb*T)+(mom*alpha)/(epsilon*c**2*kb*T)*M,8,mom,1,3,H,1,3,kb,1,3,T,1,3,alpha,1,3,epsilon,1,3,c,1,3,M,1,3,,,,,,
|
84 |
+
II.37.1,10,83,E_n,mom*(1+chi)*B,3,mom,1,5,B,1,5,chi,1,5,,,,,,,,,,,,,,,,,,,,,
|
85 |
+
II.38.3,10,84,F,Y*A*x/d,4,Y,1,5,A,1,5,d,1,5,x,1,5,,,,,,,,,,,,,,,,,,
|
86 |
+
II.38.14,10,85,mu_S,Y/(2*(1+sigma)),2,Y,1,5,sigma,1,5,,,,,,,,,,,,,,,,,,,,,,,,
|
87 |
+
III.4.32,10,86,n,1/(exp((h/(2*pi))*omega/(kb*T))-1),4,h,1,5,omega,1,5,kb,1,5,T,1,5,,,,,,,,,,,,,,,,,,
|
88 |
+
III.4.33,10,87,E_n,(h/(2*pi))*omega/(exp((h/(2*pi))*omega/(kb*T))-1),4,h,1,5,omega,1,5,kb,1,5,T,1,5,,,,,,,,,,,,,,,,,,
|
89 |
+
III.7.38,10,88,omega,2*mom*B/(h/(2*pi)),3,mom,1,5,B,1,5,h,1,5,,,,,,,,,,,,,,,,,,,,,
|
90 |
+
III.8.54,10,89,prob,sin(E_n*t/(h/(2*pi)))**2,3,E_n,1,2,t,1,2,h,1,4,,,,,,,,,,,,,,,,,,,,,
|
91 |
+
III.9.52,1000,90,prob,(p_d*Ef*t/(h/(2*pi)))*sin((omega-omega_0)*t/2)**2/((omega-omega_0)*t/2)**2,6,p_d,1,3,Ef,1,3,t,1,3,h,1,3,omega,1,5,omega_0,1,5,,,,,,,,,,,,
|
92 |
+
III.10.19,100,91,E_n,mom*sqrt(Bx**2+By**2+Bz**2),4,mom,1,5,Bx,1,5,By,1,5,Bz,1,5,,,,,,,,,,,,,,,,,,
|
93 |
+
III.12.43,10,92,L,n*(h/(2*pi)),2,n,1,5,h,1,5,,,,,,,,,,,,,,,,,,,,,,,,
|
94 |
+
III.13.18,10,93,v,2*E_n*d**2*k/(h/(2*pi)),4,E_n,1,5,d,1,5,k,1,5,h,1,5,,,,,,,,,,,,,,,,,,
|
95 |
+
III.14.14,10,94,I,I_0*(exp(q*Volt/(kb*T))-1),5,I_0,1,5,q,1,2,Volt,1,2,kb,1,2,T,1,2,,,,,,,,,,,,,,,
|
96 |
+
III.15.12,10,95,E_n,2*U*(1-cos(k*d)),3,U,1,5,k,1,5,d,1,5,,,,,,,,,,,,,,,,,,,,,
|
97 |
+
III.15.14,10,96,m,(h/(2*pi))**2/(2*E_n*d**2),3,h,1,5,E_n,1,5,d,1,5,,,,,,,,,,,,,,,,,,,,,
|
98 |
+
III.15.27,10,97,k,2*pi*alpha/(n*d),3,alpha,1,5,n,1,5,d,1,5,,,,,,,,,,,,,,,,,,,,,
|
99 |
+
III.17.37,10,98,f,beta*(1+alpha*cos(theta)),3,beta,1,5,alpha,1,5,theta,1,5,,,,,,,,,,,,,,,,,,,,,
|
100 |
+
III.19.51,10,99,E_n,-m*q**4/(2*(4*pi*epsilon)**2*(h/(2*pi))**2)*(1/n**2),5,m,1,5,q,1,5,h,1,5,n,1,5,epsilon,1,5,,,,,,,,,,,,,,,
|
101 |
+
III.21.20,10,100,j,-rho_c_0*q*A_vec/m,4,rho_c_0,1,5,q,1,5,A_vec,1,5,m,1,5,,,,,,,,,,,,,,,,,,
|
pysr/Problems.py
ADDED
@@ -0,0 +1,158 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
import csv
|
3 |
+
import traceback
|
4 |
+
from sr import pysr, best
|
5 |
+
|
6 |
+
class Problem:
|
7 |
+
"""
|
8 |
+
Problem API to work with PySR.
|
9 |
+
|
10 |
+
Has attributes: X, y as pysr accepts, form which is a string representing the correct equation and variable_names
|
11 |
+
|
12 |
+
Should be able to call pysr(problem.X, problem.y, var_names=problem.var_names) and have it work
|
13 |
+
"""
|
14 |
+
def __init__(self, X, y, form=None, variable_names=None):
|
15 |
+
self.X = X
|
16 |
+
self.y = y
|
17 |
+
self.form = form
|
18 |
+
self.variable_names = variable_names
|
19 |
+
|
20 |
+
|
21 |
+
class FeynmanProblem(Problem):
|
22 |
+
"""
|
23 |
+
Stores the data for the problems from the 100 Feynman Equations on Physics.
|
24 |
+
This is the benchmark used in the AI Feynman Paper
|
25 |
+
"""
|
26 |
+
def __init__(self, row, gen=False, dp=500):
|
27 |
+
"""
|
28 |
+
row: a row read as a dict from the FeynmanEquations dataset provided in the datasets folder of the repo
|
29 |
+
gen: If true the problem will have dp X and y values randomly generated else they will be None
|
30 |
+
"""
|
31 |
+
self.eq_id = row['Filename']
|
32 |
+
#self.form = row['Formula']
|
33 |
+
self.n_vars = int(row['# variables'])
|
34 |
+
super(FeynmanProblem, self).__init__(None, None, form=row['Formula'],
|
35 |
+
variable_names=[row[f'v{i + 1}_name'] for i in range(self.n_vars)])
|
36 |
+
#self.var_names = [row[f'v{i+1}_name'] for i in range(self.n_vars)]
|
37 |
+
self.low = [float(row[f'v{i+1}_low']) for i in range(self.n_vars)]
|
38 |
+
self.high = [float(row[f'v{i+1}_high']) for i in range(self.n_vars)]
|
39 |
+
self.dp = dp#int(row[f'datapoints'])
|
40 |
+
#self.X = None
|
41 |
+
#self.Y = None
|
42 |
+
if gen:
|
43 |
+
self.X = np.random.uniform(0.01, 25, size=(self.dp, self.n_vars))
|
44 |
+
d = {}
|
45 |
+
for var in range(len(self.variable_names)):
|
46 |
+
d[self.variable_names[var]] = self.X[:, var]
|
47 |
+
d['exp'] = np.exp
|
48 |
+
d['sqrt'] = np.sqrt
|
49 |
+
d['pi'] = np.pi
|
50 |
+
d['cos'] = np.cos
|
51 |
+
d['sin'] = np.sin
|
52 |
+
d['tan'] = np.tan
|
53 |
+
d['tanh'] = np.tanh
|
54 |
+
d['ln'] = np.log
|
55 |
+
d['log'] = np.log # Quite sure the Feynman dataset has no base 10 logs
|
56 |
+
d['arcsin'] = np.arcsin
|
57 |
+
self.y = eval(self.form,d)
|
58 |
+
return
|
59 |
+
|
60 |
+
def __str__(self):
|
61 |
+
return f"Feynman Equation: {self.eq_id}|Form: {self.form}"
|
62 |
+
|
63 |
+
def __repr__(self):
|
64 |
+
return str(self)
|
65 |
+
|
66 |
+
def mk_problems(first=100, gen=False, dp=500, data_dir="datasets/FeynmanEquations.csv"):
|
67 |
+
"""
|
68 |
+
|
69 |
+
first: the first "first" equations from the dataset will be made into problems
|
70 |
+
data_dir: the path pointing to the Feynman Equations csv
|
71 |
+
returns: list of FeynmanProblems
|
72 |
+
"""
|
73 |
+
ret = []
|
74 |
+
with open(data_dir) as csvfile:
|
75 |
+
ind = 0
|
76 |
+
reader = csv.DictReader(csvfile)
|
77 |
+
for i, row in enumerate(reader):
|
78 |
+
if ind > first:
|
79 |
+
break
|
80 |
+
if row['Filename'] == '': continue
|
81 |
+
try:
|
82 |
+
p = FeynmanProblem(row, gen=gen, dp=dp)
|
83 |
+
ret.append(p)
|
84 |
+
except Exception as e:
|
85 |
+
traceback.print_exc()
|
86 |
+
#print(row)
|
87 |
+
print(f"FAILED ON ROW {i}")
|
88 |
+
ind += 1
|
89 |
+
return ret
|
90 |
+
|
91 |
+
|
92 |
+
def run_on_problem(problem, verbosity=0, multiprocessing=True):
|
93 |
+
"""
|
94 |
+
Takes in a problem and returns a tuple: (equations, best predicted equation, actual equation)
|
95 |
+
"""
|
96 |
+
from time import time
|
97 |
+
starting = time()
|
98 |
+
equations = pysr(problem.X, problem.y, variable_names=problem.variable_names, verbosity=verbosity,)
|
99 |
+
timing = time()-starting
|
100 |
+
others = {"time": timing, "problem": problem}
|
101 |
+
if not multiprocessing:
|
102 |
+
others['equations'] = equations
|
103 |
+
return str(best(equations)), problem.form, others
|
104 |
+
|
105 |
+
|
106 |
+
def do_feynman_experiments_parallel(first=100, verbosity=0, dp=500, output_file_path="experiments/FeynmanExperiment.csv", data_dir="datasets/FeynmanEquations.csv"):
|
107 |
+
import multiprocessing as mp
|
108 |
+
from tqdm import tqdm
|
109 |
+
problems = FeynmanProblem.mk_problems(first=first, gen=True, dp=dp, data_dir=data_dir)
|
110 |
+
ids = []
|
111 |
+
predictions = []
|
112 |
+
true_equations = []
|
113 |
+
time_takens = []
|
114 |
+
pool = mp.Pool()
|
115 |
+
results = []
|
116 |
+
with tqdm(total=len(problems)) as pbar:
|
117 |
+
for i, res in enumerate(pool.imap(run_on_problem, problems)):
|
118 |
+
results.append(res)
|
119 |
+
pbar.update()
|
120 |
+
for res in results:
|
121 |
+
prediction, true_equation, others = res
|
122 |
+
problem = others['problem']
|
123 |
+
ids.append(problem.eq_id)
|
124 |
+
predictions.append(prediction)
|
125 |
+
true_equations.append(true_equation)
|
126 |
+
time_takens.append(others['time'])
|
127 |
+
with open(output_file_path, 'a') as f:
|
128 |
+
writer = csv.writer(f, delimiter=',')
|
129 |
+
writer.writerow(['ID', 'Predicted', 'True', 'Time'])
|
130 |
+
for i in range(len(ids)):
|
131 |
+
writer.writerow([ids[i], predictions[i], true_equations[i], time_takens[i]])
|
132 |
+
return
|
133 |
+
|
134 |
+
def do_feynman_experiments(first=100, verbosity=0, dp=500, output_file_path="experiments/FeynmanExperiment.csv", data_dir="datasets/FeynmanEquations.csv"):
|
135 |
+
from tqdm import tqdm
|
136 |
+
|
137 |
+
problems = FeynmanProblem.mk_problems(first=first, gen=True, dp=dp, data_dir=data_dir)
|
138 |
+
indx = range(len(problems))
|
139 |
+
ids = []
|
140 |
+
predictions = []
|
141 |
+
true_equations = []
|
142 |
+
time_takens = []
|
143 |
+
for problem in tqdm(problems):
|
144 |
+
prediction, true_equation, others = run_on_problem(problem, verbosity)
|
145 |
+
ids.append(problem.eq_id)
|
146 |
+
predictions.append(prediction)
|
147 |
+
true_equations.append(true_equation)
|
148 |
+
time_takens.append(others['time'])
|
149 |
+
with open(output_file_path, 'a') as f:
|
150 |
+
writer = csv.writer(f, delimiter=',')
|
151 |
+
writer.writerow(['ID', 'Predicted', 'True', 'Time'])
|
152 |
+
for i in range(len(ids)):
|
153 |
+
writer.writerow([ids[i], predictions[i], true_equations[i], time_takens[i]])
|
154 |
+
return
|
155 |
+
|
156 |
+
|
157 |
+
if __name__ == "__main__":
|
158 |
+
do_feynman_experiments_parallel(first=10)
|
pysr/sr.py
CHANGED
@@ -310,11 +310,12 @@ def _final_pysr_process(julia_optimization, runfile_filename, timeout, **kwargs)
|
|
310 |
]
|
311 |
if timeout is not None:
|
312 |
command = [f'timeout', f'{timeout}'] + command
|
313 |
-
_cmd_runner(command)
|
314 |
|
315 |
def _cmd_runner(command):
|
316 |
-
|
317 |
-
|
|
|
318 |
try:
|
319 |
while True:
|
320 |
line = process.stdout.readline()
|
|
|
310 |
]
|
311 |
if timeout is not None:
|
312 |
command = [f'timeout', f'{timeout}'] + command
|
313 |
+
_cmd_runner(command, **kwargs)
|
314 |
|
315 |
def _cmd_runner(command):
|
316 |
+
if kwargs['verbosity'] > 0:
|
317 |
+
print("Running on", ' '.join(command))
|
318 |
+
process = subprocess.Popen(command, stdout=subprocess.PIPE, bufsize=-1)
|
319 |
try:
|
320 |
while True:
|
321 |
line = process.stdout.readline()
|