diff --git a/.flake8 b/.flake8
index 6af9915..d731d95 100644
--- a/.flake8
+++ b/.flake8
@@ -6,7 +6,7 @@ exclude =
__pycache__,
build,
dist,
- doc/source/conf.py
+ docs/source/conf.py
# huge loops in crystal.py
max-line-length = 99
# Ignore some style 'errors' produced while formatting by 'black'
diff --git a/.github/ISSUE_TEMPLATE/release_checklist.md b/.github/ISSUE_TEMPLATE/release_checklist.md
index 6107962..56c5fca 100644
--- a/.github/ISSUE_TEMPLATE/release_checklist.md
+++ b/.github/ISSUE_TEMPLATE/release_checklist.md
@@ -11,12 +11,13 @@ assignees: ""
- [ ] All PRs/issues attached to the release are merged.
- [ ] All the badges on the README are passing.
- [ ] License information is verified as correct. If you are unsure, please comment below.
-- [ ] Locally rendered documentation contains all appropriate pages, including API references (check no modules are
- missing), tutorials, and other human-written text is up-to-date with any changes in the code.
+- [ ] Locally rendered documentation contains all appropriate pages, tutorials, and other human-written text is up-to-date with any changes in the code.
+- [ ] All API references are included. To check this, run `conda install scikit-package` and then `package build api-doc`. Review any edits made by rerendering the docs locally.
- [ ] Installation instructions in the README, documentation, and the website are updated.
- [ ] Successfully run any tutorial examples or do functional testing with the latest Python version.
- [ ] Grammar and writing quality are checked (no typos).
- [ ] Install `pip install build twine`, run `python -m build` and `twine check dist/*` to ensure that the package can be built and is correctly formatted for PyPI release.
+- [ ] Dispatch matrix testing to test the release on all Python versions and systems. If you do not have permission to run this workflow, tag the maintainer and say `@maintainer, please dispatch matrix testing workflow`.
Please tag the maintainer (e.g., @username) in the comment here when you are ready for the PyPI/GitHub release. Include any additional comments necessary, such as version information and details about the pre-release here:
@@ -34,7 +35,7 @@ Please let the maintainer know that all checks are done and the package is ready
- [ ] Ensure that the full release has appeared on PyPI successfully.
-- [ ] New package dependencies listed in `conda.txt` and `test.txt` are added to `meta.yaml` in the feedstock.
+- [ ] New package dependencies listed in `conda.txt` and `tests.txt` are added to `meta.yaml` in the feedstock.
- [ ] Close any open issues on the feedstock. Reach out to the maintainer if you have questions.
- [ ] Tag the maintainer for conda-forge release.
diff --git a/.github/workflows/build-and-publish-docs-on-dispatch.yml b/.github/workflows/build-and-publish-docs-on-dispatch.yml
new file mode 100644
index 0000000..a60668b
--- /dev/null
+++ b/.github/workflows/build-and-publish-docs-on-dispatch.yml
@@ -0,0 +1,18 @@
+name: Build and Publish Docs on Dispatch
+
+on:
+ workflow_dispatch:
+
+jobs:
+ get-python-version:
+ uses: scikit-package/release-scripts/.github/workflows/_get-python-version-latest.yml@v0
+ with:
+ python_version: 0
+
+ docs:
+ uses: scikit-package/release-scripts/.github/workflows/_release-docs.yml@v0
+ with:
+ project: pyobjcryst
+ c_extension: true
+ headless: false
+ python_version: ${{ fromJSON(needs.get-python-version.outputs.latest_python_version) }}
diff --git a/.github/workflows/build-wheel-release-upload.yml b/.github/workflows/build-wheel-release-upload.yml
index a290ab1..396b9ec 100644
--- a/.github/workflows/build-wheel-release-upload.yml
+++ b/.github/workflows/build-wheel-release-upload.yml
@@ -1,18 +1,76 @@
-name: Release (GitHub/PyPI) and Deploy Docs
+name: Build Wheel and Release
+# Trigger on tag push or manual dispatch.
+# Tag and release privilege are verified inside the reusable workflow.
on:
workflow_dispatch:
push:
tags:
- - "*" # Trigger on all tags initially, but tag and release privilege are verified in _build-wheel-release-upload.yml
+ - "*"
+
+# ── Release modality ──────────────────────────────────────────────────────────
+# Three options are provided below. Only ONE job should be active at a time.
+# To switch: comment out the active job and uncomment your preferred option,
+# then commit the change to main before tagging a release.
+# ─────────────────────────────────────────────────────────────────────────────
jobs:
- release:
+ # Option 1 (default): Release to GitHub, publish to PyPI, and deploy docs.
+ #
+ # The wheel is uploaded to PyPI so users can install with `pip install`.
+ # A GitHub release is created with the changelog as the release body, and
+ # the Sphinx documentation is rebuilt and deployed to GitHub Pages.
+ #
+ # Choose this for open-source packages distributed via PyPI and/or
+ # conda-forge where broad public availability is the goal.
+ build-release:
uses: scikit-package/release-scripts/.github/workflows/_build-wheel-release-upload.yml@v0
with:
project: pyobjcryst
c_extension: true
- maintainer_GITHUB_username: sbillinge
+ maintainer_github_username: sbillinge
secrets:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
PAT_TOKEN: ${{ secrets.PAT_TOKEN }}
+
+ # Option 2: Release to GitHub and deploy docs, without publishing to PyPI.
+ #
+ # A GitHub release is created and the Sphinx docs are deployed, but the
+ # wheel is not uploaded to PyPI. The source code remains publicly visible
+ # on GitHub and can be installed directly from there.
+ #
+ # Choose this when the package is public but you prefer to keep it off the
+ # default pip index — for example, if you distribute via conda-forge only,
+ # or if the package is not yet ready for a permanent PyPI presence.
+ #
+ # To use: comment out Option 1 above and uncomment the lines below.
+ # build-release-no-pypi:
+ # uses: scikit-package/release-scripts/.github/workflows/_build-release-github-no-pypi.yml@v0
+ # with:
+ # project: pyobjcryst
+ # c_extension: true
+ # maintainer_github_username: sbillinge
+ # secrets:
+ # PAT_TOKEN: ${{ secrets.PAT_TOKEN }}
+
+ # Option 3: Release to GitHub with wheel, license, and instructions bundled
+ # as a downloadable zip attached to the GitHub release asset.
+ #
+ # The wheel is built and packaged together with INSTRUCTIONS.txt and the
+ # LICENSE file into a zip that is attached directly to the GitHub release.
+ # Users with access to the (private) repo download the zip, follow the
+ # instructions inside, and install locally with pip. No PyPI or conda-forge
+ # upload occurs, and no docs are deployed.
+ #
+ # Choose this for private or restricted packages where distribution must be
+ # controlled: only users with repo access can download the release asset,
+ # making the GitHub release itself the distribution channel.
+ #
+ # To use: comment out Option 1 above and uncomment the lines below.
+ # build-release-private:
+ # uses: scikit-package/release-scripts/.github/workflows/_build-release-github-private-pure.yml@v0
+ # with:
+ # project: pyobjcryst
+ # maintainer_github_username: sbillinge
+ # secrets:
+ # PAT_TOKEN: ${{ secrets.PAT_TOKEN }}
diff --git a/.github/workflows/check-news-item.yml b/.github/workflows/check-news-item.yml
index b9b6309..aced4b7 100644
--- a/.github/workflows/check-news-item.yml
+++ b/.github/workflows/check-news-item.yml
@@ -3,7 +3,7 @@ name: Check for News
on:
pull_request_target:
branches:
- - main
+ - main # GitHub does not evaluate expressions in trigger filters; edit this value if your base branch is not main
jobs:
check-news-item:
diff --git a/.github/workflows/matrix-and-codecov-on-merge-to-main.yml b/.github/workflows/matrix-and-codecov.yml
similarity index 84%
rename from .github/workflows/matrix-and-codecov-on-merge-to-main.yml
rename to .github/workflows/matrix-and-codecov.yml
index 5babfcc..9a3b8e2 100644
--- a/.github/workflows/matrix-and-codecov-on-merge-to-main.yml
+++ b/.github/workflows/matrix-and-codecov.yml
@@ -1,9 +1,9 @@
-name: CI
+name: Matrix and Codecov
on:
- push:
- branches:
- - main
+ # push:
+ # branches:
+ # - main
release:
types:
- prereleased
diff --git a/.github/workflows/publish-docs-on-release.yml b/.github/workflows/publish-docs-on-release.yml
deleted file mode 100644
index 23e42c1..0000000
--- a/.github/workflows/publish-docs-on-release.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-name: Deploy Documentation on Release
-
-on:
- workflow_dispatch:
-
-jobs:
- docs:
- uses: scikit-package/release-scripts/.github/workflows/_publish-docs-on-release.yml@v0
- with:
- project: pyobjcryst
- c_extension: true
- headless: false
diff --git a/.github/workflows/tests-on-pr.yml b/.github/workflows/tests-on-pr.yml
index a17b8d0..6293743 100644
--- a/.github/workflows/tests-on-pr.yml
+++ b/.github/workflows/tests-on-pr.yml
@@ -2,8 +2,6 @@ name: Tests on PR
on:
pull_request:
- branches:
- - "**"
workflow_dispatch:
jobs:
diff --git a/CODE-OF-CONDUCT.rst b/CODE-OF-CONDUCT.rst
index e8199ca..25fafe2 100644
--- a/CODE-OF-CONDUCT.rst
+++ b/CODE-OF-CONDUCT.rst
@@ -67,7 +67,7 @@ Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
-sb2896@columbia.edu. All complaints will be reviewed and investigated promptly and fairly.
+sbillinge@ucsb.edu. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
diff --git a/LICENSE-DANSE.rst b/LICENSE-DANSE.rst
index b0e796c..8e1b918 100644
--- a/LICENSE-DANSE.rst
+++ b/LICENSE-DANSE.rst
@@ -4,14 +4,14 @@ LICENSE
This program is part of the DiffPy and DANSE open-source projects
and is available subject to the conditions and terms laid out below.
-Copyright (c) 2009-2012, The Trustees of Columbia University in
+Copyright (c) 2009-Present, The Trustees of Columbia University in
the City of New York. All rights reserved.
For more information please visit the project web-page:
http://www.diffpy.org/
-or email Prof. Simon Billinge at sb2896@columbia.edu
+or email Prof. Simon Billinge at sbillinge@ucsb.edu
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
diff --git a/LICENSE.rst b/LICENSE.rst
index 42870e9..0201bf9 100644
--- a/LICENSE.rst
+++ b/LICENSE.rst
@@ -15,7 +15,7 @@ Copyright (c) 2008-2012, The Trustees of Columbia University in the City of New
Copyright (c) 2014-2019, Brookhaven Science Associates, Brookhaven National Laboratory
-Copyright (c) 2024-2025, The Trustees of Columbia University in the City of New York.
+Copyright (c) 2024-Present, The Trustees of Columbia University in the City of New York.
All rights reserved.
The "DiffPy-CMI" is distributed subject to the following license conditions:
diff --git a/README.rst b/README.rst
index fb181eb..655d222 100644
--- a/README.rst
+++ b/README.rst
@@ -219,7 +219,7 @@ Before contributing, please read our `Code of Conduct `_ or email Simon Billinge at sb2896@columbia.edu.
+For more information on pyobjcryst please visit the project `web-page `_ or email Simon Billinge at sbillinge@ucsb.edu.
You can also contact Vincent Favre-Nicolin (favre@esrf.fr) if you are using pyobjcryst outside diffpy, e.g. to display structures in a notebook, refine powder patterns or solve structures using the global optimisation algorithms, etc..
diff --git a/cookiecutter.json b/cookiecutter.json
index 85ad049..96b6a37 100644
--- a/cookiecutter.json
+++ b/cookiecutter.json
@@ -1,8 +1,10 @@
{
- "maintainer_name": "Simon J.L. Billinge group",
- "maintainer_email": "sb2896@columbia.edu",
- "maintainer_github_username": "sbillinge",
- "contributors": "Billinge Group members",
+ "author_names": "Simon Billinge",
+ "author_emails": "sbillinge@ucsb.edu",
+ "maintainer_names": "Simon Billinge",
+ "maintainer_emails": "sbillinge@ucsb.edu",
+ "maintainer_github_usernames": "sbillinge",
+ "contributors": "Billinge Group members and ccommunity contributors",
"license_holders": "The Trustees of Columbia University in the City of New York",
"project_name": "pyobjcryst",
"github_username_or_orgname": "diffpy",
@@ -11,8 +13,8 @@
"package_dir_name": "pyobjcryst",
"project_short_description": "Python bindings to the ObjCryst++ library.",
"project_keywords": "objcryst, atom structure crystallography, powder diffraction",
- "minimum_supported_python_version": "3.11",
- "maximum_supported_python_version": "3.13",
+ "minimum_supported_python_version": "3.12",
+ "maximum_supported_python_version": "3.14",
"project_needs_c_code_compiled": "Yes",
"project_has_gui_tests": "No"
}
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 4dcd3af..3323c91 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -72,9 +72,10 @@ def setup(app):
"sphinx.ext.todo",
"sphinx.ext.viewcode",
"sphinx.ext.intersphinx",
+ "sphinx_rtd_theme",
"sphinx_copybutton",
"nbsphinx",
- "m2r",
+ "m2r2",
]
# Add any paths that contain templates here, relative to this directory.
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 6e62cdf..13c5348 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -79,12 +79,12 @@ Table of contents
.. toctree::
:maxdepth: 2
- getting-started
Examples
Package API
release
license
+=======
Indices
=======
diff --git a/docs/source/license.rst b/docs/source/license.rst
index 5e751f7..4153e26 100644
--- a/docs/source/license.rst
+++ b/docs/source/license.rst
@@ -7,32 +7,142 @@ License
OPEN SOURCE LICENSE AGREEMENT
=============================
-BSD 3-Clause License
-
-Copyright (c) 2025, The Trustees of Columbia University in the City of New York.
-All Rights Reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Copyright (c) 2009-2011, University of Tennessee
+
+Copyright (c) 1989, 1991 Free Software Foundation, Inc.
+
+Copyright (c) 2006, The Regents of the University of California through Lawrence Berkeley National Laboratory
+
+Copyright (c) 2014, Australian Synchrotron Research Program Inc., ("ASRP")
+
+Copyright (c) 2006-2007, Board of Trustees of Michigan State University
+
+Copyright (c) 2008-2012, The Trustees of Columbia University in the City of New York
+
+Copyright (c) 2014-2019, Brookhaven Science Associates, Brookhaven National Laboratory
+
+Copyright (c) 2024-Present, The Trustees of Columbia University in the City of New York.
+All rights reserved.
+
+The "DiffPy-CMI" is distributed subject to the following license conditions:
+
+.. code-block:: text
+
+ SOFTWARE LICENSE AGREEMENT
+
+ Software: DiffPy-CMI
+
+
+ (1) The "Software", below, refers to the aforementioned DiffPy-CMI (in either
+ source code, or binary form and accompanying documentation).
+
+ Part of the software was derived from the DANSE, ObjCryst++ (with permission),
+ PyCifRW, Python periodictable, CCTBX, and SasView open source projects, of
+ which the original Copyrights are contained in each individual file.
+
+ Each licensee is addressed as "you" or "Licensee."
+
+
+ (2) The copyright holders shown above and their third-party Licensors hereby
+ grant licensee a royalty-free nonexclusive license, subject to the limitations
+ stated herein and U.S. Government license rights.
+
+
+ (3) You may modify and make a copy or copies of the software for use within
+ your organization, if you meet the following conditions:
+
+ (a) Copies in source code must include the copyright notice and this
+ software license agreement.
+
+ (b) Copies in binary form must include the copyright notice and this
+ Software License Agreement in the documentation and/or other materials
+ provided with the copy.
+
+
+ (4) You may modify a copy or copies of the Software or any portion of it, thus
+ forming a work based on the Software, and distribute copies of such work
+ outside your organization, if you meet all of the following conditions:
+
+ (a) Copies in source code must include the copyright notice and this
+ Software License Agreement;
+
+ (b) Copies in binary form must include the copyright notice and this
+ Software License Agreement in the documentation and/or other materials
+ provided with the copy;
+
+ (c) Modified copies and works based on the Software must carry prominent
+ notices stating that you changed specified portions of the Software.
+
+ (d) Neither the name of Brookhaven Science Associates or Brookhaven
+ National Laboratory nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific
+ written permission.
+
+
+ (5) Portions of the Software resulted from work developed under a U.S.
+ Government contract and are subject to the following license:
+ The Government is granted for itself and others acting on its behalf a
+ paid-up, nonexclusive, irrevocable worldwide license in this computer software
+ to reproduce, prepare derivative works, and perform publicly and display
+ publicly.
+
+
+ (6) WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS" WITHOUT
+ WARRANTY OF ANY KIND. THE COPYRIGHT HOLDERS, THEIR THIRD PARTY
+ LICENSORS, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND
+ THEIR EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT, (2) DO NOT ASSUME ANY LEGAL
+ LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF
+ THE SOFTWARE, (3) DO NOT REPRESENT THAT USE OF THE SOFTWARE WOULD NOT INFRINGE
+ PRIVATELY OWNED RIGHTS, (4) DO NOT WARRANT THAT THE SOFTWARE WILL FUNCTION
+ UNINTERRUPTED, THAT IT IS ERROR-FREE OR THAT ANY ERRORS WILL BE CORRECTED.
+
+
+ (7) LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT HOLDERS, THEIR
+ THIRD PARTY LICENSORS, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF
+ ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT, INCIDENTAL,
+ CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF ANY KIND OR NATURE, INCLUDING
+ BUT NOT LIMITED TO LOSS OF PROFITS OR LOSS OF DATA, FOR ANY REASON WHATSOEVER,
+ WHETHER SUCH LIABILITY IS ASSERTED ON THE BASIS OF CONTRACT, TORT (INCLUDING
+ NEGLIGENCE OR STRICT LIABILITY), OR OTHERWISE, EVEN IF ANY OF SAID PARTIES HAS
+ BEEN WARNED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGES.
+
+
+Brookhaven National Laboratory Notice
+=====================================
+
+Acknowledgment of sponsorship
+-----------------------------
+
+This software was produced by the Brookhaven National Laboratory, under
+Contract DE-AC02-98CH10886 with the Department of Energy.
+
+
+Government disclaimer of liability
+----------------------------------
+
+Neither the United States nor the United States Department of Energy, nor
+any of their employees, makes any warranty, express or implied, or assumes
+any legal liability or responsibility for the accuracy, completeness, or
+usefulness of any data, apparatus, product, or process disclosed, or
+represents that its use would not infringe privately owned rights.
+
+
+Brookhaven disclaimer of liability
+----------------------------------
+
+Brookhaven National Laboratory makes no representations or warranties,
+express or implied, nor assumes any liability for the use of this software.
+
+
+Maintenance of notice
+---------------------
+
+In the interest of clarity regarding the origin and status of this
+software, Brookhaven National Laboratory requests that any recipient of it
+maintain this notice affixed to any distribution by the recipient that
+contains a copy or derivative of this software.
+
+END OF LICENSE
diff --git a/news/package-update.rst b/news/package-update.rst
new file mode 100644
index 0000000..d68861c
--- /dev/null
+++ b/news/package-update.rst
@@ -0,0 +1,23 @@
+**Added:**
+
+* No news added: Run package update on the repo.
+
+**Changed:**
+
+*
+
+**Deprecated:**
+
+*
+
+**Removed:**
+
+*
+
+**Fixed:**
+
+*
+
+**Security:**
+
+*
diff --git a/pyproject.toml b/pyproject.toml
index 686190d..60aa20f 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -11,7 +11,7 @@ authors = [
{ name="Vincent-Favre-Nicolin", email="favre@esrf.fr" },
]
maintainers = [
- { name="Simon J.L. Billinge group", email="sb2896@columbia.edu" },
+ {name='Simon Billinge', email='sbillinge@ucsb.edu'},
{ name="Vincent-Favre-Nicolin", email="favre@esrf.fr" },
]
description = "Python bindings to the ObjCryst++ library."
@@ -57,6 +57,9 @@ include = ["*"] # package names should match these glob patterns (["*"] by defa
exclude = [] # exclude packages matching these glob patterns (empty by default)
namespaces = false # to disable scanning PEP 420 namespaces (true by default)
+[project.scripts]
+pyobjcryst = "pyobjcryst.pyobjcryst_app:main"
+
[tool.setuptools.dynamic]
dependencies = {file = ["requirements/pip.txt"]}
diff --git a/requirements/docs.txt b/requirements/docs.txt
index 4cb02b0..488b9df 100644
--- a/requirements/docs.txt
+++ b/requirements/docs.txt
@@ -1,8 +1,9 @@
sphinx
pydata-sphinx-theme
+sphinx_rtd_theme
sphinx-copybutton
nbsphinx
doctr
-m2r
+m2r2
ipykernel
lxml-html-clean
diff --git a/src/pyobjcryst/__init__.py b/src/pyobjcryst/__init__.py
index d1dd81f..0c76889 100644
--- a/src/pyobjcryst/__init__.py
+++ b/src/pyobjcryst/__init__.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
##############################################################################
#
-# (c) 2025 The Trustees of Columbia University in the City of New York.
+# (c) 2025-Present The Trustees of Columbia University in the City of New York.
# All rights reserved.
#
# File coded by: Chris Farrow and Billinge Group members.
diff --git a/src/pyobjcryst/version.py b/src/pyobjcryst/version.py
index fbd0634..ec039c2 100644
--- a/src/pyobjcryst/version.py
+++ b/src/pyobjcryst/version.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
##############################################################################
#
-# (c) 2025 The Trustees of Columbia University in the City of New York.
+# (c) 2025-Present The Trustees of Columbia University in the City of New York.
# All rights reserved.
#
# File coded by: Billinge Group members.
@@ -18,8 +18,9 @@
# __all__ = ["__date__", "__git_commit__", "__timestamp__", "__version__"]
# obtain version information
-from importlib.metadata import version
+from importlib.metadata import PackageNotFoundError, version
-__version__ = version("pyobjcryst")
-
-# End of file
+try:
+ __version__ = version("pyobjcryst")
+except PackageNotFoundError:
+ __version__ = "unknown"