| |
|
|
|
|
| |
| def _fix_fracs(string): |
| substrs = string.split('\\frac') |
| new_str = substrs[0] |
| if len(substrs) > 1: |
| substrs = substrs[1:] |
| for substr in substrs: |
| new_str += '\\frac' |
| if substr[0] == '{': |
| new_str += substr |
| else: |
| try: |
| assert len(substr) >= 2 |
| except: |
| return string |
| a = substr[0] |
| b = substr[1] |
| if b != '{': |
| if len(substr) > 2: |
| post_substr = substr[2:] |
| new_str += '{' + a + '}{' + b + '}' + post_substr |
| else: |
| new_str += '{' + a + '}{' + b + '}' |
| else: |
| if len(substr) > 2: |
| post_substr = substr[2:] |
| new_str += '{' + a + '}' + b + post_substr |
| else: |
| new_str += '{' + a + '}' + b |
| string = new_str |
| return string |
|
|
|
|
| def _fix_a_slash_b(string): |
| if len(string.split('/')) != 2: |
| return string |
| a = string.split('/')[0] |
| b = string.split('/')[1] |
| try: |
| a = int(a) |
| b = int(b) |
| assert string == '{}/{}'.format(a, b) |
| new_string = '\\frac{' + str(a) + '}{' + str(b) + '}' |
| return new_string |
| except: |
| return string |
|
|
|
|
| def _remove_right_units(string): |
| |
| if '\\text{ ' in string: |
| splits = string.split('\\text{ ') |
| assert len(splits) == 2 |
| return splits[0] |
| else: |
| return string |
|
|
|
|
| def _fix_sqrt(string): |
| if '\\sqrt' not in string: |
| return string |
| splits = string.split('\\sqrt') |
| new_string = splits[0] |
| for split in splits[1:]: |
| if split[0] != '{': |
| a = split[0] |
| new_substr = '\\sqrt{' + a + '}' + split[1:] |
| else: |
| new_substr = '\\sqrt' + split |
| new_string += new_substr |
| return new_string |
|
|
|
|
| def _strip_string(string): |
| |
| string = string.replace('\n', '') |
| |
|
|
| |
| string = string.replace('\\!', '') |
| |
|
|
| |
| string = string.replace('\\\\', '\\') |
| |
|
|
| |
| string = string.replace('tfrac', 'frac') |
| string = string.replace('dfrac', 'frac') |
| |
|
|
| |
| string = string.replace('\\left', '') |
| string = string.replace('\\right', '') |
| |
|
|
| |
| string = string.replace('^{\\circ}', '') |
| string = string.replace('^\\circ', '') |
|
|
| |
| string = string.replace('\\$', '') |
|
|
| |
| string = _remove_right_units(string) |
|
|
| |
| string = string.replace('\\%', '') |
| string = string.replace('\%', '') |
|
|
| |
| string = string.replace(' .', ' 0.') |
| string = string.replace('{.', '{0.') |
| |
| if len(string) == 0: |
| return string |
| if string[0] == '.': |
| string = '0' + string |
|
|
| |
| if len(string.split('=')) == 2: |
| if len(string.split('=')[0]) <= 2: |
| string = string.split('=')[1] |
|
|
| |
| string = _fix_sqrt(string) |
|
|
| |
| string = string.replace(' ', '') |
|
|
| |
| string = _fix_fracs(string) |
|
|
| |
| if string == '0.5': |
| string = '\\frac{1}{2}' |
|
|
| |
| string = _fix_a_slash_b(string) |
|
|
| return string |
|
|
|
|
| def is_equiv(str1, str2, verbose=False): |
| if str1 is None and str2 is None: |
| print('WARNING: Both None') |
| return True |
| if str1 is None or str2 is None: |
| return False |
|
|
| try: |
| ss1 = _strip_string(str1) |
| ss2 = _strip_string(str2) |
| if verbose: |
| print(ss1, ss2) |
| return ss1 == ss2 |
| except: |
| return str1 == str2 |
|
|