kasm-pkg 0.1.0__py3-none-any.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.
- kasm/__init__.py +70 -0
- kasm/_logging.py +42 -0
- kasm/api.py +803 -0
- kasm/covar.py +425 -0
- kasm/dataset.py +471 -0
- kasm/enrichment.py +502 -0
- kasm/fitting.py +1241 -0
- kasm/fixed_effects.py +741 -0
- kasm/kernels.py +641 -0
- kasm/ldm.py +305 -0
- kasm/model.py +426 -0
- kasm/random_effects.py +1020 -0
- kasm/simulation.py +220 -0
- kasm/suffstats.py +1734 -0
- kasm_pkg-0.1.0.dist-info/METADATA +98 -0
- kasm_pkg-0.1.0.dist-info/RECORD +18 -0
- kasm_pkg-0.1.0.dist-info/WHEEL +4 -0
- kasm_pkg-0.1.0.dist-info/licenses/LICENSE +21 -0
kasm/__init__.py
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""kasm — kernel allelic series model."""
|
|
2
|
+
|
|
3
|
+
from kasm import covar
|
|
4
|
+
from kasm._logging import configure_logging, logger
|
|
5
|
+
from kasm.api import (
|
|
6
|
+
RandomFit,
|
|
7
|
+
combine_mixed_effects,
|
|
8
|
+
combine_random_hsq,
|
|
9
|
+
fit_fixed_effects,
|
|
10
|
+
fit_random_effects,
|
|
11
|
+
)
|
|
12
|
+
from kasm.covar import (
|
|
13
|
+
CovarResult,
|
|
14
|
+
compute_random_covar,
|
|
15
|
+
)
|
|
16
|
+
from kasm.dataset import (
|
|
17
|
+
Dataset,
|
|
18
|
+
parse_variant_ids,
|
|
19
|
+
sort_variant_df,
|
|
20
|
+
)
|
|
21
|
+
from kasm.enrichment import EnrichResult, pool_enrichment
|
|
22
|
+
from kasm.fixed_effects import FixedFit
|
|
23
|
+
from kasm.fitting import jackknife_se
|
|
24
|
+
from kasm.kernels import KernelId, KernelLayout, KernelOptions
|
|
25
|
+
from kasm.ldm import LDM, LDMLoader
|
|
26
|
+
from kasm.model import Model
|
|
27
|
+
from kasm.simulation import (
|
|
28
|
+
simulate_burden_effects,
|
|
29
|
+
simulate_sumstats,
|
|
30
|
+
)
|
|
31
|
+
from kasm.suffstats import (
|
|
32
|
+
ExtraEnrichCols,
|
|
33
|
+
ExtSuffStats,
|
|
34
|
+
JKSuffStats,
|
|
35
|
+
SuffStats,
|
|
36
|
+
compute_jk_suffstats,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
__all__ = [
|
|
40
|
+
"LDM",
|
|
41
|
+
"CovarResult",
|
|
42
|
+
"Dataset",
|
|
43
|
+
"EnrichResult",
|
|
44
|
+
"ExtSuffStats",
|
|
45
|
+
"ExtraEnrichCols",
|
|
46
|
+
"FixedFit",
|
|
47
|
+
"JKSuffStats",
|
|
48
|
+
"KernelId",
|
|
49
|
+
"KernelLayout",
|
|
50
|
+
"KernelOptions",
|
|
51
|
+
"LDMLoader",
|
|
52
|
+
"Model",
|
|
53
|
+
"RandomFit",
|
|
54
|
+
"SuffStats",
|
|
55
|
+
"combine_mixed_effects",
|
|
56
|
+
"combine_random_hsq",
|
|
57
|
+
"covar",
|
|
58
|
+
"configure_logging",
|
|
59
|
+
"compute_jk_suffstats",
|
|
60
|
+
"compute_random_covar",
|
|
61
|
+
"fit_fixed_effects",
|
|
62
|
+
"fit_random_effects",
|
|
63
|
+
"jackknife_se",
|
|
64
|
+
"logger",
|
|
65
|
+
"parse_variant_ids",
|
|
66
|
+
"pool_enrichment",
|
|
67
|
+
"simulate_burden_effects",
|
|
68
|
+
"simulate_sumstats",
|
|
69
|
+
"sort_variant_df",
|
|
70
|
+
]
|
kasm/_logging.py
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""Logging configuration for kasm workflows."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
logger = logging.getLogger("kasm")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def configure_logging(
|
|
12
|
+
level: int | str = "INFO", *, filename: str | Path | None = None
|
|
13
|
+
) -> None:
|
|
14
|
+
"""Configure console logging, and optionally file logging, for ``kasm.*``.
|
|
15
|
+
|
|
16
|
+
Only handlers previously installed by this function are replaced. This
|
|
17
|
+
leaves application-owned handlers and the root logger untouched.
|
|
18
|
+
"""
|
|
19
|
+
resolved_level = (
|
|
20
|
+
logging._nameToLevel.get(level.upper()) if isinstance(level, str) else level
|
|
21
|
+
)
|
|
22
|
+
if not isinstance(resolved_level, int):
|
|
23
|
+
raise ValueError(f"unknown logging level {level!r}")
|
|
24
|
+
formatter = logging.Formatter(
|
|
25
|
+
"%(asctime)s %(module)s %(levelname)s %(message)s",
|
|
26
|
+
datefmt="%Y-%m-%d %H:%M:%S",
|
|
27
|
+
)
|
|
28
|
+
for handler in tuple(logger.handlers):
|
|
29
|
+
if getattr(handler, "_kasm_managed", False):
|
|
30
|
+
logger.removeHandler(handler)
|
|
31
|
+
handler.close()
|
|
32
|
+
handlers: list[logging.Handler] = [logging.StreamHandler()]
|
|
33
|
+
if filename is not None:
|
|
34
|
+
path = Path(filename)
|
|
35
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
36
|
+
handlers.append(logging.FileHandler(path, mode="a"))
|
|
37
|
+
for handler in handlers:
|
|
38
|
+
handler.setFormatter(formatter)
|
|
39
|
+
handler._kasm_managed = True
|
|
40
|
+
logger.addHandler(handler)
|
|
41
|
+
logger.setLevel(resolved_level)
|
|
42
|
+
logger.propagate = False
|