Skip to content

Commit

Permalink
Revert "created NOSA-compliant project"
Browse files Browse the repository at this point in the history
This reverts commit dc2e487.
  • Loading branch information
kip-hart committed Apr 4, 2020
1 parent 5cb99d5 commit aaad014
Show file tree
Hide file tree
Showing 7 changed files with 95 additions and 298 deletions.
3 changes: 0 additions & 3 deletions .gitattributes

This file was deleted.

11 changes: 3 additions & 8 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,10 @@ The form contains some questions that will help us best address your issue.

The code is hosted on [GitHub](https://www.github.com/kip-hart/MicroStructPy),
so you will need to use [Git](http://git-scm.com/) to clone the project and
make changes to the codebase. Please also run:
```
git config --local --add merge.ours.driver true
```
to add the merge driver option, which is used to exclude non-original work
from the ``NASA`` branch.

make changes to the codebase.
Once you have obtained a copy of the code, you should create a development
environment to separate development from your system Python.
environment that is separate from your existing Python environment so that
you can make and test changes without compromising your own work environment.
Consider using the Python
[venv](https://docs.python.org/3/library/venv.html#module-venv) module to
create a development environment.
Expand Down
7 changes: 0 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,3 @@
###############################################################################
# #
# BRANCH-SPECIFIC .GITIGNORE #
# #
###############################################################################
src/microstructpy/geometry/ellipses.py

###############################################################################
# #
# PROJECT-SPECIFIC .GITIGNORE #
Expand Down
257 changes: 21 additions & 236 deletions LICENSE.rst
Original file line number Diff line number Diff line change
@@ -1,236 +1,21 @@
NASA OPEN SOURCE AGREEMENT VERSION 1.3
======================================

THIS OPEN SOURCE AGREEMENT ("AGREEMENT") DEFINES THE RIGHTS OF USE,
REPRODUCTION, DISTRIBUTION, MODIFICATION AND REDISTRIBUTION OF CERTAIN COMPUTER
SOFTWARE ORIGINALLY RELEASED BY THE UNITED STATES GOVERNMENT AS REPRESENTED BY
THE GOVERNMENT AGENCY LISTED BELOW ("GOVERNMENT AGENCY"). THE UNITED STATES
GOVERNMENT, AS REPRESENTED BY GOVERNMENT AGENCY, IS AN INTENDED THIRD-PARTY
BENEFICIARY OF ALL SUBSEQUENT DISTRIBUTIONS OR REDISTRIBUTIONS OF THE SUBJECT
SOFTWARE. ANYONE WHO USES, REPRODUCES, DISTRIBUTES, MODIFIES OR REDISTRIBUTES
THE SUBJECT SOFTWARE, AS DEFINED HEREIN, OR ANY PART THEREOF, IS, BY THAT
ACTION, ACCEPTING IN FULL THE RESPONSIBILITIES AND OBLIGATIONS CONTAINED IN
THIS AGREEMENT.

| Government Agency: **NASA Johnson Space Center**
| Government Agency Original Software Designation: **MSC-26357-1**
| Government Agency Original Software Title: **MicroStructPy**
| User Registration Requested.
Please Visit **http://github.com/kip-hart/MicroStructPy**
| Government Agency Point of Contact for Original Software: **Kenneth Hart**
1. DEFINITIONS
--------------

| A. "Contributor" means Government Agency, as the developer of the Original
Software, and any entity that makes a Modification.
| B. "Covered Patents" mean patent claims licensable by a Contributor that are
necessarily infringed by the use or sale of its Modification alone or when
combined with the Subject Software.
| C. "Display" means the showing of a copy of the Subject Software, either
directly or by means of an image, or any other device.
| D. "Distribution" means conveyance or transfer of the Subject Software,
regardless of means, to another.
| E. "Larger Work" means computer software that combines Subject Software, or
portions thereof, with software separate from the Subject Software that is
not governed by the terms of this Agreement.
| F. "Modification" means any alteration of, including addition to or deletion
from, the substance or structure of either the Original Software or Subject
Software, and includes derivative works, as that term is defined in the
Copyright Statute, 17 USC 101. However, the act of including Subject Software
as part of a Larger Work does not in and of itself constitute a Modification.
| G. "Original Software" means the computer software first released under this
Agreement by Government Agency with Government Agency designation
**NASA Johnson Space Center** and entitled **MicroStructPy**, including
source code, object code and accompanying documentation, if any.
| H. "Recipient" means anyone who acquires the Subject Software under this
Agreement, including all Contributors.
| I. "Redistribution" means Distribution of the Subject Software after a
Modification has been made.
| J. "Reproduction" means the making of a counterpart, image or copy of the
Subject Software.
| K. "Sale" means the exchange of the Subject Software for money or equivalent
value.
| L. "Subject Software" means the Original Software, Modifications, or any
respective parts thereof.
| M. "Use" means the application or employment of the Subject Software for any
purpose.
2. GRANT OF RIGHTS
------------------

| A. *Under Non-Patent Rights*: Subject to the terms and conditions of this
Agreement, each Contributor, with respect to its own contribution to the
Subject Software, hereby grants to each Recipient a non-exclusive,
world-wide, royalty-free license to engage in the following activities
pertaining to the Subject Software:
1. Use
2. Distribution
3. Reproduction
4. Modification
5. Redistribution
6. Display

| B. *Under Patent Rights*: Subject to the terms and conditions of this
Agreement, each Contributor, with respect to its own contribution to the
Subject Software, hereby grants to each Recipient under Covered Patents a
non-exclusive, world-wide, royalty-free license to engage in the following
activities pertaining to the Subject Software:
1. Use
2. Distribution
3. Reproduction
4. Sale
5. Offer for Sale

| C. The rights granted under Paragraph B. also apply to the combination of a
Contributor's Modification and the Subject Software if, at the time the
Modification is added by the Contributor, the addition of such Modification
causes the combination to be covered by the Covered Patents. It does not
apply to any other combinations that include a Modification.
| D. The rights granted in Paragraphs A. and B. allow the Recipient to
sublicense those same rights. Such sublicense must be under the same terms
and conditions of this Agreement.
3. OBLIGATIONS OF RECIPIENT
---------------------------

| A. Distribution or Redistribution of the Subject Software must be made under
this Agreement except for additions covered under paragraph 3H.
1. Whenever a Recipient distributes or redistributes the Subject Software, a
copy of this Agreement must be included with each copy of the Subject
Software; and
2. If Recipient distributes or redistributes the Subject Software in any form
other than source code, Recipient must also make the source code freely
available, and must provide with each copy of the Subject Software
information on how to obtain the source code in a reasonable manner on or
through a medium customarily used for software exchange.

| B. Each Recipient must ensure that the following copyright notice appears
prominently in the Subject Software:
| Copyright (c) 2019 Georgia Tech Research Corporation. All Rights Reserved.
| C. Each Contributor must characterize its alteration of the Subject Software
as a Modification and must identify itself as the originator of its
Modification in a manner that reasonably allows subsequent Recipients to
identify the originator of the Modification. In fulfillment of these
requirements, Contributor must include a file (e.g., a change log file) that
describes the alterations made and the date of the alterations, identifies
Contributor as originator of the alterations, and consents to
characterization of the alterations as a Modification, for example, by
including a statement that the Modification is derived, directly or
indirectly, from Original Software provided by Government Agency. Once
consent is granted, it may not thereafter be revoked.
| D. A Contributor may add its own copyright notice to the Subject Software.
Once a copyright notice has been added to the Subject Software, a Recipient
may not remove it without the express permission of the Contributor who added
the notice.
| E. A Recipient may not make any representation in the Subject Software or in
any promotional, advertising or other material that may be construed as an
endorsement by Government Agency or by any prior Recipient of any product or
service provided by Recipient, or that may seek to obtain commercial
advantage by the fact of Government Agency's or a prior Recipient's
participation in this Agreement.
| F. In an effort to track usage and maintain accurate records of the Subject
Software, each Recipient, upon receipt of the Subject Software, is requested
to register with Government Agency by visiting the following website:
**http://github.com/kip-hart/MicroStructPy**. Recipient's name and personal
information shall be used for statistical purposes only. Once a Recipient
makes a Modification available, it is requested that the Recipient inform
Government Agency at the web site provided above how to access the
Modification.
| G. Each Contributor represents that that its Modification is believed to be
Contributor's original creation and does not violate any existing agreements,
regulations, statutes or rules, and further that Contributor has sufficient
rights to grant the rights conveyed by this Agreement.
| H. A Recipient may choose to offer, and to charge a fee for, warranty,
support, indemnity and/or liability obligations to one or more other
Recipients of the Subject Software. A Recipient may do so, however, only on
its own behalf and not on behalf of Government Agency or any other Recipient.
Such a Recipient must make it absolutely clear that any such warranty,
support, indemnity and/or liability obligation is offered by that Recipient
alone. Further, such Recipient agrees to indemnify Government Agency and
every other Recipient for any liability incurred by them as a result of
warranty, support, indemnity and/or liability offered by such Recipient.
| I. A Recipient may create a Larger Work by combining Subject Software with
separate software not governed by the terms of this agreement and distribute
the Larger Work as a single product. In such case, the Recipient must make
sure Subject Software, or portions thereof, included in the Larger Work is
subject to this Agreement.
| J. Notwithstanding any provisions contained herein, Recipient is hereby put
on notice that export of any goods or technical data from the United States
may require some form of export license from the U.S. Government. Failure to
obtain necessary export licenses may result in criminal liability under U.S.
laws. Government Agency neither represents that a license shall not be
required nor that, if required, it shall be issued. Nothing granted herein
provides any such export license.
4. DISCLAIMER OF WARRANTIES AND LIABILITIES; WAIVER AND INDEMNIFICATION
-----------------------------------------------------------------------
| A. *No Warranty*: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY
WARRANTY OF ANY KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT
NOT LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO
SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT THE
SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF
PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN
ANY MANNER, CONSTITUTE AN ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR
RECIPIENT OF ANY RESULTS, RESULTING DESIGNS, HARDWARE, SOFTWARE PRODUCTS OR
ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT SOFTWARE. FURTHER,
GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING
THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES IT
"AS IS."
| B. *Waiver and Indemnity*: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS
AGAINST THE UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS
WELL AS ANY PRIOR RECIPIENT. IF RECIPIENT'S USE OF THE SUBJECT SOFTWARE
RESULTS IN ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES OR LOSSES ARISING FROM
SUCH USE, INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR RESULTING FROM,
RECIPIENT'S USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND HOLD
HARMLESS THE UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS
WELL AS ANY PRIOR RECIPIENT, TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE
REMEDY FOR ANY SUCH MATTER SHALL BE THE IMMEDIATE, UNILATERAL TERMINATION OF
THIS AGREEMENT.
5. GENERAL TERMS
----------------
| A. *Termination*: This Agreement and the rights granted hereunder will
terminate automatically if a Recipient fails to comply with these terms and
conditions, and fails to cure such noncompliance within thirty (30) days of
becoming aware of such noncompliance. Upon termination, a Recipient agrees to
immediately cease use and distribution of the Subject Software. All
sublicenses to the Subject Software properly granted by the breaching
Recipient shall survive any such termination of this Agreement.
| B. *Severability*: If any provision of this Agreement is invalid or
unenforceable under applicable law, it shall not affect the validity or
enforceability of the remainder of the terms of this Agreement.
| C. *Applicable Law*: This Agreement shall be subject to United States federal
law only for all purposes, including, but not limited to, determining the
validity of this Agreement, the meaning of its provisions and the rights,
obligations and remedies of the parties.
| D. *Entire Understanding*: This Agreement constitutes the entire
understanding and agreement of the parties relating to release of the Subject
Software and may not be superseded, modified or amended except by further
written agreement duly executed by the parties.
| E. *Binding Authority*: By accepting and using the Subject Software under
this Agreement, a Recipient affirms its authority to bind the Recipient to
all terms and conditions of this Agreement and that that Recipient hereby
agrees to all terms and conditions herein.
| F. *Point of Contact*: Any Recipient contact with Government Agency is to be
directed to the designated representative as follows: **Kenneth Hart**.
MIT License

Copyright (c) 2019 Georgia Tech Research Corporation

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
2 changes: 1 addition & 1 deletion src/microstructpy/_vs.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
def _ver_str(version_string):
return version_string + '+NASA'
return version_string
100 changes: 60 additions & 40 deletions src/microstructpy/geometry/_ellipse_best_fit.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,43 +6,63 @@ def _best_fit(points, ellipse):
pts = np.array(points, dtype='float')
x, y = pts.T

xx = x * x
yy = y * y
xy = x * y
g = 1.0
ones = -g * np.ones(len(x))
coeffs = np.array([xx, xy, yy, x, y]).T
a, b, c, d, f = np.linalg.lstsq(coeffs, ones, rcond=None)[0]
b *= 0.5
d *= 0.5
f *= 0.5

mj = b * b - a * c
x0 = (c * d - b * f) / mj
y0 = (a * f - b * d) / mj

numer = 2 * (a * f * f + c * d * d + g * b * b - 2 * b * d * f - a * c * g)
denom1 = np.sign(c - a) * np.sqrt((a - c) * (a - c) + 4 * b * b)
denom2 = a + c
a2_d = mj * (denom1 - denom2)
a2 = numer / a2_d
b2_d = mj * (-denom1 - denom2)
b2 = numer / b2_d

a = alt_sqrt(a2)
b = alt_sqrt(b2)

if np.isclose(b, 0) and a < c:
phi = 0
elif np.isclose(b, 0):
phi = 0.5 * np.pi
else:
phi = 0.5 * np.arctan2(2 * b, a - c)

return a, b, phi, x0, y0


def alt_sqrt(x):
if x >= 0:
return np.sqrt(x)
return - np.sqrt(-x)
# Quadratic part of design matrix
D1 = np.mat(np.vstack([x * x, x * y, y * y])).T

# Linear part of design matrix
D2 = np.mat(np.vstack([x, y, np.ones(len(x))])).T

# Scatter matrix
S1 = D1.T * D1
S2 = D1.T * D2
S3 = D2.T * D2

# Constraint matrix
C1inv = np.mat([[0, 0, 0.5], [0, -1, 0], [0.5, 0, 0]])

# Reduced scatter matrix
M = C1inv * (S1 - S2 * S3.I * S2.T)

# Find eigenvalues
_, evec = np.linalg.eig(M)

# Mask
cond = 4 * np.multiply(evec[0, :], evec[2, :])
cond -= np.multiply(evec[1, :], evec[1, :])
a1 = evec[:, np.nonzero(cond.A > 0)[1]]

a2 = -S3.I * S2.T * a1

# Coefficients
a = a1[0, 0]
b = 0.5 * a1[1, 0]
c = a1[2, 0]

d = 0.5 * a2[0, 0]
f = 0.5 * a2[1, 0]
g = a2[2, 0]

# Center of ellipse
k = b * b - a * c
xc = (c * d - b * f) / k
yc = (a * f - b * d) / k

# Semi-axes lengths
numer = a * f * f
numer += c * d * d
numer += g * b * b
numer -= 2 * b * d * f
numer -= a * c * g
numer *= 2

tan2 = 2 * b / (a - c)
sq_val = np.sqrt(1 + tan2 * tan2)
denom1 = k * ((c - a) * sq_val - (c + a))
denom2 = k * ((a - c) * sq_val - (c + a))
width = np.sqrt(numer / denom1)
height = np.sqrt(numer / denom2)

# Angle of rotation
phi = 0.5 * np.arctan(tan2)

return width, height, phi, xc, yc

0 comments on commit aaad014

Please sign in to comment.