Skip to content

Commit

Permalink
Merge pull request #214 from hakonanes/189-remove-reciprocal-lattice-…
Browse files Browse the repository at this point in the history
…point

Remove deprecated ReciprocalLatticePoint class
  • Loading branch information
hakonanes committed May 9, 2024
2 parents 684828e + 9f7b660 commit ddb903d
Show file tree
Hide file tree
Showing 10 changed files with 280 additions and 830 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ Removed
-------
- Removed support for Python 3.6 and Python 3.7, leaving 3.8 as the oldest supported
version.
- ``ReciprocalLatticePoint`` class; Use the ``ReciprocalLatticeVector`` class instead,
which is an improved replacement.

Fixed
-----
Expand Down
23 changes: 15 additions & 8 deletions CONTRIBUTING.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ We have a `Code of Conduct
<https://github.com/pyxem/diffsims/blob/master/.github/CODE_OF_CONDUCT.md>`_ that must
be honoured by contributors.


Start using diffsims
====================

Expand Down Expand Up @@ -42,6 +43,7 @@ install of diffsims!
PS: If you choose to develop in Windows/Mac you may find the `Github Desktop
<https://desktop.github.com>`_ useful.


Questions?
==========

Expand All @@ -56,6 +58,7 @@ scary but it ensures that issues are identified and logged until dealt with. Thi
also a good place to make a proposal for some new feature or tool that you want to work
on.


Good coding practice
====================

Expand Down Expand Up @@ -89,7 +92,6 @@ your newly added and modified files prior to each PR.
If this doesn't work for you, you can also use the Pre-commit CI to reformat your code
on github by commenting "pre-commit autofix" on your PR.


Run and write tests
-------------------

Expand Down Expand Up @@ -128,7 +130,6 @@ Useful hints on testing:
error-prone. See `pytest documentation for more details
<https://doc.pytest.org/en/latest/how-to/parametrize.html>`_.


Deprecations
------------
We attempt to adhere to semantic versioning as best we can. This means that as little,
Expand All @@ -138,16 +139,20 @@ so that users get a heads-up one (minor) release before something is removed or
with a possible alternative to be used.


A deprecation decorator should be placed right above the object signature to be deprecated.
A deprecation decorator should be placed right above the object signature to be deprecated::

.. code-block:: python
from diffsims.utils._deprecated import deprecated

@deprecated(since=0.8, removal=0.9, alternative="bar")
def foo(self, n):
return n + 1
@property
@deprecated(since=0.9, removal=0.10, alternative="another", is_function=True)
def foo(self, n): ...

@property
@deprecated(
since="0.9",
removal="0.10",
alternative="another",
alternative_is_function=True
): ...

Build and write documentation
-----------------------------
Expand All @@ -173,6 +178,7 @@ in the `reStructuredText (reST)
plaintext markup language. They should be accessible in the browser by typing
``file:///your-absolute/path/to/diffsims/doc/build/html/index.html`` in the address bar.


Continuous integration (CI)
===========================

Expand All @@ -181,6 +187,7 @@ diffsims can be installed on Windows, macOS and Linux. After a successful instal
the CI server runs the tests. After the tests return no errors, code coverage is
reported to `Coveralls <https://coveralls.io/github/pyxem/diffsims?branch=master>`_.


Learn more
==========

Expand Down
7 changes: 6 additions & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# Info on valid syntax for controlling files in the distribution in this file:
# * https://setuptools.pypa.io/en/latest/userguide/miscellaneous.html
# * https://setuptools.pypa.io/en/latest/userguide/datafiles.html

include CHANGELOG.rst
include CONTRIBUTING.rst
include LICENSE
Expand All @@ -6,5 +10,6 @@ include README.rst
include readthedocs.yaml
include setup.cfg
include setup.py
include diffsims/tests/**/*.npy

