I am done

This commit is contained in:
2024-10-30 22:14:35 +01:00
parent 720dc28c09
commit 40e2a747cf
36901 changed files with 5011519 additions and 0 deletions

View File

@ -0,0 +1,118 @@
grammar Autolev;
options {
language = Python3;
}
prog: stat+;
stat: varDecl
| functionCall
| codeCommands
| massDecl
| inertiaDecl
| assignment
| settings
;
assignment: vec equals expr #vecAssign
| ID '[' index ']' equals expr #indexAssign
| ID diff? equals expr #regularAssign;
equals: ('='|'+='|'-='|':='|'*='|'/='|'^=');
index: expr (',' expr)* ;
diff: ('\'')+;
functionCall: ID '(' (expr (',' expr)*)? ')'
| (Mass|Inertia) '(' (ID (',' ID)*)? ')';
varDecl: varType varDecl2 (',' varDecl2)*;
varType: Newtonian|Frames|Bodies|Particles|Points|Constants
| Specifieds|Imaginary|Variables ('\'')*|MotionVariables ('\'')*;
varDecl2: ID ('{' INT ',' INT '}')? (('{' INT ':' INT (',' INT ':' INT)* '}'))? ('{' INT '}')? ('+'|'-')? ('\'')* ('=' expr)?;
ranges: ('{' INT ':' INT (',' INT ':' INT)* '}');
massDecl: Mass massDecl2 (',' massDecl2)*;
massDecl2: ID '=' expr;
inertiaDecl: Inertia ID ('(' ID ')')? (',' expr)+;
matrix: '[' expr ((','|';') expr)* ']';
matrixInOutput: (ID (ID '=' (FLOAT|INT)?))|FLOAT|INT;
codeCommands: units
| inputs
| outputs
| codegen
| commands;
settings: ID (EXP|ID|FLOAT|INT)?;
units: UnitSystem ID (',' ID)*;
inputs: Input inputs2 (',' inputs2)*;
id_diff: ID diff?;
inputs2: id_diff '=' expr expr?;
outputs: Output outputs2 (',' outputs2)*;
outputs2: expr expr?;
codegen: ID functionCall ('['matrixInOutput (',' matrixInOutput)*']')? ID'.'ID;
commands: Save ID'.'ID
| Encode ID (',' ID)*;
vec: ID ('>')+
| '0>'
| '1>>';
expr: expr '^'<assoc=right> expr # Exponent
| expr ('*'|'/') expr # MulDiv
| expr ('+'|'-') expr # AddSub
| EXP # exp
| '-' expr # negativeOne
| FLOAT # float
| INT # int
| ID('\'')* # id
| vec # VectorOrDyadic
| ID '['expr (',' expr)* ']' # Indexing
| functionCall # function
| matrix # matrices
| '(' expr ')' # parens
| expr '=' expr # idEqualsExpr
| expr ':' expr # colon
| ID? ranges ('\'')* # rangess
;
// These are to take care of the case insensitivity of Autolev.
Mass: ('M'|'m')('A'|'a')('S'|'s')('S'|'s');
Inertia: ('I'|'i')('N'|'n')('E'|'e')('R'|'r')('T'|'t')('I'|'i')('A'|'a');
Input: ('I'|'i')('N'|'n')('P'|'p')('U'|'u')('T'|'t')('S'|'s')?;
Output: ('O'|'o')('U'|'u')('T'|'t')('P'|'p')('U'|'u')('T'|'t');
Save: ('S'|'s')('A'|'a')('V'|'v')('E'|'e');
UnitSystem: ('U'|'u')('N'|'n')('I'|'i')('T'|'t')('S'|'s')('Y'|'y')('S'|'s')('T'|'t')('E'|'e')('M'|'m');
Encode: ('E'|'e')('N'|'n')('C'|'c')('O'|'o')('D'|'d')('E'|'e');
Newtonian: ('N'|'n')('E'|'e')('W'|'w')('T'|'t')('O'|'o')('N'|'n')('I'|'i')('A'|'a')('N'|'n');
Frames: ('F'|'f')('R'|'r')('A'|'a')('M'|'m')('E'|'e')('S'|'s')?;
Bodies: ('B'|'b')('O'|'o')('D'|'d')('I'|'i')('E'|'e')('S'|'s')?;
Particles: ('P'|'p')('A'|'a')('R'|'r')('T'|'t')('I'|'i')('C'|'c')('L'|'l')('E'|'e')('S'|'s')?;
Points: ('P'|'p')('O'|'o')('I'|'i')('N'|'n')('T'|'t')('S'|'s')?;
Constants: ('C'|'c')('O'|'o')('N'|'n')('S'|'s')('T'|'t')('A'|'a')('N'|'n')('T'|'t')('S'|'s')?;
Specifieds: ('S'|'s')('P'|'p')('E'|'e')('C'|'c')('I'|'i')('F'|'f')('I'|'i')('E'|'e')('D'|'d')('S'|'s')?;
Imaginary: ('I'|'i')('M'|'m')('A'|'a')('G'|'g')('I'|'i')('N'|'n')('A'|'a')('R'|'r')('Y'|'y');
Variables: ('V'|'v')('A'|'a')('R'|'r')('I'|'i')('A'|'a')('B'|'b')('L'|'l')('E'|'e')('S'|'s')?;
MotionVariables: ('M'|'m')('O'|'o')('T'|'t')('I'|'i')('O'|'o')('N'|'n')('V'|'v')('A'|'a')('R'|'r')('I'|'i')('A'|'a')('B'|'b')('L'|'l')('E'|'e')('S'|'s')?;
fragment DIFF: ('\'')*;
fragment DIGIT: [0-9];
INT: [0-9]+ ; // match integers
FLOAT: DIGIT+ '.' DIGIT*
| '.' DIGIT+;
EXP: FLOAT 'E' INT
| FLOAT 'E' '-' INT;
LINE_COMMENT : '%' .*? '\r'? '\n' -> skip ;
ID: [a-zA-Z][a-zA-Z0-9_]*;
WS: [ \t\r\n&]+ -> skip ; // toss out whitespace

View File

@ -0,0 +1,97 @@
from sympy.external import import_module
from sympy.utilities.decorator import doctest_depends_on
@doctest_depends_on(modules=('antlr4',))
def parse_autolev(autolev_code, include_numeric=False):
"""Parses Autolev code (version 4.1) to SymPy code.
Parameters
=========
autolev_code : Can be an str or any object with a readlines() method (such as a file handle or StringIO).
include_numeric : boolean, optional
If True NumPy, PyDy, or other numeric code is included for numeric evaluation lines in the Autolev code.
Returns
=======
sympy_code : str
Equivalent SymPy and/or numpy/pydy code as the input code.
Example (Double Pendulum)
=========================
>>> my_al_text = ("MOTIONVARIABLES' Q{2}', U{2}'",
... "CONSTANTS L,M,G",
... "NEWTONIAN N",
... "FRAMES A,B",
... "SIMPROT(N, A, 3, Q1)",
... "SIMPROT(N, B, 3, Q2)",
... "W_A_N>=U1*N3>",
... "W_B_N>=U2*N3>",
... "POINT O",
... "PARTICLES P,R",
... "P_O_P> = L*A1>",
... "P_P_R> = L*B1>",
... "V_O_N> = 0>",
... "V2PTS(N, A, O, P)",
... "V2PTS(N, B, P, R)",
... "MASS P=M, R=M",
... "Q1' = U1",
... "Q2' = U2",
... "GRAVITY(G*N1>)",
... "ZERO = FR() + FRSTAR()",
... "KANE()",
... "INPUT M=1,G=9.81,L=1",
... "INPUT Q1=.1,Q2=.2,U1=0,U2=0",
... "INPUT TFINAL=10, INTEGSTP=.01",
... "CODE DYNAMICS() some_filename.c")
>>> my_al_text = '\\n'.join(my_al_text)
>>> from sympy.parsing.autolev import parse_autolev
>>> print(parse_autolev(my_al_text, include_numeric=True))
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
<BLANKLINE>
q1, q2, u1, u2 = _me.dynamicsymbols('q1 q2 u1 u2')
q1_d, q2_d, u1_d, u2_d = _me.dynamicsymbols('q1_ q2_ u1_ u2_', 1)
l, m, g = _sm.symbols('l m g', real=True)
frame_n = _me.ReferenceFrame('n')
frame_a = _me.ReferenceFrame('a')
frame_b = _me.ReferenceFrame('b')
frame_a.orient(frame_n, 'Axis', [q1, frame_n.z])
frame_b.orient(frame_n, 'Axis', [q2, frame_n.z])
frame_a.set_ang_vel(frame_n, u1*frame_n.z)
frame_b.set_ang_vel(frame_n, u2*frame_n.z)
point_o = _me.Point('o')
particle_p = _me.Particle('p', _me.Point('p_pt'), _sm.Symbol('m'))
particle_r = _me.Particle('r', _me.Point('r_pt'), _sm.Symbol('m'))
particle_p.point.set_pos(point_o, l*frame_a.x)
particle_r.point.set_pos(particle_p.point, l*frame_b.x)
point_o.set_vel(frame_n, 0)
particle_p.point.v2pt_theory(point_o,frame_n,frame_a)
particle_r.point.v2pt_theory(particle_p.point,frame_n,frame_b)
particle_p.mass = m
particle_r.mass = m
force_p = particle_p.mass*(g*frame_n.x)
force_r = particle_r.mass*(g*frame_n.x)
kd_eqs = [q1_d - u1, q2_d - u2]
forceList = [(particle_p.point,particle_p.mass*(g*frame_n.x)), (particle_r.point,particle_r.mass*(g*frame_n.x))]
kane = _me.KanesMethod(frame_n, q_ind=[q1,q2], u_ind=[u1, u2], kd_eqs = kd_eqs)
fr, frstar = kane.kanes_equations([particle_p, particle_r], forceList)
zero = fr+frstar
from pydy.system import System
sys = System(kane, constants = {l:1, m:1, g:9.81},
specifieds={},
initial_conditions={q1:.1, q2:.2, u1:0, u2:0},
times = _np.linspace(0.0, 10, 10/.01))
<BLANKLINE>
y=sys.integrate()
<BLANKLINE>
"""
_autolev = import_module(
'sympy.parsing.autolev._parse_autolev_antlr',
import_kwargs={'fromlist': ['X']})
if _autolev is not None:
return _autolev.parse_autolev(autolev_code, include_numeric)

View File

@ -0,0 +1,5 @@
# *** GENERATED BY `setup.py antlr`, DO NOT EDIT BY HAND ***
#
# Generated with antlr4
# antlr4 is licensed under the BSD-3-Clause License
# https://github.com/antlr/antlr4/blob/master/LICENSE.txt

View File

