Closed crowlogic closed 5 months ago
HypergeometricPolynomialTest.testSummand
Generating n➔z^n*∏k➔α[k]₍ₙ₎{k=1…p}/(n!*∏k➔β[k]₍ₙ₎{k=1…q})
BinaryOperation.generate( this=(z^n)*Πα[k]₍ₙ₎{k=1…p}/n!*Πβ[k]₍ₙ₎{k=1…q},
left=(z^n)*Πα[k]₍ₙ₎{k=1…p},
left.type=class arb.Real,
operation=div,
right=n!*Πβ[k]₍ₙ₎{k=1…q},
right.type=class arb.Real,
resultType=class arb.Real )
BinaryOperation.generate( this=(z^n)*Πα[k]₍ₙ₎{k=1…p},
left=z^n,
left.type=class arb.Real,
operation=mul,
right=Πα[k]₍ₙ₎{k=1…p},
right.type=class arb.Real,
resultType=class arb.Real )
BinaryOperation.generate( this=z^n,
left=z,
left.type=class arb.Real,
operation=pow,
right=n,
right.type=class arb.Integer,
resultType=class arb.Real )
Variable.generate( this=z, resultType=class arb.Real)
Variable.generate( this=n, resultType=class arb.Integer)
NaryMultiplication.assignFieldNames(resultType=class arb.Real,
factorFunctionFieldName=factorℝ1,
factorValueFieldName=valueℝ1)
NaryMultiplication.generateFactorClass( expr=k➔α[k]₍ₙ₎,resultType=class arb.Real)
Generating k➔α[k]₍ₙ₎
BinaryOperation.generate( this=α[k]⋰n,
left=α[k],
left.type=class arb.Real,
operation=ascendingFactorial,
right=n,
right.type=class arb.Integer,
resultType=class arb.Real )
Variable.generate( this=α[k], resultType=class arb.Real)
Variable.generate( this=k, resultType=class arb.Integer)
Variable.generate( this=n, resultType=class arb.Integer)
NaryMultiplication.propagateInputToFactorClass( factorFunctionFieldName=factorℝ1,
independentVariableNode=n,
independentVariableNode.type=class arb.Integer)
getField(functionClass=nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq,
fieldName=k,
fieldTypeSignature=Larb/Integer;
Variable.generate( this=p, resultType=class arb.Integer)
NaryMultiplication.designateLabel( label=L1601292138,
addTypeToStackMap=false)
getField(functionClass=nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq,
fieldName=k,
fieldTypeSignature=Larb/Integer;
BinaryOperation.generate( this=n!*Πβ[k]₍ₙ₎{k=1…q},
left=n!,
left.type=class arb.Integer,
operation=mul,
right=Πβ[k]₍ₙ₎{k=1…q},
right.type=class arb.Real,
resultType=class arb.Real )
FunctionCall.generate: this=n! resultType=class arb.Integer
Variable.generate( this=n, resultType=class arb.Real)
NaryMultiplication.assignFieldNames(resultType=class arb.Real,
factorFunctionFieldName=factorℝ2,
factorValueFieldName=valueℝ2)
NaryMultiplication.generateFactorClass( expr=k➔β[k]₍ₙ₎,resultType=class arb.Real)
Generating k➔β[k]₍ₙ₎
BinaryOperation.generate( this=β[k]⋰n,
left=β[k],
left.type=class arb.Real,
operation=ascendingFactorial,
right=n,
right.type=class arb.Integer,
resultType=class arb.Real )
Variable.generate( this=β[k], resultType=class arb.Real)
Variable.generate( this=k, resultType=class arb.Integer)
Variable.generate( this=n, resultType=class arb.Integer)
NaryMultiplication.propagateInputToFactorClass( factorFunctionFieldName=factorℝ2,
independentVariableNode=n,
independentVariableNode.type=class arb.Integer)
getField(functionClass=nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq,
fieldName=k,
fieldTypeSignature=Larb/Integer;
Variable.generate( this=q, resultType=class arb.Integer)
NaryMultiplication.designateLabel( label=L1218593486,
addTypeToStackMap=true)
getField(functionClass=nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq,
fieldName=k,
fieldTypeSignature=Larb/Integer;
--- HypergeometricPolynomialTestTestSummand.text.nogood 2024-03-18 19:37:53.523739785 -0500
+++ HypergeometricPolynomialTestTestSummand.text.good 2024-03-18 19:37:23.851964574 -0500
@@ -107,7 +107,7 @@
INVOKEVIRTUAL arb/Integer.set (Larb/Integer;)Larb/Integer;
POP
L2
- FRAME SAME
+ FRAME SAME1 arb/Real
ALOAD 0
GETFIELD nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq.prodℝ1 : Larb/Real;
ALOAD 0
@@ -163,7 +163,7 @@
INVOKEVIRTUAL arb/Integer.set (Larb/Integer;)Larb/Integer;
POP
L3
- FRAME SAME1 arb/Real
+ FRAME FULL [nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq java/lang/Object I I java/lang/Object] [arb/Real arb/Integer]
ALOAD 0
GETFIELD nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq.prodℝ2 : Larb/Real;
ALOAD 0
@@ -202,8 +202,8 @@
LOCALVARIABLE order I L0 L4 2
LOCALVARIABLE bits I L0 L4 3
LOCALVARIABLE result Larb/Real; L0 L4 4
- MAXSTACK = 10
- MAXLOCALS = 10
+ MAXSTACK = 7
+ MAXLOCALS = 5
// access flags 0x1
public <init>()V
@@ -281,8 +281,8 @@
INVOKESPECIAL arb/Real.<init> ()V
PUTFIELD nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq.ℝ3 : Larb/Real;
RETURN
- MAXSTACK = 10
- MAXLOCALS = 10
+ MAXSTACK = 4
+ MAXLOCALS = 1
// access flags 0x1
public initialize()V
@@ -382,8 +382,8 @@
ICONST_1
PUTFIELD nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq.isInitialized : Z
RETURN
- MAXSTACK = 10
- MAXLOCALS = 10
+ MAXSTACK = 4
+ MAXLOCALS = 1
// access flags 0x1
public close()V
@@ -424,6 +424,6 @@
GETFIELD nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq.ℝ3 : Larb/Real;
INVOKEVIRTUAL arb/Real.close ()V
RETURN
- MAXSTACK = 10
- MAXLOCALS = 10
+ MAXSTACK = 1
+ MAXLOCALS = 1
}
aload_0 at bytecode index 70
public arb.Real evaluate(arb.Integer, int, int, arb.Real);
descriptor: (Ljava/lang/Object;IILjava/lang/Object;)Ljava/lang/Object;
flags: (0x0001) ACC_PUBLIC
Code:
stack=10, locals=10, args_size=5
0: aload_0
1: getfield #14 // Field isInitialized:Z
4: ifne 11
7: aload_0
8: invokevirtual #18 // Method initialize:()V
11: aload_0
12: getfield #22 // Field z:Larb/Real;
15: aload_1
16: checkcast #24 // class arb/Integer
19: iload_3
20: aload_0
21: getfield #27 // Field ℝ1:Larb/Real;
24: invokevirtual #33 // Method arb/Real.pow:(Larb/Integer;ILarb/Real;)Larb/Real;
27: aload_0
28: getfield #37 // Field factorℝ1:Lfactorℝ1;
31: aload_1
32: checkcast #24 // class arb/Integer
35: putfield #42 // Field factorℝ1.n:Larb/Integer;
38: aload_0
39: getfield #45 // Field prodℝ1:Larb/Real;
42: invokevirtual #49 // Method arb/Real.multiplicativeIdentity:()Larb/Real;
45: pop
46: aload_0
47: getfield #52 // Field k:Larb/Integer;
50: aload_0
51: getfield #55 // Field c1:Larb/Integer;
54: invokevirtual #59 // Method arb/Integer.set:(Larb/Integer;)Larb/Integer;
57: pop
58: aload_0
59: getfield #62 // Field endIndexℤ1:Larb/Integer;
62: aload_0
63: getfield #65 // Field p:Larb/Integer;
66: invokevirtual #59 // Method arb/Integer.set:(Larb/Integer;)Larb/Integer;
69: pop
70: aload_0
71: getfield #45 // Field prodℝ1:Larb/Real;
74: aload_0
75: getfield #37 // Field factorℝ1:Lfactorℝ1;
78: aload_0
79: getfield #52 // Field k:Larb/Integer;
82: iload_3
83: aload_0
84: getfield #68 // Field valueℝ1:Larb/Real;
further along.. now at
java.lang.VerifyError: Instruction type does not match stack map
Exception Details:
Location:
nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq.evaluate(Ljava/lang/Object;IILjava/lang/Object;)Ljava/lang/Object; @184: aload_0
Reason:
Current frame's stack size doesn't match stackmap.
Current Frame:
bci: @184
flags: { }
locals: { 'nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq', 'java/lang/Object', integer, integer, 'java/lang/Object' }
stack: { 'arb/Real', 'arb/Integer' }
Stackmap Frame:
bci: @184
flags: { }
locals: { 'nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq', 'java/lang/Object', integer, integer, 'java/lang/Object' }
stack: { 'arb/Real' }
Bytecode:
0000000: 2ab4 000e 9a00 072a b600 122a b400 162b
0000010: c000 181d 2ab4 001b b600 212a b400 252b
0000020: c000 18b5 002a 2ab4 002d b600 3157 2ab4
0000030: 0034 2ab4 0037 b600 3b57 2ab4 003e 2ab4
0000040: 0041 b600 3b57 2ab4 002d 2ab4 0025 2ab4
0000050: 0034 1d2a b400 44b9 0047 0400 c000 1d1d
0000060: b600 4b57 2ab4 0034 b600 4f2a b400 3eb6
0000070: 0053 9eff d42a b400 2d1d 2ab4 0056 b600
0000080: 592b c000 181d 2ab4 005c b600 602a b400
0000090: 642b c000 18b5 0066 2ab4 0069 b600 3157
00000a0: 2ab4 0034 2ab4 0037 b600 3b57 2ab4 006c
00000b0: 2ab4 006f b600 3b57 2ab4 0069 2ab4 0064
00000c0: 2ab4 0034 1d2a b400 72b9 0047 0400 c000
00000d0: 1d1d b600 4b57 2ab4 0034 b600 4f2a b400
00000e0: 6cb6 0053 9eff d42a b400 691d 2ab4 0075
00000f0: b600 761d 1904 c000 1db6 0079 b0
Stackmap Table:
same_frame(@11)
same_locals_1_stack_item_frame(@70,Object[#29])
same_locals_1_stack_item_extended(@184,Object[#29])
at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3549)
at java.base/java.lang.Class.getConstructor0(Class.java:3754)
at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2930)
at arb4j/arb.expressions.Expression.constructNewInstance(Expression.java:1245)
at arb4j/arb.expressions.Expression.instantiate(Expression.java:1233)
at arb4j/arb.expressions.Expression.instantiate(Expression.java:172)
at arb4j/arb.functions.Function.express(Function.java:162)
at arb4j/arb.functions.polynomials.HypergeometricPolynomialTest.testSummand(HypergeometricPolynomi
public arb.Real evaluate(arb.Integer, int, int, arb.Real);
descriptor: (Ljava/lang/Object;IILjava/lang/Object;)Ljava/lang/Object;
flags: (0x0001) ACC_PUBLIC
Code:
stack=10, locals=10, args_size=5
0: aload_0
1: getfield #14 // Field isInitialized:Z
4: ifne 11
7: aload_0
8: invokevirtual #18 // Method initialize:()V
11: aload_0
12: getfield #22 // Field z:Larb/Real;
15: aload_1
16: checkcast #24 // class arb/Integer
19: iload_3
20: aload_0
21: getfield #27 // Field ℝ1:Larb/Real;
24: invokevirtual #33 // Method arb/Real.pow:(Larb/Integer;ILarb/Real;)Larb/Real;
27: aload_0
28: getfield #37 // Field factorℝ1:Lfactorℝ1;
31: aload_1
32: checkcast #24 // class arb/Integer
35: putfield #42 // Field factorℝ1.n:Larb/Integer;
38: aload_0
39: getfield #45 // Field prodℝ1:Larb/Real;
42: invokevirtual #49 // Method arb/Real.multiplicativeIdentity:()Larb/Real;
45: pop
46: aload_0
47: getfield #52 // Field k:Larb/Integer;
50: aload_0
51: getfield #55 // Field c1:Larb/Integer;
54: invokevirtual #59 // Method arb/Integer.set:(Larb/Integer;)Larb/Integer;
57: pop
58: aload_0
59: getfield #62 // Field endIndexℤ1:Larb/Integer;
62: aload_0
63: getfield #65 // Field p:Larb/Integer;
66: invokevirtual #59 // Method arb/Integer.set:(Larb/Integer;)Larb/Integer;
69: pop
70: aload_0
71: getfield #45 // Field prodℝ1:Larb/Real;
74: aload_0
75: getfield #37 // Field factorℝ1:Lfactorℝ1;
78: aload_0
79: getfield #52 // Field k:Larb/Integer;
82: iload_3
83: aload_0
84: getfield #68 // Field valueℝ1:Larb/Real;
87: invokeinterface #71, 4 // InterfaceMethod arb/functions/Function.evaluate:(Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;
92: checkcast #29 // class arb/Real
95: iload_3
96: invokevirtual #75 // Method arb/Real.mul:(Larb/Real;I)Larb/Real;
99: pop
100: aload_0
101: getfield #52 // Field k:Larb/Integer;
104: invokevirtual #79 // Method arb/Integer.increment:()Larb/Integer;
107: aload_0
108: getfield #62 // Field endIndexℤ1:Larb/Integer;
111: invokevirtual #83 // Method arb/Integer.compareTo:(Larb/Integer;)I
114: ifle 70
117: aload_0
118: getfield #45 // Field prodℝ1:Larb/Real;
121: iload_3
122: aload_0
123: getfield #86 // Field ℝ2:Larb/Real;
126: invokevirtual #89 // Method arb/Real.mul:(Larb/Real;ILarb/Real;)Larb/Real;
129: aload_1
130: checkcast #24 // class arb/Integer
133: iload_3
134: aload_0
135: getfield #92 // Field ℤ1:Larb/Integer;
138: invokevirtual #96 // Method arb/Integer.factorial:(ILarb/Integer;)Larb/Integer;
141: aload_0
142: getfield #100 // Field factorℝ2:Lfactorℝ2;
145: aload_1
146: checkcast #24 // class arb/Integer
149: putfield #102 // Field factorℝ2.n:Larb/Integer;
152: aload_0
153: getfield #105 // Field prodℝ2:Larb/Real;
156: invokevirtual #49 // Method arb/Real.multiplicativeIdentity:()Larb/Real;
159: pop
160: aload_0
161: getfield #52 // Field k:Larb/Integer;
164: aload_0
165: getfield #55 // Field c1:Larb/Integer;
168: invokevirtual #59 // Method arb/Integer.set:(Larb/Integer;)Larb/Integer;
171: pop
172: aload_0
173: getfield #108 // Field endIndexℤ2:Larb/Integer;
176: aload_0
177: getfield #111 // Field q:Larb/Integer;
180: invokevirtual #59 // Method arb/Integer.set:(Larb/Integer;)Larb/Integer;
183: pop
184: aload_0
Generating n➔z^n*∏k➔α[k]₍ₙ₎{k=1…p}/(n!*∏k➔β[k]₍ₙ₎{k=1…q})
BinaryOperation.generate( this=(z^n)*Πα[k]₍ₙ₎{k=1…p}/n!*Πβ[k]₍ₙ₎{k=1…q},
left=(z^n)*Πα[k]₍ₙ₎{k=1…p},
left.type=class arb.Real,
operation=div,
right=n!*Πβ[k]₍ₙ₎{k=1…q},
right.type=class arb.Real,
resultType=class arb.Real )
BinaryOperation.generate( this=(z^n)*Πα[k]₍ₙ₎{k=1…p},
left=z^n,
left.type=class arb.Real,
operation=mul,
right=Πα[k]₍ₙ₎{k=1…p},
right.type=class arb.Real,
resultType=class arb.Real )
BinaryOperation.generate( this=z^n,
left=z,
left.type=class arb.Real,
operation=pow,
right=n,
right.type=class arb.Integer,
resultType=class arb.Real )
Variable.generate( this=z, resultType=class arb.Real)
Variable.generate( this=n, resultType=class arb.Integer)
NaryMultiplication.assignFieldNames(resultType=class arb.Real,
factorFunctionFieldName=factorℝ1,
factorValueFieldName=valueℝ1)
NaryMultiplication.generateFactorClass( expr=k➔α[k]₍ₙ₎,resultType=class arb.Real)
Generating k➔α[k]₍ₙ₎
BinaryOperation.generate( this=α[k]⋰n,
left=α[k],
left.type=class arb.Real,
operation=ascendingFactorial,
right=n,
right.type=class arb.Integer,
resultType=class arb.Real )
Variable.generate( this=α[k], resultType=class arb.Real)
Variable.generate( this=k, resultType=class arb.Integer)
Variable.generate( this=n, resultType=class arb.Integer)
NaryMultiplication.propagateInputToFactorClass( factorFunctionFieldName=factorℝ1,
independentVariableNode=n,
independentVariableNode.type=class arb.Integer)
getField(functionClass=nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq,
fieldName=k,
fieldTypeSignature=Larb/Integer;
Variable.generate( this=p, resultType=class arb.Integer)
NaryMultiplication.designateLabel( label=L680576081,
addTypeToStackMap=true)
getField(functionClass=nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq,
fieldName=k,
fieldTypeSignature=Larb/Integer;
BinaryOperation.generate( this=n!*Πβ[k]₍ₙ₎{k=1…q},
left=n!,
left.type=class arb.Integer,
operation=mul,
right=Πβ[k]₍ₙ₎{k=1…q},
right.type=class arb.Real,
resultType=class arb.Real )
FunctionCall.generate: this=n! resultType=class arb.Integer
Variable.generate( this=n, resultType=class arb.Real)
NaryMultiplication.assignFieldNames(resultType=class arb.Real,
factorFunctionFieldName=factorℝ2,
factorValueFieldName=valueℝ2)
NaryMultiplication.generateFactorClass( expr=k➔β[k]₍ₙ₎,resultType=class arb.Real)
Generating k➔β[k]₍ₙ₎
BinaryOperation.generate( this=β[k]⋰n,
left=β[k],
left.type=class arb.Real,
operation=ascendingFactorial,
right=n,
right.type=class arb.Integer,
resultType=class arb.Real )
Variable.generate( this=β[k], resultType=class arb.Real)
Variable.generate( this=k, resultType=class arb.Integer)
Variable.generate( this=n, resultType=class arb.Integer)
NaryMultiplication.propagateInputToFactorClass( factorFunctionFieldName=factorℝ2,
independentVariableNode=n,
independentVariableNode.type=class arb.Integer)
getField(functionClass=nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq,
fieldName=k,
fieldTypeSignature=Larb/Integer;
Variable.generate( this=q, resultType=class arb.Integer)
NaryMultiplication.designateLabel( label=L453523494,
addTypeToStackMap=true)
getField(functionClass=nzⁿTimesProdkαSubknWherekEquals1TopOvernBangTimesProdkβSubknWherekEquals1Toq,
fieldName=k,
fieldTypeSignature=Larb/Integer;
table the issue for now.. its a bit more complex than its worth dealing with for now given that automatic frame generation is preferably and this is a compile-time/initializing thing anyway its not like it HAS to be megafast even though it still is with the computeframes option turned on