crowlogic / arb4j

arb4j is a Java API for the arbitrary precision ball arithmetic library found at http://arblib.org
Other
1 stars 0 forks source link

expression compiler; wrong type used attempting to propagate input field to subexpression, Exception in thread "main" java.lang.NoSuchFieldError: Class factorℝ1 does not have member field 'arb.Integer z' #357

Closed crowlogic closed 5 months ago

crowlogic commented 5 months ago

Exception in thread "main" java.lang.NoSuchFieldError: Class factorℝ1 does not have member field 'arb.Integer z'

Generating z➔Σn➔z^n*∏k➔α[k]₍ₙ₎{k=1…p}/n!*∏k➔β[k]₍ₙ₎{k=1…q}{n=0…N}
Sum.assignFieldNames(resultType=class arb.Real) factorFunctionFieldName=factorℝ1 factorValueFieldName=valueℝ1

Sum: generateFactorClass( expr=n➔z^n*∏k➔α[k]₍ₙ₎{k=1…p}/n!*∏k➔β[k]₍ₙ₎{k=1…q},resultType=class arb.Real)
Generating n➔z^n*∏k➔α[k]₍ₙ₎{k=1…p}/n!*∏k➔β[k]₍ₙ₎{k=1…q}
BinaryOperation.generate( this=BinaryOperation[left=$\frac{{{z}^{n}} \cdot {\prod_{k = 1}^{p}{α[k]₍ₙ₎}}}{n!}$, right=$\prod_{k = 1}^{q}{β[k]₍ₙ₎}$, operation=mul, generatedType=null], resultType=class arb.Real, left.type=class arb.Real, right.type=class arb.Real )

BinaryOperation.generate( this=BinaryOperation[left=${{z}^{n}} \cdot {\prod_{k = 1}^{p}{α[k]₍ₙ₎}}$, right=$n!$, operation=div, generatedType=null], resultType=class arb.Real, left.type=class arb.Real, right.type=class arb.Integer )

BinaryOperation.generate( this=BinaryOperation[left=${z}^{n}$, right=$\prod_{k = 1}^{p}{α[k]₍ₙ₎}$, operation=mul, generatedType=null], resultType=class arb.Real, left.type=class arb.Integer, right.type=class arb.Real )

BinaryOperation.generate( this=BinaryOperation[left=$z$, right=$n$, operation=pow, generatedType=null], resultType=class arb.Integer, left.type=class arb.Integer, right.type=class arb.Integer )

Product.assignFieldNames(resultType=class arb.Real) factorFunctionFieldName=factorℝ2 factorValueFieldName=valueℝ2

Product: generateFactorClass( expr=k➔α[k]₍ₙ₎,resultType=class arb.Real)
Generating k➔α[k]₍ₙ₎
BinaryOperation.generate( this=BinaryOperation[left=$α_{k}$, right=$n$, operation=risingFactorial, generatedType=null], resultType=class arb.Real, left.type=class arb.Real, right.type=class arb.Integer )

FunctionCall.generate: this=FunctionCall[name=factorial, arg=n, generatedType=arb.Integer] resultType=class arb.Integer

Product.assignFieldNames(resultType=class arb.Real) factorFunctionFieldName=factorℝ3 factorValueFieldName=valueℝ3

Product: generateFactorClass( expr=k➔β[k]₍ₙ₎,resultType=class arb.Real)
Generating k➔β[k]₍ₙ₎
BinaryOperation.generate( this=BinaryOperation[left=$β_{k}$, right=$n$, operation=risingFactorial, generatedType=null], resultType=class arb.Real, left.type=class arb.Real, right.type=class arb.Integer )

Exception in thread "main" java.lang.NoSuchFieldError: Class factorℝ1 does not have member field 'arb.Integer z'
    at factorℝ1.evaluate(Unknown Source)
    at arb4j/arb.functions.Function.evaluate(Function.java:111)
    at F.evaluate(Unknown Source)
    at arb4j/arb.functions.polynomials.HypergeometricPolynomial.main(HypergeometricPolynomial.java:39)
crowlogic commented 5 months ago
Generating z➔Σn➔z^n*∏k➔α[k]₍ₙ₎{k=1…p}/(n!*∏k➔β[k]₍ₙ₎{k=1…q}){n=0…N}
Sum.assignFieldNames(resultType=class arb.Real) factorFunctionFieldName=factorℝ1 factorValueFieldName=valueℝ1

