InfluenceDiffusion 0.0.6__tar.gz → 0.0.8__tar.gz
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.
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion/Graph.py +2 -0
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion/Trace.py +5 -2
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion/__init__.py +1 -1
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion/estimation_models/BaseWeightEstimator.py +2 -0
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion/estimation_models/EMEstimation.py +3 -1
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion/estimation_models/OptimEstimation.py +4 -1
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion/influence_models.py +3 -2
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion/utils.py +14 -0
- InfluenceDiffusion-0.0.8/InfluenceDiffusion/weight_samplers.py +30 -0
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion.egg-info/PKG-INFO +1 -1
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion.egg-info/SOURCES.txt +1 -0
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/PKG-INFO +1 -1
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/setup.py +1 -1
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion/estimation_models/__init__.py +0 -0
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion.egg-info/dependency_links.txt +0 -0
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion.egg-info/requires.txt +0 -0
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion.egg-info/top_level.txt +0 -0
- {InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/setup.cfg +0 -0
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
-
from utils import multiple_union
|
|
3
|
-
from Graph import Graph
|
|
4
2
|
from typing import Union, Set, List, Tuple, Dict
|
|
5
3
|
import numpy as np
|
|
6
4
|
from itertools import chain
|
|
7
5
|
|
|
6
|
+
from .Graph import Graph
|
|
7
|
+
from .utils import multiple_union
|
|
8
|
+
|
|
9
|
+
__all__ = ["PseudoTraces", "Traces", "Trace"]
|
|
10
|
+
|
|
8
11
|
|
|
9
12
|
class PseudoTraces(dict):
|
|
10
13
|
"""A collection of pseudo traces.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
from .Graph import Graph
|
|
2
2
|
from .influence_models import InfluenceModel, ICM, LTM, GLTM
|
|
3
3
|
from .Trace import Trace, Traces, PseudoTraces
|
|
4
|
-
from .utils import invert_non_zeros, multiple_union
|
|
4
|
+
from .utils import invert_non_zeros, multiple_union, random_vector_inside_simplex, random_vector_on_simplex
|
|
@@ -11,6 +11,8 @@ from ..Trace import Traces, PseudoTraces
|
|
|
11
11
|
from ..Graph import Graph
|
|
12
12
|
from ..utils import multiple_union
|
|
13
13
|
|
|
14
|
+
__all__ = ["BaseWeightEstimator", "BaseGLTWEightEstimator", "BaseICWEightEstimator"]
|
|
15
|
+
|
|
14
16
|
|
|
15
17
|
class BaseWeightEstimator:
|
|
16
18
|
"""Base class for weight estimation in influence models.
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import numpy as np
|
|
2
2
|
from typing import Union
|
|
3
3
|
|
|
4
|
-
from BaseWeightEstimator import BaseWeightEstimator, BaseGLTWEightEstimator, BaseICWEightEstimator
|
|
4
|
+
from .BaseWeightEstimator import BaseWeightEstimator, BaseGLTWEightEstimator, BaseICWEightEstimator
|
|
5
5
|
from ..Trace import Traces, PseudoTraces
|
|
6
6
|
from ..utils import invert_non_zeros
|
|
7
7
|
from ..Graph import Graph
|
|
8
8
|
|
|
9
|
+
__all__ = ["BaseWeightEstimatorEM", "ICWeightEstimatorEM", "LTWeightEstimatorEM"]
|
|
10
|
+
|
|
9
11
|
|
|
10
12
|
class BaseWeightEstimatorEM(BaseWeightEstimator):
|
|
11
13
|
"""Base class for EM weight estimators.
|
|
@@ -2,9 +2,12 @@ import numpy as np
|
|
|
2
2
|
from typing import List, Union, Dict, Tuple
|
|
3
3
|
from scipy.optimize import LinearConstraint, minimize
|
|
4
4
|
from scipy.stats._distn_infrastructure import rv_frozen
|
|
5
|
+
|
|
5
6
|
from ..Graph import Graph
|
|
6
|
-
from BaseWeightEstimator import BaseGLTWEightEstimator
|
|
7
7
|
from ..Trace import Traces, PseudoTraces
|
|
8
|
+
from .BaseWeightEstimator import BaseGLTWEightEstimator
|
|
9
|
+
|
|
10
|
+
__all__ = ["GLTGridSearchEstimator", "GLTWeightEstimator"]
|
|
8
11
|
|
|
9
12
|
|
|
10
13
|
class GLTWeightEstimator(BaseGLTWEightEstimator):
|
{InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion/influence_models.py
RENAMED
|
@@ -4,8 +4,9 @@ from scipy import stats
|
|
|
4
4
|
from scipy.stats._distn_infrastructure import rv_frozen
|
|
5
5
|
from typing import Dict, Set, Union, List
|
|
6
6
|
from joblib import Parallel, delayed
|
|
7
|
-
|
|
8
|
-
from
|
|
7
|
+
|
|
8
|
+
from .Graph import Graph
|
|
9
|
+
from .Trace import Trace, Traces
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
class InfluenceModel:
|
|
@@ -14,3 +14,17 @@ def invert_non_zeros(array):
|
|
|
14
14
|
non_zero_mask = array != 0
|
|
15
15
|
out[non_zero_mask] = 1. / out[non_zero_mask]
|
|
16
16
|
return out
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def random_vector_inside_simplex(dim, ub=1):
|
|
20
|
+
U = np.random.uniform(low=0, high=ub, size=dim)
|
|
21
|
+
U_sorted = np.sort(U)
|
|
22
|
+
U_sorted = np.concatenate(([0], U_sorted))
|
|
23
|
+
x = np.diff(U_sorted)
|
|
24
|
+
return x
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def random_vector_on_simplex(dim, ub=1):
|
|
28
|
+
X = random_vector_inside_simplex(dim=dim, ub=1)
|
|
29
|
+
return X / np.sum(X) * ub
|
|
30
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
|
|
3
|
+
from .Graph import Graph
|
|
4
|
+
from .utils import random_vector_inside_simplex, random_vector_on_simplex
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def make_weighted_cascade_weights(g: Graph):
|
|
8
|
+
vertex_2_indegree = g.get_vertex_2_indegree_dict(weighted=False)
|
|
9
|
+
weights = 1. / np.array([vertex_2_indegree[sink] for sink in g.edge_array[:, 1]])
|
|
10
|
+
return weights
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def make_random_weights_with_indeg_constraint(g: Graph, indeg_ub=1, random_state=None):
|
|
14
|
+
if random_state:
|
|
15
|
+
np.random.seed(random_state)
|
|
16
|
+
weights = np.zeros(g.count_edges())
|
|
17
|
+
for v in g.get_sinks():
|
|
18
|
+
parent_mask = g.get_parents_mask(v)
|
|
19
|
+
weights[parent_mask] = random_vector_inside_simplex(parent_mask.sum(), ub=indeg_ub)
|
|
20
|
+
return weights
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def make_random_weights_with_fixed_indeg(g: Graph, indeg_ub=1, random_state=None):
|
|
24
|
+
if random_state:
|
|
25
|
+
np.random.seed(random_state)
|
|
26
|
+
weights = np.zeros(g.count_edges())
|
|
27
|
+
for v in g.get_sinks():
|
|
28
|
+
parent_mask = g.get_parents_mask(v)
|
|
29
|
+
weights[parent_mask] = random_vector_on_simplex(parent_mask.sum(), ub=indeg_ub)
|
|
30
|
+
return weights
|
{InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion.egg-info/SOURCES.txt
RENAMED
|
@@ -4,6 +4,7 @@ InfluenceDiffusion/Trace.py
|
|
|
4
4
|
InfluenceDiffusion/__init__.py
|
|
5
5
|
InfluenceDiffusion/influence_models.py
|
|
6
6
|
InfluenceDiffusion/utils.py
|
|
7
|
+
InfluenceDiffusion/weight_samplers.py
|
|
7
8
|
InfluenceDiffusion.egg-info/PKG-INFO
|
|
8
9
|
InfluenceDiffusion.egg-info/SOURCES.txt
|
|
9
10
|
InfluenceDiffusion.egg-info/dependency_links.txt
|
|
File without changes
|
|
File without changes
|
{InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion.egg-info/requires.txt
RENAMED
|
File without changes
|
{InfluenceDiffusion-0.0.6 → InfluenceDiffusion-0.0.8}/InfluenceDiffusion.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|