foscat 3.0.32__tar.gz → 3.0.34__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 (30) hide show
  1. {foscat-3.0.32 → foscat-3.0.34}/PKG-INFO +7 -1
  2. {foscat-3.0.32 → foscat-3.0.34}/setup.py +1 -1
  3. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/FoCUS.py +72 -34
  4. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/GCNN.py +15 -8
  5. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/backend.py +8 -0
  6. {foscat-3.0.32 → foscat-3.0.34}/src/foscat.egg-info/PKG-INFO +7 -1
  7. {foscat-3.0.32 → foscat-3.0.34}/README.md +0 -0
  8. {foscat-3.0.32 → foscat-3.0.34}/setup.cfg +0 -0
  9. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/CNN.py +0 -0
  10. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/CircSpline.py +0 -0
  11. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/GetGPUinfo.py +0 -0
  12. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/Softmax.py +0 -0
  13. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/Spline1D.py +0 -0
  14. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/Synthesis.py +0 -0
  15. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/__init__.py +0 -0
  16. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/backend_tens.py +0 -0
  17. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/loss_backend_tens.py +0 -0
  18. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/loss_backend_torch.py +0 -0
  19. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/scat.py +0 -0
  20. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/scat1D.py +0 -0
  21. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/scat2D.py +0 -0
  22. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/scat_cov.py +0 -0
  23. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/scat_cov1D.py +0 -0
  24. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/scat_cov2D.py +0 -0
  25. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/scat_cov_map.py +0 -0
  26. {foscat-3.0.32 → foscat-3.0.34}/src/foscat/scat_cov_map2D.py +0 -0
  27. {foscat-3.0.32 → foscat-3.0.34}/src/foscat.egg-info/SOURCES.txt +0 -0
  28. {foscat-3.0.32 → foscat-3.0.34}/src/foscat.egg-info/dependency_links.txt +0 -0
  29. {foscat-3.0.32 → foscat-3.0.34}/src/foscat.egg-info/requires.txt +0 -0
  30. {foscat-3.0.32 → foscat-3.0.34}/src/foscat.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foscat
3
- Version: 3.0.32
3
+ Version: 3.0.34
4
4
  Summary: Generate synthetic Healpix or 2D data using Cross Scattering Transform
5
5
  Home-page: https://github.com/jmdelouis/FOSCAT
6
6
  Author: Jean-Marc DELOUIS
@@ -9,6 +9,12 @@ Maintainer: Theo Foulquier
9
9
  Maintainer-email: theo.foulquier@ifremer.fr
10
10
  License: MIT
11
11
  Keywords: Scattering transform,Component separation,denoising
12
+ Requires-Dist: imageio
13
+ Requires-Dist: imagecodecs
14
+ Requires-Dist: matplotlib
15
+ Requires-Dist: numpy
16
+ Requires-Dist: tensorflow
17
+ Requires-Dist: healpy
12
18
 
