Skip to content

Commit

Permalink
Compute both signs, and check both, since one will work. (#1940)
Browse files Browse the repository at this point in the history
* Compute both signs, and check both, since one will work.

Either sign is possible, so calculate both, and so we expect one failure,
but if both fail, then the calculation is wrong.

* Compute alternative sign.
  • Loading branch information
joshua-cogliati-inl authored Aug 10, 2022
1 parent b2f9c7f commit ecd7c67
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
10 changes: 10 additions & 0 deletions tests/crow/test_mvn_pca.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,19 @@
COVn = np.asarray(cov).reshape(-1,int(sqrt(len(cov))))
Un,Sn,Vn = LA.svd(COVn,full_matrices=False)
uNp = Un[:,:rank]
print("uNp", uNp)
altuNp = np.array(uNp)
altuNp[:,1] = -uNp[:,1]
altuNp[:,3] = -uNp[:,3]
sNp = Sn[:rank]
coordinateInOriginalSpace = np.dot(uNp,np.dot(np.diag(np.sqrt(sNp)),coordinateInTransformedSpace))
altCoordinateInOriginalSpace = np.dot(altuNp,np.dot(np.diag(np.sqrt(sNp)),coordinateInTransformedSpace))

#compute the gold solution:
mu = np.asarray(mu)
coordinateInOriginalSpace += mu
altCoordinateInOriginalSpace += mu
print("coordinateInOriginalSpace", coordinateInOriginalSpace, "altCoordinateInOriginalSpace", altCoordinateInOriginalSpace)

#call crow to compute the coordinate
coordinate = mvnDistribution.coordinateInTransformedSpace(rank)
Expand All @@ -77,6 +84,9 @@

utils.checkArrayAllClose("MVN return coordinate in transformed space",coordinate,coordinateInTransformedSpace,results)
utils.checkArrayAllClose("MVN return coordinate in original space",Xcoordinate,coordinateInOriginalSpace,results)
utils.checkArrayAllClose("MVN return coordinate in original space alt",Xcoordinate,altCoordinateInOriginalSpace,results)
#The Xcoordinate will either equal the original, or the sign inverted alternate, so remove one failure, because one will fail. If both fail, that is a problem.
results["fail"] -= 1

print(results)

Expand Down
8 changes: 8 additions & 0 deletions tests/crow/test_pca_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,17 @@
COVn = np.asarray(cov).reshape(-1,int(sqrt(len(cov))))
Un,Sn,Vn = LA.svd(COVn,full_matrices=False)
uNp = Un[:,index]
altuNp = np.array(uNp)
altuNp[:,2:4] = -uNp[:,2:4]
sNp = Sn[index]
coordinateInOriginalSpace = np.dot(uNp,np.dot(np.diag(np.sqrt(sNp)),coordinateInTransformedSpace))
altCoordinateInOriginalSpace = np.dot(altuNp,np.dot(np.diag(np.sqrt(sNp)),coordinateInTransformedSpace))

#compute the gold solution:
mu = np.asarray(mu)
coordinateInOriginalSpace += mu
altCoordinateInOriginalSpace += mu
print("coordinateInOriginalSpace", coordinateInOriginalSpace, "altCoordinateInOriginalSpace", altCoordinateInOriginalSpace)

#call crow to compute the coordinate
Xcoordinate = mvnDistribution.coordinateInverseTransformed(coordinateInTransformedSpaceCpp,indexCpp)
Expand All @@ -79,6 +84,9 @@
results = {"pass":0,"fail":0}

utils.checkArrayAllClose("MVN return coordinate in original space",Xcoordinate,coordinateInOriginalSpace,results)
utils.checkArrayAllClose("MVN return coordinate in original space alt",Xcoordinate,altCoordinateInOriginalSpace,results)
#The Xcoordinate will either equal the original, or the sign inverted alternate, so remove one failure, because one will fail. If both fail, that is a problem.
results["fail"] -= 1

print(results)

Expand Down

0 comments on commit ecd7c67

Please sign in to comment.