annotate tools/myTools/bin/sfa/base.py @ 1:7e5c71b2e71f draft default tip

Uploaded
author laurenmarazzi
date Wed, 22 Dec 2021 16:00:34 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
1 import os
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
2 import sys
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
3 if sys.version_info <= (2, 8):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
4 from builtins import super
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
5
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
6 # from abc import ABC, abstractmethod
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
7 import abc
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
8 import copy
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
9
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
10 import pandas as pd
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
11 import six
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
12 import sfa.utils
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
13
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
14 __all__ = ['Algorithm', 'Data', 'Result']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
15
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
16
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
17 @six.add_metaclass(abc.ABCMeta)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
18 class ContainerItem():
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
19 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
20 The base class that defines the item object of
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
21 ``sfa.containers.Container``.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
22
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
23 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
24 def __init__(self, abbr=None, name=None):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
25 self._abbr = abbr
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
26 self._name = name
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
27
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
28 def __str__(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
29 return self._abbr
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
30
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
31 def __repr__(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
32 class_name = self.__class__.__name__
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
33 return "%s object" % (class_name)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
34
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
35 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
36 def abbr(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
37 """Abbreviation or symbol representing this item.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
38 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
39 return self._abbr
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
40
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
41 @abbr.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
42 def abbr(self, val):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
43 self._abbr =val
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
44
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
45 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
46 def name(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
47 """Full name or description of this item.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
48 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
49 return self._name
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
50
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
51 @name.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
52 def name(self, val):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
53 self._name = val
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
54
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
55
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
56 class ParameterSet(sfa.utils.FrozenClass):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
57 """The base class of ParameterSet objects.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
58 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
59
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
60 def __init__(self, abbr):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
61 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
62 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
63 super().__init__(abbr)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
64
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
65
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
66 class Algorithm(ContainerItem):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
67 """The base class of Algorithm classes.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
68
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
69 Attributes
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
70 ----------
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
71 abbr : str
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
72 name : str
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
73 data : sfa.base.Data
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
74 params : sfa.base.ParameterSet
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
75 result : sfa.base.Result
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
76
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
77 Examples
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
78 --------
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
79 >>> class AnAlgorithm(sfa.base.Algorithm):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
80 # Definition of algorithm ...
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
81 ...
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
82
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
83 >>> alg = AnAlgorithm()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
84 >>> alg.params = params_obj # Parameters of the algorithm
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
85 >>> alg.data = data_obj # Data to be analyzed by the algorithm
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
86 >>> alg.initialize()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
87 >>> res = alg.compute()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
88
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
89 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
90 def __init__(self, abbr):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
91 super().__init__(abbr)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
92 self._data = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
93 self._params = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
94 self._result = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
95
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
96 def copy(self, is_deep=False):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
97 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
98
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
99 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
100 if is_deep:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
101 copy.deepcopy(self)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
102 else:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
103 return copy.copy(self)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
104
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
105 # Read-only properties
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
106 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
107 def result(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
108 """The object of ``sfa.base.Result``.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
109 The result of computing the batch.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
110 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
111 return self._result
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
112
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
113 # Read & write properties
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
114 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
115 def params(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
116 """The object of ``sfa.base.ParameterSet``.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
117 Parameters of the algorithm can accessed
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
118 through this member.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
119 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
120 return self._params
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
121
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
122 @params.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
123 def params(self, obj):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
124 self._params = obj
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
125
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
126 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
127 def data(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
128 """The object of ``sfa.base.Data``.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
129 Data to be processed based on the algorithm
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
130 can accessed through this member.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
131 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
132 return self._data
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
133
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
134 @data.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
135 def data(self, obj):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
136 self._data = obj
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
137
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
138 def initialize(self, network=True, ba=True):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
139 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
140 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
141 if network:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
142 self.initialize_network()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
143
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
144 if ba:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
145 self.initialize_basal_activity()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
146
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
147 def initialize_network(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
148 """Initialize the data structures related to network.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
149 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
150 pass
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
151
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
152 def initialize_basal_activity(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
153 """Initialize the basal activity, :math:`b`.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
154 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
155 pass
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
156
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
157 @abc.abstractmethod
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
158 def compute(self, b,pi):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
159 r"""Process the assigned data
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
160 with the given basal activity, :math:`b`.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
161
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
162 Parameters
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
163 ----------
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
164 b : numpy.ndarray
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
165 1D array of basal activity.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
166
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
167 pi: list
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
168 list of fixed node perturbations
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
169 Returns
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
170 -------
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
171 x : numpy.ndarray
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
172 1D-array object of activity at steady-state.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
173 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
174 raise NotImplementedError("compute() should be implemented")
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
175
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
176 @abc.abstractmethod
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
177 def compute_batch(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
178 """Process the assigned data that contains a batch data.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
179 The result is stored in ``result`` member.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
180 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
181 raise NotImplementedError("compute_batch() should be implemented")
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
182
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
183 # end of class Algorithm
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
184
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
185
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
186 class Data(ContainerItem):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
187 def __init__(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
188 super().__init__()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
189 self._A = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
190 self._n2i = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
191 self._i2n = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
192 self._dg = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
193 self._inputs= None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
194 self._df_conds = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
195 self._df_exp = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
196 self._df_ptb = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
197 self._names_ptb = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
198 self._iadj_to_idf = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
199 self._has_link_perturb = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
200
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
201 def initialize(self,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
202 fpath,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
203 fname_network="network.sif",
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
204 fname_ptb="ptb.tsv",
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
205 fname_conds="conds.tsv",
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
206 fname_exp="exp.tsv",
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
207 inputs={}):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
208
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
209 dpath = os.path.dirname(fpath)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
210 fpath_network = os.path.join(dpath, fname_network)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
211 fpath_ptb = os.path.join(dpath, fname_ptb)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
212
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
213 A, n2i, dg = sfa.read_sif(fpath_network, as_nx=True)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
214 self._A = A
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
215 self._n2i = n2i
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
216 self._dg = dg
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
217 self._df_conds = pd.read_table(os.path.join(dpath, fname_conds),
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
218 header=0, index_col=0)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
219 self._df_exp = pd.read_table(os.path.join(dpath, fname_exp),
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
220 header=0, index_col=0)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
221
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
222 self._inputs = inputs
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
223 self._df_ptb = pd.read_table(fpath_ptb, index_col=0)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
224 if any(self._df_ptb.Type == 'link'):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
225 self._has_link_perturb = True
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
226 else:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
227 self._has_link_perturb = False
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
228
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
229 self._names_ptb = []
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
230 for i, row in enumerate(self._df_conds.iterrows()):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
231 row = row[1]
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
232 list_name = [] # Target names
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
233 for target in self._df_conds.columns[row.nonzero()]:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
234 list_name.append(target)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
235 # end of for
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
236 self._names_ptb.append(list_name)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
237 # end of for
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
238
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
239 # For mapping from the indices of adj. matrix to those of DataFrame
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
240 # (arrange the indices of adj. matrix according to df_exp.columns)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
241 self._iadj_to_idf = [n2i[x] for x in self._df_exp.columns]
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
242
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
243 self._i2n = {idx: name for name, idx in n2i.items()}
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
244
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
245 # end of def
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
246
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
247 # Read-only members
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
248 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
249 def A(self): # Adjacency matrix (numpy.ndarray)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
250 return self._A
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
251
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
252 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
253 def n2i(self): # Name to index mapping (hashable)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
254 return self._n2i
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
255
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
256 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
257 def i2n(self): # Index to name mapping (hashable)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
258 return self._i2n
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
259
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
260 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
261 def dg(self): # Directed graph object of NetworkX
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
262 return self._dg
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
263
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
264 @property # List of perturbation targets
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
265 def names_ptb(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
266 return self._names_ptb
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
267
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
268 @property # List of values for perturbation
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
269 def vals_ptb(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
270 return self._vals_ptb
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
271
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
272 # @property # List of perturbation types
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
273 # def types_ptb(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
274 # return self._types_ptb
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
275
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
276 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
277 def iadj_to_idf(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
278 return self._iadj_to_idf
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
279
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
280 @iadj_to_idf.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
281 def iadj_to_idf(self, arr):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
282 self._iadj_to_idf = arr
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
283
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
284 # Replaceable (assignable) members
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
285 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
286 def inputs(self): # Input conditions
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
287 return self._inputs
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
288
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
289 @inputs.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
290 def inputs(self, obj_dict):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
291 self._inputs = obj_dict
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
292
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
293 @property # DataFrame of experimental conditions
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
294 def df_conds(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
295 return self._df_conds
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
296
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
297 @df_conds.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
298 def df_conds(self, df):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
299 self._df_conds = df
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
300
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
301 @property # DataFrame of experimental results
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
302 def df_exp(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
303 return self._df_exp
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
304
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
305 @df_exp.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
306 def df_exp(self, df):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
307 self._df_exp = df
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
308
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
309 @property # DataFrame of perturbation information
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
310 def df_ptb(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
311 return self._df_ptb
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
312
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
313 @df_ptb.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
314 def df_ptb(self, df):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
315 self._df_ptb = df
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
316
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
317 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
318 def has_link_perturb(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
319 return self._has_link_perturb
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
320
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
321 @has_link_perturb.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
322 def has_link_perturb(self, val):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
323 if not isinstance(val, bool):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
324 raise TypeError("has_link_perturb should be boolean.")
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
325 self._has_link_perturb = val
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
326
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
327 # end of class Data
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
328
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
329
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
330 class Result(sfa.utils.FrozenClass):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
331
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
332 def __init__(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
333 self._df_sim = None
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
334 self._freeze()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
335
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
336 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
337 def df_sim(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
338 return self._df_sim
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
339
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
340 @df_sim.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
341 def df_sim(self, val):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
342 self._df_sim = val
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
343
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
344 # end of def class Result