Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
43 0.43 197 9956 0.019787
44 0.44 224 9956 0.022499
45 0.45 184 9956 0.018481
46 0.46 198 9956 0.019888
47 0.47 187 9956 0.018783
48 0.48 200 9956 0.020088
49 0.49 194 9956 0.019486
"""
self = self.pr
kwargs = {}
kwargs["sparse"] = {"self": True, "other": True}
kwargs = pr.pyranges.fill_kwargs(kwargs)
result = pyrange_apply(_relative_distance, self, other, **kwargs) # pylint: disable=E1132
result = pd.Series(np.concatenate(list(result.values())))
not_nan = ~np.isnan(result)
result.loc[not_nan] = np.floor(result[not_nan] * 100) / 100
vc = result.value_counts(dropna=False).to_frame().reset_index()
vc.columns = "reldist count".split()
vc.insert(vc.shape[1], "total", len(result))
vc.insert(vc.shape[1], "fraction", vc["count"] / len(result))
vc = vc.sort_values("reldist", ascending=True)
vc = vc.reset_index(drop=True)
return vc
def nearest(self, other, **kwargs):
from pyranges.methods.nearest import _nearest
kwargs = fill_kwargs(kwargs)
if kwargs.get("how") in "upstream downstream".split():
assert other.stranded, "If doing upstream or downstream nearest, other pyranges must be stranded"
dfs = pyrange_apply(_nearest, self, other, **kwargs)
return PyRanges(dfs)
def count_overlaps(self, other, **kwargs):
kwargs = fill_kwargs(kwargs)
from pyranges.methods.coverage import _number_overlapping
counts = pyrange_apply(_number_overlapping, self, other, **kwargs)
return pr.PyRanges(counts)
def set_intersect(self, other, **kwargs):
kwargs = fill_kwargs(kwargs)
strandedness = kwargs["strandedness"]
strand = True if strandedness else False
self_clusters = self.merge(strand=strand, **kwargs)
other_clusters = other.merge(strand=strand, **kwargs)
dfs = pyrange_apply(_intersection, self_clusters, other_clusters,
**kwargs)
return PyRanges(dfs)
def coverage(self, other, **kwargs):
kwargs = fill_kwargs(kwargs)
counts = self.count_overlaps(other, keep_nonoverlapping=True, **kwargs)
strand = True if kwargs["strandedness"] else False
other = other.merge(count=True, strand=strand)
from pyranges.methods.coverage import _coverage
# print(counts)
counts = pr.PyRanges(pyrange_apply(_coverage, counts, other, **kwargs))
# print("counts" * 100)
# print(counts)
return counts
assert suffixes[0], "Must have nonempty first suffix when using new_pos with intersection or union."
assert suffixes[1], "Must have nonempty second suffix when using new_pos with intersection or union."
# def get_items_dtypes(s):
# columns = s.columns
# dtypes = (s.dfs.values())
how = kwargs.get("how")
if how in ["left", "outer"]:
kwargs["example_header_other"] = other.head(1).df
if how in ["right", "outer"]:
kwargs["example_header_self"] = self.head(1).df
dfs = pyrange_apply(_write_both, self, other, **kwargs)
gr = PyRanges(dfs)
if slack:
gr.Start = gr.Start__slack
gr.End = gr.End__slack
gr = gr.drop(like="(Start|End).*__slack")
new_position = kwargs.get("new_pos")
if new_position:
gr = gr.new_position(new_pos=new_position, suffixes=kwargs["suffixes"])
return gr
def overlap(self, other, **kwargs):
kwargs["sparse"] = {"self": False, "other": True}
kwargs["how"] = "first"
kwargs = fill_kwargs(kwargs)
dfs = pyrange_apply(_overlap, self, other, **kwargs)
# if kwargs.get("return_indexes"):
# return dfs
# else:
return pr.PyRanges(dfs)
def intersect(self, other, **kwargs):
kwargs = fill_kwargs(kwargs)
kwargs["sparse"] = {"self": False, "other": True}
dfs = pyrange_apply(_intersection, self, other, **kwargs)
return PyRanges(dfs)