foscat 3.7.0__py3-none-any.whl → 3.7.2__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.
- foscat/FoCUS.py +4 -1
- foscat/backend.py +62 -10
- foscat/scat_cov.py +1851 -31
- foscat/scat_cov2D.py +65 -25
- {foscat-3.7.0.dist-info → foscat-3.7.2.dist-info}/METADATA +2 -2
- {foscat-3.7.0.dist-info → foscat-3.7.2.dist-info}/RECORD +9 -9
- {foscat-3.7.0.dist-info → foscat-3.7.2.dist-info}/WHEEL +1 -1
- /foscat-3.7.0.dist-info/LICENCE → /foscat-3.7.2.dist-info/LICENSE +0 -0
- {foscat-3.7.0.dist-info → foscat-3.7.2.dist-info}/top_level.txt +0 -0
foscat/FoCUS.py
CHANGED
|
@@ -37,7 +37,7 @@ class FoCUS:
|
|
|
37
37
|
mpi_rank=0,
|
|
38
38
|
):
|
|
39
39
|
|
|
40
|
-
self.__version__ = "3.7.
|
|
40
|
+
self.__version__ = "3.7.2"
|
|
41
41
|
# P00 coeff for normalization for scat_cov
|
|
42
42
|
self.TMPFILE_VERSION = TMPFILE_VERSION
|
|
43
43
|
self.P1_dic = None
|
|
@@ -155,6 +155,9 @@ class FoCUS:
|
|
|
155
155
|
self.Y_CNN = {}
|
|
156
156
|
self.Z_CNN = {}
|
|
157
157
|
|
|
158
|
+
self.filters_set={}
|
|
159
|
+
self.edge_masks={}
|
|
160
|
+
|
|
158
161
|
wwc = np.zeros([KERNELSZ**2, l_NORIENT]).astype(all_type)
|
|
159
162
|
wws = np.zeros([KERNELSZ**2, l_NORIENT]).astype(all_type)
|
|
160
163
|
|
foscat/backend.py
CHANGED
|
@@ -383,7 +383,7 @@ class foscat_backend:
|
|
|
383
383
|
if self.BACKEND == self.TENSORFLOW:
|
|
384
384
|
return self.backend.SparseTensor(indice, w, dense_shape=dense_shape)
|
|
385
385
|
if self.BACKEND == self.TORCH:
|
|
386
|
-
return self.backend.sparse_coo_tensor(indice.T, w, dense_shape)
|
|
386
|
+
return self.backend.sparse_coo_tensor(indice.T, w, dense_shape).to_sparse_csr().to(self.torch_device)
|
|
387
387
|
if self.BACKEND == self.NUMPY:
|
|
388
388
|
return self.scipy.sparse.coo_matrix(
|
|
389
389
|
(w, (indice[:, 0], indice[:, 1])), shape=dense_shape
|
|
@@ -393,7 +393,7 @@ class foscat_backend:
|
|
|
393
393
|
if self.BACKEND == self.TENSORFLOW:
|
|
394
394
|
return self.backend.stack(list, axis=axis)
|
|
395
395
|
if self.BACKEND == self.TORCH:
|
|
396
|
-
return self.backend.stack(list, axis=axis)
|
|
396
|
+
return self.backend.stack(list, axis=axis).to(self.torch_device)
|
|
397
397
|
if self.BACKEND == self.NUMPY:
|
|
398
398
|
return self.backend.stack(list, axis=axis)
|
|
399
399
|
|
|
@@ -552,6 +552,15 @@ class foscat_backend:
|
|
|
552
552
|
return np.concatenate([x.real.flatten(), x.imag.flatten()], 0)
|
|
553
553
|
else:
|
|
554
554
|
return x.flatten()
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
def bk_flatten(self, x):
|
|
558
|
+
if self.BACKEND == self.TENSORFLOW:
|
|
559
|
+
return self.backend.flatten(x)
|
|
560
|
+
elif self.BACKEND == self.TORCH:
|
|
561
|
+
return self.backend.flatten(x)
|
|
562
|
+
else:
|
|
563
|
+
return x.flatten()
|
|
555
564
|
|
|
556
565
|
def bk_flatten(self, x):
|
|
557
566
|
if self.BACKEND == self.TENSORFLOW:
|
|
@@ -870,7 +879,7 @@ class foscat_backend:
|
|
|
870
879
|
if self.BACKEND == self.TENSORFLOW:
|
|
871
880
|
return self.backend.constant(data)
|
|
872
881
|
if self.BACKEND == self.TORCH:
|
|
873
|
-
return self.backend.constant(data)
|
|
882
|
+
return self.backend.constant(data).to(self.torch_device)
|
|
874
883
|
if self.BACKEND == self.NUMPY:
|
|
875
884
|
return data
|
|
876
885
|
|
|
@@ -878,7 +887,7 @@ class foscat_backend:
|
|
|
878
887
|
if self.BACKEND == self.TENSORFLOW:
|
|
879
888
|
return self.backend.tensor(shape=shape)
|
|
880
889
|
if self.BACKEND == self.TORCH:
|
|
881
|
-
return self.backend.tensor(shape=shape)
|
|
890
|
+
return self.backend.tensor(shape=shape).to(self.torch_device)
|
|
882
891
|
if self.BACKEND == self.NUMPY:
|
|
883
892
|
return np.zeros(shape)
|
|
884
893
|
|
|
@@ -886,7 +895,7 @@ class foscat_backend:
|
|
|
886
895
|
if self.BACKEND == self.TENSORFLOW:
|
|
887
896
|
return self.backend.dtypes.complex(real, imag)
|
|
888
897
|
if self.BACKEND == self.TORCH:
|
|
889
|
-
return self.backend.complex(real, imag)
|
|
898
|
+
return self.backend.complex(real, imag).to(self.torch_device)
|
|
890
899
|
if self.BACKEND == self.NUMPY:
|
|
891
900
|
return real + 1j * imag
|
|
892
901
|
|
|
@@ -963,7 +972,7 @@ class foscat_backend:
|
|
|
963
972
|
xi = self.backend.concat(
|
|
964
973
|
[self.bk_imag(data[k]) for k in range(ndata)]
|
|
965
974
|
)
|
|
966
|
-
return self.
|
|
975
|
+
return self.bk_complex(xr, xi)
|
|
967
976
|
else:
|
|
968
977
|
return self.backend.concat(data)
|
|
969
978
|
else:
|
|
@@ -975,7 +984,7 @@ class foscat_backend:
|
|
|
975
984
|
xi = self.backend.concat(
|
|
976
985
|
[self.bk_imag(data[k]) for k in range(ndata)], axis=axis
|
|
977
986
|
)
|
|
978
|
-
return self.
|
|
987
|
+
return self.bk_complex(xr, xi)
|
|
979
988
|
else:
|
|
980
989
|
return self.backend.concat(data, axis=axis)
|
|
981
990
|
else:
|
|
@@ -988,7 +997,7 @@ class foscat_backend:
|
|
|
988
997
|
if self.BACKEND == self.TENSORFLOW:
|
|
989
998
|
return self.backend.zeros(shape, dtype=dtype)
|
|
990
999
|
if self.BACKEND == self.TORCH:
|
|
991
|
-
return self.backend.zeros(shape, dtype=dtype)
|
|
1000
|
+
return self.backend.zeros(shape, dtype=dtype).to(self.torch_device)
|
|
992
1001
|
if self.BACKEND == self.NUMPY:
|
|
993
1002
|
return np.zeros(shape, dtype=dtype)
|
|
994
1003
|
|
|
@@ -1015,6 +1024,22 @@ class foscat_backend:
|
|
|
1015
1024
|
return self.backend.fft(data)
|
|
1016
1025
|
if self.BACKEND == self.NUMPY:
|
|
1017
1026
|
return self.backend.fft.fft(data)
|
|
1027
|
+
|
|
1028
|
+
def bk_fftn(self, data,dim=None):
|
|
1029
|
+
if self.BACKEND == self.TENSORFLOW:
|
|
1030
|
+
return self.backend.signal.fftn(data)
|
|
1031
|
+
if self.BACKEND == self.TORCH:
|
|
1032
|
+
return self.backend.fft.fftn(data,dim=dim)
|
|
1033
|
+
if self.BACKEND == self.NUMPY:
|
|
1034
|
+
return self.backend.fft.fftn(data)
|
|
1035
|
+
|
|
1036
|
+
def bk_ifftn(self, data,dim=None,norm=None):
|
|
1037
|
+
if self.BACKEND == self.TENSORFLOW:
|
|
1038
|
+
return self.backend.signal.ifftn(data)
|
|
1039
|
+
if self.BACKEND == self.TORCH:
|
|
1040
|
+
return self.backend.fft.ifftn(data,dim=dim,norm=norm)
|
|
1041
|
+
if self.BACKEND == self.NUMPY:
|
|
1042
|
+
return self.backend.fft.ifftn(data)
|
|
1018
1043
|
|
|
1019
1044
|
def bk_rfft(self, data):
|
|
1020
1045
|
if self.BACKEND == self.TENSORFLOW:
|
|
@@ -1066,7 +1091,7 @@ class foscat_backend:
|
|
|
1066
1091
|
if x.dtype == self.all_cbk_type:
|
|
1067
1092
|
xr = self.backend.nn.relu(self.bk_real(x))
|
|
1068
1093
|
xi = self.backend.nn.relu(self.bk_imag(x))
|
|
1069
|
-
return self.
|
|
1094
|
+
return self.bk_complex(xr, xi)
|
|
1070
1095
|
else:
|
|
1071
1096
|
return self.backend.nn.relu(x)
|
|
1072
1097
|
if self.BACKEND == self.TORCH:
|
|
@@ -1098,6 +1123,16 @@ class foscat_backend:
|
|
|
1098
1123
|
return np.float64(x)
|
|
1099
1124
|
else:
|
|
1100
1125
|
return x
|
|
1126
|
+
if isinstance(x, np.complex128):
|
|
1127
|
+
if self.all_bk_type == "float32":
|
|
1128
|
+
return np.complex64(x)
|
|
1129
|
+
else:
|
|
1130
|
+
return x
|
|
1131
|
+
if isinstance(x, np.complex64):
|
|
1132
|
+
if self.all_bk_type == "float64":
|
|
1133
|
+
return np.complex128(x)
|
|
1134
|
+
else:
|
|
1135
|
+
return x
|
|
1101
1136
|
|
|
1102
1137
|
if isinstance(x, np.int32) or isinstance(x, np.int64) or isinstance(x, int):
|
|
1103
1138
|
if self.all_bk_type == "float64":
|
|
@@ -1115,7 +1150,7 @@ class foscat_backend:
|
|
|
1115
1150
|
|
|
1116
1151
|
if self.BACKEND == self.TORCH:
|
|
1117
1152
|
if isinstance(x, np.ndarray):
|
|
1118
|
-
x = self.backend.from_numpy(x)
|
|
1153
|
+
x = self.backend.from_numpy(x).to(self.torch_device)
|
|
1119
1154
|
|
|
1120
1155
|
if x.dtype.is_complex:
|
|
1121
1156
|
out_type = self.all_cbk_type
|
|
@@ -1126,6 +1161,23 @@ class foscat_backend:
|
|
|
1126
1161
|
|
|
1127
1162
|
if self.BACKEND == self.NUMPY:
|
|
1128
1163
|
return x.astype(out_type)
|
|
1164
|
+
|
|
1165
|
+
def bk_variable(self,x):
|
|
1166
|
+
if self.BACKEND == self.TENSORFLOW:
|
|
1167
|
+
return self.backend.Variable(x)
|
|
1168
|
+
|
|
1169
|
+
return self.bk_cast(x)
|
|
1170
|
+
|
|
1171
|
+
def bk_assign(self,x,y):
|
|
1172
|
+
if self.BACKEND == self.TENSORFLOW:
|
|
1173
|
+
x.assign(y)
|
|
1174
|
+
x=y
|
|
1175
|
+
|
|
1176
|
+
def bk_constant(self,x):
|
|
1177
|
+
if self.BACKEND == self.TENSORFLOW:
|
|
1178
|
+
return self.backend.constant(x)
|
|
1179
|
+
|
|
1180
|
+
return self.bk_cast(x)
|
|
1129
1181
|
|
|
1130
1182
|
def to_numpy(self,x):
|
|
1131
1183
|
if isinstance(x, np.ndarray):
|