Sum: generateFactorClass( expr=n➔z^n*∏k➔α[k]₍ₙ₎{k=1…p}/(n!*∏k➔β[k]₍ₙ₎{k=1…q}),resultType=class arb.Real)
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}, resultType=class arb.Real, left.type=class arb.Real, right.type=class arb.Real )

BinaryOperation.generate( this=z^n*Πα[k]₍ₙ₎{k=1…p}, resultType=class arb.Real, left.type=class arb.Integer, right.type=class arb.Real )

BinaryOperation.generate( this=z^n, resultType=class arb.Integer, left.type=class arb.Integer, right.type=class arb.Integer )

Product.assignFieldNames(resultType=class arb.Real) factorFunctionFieldName=factorℝ2 factorValueFieldName=valueℝ2

Product: generateFactorClass( expr=k➔α[k]₍ₙ₎,resultType=class arb.Real)
Generating k➔α[k]₍ₙ₎
BinaryOperation.generate( this=α_{k}⋰n, resultType=class arb.Real, left.type=class arb.Real, right.type=class arb.Integer )

BinaryOperation.generate( this=n!*Πβ[k]₍ₙ₎{k=1…q}, resultType=class arb.Real, left.type=class arb.Integer, right.type=class arb.Real )

FunctionCall.generate: this=n! resultType=class arb.Integer

Product.assignFieldNames(resultType=class arb.Real) factorFunctionFieldName=factorℝ3 factorValueFieldName=valueℝ3

Product: generateFactorClass( expr=k➔β[k]₍ₙ₎,resultType=class arb.Real)
Generating k➔β[k]₍ₙ₎
BinaryOperation.generate( this=β_{k}⋰n, resultType=class arb.Real, left.type=class arb.Real, right.type=class arb.Integer )

Exception in thread "main" java.lang.NoSuchFieldError: Class factorℝ1 does not have member field 'arb.Integer z'
    at factorℝ1.evaluate(Unknown Source)
    at arb4j@0.88/arb.functions.Function.evaluate(Function.java:111)
    at F.evaluate(Unknown Source)
    at arb4j@0.88/arb.functions.polynomials.HypergeometricPolynomial.main(HypergeometricPolynomial.java:39)
crowlogic commented 5 months ago
Generating z➔Σn➔z^n*∏k➔α[k]₍ₙ₎{k=1…p}/(n!*∏k➔β[k]₍ₙ₎{k=1…q}){n=0…N}

Summation.assignFieldNames(resultType=class arb.Real,
                           factorFunctionFieldName=factorℝ1,
                           factorValueFieldName=valueℝ1)

Summation.generateFactorClass( expr=n➔z^n*∏k➔α[k]₍ₙ₎{k=1…p}/(n!*∏k➔β[k]₍ₙ₎{k=1…q}),resultType=class arb.Real)

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.type=class arb.Real,
                          operation=div,
                          right.type=class arb.Real,
                          resultType=class arb.Real )

BinaryOperation.generate( this=((z)^(n))*(Πα[k]₍ₙ₎{k=1…p}),
                          left.type=class arb.Integer,
                          operation=mul,
                          right.type=class arb.Real,
                          resultType=class arb.Real )

BinaryOperation.generate( this=(z)^(n),
                          left.type=class arb.Integer,
                          operation=pow,
                          right.type=class arb.Integer,
                          resultType=class arb.Integer )

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.type=class arb.Real,
                          operation=ascendingFactorial,
                          right.type=class arb.Integer,
                          resultType=class arb.Real )

