Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,14 @@ repos:
- repo: https://github.com/astral-sh/uv-pre-commit
rev: 0.6.3
hooks:
- id: pip-compile
args: [pyproject.toml, -o, requirements.txt, -p, "3.9"]
- id: uv-lock
files: ^(pyproject.toml|requirements.txt)$
- id: pip-compile
args: [dev-requirements.in, -o, dev-requirements.txt, -p, "3.9"]
files: ^(dev\-)?requirements.(txt|in)$
- id: uv-export
files: ^uv.lock$
args: [--no-dev, --output-file=requirements.txt, --no-emit-workspace]
- id: uv-export
files: ^uv.lock$
args: [--only-dev, --output-file=dev-requirements.txt, --no-emit-workspace]
- repo: local
hooks:
- id: mypy
Expand Down
7 changes: 0 additions & 7 deletions dev-requirements.in

This file was deleted.

293 changes: 218 additions & 75 deletions dev-requirements.txt

Large diffs are not rendered by default.

14 changes: 13 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description = "Snap points to a line string keeping a given order or spacing int
readme = "README.md"
dependencies = [
"shapely",
"numpy<2",
"numpy",
"pyproj>=3.2.0", # for defining custom CRS
]
requires-python = ">=3.9"
Expand Down Expand Up @@ -34,6 +34,17 @@ classifiers = [
]
dynamic = ["version"]

[dependency-groups]
dev = [
"pytest",
"pytest-cov",
"pre-commit",
"pip-tools",
"mypy",
"numpy",
"pip",
]

