pytme 0.2.2__cp311-cp311-macosx_14_0_arm64.whl → 0.2.4__cp311-cp311-macosx_14_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. {pytme-0.2.2.data → pytme-0.2.4.data}/scripts/match_template.py +97 -148
  2. {pytme-0.2.2.data → pytme-0.2.4.data}/scripts/postprocess.py +20 -29
  3. pytme-0.2.4.data/scripts/preprocess.py +148 -0
  4. {pytme-0.2.2.data → pytme-0.2.4.data}/scripts/preprocessor_gui.py +15 -23
  5. {pytme-0.2.2.dist-info → pytme-0.2.4.dist-info}/METADATA +11 -10
  6. pytme-0.2.4.dist-info/RECORD +119 -0
  7. {pytme-0.2.2.dist-info → pytme-0.2.4.dist-info}/WHEEL +1 -1
  8. {pytme-0.2.2.dist-info → pytme-0.2.4.dist-info}/top_level.txt +1 -0
  9. pytme-0.2.2.data/scripts/preprocess.py → scripts/eval.py +1 -1
  10. scripts/match_template.py +97 -148
  11. scripts/postprocess.py +20 -29
  12. scripts/preprocess.py +116 -61
  13. scripts/preprocessor_gui.py +15 -23
  14. tests/__init__.py +0 -0
  15. tests/data/.DS_Store +0 -0
  16. tests/data/Blurring/.DS_Store +0 -0
  17. tests/data/Blurring/blob_width18.npy +0 -0
  18. tests/data/Blurring/edgegaussian_sigma3.npy +0 -0
  19. tests/data/Blurring/gaussian_sigma2.npy +0 -0
  20. tests/data/Blurring/hamming_width6.npy +0 -0
  21. tests/data/Blurring/kaiserb_width18.npy +0 -0
  22. tests/data/Blurring/localgaussian_sigma0510.npy +0 -0
  23. tests/data/Blurring/mean_size5.npy +0 -0
  24. tests/data/Blurring/ntree_sigma0510.npy +0 -0
  25. tests/data/Blurring/rank_rank3.npy +0 -0
  26. tests/data/Maps/.DS_Store +0 -0
  27. tests/data/Maps/emd_8621.mrc.gz +0 -0
  28. tests/data/README.md +2 -0
  29. tests/data/Raw/.DS_Store +0 -0
  30. tests/data/Raw/em_map.map +0 -0
  31. tests/data/Structures/.DS_Store +0 -0
  32. tests/data/Structures/1pdj.cif +3339 -0
  33. tests/data/Structures/1pdj.pdb +1429 -0
  34. tests/data/Structures/5khe.cif +3685 -0
  35. tests/data/Structures/5khe.ent +2210 -0
  36. tests/data/Structures/5khe.pdb +2210 -0
  37. tests/data/Structures/5uz4.cif +70548 -0
  38. tests/preprocessing/__init__.py +0 -0
  39. tests/preprocessing/test_compose.py +76 -0
  40. tests/preprocessing/test_frequency_filters.py +178 -0
  41. tests/preprocessing/test_preprocessor.py +136 -0
  42. tests/preprocessing/test_utils.py +79 -0
  43. tests/test_analyzer.py +310 -0
  44. tests/test_backends.py +375 -0
  45. tests/test_density.py +508 -0
  46. tests/test_extensions.py +130 -0
  47. tests/test_matching_cli.py +283 -0
  48. tests/test_matching_data.py +162 -0
  49. tests/test_matching_exhaustive.py +162 -0
  50. tests/test_matching_memory.py +30 -0
  51. tests/test_matching_optimization.py +276 -0
  52. tests/test_matching_utils.py +326 -0
  53. tests/test_orientations.py +173 -0
  54. tests/test_packaging.py +95 -0
  55. tests/test_parser.py +33 -0
  56. tests/test_structure.py +243 -0
  57. tme/__init__.py +0 -1
  58. tme/__version__.py +1 -1
  59. tme/analyzer.py +9 -6
  60. tme/backends/__init__.py +1 -1
  61. tme/backends/_jax_utils.py +10 -8
  62. tme/backends/cupy_backend.py +2 -7
  63. tme/backends/jax_backend.py +35 -20
  64. tme/backends/npfftw_backend.py +3 -2
  65. tme/backends/pytorch_backend.py +10 -7
  66. tme/data/scattering_factors.pickle +0 -0
  67. tme/density.py +26 -12
  68. tme/extensions.cpython-311-darwin.so +0 -0
  69. tme/external/bindings.cpp +332 -0
  70. tme/matching_data.py +33 -24
  71. tme/matching_exhaustive.py +39 -20
  72. tme/matching_scores.py +5 -2
  73. tme/matching_utils.py +8 -2
  74. tme/orientations.py +26 -9
  75. tme/preprocessing/_utils.py +14 -14
  76. tme/preprocessing/composable_filter.py +5 -4
  77. tme/preprocessing/compose.py +4 -4
  78. tme/preprocessing/frequency_filters.py +32 -35
  79. tme/preprocessing/tilt_series.py +210 -148
  80. tme/preprocessor.py +24 -246
  81. tme/structure.py +14 -14
  82. pytme-0.2.2.dist-info/RECORD +0 -74
  83. tme/matching_memory.py +0 -383
  84. {pytme-0.2.2.data → pytme-0.2.4.data}/scripts/estimate_ram_usage.py +0 -0
  85. {pytme-0.2.2.dist-info → pytme-0.2.4.dist-info}/LICENSE +0 -0
  86. {pytme-0.2.2.dist-info → pytme-0.2.4.dist-info}/entry_points.txt +0 -0