@ -0,0 +1,253 @@
# *** GENERATED BY `setup.py antlr`, DO NOT EDIT BY HAND ***
#
# Generated with antlr4
# antlr4 is licensed under the BSD-3-Clause License
# https://github.com/antlr/antlr4/blob/master/LICENSE.txt
from antlr4 import *
from io import StringIO
import sys
if sys.version_info[1] > 5:
from typing import TextIO
else:
from typing.io import TextIO
def serializedATN():
return [
4,0,49,393,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,
2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,
13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,
19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,
26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,
32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,
39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,
45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,1,0,1,0,1,1,
1,1,1,2,1,2,1,3,1,3,1,3,1,4,1,4,1,4,1,5,1,5,1,5,1,6,1,6,1,6,1,7,
1,7,1,7,1,8,1,8,1,8,1,9,1,9,1,10,1,10,1,11,1,11,1,12,1,12,1,13,1,
13,1,14,1,14,1,15,1,15,1,16,1,16,1,17,1,17,1,18,1,18,1,19,1,19,1,
20,1,20,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,23,1,23,1,24,1,24,1,
25,1,25,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,
27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,3,28,184,8,28,1,29,1,29,1,
29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,
31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,
32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,
34,1,34,1,34,1,34,1,34,3,34,232,8,34,1,35,1,35,1,35,1,35,1,35,1,
35,3,35,240,8,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,3,
36,251,8,36,1,37,1,37,1,37,1,37,1,37,1,37,3,37,259,8,37,1,38,1,38,
1,38,1,38,1,38,1,38,1,38,1,38,1,38,3,38,270,8,38,1,39,1,39,1,39,
1,39,1,39,1,39,1,39,1,39,1,39,1,39,3,39,282,8,39,1,40,1,40,1,40,
1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,
1,41,1,41,1,41,3,41,303,8,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,
1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,3,42,320,8,42,1,43,5,43,
323,8,43,10,43,12,43,326,9,43,1,44,1,44,1,45,4,45,331,8,45,11,45,
12,45,332,1,46,4,46,336,8,46,11,46,12,46,337,1,46,1,46,5,46,342,
8,46,10,46,12,46,345,9,46,1,46,1,46,4,46,349,8,46,11,46,12,46,350,
3,46,353,8,46,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,
364,8,47,1,48,1,48,5,48,368,8,48,10,48,12,48,371,9,48,1,48,3,48,
374,8,48,1,48,1,48,1,48,1,48,1,49,1,49,5,49,382,8,49,10,49,12,49,
385,9,49,1,50,4,50,388,8,50,11,50,12,50,389,1,50,1,50,1,369,0,51,
1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,
27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,
49,25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,
71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43,87,0,89,0,91,44,
93,45,95,46,97,47,99,48,101,49,1,0,24,2,0,77,77,109,109,2,0,65,65,
97,97,2,0,83,83,115,115,2,0,73,73,105,105,2,0,78,78,110,110,2,0,
69,69,101,101,2,0,82,82,114,114,2,0,84,84,116,116,2,0,80,80,112,
112,2,0,85,85,117,117,2,0,79,79,111,111,2,0,86,86,118,118,2,0,89,
89,121,121,2,0,67,67,99,99,2,0,68,68,100,100,2,0,87,87,119,119,2,
0,70,70,102,102,2,0,66,66,98,98,2,0,76,76,108,108,2,0,71,71,103,
103,1,0,48,57,2,0,65,90,97,122,4,0,48,57,65,90,95,95,97,122,4,0,
9,10,13,13,32,32,38,38,410,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,
7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,
1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,
1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,
1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,
1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,
1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,
1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,
1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,91,
1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,
1,0,0,0,1,103,1,0,0,0,3,105,1,0,0,0,5,107,1,0,0,0,7,109,1,0,0,0,
9,112,1,0,0,0,11,115,1,0,0,0,13,118,1,0,0,0,15,121,1,0,0,0,17,124,
1,0,0,0,19,127,1,0,0,0,21,129,1,0,0,0,23,131,1,0,0,0,25,133,1,0,
0,0,27,135,1,0,0,0,29,137,1,0,0,0,31,139,1,0,0,0,33,141,1,0,0,0,
35,143,1,0,0,0,37,145,1,0,0,0,39,147,1,0,0,0,41,149,1,0,0,0,43,151,
1,0,0,0,45,154,1,0,0,0,47,158,1,0,0,0,49,160,1,0,0,0,51,162,1,0,
0,0,53,164,1,0,0,0,55,169,1,0,0,0,57,177,1,0,0,0,59,185,1,0,0,0,
61,192,1,0,0,0,63,197,1,0,0,0,65,208,1,0,0,0,67,215,1,0,0,0,69,225,
1,0,0,0,71,233,1,0,0,0,73,241,1,0,0,0,75,252,1,0,0,0,77,260,1,0,
0,0,79,271,1,0,0,0,81,283,1,0,0,0,83,293,1,0,0,0,85,304,1,0,0,0,
87,324,1,0,0,0,89,327,1,0,0,0,91,330,1,0,0,0,93,352,1,0,0,0,95,363,
1,0,0,0,97,365,1,0,0,0,99,379,1,0,0,0,101,387,1,0,0,0,103,104,5,
91,0,0,104,2,1,0,0,0,105,106,5,93,0,0,106,4,1,0,0,0,107,108,5,61,
0,0,108,6,1,0,0,0,109,110,5,43,0,0,110,111,5,61,0,0,111,8,1,0,0,
0,112,113,5,45,0,0,113,114,5,61,0,0,114,10,1,0,0,0,115,116,5,58,
0,0,116,117,5,61,0,0,117,12,1,0,0,0,118,119,5,42,0,0,119,120,5,61,
0,0,120,14,1,0,0,0,121,122,5,47,0,0,122,123,5,61,0,0,123,16,1,0,
0,0,124,125,5,94,0,0,125,126,5,61,0,0,126,18,1,0,0,0,127,128,5,44,
0,0,128,20,1,0,0,0,129,130,5,39,0,0,130,22,1,0,0,0,131,132,5,40,
0,0,132,24,1,0,0,0,133,134,5,41,0,0,134,26,1,0,0,0,135,136,5,123,
0,0,136,28,1,0,0,0,137,138,5,125,0,0,138,30,1,0,0,0,139,140,5,58,
0,0,140,32,1,0,0,0,141,142,5,43,0,0,142,34,1,0,0,0,143,144,5,45,
0,0,144,36,1,0,0,0,145,146,5,59,0,0,146,38,1,0,0,0,147,148,5,46,
0,0,148,40,1,0,0,0,149,150,5,62,0,0,150,42,1,0,0,0,151,152,5,48,
0,0,152,153,5,62,0,0,153,44,1,0,0,0,154,155,5,49,0,0,155,156,5,62,
0,0,156,157,5,62,0,0,157,46,1,0,0,0,158,159,5,94,0,0,159,48,1,0,
0,0,160,161,5,42,0,0,161,50,1,0,0,0,162,163,5,47,0,0,163,52,1,0,
0,0,164,165,7,0,0,0,165,166,7,1,0,0,166,167,7,2,0,0,167,168,7,2,
0,0,168,54,1,0,0,0,169,170,7,3,0,0,170,171,7,4,0,0,171,172,7,5,0,
0,172,173,7,6,0,0,173,174,7,7,0,0,174,175,7,3,0,0,175,176,7,1,0,
0,176,56,1,0,0,0,177,178,7,3,0,0,178,179,7,4,0,0,179,180,7,8,0,0,
180,181,7,9,0,0,181,183,7,7,0,0,182,184,7,2,0,0,183,182,1,0,0,0,
183,184,1,0,0,0,184,58,1,0,0,0,185,186,7,10,0,0,186,187,7,9,0,0,
187,188,7,7,0,0,188,189,7,8,0,0,189,190,7,9,0,0,190,191,7,7,0,0,
191,60,1,0,0,0,192,193,7,2,0,0,193,194,7,1,0,0,194,195,7,11,0,0,
195,196,7,5,0,0,196,62,1,0,0,0,197,198,7,9,0,0,198,199,7,4,0,0,199,
200,7,3,0,0,200,201,7,7,0,0,201,202,7,2,0,0,202,203,7,12,0,0,203,
204,7,2,0,0,204,205,7,7,0,0,205,206,7,5,0,0,206,207,7,0,0,0,207,
64,1,0,0,0,208,209,7,5,0,0,209,210,7,4,0,0,210,211,7,13,0,0,211,
212,7,10,0,0,212,213,7,14,0,0,213,214,7,5,0,0,214,66,1,0,0,0,215,
216,7,4,0,0,216,217,7,5,0,0,217,218,7,15,0,0,218,219,7,7,0,0,219,
220,7,10,0,0,220,221,7,4,0,0,221,222,7,3,0,0,222,223,7,1,0,0,223,
224,7,4,0,0,224,68,1,0,0,0,225,226,7,16,0,0,226,227,7,6,0,0,227,
228,7,1,0,0,228,229,7,0,0,0,229,231,7,5,0,0,230,232,7,2,0,0,231,
230,1,0,0,0,231,232,1,0,0,0,232,70,1,0,0,0,233,234,7,17,0,0,234,
235,7,10,0,0,235,236,7,14,0,0,236,237,7,3,0,0,237,239,7,5,0,0,238,
240,7,2,0,0,239,238,1,0,0,0,239,240,1,0,0,0,240,72,1,0,0,0,241,242,
7,8,0,0,242,243,7,1,0,0,243,244,7,6,0,0,244,245,7,7,0,0,245,246,
7,3,0,0,246,247,7,13,0,0,247,248,7,18,0,0,248,250,7,5,0,0,249,251,
7,2,0,0,250,249,1,0,0,0,250,251,1,0,0,0,251,74,1,0,0,0,252,253,7,
8,0,0,253,254,7,10,0,0,254,255,7,3,0,0,255,256,7,4,0,0,256,258,7,
7,0,0,257,259,7,2,0,0,258,257,1,0,0,0,258,259,1,0,0,0,259,76,1,0,
0,0,260,261,7,13,0,0,261,262,7,10,0,0,262,263,7,4,0,0,263,264,7,
2,0,0,264,265,7,7,0,0,265,266,7,1,0,0,266,267,7,4,0,0,267,269,7,
7,0,0,268,270,7,2,0,0,269,268,1,0,0,0,269,270,1,0,0,0,270,78,1,0,
0,0,271,272,7,2,0,0,272,273,7,8,0,0,273,274,7,5,0,0,274,275,7,13,
0,0,275,276,7,3,0,0,276,277,7,16,0,0,277,278,7,3,0,0,278,279,7,5,
0,0,279,281,7,14,0,0,280,282,7,2,0,0,281,280,1,0,0,0,281,282,1,0,
0,0,282,80,1,0,0,0,283,284,7,3,0,0,284,285,7,0,0,0,285,286,7,1,0,
0,286,287,7,19,0,0,287,288,7,3,0,0,288,289,7,4,0,0,289,290,7,1,0,
0,290,291,7,6,0,0,291,292,7,12,0,0,292,82,1,0,0,0,293,294,7,11,0,
0,294,295,7,1,0,0,295,296,7,6,0,0,296,297,7,3,0,0,297,298,7,1,0,
0,298,299,7,17,0,0,299,300,7,18,0,0,300,302,7,5,0,0,301,303,7,2,
0,0,302,301,1,0,0,0,302,303,1,0,0,0,303,84,1,0,0,0,304,305,7,0,0,
0,305,306,7,10,0,0,306,307,7,7,0,0,307,308,7,3,0,0,308,309,7,10,
0,0,309,310,7,4,0,0,310,311,7,11,0,0,311,312,7,1,0,0,312,313,7,6,
0,0,313,314,7,3,0,0,314,315,7,1,0,0,315,316,7,17,0,0,316,317,7,18,
0,0,317,319,7,5,0,0,318,320,7,2,0,0,319,318,1,0,0,0,319,320,1,0,
0,0,320,86,1,0,0,0,321,323,5,39,0,0,322,321,1,0,0,0,323,326,1,0,
0,0,324,322,1,0,0,0,324,325,1,0,0,0,325,88,1,0,0,0,326,324,1,0,0,
0,327,328,7,20,0,0,328,90,1,0,0,0,329,331,7,20,0,0,330,329,1,0,0,
0,331,332,1,0,0,0,332,330,1,0,0,0,332,333,1,0,0,0,333,92,1,0,0,0,
334,336,3,89,44,0,335,334,1,0,0,0,336,337,1,0,0,0,337,335,1,0,0,
0,337,338,1,0,0,0,338,339,1,0,0,0,339,343,5,46,0,0,340,342,3,89,
44,0,341,340,1,0,0,0,342,345,1,0,0,0,343,341,1,0,0,0,343,344,1,0,
0,0,344,353,1,0,0,0,345,343,1,0,0,0,346,348,5,46,0,0,347,349,3,89,
44,0,348,347,1,0,0,0,349,350,1,0,0,0,350,348,1,0,0,0,350,351,1,0,
0,0,351,353,1,0,0,0,352,335,1,0,0,0,352,346,1,0,0,0,353,94,1,0,0,
0,354,355,3,93,46,0,355,356,5,69,0,0,356,357,3,91,45,0,357,364,1,
0,0,0,358,359,3,93,46,0,359,360,5,69,0,0,360,361,5,45,0,0,361,362,
3,91,45,0,362,364,1,0,0,0,363,354,1,0,0,0,363,358,1,0,0,0,364,96,
1,0,0,0,365,369,5,37,0,0,366,368,9,0,0,0,367,366,1,0,0,0,368,371,
1,0,0,0,369,370,1,0,0,0,369,367,1,0,0,0,370,373,1,0,0,0,371,369,
1,0,0,0,372,374,5,13,0,0,373,372,1,0,0,0,373,374,1,0,0,0,374,375,
1,0,0,0,375,376,5,10,0,0,376,377,1,0,0,0,377,378,6,48,0,0,378,98,
1,0,0,0,379,383,7,21,0,0,380,382,7,22,0,0,381,380,1,0,0,0,382,385,
1,0,0,0,383,381,1,0,0,0,383,384,1,0,0,0,384,100,1,0,0,0,385,383,
1,0,0,0,386,388,7,23,0,0,387,386,1,0,0,0,388,389,1,0,0,0,389,387,
1,0,0,0,389,390,1,0,0,0,390,391,1,0,0,0,391,392,6,50,0,0,392,102,
1,0,0,0,21,0,183,231,239,250,258,269,281,302,319,324,332,337,343,
350,352,363,369,373,383,389,1,6,0,0
]
class AutolevLexer(Lexer):
atn = ATNDeserializer().deserialize(serializedATN())
decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]
T__0 = 1
T__1 = 2
T__2 = 3
T__3 = 4
T__4 = 5
T__5 = 6
T__6 = 7
T__7 = 8
T__8 = 9
T__9 = 10
T__10 = 11
T__11 = 12
T__12 = 13
T__13 = 14
T__14 = 15
T__15 = 16
T__16 = 17
T__17 = 18
T__18 = 19
T__19 = 20
T__20 = 21
T__21 = 22
T__22 = 23
T__23 = 24
T__24 = 25
T__25 = 26
Mass = 27
Inertia = 28
Input = 29
Output = 30
Save = 31
UnitSystem = 32
Encode = 33
Newtonian = 34
Frames = 35
Bodies = 36
Particles = 37
Points = 38
Constants = 39
Specifieds = 40
Imaginary = 41
Variables = 42
MotionVariables = 43
INT = 44
FLOAT = 45
EXP = 46
LINE_COMMENT = 47
ID = 48
WS = 49
channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ]
modeNames = [ "DEFAULT_MODE" ]
literalNames = [ "<INVALID>",
"'['", "']'", "'='", "'+='", "'-='", "':='", "'*='", "'/='",
"'^='", "','", "'''", "'('", "')'", "'{'", "'}'", "':'", "'+'",
"'-'", "';'", "'.'", "'>'", "'0>'", "'1>>'", "'^'", "'*'", "'/'" ]
symbolicNames = [ "<INVALID>",
"Mass", "Inertia", "Input", "Output", "Save", "UnitSystem",
"Encode", "Newtonian", "Frames", "Bodies", "Particles", "Points",
"Constants", "Specifieds", "Imaginary", "Variables", "MotionVariables",
"INT", "FLOAT", "EXP", "LINE_COMMENT", "ID", "WS" ]
ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6",
"T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13",
"T__14", "T__15", "T__16", "T__17", "T__18", "T__19",
"T__20", "T__21", "T__22", "T__23", "T__24", "T__25",
"Mass", "Inertia", "Input", "Output", "Save", "UnitSystem",
"Encode", "Newtonian", "Frames", "Bodies", "Particles",
"Points", "Constants", "Specifieds", "Imaginary", "Variables",
"MotionVariables", "DIFF", "DIGIT", "INT", "FLOAT", "EXP",
"LINE_COMMENT", "ID", "WS" ]
grammarFileName = "Autolev.g4"
def __init__(self, input=None, output:TextIO = sys.stdout):
super().__init__(input, output)
self.checkVersion("4.11.1")
self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache())
self._actions = None
self._predicates = None