[project.urls]
homepage = "https://github.com/geops/pysnapping"
geOps = "https://geops.com/en"
Expand All @@ -60,6 +71,7 @@ select = [
"PIE", # unnecessary statements
"SLOT", # str, tuple, namedtuple subclasses need __slots__
"FIX003", # line contains XXX
"NPY201", # upgrade from NumPy 1.x to 2.0
]
ignore = [
"E501", # line too long
Expand Down
2 changes: 1 addition & 1 deletion pysnapping/snap.py
Original file line number Diff line number Diff line change
Expand Up @@ -593,7 +593,7 @@ def snap_trusted(
)
# if the spacing was not ok, it can still be bad after untrusting all points
# since the total length can be too short for the points
untrusted_dists = np.full_like(self.dists, np.NaN)
untrusted_dists = np.full_like(self.dists, np.nan)
if not traj_spacing_ok(untrusted_dists):
raise SnappingError(
f"trajectory of length {self.trajectory.length:g} is too short "
Expand Down
20 changes: 10 additions & 10 deletions pysnapping/test/test_snap.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,21 +56,21 @@ def segment_lengths_to_dists(segment_lengths, start=0):
"values,d_min,d_max,min_spacing,consider_sampling_accuracy,ok",
[
([], 0, 0, 10, False, True),
([np.NaN], 0, 0, 10, False, True),
([np.nan], 0, 0, 10, False, True),
([0], 0, 0, 10, False, True),
([1], 0, 1, 10, False, True),
([1], 0, 1 - 1e-6, 10, False, False),
([np.NaN, 1, np.NaN], 0, 2, 1 - 1e-6, False, True),
([np.NaN, 1, np.NaN], 0, 1.9, 1, False, False),
([-1, np.NaN, np.NaN, 0], -10, 10, 1, False, False),
([-1, np.NaN, np.NaN, 0], -10, 10, 0.5, False, False),
([-1, np.NaN, np.NaN, 0], -10, 10, 1 / 3 - 1e-6, False, True),
([np.NaN, np.NaN, np.NaN], -100, 0, 50 - 1e-6, False, True),
([np.NaN, np.NaN, np.NaN], -100, 0, 50 + 1e-6, False, False),
([np.nan, 1, np.nan], 0, 2, 1 - 1e-6, False, True),
([np.nan, 1, np.nan], 0, 1.9, 1, False, False),
([-1, np.nan, np.nan, 0], -10, 10, 1, False, False),
([-1, np.nan, np.nan, 0], -10, 10, 0.5, False, False),
([-1, np.nan, np.nan, 0], -10, 10, 1 / 3 - 1e-6, False, True),
([np.nan, np.nan, np.nan], -100, 0, 50 - 1e-6, False, True),
([np.nan, np.nan, np.nan], -100, 0, 50 + 1e-6, False, False),
([0, 0, 1, 1, 1.001, 1.001, 10, 10], 0, 10, 0, False, True),
([0, 0, 1, 1, 1.001, 1.001, 10, 10], 0, 10, 0, True, True),
([0, 0, 1, np.NaN, 1, 1.001, 1.001, 10, 10], 0, 10, 0, False, True),
([0, 0, 1, np.NaN, 1, 1.001, 1.001, 10, 10], 0, 10, 0, True, False),
([0, 0, 1, np.nan, 1, 1.001, 1.001, 10, 10], 0, 10, 0, False, True),
([0, 0, 1, np.nan, 1, 1.001, 1.001, 10, 10], 0, 10, 0, True, False),
([-1e9, 1e9], -1e9, 1e9, 0, False, True),
([-1e9, 1e9], -1e9, 1e9, 0, True, True),
([-1e9, 1e9], -1e9, 1e9, 2.01 * 5.0, False, True),
Expand Down
112 changes: 101 additions & 11 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,102 @@
# This file was autogenerated by uv via the following command:
# uv pip compile pyproject.toml -o requirements.txt -p 3.9
certifi==2025.1.31
# via pyproj
numpy==1.26.4
# via
# pysnapping (pyproject.toml)
# shapely
pyproj==3.6.1
# via pysnapping (pyproject.toml)
shapely==2.0.7
# via pysnapping (pyproject.toml)
# uv export --no-dev --output-file=requirements.txt --no-emit-workspace
certifi==2025.1.31 \
--hash=sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651 \
--hash=sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe
numpy==1.26.4 \
--hash=sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b \
--hash=sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818 \
--hash=sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20 \
--hash=sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0 \
--hash=sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010 \
--hash=sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a \
--hash=sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea \
--hash=sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c \
--hash=sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71 \
--hash=sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110 \
--hash=sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be \
--hash=sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a \
--hash=sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a \
--hash=sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5 \
--hash=sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed \
--hash=sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd \
--hash=sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c \
--hash=sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e \
--hash=sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0 \
--hash=sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c \
--hash=sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a \
--hash=sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b \
--hash=sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0 \
--hash=sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6 \
--hash=sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2 \
--hash=sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a \
--hash=sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30 \
--hash=sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218 \
--hash=sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5 \
--hash=sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07 \
--hash=sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2 \
--hash=sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4 \
--hash=sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764 \
--hash=sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef \
--hash=sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3 \
--hash=sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f
pyproj==3.6.1 \
--hash=sha256:18faa54a3ca475bfe6255156f2f2874e9a1c8917b0004eee9f664b86ccc513d3 \
--hash=sha256:1e9fbaf920f0f9b4ee62aab832be3ae3968f33f24e2e3f7fbb8c6728ef1d9746 \
--hash=sha256:2d6ff73cc6dbbce3766b6c0bce70ce070193105d8de17aa2470009463682a8eb \
--hash=sha256:36b64c2cb6ea1cc091f329c5bd34f9c01bb5da8c8e4492c709bda6a09f96808f \
--hash=sha256:38a3361941eb72b82bd9a18f60c78b0df8408416f9340521df442cebfc4306e2 \
--hash=sha256:447db19c7efad70ff161e5e46a54ab9cc2399acebb656b6ccf63e4bc4a04b97a \
--hash=sha256:44aa7c704c2b7d8fb3d483bbf75af6cb2350d30a63b144279a09b75fead501bf \
--hash=sha256:4ba1f9b03d04d8cab24d6375609070580a26ce76eaed54631f03bab00a9c737b \
--hash=sha256:4bc0472302919e59114aa140fd7213c2370d848a7249d09704f10f5b062031fe \
--hash=sha256:50100b2726a3ca946906cbaa789dd0749f213abf0cbb877e6de72ca7aa50e1ae \
--hash=sha256:5279586013b8d6582e22b6f9e30c49796966770389a9d5b85e25a4223286cd3f \
--hash=sha256:6420ea8e7d2a88cb148b124429fba8cd2e0fae700a2d96eab7083c0928a85110 \
--hash=sha256:65ad699e0c830e2b8565afe42bd58cc972b47d829b2e0e48ad9638386d994915 \
--hash=sha256:6d227a865356f225591b6732430b1d1781e946893789a609bb34f59d09b8b0f8 \
--hash=sha256:7a27151ddad8e1439ba70c9b4b2b617b290c39395fa9ddb7411ebb0eb86d6fb0 \
--hash=sha256:80fafd1f3eb421694857f254a9bdbacd1eb22fc6c24ca74b136679f376f97d35 \
--hash=sha256:83039e5ae04e5afc974f7d25ee0870a80a6bd6b7957c3aca5613ccbe0d3e72bf \
--hash=sha256:8b8acc31fb8702c54625f4d5a2a6543557bec3c28a0ef638778b7ab1d1772132 \
--hash=sha256:9274880263256f6292ff644ca92c46d96aa7e57a75c6df3f11d636ce845a1877 \
--hash=sha256:ab7aa4d9ff3c3acf60d4b285ccec134167a948df02347585fdd934ebad8811b4 \
--hash=sha256:c41e80ddee130450dcb8829af7118f1ab69eaf8169c4bf0ee8d52b72f098dc2f \
--hash=sha256:db3aedd458e7f7f21d8176f0a1d924f1ae06d725228302b872885a1c34f3119e \
--hash=sha256:e7e13c40183884ec7f94eb8e0f622f08f1d5716150b8d7a134de48c6110fee85 \
--hash=sha256:ebfbdbd0936e178091309f6cd4fcb4decd9eab12aa513cdd9add89efa3ec2882 \
--hash=sha256:fd43bd9a9b9239805f406fd82ba6b106bf4838d9ef37c167d3ed70383943ade1 \
--hash=sha256:fd93c1a0c6c4aedc77c0fe275a9f2aba4d59b8acf88cebfc19fe3c430cfabf4f \
--hash=sha256:fffb059ba3bced6f6725961ba758649261d85ed6ce670d3e3b0a26e81cf1aa8d
shapely==2.0.7 \
--hash=sha256:0145387565fcf8f7c028b073c802956431308da933ef41d08b1693de49990d27 \
--hash=sha256:04a65d882456e13c8b417562c36324c0cd1e5915f3c18ad516bb32ee3f5fc895 \
--hash=sha256:06ff6020949b44baa8fc2e5e57e0f3d09486cd5c33b47d669f847c54136e7027 \
--hash=sha256:28fe2997aab9a9dc026dc6a355d04e85841546b2a5d232ed953e3321ab958ee5 \
--hash=sha256:2f6e4759cf680a0f00a54234902415f2fa5fe02f6b05546c662654001f0793a2 \
--hash=sha256:33fb10e50b16113714ae40adccf7670379e9ccf5b7a41d0002046ba2b8f0f691 \
--hash=sha256:35524cc8d40ee4752520819f9894b9f28ba339a42d4922e92c99b148bed3be39 \
--hash=sha256:4abeb44b3b946236e4e1a1b3d2a0987fb4d8a63bfb3fdefb8a19d142b72001e5 \
--hash=sha256:4c2b9859424facbafa54f4a19b625a752ff958ab49e01bc695f254f7db1835fa \
--hash=sha256:5aed1c6764f51011d69a679fdf6b57e691371ae49ebe28c3edb5486537ffbd51 \
--hash=sha256:5cf23400cb25deccf48c56a7cdda8197ae66c0e9097fcdd122ac2007e320bc34 \
--hash=sha256:5d6dbf096f961ca6bec5640e22e65ccdec11e676344e8157fe7d636e7904fd36 \
--hash=sha256:6bca5095e86be9d4ef3cb52d56bdd66df63ff111d580855cb8546f06c3c907cd \
--hash=sha256:73c9ae8cf443187d784d57202199bf9fd2d4bb7d5521fe8926ba40db1bc33e8e \
--hash=sha256:7977d8a39c4cf0e06247cd2dca695ad4e020b81981d4c82152c996346cf1094b \
--hash=sha256:7e97104d28e60b69f9b6a957c4d3a2a893b27525bc1fc96b47b3ccef46726bf2 \
--hash=sha256:8f623b64bb219d62014781120f47499a7adc30cf7787e24b659e56651ceebcb0 \
--hash=sha256:98697c842d5c221408ba8aa573d4f49caef4831e9bc6b6e785ce38aca42d1999 \
--hash=sha256:a0c09e3e02f948631c7763b4fd3dd175bc45303a0ae04b000856dedebefe13cb \
--hash=sha256:a3fb7fbae257e1b042f440289ee7235d03f433ea880e73e687f108d044b24db5 \
--hash=sha256:a7f04691ce1c7ed974c2f8b34a1fe4c3c5dfe33128eae886aa32d730f1ec1913 \
--hash=sha256:a9469f49ff873ef566864cb3516091881f217b5d231c8164f7883990eec88b73 \
--hash=sha256:aaaf5f7e6cc234c1793f2a2760da464b604584fb58c6b6d7d94144fd2692d67e \
--hash=sha256:adeddfb1e22c20548e840403e5e0b3d9dc3daf66f05fa59f1fcf5b5f664f0e98 \
--hash=sha256:b52f3ab845d32dfd20afba86675c91919a622f4627182daec64974db9b0b4608 \
--hash=sha256:cd0e75d9124b73e06a42bf1615ad3d7d805f66871aa94538c3a9b7871d620013 \
--hash=sha256:cf6c50cd879831955ac47af9c907ce0310245f9d162e298703f82e1785e38c98 \
--hash=sha256:d8f1da01c04527f7da59ee3755d8ee112cd8967c15fab9e43bba936b81e2a013 \
--hash=sha256:e6d95703efaa64aaabf278ced641b888fc23d9c6dd71f8215091afd8a26a66e3 \
--hash=sha256:f44eda8bd7a4bccb0f281264b34bf3518d8c4c9a8ffe69a1a05dabf6e8461147 \
--hash=sha256:f86e2c0259fe598c4532acfcf638c1f520fa77c1275912bbc958faecbf00b108
Loading