foscat 3.7.0__tar.gz → 3.7.2__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.
Files changed (32) hide show
  1. {foscat-3.7.0/src/foscat.egg-info → foscat-3.7.2}/PKG-INFO +2 -2
  2. {foscat-3.7.0 → foscat-3.7.2}/pyproject.toml +1 -1
  3. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/FoCUS.py +4 -1
  4. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/backend.py +62 -10
  5. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/scat_cov.py +1851 -31
  6. foscat-3.7.2/src/foscat/scat_cov2D.py +118 -0
  7. {foscat-3.7.0 → foscat-3.7.2/src/foscat.egg-info}/PKG-INFO +2 -2
  8. {foscat-3.7.0 → foscat-3.7.2}/src/foscat.egg-info/SOURCES.txt +1 -1
  9. foscat-3.7.0/src/foscat/scat_cov2D.py +0 -78
  10. /foscat-3.7.0/LICENCE → /foscat-3.7.2/LICENSE +0 -0
  11. {foscat-3.7.0 → foscat-3.7.2}/README.md +0 -0
  12. {foscat-3.7.0 → foscat-3.7.2}/setup.cfg +0 -0
  13. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/CNN.py +0 -0
  14. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/CircSpline.py +0 -0
  15. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/GCNN.py +0 -0
  16. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/Softmax.py +0 -0
  17. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/Spline1D.py +0 -0
  18. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/Synthesis.py +0 -0
  19. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/__init__.py +0 -0
  20. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/alm.py +0 -0
  21. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/backend_tens.py +0 -0
  22. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/loss_backend_tens.py +0 -0
  23. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/loss_backend_torch.py +0 -0
  24. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/scat.py +0 -0
  25. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/scat1D.py +0 -0
  26. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/scat2D.py +0 -0
  27. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/scat_cov1D.py +0 -0
  28. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/scat_cov_map.py +0 -0
  29. {foscat-3.7.0 → foscat-3.7.2}/src/foscat/scat_cov_map2D.py +0 -0
  30. {foscat-3.7.0 → foscat-3.7.2}/src/foscat.egg-info/dependency_links.txt +0 -0
  31. {foscat-3.7.0 → foscat-3.7.2}/src/foscat.egg-info/requires.txt +0 -0
  32. {foscat-3.7.0 → foscat-3.7.2}/src/foscat.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: foscat
3
- Version: 3.7.0
3
+ Version: 3.7.2
4
4
  Summary: Generate synthetic Healpix or 2D data using Cross Scattering Transform
5
5
  Author-email: Jean-Marc DELOUIS <jean.marc.delouis@ifremer.fr>
6
6
  Maintainer-email: Theo Foulquier <theo.foulquier@ifremer.fr>
@@ -18,7 +18,7 @@ Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Requires-Python: >=3.9
20
20
  Description-Content-Type: text/markdown
21
- License-File: LICENCE
21
+ License-File: LICENSE
22
22
  Requires-Dist: imageio
23
23
  Requires-Dist: imagecodecs
24
24
  Requires-Dist: matplotlib
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "foscat"
3
- version = "3.7.0"
3
+ version = "3.7.2"
4
4
  description = "Generate synthetic Healpix or 2D data using Cross Scattering Transform"
5
5
  readme = "README.md"
6
6
  license = { text = "BSD-3-Clause" }
@@ -37,7 +37,7 @@ class FoCUS:
37
37
  mpi_rank=0,
38
38
  ):
39
39
 
40
- self.__version__ = "3.7.0"
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
 
@@ -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.backend.complex(xr, xi)
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.backend.complex(xr, xi)
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.backend.complex(xr, xi)
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):