[ 
https://issues.apache.org/jira/browse/LUCENE-8227?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16418092#comment-16418092
 ] 

Karl Wright edited comment on LUCENE-8227 at 3/28/18 9:09 PM:
--------------------------------------------------------------

So, the following is true:

(1) All polygon points are in the hemisphere y>=0
(2) The bounds point we think is right is on the edge plane, precision 1.0e-17
(3) The bounds point we think is right is in the hemisphere y>=0
(4) But, the membership sided plane that rejects the bounds point we think is 
right accepts the antipodes point, which is in the y < 0 part of the world
(5) All edges are properly constructed so that each endpoint is within the 
other endpoint's membership sided plane

The conclusion is that the sector of the edge plane that is not contributing 
properly towards the bounds is at least partly in the y<0 space.  But since the 
two endpoints are both in the y>=0 space, this makes no sense, because any arc 
that connects the two would have to remain in the y>=0 space as well.

Adding the following code to the GeoComplexPolygon constructor demonstrates 
that nothing odd is happening with edge construction:

{code}
      if (startPoint.y < 0.0 || endPoint.y < 0.0) {
        System.out.println("Found start/end in y < 0 space");
        throw new IllegalStateException("blah");
      }
{code}

No exception is thrown, so there are no unexpected points being included 
somehow.

I'm stumped.



was (Author: [email protected]):
So, the following is true:

(1) All polygon points are in the hemisphere y>=0
(2) The bounds point we think is right is on the edge plane, precision 1.0e-17
(3) The bounds point we think is right is in the hemisphere y>=0
(4) But, the membership sided plane that rejects the bounds point we think is 
right accepts the antipodes point, which is in the y < 0 part of the world
(5) All edges are properly constructed so that each endpoint is within the 
other endpoint's membership sided plane

The conclusion is that the sector of the edge plane that is not contributing 
properly towards the bounds is at least partly in the y<0 space.  But since the 
two endpoints are both in the y>=0 space, this makes no sense, because any arc 
that connects the two would have to remain in the y>=0 space as well.
 