recursive-include doc Makefile make.bat *.rst *.py *.png
recursive-include doc Makefile make.bat *.rst *.py *.png
4 changes: 1 addition & 3 deletions diffsims/crystallography/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@
g, hkl) for a crystal structure.
"""

from diffsims.crystallography.reciprocal_lattice_point import (
ReciprocalLatticePoint,
from diffsims.crystallography.get_hkl import (
get_equivalent_hkl,
get_highest_hkl,
get_hkl,
Expand All @@ -32,6 +31,5 @@
"get_equivalent_hkl",
"get_highest_hkl",
"get_hkl",
"ReciprocalLatticePoint",
"ReciprocalLatticeVector",
]
132 changes: 132 additions & 0 deletions diffsims/crystallography/get_hkl.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
# -*- coding: utf-8 -*-
# Copyright 2017-2023 The diffsims developers
#
# This file is part of diffsims.
#
# diffsims is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# diffsims is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with diffsims. If not, see <http://www.gnu.org/licenses/>.

from itertools import product

import numpy as np
from orix.vector import Vector3d

from diffsims.utils._deprecated import deprecated


@deprecated(
since="0.6",
alternative="diffsims.crystallography.ReciprocalLatticeVector.from_min_dspacing",
removal="0.7",
)
def get_highest_hkl(lattice, min_dspacing=0.5):
"""Return the highest Miller indices hkl of the plane with a direct
space interplanar spacing (d-spacing) greater than but closest to
*min_dspacing*.
Parameters
----------
lattice : diffpy.structure.Lattice
Crystal lattice.
min_dspacing : float, optional
Smallest interplanar spacing to consider. Default is 0.5 Å.
Returns
-------
highest_hkl : np.ndarray
Highest Miller indices.
"""
highest_hkl = np.ones(3, dtype=int)
for i in range(3):
hkl = np.zeros(3)
d = min_dspacing + 1
while d > min_dspacing:
hkl[i] += 1
d = 1 / lattice.rnorm(hkl)
highest_hkl[i] = hkl[i]
return highest_hkl


@deprecated(
since="0.6",
alternative="diffsims.crystallography.ReciprocalLatticeVector.from_highest_hkl",
removal="0.7",
)
def get_hkl(highest_hkl):
"""Return a list of planes from a set of highest Miller indices.
Parameters
----------
highest_hkl : orix.vector.Vector3d, np.ndarray, list, or tuple of int
Highest Miller indices to consider.
Returns
-------
hkl : np.ndarray
An array of Miller indices.
"""
index_ranges = [np.arange(-i, i + 1) for i in highest_hkl]
return np.asarray(list(product(*index_ranges)))


@deprecated(
since="0.6",
alternative="diffsims.crystallography.ReciprocalLatticeVector.symmetrise",
removal="0.7",
)
def get_equivalent_hkl(hkl, operations, unique=False, return_multiplicity=False):
"""Return symmetrically equivalent Miller indices.
Parameters
----------
hkl : orix.vector.Vector3d, np.ndarray, list or tuple of int
Miller indices.
operations : orix.quaternion.symmetry.Symmetry
Point group describing allowed symmetry operations.
unique : bool, optional
Whether to return only unique Miller indices. Default is False.
return_multiplicity : bool, optional
Whether to return the multiplicity of the input indices. Default
is False.
Returns
-------
new_hkl : orix.vector.Vector3d
The symmetrically equivalent Miller indices.
multiplicity : np.ndarray
Number of symmetrically equivalent indices. Only returned if
`return_multiplicity` is True.
"""
new_hkl = operations.outer(Vector3d(hkl))
new_hkl = new_hkl.flatten().reshape(*new_hkl.shape[::-1])

multiplicity = None
if unique:
n_families = new_hkl.shape[0]
multiplicity = np.zeros(n_families, dtype=int)
temp_hkl = new_hkl[0].unique().data
multiplicity[0] = temp_hkl.shape[0]
if n_families > 1:
for i, hkl in enumerate(new_hkl[1:]):
temp_hkl2 = hkl.unique()
multiplicity[i + 1] = temp_hkl2.size
temp_hkl = np.append(temp_hkl, temp_hkl2.data, axis=0)
new_hkl = Vector3d(temp_hkl[: multiplicity.sum()])

# Remove 1-dimensions
new_hkl = new_hkl.squeeze()

if unique and return_multiplicity:
return new_hkl, multiplicity
else:
return new_hkl
Loading

0 comments on commit ddb903d

Please sign in to comment.