View File

@ -0,0 +1,421 @@
# *** GENERATED BY `setup.py antlr`, DO NOT EDIT BY HAND ***
#
# Generated with antlr4
# antlr4 is licensed under the BSD-3-Clause License
# https://github.com/antlr/antlr4/blob/master/LICENSE.txt
from antlr4 import *
if __name__ is not None and "." in __name__:
from .autolevparser import AutolevParser
else:
from autolevparser import AutolevParser
# This class defines a complete listener for a parse tree produced by AutolevParser.
class AutolevListener(ParseTreeListener):
# Enter a parse tree produced by AutolevParser#prog.
def enterProg(self, ctx:AutolevParser.ProgContext):
pass
# Exit a parse tree produced by AutolevParser#prog.
def exitProg(self, ctx:AutolevParser.ProgContext):
pass
# Enter a parse tree produced by AutolevParser#stat.
def enterStat(self, ctx:AutolevParser.StatContext):
pass
# Exit a parse tree produced by AutolevParser#stat.
def exitStat(self, ctx:AutolevParser.StatContext):
pass
# Enter a parse tree produced by AutolevParser#vecAssign.
def enterVecAssign(self, ctx:AutolevParser.VecAssignContext):
pass
# Exit a parse tree produced by AutolevParser#vecAssign.
def exitVecAssign(self, ctx:AutolevParser.VecAssignContext):
pass
# Enter a parse tree produced by AutolevParser#indexAssign.
def enterIndexAssign(self, ctx:AutolevParser.IndexAssignContext):
pass
# Exit a parse tree produced by AutolevParser#indexAssign.
def exitIndexAssign(self, ctx:AutolevParser.IndexAssignContext):
pass
# Enter a parse tree produced by AutolevParser#regularAssign.
def enterRegularAssign(self, ctx:AutolevParser.RegularAssignContext):
pass
# Exit a parse tree produced by AutolevParser#regularAssign.
def exitRegularAssign(self, ctx:AutolevParser.RegularAssignContext):
pass
# Enter a parse tree produced by AutolevParser#equals.
def enterEquals(self, ctx:AutolevParser.EqualsContext):
pass
# Exit a parse tree produced by AutolevParser#equals.
def exitEquals(self, ctx:AutolevParser.EqualsContext):
pass
# Enter a parse tree produced by AutolevParser#index.
def enterIndex(self, ctx:AutolevParser.IndexContext):
pass
# Exit a parse tree produced by AutolevParser#index.
def exitIndex(self, ctx:AutolevParser.IndexContext):
pass
# Enter a parse tree produced by AutolevParser#diff.
def enterDiff(self, ctx:AutolevParser.DiffContext):
pass
# Exit a parse tree produced by AutolevParser#diff.
def exitDiff(self, ctx:AutolevParser.DiffContext):
pass
# Enter a parse tree produced by AutolevParser#functionCall.
def enterFunctionCall(self, ctx:AutolevParser.FunctionCallContext):
pass
# Exit a parse tree produced by AutolevParser#functionCall.
def exitFunctionCall(self, ctx:AutolevParser.FunctionCallContext):
pass
# Enter a parse tree produced by AutolevParser#varDecl.
def enterVarDecl(self, ctx:AutolevParser.VarDeclContext):
pass
# Exit a parse tree produced by AutolevParser#varDecl.
def exitVarDecl(self, ctx:AutolevParser.VarDeclContext):
pass
# Enter a parse tree produced by AutolevParser#varType.
def enterVarType(self, ctx:AutolevParser.VarTypeContext):
pass
# Exit a parse tree produced by AutolevParser#varType.
def exitVarType(self, ctx:AutolevParser.VarTypeContext):
pass
# Enter a parse tree produced by AutolevParser#varDecl2.
def enterVarDecl2(self, ctx:AutolevParser.VarDecl2Context):
pass
# Exit a parse tree produced by AutolevParser#varDecl2.
def exitVarDecl2(self, ctx:AutolevParser.VarDecl2Context):
pass
# Enter a parse tree produced by AutolevParser#ranges.
def enterRanges(self, ctx:AutolevParser.RangesContext):
pass
# Exit a parse tree produced by AutolevParser#ranges.
def exitRanges(self, ctx:AutolevParser.RangesContext):
pass
# Enter a parse tree produced by AutolevParser#massDecl.
def enterMassDecl(self, ctx:AutolevParser.MassDeclContext):
pass
# Exit a parse tree produced by AutolevParser#massDecl.
def exitMassDecl(self, ctx:AutolevParser.MassDeclContext):
pass
# Enter a parse tree produced by AutolevParser#massDecl2.
def enterMassDecl2(self, ctx:AutolevParser.MassDecl2Context):
pass
# Exit a parse tree produced by AutolevParser#massDecl2.
def exitMassDecl2(self, ctx:AutolevParser.MassDecl2Context):
pass
# Enter a parse tree produced by AutolevParser#inertiaDecl.
def enterInertiaDecl(self, ctx:AutolevParser.InertiaDeclContext):
pass
# Exit a parse tree produced by AutolevParser#inertiaDecl.
def exitInertiaDecl(self, ctx:AutolevParser.InertiaDeclContext):
pass
# Enter a parse tree produced by AutolevParser#matrix.
def enterMatrix(self, ctx:AutolevParser.MatrixContext):
pass
# Exit a parse tree produced by AutolevParser#matrix.
def exitMatrix(self, ctx:AutolevParser.MatrixContext):
pass
# Enter a parse tree produced by AutolevParser#matrixInOutput.
def enterMatrixInOutput(self, ctx:AutolevParser.MatrixInOutputContext):
pass
# Exit a parse tree produced by AutolevParser#matrixInOutput.
def exitMatrixInOutput(self, ctx:AutolevParser.MatrixInOutputContext):
pass
# Enter a parse tree produced by AutolevParser#codeCommands.
def enterCodeCommands(self, ctx:AutolevParser.CodeCommandsContext):
pass
# Exit a parse tree produced by AutolevParser#codeCommands.
def exitCodeCommands(self, ctx:AutolevParser.CodeCommandsContext):
pass
# Enter a parse tree produced by AutolevParser#settings.
def enterSettings(self, ctx:AutolevParser.SettingsContext):
pass
# Exit a parse tree produced by AutolevParser#settings.
def exitSettings(self, ctx:AutolevParser.SettingsContext):
pass
# Enter a parse tree produced by AutolevParser#units.
def enterUnits(self, ctx:AutolevParser.UnitsContext):
pass
# Exit a parse tree produced by AutolevParser#units.
def exitUnits(self, ctx:AutolevParser.UnitsContext):
pass
# Enter a parse tree produced by AutolevParser#inputs.
def enterInputs(self, ctx:AutolevParser.InputsContext):
pass
# Exit a parse tree produced by AutolevParser#inputs.
def exitInputs(self, ctx:AutolevParser.InputsContext):
pass
# Enter a parse tree produced by AutolevParser#id_diff.
def enterId_diff(self, ctx:AutolevParser.Id_diffContext):
pass
# Exit a parse tree produced by AutolevParser#id_diff.
def exitId_diff(self, ctx:AutolevParser.Id_diffContext):
pass
# Enter a parse tree produced by AutolevParser#inputs2.
def enterInputs2(self, ctx:AutolevParser.Inputs2Context):
pass
# Exit a parse tree produced by AutolevParser#inputs2.
def exitInputs2(self, ctx:AutolevParser.Inputs2Context):
pass
# Enter a parse tree produced by AutolevParser#outputs.
def enterOutputs(self, ctx:AutolevParser.OutputsContext):
pass
# Exit a parse tree produced by AutolevParser#outputs.
def exitOutputs(self, ctx:AutolevParser.OutputsContext):
pass
# Enter a parse tree produced by AutolevParser#outputs2.
def enterOutputs2(self, ctx:AutolevParser.Outputs2Context):
pass
# Exit a parse tree produced by AutolevParser#outputs2.
def exitOutputs2(self, ctx:AutolevParser.Outputs2Context):
pass
# Enter a parse tree produced by AutolevParser#codegen.
def enterCodegen(self, ctx:AutolevParser.CodegenContext):
pass
# Exit a parse tree produced by AutolevParser#codegen.
def exitCodegen(self, ctx:AutolevParser.CodegenContext):
pass
# Enter a parse tree produced by AutolevParser#commands.
def enterCommands(self, ctx:AutolevParser.CommandsContext):
pass
# Exit a parse tree produced by AutolevParser#commands.
def exitCommands(self, ctx:AutolevParser.CommandsContext):
pass
# Enter a parse tree produced by AutolevParser#vec.
def enterVec(self, ctx:AutolevParser.VecContext):
pass
# Exit a parse tree produced by AutolevParser#vec.
def exitVec(self, ctx:AutolevParser.VecContext):
pass
# Enter a parse tree produced by AutolevParser#parens.
def enterParens(self, ctx:AutolevParser.ParensContext):
pass
# Exit a parse tree produced by AutolevParser#parens.
def exitParens(self, ctx:AutolevParser.ParensContext):
pass
# Enter a parse tree produced by AutolevParser#VectorOrDyadic.
def enterVectorOrDyadic(self, ctx:AutolevParser.VectorOrDyadicContext):
pass
# Exit a parse tree produced by AutolevParser#VectorOrDyadic.
def exitVectorOrDyadic(self, ctx:AutolevParser.VectorOrDyadicContext):
pass
# Enter a parse tree produced by AutolevParser#Exponent.
def enterExponent(self, ctx:AutolevParser.ExponentContext):
pass
# Exit a parse tree produced by AutolevParser#Exponent.
def exitExponent(self, ctx:AutolevParser.ExponentContext):
pass
# Enter a parse tree produced by AutolevParser#MulDiv.
def enterMulDiv(self, ctx:AutolevParser.MulDivContext):
pass
# Exit a parse tree produced by AutolevParser#MulDiv.
def exitMulDiv(self, ctx:AutolevParser.MulDivContext):
pass
# Enter a parse tree produced by AutolevParser#AddSub.
def enterAddSub(self, ctx:AutolevParser.AddSubContext):
pass
# Exit a parse tree produced by AutolevParser#AddSub.
def exitAddSub(self, ctx:AutolevParser.AddSubContext):
pass
# Enter a parse tree produced by AutolevParser#float.
def enterFloat(self, ctx:AutolevParser.FloatContext):
pass
# Exit a parse tree produced by AutolevParser#float.
def exitFloat(self, ctx:AutolevParser.FloatContext):
pass
# Enter a parse tree produced by AutolevParser#int.
def enterInt(self, ctx:AutolevParser.IntContext):
pass
# Exit a parse tree produced by AutolevParser#int.
def exitInt(self, ctx:AutolevParser.IntContext):
pass
# Enter a parse tree produced by AutolevParser#idEqualsExpr.
def enterIdEqualsExpr(self, ctx:AutolevParser.IdEqualsExprContext):
pass
# Exit a parse tree produced by AutolevParser#idEqualsExpr.
def exitIdEqualsExpr(self, ctx:AutolevParser.IdEqualsExprContext):
pass
# Enter a parse tree produced by AutolevParser#negativeOne.
def enterNegativeOne(self, ctx:AutolevParser.NegativeOneContext):
pass
# Exit a parse tree produced by AutolevParser#negativeOne.
def exitNegativeOne(self, ctx:AutolevParser.NegativeOneContext):
pass
# Enter a parse tree produced by AutolevParser#function.
def enterFunction(self, ctx:AutolevParser.FunctionContext):
pass
# Exit a parse tree produced by AutolevParser#function.
def exitFunction(self, ctx:AutolevParser.FunctionContext):
pass
# Enter a parse tree produced by AutolevParser#rangess.
def enterRangess(self, ctx:AutolevParser.RangessContext):
pass
# Exit a parse tree produced by AutolevParser#rangess.
def exitRangess(self, ctx:AutolevParser.RangessContext):
pass
# Enter a parse tree produced by AutolevParser#colon.
def enterColon(self, ctx:AutolevParser.ColonContext):
pass
# Exit a parse tree produced by AutolevParser#colon.
def exitColon(self, ctx:AutolevParser.ColonContext):
pass
# Enter a parse tree produced by AutolevParser#id.
def enterId(self, ctx:AutolevParser.IdContext):
pass
# Exit a parse tree produced by AutolevParser#id.
def exitId(self, ctx:AutolevParser.IdContext):
pass
# Enter a parse tree produced by AutolevParser#exp.
def enterExp(self, ctx:AutolevParser.ExpContext):
pass
# Exit a parse tree produced by AutolevParser#exp.
def exitExp(self, ctx:AutolevParser.ExpContext):
pass
# Enter a parse tree produced by AutolevParser#matrices.
def enterMatrices(self, ctx:AutolevParser.MatricesContext):
pass
# Exit a parse tree produced by AutolevParser#matrices.
def exitMatrices(self, ctx:AutolevParser.MatricesContext):
pass
# Enter a parse tree produced by AutolevParser#Indexing.
def enterIndexing(self, ctx:AutolevParser.IndexingContext):
pass
# Exit a parse tree produced by AutolevParser#Indexing.
def exitIndexing(self, ctx:AutolevParser.IndexingContext):
pass
del AutolevParser

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,86 @@
import os
import subprocess
import glob
from sympy.utilities.misc import debug
here = os.path.dirname(__file__)
grammar_file = os.path.abspath(os.path.join(here, "Autolev.g4"))
dir_autolev_antlr = os.path.join(here, "_antlr")
header = '''\
# *** GENERATED BY `setup.py antlr`, DO NOT EDIT BY HAND ***
#
# Generated with antlr4
# antlr4 is licensed under the BSD-3-Clause License
# https://github.com/antlr/antlr4/blob/master/LICENSE.txt
'''
def check_antlr_version():
debug("Checking antlr4 version...")
try:
debug(subprocess.check_output(["antlr4"])
.decode('utf-8').split("\n")[0])
return True
except (subprocess.CalledProcessError, FileNotFoundError):
debug("The 'antlr4' command line tool is not installed, "
"or not on your PATH.\n"
"> Please refer to the README.md file for more information.")
return False
def build_parser(output_dir=dir_autolev_antlr):
check_antlr_version()
debug("Updating ANTLR-generated code in {}".format(output_dir))
if not os.path.exists(output_dir):
os.makedirs(output_dir)
with open(os.path.join(output_dir, "__init__.py"), "w+") as fp:
fp.write(header)
args = [
"antlr4",
grammar_file,
"-o", output_dir,
"-no-visitor",
]
debug("Running code generation...\n\t$ {}".format(" ".join(args)))
subprocess.check_output(args, cwd=output_dir)
debug("Applying headers, removing unnecessary files and renaming...")
# Handle case insensitive file systems. If the files are already
# generated, they will be written to autolev* but Autolev*.* won't match them.
for path in (glob.glob(os.path.join(output_dir, "Autolev*.*")) or
glob.glob(os.path.join(output_dir, "autolev*.*"))):
# Remove files ending in .interp or .tokens as they are not needed.
if not path.endswith(".py"):
os.unlink(path)
continue
new_path = os.path.join(output_dir, os.path.basename(path).lower())
with open(path, 'r') as f:
lines = [line.rstrip().replace('AutolevParser import', 'autolevparser import') +'\n'
for line in f.readlines()]
os.unlink(path)
with open(new_path, "w") as out_file:
offset = 0
while lines[offset].startswith('#'):
offset += 1
out_file.write(header)
out_file.writelines(lines[offset:])
debug("\t{}".format(new_path))
return True
if __name__ == "__main__":
build_parser()

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,38 @@
from importlib.metadata import version
from sympy.external import import_module
autolevparser = import_module('sympy.parsing.autolev._antlr.autolevparser',
import_kwargs={'fromlist': ['AutolevParser']})
autolevlexer = import_module('sympy.parsing.autolev._antlr.autolevlexer',
import_kwargs={'fromlist': ['AutolevLexer']})
autolevlistener = import_module('sympy.parsing.autolev._antlr.autolevlistener',
import_kwargs={'fromlist': ['AutolevListener']})
AutolevParser = getattr(autolevparser, 'AutolevParser', None)
AutolevLexer = getattr(autolevlexer, 'AutolevLexer', None)
AutolevListener = getattr(autolevlistener, 'AutolevListener', None)
def parse_autolev(autolev_code, include_numeric):
antlr4 = import_module('antlr4')
if not antlr4 or not version('antlr4-python3-runtime').startswith('4.11'):
raise ImportError("Autolev parsing requires the antlr4 Python package,"
" provided by pip (antlr4-python3-runtime)"
" conda (antlr-python-runtime), version 4.11")
try:
l = autolev_code.readlines()
input_stream = antlr4.InputStream("".join(l))
except Exception:
input_stream = antlr4.InputStream(autolev_code)
if AutolevListener:
from ._listener_autolev_antlr import MyListener
lexer = AutolevLexer(input_stream)
token_stream = antlr4.CommonTokenStream(lexer)
parser = AutolevParser(token_stream)
tree = parser.prog()
my_listener = MyListener(include_numeric)
walker = antlr4.ParseTreeWalker()
walker.walk(my_listener, tree)
return "".join(my_listener.output_code)