> TestGeo3DPoint.testGeo3DRelations() reproducing failures
> --------------------------------------------------------
>
>                 Key: LUCENE-8227
>                 URL: https://issues.apache.org/jira/browse/LUCENE-8227
>             Project: Lucene - Core
>          Issue Type: Bug
>          Components: general/test, modules/spatial3d
>            Reporter: Steve Rowe
>            Assignee: Karl Wright
>            Priority: Major
>
> Three failures: two NPEs and one assert "assess edge that ends in a crossing 
> can't both up and down":
> 1.a. (NPE) From 
> [https://builds.apache.org/job/Lucene-Solr-NightlyTests-master/1512/]:
> {noformat}
>    [junit4]   2> NOTE: reproduce with: ant test  -Dtestcase=TestGeo3DPoint 
> -Dtests.method=testGeo3DRelations -Dtests.seed=C1F88333EC85EAE0 
> -Dtests.multiplier=2 -Dtests.nightly=true -Dtests.slow=true 
> -Dtests.linedocsfile=/home/jenkins/jenkins-slave/workspace/Lucene-Solr-NightlyTests-master/test-data/enwiki.random.lines.txt
>  -Dtests.locale=ga -Dtests.timezone=America/Ojinaga -Dtests.asserts=true 
> -Dtests.file.encoding=UTF-8
>    [junit4] ERROR   10.4s J1 | TestGeo3DPoint.testGeo3DRelations <<<
>    [junit4]    > Throwable #1: java.lang.NullPointerException
>    [junit4]    >      at 
> __randomizedtesting.SeedInfo.seed([C1F88333EC85EAE0:7187FEA763C8447C]:0)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$DualCrossingEdgeIterator.countCrossingPoint(GeoComplexPolygon.java:1382)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$DualCrossingEdgeIterator.matches(GeoComplexPolygon.java:1283)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Node.traverse(GeoComplexPolygon.java:564)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Node.traverse(GeoComplexPolygon.java:572)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Node.traverse(GeoComplexPolygon.java:569)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Tree.traverse(GeoComplexPolygon.java:660)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Tree.traverse(GeoComplexPolygon.java:646)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon.isWithin(GeoComplexPolygon.java:370)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoBaseMembershipShape.isWithin(GeoBaseMembershipShape.java:36)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoBaseShape.getBounds(GeoBaseShape.java:35)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon.getBounds(GeoComplexPolygon.java:440)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.TestGeo3DPoint.testGeo3DRelations(TestGeo3DPoint.java:225)
>    [junit4]    >      at java.lang.Thread.run(Thread.java:748)
> {noformat}
> 1.b. (NPE) From 
> [https://builds.apache.org/job/Lucene-Solr-SmokeRelease-7.x/184/]:
> {noformat}
>    [smoker]    [junit4]   2> NOTE: reproduce with: ant test  
> -Dtestcase=TestGeo3DPoint -Dtests.method=testGeo3DRelations 
> -Dtests.seed=F2A368AB96A2FD75 -Dtests.multiplier=2 -Dtests.locale=fr-ML 
> -Dtests.timezone=America/Godthab -Dtests.asserts=true 
> -Dtests.file.encoding=UTF-8
>    [smoker]    [junit4] ERROR   0.99s J0 | TestGeo3DPoint.testGeo3DRelations 
> <<<
>    [smoker]    [junit4]    > Throwable #1: java.lang.NullPointerException
>    [smoker]    [junit4]    >  at 
> __randomizedtesting.SeedInfo.seed([F2A368AB96A2FD75:42DC153F19EF53E9]:0)
>    [smoker]    [junit4]    >  at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$DualCrossingEdgeIterator.countCrossingPoint(GeoComplexPolygon.java:1382)
>    [smoker]    [junit4]    >  at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$DualCrossingEdgeIterator.matches(GeoComplexPolygon.java:1283)
>    [smoker]    [junit4]    >  at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Node.traverse(GeoComplexPolygon.java:564)
>    [smoker]    [junit4]    >  at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Node.traverse(GeoComplexPolygon.java:572)
>    [smoker]    [junit4]    >  at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Node.traverse(GeoComplexPolygon.java:572)
>    [smoker]    [junit4]    >  at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Tree.traverse(GeoComplexPolygon.java:660)
>    [smoker]    [junit4]    >  at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Tree.traverse(GeoComplexPolygon.java:646)
>    [smoker]    [junit4]    >  at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon.isWithin(GeoComplexPolygon.java:370)
>    [smoker]    [junit4]    >  at 
> org.apache.lucene.spatial3d.geom.GeoBaseMembershipShape.isWithin(GeoBaseMembershipShape.java:36)
>    [smoker]    [junit4]    >  at 
> org.apache.lucene.spatial3d.geom.GeoBaseShape.getBounds(GeoBaseShape.java:43)
>    [smoker]    [junit4]    >  at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon.getBounds(GeoComplexPolygon.java:440)
>    [smoker]    [junit4]    >  at 
> org.apache.lucene.spatial3d.TestGeo3DPoint.testGeo3DRelations(TestGeo3DPoint.java:224)
>    [smoker]    [junit4]    >  at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>    [smoker]    [junit4]    >  at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>    [smoker]    [junit4]    >  at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>    [smoker]    [junit4]    >  at 
> java.base/java.lang.reflect.Method.invoke(Method.java:564)
>    [smoker]    [junit4]    >  at 
> java.base/java.lang.Thread.run(Thread.java:844)
> {noformat}
> 2. (both up&down) From 
> [https://jenkins.thetaphi.de/job/Lucene-Solr-7.x-Linux/1598/]:
> {noformat}
>    [junit4]   2> NOTE: reproduce with: ant test  -Dtestcase=TestGeo3DPoint 
> -Dtests.method=testGeo3DRelations -Dtests.seed=BACC479CC2D38CCA 
> -Dtests.multiplier=3 -Dtests.slow=true -Dtests.badapples=true 
> -Dtests.locale=lv -Dtests.timezone=SystemV/AST4ADT -Dtests.asserts=true 
> -Dtests.file.encoding=UTF-8
>    [junit4] FAILURE 3.01s J2 | TestGeo3DPoint.testGeo3DRelations <<<
>    [junit4]    > Throwable #1: java.lang.AssertionError: assess edge that 
> ends in a crossing can't both up and down
>    [junit4]    >      at 
> __randomizedtesting.SeedInfo.seed([BACC479CC2D38CCA:AB33A084D9E2256]:0)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$DualCrossingEdgeIterator.countCrossingPoint(GeoComplexPolygon.java:1438)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$DualCrossingEdgeIterator.matches(GeoComplexPolygon.java:1283)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Node.traverse(GeoComplexPolygon.java:564)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Tree.traverse(GeoComplexPolygon.java:660)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon$Tree.traverse(GeoComplexPolygon.java:646)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon.isWithin(GeoComplexPolygon.java:370)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoBaseMembershipShape.isWithin(GeoBaseMembershipShape.java:36)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoBaseShape.getBounds(GeoBaseShape.java:43)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.geom.GeoComplexPolygon.getBounds(GeoComplexPolygon.java:440)
>    [junit4]    >      at 
> org.apache.lucene.spatial3d.TestGeo3DPoint.testGeo3DRelations(TestGeo3DPoint.java:224)
>    [junit4]    >      at java.lang.Thread.run(Thread.java:748)
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to