tme/preprocessor.py CHANGED
@@ -16,8 +16,6 @@ from scipy.interpolate import interp1d, splrep, BSpline
16
16
  from scipy.optimize import differential_evolution, minimize
17
17
 
18
18
  from .types import NDArray
19
- from .backends import NumpyFFTWBackend
20
- from .matching_utils import euler_to_rotationmatrix
21
19
 
22
20
 
23
21
  class Preprocessor:
@@ -680,134 +678,14 @@ class Preprocessor:
680
678
  use_gaussian=gaussian_sigma == 0.0,
681
679
  )(shape=shape)["data"]
682
680
 
683
- def wedge_mask(
684
- self,
685
- shape: Tuple[int],
686
- tilt_angles: NDArray,
687
- opening_axes: NDArray = 0,
688
- sigma: float = 0,
689
- omit_negative_frequencies: bool = True,
690
- ) -> NDArray:
691
- """
692
- Create a wedge mask with the same shape as template by rotating a
693
- plane according to tilt angles. The DC component of the filter is at the origin.
694
-
695
- Parameters
696
- ----------
697
- shape : Tuple of ints
698
- Shape of the output wedge array.
699
- tilt_angles : NDArray
700
- Tilt angles in format d dimensions N tilts [d x N].
701
- opening_axes : NDArray
702
- Axis running through the void defined by the wedge in format (N,)
703
- sigma : float, optional
704
- Standard deviation for Gaussian kernel used for smoothing the wedge.
705
- omit_negative_frequencies : bool, optional
706
- Whether the wedge mask should omit negative frequencies, i.e. be
707
- applicable to symmetric Fourier transforms (see :obj:`numpy.fft.fftn`)
708
-
709
- Returns
710
- -------
711
- NDArray
712
- A numpy array containing the wedge mask.
713
-
714
- Examples
715
- --------
716
- >>> import numpy as np
717
- >>> from tme import Preprocessor
718
- >>> angles = np.zeros((3, 10))
719
- >>> angles[2, :] = np.linspace(-50, 55, 10)
720
- >>> wedge = Preprocessor().wedge_mask(
721
- >>> shape = (50,50,50),
722
- >>> tilt_angles = angles,
723
- >>> omit_negative_frequencies = True
724
- >>> )
725
- >>> wedge = np.fft.fftshift(wedge)
726
-
727
- This will create a wedge that is open along axis 1, tilted
728
- around axis 2 and propagated along axis 0. The code above would
729
- be equivalent to the following
730
-
731
- >>> wedge = Preprocessor().continuous_wedge_mask(
732
- >>> shape=(50,50,50),
733
- >>> start_tilt=50,
734
- >>> stop_tilt=55,
735
- >>> tilt_axis=1,
736
- >>> omit_negative_frequencies=False,
737
- >>> infinite_plane=False
738
- >>> )
739
- >>> wedge = np.fft.fftshift(wedge)
740
-
741
- with the difference being that :py:meth:`Preprocessor.continuous_wedge_mask`
742
- does not consider individual plane tilts.
743
-
744
- Raises
745
- ------
746
- ValueError
747
- If opening_axes is neither a single value or defined for each tilt.
748
-
749
- See Also
750
- --------
751
- :py:meth:`Preprocessor.step_wedge_mask`
752
- :py:meth:`Preprocessor.continuous_wedge_mask`
753
- """
754
- opening_axes = np.asarray(opening_axes)
755
- opening_axes = np.repeat(
756
- opening_axes, tilt_angles.shape[1] // opening_axes.size
757
- )
758
-
759
- if opening_axes.size != tilt_angles.shape[1]:
760
- raise ValueError(
761
- "opening_axes has to be a single value or be defined for each tilt."
762
- )
763
-
764
- plane = np.zeros(shape, dtype=np.float32)
765
- slices = tuple(slice(a, a + 1) for a in np.divide(shape, 2).astype(int))
766
- plane_rotated, wedge_volume = np.zeros_like(plane), np.zeros_like(plane)
767
- for index in range(tilt_angles.shape[1]):
768
- plane.fill(0)
769
- plane_rotated.fill(0)
770
-
771
- opening_axis = opening_axes[index]
772
- rotation_matrix = euler_to_rotationmatrix(
773
- np.roll(tilt_angles[:, index], opening_axis - 1)
774
- )
775
-
776
- subset = tuple(
777
- slice(None) if i != opening_axis else slices[opening_axis]
778
- for i in range(plane.ndim)
779
- )
780
- plane[subset] = 1
781
- NumpyFFTWBackend().rigid_transform(
782
- arr=plane,
783
- rotation_matrix=rotation_matrix,
784
- out=plane_rotated,
785
- use_geometric_center=True,
786
- order=1,
787
- )
788
- wedge_volume += plane_rotated
789
-
790
- wedge_volume = self.gaussian_filter(template=wedge_volume, sigma=sigma)
791
- wedge_volume = np.where(wedge_volume > np.exp(-2), 1, 0)
792
- wedge_volume = np.fft.ifftshift(wedge_volume)
793
-
794
- if omit_negative_frequencies:
795
- stop = 1 + (wedge_volume.shape[-1] // 2)
796
- wedge_volume = wedge_volume[..., :stop]
797
-
798
- return wedge_volume
799
-
800
681
  def step_wedge_mask(
801
682
  self,
802
- start_tilt: float,
803
- stop_tilt: float,
804
- tilt_step: float,
805
683
  shape: Tuple[int],
806
684
  tilt_angles: Tuple[float] = None,
807
685
  opening_axis: int = 0,
808
686
  tilt_axis: int = 2,
809
- sigma: float = 0,
810
- weights: float = 1,
687
+ weights: float = None,
688
+ infinite_plane: bool = False,
811
689
  omit_negative_frequencies: bool = True,
812
690
  ) -> NDArray:
813
691
  """
@@ -816,14 +694,8 @@ class Preprocessor:
816
694
 
817
695
  Parameters
818
696
  ----------
819
- start_tilt : float
820
- Starting tilt angle in degrees, e.g. a stage tilt of 70 degrees
821
- would yield a start_tilt value of 70.
822
- stop_tilt : float
823
- Ending tilt angle in degrees, , e.g. a stage tilt of -70 degrees
824
- would yield a stop_tilt value of 70.
825
- tilt_step : float
826
- Angle between the different tilt planes.
697
+ tilt_angles : tuple of float
698
+ Sequence of tilt angles.
827
699
  shape : Tuple of ints
828
700
  Shape of the output wedge array.
829
701
  tilt_axis : int, optional
@@ -849,70 +721,21 @@ class Preprocessor:
849
721
  NDArray
850
722
  A numpy array containing the wedge mask.
851
723
 
852
- Notes
853
- -----
854
- This function is equivalent to :py:meth:`Preprocessor.wedge_mask`, but much faster
855
- for large shapes because it only considers a single tilt angle rather than the rotation
856
- of an N-1 dimensional hyperplane in N dimensions.
857
-
858
724
  See Also
859
725
  --------
860
- :py:meth:`Preprocessor.wedge_mask`
861
726
  :py:meth:`Preprocessor.continuous_wedge_mask`
862
727
  """
863
- if tilt_angles is None:
864
- tilt_angles = np.arange(-start_tilt, stop_tilt + tilt_step, tilt_step)
865
-
866
- shape = tuple(int(x) for x in shape)
867
- opening_axis, tilt_axis = int(opening_axis), int(tilt_axis)
868
-
869
- weights = np.asarray(weights)
870
- weights = np.repeat(weights, tilt_angles.size // weights.size)
871
- plane = np.zeros((shape[opening_axis], shape[tilt_axis]), dtype=np.float32)
872
- subset = tuple(
873
- slice(None) if i != 0 else slice(x // 2, x // 2 + 1)
874
- for i, x in enumerate(plane.shape)
875
- )
876
- plane_rotated, wedge_volume = np.zeros_like(plane), np.zeros_like(plane)
877
- for index in range(tilt_angles.shape[0]):
878
- plane_rotated.fill(0)
879
- plane[subset] = weights[index]
880
- rotation_matrix = euler_to_rotationmatrix((tilt_angles[index], 0))
881
- rotation_matrix = rotation_matrix[np.ix_((0, 1), (0, 1))]
882
-
883
- NumpyFFTWBackend().rigid_transform(
884
- arr=plane,
885
- rotation_matrix=rotation_matrix,
886
- out=plane_rotated,
887
- use_geometric_center=True,
888
- order=1,
889
- )
890
- wedge_volume += plane_rotated
891
-
892
- # Ramp filtering would be more accurate
893
- np.fmin(wedge_volume, np.max(weights), wedge_volume)
894
-
895
- if sigma > 0:
896
- wedge_volume = self.gaussian_filter(template=wedge_volume, sigma=sigma)
897
-
898
- if opening_axis > tilt_axis:
899
- wedge_volume = np.moveaxis(wedge_volume, 1, 0)
900
-
901
- reshape_dimensions = tuple(
902
- x if i in (opening_axis, tilt_axis) else 1 for i, x in enumerate(shape)
903
- )
904
-
905
- wedge_volume = wedge_volume.reshape(reshape_dimensions)
906
- tile_dimensions = np.divide(shape, reshape_dimensions).astype(int)
907
- wedge_volume = np.tile(wedge_volume, tile_dimensions)
908
-
909
- wedge_volume = np.fft.ifftshift(wedge_volume)
910
-
911
- if omit_negative_frequencies:
912
- stop = 1 + (wedge_volume.shape[-1] // 2)
913
- wedge_volume = wedge_volume[..., :stop]
914
-
915
- return wedge_volume
728
+ from .preprocessing.tilt_series import WedgeReconstructed
729
+
730
+ return WedgeReconstructed(
731
+ angles=tilt_angles,
732
+ tilt_axis=tilt_axis,
733
+ opening_axis=opening_axis,
734
+ frequency_cutoff=None if infinite_plane else 0.5,
735
+ create_continuous_wedge=False,
736
+ weights=weights,
737
+ weight_wedge=weights is not None,
738
+ )(shape=shape, return_real_fourier=omit_negative_frequencies,)["data"]
916
739
 
917
740
  def continuous_wedge_mask(
918
741
  self,
@@ -921,8 +744,6 @@ class Preprocessor:
921
744
  shape: Tuple[int],
922
745
  opening_axis: int = 0,
923
746
  tilt_axis: int = 2,
924
- sigma: float = 0,
925
- extrude_plane: bool = True,
926
747
  infinite_plane: bool = True,
927
748
  omit_negative_frequencies: bool = True,
928
749
  ) -> NDArray:
@@ -950,13 +771,6 @@ class Preprocessor:
950
771
  - 2 for X-axis
951
772
  shape : Tuple of ints
952
773
  Shape of the output wedge array.
953
- sigma : float, optional
954
- Standard deviation for Gaussian kernel used for smoothing the wedge.
955
- extrude_plane : bool, optional
956
- Whether the tilted plane is extruded to 3D. By default, this represents
957
- the effect of rotating a plane in 3D yielding a cylinder with wedge
958
- insertion. If set to False, the returned mask has spherical shape,
959
- analogous to rotating a line in 3D.
960
774
  omit_negative_frequencies : bool, optional
961
775
  Whether the wedge mask should omit negative frequencies, i.e. be
962
776
  applicable to symmetric Fourier transforms (see :obj:`numpy.fft.fftn`)
@@ -970,55 +784,19 @@ class Preprocessor:
970
784
  Array of the specified shape with the wedge created based on
971
785
  the tilt angles.
972
786
 
973
- Examples
974
- --------
975
- >>> wedge = create_wedge(30, 60, 1, (64, 64, 64))
976
-
977
- Notes
978
- -----
979
- The rotation plane is spanned by the tilt axis and the leftmost dimension
980
- that is not the tilt axis.
981
-
982
787
  See Also
983
788
  --------
984
- :py:meth:`Preprocessor.wedge_mask`
985
789
  :py:meth:`Preprocessor.step_wedge_mask`
986
790
  """
987
- shape_center = np.divide(shape, 2).astype(int)
988
-
989
- grid = (np.indices(shape).T - shape_center).T
990
-
991
- start_radians = np.tan(np.radians(90 - start_tilt))
992
- stop_radians = np.tan(np.radians(-1 * (90 - stop_tilt)))
993
- max_tan_value = np.tan(np.radians(90)) + 1
994
-
995
- with np.errstate(divide="ignore", invalid="ignore"):
996
- ratios = np.where(
997
- grid[opening_axis] == 0,
998
- max_tan_value,
999
- grid[tilt_axis] / grid[opening_axis],
1000
- )
1001
-
1002
- wedge = np.logical_or(start_radians <= ratios, stop_radians >= ratios).astype(
1003
- np.float32
1004
- )
1005
-
1006
- if extrude_plane:
1007
- distances = np.sqrt(grid[tilt_axis] ** 2 + grid[opening_axis] ** 2)
1008
- else:
1009
- distances = np.linalg.norm(grid, axis=0)
1010
-
1011
- if not infinite_plane:
1012
- np.multiply(wedge, distances <= shape[tilt_axis] // 2, out=wedge)
1013
-
1014
- wedge = self.gaussian_filter(template=wedge, sigma=sigma)
1015
- wedge = np.fft.ifftshift(wedge > np.exp(-2))
1016
-
1017
- if omit_negative_frequencies:
1018
- stop = 1 + (wedge.shape[-1] // 2)
1019
- wedge = wedge[..., :stop]
1020
-
1021
- return wedge
791
+ from .preprocessing.tilt_series import WedgeReconstructed
792
+
793
+ return WedgeReconstructed(
794
+ angles=(start_tilt, stop_tilt),
795
+ tilt_axis=tilt_axis,
796
+ opening_axis=opening_axis,
797
+ frequency_cutoff=None if infinite_plane else 0.5,
798
+ create_continuous_wedge=True,
799
+ )(shape=shape, return_real_fourier=omit_negative_frequencies)["data"]
1022
800
 
1023
801
 
1024
802
  def window_kaiserb(width: int, beta: float = 3.2, order: int = 0) -> NDArray:
tme/structure.py CHANGED
@@ -344,7 +344,7 @@ class Structure:
344
344
  --------
345
345
  >>> from importlib_resources import files
346
346
  >>> from tme import Structure
347
- >>> fname = str(files("tme.tests.data").joinpath("Structures/5khe.cif"))
347
+ >>> fname = str(files("tests.data").joinpath("Structures/5khe.cif"))
348
348
  >>> structure = Structure.from_file(filename=fname)
349
349
  >>> structure
350
350
  Unique Chains: A-B, Atom Range: 1-1564 [N = 1564], Residue Range: 142-239 [N = 1564]
@@ -564,7 +564,7 @@ class Structure:
564
564
  >>> from importlib_resources import files
565
565
  >>> from tempfile import NamedTemporaryFile
566
566
  >>> from tme import Structure
567
- >>> fname = str(files("tme.tests.data").joinpath("Structures/5khe.cif"))
567
+ >>> fname = str(files("tests.data").joinpath("Structures/5khe.cif"))
568
568
  >>> oname = NamedTemporaryFile().name
569
569
  >>> structure = Structure.from_file(filename=fname)
570
570
  >>> structure.to_file(f"{oname}.cif") # Writes an mmCIF file to disk
@@ -760,7 +760,7 @@ class Structure:
760
760
  --------
761
761
  >>> from importlib_resources import files
762
762
  >>> from tme import Structure
763
- >>> fname = str(files("tme.tests.data").joinpath("Structures/5khe.cif"))
763
+ >>> fname = str(files("tests.data").joinpath("Structures/5khe.cif"))
764
764
  >>> structure = Structure.from_file(filename=fname)
765
765
  >>> structure.subset_by_chain(chain="A") # Keep A
766
766
  >>> structure.subset_by_chain(chain="A,B") # Keep A and B
@@ -804,7 +804,7 @@ class Structure:
804
804
  --------
805
805
  >>> from importlib_resources import files
806
806
  >>> from tme import Structure
807
- >>> fname = str(files("tme.tests.data").joinpath("Structures/5khe.cif"))
807
+ >>> fname = str(files("tests.data").joinpath("Structures/5khe.cif"))
808
808
  >>> structure = Structure.from_file(filename=fname)
809
809
  >>> structure.subset_by_range(chain="A",start=150,stop=180)
810
810
  """
@@ -827,7 +827,7 @@ class Structure:
827
827
  --------
828
828
  >>> from importlib_resources import files
829
829
  >>> from tme import Structure
830
- >>> fname = str(files("tme.tests.data").joinpath("Structures/5khe.cif"))
830
+ >>> fname = str(files("tests.data").joinpath("Structures/5khe.cif"))
831
831
  >>> structure = Structure.from_file(filename=fname)
832
832
  >>> structure.center_of_mass()
833
833
  array([-0.89391639, 29.94908928, -2.64736741])
@@ -863,7 +863,7 @@ class Structure:
863
863
  >>> from importlib_resources import files
864
864
  >>> from tme import Structure
865
865
  >>> from tme.matching_utils import get_rotation_matrices
866
- >>> fname = str(files("tme.tests.data").joinpath("Structures/5khe.cif"))
866
+ >>> fname = str(files("tests.data").joinpath("Structures/5khe.cif"))
867
867
  >>> structure = Structure.from_file(filename=fname)
868
868
  >>> structure.rigid_transform(
869
869
  >>> rotation_matrix = get_rotation_matrices(60)[2],
@@ -902,7 +902,7 @@ class Structure:
902
902
  --------
903
903
  >>> from importlib_resources import files
904
904
  >>> from tme import Structure
905
- >>> fname = str(files("tme.tests.data").joinpath("Structures/5khe.cif"))
905
+ >>> fname = str(files("tests.data").joinpath("Structures/5khe.cif"))
906
906
  >>> structure = Structure.from_file(filename=fname)
907
907
  >>> centered_structure, translation = structure.centered()
908
908
  >>> translation
@@ -1225,17 +1225,17 @@ class Structure:
1225
1225
  origin : tuple of floats, optional
1226
1226
  Origin of the coordinate system in (z,y,x) form.
1227
1227
  chain : str, optional
1228
- Chain identified. Either single or comma separated string of chains.
1228
+ Chains to be included. Either single or comma separated string of chains.
1229
1229
  Defaults to None which returns all chains.
1230
1230
  weight_type : str, optional
1231
- Weight given to individual atoms. Supported weight are:
1231
+ Weight given to individual atoms. Supported weights are:
1232
1232
 
1233
1233
  +----------------------------+---------------------------------------+
1234
- | atomic_weight | Using element unit point mass |
1234
+ | atomic_weight | Using element weight point mass |
1235
1235
  +----------------------------+---------------------------------------+
1236
1236
  | atomic_number | Using atomic number point mass |
1237
1237
  +----------------------------+---------------------------------------+
1238
- | gaussian | Represent atoms as isotropic Gaussian |
1238
+ | gaussian | Using element weighted Gaussian mass |
1239
1239
  +----------------------------+---------------------------------------+
1240
1240
  | van_der_waals_radius | Using binary van der waal spheres |
1241
1241
  +----------------------------+---------------------------------------+
@@ -1256,7 +1256,7 @@ class Structure:
1256
1256
  --------
1257
1257
  >>> from importlib_resources import files
1258
1258
  >>> from tme import Structure
1259
- >>> fname = str(files("tme.tests.data").joinpath("Structures/5khe.cif"))
1259
+ >>> fname = str(files("tests.data").joinpath("Structures/5khe.cif"))
1260
1260
  >>> structure = Structure.from_file(filename=fname)
1261
1261
  >>> vol, origin, sampling = structure.to_volume()
1262
1262
  >>> vol.shape, origin, sampling
@@ -1374,7 +1374,7 @@ class Structure:
1374
1374
  >>> from importlib_resources import files
1375
1375
  >>> from tme.matching_utils import get_rotation_matrices
1376
1376
  >>> from tme import Structure
1377
- >>> fname = str(files("tme.tests.data").joinpath("Structures/5khe.cif"))
1377
+ >>> fname = str(files("tests.data").joinpath("Structures/5khe.cif"))
1378
1378
  >>> structure = Structure.from_file(filename=fname)
1379
1379
  >>> transformed = structure.rigid_transform(
1380
1380
  >>> rotation_matrix = get_rotation_matrices(60)[2],
@@ -1455,7 +1455,7 @@ class Structure:
1455
1455
  >>> from importlib_resources import files
1456
1456
  >>> from tme import Structure
1457
1457
  >>> from tme.matching_utils import get_rotation_matrices
1458
- >>> fname = str(files("tme.tests.data").joinpath("Structures/5khe.cif"))
1458
+ >>> fname = str(files("tests.data").joinpath("Structures/5khe.cif"))
1459
1459
  >>> structure = Structure.from_file(filename=fname)
1460
1460
  >>> transformed = structure.rigid_transform(
1461
1461
  >>> rotation_matrix = get_rotation_matrices(60)[2],
@@ -1,74 +0,0 @@
1
- pytme-0.2.2.data/scripts/estimate_ram_usage.py,sha256=R1NDpFajcF-MonJ4a43SfDlA-nxBYwK7D2quzCdsVFM,2767
2
- pytme-0.2.2.data/scripts/match_template.py,sha256=FXAzPUnKMM2_thOtTZUKtIDV7GCmhFmLXm2yJDCI6G0,41456
3
- pytme-0.2.2.data/scripts/postprocess.py,sha256=K3tP8licTsCW1LKy8hQ8rMA7UrJ0AakM3kffx_1d4n4,24780
4
- pytme-0.2.2.data/scripts/preprocess.py,sha256=zog-l2Je-GeouJ6SnamOMuHgTn7fFPiGnO5X03y5qSY,2527
5
- pytme-0.2.2.data/scripts/preprocessor_gui.py,sha256=3eGC5RqnnZ3aXyfKEVstddLvKQP46kvyclj4-q01vAA,39275
6
- scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- scripts/estimate_ram_usage.py,sha256=rN7haobnHg3YcgGJIp81FNiCzy8-saJGeEurQlmQmNQ,2768
8
- scripts/extract_candidates.py,sha256=DAfNyuauogWvSdRWIbtH44tsk9buLn13JrL1zJjJGLE,8373
9
- scripts/match_template.py,sha256=tEHfYXvfoBZB7bFjaBrHG3qH_e-U96fRfruB4n1uH9U,41457
10
- scripts/match_template_filters.py,sha256=Gj4a1b_S5NWp_dfFEPFn0D7jGf-qYgBbnTvZZ4bwqOQ,42036
11
- scripts/postprocess.py,sha256=TngTI7R8VaotxyOR9o5Hgmppjn_ILJ6ek1uwyHjkuco,24781
12
- scripts/preprocess.py,sha256=ebJVLxbRlB6TI5YHNr0VavZ4lmaRdf8QVafyiDhh_oU,2528
13
- scripts/preprocessor_gui.py,sha256=BUm8dsbe5LEo0FyjKrK1KdbeM75aYrS1yiCp2GfI19M,39276
14
- scripts/refine_matches.py,sha256=Y17Ku_t0W9vglPNF2oU5EFrqoedJIm3lCGl-hXRHvjc,21920
15
- tme/__init__.py,sha256=liARhKZ565F2Y02iWRbFzfrTCkL5You3YaUSiqUkees,202
16
- tme/__version__.py,sha256=m6kyaNpwBcP1XYcqrelX2oS3PJuOnElOcRdBa9pEb8c,22
17
- tme/analyzer.py,sha256=WfL6RbJDFpjwF1YiIa9NGOxEL8NddlekQIuG1r6B5fA,50325
18
- tme/density.py,sha256=JAC2TKzD2OWBa45MCEwT6WbL1XcTdcbiErMylwIwnH0,83837
19
- tme/extensions.cpython-311-darwin.so,sha256=e48Rshv8cWPSiBD-xqq5L8ekQJn84MqZse05fndMnkc,411984
20
- tme/matching_data.py,sha256=QvPozAnlT9GvEUaXwqmN05j-axQ5EKuoPrNBEELMxvg,25255
21
- tme/matching_exhaustive.py,sha256=QlFOORb2a2uDy6-wk4YU3X04y3XW4sfzwk3gC9gL27I,18843
22
- tme/matching_memory.py,sha256=bmCAUYyXWEet-1XXhldtc0irio2ytMSsAzWYyFI5LNM,11273
23
- tme/matching_optimization.py,sha256=Y8HfecXiOvAHXM1viBaQ_aXljqqTnGwlOlFe0MJpDRQ,45082
24
- tme/matching_scores.py,sha256=3XxvwRNztdC-4hKdloyCfwjzt4GYzA0T-WF6YUnOcvs,30867
25
- tme/matching_utils.py,sha256=VdQZPad9uVCQ9-32Vulh5r7bhBYylPvqv2X2DQNk91M,39736
26
- tme/memory.py,sha256=6xeIMAncQkgYDi6w-PIYgFEWRTUPu0_OTCeRO0p9r9Q,11029
27
- tme/orientations.py,sha256=Ul-1g2ci3QdRLfD447ZkcIo6Rv6f7gQH83JZcRkAru0,25384
28
- tme/parser.py,sha256=fNiCAdsWI4ql92F1Ob4suiVzpjUOBlh2lad1iNY_FP8,13772
29
- tme/preprocessor.py,sha256=ZhlP-8b4NzAzRogWOnk5DLNh_tqCMOpc4msQIJEKBTU,48566
30
- tme/structure.py,sha256=k5kgFNHkM2mUvXS7VAwaevltLC1mUxEiDhMW0TqTNjo,65834
31
- tme/types.py,sha256=NAY7C4qxE6yz-DXVtClMvFfoOV-spWGLNfpLATZ1LcU,442
32
- tme/backends/__init__.py,sha256=Y69k5_Vx7VpcBNV8W0pQrebzo42lp3WBfEGAl1s4Vd4,5187
33
- tme/backends/_jax_utils.py,sha256=v9T36Jv4ztyC38IhrbNU5tf80VKAdAXYX5ZxCWe02qU,5757
34
- tme/backends/cupy_backend.py,sha256=rK3pjNNB4D46MqzY2DrB_GSObFJlG5GQDOt-eOwhwTg,9429
35
- tme/backends/jax_backend.py,sha256=CUEJynVw9jqWid_vARMpNrhORgUR1SlLjz4ZTXkLuvI,9730
36
- tme/backends/matching_backend.py,sha256=KfCOKD_rA9el3Y7BeH17KJ1apCUIIhhvn-vmbkb3CB0,33750
37
- tme/backends/mlx_backend.py,sha256=FJhqmCzgjXAjWGX1HhHFrCy_We4YwQQBkKFNG05ctzM,7788
38
- tme/backends/npfftw_backend.py,sha256=QAQxr3OSq9bBN_Aq0qps-nz5vvUsx0_fFn9TocI_QCw,16988
39
- tme/backends/pytorch_backend.py,sha256=fzLucJZH5VYhrUtcX9osirNvLMsyMNPt_JNfS2l-kqg,14940
40
- tme/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- tme/data/c48n309.npy,sha256=NwH64mOEbm3tStq5c98o81fY1vMOoq4nvXDAh7Z7iZg,296768
42
- tme/data/c48n527.npy,sha256=saSUMTa1R0MisPvgFL02a7IHQSwEZ-mJu0v3qJjg5AU,506048
43
- tme/data/c48n9.npy,sha256=bDVLV6mWjZHSQfeDc-MOCKKarfc1jaNeVvpoe2xMUy4,8768
44
- tme/data/c48u1.npy,sha256=JeXMFzFITs2ezdc3x5lp3jo1cHHHHVADSA1Tpf77kXs,1088
45
- tme/data/c48u1153.npy,sha256=ECiEximtYDWtIux3Fwe_EJlyn08gUqP85DN9gjkT9_k,1107008
46
- tme/data/c48u1201.npy,sha256=aceC_Jeienz_81X4520nPpZcg5tnRhbW795EqbpWkrg,1153088
47
- tme/data/c48u1641.npy,sha256=p4LwW3LzdTjrUUpA7H53RfNWxYfPX0XjeSwZ39Ac78Q,1575488
48
- tme/data/c48u181.npy,sha256=mLYXrv1YHLH6DsBp5MkxHkxlxgMnj1mw_KKI0udH-FY,173888
49
- tme/data/c48u2219.npy,sha256=p8TQeX8YHu4pdxnwJjEAlQWAPa66W7kpK96iZKZr9JE,2130368
50
- tme/data/c48u27.npy,sha256=k03ZNEsoPwBKCy8IeIa5G0WRZqjGZMtX6Ibu7EpJHvU,26048
51
- tme/data/c48u2947.npy,sha256=icI97ED6ct66y7FIaJAugmjzrIWk7CINCxtO3wDTnrU,2829248
52
- tme/data/c48u3733.npy,sha256=tla-__Pf-hpN6h04vtFIfkkFdCLple11VO06kr1dXkM,3583808
53
- tme/data/c48u4749.npy,sha256=tItOA4oV7SiqCCREwz3fyEpZoxM0lCq_jfEo5_-fp2s,4559168
54
- tme/data/c48u5879.npy,sha256=bFk89MllIFCX_sLXTYWFquSyN1NuahH4wwnEsPJLxzA,5643968
55
- tme/data/c48u7111.npy,sha256=CMy9kI2edH-q9eTIVdgUtXurplYNI7Uqp4dXfkkVdf8,6826688
56
- tme/data/c48u815.npy,sha256=bCuJxLtm0Sjg3GGxtyjGzRYZ1G0Gz79XHI-71GvqQnI,782528
57
- tme/data/c48u83.npy,sha256=7ODJYnsiuDjGbgd9GFopsyIW2IjrYI0J2X2f-cK868U,79808
58
- tme/data/c48u8649.npy,sha256=-IPlpR4zrPQZWhhSPu4zEulFdrCEVgTMFffCB5d-huE,8303168
59
- tme/data/c600v.npy,sha256=JqSu3ALoL1A9iguehc0YGUMFPsh2fprHHp76VXeFXIw,2528
60
- tme/data/c600vc.npy,sha256=Yht-GFXDSjjGvsjFBvyxxEZAI-ODADPd5gEgFNZQVTA,14528
61
- tme/data/metadata.yaml,sha256=fAgX-mEzB0QMHTEtYDG4cSMbJhYxBbDJH3sdvJvL7a8,750
62
- tme/data/quat_to_numpy.py,sha256=-gkDZb10fKBxwfYrSLCUWvMB76TzZWELCeKsYProwws,1333
63
- tme/preprocessing/__init__.py,sha256=7O3vDzJcIfxovJkf7avWSPtzaIVlTbmsW7egQFukC_s,98
64
- tme/preprocessing/_utils.py,sha256=hC8Qfh_a_fk4o7v82c4-TZYYRFfo5XttcghvpkzBo0A,6193
65
- tme/preprocessing/composable_filter.py,sha256=sp3bN8JeFB2r384cEIgvN6yXjC53GCoPhBmGI0S0kbI,781
66
- tme/preprocessing/compose.py,sha256=tilp14UhBh98SJVJhC_STbgi7i8HeU4FB7B7KUOD8gc,1458
67
- tme/preprocessing/frequency_filters.py,sha256=x900ntX0QI46lDdycPISO-7K0XgM0015ksCOFlm-yM4,12964
68
- tme/preprocessing/tilt_series.py,sha256=Yb3dk7TZf7OfPWZPwVuFTirOZK4x6mjLbxYX9KtRBdg,34545
69
- pytme-0.2.2.dist-info/LICENSE,sha256=K1IUNSVAz8BXbpH5EA8y5FpaHdvFXnAF2zeK95Lr2bY,18467
70
- pytme-0.2.2.dist-info/METADATA,sha256=axenBTwu62Z-5jY-4kScnqv7bbWWwDU7S-VatPzSz0k,5206
71
- pytme-0.2.2.dist-info/WHEEL,sha256=IHsX_ZtCj0uMf8jtN3eK3zfXfu1SfKRsLbDhsprnhR0,109
72
- pytme-0.2.2.dist-info/entry_points.txt,sha256=ff3LQL3FCWfCYOwFiP9zatm7laUbnwCkuPELkQVyUO4,241
73
- pytme-0.2.2.dist-info/top_level.txt,sha256=J8FUkazOb2fZ0n_KexnqCGyNOtie2bwisFSUBiM5-0w,12
74
- pytme-0.2.2.dist-info/RECORD,,