13
19
  Utilize the Cross Scattering Transform (described in https://arxiv.org/abs/2207.12527) to synthesize Healpix or 2D data that is suitable for component separation purposes, such as denoising.
14
20
  A demo package for this process can be found at https://github.com/jmdelouis/FOSCAT_DEMO.
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
3
3
 
4
4
  setup(
5
5
  name='foscat',
6
- version='3.0.32',
6
+ version='3.0.34',
7
7
  description='Generate synthetic Healpix or 2D data using Cross Scattering Transform' ,
8
8
  long_description='Utilize the Cross Scattering Transform (described in https://arxiv.org/abs/2207.12527) to synthesize Healpix or 2D data that is suitable for component separation purposes, such as denoising. \n A demo package for this process can be found at https://github.com/jmdelouis/FOSCAT_DEMO. \n Complete doc can be found at https://foscat-documentation.readthedocs.io/en/latest/index.html. \n\n List of developers : J.-M. Delouis, T. Foulquier, L. Mousset, T. Odaka, F. Paul, E. Allys ' ,
9
9
  license='MIT',
@@ -32,7 +32,7 @@ class FoCUS:
32
32
  mpi_size=1,
33
33
  mpi_rank=0):
34
34
 
35
- self.__version__ = '3.0.32'
35
+ self.__version__ = '3.0.34'
36
36
  # P00 coeff for normalization for scat_cov
37
37
  self.TMPFILE_VERSION=TMPFILE_VERSION
38
38
  self.P1_dic = None
@@ -328,33 +328,44 @@ class FoCUS:
328
328
  x,y,z=hp.pix2vec(nside,np.arange(12*nside*nside),nest=True)
329
329
 
330
330
  idx=np.argsort((x-1.0)**2+y**2+z**2)[0:kernel]
331
+ x0,y0,z0=hp.pix2vec(nside,idx[0],nest=True)
332
+ t0,p0=hp.pix2ang(nside,idx[0],nest=True)
333
+
334
+ idx=np.argsort((x-x0)**2+(y-y0)**2+(z-z0)**2)[0:kernel]
331
335
  im=np.ones([12*nside**2])*-1
332
336
  im[idx]=np.arange(len(idx))
337
+
333
338
  xc,yc,zc=hp.pix2vec(nside,idx,nest=True)
339
+
340
+ xc-=x0
341
+ yc-=y0
342
+ zc-=z0
334
343
 
335
344
  vec=np.concatenate([np.expand_dims(x,-1),
336
345
  np.expand_dims(y,-1),
337
346
  np.expand_dims(z,-1)],1)
338
347
 
339
- tc,pc=hp.pix2ang(nside,idx,nest=True)
340
-
341
348
  indices=np.zeros([12*nside**2*250,2],dtype='int')
342
349
  weights=np.zeros([12*nside**2*250])
343
350
  nn=0
344
- for k in range(0,12*nside*nside):
351
+ for k in range(12*nside*nside):
345
352
  if k%(nside*nside)==nside*nside-1:
346
353
  print('Nside=%d KenelSZ=%d %.2f%%'%(nside,kernel,k/(12*nside**2)*100))
347
- idx2=hp.query_disc(nside, vec[k], np.pi/nside, inclusive=True,nest=True)
354
+ if nside<4:
355
+ idx2=np.arange(12*nside**2)
356
+ else:
357
+ idx2=hp.query_disc(nside, vec[k], np.pi/nside, inclusive=True,nest=True)
348
358
  t2,p2=hp.pix2ang(nside,idx2,nest=True)
349
359
  if rotation is None:
350
- rot=[po[k]/np.pi*180.0,90+(-to[k])/np.pi*180.0]
360
+ rot=[po[k]/np.pi*180.0,(t0-to[k])/np.pi*180.0]
351
361
  else:
352
- rot=[po[k]/np.pi*180.0,90+(-to[k])/np.pi*180.0,rotation[k]]
362
+ rot=[po[k]/np.pi*180.0,(t0-to[k])/np.pi*180.0,rotation[k]]
363
+
353
364
  r=hp.Rotator(rot=rot)
354
365
  t2,p2=r(t2,p2)
355
- idx3=hp.ang2pix(nside,t2,p2,nest=True)
366
+
356
367
  ii,ww=hp.get_interp_weights(nside,t2,p2,nest=True)
357
-
368
+
358
369
  ii=im[ii]
359
370
 
360
371
  for l in range(4):
@@ -410,18 +421,18 @@ class FoCUS:
410
421
  def init_CNN_index(self,nside,transpose=False):
411
422
  l_kernel=int(self.KERNELSZ*self.KERNELSZ)
412
423
  try:
413
- indices=np.load('%s/FOSCAT_%s_I%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
414
- weights=np.load('%s/FOSCAT_%s_W%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
415
- xc=np.load('%s/FOSCAT_%s_X%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
416
- yc=np.load('%s/FOSCAT_%s_Y%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
417
- zc=np.load('%s/FOSCAT_%s_Z%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
424
+ indices=np.load('%s/FOSCAT_%s_I%d_%d_%d_CNNV3.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
425
+ weights=np.load('%s/FOSCAT_%s_W%d_%d_%d_CNNV3.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
426
+ xc=np.load('%s/FOSCAT_%s_X%d_%d_%d_CNNV3.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
427
+ yc=np.load('%s/FOSCAT_%s_Y%d_%d_%d_CNNV3.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
428
+ zc=np.load('%s/FOSCAT_%s_Z%d_%d_%d_CNNV3.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
418
429
  except:
419
430
  indices,weights,xc,yc,zc=self.calc_indices_convol(nside,l_kernel)
420
- np.save('%s/FOSCAT_%s_I%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),indices)
421
- np.save('%s/FOSCAT_%s_W%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),weights)
422
- np.save('%s/FOSCAT_%s_X%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),xc)
423
- np.save('%s/FOSCAT_%s_Y%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),yc)
424
- np.save('%s/FOSCAT_%s_Z%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),zc)
431
+ np.save('%s/FOSCAT_%s_I%d_%d_%d_CNNV3.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),indices)
432
+ np.save('%s/FOSCAT_%s_W%d_%d_%d_CNNV3.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),weights)
433
+ np.save('%s/FOSCAT_%s_X%d_%d_%d_CNNV3.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),xc)
434
+ np.save('%s/FOSCAT_%s_Y%d_%d_%d_CNNV3.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),yc)
435
+ np.save('%s/FOSCAT_%s_Z%d_%d_%d_CNNV3.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),zc)
425
436
  if not self.silent:
426
437
  print('Write %s/FOSCAT_%s_W%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
427
438
 
@@ -433,33 +444,45 @@ class FoCUS:
433
444
  12*nside*nside])
434
445
 
435
446
  # ---------------------------------------------−---------
436
- def healpix_layer_coord(self,im):
437
- nside=int(np.sqrt(im.shape[0]//12))
447
+ def healpix_layer_coord(self,im,axis=0):
448
+ nside=int(np.sqrt(im.shape[axis]//12))
438
449
  l_kernel=self.KERNELSZ*self.KERNELSZ
439
450
  if self.ww_CNN[nside] is None:
440
451
  self.init_CNN_index(nside)
441
452
  return self.X_CNN[nside],self.Y_CNN[nside],self.Z_CNN[nside]
442
453
 
443
454
  # ---------------------------------------------−---------
444
- def healpix_layer_transpose(self,im,ww,indices=None,weights=None):
445
- nside=int(np.sqrt(im.shape[0]//12))
455
+ def healpix_layer_transpose(self,im,ww,indices=None,weights=None,axis=0):
456
+ nside=int(np.sqrt(im.shape[axis]//12))
446
457
  l_kernel=self.KERNELSZ*self.KERNELSZ
447
458
 
448
- if im.shape[1]!=ww.shape[1]:
459
+ if im.shape[1+axis]!=ww.shape[1]:
449
460
  if not self.silent:
450
461
  print('Weights channels should be equal to the input image channels')
451
462
  return -1
452
- tmp=self.healpix_layer(im,ww,indices=indices,weights=weights)
463
+ if axis==1:
464
+ results=[]
453
465
 
454
- return self.up_grade(tmp,2*nside)
466
+ for k in range(im.shape[0]):
467
+
468
+ tmp=self.healpix_layer(im[k],ww,indices=indices,weights=weights,axis=0)
469
+ tmp=self.backend.bk_reshape(self.up_grade(tmp,2*nside),[12*4*nside**2,ww.shape[2]])
470
+
471
+ results.append(tmp)
472
+
473
+ return self.backend.bk_stack(results,axis=0)
474
+ else:
475
+ tmp=self.healpix_layer(im,ww,indices=indices,weights=weights,axis=axis)
476
+
477
+ return self.up_grade(tmp,2*nside)
455
478
 
456
479
  # ---------------------------------------------−---------
457
480
  # ---------------------------------------------−---------
458
- def healpix_layer(self,im,ww,indices=None,weights=None):
459
- nside=int(np.sqrt(im.shape[0]//12))
481
+ def healpix_layer(self,im,ww,indices=None,weights=None,axis=0):
482
+ nside=int(np.sqrt(im.shape[axis]//12))
460
483
  l_kernel=self.KERNELSZ*self.KERNELSZ
461
-
462
- if im.shape[1]!=ww.shape[1]:
484
+
485
+ if im.shape[1+axis]!=ww.shape[1]:
463
486
  if not self.silent:
464
487
  print('Weights channels should be equal to the input image channels')
465
488
  return -1
@@ -475,11 +498,26 @@ class FoCUS:
475
498
 
476
499
  mat=self.backend.bk_SparseTensor(indices,weights,[12*nside*nside*l_kernel,12*nside*nside])
477
500
 
478
- tmp=self.backend.bk_sparse_dense_matmul(mat,im)
501
+ if axis==1:
502
+ results=[]
479
503
 
480
- density=self.backend.bk_reshape(tmp,[12*nside*nside,l_kernel*im.shape[1]])
481
-
482
- return self.backend.bk_matmul(density,self.backend.bk_reshape(ww,[l_kernel*im.shape[1],ww.shape[2]]))
504
+ for k in range(im.shape[0]):
505
+
506
+ tmp=self.backend.bk_sparse_dense_matmul(mat,im[k])
507
+
508
+ density=self.backend.bk_reshape(tmp,[12*nside*nside,l_kernel*im.shape[1+axis]])
509
+
510
+ density=self.backend.bk_matmul(density,self.backend.bk_reshape(ww,[l_kernel*im.shape[1+axis],ww.shape[2]]))
511
+
512
+ results.append(self.backend.bk_reshape(density,[12*nside**2,ww.shape[2]]))
513
+
514
+ return self.backend.bk_stack(results,axis=0)
515
+ else:
516
+ tmp=self.backend.bk_sparse_dense_matmul(mat,im)
517
+
518
+ density=self.backend.bk_reshape(tmp,[12*nside*nside,l_kernel*im.shape[1]])
519
+
520
+ return self.backend.bk_matmul(density,self.backend.bk_reshape(ww,[l_kernel*im.shape[1],ww.shape[2]]))
483
521
  # ---------------------------------------------−---------
484
522
 
485
523
  # ---------------------------------------------−---------
@@ -79,15 +79,21 @@ class GCNN:
79
79
  def get_weights(self):
80
80
  return self.x
81
81
 
82
- def eval(self,param,indices=None,weights=None):
82
+ def eval(self,param,indices=None,weights=None,axis=0):
83
83
 
84
84
  x=self.x
85
85
 
86
86
  ww=self.scat_operator.backend.bk_reshape(x[0:self.npar*12*self.in_nside**2*self.chanlist[0]], \
87
87
  [self.npar,12*self.in_nside**2*self.chanlist[0]])
88
-
89
- im=self.scat_operator.backend.bk_matmul(self.scat_operator.backend.bk_reshape(param,[1,self.npar]),ww)
90
- im=self.scat_operator.backend.bk_reshape(im,[12*self.in_nside**2,self.chanlist[0]])
88
+
89
+ if axis==0:
90
+ nval=1
91
+ else:
92
+ nval=param.shape[0]
93
+
94
+ im=self.scat_operator.backend.bk_reshape(param,[nval,self.npar])
95
+ im=self.scat_operator.backend.bk_matmul(im,ww)
96
+ im=self.scat_operator.backend.bk_reshape(im,[nval,12*self.in_nside**2,self.chanlist[0]])
91
97
  im=self.scat_operator.backend.bk_relu(im)
92
98
 
93
99
  nn=self.npar*12*self.chanlist[0]*self.in_nside**2
@@ -96,14 +102,15 @@ class GCNN:
96
102
  [self.KERNELSZ*self.KERNELSZ,self.chanlist[k],self.chanlist[k+1]])
97
103
  nn=nn+self.KERNELSZ*self.KERNELSZ*self.chanlist[k]*self.chanlist[k+1]
98
104
  if indices is None:
99
- im=self.scat_operator.healpix_layer_transpose(im,ww)
105
+ im=self.scat_operator.healpix_layer_transpose(im,ww,axis=1)
100
106
  else:
101
- im=self.scat_operator.healpix_layer_transpose(im,ww,indices=indices[k],weights=weights[k])
107
+ im=self.scat_operator.healpix_layer_transpose(im,ww,indices=indices[k],weights=weights[k],axis=1)
102
108
  im=self.scat_operator.backend.bk_relu(im)
103
-
109
+
104
110
  ww=self.scat_operator.backend.bk_reshape(x[nn:],[self.chanlist[self.nscale],self.n_chan_out])
105
111
  im=self.scat_operator.backend.bk_matmul(im,ww)
106
-
112
+ if axis==0:
113
+ im=self.scat_operator.backend.bk_reshape(im,[im.shape[1],im.shape[2]])
107
114
  return im
108
115
 
109
116
 
@@ -253,6 +253,14 @@ class foscat_backend:
253
253
  if self.BACKEND==self.NUMPY:
254
254
  return self.scipy.sparse.coo_matrix((w,(indice[:,0],indice[:,1])),shape=dense_shape)
255
255
 
256
+ def bk_stack(self,list,axis=0):
257
+ if self.BACKEND==self.TENSORFLOW:
258
+ return self.backend.stack(list,axis=axis)
259
+ if self.BACKEND==self.TORCH:
260
+ return self.backend.stack(list,axis=axis)
261
+ if self.BACKEND==self.NUMPY:
262
+ return self.backend.stack(list,axis=axis)
263
+
256
264
  def bk_sparse_dense_matmul(self,smat,mat):
257
265
  if self.BACKEND==self.TENSORFLOW:
258
266
  return self.backend.sparse.sparse_dense_matmul(smat,mat)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foscat
3
- Version: 3.0.32
3
+ Version: 3.0.34
4
4
  Summary: Generate synthetic Healpix or 2D data using Cross Scattering Transform
5
5
  Home-page: https://github.com/jmdelouis/FOSCAT
6
6
  Author: Jean-Marc DELOUIS
@@ -9,6 +9,12 @@ Maintainer: Theo Foulquier
9
9
  Maintainer-email: theo.foulquier@ifremer.fr
10
10
  License: MIT
11
11
  Keywords: Scattering transform,Component separation,denoising
12
+ Requires-Dist: imageio
13
+ Requires-Dist: imagecodecs
14
+ Requires-Dist: matplotlib
15
+ Requires-Dist: numpy
16
+ Requires-Dist: tensorflow
17
+ Requires-Dist: healpy
12
18
 
13
19
  Utilize the Cross Scattering Transform (described in https://arxiv.org/abs/2207.12527) to synthesize Healpix or 2D data that is suitable for component separation purposes, such as denoising.
14
20
  A demo package for this process can be found at https://github.com/jmdelouis/FOSCAT_DEMO.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes