Skip to content

Development #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 23 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 80 additions & 7 deletions PS.g4
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ CMD_MATRIX_END: '\\end' L_BRACE MATRIX_TYPES R_BRACE;
MATRIX_DEL_COL: '&';
MATRIX_DEL_ROW: '\\\\';


//accents such as overline and hat
ACCENT_OVERLINE: '\\overline';
ACCENT_BAR: '\\bar';
Expand Down Expand Up @@ -135,15 +136,28 @@ E_NOTATION: NUMBER E_NOTATION_E (SUB | ADD)? DIGIT+;

EQUAL: '=';
LT: '<';
LTE: '\\leq' | '\\le';
LTE: '\\leq';
GT: '>';
GTE: '\\geq' | '\\ge';
GTE: '\\geq';
UNEQUAL: '!=' | '\\ne' | '\\neq';

fragment C_AND: '\\cand';
fragment C_OR: '\\cor';
fragment C_NOT: '\\cnot';

fragment AND: '\\land';
fragment OR: '\\lor';
fragment NOT: '\\neg';

fragment FOR: '\\for';

fragment LENGTH: '\\len';

BANG: '!';

fragment PERCENT_SIGN: '\\%';
PERCENT_NUMBER: NUMBER PERCENT_SIGN;
fragment PERCENT_SIGN_K: '\\‰' | '\\per_thousand';
PERCENT_NUMBER: NUMBER (PERCENT_SIGN | PERCENT_SIGN_K);

//Excludes some letters for use as e.g. constants in SYMBOL
GREEK_LETTER:
Expand Down Expand Up @@ -202,14 +216,73 @@ GREEK_LETTER:
'\\omega';

fragment PI: '\\pi';

fragment INFTY_CMD: '\\infty';
fragment INFTY: INFTY_CMD | DOLLAR_SIGN INFTY_CMD | INFTY_CMD PERCENT_SIGN;
fragment EMPTYSET: '\\emptyset';
SYMBOL: PI | INFTY | EMPTYSET;
SYMBOL: PI | INFTY | EMPTYSET ;


fragment VARIABLE_CMD: '\\variable';
fragment VARIABLE_SYMBOL: (GREEK_LETTER [ ]? | LETTER | DIGIT)+ (UNDERSCORE ((L_BRACE (GREEK_LETTER [ ]? | LETTER | DIGIT | COMMA)+ R_BRACE) | (GREEK_LETTER [ ]? | LETTER | DIGIT)))?;
VARIABLE: VARIABLE_CMD L_BRACE VARIABLE_SYMBOL R_BRACE PERCENT_SIGN?;
fragment VARIABLE_SYMBOL: (GREEK_LETTER [ ]? | LETTER | DIGIT | COMMA)+ (UNDERSCORE ((L_BRACE (GREEK_LETTER [ ]? | LETTER | DIGIT | COMMA | VARIABLE_TEST)+ R_BRACE) | (GREEK_LETTER [ ]? | LETTER | DIGIT)))?;
fragment VARIABLE_TEST: VARIABLE_CMD L_BRACE VARIABLE_SYMBOL R_BRACE PERCENT_SIGN?;
VARIABLE: VARIABLE_TEST;

fragment UNION_CMD: '\\cup';
fragment SUBSET_CMD: '\\subseteq';
fragment SUPERSET_CMD: '\\supseteq';
fragment INTERSECTION_CMD: '\\cap';
fragment PROPER_SUBSET_CMD: '\\subset';
fragment PROPER_SUPERSET_CMD: '\\supset';
fragment EPSILON_CMD: '\\in';
fragment NOTIN_CMD: '\\notin';

SET_CMD: VARIABLE (UNION_CMD | SUBSET_CMD | SUPERSET_CMD | INTERSECTION_CMD | PROPER_SUPERSET_CMD | PROPER_SUBSET_CMD | EPSILON_CMD | NOTIN_CMD ) VARIABLE;

INTERVAL: VARIABLE EPSILON_CMD (L_BRACKET | LT) (VARIABLE | COMMA)+ (R_BRACKET | GT);

fragment ABSOLUTE_CMD: '\\absolute';
ABSOLUTE: ABSOLUTE_CMD VARIABLE;

fragment SUMMATION_CMD: '\\sum';
SUMMATION: SUMMATION_CMD L_BRACE (VARIABLE | COMMA | FOR_CMD)+ R_BRACE;