View File

@ -0,0 +1,9 @@
# parsing/tests/test_autolev.py uses the .al files in this directory as inputs and checks
# the equivalence of the parser generated codes and the respective .py files.
# By default, this directory contains tests for all rules of the parser.
# Additional tests consisting of full physics examples shall be made available soon in
# the form of another repository. One shall be able to copy the contents of that repo
# to this folder and use those tests after uncommenting the respective code in
# parsing/tests/test_autolev.py.

View File

@ -0,0 +1,33 @@
CONSTANTS G,LB,W,H
MOTIONVARIABLES' THETA'',PHI'',OMEGA',ALPHA'
NEWTONIAN N
BODIES A,B
SIMPROT(N,A,2,THETA)
SIMPROT(A,B,3,PHI)
POINT O
LA = (LB-H/2)/2
P_O_AO> = LA*A3>
P_O_BO> = LB*A3>
OMEGA = THETA'
ALPHA = PHI'
W_A_N> = OMEGA*N2>
W_B_A> = ALPHA*A3>
V_O_N> = 0>
V2PTS(N, A, O, AO)
V2PTS(N, A, O, BO)
MASS A=MA, B=MB
IAXX = 1/12*MA*(2*LA)^2
IAYY = IAXX
IAZZ = 0
IBXX = 1/12*MB*H^2
IBYY = 1/12*MB*(W^2+H^2)
IBZZ = 1/12*MB*W^2
INERTIA A, IAXX, IAYY, IAZZ
INERTIA B, IBXX, IBYY, IBZZ
GRAVITY(G*N3>)
ZERO = FR() + FRSTAR()
KANE()
INPUT LB=0.2,H=0.1,W=0.2,MA=0.01,MB=0.1,G=9.81
INPUT THETA = 90 DEG, PHI = 0.5 DEG, OMEGA=0, ALPHA=0
INPUT TFINAL=10, INTEGSTP=0.02
CODE DYNAMICS() some_filename.c

View File

