Skip to content

Commit

Permalink
fix GN elements
Browse files Browse the repository at this point in the history
  • Loading branch information
mscroggs committed Oct 18, 2024
1 parent f3913a1 commit a633c92
Show file tree
Hide file tree
Showing 35 changed files with 219 additions and 216 deletions.
16 changes: 8 additions & 8 deletions scripts/generate_gn.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,18 @@
import sys
import typing

import numpy as np
import sympy

import symfem
from symfem.elements.guzman_neilan import make_piecewise_lagrange
from symfem.functions import MatrixFunction, VectorFunction
from symfem.functions import VectorFunction, AnyFunction
from symfem.piecewise_functions import PiecewiseFunction
from symfem.symbols import t, x

TESTING = "test" in sys.argv


def poly(reference, k):
"""Generate the P^perp polynomial set."""
if k < 2:
if reference.name == "triangle":
return [
Expand Down Expand Up @@ -155,6 +154,7 @@ def poly(reference, k):


def find_solution(mat, aim):
"""Solve mat @ x = aim."""
s_mat = sympy.Matrix(mat)
solution = (s_mat.T @ s_mat).inv() @ s_mat.T @ sympy.Matrix(aim)
assert s_mat @ solution == sympy.Matrix(aim)
Expand Down Expand Up @@ -259,10 +259,12 @@ def find_solution(mat, aim):
i += 1

coeffs = find_solution(mat, aim)
bubble = f
bubble: AnyFunction = f
for i, j in zip(coeffs, sub_basis):
bubble -= i * j

assert isinstance(bubble, PiecewiseFunction)

output += " {\n"
for cell, f in bubble.pieces.items():
output += " "
Expand All @@ -273,9 +275,7 @@ def find_solution(mat, aim):
"("
+ ", ".join(
[
f"{c}"
if isinstance(c, sympy.Integer)
else f"sympy.S('{c}')"
f"{c}" if isinstance(c, sympy.Integer) else f"sympy.S('{c}')"
for c in p
]
)
Expand All @@ -288,7 +288,7 @@ def find_solution(mat, aim):
output += ": (\n"
output += ",\n".join(
[
" sympy.S('" + f"{c.as_sympy().expand()}".replace(" ", "") + "')"
" sympy.S('" + f"{c.as_sympy().expand()}".replace(" ", "") + "')" # type:ignore
for c in f
]
)
Expand Down
1 change: 0 additions & 1 deletion symfem/basis_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import sympy

import symfem

from symfem.functions import (
AnyFunction,
FunctionInput,
Expand Down
180 changes: 116 additions & 64 deletions symfem/elements/_guzman_neilan_tetrahedron.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,75 +4,127 @@

bubbles = [
{
((0, 0, 0), (1, 0, 0), (0, 1, 0), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('40*x**2*z+120*x*y*z+88*x*z**2-64*x*z-220*y*z**2-860*z**3/3+128*z**2+6*z'),
sympy.S('120*x*y*z-220*x*z**2+40*y**2*z+88*y*z**2-64*y*z-860*z**3/3+128*z**2+6*z'),
sympy.S('-100*x*z**2-100*y*z**2-176*z**3/3+64*z**2+6*z')),
((0, 0, 0), (1, 0, 0), (0, 0, 1), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('40*x**2*y+88*x*y**2+120*x*y*z-64*x*y-860*y**3/3-220*y**2*z+128*y**2+6*y'),
sympy.S('-100*x*y**2-176*y**3/3-100*y**2*z+64*y**2+6*y'),
sympy.S('-220*x*y**2+120*x*y*z-860*y**3/3+88*y**2*z+128*y**2+40*y*z**2-64*y*z+6*y')),
((0, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('-176*x**3/3-100*x**2*y-100*x**2*z+64*x**2+6*x'),
sympy.S('-860*x**3/3+88*x**2*y-220*x**2*z+128*x**2+40*x*y**2+120*x*y*z-64*x*y+6*x'),
sympy.S('-860*x**3/3-220*x**2*y+88*x**2*z+128*x**2+120*x*y*z+40*x*z**2-64*x*z+6*x')),
((1, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('224*x**3/3+36*x**2*y+36*x**2*z-104*x**2-112*x*y**2-144*x*y*z+104*x*y-112*x*z**2+104*x*z+2*x-220*y**3/3-180*y**2*z+168*y**2-180*y*z**2+296*y*z-122*y-220*z**3/3+168*z**2-122*z+82/3'),
sympy.S('-220*x**3/3-112*x**2*y-180*x**2*z+168*x**2+36*x*y**2-144*x*y*z+104*x*y-180*x*z**2+296*x*z-122*x+224*y**3/3+36*y**2*z-104*y**2-112*y*z**2+104*y*z+2*y-220*z**3/3+168*z**2-122*z+82/3'),
sympy.S('-220*x**3/3-180*x**2*y-112*x**2*z+168*x**2-180*x*y**2-144*x*y*z+296*x*y+36*x*z**2+104*x*z-122*x-220*y**3/3-112*y**2*z+168*y**2+36*y*z**2+104*y*z-122*y+224*z**3/3-104*z**2+2*z+82/3')),
((0, 0, 0), (1, 0, 0), (0, 1, 0), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S("40*x**2*z+120*x*y*z+88*x*z**2-64*x*z-220*y*z**2-860*z**3/3+128*z**2+6*z"),
sympy.S("120*x*y*z-220*x*z**2+40*y**2*z+88*y*z**2-64*y*z-860*z**3/3+128*z**2+6*z"),
sympy.S("-100*x*z**2-100*y*z**2-176*z**3/3+64*z**2+6*z"),
),
((0, 0, 0), (1, 0, 0), (0, 0, 1), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S("40*x**2*y+88*x*y**2+120*x*y*z-64*x*y-860*y**3/3-220*y**2*z+128*y**2+6*y"),
sympy.S("-100*x*y**2-176*y**3/3-100*y**2*z+64*y**2+6*y"),
sympy.S("-220*x*y**2+120*x*y*z-860*y**3/3+88*y**2*z+128*y**2+40*y*z**2-64*y*z+6*y"),
),
((0, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S("-176*x**3/3-100*x**2*y-100*x**2*z+64*x**2+6*x"),
sympy.S("-860*x**3/3+88*x**2*y-220*x**2*z+128*x**2+40*x*y**2+120*x*y*z-64*x*y+6*x"),
sympy.S("-860*x**3/3-220*x**2*y+88*x**2*z+128*x**2+120*x*y*z+40*x*z**2-64*x*z+6*x"),
),
((1, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S(
"224*x**3/3+36*x**2*y+36*x**2*z-104*x**2-112*x*y**2-144*x*y*z+104*x*y-112*x*z**2+104*x*z+2*x-220*y**3/3-180*y**2*z+168*y**2-180*y*z**2+296*y*z-122*y-220*z**3/3+168*z**2-122*z+82/3"
),
sympy.S(
"-220*x**3/3-112*x**2*y-180*x**2*z+168*x**2+36*x*y**2-144*x*y*z+104*x*y-180*x*z**2+296*x*z-122*x+224*y**3/3+36*y**2*z-104*y**2-112*y*z**2+104*y*z+2*y-220*z**3/3+168*z**2-122*z+82/3"
),
sympy.S(
"-220*x**3/3-180*x**2*y-112*x**2*z+168*x**2-180*x*y**2-144*x*y*z+296*x*y+36*x*z**2+104*x*z-122*x-220*y**3/3-112*y**2*z+168*y**2+36*y*z**2+104*y*z-122*y+224*z**3/3-104*z**2+2*z+82/3"
),
),
},
{
((0, 0, 0), (1, 0, 0), (0, 1, 0), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('-180*x*y*z+432*x*z**2+24*x*z-120*y**2*z+210*y*z**2+120*y*z-110*z**3-108*z**2-6*z'),
sympy.S('-60*y**2*z-438*y*z**2+84*y*z+650*z**3-138*z**2-6*z'),
sympy.S('150*y*z**2+2*z**3-54*z**2-6*z')),
((0, 0, 0), (1, 0, 0), (0, 0, 1), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('432*x*y**2-180*x*y*z+24*x*y-110*y**3+210*y**2*z-108*y**2-120*y*z**2+120*y*z-6*y'),
sympy.S('2*y**3+150*y**2*z-54*y**2-6*y'),
sympy.S('650*y**3-438*y**2*z-138*y**2-60*y*z**2+84*y*z-6*y')),
((0, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('172*x**3+150*x**2*y+150*x**2*z-84*x**2-6*x-120*y**2*z-120*y*z**2+120*y*z'),
sympy.S('320*x**3-258*x**2*y+330*x**2*z-138*x**2-60*x*y**2-180*x*y*z+84*x*y-6*x'),
sympy.S('320*x**3+330*x**2*y-258*x**2*z-138*x**2-180*x*y*z-60*x*z**2+84*x*z-6*x')),
((1, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('812*x**3+2214*x**2*y+2214*x**2*z-2076*x**2+1932*x*y**2+3624*x*y*z-3624*x*y+1932*x*z**2-3624*x*z+1698*x+530*y**3+1350*y**2*z-1488*y**2+1350*y*z**2-2736*y*z+1392*y+530*z**3-1488*z**2+1392*z-434'),
sympy.S('-320*x**3-1218*x**2*y-630*x**2*z+822*x**2-1416*x*y**2-1596*x*y*z+2076*x*y-300*x*z**2+984*x*z-678*x-518*y**3-906*y**2*z+1194*y**2-378*y*z**2+1236*y*z-852*y+10*z**3+162*z**2-348*z+176'),
sympy.S('-320*x**3-630*x**2*y-1218*x**2*z+822*x**2-300*x*y**2-1596*x*y*z+984*x*y-1416*x*z**2+2076*x*z-678*x+10*y**3-378*y**2*z+162*y**2-906*y*z**2+1236*y*z-348*y-518*z**3+1194*z**2-852*z+176')),
((0, 0, 0), (1, 0, 0), (0, 1, 0), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S(
"-180*x*y*z+432*x*z**2+24*x*z-120*y**2*z+210*y*z**2+120*y*z-110*z**3-108*z**2-6*z"
),
sympy.S("-60*y**2*z-438*y*z**2+84*y*z+650*z**3-138*z**2-6*z"),
sympy.S("150*y*z**2+2*z**3-54*z**2-6*z"),
),
((0, 0, 0), (1, 0, 0), (0, 0, 1), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S(
"432*x*y**2-180*x*y*z+24*x*y-110*y**3+210*y**2*z-108*y**2-120*y*z**2+120*y*z-6*y"
),
sympy.S("2*y**3+150*y**2*z-54*y**2-6*y"),
sympy.S("650*y**3-438*y**2*z-138*y**2-60*y*z**2+84*y*z-6*y"),
),
((0, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S("172*x**3+150*x**2*y+150*x**2*z-84*x**2-6*x-120*y**2*z-120*y*z**2+120*y*z"),
sympy.S("320*x**3-258*x**2*y+330*x**2*z-138*x**2-60*x*y**2-180*x*y*z+84*x*y-6*x"),
sympy.S("320*x**3+330*x**2*y-258*x**2*z-138*x**2-180*x*y*z-60*x*z**2+84*x*z-6*x"),
),
((1, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S(
"812*x**3+2214*x**2*y+2214*x**2*z-2076*x**2+1932*x*y**2+3624*x*y*z-3624*x*y+1932*x*z**2-3624*x*z+1698*x+530*y**3+1350*y**2*z-1488*y**2+1350*y*z**2-2736*y*z+1392*y+530*z**3-1488*z**2+1392*z-434"
),
sympy.S(
"-320*x**3-1218*x**2*y-630*x**2*z+822*x**2-1416*x*y**2-1596*x*y*z+2076*x*y-300*x*z**2+984*x*z-678*x-518*y**3-906*y**2*z+1194*y**2-378*y*z**2+1236*y*z-852*y+10*z**3+162*z**2-348*z+176"
),
sympy.S(
"-320*x**3-630*x**2*y-1218*x**2*z+822*x**2-300*x*y**2-1596*x*y*z+984*x*y-1416*x*z**2+2076*x*z-678*x+10*y**3-378*y**2*z+162*y**2-906*y*z**2+1236*y*z-348*y-518*z**3+1194*z**2-852*z+176"
),
),
},
{
((0, 0, 0), (1, 0, 0), (0, 1, 0), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('60*x**2*z+438*x*z**2-84*x*z-650*z**3+138*z**2+6*z'),
sympy.S('120*x**2*z+180*x*y*z-210*x*z**2-120*x*z-432*y*z**2-24*y*z+110*z**3+108*z**2+6*z'),
sympy.S('-150*x*z**2-2*z**3+54*z**2+6*z')),
((0, 0, 0), (1, 0, 0), (0, 0, 1), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('60*x**2*y+258*x*y**2+180*x*y*z-84*x*y-320*y**3-330*y**2*z+138*y**2+6*y'),
sympy.S('120*x**2*z-150*x*y**2+120*x*z**2-120*x*z-172*y**3-150*y**2*z+84*y**2+6*y'),
sympy.S('-330*x*y**2+180*x*y*z-320*y**3+258*y**2*z+138*y**2+60*y*z**2-84*y*z+6*y')),
((0, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('-2*x**3-150*x**2*z+54*x**2+6*x'),
sympy.S('110*x**3-432*x**2*y-210*x**2*z+108*x**2+180*x*y*z-24*x*y+120*x*z**2-120*x*z+6*x'),
sympy.S('-650*x**3+438*x**2*z+138*x**2+60*x*z**2-84*x*z+6*x')),
((1, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('518*x**3+1416*x**2*y+906*x**2*z-1194*x**2+1218*x*y**2+1596*x*y*z-2076*x*y+378*x*z**2-1236*x*z+852*x+320*y**3+630*y**2*z-822*y**2+300*y*z**2-984*y*z+678*y-10*z**3-162*z**2+348*z-176'),
sympy.S('-530*x**3-1932*x**2*y-1350*x**2*z+1488*x**2-2214*x*y**2-3624*x*y*z+3624*x*y-1350*x*z**2+2736*x*z-1392*x-812*y**3-2214*y**2*z+2076*y**2-1932*y*z**2+3624*y*z-1698*y-530*z**3+1488*z**2-1392*z+434'),
sympy.S('-10*x**3+300*x**2*y+378*x**2*z-162*x**2+630*x*y**2+1596*x*y*z-984*x*y+906*x*z**2-1236*x*z+348*x+320*y**3+1218*y**2*z-822*y**2+1416*y*z**2-2076*y*z+678*y+518*z**3-1194*z**2+852*z-176')),
((0, 0, 0), (1, 0, 0), (0, 1, 0), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S("60*x**2*z+438*x*z**2-84*x*z-650*z**3+138*z**2+6*z"),
sympy.S(
"120*x**2*z+180*x*y*z-210*x*z**2-120*x*z-432*y*z**2-24*y*z+110*z**3+108*z**2+6*z"
),
sympy.S("-150*x*z**2-2*z**3+54*z**2+6*z"),
),
((0, 0, 0), (1, 0, 0), (0, 0, 1), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S("60*x**2*y+258*x*y**2+180*x*y*z-84*x*y-320*y**3-330*y**2*z+138*y**2+6*y"),
sympy.S("120*x**2*z-150*x*y**2+120*x*z**2-120*x*z-172*y**3-150*y**2*z+84*y**2+6*y"),
sympy.S("-330*x*y**2+180*x*y*z-320*y**3+258*y**2*z+138*y**2+60*y*z**2-84*y*z+6*y"),
),
((0, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S("-2*x**3-150*x**2*z+54*x**2+6*x"),
sympy.S(
"110*x**3-432*x**2*y-210*x**2*z+108*x**2+180*x*y*z-24*x*y+120*x*z**2-120*x*z+6*x"
),
sympy.S("-650*x**3+438*x**2*z+138*x**2+60*x*z**2-84*x*z+6*x"),
),
((1, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S(
"518*x**3+1416*x**2*y+906*x**2*z-1194*x**2+1218*x*y**2+1596*x*y*z-2076*x*y+378*x*z**2-1236*x*z+852*x+320*y**3+630*y**2*z-822*y**2+300*y*z**2-984*y*z+678*y-10*z**3-162*z**2+348*z-176"
),
sympy.S(
"-530*x**3-1932*x**2*y-1350*x**2*z+1488*x**2-2214*x*y**2-3624*x*y*z+3624*x*y-1350*x*z**2+2736*x*z-1392*x-812*y**3-2214*y**2*z+2076*y**2-1932*y*z**2+3624*y*z-1698*y-530*z**3+1488*z**2-1392*z+434"
),
sympy.S(
"-10*x**3+300*x**2*y+378*x**2*z-162*x**2+630*x*y**2+1596*x*y*z-984*x*y+906*x*z**2-1236*x*z+348*x+320*y**3+1218*y**2*z-822*y**2+1416*y*z**2-2076*y*z+678*y+518*z**3-1194*z**2+852*z-176"
),
),
},
{
((0, 0, 0), (1, 0, 0), (0, 1, 0), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('-60*x**2*z-180*x*y*z-258*x*z**2+84*x*z+330*y*z**2+320*z**3-138*z**2-6*z'),
sympy.S('-180*x*y*z+330*x*z**2-60*y**2*z-258*y*z**2+84*y*z+320*z**3-138*z**2-6*z'),
sympy.S('-120*x**2*y-120*x*y**2+120*x*y+150*x*z**2+150*y*z**2+172*z**3-84*z**2-6*z')),
((0, 0, 0), (1, 0, 0), (0, 0, 1), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('-60*x**2*y-438*x*y**2+84*x*y+650*y**3-138*y**2-6*y'),
sympy.S('150*x*y**2+2*y**3-54*y**2-6*y'),
sympy.S('-120*x**2*y+210*x*y**2-180*x*y*z+120*x*y-110*y**3+432*y**2*z-108*y**2+24*y*z-6*y')),
((0, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('2*x**3+150*x**2*y-54*x**2-6*x'),
sympy.S('650*x**3-438*x**2*y-138*x**2-60*x*y**2+84*x*y-6*x'),
sympy.S('-110*x**3+210*x**2*y+432*x**2*z-108*x**2-120*x*y**2-180*x*y*z+120*x*y+24*x*z-6*x')),
((1, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S('1/4'), sympy.S('1/4'), sympy.S('1/4'))): (
sympy.S('-518*x**3-906*x**2*y-1416*x**2*z+1194*x**2-378*x*y**2-1596*x*y*z+1236*x*y-1218*x*z**2+2076*x*z-852*x+10*y**3-300*y**2*z+162*y**2-630*y*z**2+984*y*z-348*y-320*z**3+822*z**2-678*z+176'),
sympy.S('10*x**3-378*x**2*y-300*x**2*z+162*x**2-906*x*y**2-1596*x*y*z+1236*x*y-630*x*z**2+984*x*z-348*x-518*y**3-1416*y**2*z+1194*y**2-1218*y*z**2+2076*y*z-852*y-320*z**3+822*z**2-678*z+176'),
sympy.S('530*x**3+1350*x**2*y+1932*x**2*z-1488*x**2+1350*x*y**2+3624*x*y*z-2736*x*y+2214*x*z**2-3624*x*z+1392*x+530*y**3+1932*y**2*z-1488*y**2+2214*y*z**2-3624*y*z+1392*y+812*z**3-2076*z**2+1698*z-434')),
((0, 0, 0), (1, 0, 0), (0, 1, 0), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S("-60*x**2*z-180*x*y*z-258*x*z**2+84*x*z+330*y*z**2+320*z**3-138*z**2-6*z"),
sympy.S("-180*x*y*z+330*x*z**2-60*y**2*z-258*y*z**2+84*y*z+320*z**3-138*z**2-6*z"),
sympy.S("-120*x**2*y-120*x*y**2+120*x*y+150*x*z**2+150*y*z**2+172*z**3-84*z**2-6*z"),
),
((0, 0, 0), (1, 0, 0), (0, 0, 1), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S("-60*x**2*y-438*x*y**2+84*x*y+650*y**3-138*y**2-6*y"),
sympy.S("150*x*y**2+2*y**3-54*y**2-6*y"),
sympy.S(
"-120*x**2*y+210*x*y**2-180*x*y*z+120*x*y-110*y**3+432*y**2*z-108*y**2+24*y*z-6*y"
),
),
((0, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S("2*x**3+150*x**2*y-54*x**2-6*x"),
sympy.S("650*x**3-438*x**2*y-138*x**2-60*x*y**2+84*x*y-6*x"),
sympy.S(
"-110*x**3+210*x**2*y+432*x**2*z-108*x**2-120*x*y**2-180*x*y*z+120*x*y+24*x*z-6*x"
),
),
((1, 0, 0), (0, 1, 0), (0, 0, 1), (sympy.S("1/4"), sympy.S("1/4"), sympy.S("1/4"))): (
sympy.S(
"-518*x**3-906*x**2*y-1416*x**2*z+1194*x**2-378*x*y**2-1596*x*y*z+1236*x*y-1218*x*z**2+2076*x*z-852*x+10*y**3-300*y**2*z+162*y**2-630*y*z**2+984*y*z-348*y-320*z**3+822*z**2-678*z+176"
),
sympy.S(
"10*x**3-378*x**2*y-300*x**2*z+162*x**2-906*x*y**2-1596*x*y*z+1236*x*y-630*x*z**2+984*x*z-348*x-518*y**3-1416*y**2*z+1194*y**2-1218*y*z**2+2076*y*z-852*y-320*z**3+822*z**2-678*z+176"
),
sympy.S(
"530*x**3+1350*x**2*y+1932*x**2*z-1488*x**2+1350*x*y**2+3624*x*y*z-2736*x*y+2214*x*z**2-3624*x*z+1392*x+530*y**3+1932*y**2*z-1488*y**2+2214*y*z**2-3624*y*z+1392*y+812*z**3-2076*z**2+1698*z-434"
),
),
},
]
60 changes: 33 additions & 27 deletions symfem/elements/_guzman_neilan_triangle.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,36 +4,42 @@

bubbles = [
{
((0, 0), (1, 0), (sympy.S('1/3'), sympy.S('1/3'))): (
sympy.S('-3*x*y+9*y**2/2-2*y'),
sympy.S('3*y**2/2-2*y')),
((0, 0), (0, 1), (sympy.S('1/3'), sympy.S('1/3'))): (
sympy.S('3*x**2/2-2*x'),
sympy.S('9*x**2/2-3*x*y-2*x')),
((1, 0), (0, 1), (sympy.S('1/3'), sympy.S('1/3'))): (
sympy.S('3*x**2/2-3*x*y-x-3*y**2/2+2*y-1/2'),
sympy.S('-3*x**2/2-3*x*y+2*x+3*y**2/2-y-1/2')),
((0, 0), (1, 0), (sympy.S("1/3"), sympy.S("1/3"))): (
sympy.S("-3*x*y+9*y**2/2-2*y"),
sympy.S("3*y**2/2-2*y"),
),
((0, 0), (0, 1), (sympy.S("1/3"), sympy.S("1/3"))): (
sympy.S("3*x**2/2-2*x"),
sympy.S("9*x**2/2-3*x*y-2*x"),
),
((1, 0), (0, 1), (sympy.S("1/3"), sympy.S("1/3"))): (
sympy.S("3*x**2/2-3*x*y-x-3*y**2/2+2*y-1/2"),
sympy.S("-3*x**2/2-3*x*y+2*x+3*y**2/2-y-1/2"),
),
},
{
((0, 0), (1, 0), (sympy.S('1/3'), sympy.S('1/3'))): (
sympy.S('3*y**2-4*y'),
sympy.S('2*y')),
((0, 0), (0, 1), (sympy.S('1/3'), sympy.S('1/3'))): (
sympy.S('-3*x**2+2*x+6*y**2-6*y'),
sympy.S('-6*x**2+6*x*y+2*x')),
((1, 0), (0, 1), (sympy.S('1/3'), sympy.S('1/3'))): (
sympy.S('9*x**2+24*x*y-14*x+15*y**2-20*y+5'),
sympy.S('-6*x**2-18*x*y+10*x-12*y**2+16*y-4')),
((0, 0), (1, 0), (sympy.S("1/3"), sympy.S("1/3"))): (sympy.S("3*y**2-4*y"), sympy.S("2*y")),
((0, 0), (0, 1), (sympy.S("1/3"), sympy.S("1/3"))): (
sympy.S("-3*x**2+2*x+6*y**2-6*y"),
sympy.S("-6*x**2+6*x*y+2*x"),
),
((1, 0), (0, 1), (sympy.S("1/3"), sympy.S("1/3"))): (
sympy.S("9*x**2+24*x*y-14*x+15*y**2-20*y+5"),
sympy.S("-6*x**2-18*x*y+10*x-12*y**2+16*y-4"),
),
},
{
((0, 0), (1, 0), (sympy.S('1/3'), sympy.S('1/3'))): (
sympy.S('-6*x*y+6*y**2-2*y'),
sympy.S('-6*x**2+6*x+3*y**2-2*y')),
((0, 0), (0, 1), (sympy.S('1/3'), sympy.S('1/3'))): (
sympy.S('-2*x'),
sympy.S('-3*x**2+4*x')),
((1, 0), (0, 1), (sympy.S('1/3'), sympy.S('1/3'))): (
sympy.S('12*x**2+18*x*y-16*x+6*y**2-10*y+4'),
sympy.S('-15*x**2-24*x*y+20*x-9*y**2+14*y-5')),
((0, 0), (1, 0), (sympy.S("1/3"), sympy.S("1/3"))): (
sympy.S("-6*x*y+6*y**2-2*y"),
sympy.S("-6*x**2+6*x+3*y**2-2*y"),
),
((0, 0), (0, 1), (sympy.S("1/3"), sympy.S("1/3"))): (
sympy.S("-2*x"),
sympy.S("-3*x**2+4*x"),
),
((1, 0), (0, 1), (sympy.S("1/3"), sympy.S("1/3"))): (
sympy.S("12*x**2+18*x*y-16*x+6*y**2-10*y+4"),
sympy.S("-15*x**2-24*x*y+20*x-9*y**2+14*y-5"),
),
},
]
Loading

0 comments on commit a633c92

Please sign in to comment.