getField(functionClass=factorℝ1,
         fieldName=k,
         fieldTypeSignature=Larb/Integer;

getField(functionClass=factorℝ1,
         fieldName=k,
         fieldTypeSignature=Larb/Integer;

BinaryOperation.generate( this=(n!)*(Πβ[k]₍ₙ₎{k=1…q}),
                          left.type=class arb.Integer,
                          operation=mul,
                          right.type=class arb.Real,
                          resultType=class arb.Real )

FunctionCall.generate: this=n! resultType=class arb.Integer

NaryMultiplication.assignFieldNames(resultType=class arb.Real,
                                    factorFunctionFieldName=factorℝ3,
                                    factorValueFieldName=valueℝ3)

NaryMultiplication.generateFactorClass( expr=k➔β[k]₍ₙ₎,resultType=class arb.Real)

Generating k➔β[k]₍ₙ₎

BinaryOperation.generate( this=(β_{k})⋰(n),
                          left.type=class arb.Real,
                          operation=ascendingFactorial,
                          right.type=class arb.Integer,
                          resultType=class arb.Real )

getField(functionClass=factorℝ1,
         fieldName=k,
         fieldTypeSignature=Larb/Integer;

getField(functionClass=factorℝ1,
         fieldName=k,
         fieldTypeSignature=Larb/Integer;

getField(functionClass=F,
         fieldName=n,
         fieldTypeSignature=Larb/Integer;

getField(functionClass=F,
         fieldName=n,
         fieldTypeSignature=Larb/Integer;

Exception in thread "main" java.lang.NoSuchFieldError: Class factorℝ1 does not have member field 'arb.Integer z'
    at factorℝ1.evaluate(Unknown Source)
    at arb4j@0.88/arb.functions.Function.evaluate(Function.java:111)
    at F.evaluate(Unknown Source)
    at arb4j@0.88/arb.functions.polynomials.HypergeometricPolynomial.main(HypergeometricPolynomial.java:39)
crowlogic commented 5 months ago

need to find out why its trying to get the 'z' field as an Integer instead of Real

  // access flags 0x1
  // signature (Larb/Integer;IILarb/Real;)Larb/Real;
  // declaration: arb.Real evaluate(arb.Integer, int, int, arb.Real)
  public evaluate(Ljava/lang/Object;IILjava/lang/Object;)Ljava/lang/Object;
   L0
    ALOAD 0
    GETFIELD factorℝ1.isInitialized : Z
    IFNE L1
    ALOAD 0
    INVOKEVIRTUAL factorℝ1.initialize ()V
   L1
   FRAME SAME
    ALOAD 0
    GETFIELD factorℝ1.z : Larb/Integer;
crowlogic commented 5 months ago
BinaryOperation.generate( this=(z^n)*Πα[k]₍ₙ₎{k=1…p},
                          left=z^n,
                          left.type=class arb.Integer,
                          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.Integer,
                          operation=pow,
                          right=n,
                          right.type=class arb.Integer,
                          resultType=class arb.Integer )
crowlogic commented 5 months ago

its due to this method in the Variable class

  @Override
  public Class<?> type()
  {
    return isIndeterminant ? expression.rangeType : reference.type();
  }
crowlogic commented 5 months ago
java.lang.AssertionError: why is z an integer? #357
    at arb4j/arb.expressions.nodes.Variable.resolveReference(Variable.java:292)
    at arb4j/arb.expressions.nodes.Variable.<init>(Variable.java:129)
    at arb4j/arb.expressions.Expression.newVariable(Expression.java:1234)
    at arb4j/arb.expressions.Expression.resolveFunctionOrVariableReference(Expression.java:1402)
    at arb4j/arb.expressions.Expression.evaluate(Expression.java:571)
    at arb4j/arb.expressions.Expression.exponentiate(Expression.java:687)
    at arb4j/arb.expressions.Expression.exponentiateMultiplyAndDivide(Expression.java:723)
    at arb4j/arb.expressions.Expression.resolve(Expression.java:527)
    at arb4j/arb.expressions.Expression.parseRoot(Expression.java:679)
    at arb4j/arb.expressions.Compiler.express(Compiler.java:143)
    at arb4j/arb.expressions.nodes.nary.NAryOperation.generateFactorClass(NAryOperation.java:311)
    at arb4j/arb.expressions.nodes.nary.NAryOperation.generate(NAryOperation.java:264)
    at arb4j/arb.expressions.Expression.generateEvaluationMethod(Expression.java:976)
    at arb4j/arb.expressions.Expression.compile(Expression.java:745)
    at arb4j/arb.expressions.Compiler.express(Compiler.java:143)
    at arb4j/arb.expressions.Compiler.express(Compiler.java:156)
    at arb4j/arb.expressions.Compiler.express(Compiler.java:109)
    at arb4j/arb.expressions.Expression.instantiate(Expression.java:173)
    at arb4j/arb.functions.real.RealFunction.express(RealFunction.java:635)
    at arb4j/arb.functions.real.RealFunction.express(RealFunction.java:630)
    at arb4j/arb.functions.polynomials.HypergeometricPolynomial.<init>(HypergeometricPolynomial.java:68)
    at arb4j/arb.functions.polynomials.HypergeometricPolynomialTest.testSum(HypergeometricPolynomialTest.java:21)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at junit@4.13.2/junit.framework.TestCase.runTest(TestCase.java:177)
    at junit@4.13.2/junit.framework.TestCase.runBare(TestCase.java:142)
    at junit@4.13.2/junit.framework.TestResult$1.protect(TestResult.java:122)
    at junit@4.13.2/junit.framework.TestResult.runProtected(TestResult.java:142)
    at junit@4.13.2/junit.framework.TestResult.run(TestResult.java:125)
    at junit@4.13.2/junit.framework.TestCase.run(TestCase.java:130)
    at junit@4.13.2/junit.framework.TestSuite.runTest(TestSuite.java:241)
    at junit@4.13.2/junit.framework.TestSuite.run(TestSuite.java:236)
    at junit@4.13.2/org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:93)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:529)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
crowlogic commented 5 months ago
 isIndependentVariableOfParentExpression=true

Variable.resolveInheritedVariableReference( name=z
                                            reference=z
                                            parentExpressionsIndependentVariableNode=z
                                            thisExpressionsindependentVariableNode=n
                                            type=class arb.Integer
                                            parentExpressionsDomain=class arb.Real)
crowlogic commented 5 months ago
Set reference type of z to class arb.Real
Generating z➔Σn➔z^n*∏k➔α[k]₍ₙ₎{k=1…p}/(n!*∏k➔β[k]₍ₙ₎{k=1…q}){n=0…N}

Summation.assignFieldNames(resultType=class arb.Real,
                           factorFunctionFieldName=factorℝ1,
                           factorValueFieldName=valueℝ1)

Summation.generateFactorClass( expr=n➔z^n*∏k➔α[k]₍ₙ₎{k=1…p}/(n!*∏k➔β[k]₍ₙ₎{k=1…q}),resultType=class arb.Real)

Set reference type of n to class arb.Integer
z indeterminant=false
 isIndependent=false
 isIndependentVariableOfParentExpression=true

Variable.resolveInheritedVariableReference( name=z
                                            reference=z
                                            parentExpressionsIndependentVariableNode=z
                                            thisExpressionsindependentVariableNode=n
                                            type=class arb.Integer
                                            parentExpressionsDomain=class arb.Real
                                            parentExpressionsRange=class arb.Real
                                            expressionDomain=class arb.Integer
                                            expressionRange=class arb.Real)

z indeterminant=false
 isIndependent=false
 isIndependentVariableOfParentExpression=true
crowlogic commented 5 months ago
java.lang.AssertionError: why is z an integer? #357 its using this expressions domain type rather than the containing/parent expressions domain type apparently which is the crux of the issue
    at arb4j/arb.expressions.nodes.Variable.resolveInheritedVariableReference(Variable.java:340)
    at arb4j/arb.expressions.nodes.Variable.resolveReference(Variable.java:296)
    at arb4j/arb.expressions.nodes.Variable.<init>(Variable.java:142)
    at arb4j/arb.expressions.Expression.newVariable(Expression.java:1234)
    at arb4j/arb.expressions.Expression.resolveFunctionOrVariableReference(Expression.java:1402)
    at arb4j/arb.expressions.Expression.evaluate(Expression.java:571)
    at arb4j/arb.expressions.Expression.exponentiate(Expression.java:687)
    at arb4j/arb.expressions.Expression.exponentiateMultiplyAndDivide(Expression.java:723)
    at arb4j/arb.expressions.Expression.resolve(Expression.java:527)
    at arb4j/arb.expressions.Expression.parseRoot(Expression.java:679)
    at arb4j/arb.expressions.Compiler.express(Compiler.java:143)
    at arb4j/arb.expressions.nodes.nary.NAryOperation.generateFactorClass(NAryOperation.java:311)
    at arb4j/arb.expressions.nodes.nary.NAryOperation.generate(NAryOperation.java:264)
    at arb4j/arb.expressions.Expression.generateEvaluationMethod(Expression.java:976)
    at arb4j/arb.expressions.Expression.compile(Expression.java:745)
    at arb4j/arb.expressions.Compiler.express(Compiler.java:143)
    at arb4j/arb.expressions.Compiler.express(Compiler.java:156)
    at arb4j/arb.expressions.Compiler.express(Compiler.java:109)
    at arb4j/arb.expressions.Expression.instantiate(Expression.java:173)
    at arb4j/arb.functions.real.RealFunction.express(RealFunction.java:635)
    at arb4j/arb.functions.real.RealFunction.express(RealFunction.java:630)
    at arb4j/arb.functions.polynomials.HypergeometricPolynomial.<init>(HypergeometricPolynomial.java:65)
    at arb4j/arb.functions.polynomials.HypergeometricPolynomialTest.testSum(HypergeometricPolynomialTest.java:21)