@ -0,0 +1,55 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
g, lb, w, h = _sm.symbols('g lb w h', real=True)
theta, phi, omega, alpha = _me.dynamicsymbols('theta phi omega alpha')
theta_d, phi_d, omega_d, alpha_d = _me.dynamicsymbols('theta_ phi_ omega_ alpha_', 1)
theta_dd, phi_dd = _me.dynamicsymbols('theta_ phi_', 2)
frame_n = _me.ReferenceFrame('n')
body_a_cm = _me.Point('a_cm')
body_a_cm.set_vel(frame_n, 0)
body_a_f = _me.ReferenceFrame('a_f')
body_a = _me.RigidBody('a', body_a_cm, body_a_f, _sm.symbols('m'), (_me.outer(body_a_f.x,body_a_f.x),body_a_cm))
body_b_cm = _me.Point('b_cm')
body_b_cm.set_vel(frame_n, 0)
body_b_f = _me.ReferenceFrame('b_f')
body_b = _me.RigidBody('b', body_b_cm, body_b_f, _sm.symbols('m'), (_me.outer(body_b_f.x,body_b_f.x),body_b_cm))
body_a_f.orient(frame_n, 'Axis', [theta, frame_n.y])
body_b_f.orient(body_a_f, 'Axis', [phi, body_a_f.z])
point_o = _me.Point('o')
la = (lb-h/2)/2
body_a_cm.set_pos(point_o, la*body_a_f.z)
body_b_cm.set_pos(point_o, lb*body_a_f.z)
body_a_f.set_ang_vel(frame_n, omega*frame_n.y)
body_b_f.set_ang_vel(body_a_f, alpha*body_a_f.z)
point_o.set_vel(frame_n, 0)
body_a_cm.v2pt_theory(point_o,frame_n,body_a_f)
body_b_cm.v2pt_theory(point_o,frame_n,body_a_f)
ma = _sm.symbols('ma')
body_a.mass = ma
mb = _sm.symbols('mb')
body_b.mass = mb
iaxx = 1/12*ma*(2*la)**2
iayy = iaxx
iazz = 0
ibxx = 1/12*mb*h**2
ibyy = 1/12*mb*(w**2+h**2)
ibzz = 1/12*mb*w**2
body_a.inertia = (_me.inertia(body_a_f, iaxx, iayy, iazz, 0, 0, 0), body_a_cm)
body_b.inertia = (_me.inertia(body_b_f, ibxx, ibyy, ibzz, 0, 0, 0), body_b_cm)
force_a = body_a.mass*(g*frame_n.z)
force_b = body_b.mass*(g*frame_n.z)
kd_eqs = [theta_d - omega, phi_d - alpha]
forceList = [(body_a.masscenter,body_a.mass*(g*frame_n.z)), (body_b.masscenter,body_b.mass*(g*frame_n.z))]
kane = _me.KanesMethod(frame_n, q_ind=[theta,phi], u_ind=[omega, alpha], kd_eqs = kd_eqs)
fr, frstar = kane.kanes_equations([body_a, body_b], forceList)
zero = fr+frstar
from pydy.system import System
sys = System(kane, constants = {g:9.81, lb:0.2, w:0.2, h:0.1, ma:0.01, mb:0.1},
specifieds={},
initial_conditions={theta:_np.deg2rad(90), phi:_np.deg2rad(0.5), omega:0, alpha:0},
times = _np.linspace(0.0, 10, 10/0.02))
y=sys.integrate()

View File

@ -0,0 +1,25 @@
MOTIONVARIABLES' Q{2}', U{2}'
CONSTANTS L,M,G
NEWTONIAN N
FRAMES A,B
SIMPROT(N, A, 3, Q1)
SIMPROT(N, B, 3, Q2)
W_A_N>=U1*N3>
W_B_N>=U2*N3>
POINT O
PARTICLES P,R
P_O_P> = L*A1>
P_P_R> = L*B1>
V_O_N> = 0>
V2PTS(N, A, O, P)
V2PTS(N, B, P, R)
MASS P=M, R=M
Q1' = U1
Q2' = U2
GRAVITY(G*N1>)
ZERO = FR() + FRSTAR()
KANE()
INPUT M=1,G=9.81,L=1
INPUT Q1=.1,Q2=.2,U1=0,U2=0
INPUT TFINAL=10, INTEGSTP=.01
CODE DYNAMICS() some_filename.c

View File

@ -0,0 +1,39 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
q1, q2, u1, u2 = _me.dynamicsymbols('q1 q2 u1 u2')
q1_d, q2_d, u1_d, u2_d = _me.dynamicsymbols('q1_ q2_ u1_ u2_', 1)
l, m, g = _sm.symbols('l m g', real=True)
frame_n = _me.ReferenceFrame('n')
frame_a = _me.ReferenceFrame('a')
frame_b = _me.ReferenceFrame('b')
frame_a.orient(frame_n, 'Axis', [q1, frame_n.z])
frame_b.orient(frame_n, 'Axis', [q2, frame_n.z])
frame_a.set_ang_vel(frame_n, u1*frame_n.z)
frame_b.set_ang_vel(frame_n, u2*frame_n.z)
point_o = _me.Point('o')
particle_p = _me.Particle('p', _me.Point('p_pt'), _sm.Symbol('m'))
particle_r = _me.Particle('r', _me.Point('r_pt'), _sm.Symbol('m'))
particle_p.point.set_pos(point_o, l*frame_a.x)
particle_r.point.set_pos(particle_p.point, l*frame_b.x)
point_o.set_vel(frame_n, 0)
particle_p.point.v2pt_theory(point_o,frame_n,frame_a)
particle_r.point.v2pt_theory(particle_p.point,frame_n,frame_b)
particle_p.mass = m
particle_r.mass = m
force_p = particle_p.mass*(g*frame_n.x)
force_r = particle_r.mass*(g*frame_n.x)
kd_eqs = [q1_d - u1, q2_d - u2]
forceList = [(particle_p.point,particle_p.mass*(g*frame_n.x)), (particle_r.point,particle_r.mass*(g*frame_n.x))]
kane = _me.KanesMethod(frame_n, q_ind=[q1,q2], u_ind=[u1, u2], kd_eqs = kd_eqs)
fr, frstar = kane.kanes_equations([particle_p, particle_r], forceList)
zero = fr+frstar
from pydy.system import System
sys = System(kane, constants = {l:1, m:1, g:9.81},
specifieds={},
initial_conditions={q1:.1, q2:.2, u1:0, u2:0},
times = _np.linspace(0.0, 10, 10/.01))
y=sys.integrate()

View File

@ -0,0 +1,19 @@
CONSTANTS M,K,B,G
MOTIONVARIABLES' POSITION',SPEED'
VARIABLES O
FORCE = O*SIN(T)
NEWTONIAN CEILING
POINTS ORIGIN
V_ORIGIN_CEILING> = 0>
PARTICLES BLOCK
P_ORIGIN_BLOCK> = POSITION*CEILING1>
MASS BLOCK=M
V_BLOCK_CEILING>=SPEED*CEILING1>
POSITION' = SPEED
FORCE_MAGNITUDE = M*G-K*POSITION-B*SPEED+FORCE
FORCE_BLOCK>=EXPLICIT(FORCE_MAGNITUDE*CEILING1>)
ZERO = FR() + FRSTAR()
KANE()
INPUT TFINAL=10.0, INTEGSTP=0.01
INPUT M=1.0, K=1.0, B=0.2, G=9.8, POSITION=0.1, SPEED=-1.0, O=2
CODE DYNAMICS() dummy_file.c

View File

@ -0,0 +1,31 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
m, k, b, g = _sm.symbols('m k b g', real=True)
position, speed = _me.dynamicsymbols('position speed')
position_d, speed_d = _me.dynamicsymbols('position_ speed_', 1)
o = _me.dynamicsymbols('o')
force = o*_sm.sin(_me.dynamicsymbols._t)
frame_ceiling = _me.ReferenceFrame('ceiling')
point_origin = _me.Point('origin')
point_origin.set_vel(frame_ceiling, 0)
particle_block = _me.Particle('block', _me.Point('block_pt'), _sm.Symbol('m'))
particle_block.point.set_pos(point_origin, position*frame_ceiling.x)
particle_block.mass = m
particle_block.point.set_vel(frame_ceiling, speed*frame_ceiling.x)
force_magnitude = m*g-k*position-b*speed+force
force_block = (force_magnitude*frame_ceiling.x).subs({position_d:speed})
kd_eqs = [position_d - speed]
forceList = [(particle_block.point,(force_magnitude*frame_ceiling.x).subs({position_d:speed}))]
kane = _me.KanesMethod(frame_ceiling, q_ind=[position], u_ind=[speed], kd_eqs = kd_eqs)
fr, frstar = kane.kanes_equations([particle_block], forceList)
zero = fr+frstar
from pydy.system import System
sys = System(kane, constants = {m:1.0, k:1.0, b:0.2, g:9.8},
specifieds={_me.dynamicsymbols('t'):lambda x, t: t, o:2},
initial_conditions={position:0.1, speed:-1*1.0},
times = _np.linspace(0.0, 10.0, 10.0/0.01))
y=sys.integrate()

View File

