pytme 0.2.9.post1__cp311-cp311-macosx_15_0_arm64.whl → 0.3b0.post1__cp311-cp311-macosx_15_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.
- pytme-0.3b0.post1.data/scripts/estimate_memory_usage.py +76 -0
- pytme-0.3b0.post1.data/scripts/match_template.py +1098 -0
- {pytme-0.2.9.post1.data → pytme-0.3b0.post1.data}/scripts/postprocess.py +318 -189
- {pytme-0.2.9.post1.data → pytme-0.3b0.post1.data}/scripts/preprocess.py +21 -31
- {pytme-0.2.9.post1.data → pytme-0.3b0.post1.data}/scripts/preprocessor_gui.py +12 -12
- pytme-0.3b0.post1.data/scripts/pytme_runner.py +769 -0
- {pytme-0.2.9.post1.dist-info → pytme-0.3b0.post1.dist-info}/METADATA +21 -20
- pytme-0.3b0.post1.dist-info/RECORD +126 -0
- {pytme-0.2.9.post1.dist-info → pytme-0.3b0.post1.dist-info}/entry_points.txt +2 -1
- pytme-0.3b0.post1.dist-info/licenses/LICENSE +339 -0
- scripts/estimate_memory_usage.py +76 -0
- scripts/eval.py +93 -0
- scripts/extract_candidates.py +224 -0
- scripts/match_template.py +341 -378
- pytme-0.2.9.post1.data/scripts/match_template.py → scripts/match_template_filters.py +213 -148
- scripts/postprocess.py +318 -189
- scripts/preprocess.py +21 -31
- scripts/preprocessor_gui.py +12 -12
- scripts/pytme_runner.py +769 -0
- scripts/refine_matches.py +625 -0
- tests/preprocessing/test_frequency_filters.py +28 -14
- tests/test_analyzer.py +41 -36
- tests/test_backends.py +1 -0
- tests/test_matching_cli.py +109 -54
- tests/test_matching_data.py +5 -5
- tests/test_matching_exhaustive.py +1 -2
- tests/test_matching_optimization.py +4 -9
- tests/test_matching_utils.py +1 -1
- tests/test_orientations.py +0 -1
- tme/__version__.py +1 -1
- tme/analyzer/__init__.py +2 -0
- tme/analyzer/_utils.py +26 -21
- tme/analyzer/aggregation.py +395 -222
- tme/analyzer/base.py +127 -0
- tme/analyzer/peaks.py +189 -204
- tme/analyzer/proxy.py +123 -0
- tme/backends/__init__.py +4 -3
- tme/backends/_cupy_utils.py +25 -24
- tme/backends/_jax_utils.py +20 -18
- tme/backends/cupy_backend.py +13 -26
- tme/backends/jax_backend.py +24 -23
- tme/backends/matching_backend.py +4 -3
- tme/backends/mlx_backend.py +4 -3
- tme/backends/npfftw_backend.py +34 -30
- tme/backends/pytorch_backend.py +18 -4
- tme/cli.py +126 -0
- tme/density.py +9 -7
- tme/filters/__init__.py +3 -3
- tme/filters/_utils.py +36 -10
- tme/filters/bandpass.py +229 -188
- tme/filters/compose.py +5 -4
- tme/filters/ctf.py +516 -254
- tme/filters/reconstruction.py +91 -32
- tme/filters/wedge.py +196 -135
- tme/filters/whitening.py +37 -42
- tme/matching_data.py +28 -39
- tme/matching_exhaustive.py +31 -27
- tme/matching_optimization.py +5 -4
- tme/matching_scores.py +25 -15
- tme/matching_utils.py +54 -9
- tme/memory.py +4 -3
- tme/orientations.py +22 -9
- tme/parser.py +114 -33
- tme/preprocessor.py +6 -5
- tme/rotations.py +10 -7
- tme/structure.py +4 -3
- pytme-0.2.9.post1.data/scripts/estimate_ram_usage.py +0 -97
- pytme-0.2.9.post1.dist-info/RECORD +0 -119
- pytme-0.2.9.post1.dist-info/licenses/LICENSE +0 -153
- scripts/estimate_ram_usage.py +0 -97
- tests/data/Maps/.DS_Store +0 -0
- tests/data/Structures/.DS_Store +0 -0
- {pytme-0.2.9.post1.dist-info → pytme-0.3b0.post1.dist-info}/WHEEL +0 -0
- {pytme-0.2.9.post1.dist-info → pytme-0.3b0.post1.dist-info}/top_level.txt +0 -0
tme/memory.py
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
"""
|
1
|
+
"""
|
2
|
+
Compute memory consumption of template matching components.
|
2
3
|
|
3
|
-
|
4
|
+
Copyright (c) 2023 European Molecular Biology Laboratory
|
4
5
|
|
5
|
-
|
6
|
+
Author: Valentin Maurer <valentin.maurer@embl-hamburg.de>
|
6
7
|
"""
|
7
8
|
|
8
9
|
from abc import ABC, abstractmethod
|
tme/orientations.py
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
"""
|
2
|
+
Handle template matching orientations and conversion between formats.
|
3
3
|
|
4
|
-
|
4
|
+
Copyright (c) 2024 European Molecular Biology Laboratory
|
5
5
|
|
6
|
-
|
6
|
+
Author: Valentin Maurer <valentin.maurer@embl-hamburg.de>
|
7
7
|
"""
|
8
|
+
|
8
9
|
from typing import List, Tuple
|
9
10
|
from dataclasses import dataclass
|
10
11
|
from string import ascii_lowercase, ascii_uppercase
|
@@ -14,7 +15,7 @@ import numpy as np
|
|
14
15
|
from .parser import StarParser
|
15
16
|
from .matching_utils import compute_extraction_box
|
16
17
|
|
17
|
-
# Exceeds available numpy dimensions for default installations
|
18
|
+
# Exceeds available numpy dimensions for default installations
|
18
19
|
NAMES = ["x", "y", "z", *ascii_lowercase[:-3], *ascii_uppercase]
|
19
20
|
|
20
21
|
|
@@ -81,7 +82,7 @@ class Orientations:
|
|
81
82
|
self.translations = np.array(self.translations).astype(np.float32)
|
82
83
|
self.rotations = np.array(self.rotations).astype(np.float32)
|
83
84
|
self.scores = np.array(self.scores).astype(np.float32)
|
84
|
-
self.details = np.array(self.details)
|
85
|
+
self.details = np.array(self.details)
|
85
86
|
n_orientations = set(
|
86
87
|
[
|
87
88
|
self.translations.shape[0],
|
@@ -324,6 +325,7 @@ class Orientations:
|
|
324
325
|
"_rlnAngleRot",
|
325
326
|
"_rlnAngleTilt",
|
326
327
|
"_rlnAnglePsi",
|
328
|
+
"_rlnClassNumber",
|
327
329
|
]
|
328
330
|
if source_path is not None:
|
329
331
|
header.append("_rlnMicrographName")
|
@@ -339,6 +341,7 @@ class Orientations:
|
|
339
341
|
for index, (translation, rotation, score, detail) in enumerate(self):
|
340
342
|
line = [str(x) for x in translation]
|
341
343
|
line.extend([str(x) for x in rotation])
|
344
|
+
line.extend([str(detail)])
|
342
345
|
|
343
346
|
if source_path is not None:
|
344
347
|
line.append(source_path)
|
@@ -489,9 +492,12 @@ class Orientations:
|
|
489
492
|
def _from_star(
|
490
493
|
cls, filename: str, delimiter: str = "\t"
|
491
494
|
) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
|
492
|
-
|
495
|
+
parser = StarParser(filename, delimiter=delimiter)
|
496
|
+
|
497
|
+
ret = parser.get("data_particles", None)
|
498
|
+
if ret is None:
|
499
|
+
ret = parser.get("data_", None)
|
493
500
|
|
494
|
-
ret = ret.get("data_particles", None)
|
495
501
|
if ret is None:
|
496
502
|
raise ValueError(f"No data_particles section found in {filename}.")
|
497
503
|
|
@@ -500,13 +506,20 @@ class Orientations:
|
|
500
506
|
)
|
501
507
|
translation = translation.astype(np.float32).T
|
502
508
|
|
509
|
+
default_angle = np.zeros(translation.shape[0], dtype=np.float32)
|
510
|
+
for x in ("_rlnAngleRot", "_rlnAngleTilt", "_rlnAnglePsi"):
|
511
|
+
if x not in ret:
|
512
|
+
ret[x] = default_angle
|
513
|
+
|
503
514
|
rotation = np.vstack(
|
504
515
|
(ret["_rlnAngleRot"], ret["_rlnAngleTilt"], ret["_rlnAnglePsi"])
|
505
516
|
)
|
506
517
|
rotation = rotation.astype(np.float32).T
|
507
518
|
|
508
519
|
default = np.zeros(translation.shape[0])
|
509
|
-
|
520
|
+
|
521
|
+
scores = ret.get("_pytmeScore", default)
|
522
|
+
return translation, rotation, scores, default
|
510
523
|
|
511
524
|
@staticmethod
|
512
525
|
def _from_tbl(
|
tme/parser.py
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
"""
|
1
|
+
"""
|
2
|
+
Implements parsers for atomic structure file formats.
|
2
3
|
|
3
|
-
|
4
|
+
Copyright (c) 2023 European Molecular Biology Laboratory
|
4
5
|
|
5
|
-
|
6
|
+
Author: Valentin Maurer <valentin.maurer@embl-hamburg.de>
|
6
7
|
"""
|
7
8
|
|
8
9
|
import re
|
@@ -15,7 +16,14 @@ from typing import List, Dict, Union
|
|
15
16
|
|
16
17
|
import numpy as np
|
17
18
|
|
18
|
-
__all__ = [
|
19
|
+
__all__ = [
|
20
|
+
"PDBParser",
|
21
|
+
"MMCIFParser",
|
22
|
+
"GROParser",
|
23
|
+
"StarParser",
|
24
|
+
"XMLParser",
|
25
|
+
"MDOCParser",
|
26
|
+
]
|
19
27
|
|
20
28
|
|
21
29
|
class Parser(ABC):
|
@@ -84,6 +92,34 @@ class Parser(ABC):
|
|
84
92
|
"""
|
85
93
|
return key in self._data
|
86
94
|
|
95
|
+
def __repr__(self) -> str:
|
96
|
+
"""
|
97
|
+
String representation of the Parser showing available keys and their lengths.
|
98
|
+
|
99
|
+
Returns
|
100
|
+
-------
|
101
|
+
str
|
102
|
+
A formatted string showing each key and the length of its value.
|
103
|
+
"""
|
104
|
+
if not self._data:
|
105
|
+
return f"{self.__class__.__name__}(empty)"
|
106
|
+
|
107
|
+
lines = [f"{self.__class__.__name__}:"]
|
108
|
+
try:
|
109
|
+
for key, value in sorted(self._data.items()):
|
110
|
+
if isinstance(value, (list, tuple)):
|
111
|
+
lines.append(f" {key}: length {len(value)}")
|
112
|
+
elif isinstance(value, dict):
|
113
|
+
lines.append(f" {key}: dict with {len(value)} keys")
|
114
|
+
elif isinstance(value, str):
|
115
|
+
lines.append(f" {key}: str")
|
116
|
+
else:
|
117
|
+
lines.append(f" {key}: {type(value).__name__}")
|
118
|
+
except Exception:
|
119
|
+
pass
|
120
|
+
|
121
|
+
return "\n".join(lines)
|
122
|
+
|
87
123
|
def get(self, key, default=None):
|
88
124
|
"""
|
89
125
|
Retrieve a value from the internal data using a given key. If the
|
@@ -247,19 +283,6 @@ class MMCIFParser(Parser):
|
|
247
283
|
"""
|
248
284
|
|
249
285
|
def parse_input(self, lines: deque) -> Dict:
|
250
|
-
"""
|
251
|
-
Parse a list of lines from an MMCIF file and convert the data into a dictionary.
|
252
|
-
|
253
|
-
Parameters
|
254
|
-
----------
|
255
|
-
lines : deque of str
|
256
|
-
The lines of an MMCIF file to parse.
|
257
|
-
|
258
|
-
Returns
|
259
|
-
-------
|
260
|
-
dict
|
261
|
-
A dictionary containing the parsed data from the MMCIF file.
|
262
|
-
"""
|
263
286
|
lines = self._consolidate_strings(lines)
|
264
287
|
blocks = self._split_in_blocks(lines)
|
265
288
|
mmcif_dict = {}
|
@@ -448,21 +471,6 @@ class GROParser(Parser):
|
|
448
471
|
"""
|
449
472
|
|
450
473
|
def parse_input(self, lines, **kwargs) -> Dict:
|
451
|
-
"""
|
452
|
-
Parse a list of lines from a GRO file and convert the data into a dictionary.
|
453
|
-
|
454
|
-
Parameters
|
455
|
-
----------
|
456
|
-
lines : deque of str
|
457
|
-
The lines of a GRO file to parse.
|
458
|
-
kwargs : Dict, optional
|
459
|
-
Optional keyword arguments.
|
460
|
-
|
461
|
-
Returns
|
462
|
-
-------
|
463
|
-
dict
|
464
|
-
A dictionary containing the parsed data from the GRO file.
|
465
|
-
"""
|
466
474
|
data = {
|
467
475
|
"title": [],
|
468
476
|
"num_atoms": [],
|
@@ -560,7 +568,7 @@ class StarParser(MMCIFParser):
|
|
560
568
|
.. [1] https://www.iucr.org/__data/assets/file/0013/11416/star.5.html
|
561
569
|
"""
|
562
570
|
|
563
|
-
def parse_input(self, lines: List[str], delimiter: str =
|
571
|
+
def parse_input(self, lines: List[str], delimiter: str = None) -> Dict:
|
564
572
|
pattern = re.compile(r"\s*#.*")
|
565
573
|
|
566
574
|
ret, category, block = {}, None, []
|
@@ -683,3 +691,76 @@ class XMLParser(Parser):
|
|
683
691
|
pass
|
684
692
|
|
685
693
|
return value_str
|
694
|
+
|
695
|
+
|
696
|
+
class MDOCParser(Parser):
|
697
|
+
"""
|
698
|
+
Convert MDOC file (SerialEM metadata) into a dictionary representation.
|
699
|
+
|
700
|
+
MDOC files contain global parameters and per-tilt metadata for cryo-ET
|
701
|
+
tilt series, with sections marked by [ZValue = N] for individual tilts.
|
702
|
+
"""
|
703
|
+
|
704
|
+
def parse_input(self, lines: deque, **kwargs) -> Dict:
|
705
|
+
data = {}
|
706
|
+
global_params = {}
|
707
|
+
in_zvalue_section = False
|
708
|
+
zvalue_pattern = re.compile(r"\[ZValue\s*=\s*(\d+)\]")
|
709
|
+
section_pattern = re.compile(r"\[T\s*=\s*(.*?)\]")
|
710
|
+
|
711
|
+
if not lines:
|
712
|
+
return data
|
713
|
+
|
714
|
+
while lines:
|
715
|
+
line = lines.popleft().strip()
|
716
|
+
|
717
|
+
if not line:
|
718
|
+
continue
|
719
|
+
|
720
|
+
# Check for ZValue section header
|
721
|
+
zvalue_match = zvalue_pattern.match(line)
|
722
|
+
if zvalue_match:
|
723
|
+
in_zvalue_section = True
|
724
|
+
|
725
|
+
zvalue = int(zvalue_match.group(1))
|
726
|
+
if "ZValue" not in data:
|
727
|
+
data["ZValue"] = []
|
728
|
+
data["ZValue"].append(zvalue)
|
729
|
+
continue
|
730
|
+
|
731
|
+
# Check for T section header (comments/metadata)
|
732
|
+
section_match = section_pattern.match(line)
|
733
|
+
if section_match:
|
734
|
+
section_content = section_match.group(1)
|
735
|
+
if "sections" not in global_params:
|
736
|
+
global_params["sections"] = []
|
737
|
+
global_params["sections"].append(section_content)
|
738
|
+
continue
|
739
|
+
|
740
|
+
# Parse key-value pairs
|
741
|
+
if "=" in line:
|
742
|
+
try:
|
743
|
+
key, value = line.split("=", 1)
|
744
|
+
key = key.strip()
|
745
|
+
value = value.strip()
|
746
|
+
|
747
|
+
try:
|
748
|
+
if "." not in value and "e" not in value.lower():
|
749
|
+
parsed_value = int(value)
|
750
|
+
else:
|
751
|
+
parsed_value = float(value)
|
752
|
+
except ValueError:
|
753
|
+
parsed_value = value
|
754
|
+
|
755
|
+
if not in_zvalue_section:
|
756
|
+
global_params[key] = parsed_value
|
757
|
+
else:
|
758
|
+
if key not in data:
|
759
|
+
data[key] = []
|
760
|
+
data[key].append(parsed_value)
|
761
|
+
|
762
|
+
except ValueError:
|
763
|
+
continue
|
764
|
+
|
765
|
+
data.update(global_params)
|
766
|
+
return data
|
tme/preprocessor.py
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
"""
|
1
|
+
"""
|
2
|
+
Implements Preprocessor class for filtering operations.
|
2
3
|
|
3
|
-
|
4
|
+
Copyright (c) 2023 European Molecular Biology Laboratory
|
4
5
|
|
5
|
-
|
6
|
+
Author: Valentin Maurer <valentin.maurer@embl-hamburg.de>
|
6
7
|
"""
|
7
8
|
|
8
9
|
import os
|
@@ -669,9 +670,9 @@ class Preprocessor:
|
|
669
670
|
NDArray
|
670
671
|
Bandpass filtered.
|
671
672
|
"""
|
672
|
-
from .filters import
|
673
|
+
from .filters import BandPassReconstructed
|
673
674
|
|
674
|
-
return
|
675
|
+
return BandPassReconstructed(
|
675
676
|
sampling_rate=sampling_rate,
|
676
677
|
lowpass=lowpass,
|
677
678
|
highpass=highpass,
|
tme/rotations.py
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
"""
|
1
|
+
"""
|
2
|
+
Implements various means of generating rotation matrices.
|
2
3
|
|
3
|
-
|
4
|
+
Copyright (c) 2023-2025 European Molecular Biology Laboratory
|
4
5
|
|
5
|
-
|
6
|
+
Author: Valentin Maurer <valentin.maurer@embl-hamburg.de>
|
6
7
|
"""
|
7
8
|
|
8
9
|
import yaml
|
@@ -183,12 +184,14 @@ def euler_to_rotationmatrix(angles: Tuple[float], seq: str = "zyz") -> NDArray:
|
|
183
184
|
NDArray
|
184
185
|
The generated rotation matrix.
|
185
186
|
"""
|
187
|
+
angles = np.asarray(angles)
|
188
|
+
|
186
189
|
n_angles = len(angles)
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
+
if angles.ndim == 2:
|
191
|
+
n_angles = angles.shape[1]
|
192
|
+
|
190
193
|
rotation_matrix = Rotation.from_euler(
|
191
|
-
seq=
|
194
|
+
seq=seq[:n_angles], angles=angles, degrees=True
|
192
195
|
)
|
193
196
|
return rotation_matrix.as_matrix().astype(np.float32)
|
194
197
|
|
tme/structure.py
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
"""
|
1
|
+
"""
|
2
|
+
Implements class Structure to represent atomic structures.
|
2
3
|
|
3
|
-
|
4
|
+
Copyright (c) 2023 European Molecular Biology Laboratory
|
4
5
|
|
5
|
-
|
6
|
+
Author: Valentin Maurer <valentin.maurer@embl-hamburg.de>
|
6
7
|
"""
|
7
8
|
|
8
9
|
import warnings
|
@@ -1,97 +0,0 @@
|
|
1
|
-
#!python
|
2
|
-
""" Estimate RAM requirements for template matching jobs.
|
3
|
-
|
4
|
-
Copyright (c) 2023 European Molecular Biology Laboratory
|
5
|
-
|
6
|
-
Author: Valentin Maurer <valentin.maurer@embl-hamburg.de>
|
7
|
-
"""
|
8
|
-
import numpy as np
|
9
|
-
import argparse
|
10
|
-
from tme import Density
|
11
|
-
from tme.matching_utils import estimate_ram_usage
|
12
|
-
from tme.matching_exhaustive import MATCHING_EXHAUSTIVE_REGISTER
|
13
|
-
|
14
|
-
|
15
|
-
def parse_args():
|
16
|
-
parser = argparse.ArgumentParser(
|
17
|
-
description="Estimate RAM usage for template matching."
|
18
|
-
)
|
19
|
-
parser.add_argument(
|
20
|
-
"-m",
|
21
|
-
"--target",
|
22
|
-
dest="target",
|
23
|
-
type=str,
|
24
|
-
required=True,
|
25
|
-
help="Path to a target in CCP4/MRC format.",
|
26
|
-
)
|
27
|
-
parser.add_argument(
|
28
|
-
"-i",
|
29
|
-
"--template",
|
30
|
-
dest="template",
|
31
|
-
type=str,
|
32
|
-
required=True,
|
33
|
-
help="Path to a template in PDB/MMCIF or CCP4/MRC format.",
|
34
|
-
)
|
35
|
-
parser.add_argument(
|
36
|
-
"--matching_method",
|
37
|
-
required=False,
|
38
|
-
default=None,
|
39
|
-
help="Analyzer method to use.",
|
40
|
-
)
|
41
|
-
parser.add_argument(
|
42
|
-
"-s",
|
43
|
-
dest="score",
|
44
|
-
type=str,
|
45
|
-
default="FLCSphericalMask",
|
46
|
-
help="Template matching scoring function.",
|
47
|
-
choices=MATCHING_EXHAUSTIVE_REGISTER.keys(),
|
48
|
-
)
|
49
|
-
parser.add_argument(
|
50
|
-
"--ncores", type=int, help="Number of cores for parallelization.", required=True
|
51
|
-
)
|
52
|
-
parser.add_argument(
|
53
|
-
"--no_edge_padding",
|
54
|
-
dest="no_edge_padding",
|
55
|
-
action="store_true",
|
56
|
-
default=False,
|
57
|
-
help="Whether to pad the edges of the target. This is useful, if the target"
|
58
|
-
" has a well defined bounding box, e.g. a density map.",
|
59
|
-
)
|
60
|
-
parser.add_argument(
|
61
|
-
"--no_fourier_padding",
|
62
|
-
dest="no_fourier_padding",
|
63
|
-
action="store_true",
|
64
|
-
default=False,
|
65
|
-
help="Whether input arrays should be zero-padded to the full convolution shape"
|
66
|
-
" for numerical stability. When working with very large targets such as"
|
67
|
-
" tomograms it is safe to use this flag and benefit from the performance gain.",
|
68
|
-
)
|
69
|
-
args = parser.parse_args()
|
70
|
-
return args
|
71
|
-
|
72
|
-
|
73
|
-
def main():
|
74
|
-
args = parse_args()
|
75
|
-
target = Density.from_file(args.target)
|
76
|
-
template = Density.from_file(args.template)
|
77
|
-
|
78
|
-
target_box = target.shape
|
79
|
-
if not args.no_edge_padding:
|
80
|
-
target_box = np.add(target_box, template.shape)
|
81
|
-
|
82
|
-
template_box = template.shape
|
83
|
-
if args.no_fourier_padding:
|
84
|
-
template_box = np.ones(len(template_box), dtype=int)
|
85
|
-
|
86
|
-
result = estimate_ram_usage(
|
87
|
-
shape1=target_box,
|
88
|
-
shape2=template_box,
|
89
|
-
matching_method=args.score,
|
90
|
-
ncores=args.ncores,
|
91
|
-
analyzer_method="MaxScoreOverRotations",
|
92
|
-
)
|
93
|
-
print(result)
|
94
|
-
|
95
|
-
|
96
|
-
if __name__ == "__main__":
|
97
|
-
main()
|
@@ -1,119 +0,0 @@
|
|
1
|
-
pytme-0.2.9.post1.data/scripts/estimate_ram_usage.py,sha256=R1NDpFajcF-MonJ4a43SfDlA-nxBYwK7D2quzCdsVFM,2767
|
2
|
-
pytme-0.2.9.post1.data/scripts/match_template.py,sha256=k_PACJyQfVBwB7zJiFvkurTtsnej_h6LEnvajZjJkus,39558
|
3
|
-
pytme-0.2.9.post1.data/scripts/postprocess.py,sha256=Wlbn284vN-Jjo2qpzNNsnW0zOHHHGLQEMeQp5RQJjZk,22759
|
4
|
-
pytme-0.2.9.post1.data/scripts/preprocess.py,sha256=7NJRUmPGaSFpGSA5C8f4JUzajRo6alMJ4aEprIyS0oo,6512
|
5
|
-
pytme-0.2.9.post1.data/scripts/preprocessor_gui.py,sha256=2b_xqZwEdB7GKmwWGu5Z4qewN71XZcEa1OVTe-15YF0,41789
|
6
|
-
pytme-0.2.9.post1.dist-info/licenses/LICENSE,sha256=K1IUNSVAz8BXbpH5EA8y5FpaHdvFXnAF2zeK95Lr2bY,18467
|
7
|
-
scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
-
scripts/estimate_ram_usage.py,sha256=rN7haobnHg3YcgGJIp81FNiCzy8-saJGeEurQlmQmNQ,2768
|
9
|
-
scripts/match_template.py,sha256=8OkGMpvJe35mNVP9EMRd1KOTTrvMm9xB0OHLVkNlTV4,39559
|
10
|
-
scripts/postprocess.py,sha256=TnmNY6b2GUOr_dZoi1F71TPpOzyhffmUULRs79LLefQ,22760
|
11
|
-
scripts/preprocess.py,sha256=GP8lPh_rqFv_CDkPTeFbve_tC1Y7KQZl1YrD9w9wvT4,6513
|
12
|
-
scripts/preprocessor_gui.py,sha256=8P-xhufzTeH0qEH08ZbF9onHFTq-5FinnhNaNbEv8Lg,41790
|
13
|
-
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
|
-
tests/test_analyzer.py,sha256=fMuY0WCh1_D1XdzaryKzq3Mj9Q3pJFpWCNeEO-DYY20,7949
|
15
|
-
tests/test_backends.py,sha256=29HlacgrX4fRjFXfzNNh3yDjqHRd7WvCFpTpRQwAsmA,17541
|
16
|
-
tests/test_density.py,sha256=vzzy0Gk3uUR096aZgA-e5gOfLnw9qG3RH-xyXtHCO_I,18971
|
17
|
-
tests/test_extensions.py,sha256=1Zv9dG_dmmC2mlbX91YIPyGLSToPC0202-ffLAfVcr4,5203
|
18
|
-
tests/test_matching_cli.py,sha256=VoGVi4QhakccVbC3pIQzEwaL97Zgi2Ll4np1zVqdpvo,9345
|
19
|
-
tests/test_matching_data.py,sha256=TyvnSJPzdLPiXYWdz9coQ-m4H1tUS_cbD0WaBdvrevg,6062
|
20
|
-
tests/test_matching_exhaustive.py,sha256=2_uG8Ir8QUyvGXMHcsBRdvr27j83cgpd53FnRyIkF8M,4055
|
21
|
-
tests/test_matching_memory.py,sha256=XrBGRi4cIp3-4nN6s7tj0pBbFJrvJaG3vQdtK-6uzY0,1151
|
22
|
-
tests/test_matching_optimization.py,sha256=KBmFojKpr1iC_T90vpsrvZoEeFzI41xmejC-WuINZGU,7941
|
23
|
-
tests/test_matching_utils.py,sha256=9wJPKh5LF_Vb75pKbXy-JT8u_FGLfWioA7nFcOkAto4,6356
|
24
|
-
tests/test_orientations.py,sha256=HtCYJB_XGMLjWEvTfCXSxKpE_FvrGg5Uk39dn1zB-4g,6837
|
25
|
-
tests/test_parser.py,sha256=57oaksWrKNB4Z_22IxfW0nXMyQWLJFVsuvnJQPhMn10,993
|
26
|
-
tests/test_rotations.py,sha256=CTEkpO8Z-6afgCIk2wGexXBaOqUeGJL2-krm1z4YRFY,5358
|
27
|
-
tests/test_structure.py,sha256=Qgrex3wYl9TpFLcqMeUOkq-7w93bzEsMNStKdJdsbnw,8881
|
28
|
-
tests/data/README.md,sha256=RMyG_mojKLo6AEIHUj40nTPI7ZGcs_6dRzWSRGxTgGY,83
|
29
|
-
tests/data/Blurring/blob_width18.npy,sha256=_BVu5T2q_8N5lA2KCMUTLwknec8fHXh9Nsyoa4ov0wo,21408
|
30
|
-
tests/data/Blurring/edgegaussian_sigma3.npy,sha256=OvxXAyJs5V_m7b91BFhBqS9BnisKWbckVcMlHuChQiY,21408
|
31
|
-
tests/data/Blurring/gaussian_sigma2.npy,sha256=OS9sNpu0Y7l--X8dyB-mp-EE5eaNHISqiNkOOutllfc,21408
|
32
|
-
tests/data/Blurring/hamming_width6.npy,sha256=yKdrOYGfHn-ER7GpTzASqfLZHkAR7AFeBcNRXrs4aIg,21408
|
33
|
-
tests/data/Blurring/kaiserb_width18.npy,sha256=08grtR1E2dWRfksiPrEdN0nQwugd6o-TV5lKwnuLXQg,21408
|
34
|
-
tests/data/Blurring/localgaussian_sigma0510.npy,sha256=KXASnlhxAnvvcgIDCniIHkak-NhsF_QmSV7j-p9kSk4,21408
|
35
|
-
tests/data/Blurring/mean_size5.npy,sha256=2APwsCR_1fpwGIc_mG0dPegpcbgXhUbcEEeQo9Wa1iA,42688
|
36
|
-
tests/data/Blurring/ntree_sigma0510.npy,sha256=HxYh_ItxdKulp8UiPMzQ0ze2iiQ3Oi7seWFvEzO1kWQ,21408
|
37
|
-
tests/data/Blurring/rank_rank3.npy,sha256=MxCsomoNPmiV0Cd-5nl2S8TYCfLyEj-WV19gLH_xe0c,21408
|
38
|
-
tests/data/Maps/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
39
|
-
tests/data/Maps/emd_8621.mrc.gz,sha256=ZAlSOQRT9B_e8xpeodio9j0WBzygl2R1ctg9m8QhCRA,4572566
|
40
|
-
tests/data/Raw/em_map.map,sha256=YeY_R0p-90-oZgxfbKGIsyE5bui_uWq9iGhWl0bLYZI,22304
|
41
|
-
tests/data/Structures/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
42
|
-
tests/data/Structures/1pdj.cif,sha256=QdO4e2ulO621PVoK3q9n0qDPDKnzJpV6sPeG6zQec1A,169343
|
43
|
-
tests/data/Structures/1pdj.pdb,sha256=nTFGjecultoXNVUBDdsyho0CEzX5i1fSo_aBYDh5-pU,115749
|
44
|
-
tests/data/Structures/5khe.cif,sha256=SnC0so37wyuoYwAX5UDTTLvQiknZXxeJrvkGai-11rw,214644
|
45
|
-
tests/data/Structures/5khe.ent,sha256=AjXInxR_DgglZATzSNgB1rs7-LgAn2G1NdgnHb6fAmM,179010
|
46
|
-
tests/data/Structures/5khe.pdb,sha256=AjXInxR_DgglZATzSNgB1rs7-LgAn2G1NdgnHb6fAmM,179010
|
47
|
-
tests/data/Structures/5uz4.cif,sha256=KIcBaOf-RvOV4VRl1AU_EK4BsMxGXS8s8_UdlIhyeWk,6079401
|
48
|
-
tests/preprocessing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
49
|
-
tests/preprocessing/test_compose.py,sha256=z44fgQhxJU0-zHSV0CLBMEJqwhK5gEFDhUCLuVsQpQc,2490
|
50
|
-
tests/preprocessing/test_frequency_filters.py,sha256=rFms5nQb6KzxQE2IvMu37u8f15kTcN5tD7gr3v5Z-Jo,6610
|
51
|
-
tests/preprocessing/test_preprocessor.py,sha256=XyR4xc4YM76PUKuTIiive76Q85DdcyDAvbXNGcoKL8w,4820
|
52
|
-
tests/preprocessing/test_utils.py,sha256=2V1a9XtFZYmCyQzgsj0qWzWuXg-JAsOoG5_rtTwxvGg,3031
|
53
|
-
tme/__init__.py,sha256=GXfIuzU4fh2KZfgUOIXnNeKlJ8kSp3EqoBr6bSik848,217
|
54
|
-
tme/__version__.py,sha256=F8OVhAhMXSkvvXYgZtbPn2SG1AQC3joK4yu-FrHt81Y,22
|
55
|
-
tme/density.py,sha256=vCBZHtMyQZ1lr0sTGfPa7RP-TpPf22etRHDzeL7yqaM,82424
|
56
|
-
tme/extensions.cpython-311-darwin.so,sha256=vNaZYhhSrVlCjBlj5nzpKcnnJ_L_-84WhTRz2kWYK2Y,395696
|
57
|
-
tme/matching_data.py,sha256=hhtjQl_EimGGmyR2DHiZi82Aeq3xmNF98koevZT7mKc,31238
|
58
|
-
tme/matching_exhaustive.py,sha256=VXWOMaLF9m_31d9Hy3mn-PuUBJ0zgsTRb5v4sdRvJPU,18817
|
59
|
-
tme/matching_optimization.py,sha256=wQ8k1VBK74twymogr_1LIOjNlhr_Nyl8CN4XxjEADHQ,45688
|
60
|
-
tme/matching_scores.py,sha256=A8558Yj1lCEbcLYeevoVXMfhO3jILZeO3ztgp8gA9Xo,41023
|
61
|
-
tme/matching_utils.py,sha256=Oa7ytvvaSyck6PSci3XBoakgz8-9tL8Qtv2Sx7P3pVo,36362
|
62
|
-
tme/memory.py,sha256=gRKOsputjOjpVhqgrLn2q8JfSCiXGtRdV8wd9XG_Fho,9687
|
63
|
-
tme/orientations.py,sha256=yQKJaYQWkBqDOIYFmVDP47rjdvqwoAHBCvmpu36qoOo,21023
|
64
|
-
tme/parser.py,sha256=bqgJ9FPecbnvqFF-xZhRZOwPxawtMqs69SEGS3oaxWQ,21565
|
65
|
-
tme/preprocessor.py,sha256=AafqtzBXX0OywZ6B8J0IBtZPMWCGhnJStbqZviRJPBc,40371
|
66
|
-
tme/rotations.py,sha256=CO35CwD7qHxmiUSFBqFU9y-O4tRM8BKp-U7d52y2eLs,10630
|
67
|
-
tme/structure.py,sha256=EktAzR_t0cK5J0iBiWlDDGw1okFoiEQgwACAIRDNdgY,72143
|
68
|
-
tme/types.py,sha256=NAY7C4qxE6yz-DXVtClMvFfoOV-spWGLNfpLATZ1LcU,442
|
69
|
-
tme/analyzer/__init__.py,sha256=DgEulEr9nERtXttTpmEeL8pNLCW-OxGWB4PMMCQ0INs,48
|
70
|
-
tme/analyzer/_utils.py,sha256=ioG90NdGGyjC1bXLu9cdBSPFStOG2n5GlPOeS_0SFGs,6083
|
71
|
-
tme/analyzer/aggregation.py,sha256=NYk9EWr670GmYO0gTJ5AalpCbDh30SEAfoA59m6IMGA,21104
|
72
|
-
tme/analyzer/peaks.py,sha256=dVIJ1zCT7XPJSVK368uFdVcj7DcwRJYKJQbG9VhEDbQ,33028
|
73
|
-
tme/backends/__init__.py,sha256=iGTq1c9CR0ZCAj9uOY6DzqPePYG0ZVvv637FukH-I7I,5257
|
74
|
-
tme/backends/_cupy_utils.py,sha256=tzfoR-WyHViSY1E39mKoO5os-1L8zpChIdbf52QN0t4,24650
|
75
|
-
tme/backends/_jax_utils.py,sha256=Bo47XU338rNdJ-BNLR4XKmbnnlAz8zxeLQomTNhgLmk,5907
|
76
|
-
tme/backends/cupy_backend.py,sha256=4kzqTmcQET1ZySkwK_z5noxmKYTAsxRpIzV4M9E3kjs,10246
|
77
|
-
tme/backends/jax_backend.py,sha256=m3GdCJXgDeBofOwYGz1GwnoxrLyjVh1gh6oJhZEIiwE,11050
|
78
|
-
tme/backends/matching_backend.py,sha256=o0L5P80yN3E7KbjfcsgNjICc6kEaVlACxlc2WdCq0wc,34864
|
79
|
-
tme/backends/mlx_backend.py,sha256=gMAxk7ue2xocSmdLzBj3H-jbVUCKZ5Q13TDpK4kyqV8,7764
|
80
|
-
tme/backends/npfftw_backend.py,sha256=BMHRkT0MRLiVCdfkG6GuBINO8lYQ9lb9vjzOMBYAGHc,19295
|
81
|
-
tme/backends/pytorch_backend.py,sha256=t1sNfLU_gt8XrbPaRhO2MGvp-YKUptpSLge3zxJeZwo,14800
|
82
|
-
tme/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
83
|
-
tme/data/c48n309.npy,sha256=NwH64mOEbm3tStq5c98o81fY1vMOoq4nvXDAh7Z7iZg,296768
|
84
|
-
tme/data/c48n527.npy,sha256=saSUMTa1R0MisPvgFL02a7IHQSwEZ-mJu0v3qJjg5AU,506048
|
85
|
-
tme/data/c48n9.npy,sha256=bDVLV6mWjZHSQfeDc-MOCKKarfc1jaNeVvpoe2xMUy4,8768
|
86
|
-
tme/data/c48u1.npy,sha256=JeXMFzFITs2ezdc3x5lp3jo1cHHHHVADSA1Tpf77kXs,1088
|
87
|
-
tme/data/c48u1153.npy,sha256=ECiEximtYDWtIux3Fwe_EJlyn08gUqP85DN9gjkT9_k,1107008
|
88
|
-
tme/data/c48u1201.npy,sha256=aceC_Jeienz_81X4520nPpZcg5tnRhbW795EqbpWkrg,1153088
|
89
|
-
tme/data/c48u1641.npy,sha256=p4LwW3LzdTjrUUpA7H53RfNWxYfPX0XjeSwZ39Ac78Q,1575488
|
90
|
-
tme/data/c48u181.npy,sha256=mLYXrv1YHLH6DsBp5MkxHkxlxgMnj1mw_KKI0udH-FY,173888
|
91
|
-
tme/data/c48u2219.npy,sha256=p8TQeX8YHu4pdxnwJjEAlQWAPa66W7kpK96iZKZr9JE,2130368
|
92
|
-
tme/data/c48u27.npy,sha256=k03ZNEsoPwBKCy8IeIa5G0WRZqjGZMtX6Ibu7EpJHvU,26048
|
93
|
-
tme/data/c48u2947.npy,sha256=icI97ED6ct66y7FIaJAugmjzrIWk7CINCxtO3wDTnrU,2829248
|
94
|
-
tme/data/c48u3733.npy,sha256=tla-__Pf-hpN6h04vtFIfkkFdCLple11VO06kr1dXkM,3583808
|
95
|
-
tme/data/c48u4749.npy,sha256=tItOA4oV7SiqCCREwz3fyEpZoxM0lCq_jfEo5_-fp2s,4559168
|
96
|
-
tme/data/c48u5879.npy,sha256=bFk89MllIFCX_sLXTYWFquSyN1NuahH4wwnEsPJLxzA,5643968
|
97
|
-
tme/data/c48u7111.npy,sha256=CMy9kI2edH-q9eTIVdgUtXurplYNI7Uqp4dXfkkVdf8,6826688
|
98
|
-
tme/data/c48u815.npy,sha256=bCuJxLtm0Sjg3GGxtyjGzRYZ1G0Gz79XHI-71GvqQnI,782528
|
99
|
-
tme/data/c48u83.npy,sha256=7ODJYnsiuDjGbgd9GFopsyIW2IjrYI0J2X2f-cK868U,79808
|
100
|
-
tme/data/c48u8649.npy,sha256=-IPlpR4zrPQZWhhSPu4zEulFdrCEVgTMFffCB5d-huE,8303168
|
101
|
-
tme/data/c600v.npy,sha256=JqSu3ALoL1A9iguehc0YGUMFPsh2fprHHp76VXeFXIw,2528
|
102
|
-
tme/data/c600vc.npy,sha256=Yht-GFXDSjjGvsjFBvyxxEZAI-ODADPd5gEgFNZQVTA,14528
|
103
|
-
tme/data/metadata.yaml,sha256=fAgX-mEzB0QMHTEtYDG4cSMbJhYxBbDJH3sdvJvL7a8,750
|
104
|
-
tme/data/quat_to_numpy.py,sha256=-gkDZb10fKBxwfYrSLCUWvMB76TzZWELCeKsYProwws,1333
|
105
|
-
tme/data/scattering_factors.pickle,sha256=ZHktBc_AlS4H6uoER8AMmn5zOgjBwzgC92hUyww3Nik,38669
|
106
|
-
tme/external/bindings.cpp,sha256=CIukugVf55LicY2uSCasHWQlrlO9GS2iUuCR3WLvncM,12912
|
107
|
-
tme/filters/__init__.py,sha256=iCPAyxlXtvZdinMKk_nDzk8Ew8K9NkhMFDs1JF5_zEM,243
|
108
|
-
tme/filters/_utils.py,sha256=rrgWXdlF8rbAdhQwXcDn3EPE5euhtr1uJDJeqMFmNmI,10106
|
109
|
-
tme/filters/bandpass.py,sha256=YygCDFG5d3VZkoX5IxZwmjVgrVnQwyh9p3G-aeaanqo,7795
|
110
|
-
tme/filters/compose.py,sha256=czOBaihYcRYKrfNFAAEodurtEYg3SF0PFPMLkCqR8tk,1992
|
111
|
-
tme/filters/ctf.py,sha256=ymOi90sf-bSPfHFpdvMPeEsoDHgOerMjH6q1sRNlNiY,14801
|
112
|
-
tme/filters/reconstruction.py,sha256=oomYOtWGiw7DXs_NVnQxPVv8zK8hwXZTONiwaFQNTE8,5436
|
113
|
-
tme/filters/wedge.py,sha256=t9LKPydjyuhtY9NtkiQug-S5bGt2DDTBAaeNDbH5T9E,17583
|
114
|
-
tme/filters/whitening.py,sha256=Rhr-sxxvAVp60yUieiyL96iJcDasbdgq9q1iTtCxS1w,6324
|
115
|
-
pytme-0.2.9.post1.dist-info/METADATA,sha256=iRWxbDR6p4Lq4q2PbfXzscjDDxGjMe46KItWTvdbTHA,5374
|
116
|
-
pytme-0.2.9.post1.dist-info/WHEEL,sha256=SPbiHAOPLnBtml4sk5MIwvWF6YnGfOfy9C__W6Bpeg4,109
|
117
|
-
pytme-0.2.9.post1.dist-info/entry_points.txt,sha256=ff3LQL3FCWfCYOwFiP9zatm7laUbnwCkuPELkQVyUO4,241
|
118
|
-
pytme-0.2.9.post1.dist-info/top_level.txt,sha256=ovCUR7UXXouH3zYt_fJLoqr_vtjp1wudFgjVAnztQLE,18
|
119
|
-
pytme-0.2.9.post1.dist-info/RECORD,,
|