#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Convert spatial distances between nodes to edge adjacencies
"""
import numpy as np
[docs]class Gaussian:
[docs] def __call__(self, d, length_scale):
return np.exp(-0.5 * d**2 / length_scale**2)
[docs] def cutoff(self, length_scale):
return np.inf
[docs]class Tent:
def __init__(self, ord):
assert ord >= 1
self.ord = ord
[docs] def __call__(self, d, length_scale):
s = 1 - d / self.cutoff(length_scale)
return s ** self.ord if s >= 0 else 0
[docs] def cutoff(self, length_scale):
return length_scale * 3
[docs]class CompactBell:
def __init__(self, a, b):
assert a > b and b >= 2
self.a = a
self.b = b
[docs] def __call__(self, d, length_scale):
s = 1 - d / self.cutoff(length_scale)
if s >= 0:
return (
-self.b * s**self.a + self.a * s**self.b
) / (self.a - self.b)
else:
return 0
[docs] def cutoff(self, length_scale):
return length_scale * 3