fragment EQUIVALENCE_CMD: '\\equivalence';
EQUIVALENCE: EQUIVALENCE_CMD L_BRACE (VARIABLE | COMMA)+ R_BRACE;

fragment SET_EQUALITY_CMD: '\\equality';
SET_EQUALITY: SET_EQUALITY_CMD L_BRACE (VARIABLE | COMMA | CONDITIONAL)+ R_BRACE;

fragment NRT_CMD: '\\nrt';
fragment NRT_CAL: NRT_CMD L_BRACE (VARIABLE | COMMA | DIGIT | LETTER | GREEK_LETTER )+ R_BRACE;
NRT: NRT_CAL;

LEN_CMD: LENGTH L_BRACE VARIABLE R_BRACE;


fragment RELATION_CMD: (VARIABLE | LEN_CMD | LETTER | GREEK_LETTER | DIGIT )+ (LT|GT|LTE|GTE|EQUAL|UNEQUAL)+ (VARIABLE | LEN_CMD | LETTER | GREEK_LETTER | DIGIT )+;


fragment EQUALITY_SET:(RELATION_CMD)+;

EQUALITY_CMD: EQUALITY_SET;

fragment C_AND_CMD: VARIABLE C_AND VARIABLE;
fragment C_OR_CMD: VARIABLE C_AND VARIABLE;
fragment C_NOT_CMD: VARIABLE C_AND VARIABLE;

fragment CONDITIONAL: C_AND_CMD | C_NOT_CMD | C_OR_CMD;

CONDITIONAL_CMD: CONDITIONAL;


fragment NOT_CMD: NOT L_BRACE (VARIABLE | LEN_CMD | DIGIT | LETTER | COMMA | EQUALITY_SET | NOT_CMD|AND_CMD|OR_CMD | NRT_CAL) R_BRACE;
fragment AND_CMD : AND L_BRACE (VARIABLE | LEN_CMD | DIGIT | LETTER | COMMA | EQUALITY_SET | NOT_CMD|AND_CMD|OR_CMD| NRT_CAL )+ R_BRACE;
fragment OR_CMD : OR L_BRACE (VARIABLE | LEN_CMD | DIGIT | LETTER | COMMA | EQUALITY_SET | NOT_CMD|AND_CMD|OR_CMD| NRT_CAL)+ R_BRACE;

LOGICAL: (AND_CMD | OR_CMD | NOT_CMD )+;

FOR_CMD: VARIABLE FOR VARIABLE;

//collection of accents
accent_symbol:
Expand Down Expand Up @@ -352,7 +425,7 @@ accent:
accent_symbol
L_BRACE base=expr R_BRACE;

atom: (LETTER_NO_E | GREEK_LETTER | accent) subexpr? | SYMBOL | NUMBER | PERCENT_NUMBER | E_NOTATION | DIFFERENTIAL | mathit | VARIABLE;
atom: (LETTER_NO_E | GREEK_LETTER | accent) subexpr? | SYMBOL | NUMBER | PERCENT_NUMBER | E_NOTATION | DIFFERENTIAL | mathit | VARIABLE | EQUALITY_CMD | INTERVAL | ABSOLUTE | NRT | LOGICAL | SUMMATION | EQUIVALENCE | SET_CMD | FOR_CMD | LEN_CMD | CONDITIONAL_CMD;