@ -0,0 +1,20 @@
MOTIONVARIABLES' Q{2}''
CONSTANTS L,M,G
NEWTONIAN N
POINT PN
V_PN_N> = 0>
THETA1 = ATAN(Q2/Q1)
FRAMES A
SIMPROT(N, A, 3, THETA1)
PARTICLES P
P_PN_P> = Q1*N1>+Q2*N2>
MASS P=M
V_P_N>=DT(P_P_PN>, N)
F_V = DOT(EXPRESS(V_P_N>,A), A1>)
GRAVITY(G*N1>)
DEPENDENT[1] = F_V
CONSTRAIN(DEPENDENT[Q1'])
ZERO=FR()+FRSTAR()
F_C = MAG(P_P_PN>)-L
CONFIG[1]=F_C
ZERO[2]=CONFIG[1]

View File

@ -0,0 +1,36 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
q1, q2 = _me.dynamicsymbols('q1 q2')
q1_d, q2_d = _me.dynamicsymbols('q1_ q2_', 1)
q1_dd, q2_dd = _me.dynamicsymbols('q1_ q2_', 2)
l, m, g = _sm.symbols('l m g', real=True)
frame_n = _me.ReferenceFrame('n')
point_pn = _me.Point('pn')
point_pn.set_vel(frame_n, 0)
theta1 = _sm.atan(q2/q1)
frame_a = _me.ReferenceFrame('a')
frame_a.orient(frame_n, 'Axis', [theta1, frame_n.z])
particle_p = _me.Particle('p', _me.Point('p_pt'), _sm.Symbol('m'))
particle_p.point.set_pos(point_pn, q1*frame_n.x+q2*frame_n.y)
particle_p.mass = m
particle_p.point.set_vel(frame_n, (point_pn.pos_from(particle_p.point)).dt(frame_n))
f_v = _me.dot((particle_p.point.vel(frame_n)).express(frame_a), frame_a.x)
force_p = particle_p.mass*(g*frame_n.x)
dependent = _sm.Matrix([[0]])
dependent[0] = f_v
velocity_constraints = [i for i in dependent]
u_q1_d = _me.dynamicsymbols('u_q1_d')
u_q2_d = _me.dynamicsymbols('u_q2_d')
kd_eqs = [q1_d-u_q1_d, q2_d-u_q2_d]
forceList = [(particle_p.point,particle_p.mass*(g*frame_n.x))]
kane = _me.KanesMethod(frame_n, q_ind=[q1,q2], u_ind=[u_q2_d], u_dependent=[u_q1_d], kd_eqs = kd_eqs, velocity_constraints = velocity_constraints)
fr, frstar = kane.kanes_equations([particle_p], forceList)
zero = fr+frstar
f_c = point_pn.pos_from(particle_p.point).magnitude()-l
config = _sm.Matrix([[0]])
config[0] = f_c
zero = zero.row_insert(zero.shape[0], _sm.Matrix([[0]]))
zero[zero.shape[0]-1] = config[0]

View File

@ -0,0 +1,8 @@
% ruletest1.al
CONSTANTS F = 3, G = 9.81
CONSTANTS A, B
CONSTANTS S, S1, S2+, S3+, S4-
CONSTANTS K{4}, L{1:3}, P{1:2,1:3}
CONSTANTS C{2,3}
E1 = A*F + S2 - G
E2 = F^2 + K3*K2*G

View File

@ -0,0 +1,15 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
f = _sm.S(3)
g = _sm.S(9.81)
a, b = _sm.symbols('a b', real=True)
s, s1 = _sm.symbols('s s1', real=True)
s2, s3 = _sm.symbols('s2 s3', real=True, nonnegative=True)
s4 = _sm.symbols('s4', real=True, nonpositive=True)
k1, k2, k3, k4, l1, l2, l3, p11, p12, p13, p21, p22, p23 = _sm.symbols('k1 k2 k3 k4 l1 l2 l3 p11 p12 p13 p21 p22 p23', real=True)
c11, c12, c13, c21, c22, c23 = _sm.symbols('c11 c12 c13 c21 c22 c23', real=True)
e1 = a*f+s2-g
e2 = f**2+k3*k2*g

View File

@ -0,0 +1,58 @@
% ruletest10.al
VARIABLES X,Y
COMPLEX ON
CONSTANTS A,B
E = A*(B*X+Y)^2
M = [E;E]
EXPAND(E)
EXPAND(M)
FACTOR(E,X)
FACTOR(M,X)
EQN[1] = A*X + B*Y
EQN[2] = 2*A*X - 3*B*Y
SOLVE(EQN, X, Y)
RHS_Y = RHS(Y)
E = (X+Y)^2 + 2*X^2
ARRANGE(E, 2, X)
CONSTANTS A,B,C
M = [A,B;C,0]
M2 = EVALUATE(M,A=1,B=2,C=3)
EIG(M2, EIGVALUE, EIGVEC)
NEWTONIAN N
FRAMES A
SIMPROT(N, A, N1>, X)
DEGREES OFF
SIMPROT(N, A, N1>, PI/2)
CONSTANTS C{3}
V> = C1*A1> + C2*A2> + C3*A3>
POINTS O, P
P_P_O> = C1*A1>
EXPRESS(V>,N)
EXPRESS(P_P_O>,N)
W_A_N> = C3*A3>
ANGVEL(A,N)
V2PTS(N,A,O,P)
PARTICLES P{2}
V2PTS(N,A,P1,P2)
A2PTS(N,A,P1,P)
BODIES B{2}
CONSTANT G
GRAVITY(G*N1>)
VARIABLE Z
V> = X*A1> + Y*A3>
P_P_O> = X*A1> + Y*A2>
X = 2*Z
Y = Z
EXPLICIT(V>)
EXPLICIT(P_P_O>)
FORCE(O/P1, X*Y*A1>)
FORCE(P2, X*Y*A1>)

View File

@ -0,0 +1,64 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
x, y = _me.dynamicsymbols('x y')
a, b = _sm.symbols('a b', real=True)
e = a*(b*x+y)**2
m = _sm.Matrix([e,e]).reshape(2, 1)
e = e.expand()
m = _sm.Matrix([i.expand() for i in m]).reshape((m).shape[0], (m).shape[1])
e = _sm.factor(e, x)
m = _sm.Matrix([_sm.factor(i,x) for i in m]).reshape((m).shape[0], (m).shape[1])
eqn = _sm.Matrix([[0]])
eqn[0] = a*x+b*y
eqn = eqn.row_insert(eqn.shape[0], _sm.Matrix([[0]]))
eqn[eqn.shape[0]-1] = 2*a*x-3*b*y
print(_sm.solve(eqn,x,y))
rhs_y = _sm.solve(eqn,x,y)[y]
e = (x+y)**2+2*x**2
e.collect(x)
a, b, c = _sm.symbols('a b c', real=True)
m = _sm.Matrix([a,b,c,0]).reshape(2, 2)
m2 = _sm.Matrix([i.subs({a:1,b:2,c:3}) for i in m]).reshape((m).shape[0], (m).shape[1])
eigvalue = _sm.Matrix([i.evalf() for i in (m2).eigenvals().keys()])
eigvec = _sm.Matrix([i[2][0].evalf() for i in (m2).eigenvects()]).reshape(m2.shape[0], m2.shape[1])
frame_n = _me.ReferenceFrame('n')
frame_a = _me.ReferenceFrame('a')
frame_a.orient(frame_n, 'Axis', [x, frame_n.x])
frame_a.orient(frame_n, 'Axis', [_sm.pi/2, frame_n.x])
c1, c2, c3 = _sm.symbols('c1 c2 c3', real=True)
v = c1*frame_a.x+c2*frame_a.y+c3*frame_a.z
point_o = _me.Point('o')
point_p = _me.Point('p')
point_o.set_pos(point_p, c1*frame_a.x)
v = (v).express(frame_n)
point_o.set_pos(point_p, (point_o.pos_from(point_p)).express(frame_n))
frame_a.set_ang_vel(frame_n, c3*frame_a.z)
print(frame_n.ang_vel_in(frame_a))
point_p.v2pt_theory(point_o,frame_n,frame_a)
particle_p1 = _me.Particle('p1', _me.Point('p1_pt'), _sm.Symbol('m'))
particle_p2 = _me.Particle('p2', _me.Point('p2_pt'), _sm.Symbol('m'))
particle_p2.point.v2pt_theory(particle_p1.point,frame_n,frame_a)
point_p.a2pt_theory(particle_p1.point,frame_n,frame_a)
body_b1_cm = _me.Point('b1_cm')
body_b1_cm.set_vel(frame_n, 0)
body_b1_f = _me.ReferenceFrame('b1_f')
body_b1 = _me.RigidBody('b1', body_b1_cm, body_b1_f, _sm.symbols('m'), (_me.outer(body_b1_f.x,body_b1_f.x),body_b1_cm))
body_b2_cm = _me.Point('b2_cm')
body_b2_cm.set_vel(frame_n, 0)
body_b2_f = _me.ReferenceFrame('b2_f')
body_b2 = _me.RigidBody('b2', body_b2_cm, body_b2_f, _sm.symbols('m'), (_me.outer(body_b2_f.x,body_b2_f.x),body_b2_cm))
g = _sm.symbols('g', real=True)
force_p1 = particle_p1.mass*(g*frame_n.x)
force_p2 = particle_p2.mass*(g*frame_n.x)
force_b1 = body_b1.mass*(g*frame_n.x)
force_b2 = body_b2.mass*(g*frame_n.x)
z = _me.dynamicsymbols('z')
v = x*frame_a.x+y*frame_a.z
point_o.set_pos(point_p, x*frame_a.x+y*frame_a.y)
v = (v).subs({x:2*z, y:z})
point_o.set_pos(point_p, (point_o.pos_from(point_p)).subs({x:2*z, y:z}))
force_o = -1*(x*y*frame_a.x)
force_p1 = particle_p1.mass*(g*frame_n.x)+ x*y*frame_a.x

View File

@ -0,0 +1,6 @@
VARIABLES X, Y
CONSTANTS A{1:2, 1:2}, B{1:2}
EQN[1] = A11*x + A12*y - B1
EQN[2] = A21*x + A22*y - B2
INPUT A11=2, A12=5, A21=3, A22=4, B1=7, B2=6
CODE ALGEBRAIC(EQN, X, Y) some_filename.c

View File

@ -0,0 +1,14 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
x, y = _me.dynamicsymbols('x y')
a11, a12, a21, a22, b1, b2 = _sm.symbols('a11 a12 a21 a22 b1 b2', real=True)
eqn = _sm.Matrix([[0]])
eqn[0] = a11*x+a12*y-b1
eqn = eqn.row_insert(eqn.shape[0], _sm.Matrix([[0]]))
eqn[eqn.shape[0]-1] = a21*x+a22*y-b2
eqn_list = []
for i in eqn: eqn_list.append(i.subs({a11:2, a12:5, a21:3, a22:4, b1:7, b2:6}))
print(_sm.linsolve(eqn_list, x,y))

View File

@ -0,0 +1,7 @@
VARIABLES X,Y
CONSTANTS A,B,R
EQN[1] = A*X^3+B*Y^2-R
EQN[2] = A*SIN(X)^2 + B*COS(2*Y) - R^2
INPUT A=2.0, B=3.0, R=1.0
INPUT X = 30 DEG, Y = 3.14
CODE NONLINEAR(EQN,X,Y) some_filename.c

View File

@ -0,0 +1,14 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
x, y = _me.dynamicsymbols('x y')
a, b, r = _sm.symbols('a b r', real=True)
eqn = _sm.Matrix([[0]])
eqn[0] = a*x**3+b*y**2-r
eqn = eqn.row_insert(eqn.shape[0], _sm.Matrix([[0]]))
eqn[eqn.shape[0]-1] = a*_sm.sin(x)**2+b*_sm.cos(2*y)-r**2
matrix_list = []
for i in eqn:matrix_list.append(i.subs({a:2.0, b:3.0, r:1.0}))
print(_sm.nsolve(matrix_list,(x,y),(_np.deg2rad(30),3.14)))

View File

@ -0,0 +1,12 @@
% ruletest2.al
VARIABLES X1,X2
SPECIFIED F1 = X1*X2 + 3*X1^2
SPECIFIED F2=X1*T+X2*T^2
VARIABLE X', Y''
MOTIONVARIABLES Q{3}, U{2}
VARIABLES P{2}'
VARIABLE W{3}', R{2}''
VARIABLES C{1:2, 1:2}
VARIABLES D{1,3}
VARIABLES J{1:2}
IMAGINARY N

View File

@ -0,0 +1,22 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
x1, x2 = _me.dynamicsymbols('x1 x2')
f1 = x1*x2+3*x1**2
f2 = x1*_me.dynamicsymbols._t+x2*_me.dynamicsymbols._t**2
x, y = _me.dynamicsymbols('x y')
x_d, y_d = _me.dynamicsymbols('x_ y_', 1)
y_dd = _me.dynamicsymbols('y_', 2)
q1, q2, q3, u1, u2 = _me.dynamicsymbols('q1 q2 q3 u1 u2')
p1, p2 = _me.dynamicsymbols('p1 p2')
p1_d, p2_d = _me.dynamicsymbols('p1_ p2_', 1)
w1, w2, w3, r1, r2 = _me.dynamicsymbols('w1 w2 w3 r1 r2')
w1_d, w2_d, w3_d, r1_d, r2_d = _me.dynamicsymbols('w1_ w2_ w3_ r1_ r2_', 1)
r1_dd, r2_dd = _me.dynamicsymbols('r1_ r2_', 2)
c11, c12, c21, c22 = _me.dynamicsymbols('c11 c12 c21 c22')
d11, d12, d13 = _me.dynamicsymbols('d11 d12 d13')
j1, j2 = _me.dynamicsymbols('j1 j2')
n = _sm.symbols('n')
n = _sm.I

View File

@ -0,0 +1,25 @@
% ruletest3.al
FRAMES A, B
NEWTONIAN N
VARIABLES X{3}
CONSTANTS L
V1> = X1*A1> + X2*A2> + X3*A3>
V2> = X1*B1> + X2*B2> + X3*B3>
V3> = X1*N1> + X2*N2> + X3*N3>
V> = V1> + V2> + V3>
POINTS C, D
POINTS PO{3}
PARTICLES L
PARTICLES P{3}
BODIES S
BODIES R{2}
V4> = X1*S1> + X2*S2> + X3*S3>
P_C_SO> = L*N1>

View File

@ -0,0 +1,37 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
frame_a = _me.ReferenceFrame('a')
frame_b = _me.ReferenceFrame('b')
frame_n = _me.ReferenceFrame('n')
x1, x2, x3 = _me.dynamicsymbols('x1 x2 x3')
l = _sm.symbols('l', real=True)
v1 = x1*frame_a.x+x2*frame_a.y+x3*frame_a.z
v2 = x1*frame_b.x+x2*frame_b.y+x3*frame_b.z
v3 = x1*frame_n.x+x2*frame_n.y+x3*frame_n.z
v = v1+v2+v3
point_c = _me.Point('c')
point_d = _me.Point('d')
point_po1 = _me.Point('po1')
point_po2 = _me.Point('po2')
point_po3 = _me.Point('po3')
particle_l = _me.Particle('l', _me.Point('l_pt'), _sm.Symbol('m'))
particle_p1 = _me.Particle('p1', _me.Point('p1_pt'), _sm.Symbol('m'))
particle_p2 = _me.Particle('p2', _me.Point('p2_pt'), _sm.Symbol('m'))
particle_p3 = _me.Particle('p3', _me.Point('p3_pt'), _sm.Symbol('m'))
body_s_cm = _me.Point('s_cm')
body_s_cm.set_vel(frame_n, 0)
body_s_f = _me.ReferenceFrame('s_f')
body_s = _me.RigidBody('s', body_s_cm, body_s_f, _sm.symbols('m'), (_me.outer(body_s_f.x,body_s_f.x),body_s_cm))
body_r1_cm = _me.Point('r1_cm')
body_r1_cm.set_vel(frame_n, 0)
body_r1_f = _me.ReferenceFrame('r1_f')
body_r1 = _me.RigidBody('r1', body_r1_cm, body_r1_f, _sm.symbols('m'), (_me.outer(body_r1_f.x,body_r1_f.x),body_r1_cm))
body_r2_cm = _me.Point('r2_cm')
body_r2_cm.set_vel(frame_n, 0)
body_r2_f = _me.ReferenceFrame('r2_f')
body_r2 = _me.RigidBody('r2', body_r2_cm, body_r2_f, _sm.symbols('m'), (_me.outer(body_r2_f.x,body_r2_f.x),body_r2_cm))
v4 = x1*body_s_f.x+x2*body_s_f.y+x3*body_s_f.z
body_s_cm.set_pos(point_c, l*frame_n.x)

View File

@ -0,0 +1,20 @@
% ruletest4.al
FRAMES A, B
MOTIONVARIABLES Q{3}
SIMPROT(A, B, 1, Q3)
DCM = A_B
M = DCM*3 - A_B
VARIABLES R
CIRCLE_AREA = PI*R^2
VARIABLES U, A
VARIABLES X, Y
S = U*T - 1/2*A*T^2
EXPR1 = 2*A*0.5 - 1.25 + 0.25
EXPR2 = -X^2 + Y^2 + 0.25*(X+Y)^2
EXPR3 = 0.5E-10
DYADIC>> = A1>*A1> + A2>*A2> + A3>*A3>

View File

@ -0,0 +1,20 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
frame_a = _me.ReferenceFrame('a')
frame_b = _me.ReferenceFrame('b')
q1, q2, q3 = _me.dynamicsymbols('q1 q2 q3')
frame_b.orient(frame_a, 'Axis', [q3, frame_a.x])
dcm = frame_a.dcm(frame_b)
m = dcm*3-frame_a.dcm(frame_b)
r = _me.dynamicsymbols('r')
circle_area = _sm.pi*r**2
u, a = _me.dynamicsymbols('u a')
x, y = _me.dynamicsymbols('x y')
s = u*_me.dynamicsymbols._t-1/2*a*_me.dynamicsymbols._t**2
expr1 = 2*a*0.5-1.25+0.25
expr2 = -1*x**2+y**2+0.25*(x+y)**2
expr3 = 0.5*10**(-10)
dyadic = _me.outer(frame_a.x, frame_a.x)+_me.outer(frame_a.y, frame_a.y)+_me.outer(frame_a.z, frame_a.z)

View File

@ -0,0 +1,32 @@
% ruletest5.al
VARIABLES X', Y'
E1 = (X+Y)^2 + (X-Y)^3
E2 = (X-Y)^2
E3 = X^2 + Y^2 + 2*X*Y
M1 = [E1;E2]
M2 = [(X+Y)^2,(X-Y)^2]
M3 = M1 + [X;Y]
AM = EXPAND(M1)
CM = EXPAND([(X+Y)^2,(X-Y)^2])
EM = EXPAND(M1 + [X;Y])
F = EXPAND(E1)
G = EXPAND(E2)
A = FACTOR(E3, X)
BM = FACTOR(M1, X)
CM = FACTOR(M1 + [X;Y], X)
A = D(E3, X)
B = D(E3, Y)
CM = D(M2, X)
DM = D(M1 + [X;Y], X)
FRAMES A, B
A_B = [1,0,0;1,0,0;1,0,0]
V1> = X*A1> + Y*A2> + X*Y*A3>
E> = D(V1>, X, B)
FM = DT(M1)
GM = DT([(X+Y)^2,(X-Y)^2])
H> = DT(V1>, B)

View File

@ -0,0 +1,33 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
x, y = _me.dynamicsymbols('x y')
x_d, y_d = _me.dynamicsymbols('x_ y_', 1)
e1 = (x+y)**2+(x-y)**3
e2 = (x-y)**2
e3 = x**2+y**2+2*x*y
m1 = _sm.Matrix([e1,e2]).reshape(2, 1)
m2 = _sm.Matrix([(x+y)**2,(x-y)**2]).reshape(1, 2)
m3 = m1+_sm.Matrix([x,y]).reshape(2, 1)
am = _sm.Matrix([i.expand() for i in m1]).reshape((m1).shape[0], (m1).shape[1])
cm = _sm.Matrix([i.expand() for i in _sm.Matrix([(x+y)**2,(x-y)**2]).reshape(1, 2)]).reshape((_sm.Matrix([(x+y)**2,(x-y)**2]).reshape(1, 2)).shape[0], (_sm.Matrix([(x+y)**2,(x-y)**2]).reshape(1, 2)).shape[1])
em = _sm.Matrix([i.expand() for i in m1+_sm.Matrix([x,y]).reshape(2, 1)]).reshape((m1+_sm.Matrix([x,y]).reshape(2, 1)).shape[0], (m1+_sm.Matrix([x,y]).reshape(2, 1)).shape[1])
f = (e1).expand()
g = (e2).expand()
a = _sm.factor((e3), x)
bm = _sm.Matrix([_sm.factor(i, x) for i in m1]).reshape((m1).shape[0], (m1).shape[1])
cm = _sm.Matrix([_sm.factor(i, x) for i in m1+_sm.Matrix([x,y]).reshape(2, 1)]).reshape((m1+_sm.Matrix([x,y]).reshape(2, 1)).shape[0], (m1+_sm.Matrix([x,y]).reshape(2, 1)).shape[1])
a = (e3).diff(x)
b = (e3).diff(y)
cm = _sm.Matrix([i.diff(x) for i in m2]).reshape((m2).shape[0], (m2).shape[1])
dm = _sm.Matrix([i.diff(x) for i in m1+_sm.Matrix([x,y]).reshape(2, 1)]).reshape((m1+_sm.Matrix([x,y]).reshape(2, 1)).shape[0], (m1+_sm.Matrix([x,y]).reshape(2, 1)).shape[1])
frame_a = _me.ReferenceFrame('a')
frame_b = _me.ReferenceFrame('b')
frame_b.orient(frame_a, 'DCM', _sm.Matrix([1,0,0,1,0,0,1,0,0]).reshape(3, 3))
v1 = x*frame_a.x+y*frame_a.y+x*y*frame_a.z
e = (v1).diff(x, frame_b)
fm = _sm.Matrix([i.diff(_sm.Symbol('t')) for i in m1]).reshape((m1).shape[0], (m1).shape[1])
gm = _sm.Matrix([i.diff(_sm.Symbol('t')) for i in _sm.Matrix([(x+y)**2,(x-y)**2]).reshape(1, 2)]).reshape((_sm.Matrix([(x+y)**2,(x-y)**2]).reshape(1, 2)).shape[0], (_sm.Matrix([(x+y)**2,(x-y)**2]).reshape(1, 2)).shape[1])
h = (v1).dt(frame_b)

View File

@ -0,0 +1,41 @@
% ruletest6.al
VARIABLES Q{2}
VARIABLES X,Y,Z
Q1 = X^2 + Y^2
Q2 = X-Y
E = Q1 + Q2
A = EXPLICIT(E)
E2 = COS(X)
E3 = COS(X*Y)
A = TAYLOR(E2, 0:2, X=0)
B = TAYLOR(E3, 0:2, X=0, Y=0)
E = EXPAND((X+Y)^2)
A = EVALUATE(E, X=1, Y=Z)
BM = EVALUATE([E;2*E], X=1, Y=Z)
E = Q1 + Q2
A = EVALUATE(E, X=2, Y=Z^2)
CONSTANTS J,K,L
P1 = POLYNOMIAL([J,K,L],X)
P2 = POLYNOMIAL(J*X+K,X,1)
ROOT1 = ROOTS(P1, X, 2)
ROOT2 = ROOTS([1;2;3])
M = [1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16]
AM = TRANSPOSE(M) + M
BM = EIG(M)
C1 = DIAGMAT(4, 1)
C2 = DIAGMAT(3, 4, 2)
DM = INV(M+C1)
E = DET(M+C1) + TRACE([1,0;0,1])
F = ELEMENT(M, 2, 3)
A = COLS(M)
BM = COLS(M, 1)
CM = COLS(M, 1, 2:4, 3)
DM = ROWS(M, 1)
EM = ROWS(M, 1, 2:4, 3)

View File

@ -0,0 +1,36 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
q1, q2 = _me.dynamicsymbols('q1 q2')
x, y, z = _me.dynamicsymbols('x y z')
e = q1+q2
a = (e).subs({q1:x**2+y**2, q2:x-y})
e2 = _sm.cos(x)
e3 = _sm.cos(x*y)
a = (e2).series(x, 0, 2).removeO()
b = (e3).series(x, 0, 2).removeO().series(y, 0, 2).removeO()
e = ((x+y)**2).expand()
a = (e).subs({q1:x**2+y**2,q2:x-y}).subs({x:1,y:z})
bm = _sm.Matrix([i.subs({x:1,y:z}) for i in _sm.Matrix([e,2*e]).reshape(2, 1)]).reshape((_sm.Matrix([e,2*e]).reshape(2, 1)).shape[0], (_sm.Matrix([e,2*e]).reshape(2, 1)).shape[1])
e = q1+q2
a = (e).subs({q1:x**2+y**2,q2:x-y}).subs({x:2,y:z**2})
j, k, l = _sm.symbols('j k l', real=True)
p1 = _sm.Poly(_sm.Matrix([j,k,l]).reshape(1, 3), x)
p2 = _sm.Poly(j*x+k, x)
root1 = [i.evalf() for i in _sm.solve(p1, x)]
root2 = [i.evalf() for i in _sm.solve(_sm.Poly(_sm.Matrix([1,2,3]).reshape(3, 1), x),x)]
m = _sm.Matrix([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).reshape(4, 4)
am = (m).T+m
bm = _sm.Matrix([i.evalf() for i in (m).eigenvals().keys()])
c1 = _sm.diag(1,1,1,1)
c2 = _sm.Matrix([2 if i==j else 0 for i in range(3) for j in range(4)]).reshape(3, 4)
dm = (m+c1)**(-1)
e = (m+c1).det()+(_sm.Matrix([1,0,0,1]).reshape(2, 2)).trace()
f = (m)[1,2]
a = (m).cols
bm = (m).col(0)
cm = _sm.Matrix([(m).T.row(0),(m).T.row(1),(m).T.row(2),(m).T.row(3),(m).T.row(2)])
dm = (m).row(0)
em = _sm.Matrix([(m).row(0),(m).row(1),(m).row(2),(m).row(3),(m).row(2)])

View File

@ -0,0 +1,39 @@
% ruletest7.al
VARIABLES X', Y'
E = COS(X) + SIN(X) + TAN(X)&
+ COSH(X) + SINH(X) + TANH(X)&
+ ACOS(X) + ASIN(X) + ATAN(X)&
+ LOG(X) + EXP(X) + SQRT(X)&
+ FACTORIAL(X) + CEIL(X) +&
FLOOR(X) + SIGN(X)
E = SQR(X) + LOG10(X)
A = ABS(-1) + INT(1.5) + ROUND(1.9)
E1 = 2*X + 3*Y
E2 = X + Y
AM = COEF([E1;E2], [X,Y])
B = COEF(E1, X)
C = COEF(E2, Y)
D1 = EXCLUDE(E1, X)
D2 = INCLUDE(E1, X)
FM = ARRANGE([E1,E2],2,X)
F = ARRANGE(E1, 2, Y)
G = REPLACE(E1, X=2*X)
GM = REPLACE([E1;E2], X=3)
FRAMES A, B
VARIABLES THETA
SIMPROT(A,B,3,THETA)
V1> = 2*A1> - 3*A2> + A3>
V2> = B1> + B2> + B3>
A = DOT(V1>, V2>)
BM = DOT(V1>, [V2>;2*V2>])
C> = CROSS(V1>,V2>)
D = MAG(2*V1>) + MAG(3*V1>)
DYADIC>> = 3*A1>*A1> + A2>*A2> + 2*A3>*A3>
AM = MATRIX(B, DYADIC>>)
M = [1;2;3]
V> = VECTOR(A, M)

View File

@ -0,0 +1,35 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
x, y = _me.dynamicsymbols('x y')
x_d, y_d = _me.dynamicsymbols('x_ y_', 1)
e = _sm.cos(x)+_sm.sin(x)+_sm.tan(x)+_sm.cosh(x)+_sm.sinh(x)+_sm.tanh(x)+_sm.acos(x)+_sm.asin(x)+_sm.atan(x)+_sm.log(x)+_sm.exp(x)+_sm.sqrt(x)+_sm.factorial(x)+_sm.ceiling(x)+_sm.floor(x)+_sm.sign(x)
e = (x)**2+_sm.log(x, 10)
a = _sm.Abs(-1*1)+int(1.5)+round(1.9)
e1 = 2*x+3*y
e2 = x+y
am = _sm.Matrix([e1.expand().coeff(x), e1.expand().coeff(y), e2.expand().coeff(x), e2.expand().coeff(y)]).reshape(2, 2)
b = (e1).expand().coeff(x)
c = (e2).expand().coeff(y)
d1 = (e1).collect(x).coeff(x,0)
d2 = (e1).collect(x).coeff(x,1)
fm = _sm.Matrix([i.collect(x)for i in _sm.Matrix([e1,e2]).reshape(1, 2)]).reshape((_sm.Matrix([e1,e2]).reshape(1, 2)).shape[0], (_sm.Matrix([e1,e2]).reshape(1, 2)).shape[1])
f = (e1).collect(y)
g = (e1).subs({x:2*x})
gm = _sm.Matrix([i.subs({x:3}) for i in _sm.Matrix([e1,e2]).reshape(2, 1)]).reshape((_sm.Matrix([e1,e2]).reshape(2, 1)).shape[0], (_sm.Matrix([e1,e2]).reshape(2, 1)).shape[1])
frame_a = _me.ReferenceFrame('a')
frame_b = _me.ReferenceFrame('b')
theta = _me.dynamicsymbols('theta')
frame_b.orient(frame_a, 'Axis', [theta, frame_a.z])
v1 = 2*frame_a.x-3*frame_a.y+frame_a.z
v2 = frame_b.x+frame_b.y+frame_b.z
a = _me.dot(v1, v2)
bm = _sm.Matrix([_me.dot(v1, v2),_me.dot(v1, 2*v2)]).reshape(2, 1)
c = _me.cross(v1, v2)
d = 2*v1.magnitude()+3*v1.magnitude()
dyadic = _me.outer(3*frame_a.x, frame_a.x)+_me.outer(frame_a.y, frame_a.y)+_me.outer(2*frame_a.z, frame_a.z)
am = (dyadic).to_matrix(frame_b)
m = _sm.Matrix([1,2,3]).reshape(3, 1)
v = m[0]*frame_a.x +m[1]*frame_a.y +m[2]*frame_a.z

View File

@ -0,0 +1,38 @@
% ruletest8.al
FRAMES A
CONSTANTS C{3}
A>> = EXPRESS(1>>,A)
PARTICLES P1, P2
BODIES R
R_A = [1,1,1;1,1,0;0,0,1]
POINT O
MASS P1=M1, P2=M2, R=MR
INERTIA R, I1, I2, I3
P_P1_O> = C1*A1>
P_P2_O> = C2*A2>
P_RO_O> = C3*A3>
A>> = EXPRESS(I_P1_O>>, A)
A>> = EXPRESS(I_P2_O>>, A)
A>> = EXPRESS(I_R_O>>, A)
A>> = EXPRESS(INERTIA(O), A)
A>> = EXPRESS(INERTIA(O, P1, R), A)
A>> = EXPRESS(I_R_O>>, A)
A>> = EXPRESS(I_R_RO>>, A)
P_P1_P2> = C1*A1> + C2*A2>
P_P1_RO> = C3*A1>
P_P2_RO> = C3*A2>
B> = CM(O)
B> = CM(O, P1, R)
B> = CM(P1)
MOTIONVARIABLES U{3}
V> = U1*A1> + U2*A2> + U3*A3>
U> = UNITVEC(V> + C1*A1>)
V_P1_A> = U1*A1>
A> = PARTIALS(V_P1_A>, U1)
M = MASS(P1,R)
M = MASS(P2)
M = MASS()

View File

@ -0,0 +1,49 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
frame_a = _me.ReferenceFrame('a')
c1, c2, c3 = _sm.symbols('c1 c2 c3', real=True)
a = _me.inertia(frame_a, 1, 1, 1)
particle_p1 = _me.Particle('p1', _me.Point('p1_pt'), _sm.Symbol('m'))
particle_p2 = _me.Particle('p2', _me.Point('p2_pt'), _sm.Symbol('m'))
body_r_cm = _me.Point('r_cm')
body_r_f = _me.ReferenceFrame('r_f')
body_r = _me.RigidBody('r', body_r_cm, body_r_f, _sm.symbols('m'), (_me.outer(body_r_f.x,body_r_f.x),body_r_cm))
frame_a.orient(body_r_f, 'DCM', _sm.Matrix([1,1,1,1,1,0,0,0,1]).reshape(3, 3))
point_o = _me.Point('o')
m1 = _sm.symbols('m1')
particle_p1.mass = m1
m2 = _sm.symbols('m2')
particle_p2.mass = m2
mr = _sm.symbols('mr')
body_r.mass = mr
i1 = _sm.symbols('i1')
i2 = _sm.symbols('i2')
i3 = _sm.symbols('i3')
body_r.inertia = (_me.inertia(body_r_f, i1, i2, i3, 0, 0, 0), body_r_cm)
point_o.set_pos(particle_p1.point, c1*frame_a.x)
point_o.set_pos(particle_p2.point, c2*frame_a.y)
point_o.set_pos(body_r_cm, c3*frame_a.z)
a = _me.inertia_of_point_mass(particle_p1.mass, particle_p1.point.pos_from(point_o), frame_a)
a = _me.inertia_of_point_mass(particle_p2.mass, particle_p2.point.pos_from(point_o), frame_a)
a = body_r.inertia[0] + _me.inertia_of_point_mass(body_r.mass, body_r.masscenter.pos_from(point_o), frame_a)
a = _me.inertia_of_point_mass(particle_p1.mass, particle_p1.point.pos_from(point_o), frame_a) + _me.inertia_of_point_mass(particle_p2.mass, particle_p2.point.pos_from(point_o), frame_a) + body_r.inertia[0] + _me.inertia_of_point_mass(body_r.mass, body_r.masscenter.pos_from(point_o), frame_a)
a = _me.inertia_of_point_mass(particle_p1.mass, particle_p1.point.pos_from(point_o), frame_a) + body_r.inertia[0] + _me.inertia_of_point_mass(body_r.mass, body_r.masscenter.pos_from(point_o), frame_a)
a = body_r.inertia[0] + _me.inertia_of_point_mass(body_r.mass, body_r.masscenter.pos_from(point_o), frame_a)
a = body_r.inertia[0]
particle_p2.point.set_pos(particle_p1.point, c1*frame_a.x+c2*frame_a.y)
body_r_cm.set_pos(particle_p1.point, c3*frame_a.x)
body_r_cm.set_pos(particle_p2.point, c3*frame_a.y)
b = _me.functions.center_of_mass(point_o,particle_p1, particle_p2, body_r)
b = _me.functions.center_of_mass(point_o,particle_p1, body_r)
b = _me.functions.center_of_mass(particle_p1.point,particle_p1, particle_p2, body_r)
u1, u2, u3 = _me.dynamicsymbols('u1 u2 u3')
v = u1*frame_a.x+u2*frame_a.y+u3*frame_a.z
u = (v+c1*frame_a.x).normalize()
particle_p1.point.set_vel(frame_a, u1*frame_a.x)
a = particle_p1.point.partial_velocity(frame_a, u1)
m = particle_p1.mass+body_r.mass
m = particle_p2.mass
m = particle_p1.mass+particle_p2.mass+body_r.mass

View File

@ -0,0 +1,54 @@
% ruletest9.al
NEWTONIAN N
FRAMES A
A> = 0>
D>> = EXPRESS(1>>, A)
POINTS PO{2}
PARTICLES P{2}
MOTIONVARIABLES' C{3}'
BODIES R
P_P1_PO2> = C1*A1>
V> = 2*P_P1_PO2> + C2*A2>
W_A_N> = C3*A3>
V> = 2*W_A_N> + C2*A2>
W_R_N> = C3*A3>
V> = 2*W_R_N> + C2*A2>
ALF_A_N> = DT(W_A_N>, A)
V> = 2*ALF_A_N> + C2*A2>
V_P1_A> = C1*A1> + C3*A2>
A_RO_N> = C2*A2>
V_A> = CROSS(A_RO_N>, V_P1_A>)
X_B_C> = V_A>
X_B_D> = 2*X_B_C>
A_B_C_D_E> = X_B_D>*2
A_B_C = 2*C1*C2*C3
A_B_C += 2*C1
A_B_C := 3*C1
MOTIONVARIABLES' Q{2}', U{2}'
Q1' = U1
Q2' = U2
VARIABLES X'', Y''
SPECIFIED YY
Y'' = X*X'^2 + 1
YY = X*X'^2 + 1
M[1] = 2*X
M[2] = 2*Y
A = 2*M[1]
M = [1,2,3;4,5,6;7,8,9]
M[1, 2] = 5
A = M[1, 2]*2
FORCE_RO> = Q1*N1>
TORQUE_A> = Q2*N3>
FORCE_RO> = Q2*N2>
F> = FORCE_RO>*2

View File

@ -0,0 +1,55 @@
import sympy.physics.mechanics as _me
import sympy as _sm
import math as m
import numpy as _np
frame_n = _me.ReferenceFrame('n')
frame_a = _me.ReferenceFrame('a')
a = 0
d = _me.inertia(frame_a, 1, 1, 1)
point_po1 = _me.Point('po1')
point_po2 = _me.Point('po2')
particle_p1 = _me.Particle('p1', _me.Point('p1_pt'), _sm.Symbol('m'))
particle_p2 = _me.Particle('p2', _me.Point('p2_pt'), _sm.Symbol('m'))
c1, c2, c3 = _me.dynamicsymbols('c1 c2 c3')
c1_d, c2_d, c3_d = _me.dynamicsymbols('c1_ c2_ c3_', 1)
body_r_cm = _me.Point('r_cm')
body_r_cm.set_vel(frame_n, 0)
body_r_f = _me.ReferenceFrame('r_f')
body_r = _me.RigidBody('r', body_r_cm, body_r_f, _sm.symbols('m'), (_me.outer(body_r_f.x,body_r_f.x),body_r_cm))
point_po2.set_pos(particle_p1.point, c1*frame_a.x)
v = 2*point_po2.pos_from(particle_p1.point)+c2*frame_a.y
frame_a.set_ang_vel(frame_n, c3*frame_a.z)
v = 2*frame_a.ang_vel_in(frame_n)+c2*frame_a.y
body_r_f.set_ang_vel(frame_n, c3*frame_a.z)
v = 2*body_r_f.ang_vel_in(frame_n)+c2*frame_a.y
frame_a.set_ang_acc(frame_n, (frame_a.ang_vel_in(frame_n)).dt(frame_a))
v = 2*frame_a.ang_acc_in(frame_n)+c2*frame_a.y
particle_p1.point.set_vel(frame_a, c1*frame_a.x+c3*frame_a.y)
body_r_cm.set_acc(frame_n, c2*frame_a.y)
v_a = _me.cross(body_r_cm.acc(frame_n), particle_p1.point.vel(frame_a))
x_b_c = v_a
x_b_d = 2*x_b_c
a_b_c_d_e = x_b_d*2
a_b_c = 2*c1*c2*c3
a_b_c += 2*c1
a_b_c = 3*c1
q1, q2, u1, u2 = _me.dynamicsymbols('q1 q2 u1 u2')
q1_d, q2_d, u1_d, u2_d = _me.dynamicsymbols('q1_ q2_ u1_ u2_', 1)
x, y = _me.dynamicsymbols('x y')
x_d, y_d = _me.dynamicsymbols('x_ y_', 1)
x_dd, y_dd = _me.dynamicsymbols('x_ y_', 2)
yy = _me.dynamicsymbols('yy')
yy = x*x_d**2+1
m = _sm.Matrix([[0]])
m[0] = 2*x
m = m.row_insert(m.shape[0], _sm.Matrix([[0]]))
m[m.shape[0]-1] = 2*y
a = 2*m[0]
m = _sm.Matrix([1,2,3,4,5,6,7,8,9]).reshape(3, 3)
m[0,1] = 5
a = m[0, 1]*2
force_ro = q1*frame_n.x
torque_a = q2*frame_n.z
force_ro = q1*frame_n.x + q2*frame_n.y
f = force_ro*2