mathit: CMD_MATHIT L_BRACE mathit_text R_BRACE;
mathit_text: (LETTER_NO_E | E_NOTATION_E | EXP_E)+;
Expand Down
24 changes: 21 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,27 @@ process_sympy("\\frac{d}{dx} x^{2}")
|`\sum_{i = 1}^{n} i`|![](https://latex.codecogs.com/gif.latex?%5CLARGE%20%5Csum_%7Bi%20%3D%201%7D%5E%7Bn%7D%20i)|`Sum(i, (i, 1, n))`|
|`\int_{a}^{b} \frac{dt}{t}`|![](https://latex.codecogs.com/gif.latex?%5CLARGE%20%5Cint_%7Ba%7D%5E%7Bb%7D%20%5Cfrac%7Bdt%7D%7Bt%7D)|`Integral(1/t, (t, a, b))`|
|`(2x^3 - x + z)|_{x=3}`|![](https://latex.codecogs.com/gif.latex?%5CLARGE%20%282x%5E3%20-%20x%20&plus;%20z%29%7C_%7Bx%3D3%7D)|`z + 51`

## Contributing

|`\variable{x}<\variable{y}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20x%3Cy%20)|`x<y`
|`\variable{x}>\variable{y}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20%20x%3Ey)|`x>y`
|`\variable{x}\leq\variable{y}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20%20x%5Cleq%20y)|`x<=y`
|`\variable{x}\geq\variable{y}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20%20x%5Cgeq%20y)|`x>=y`
|`\variable{x}=\variable{y}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20%20x%20=%20y)|`Eq(x, y)`
|`\variable{x}\neq\variable{y}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20%20x%20%5Cneq%20y%20)|`Ne(x, y)`
|`\land{\variable{x},\variable{y}}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20%20x%20%5Cland%20y)|`x & y`
|`\lor{\variable{x},\variable{y}}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20%20x%20%5Clor%20y)| `x or y`
|`\neg{\variable{x}}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20%5Csim%20x)|`~x`
|`\nrt{\variable{x},\variable{n}}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20%20%5Csqrt%5Bn%5D%7Bx%7D%20)|`x**(1/n)`
|`\equivalence{\variable{a},\variable{b}`|![](https://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%205%5Cequiv%204)|`Equivalent(a, b)`
|`\variable{x}\in<\variable{a},\variable{b}>`|![](https://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20x%5Cepsilon%3C2,6%3E%20)|`(x > a) & (x < b)`
|`\variable{x}\in[\variable{a},\variable{b}]`|![](https://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20x%5Cepsilon%5B2,6%5D)|`(x >= a) & (x <= b)`
|`\variable{x}\in<\variable{a},\variable{b}]`|![](https://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20x%5Cepsilon%3C2,6%5D)|`(x > a) & (x <= y)`
|`\variable{x}\in[\variable{a},\variable{b}>`|![](https://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20x%5Cepsilon%5B2,6%3E)|`(x >= a) & (x < b)`
|`\absolute\variable{p}`|![](https://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20%7C-5%7C)|`Abs(p) `|
|`\summation{\variable{fi},\variable{i},\variable{y},\variable{z}}`|![](https://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20%5Csum_%7Bi=y%7D%5E%7Bz%7Dfi)|`fi*(-y + z + 1)`|## Contributing
|`\union{\variable{a},\variable{b}}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20a%20%5Cbigcup%20b)|`a,b`
|`\intersection{\variable{a},\variable{b}}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20a%20%5Cbigcap%20%20b)|`a,b`
|`\subset{\variable{a},\variable{a}}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20a%20%5Csubseteq%20b)|`[a]`
|`\superset{\variable{a},\variable{a}}`|![](http://latex.codecogs.com/gif.latex?%5Cdpi%7B110%7D%20a%20%5Csupseteq%20b)|`[a]`
Contributors are welcome! Feel free to open a pull request
or an issue.

33 changes: 21 additions & 12 deletions __init__.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
from sympy import Symbol

import latex2sympy

a = r"1+2-3\cdot\frac{4}{5}+6^7+\sqrt{5}+6+\variable{DEMO_{abc,bca,cde}}"
a = r"e^5"
a = r"3\in\left\{1,2,3,4,5\right\}"
x = Symbol('x', real=True)
y = Symbol('y', real=True)
fi = Symbol('fi', real=True)
d = Symbol('d', real=True)
ENERGY = Symbol('ENERGY', real=True)
Childcon = Symbol('Childcon', real=True)

# a = r"1+2-3\cdot\frac{4}{5}+6^7+\sqrt{5}+6+\variable{DEMO_{abc,bca,cde}}"

# a = r"\lor{\variable{x},\variable{y}}>\lor{\variable{x},\variable{y}}"

# a = r"1 + \variable{a}+\variable{DEMO_{\variable{i_{\variable{x_{\variable{y}}},\variable{z}}}}}"

# a = r"\frac{\sum_{\variable{ExchRt_{\variable{xday}}} = 1}^{31} \variable{EQUATION}\variable{ExchRt_{\variable{xday}}}}{\len{\variable{DaysInMonth}}}"

# a = r"\lor{\variable{a}<\variable{b},\variable{c}>0}"

b = latex2sympy.process_sympy(a)
print(b)
for i in b.free_symbols:
if "_" in i.name:
variable, dimension = i.name.split('_')
dimension = dimension[1: len(dimension) - 1]
dimension = dimension.split(",")
print("Variable", variable, ", Dimension", dimension)
a = r"\land{\variable{a},\variable{b}>5}"

print(b.evalf(4))
demo = latex2sympy.process_sympy(a)
print(demo)
61 changes: 61 additions & 0 deletions custom.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
from sympy import Symbol

import latex2sympy

x = Symbol('x', real=True)
y = Symbol('y', real=True)
fi = Symbol('fi', real=True)
d = Symbol('d', real=True)
ENERGY = Symbol('ENERGY', real=True)
Childcon = Symbol('Childcon', real=True)

# a = r"1+2-3\cdot\frac{4}{5}+6^7+\sqrt{5}+6+\variable{DEMO_{abc,bca,cde}}"

# a = r"\lor{\variable{x},\variable{y}}>\lor{\variable{x},\variable{y}}"

# a = r"1 + \variable{a}+\variable{DEMO_{\variable{i_{\variable{x_{\variable{y}}},\variable{z}}}}}"



def find_square(x):
return x ** 2

def cand(x,y):
return x and y


helper_functions = {
"len": len,
"suqaure": find_square,
"and": cand
}



# a = r"\frac{\sum_{\variable{ExchRt_{\variable{xday}}} = 1}^{31} \variable{jain}\variable{ExchRt_{\variable{xday}}}}{\len{\variable{DaysInMonth}}}"
# a = r"(\cand{\variable{x}\,\variable{y}})>1"
a = r" \variable{a}+\variable{DEMO_{\variable{iab_{\variable{x_{\variable{y}}},\variable{z}}}}}"
# a = r"\lor{\variable{a}<\variable{b},\variable{c}>0}"


demo = latex2sympy.process_sympy(a)
print(demo)
print(demo.free_symbols)
for j in demo.args:
for i in j.free_symbols:
for a in helper_functions.keys():
if a in i.name:
if '(' in i.name:
fun, val = i.name.split('(')
arg = val.split(')')[0]
# from db get value of y
val = [1,2]
test = demo.replace(i,helper_functions[fun](val))
print(test)
else:
fun, val = (i.name).split(a)
test = demo.replace(i, helper_functions[a](fun,val))




33 changes: 33 additions & 0 deletions equation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from sympy import Symbol

import latex2sympy

iChild = Symbol('iChild', real=True)
jChild = Symbol('jChild', real=True)
ChildContract = Symbol('ChildContract', real=True)


def condition(latex_con):
latex = latex2sympy.process_sympy(latex_con)
print(latex)
return latex


def iteration(latex_iter, latex_con):
latex = latex2sympy.process_sympy(latex_iter)

cond_expr = condition(latex_con)
for latex[0] in latex[1]: # for jChild in ChildContract (dynamic)
cond = cond_expr.subs(iChild, latex[0]) # (iChild<4).subs(iChild, jChild)
if cond:
latex2sympy.process_sympy(r"\sum_{\variable{d} = 1}^{3} \variable{d}*\variable{ENERGY} ")


a = r"\sum_{\variable{jChild} = \variable{Childcontracts}}^{\variable{Childcon}} (\variable{x}+\variable{y})" # jChild ∈ ChildContract (Iteration)
b = r"\lor{\len{\variable{x}}<5,\variable{y}<3}}" # (len(x) < 5) | (y < 3) (Condition)
iteration(a, b)





30 changes: 27 additions & 3 deletions gen/PS.interp

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions gen/PS.tokens
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,18 @@ PERCENT_NUMBER=108
GREEK_LETTER=109
SYMBOL=110
VARIABLE=111
SET_CMD=112
INTERVAL=113
ABSOLUTE=114
SUMMATION=115
EQUIVALENCE=116
SET_EQUALITY=117
NRT=118
LEN_CMD=119
EQUALITY_CMD=120
CONDITIONAL_CMD=121
LOGICAL=122
FOR_CMD=123
'\\$'=2
'+'=3
'-'=4
Expand Down Expand Up @@ -197,5 +209,7 @@ VARIABLE=111
'E'=97
'='=101
'<'=102
'\\leq'=103
'>'=104
'\\geq'=105
'!'=107
Loading