foscat 3.0.28__tar.gz → 3.0.30__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.28 → foscat-3.0.30}/PKG-INFO +1 -7
  2. {foscat-3.0.28 → foscat-3.0.30}/setup.py +1 -1
  3. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/FoCUS.py +88 -54
  4. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/backend.py +14 -2
  5. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/scat_cov1D.py +7 -7
  6. {foscat-3.0.28 → foscat-3.0.30}/src/foscat.egg-info/PKG-INFO +1 -7
  7. {foscat-3.0.28 → foscat-3.0.30}/README.md +0 -0
  8. {foscat-3.0.28 → foscat-3.0.30}/setup.cfg +0 -0
  9. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/CNN.py +0 -0
  10. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/CircSpline.py +0 -0
  11. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/GCNN.py +0 -0
  12. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/GetGPUinfo.py +0 -0
  13. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/Softmax.py +0 -0
  14. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/Spline1D.py +0 -0
  15. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/Synthesis.py +0 -0
  16. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/__init__.py +0 -0
  17. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/backend_tens.py +0 -0
  18. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/loss_backend_tens.py +0 -0
  19. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/loss_backend_torch.py +0 -0
  20. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/scat.py +0 -0
  21. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/scat1D.py +0 -0
  22. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/scat2D.py +0 -0
  23. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/scat_cov.py +0 -0
  24. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/scat_cov2D.py +0 -0
  25. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/scat_cov_map.py +0 -0
  26. {foscat-3.0.28 → foscat-3.0.30}/src/foscat/scat_cov_map2D.py +0 -0
  27. {foscat-3.0.28 → foscat-3.0.30}/src/foscat.egg-info/SOURCES.txt +0 -0
  28. {foscat-3.0.28 → foscat-3.0.30}/src/foscat.egg-info/dependency_links.txt +0 -0
  29. {foscat-3.0.28 → foscat-3.0.30}/src/foscat.egg-info/requires.txt +0 -0
  30. {foscat-3.0.28 → foscat-3.0.30}/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.28
3
+ Version: 3.0.30
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,12 +9,6 @@ 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
18
12
 
19
13
  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.
20
14
  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.28',
6
+ version='3.0.30',
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.28'
35
+ self.__version__ = '3.0.30'
36
36
  # P00 coeff for normalization for scat_cov
37
37
  self.TMPFILE_VERSION=TMPFILE_VERSION
38
38
  self.P1_dic = None
@@ -140,6 +140,9 @@ class FoCUS:
140
140
  self.ww_Imag = {}
141
141
  self.ww_CNN_Transpose = {}
142
142
  self.ww_CNN = {}
143
+ self.X_CNN = {}
144
+ self.Y_CNN = {}
145
+ self.Z_CNN = {}
143
146
 
144
147
  wwc=np.zeros([KERNELSZ**2,l_NORIENT]).astype(all_type)
145
148
  wws=np.zeros([KERNELSZ**2,l_NORIENT]).astype(all_type)
@@ -288,6 +291,9 @@ class FoCUS:
288
291
  self.remove_border[lout]=None
289
292
  self.ww_CNN_Transpose[lout]=None
290
293
  self.ww_CNN[lout]=None
294
+ self.X_CNN[lout]=None
295
+ self.Y_CNN[lout]=None
296
+ self.Z_CNN[lout]=None
291
297
 
292
298
  self.loss={}
293
299
 
@@ -317,72 +323,99 @@ class FoCUS:
317
323
  # ---------------------------------------------−---------
318
324
  # make the CNN working : index reporjection of the kernel on healpix
319
325
 
326
+ def calc_indices_convol(self,nside,kernel):
327
+ to,po=hp.pix2ang(nside,np.arange(12*nside*nside),nest=True)
328
+ x,y,z=hp.pix2vec(nside,np.arange(12*nside*nside),nest=True)
329
+
330
+ idx=np.argsort((x-1.0)**2+y**2+z**2)[0:kernel]
331
+ im=np.ones([12*nside**2])*-1
332
+ im[idx]=np.arange(len(idx))
333
+ xc,yc,zc=hp.pix2vec(nside,idx,nest=True)
334
+
335
+ vec=np.concatenate([np.expand_dims(x,-1),
336
+ np.expand_dims(y,-1),
337
+ np.expand_dims(z,-1)],1)
338
+
339
+ tc,pc=hp.pix2ang(nside,idx,nest=True)
340
+
341
+ indices=np.zeros([12*nside**2*250,2],dtype='int')
342
+ weights=np.zeros([12*nside**2*250])
343
+ nn=0
344
+ for k in range(0,12*nside*nside):
345
+ if k%(nside*nside)==nside*nside-1:
346
+ 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)
348
+ t2,p2=hp.pix2ang(nside,idx2,nest=True)
349
+ rot=[po[k]/np.pi*180.0,90+(-to[k])/np.pi*180.0]
350
+ r=hp.Rotator(rot=rot)
351
+ t2,p2=r(t2,p2)
352
+ idx3=hp.ang2pix(nside,t2,p2,nest=True)
353
+ ii,ww=hp.get_interp_weights(nside,t2,p2,nest=True)
354
+
355
+ ii=im[ii]
356
+
357
+ for l in range(4):
358
+ iii=np.where(ii[l]!=-1)[0]
359
+ if len(iii)>0:
360
+ indices[nn:nn+len(iii),1]=idx2[iii]
361
+ indices[nn:nn+len(iii),0]=k*kernel+ii[l,iii]
362
+ weights[nn:nn+len(iii)]=ww[l,iii]
363
+ nn+=len(iii)
364
+
365
+ indices=indices[0:nn]
366
+ weights=weights[0:nn]
367
+ print('Nside=%d KenelSZ=%d Total Number of value=%d Ratio of the matrix %.2g%%'%(nside,
368
+ kernel,
369
+ nn,
370
+ 100*nn/(kernel*12*nside**2*12*nside**2)))
371
+ return indices,weights,xc,yc,zc
372
+
320
373
  def init_CNN_index(self,nside,transpose=False):
321
374
  l_kernel=int(self.KERNELSZ*self.KERNELSZ)
322
- weights=self.backend.bk_cast(np.ones([12*nside*nside*l_kernel],dtype='float'))
323
375
  try:
324
- if transpose:
325
- indices=np.load('%s/FOSCAT_%s_W%d_%d_%d_CNN_Transpose.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
326
- else:
327
- indices=np.load('%s/FOSCAT_%s_W%d_%d_%d_CNN.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
376
+ indices=np.load('%s/FOSCAT_%s_I%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
377
+ weights=np.load('%s/FOSCAT_%s_W%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
378
+ xc=np.load('%s/FOSCAT_%s_X%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
379
+ yc=np.load('%s/FOSCAT_%s_Y%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
380
+ zc=np.load('%s/FOSCAT_%s_Z%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
328
381
  except:
329
- to,po=hp.pix2ang(nside,np.arange(12*nside*nside),nest=True)
330
- x,y,z=hp.pix2vec(nside,np.arange(12*nside*nside),nest=True)
331
-
332
- idx=np.argsort((x-1.0)**2+y**2+z**2)[0:l_kernel]
333
- tc,pc=hp.pix2ang(nside,idx,nest=True)
334
-
335
- indices=np.zeros([12*nside*nside,l_kernel,2],dtype='int')
336
- for k in range(12*nside*nside):
337
- if k%(nside*nside)==0:
338
- if not self.silent:
339
- print('Pre-compute nside=%6d %.2f%%'%(nside,100*k/(12*nside*nside)))
340
-
341
- rot=[po[k]/np.pi*180.0,90+(-to[k])/np.pi*180.0]
342
- r=hp.Rotator(rot=rot).get_inverse()
343
- # get the coordinate
344
- ty,tx=r(tc,pc)
345
-
346
- indices[k,:,0]=k*l_kernel+np.arange(l_kernel).astype('int')
347
- indices[k,:,1]=hp.ang2pix(nside,ty,tx,nest=True)
348
- if transpose:
349
- indices[:,:,1]=indices[:,:,1]//4
350
- np.save('%s/FOSCAT_%s_W%d_%d_%d_CNN_Transpose.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),indices)
351
- if not self.silent:
352
- print('Write %s/FOSCAT_%s_W%d_%d_%d_CNN_Transpose.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
353
- else:
354
- np.save('%s/FOSCAT_%s_W%d_%d_%d_CNNnpy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),indices)
355
- if not self.silent:
356
- print('Write %s/FOSCAT_%s_W%d_%d_%d_CNN.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
357
-
358
-
359
- if transpose:
360
- self.ww_CNN_Transpose[nside]=self.backend.bk_SparseTensor(indices.reshape(12*nside*nside*l_kernel,2),
361
- weights,[12*nside*nside*l_kernel,
362
- 3*nside*nside])
363
- else:
364
- self.ww_CNN[nside]=self.backend.bk_SparseTensor(indices.reshape(12*nside*nside*l_kernel,2),
365
- weights,[12*nside*nside*l_kernel,
366
- 12*nside*nside])
382
+ indices,weights,xc,yc,zc=self.calc_indices_convol(nside,l_kernel)
383
+ np.save('%s/FOSCAT_%s_I%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),indices)
384
+ np.save('%s/FOSCAT_%s_W%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),weights)
385
+ np.save('%s/FOSCAT_%s_X%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),xc)
386
+ np.save('%s/FOSCAT_%s_Y%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),yc)
387
+ np.save('%s/FOSCAT_%s_Z%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),zc)
388
+ if not self.silent:
389
+ print('Write %s/FOSCAT_%s_W%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
390
+
391
+ self.X_CNN[nside]=xc
392
+ self.Y_CNN[nside]=yc
393
+ self.Z_CNN[nside]=zc
394
+ print(weights.min(),weights.max())
395
+ self.ww_CNN[nside]=self.backend.bk_SparseTensor(indices,
396
+ weights,[12*nside*nside*l_kernel,
397
+ 12*nside*nside])
367
398
 
399
+ # ---------------------------------------------−---------
400
+ def healpix_layer_coord(self,im):
401
+ nside=int(np.sqrt(im.shape[0]//12))
402
+ l_kernel=self.KERNELSZ*self.KERNELSZ
403
+ if self.ww_CNN[nside] is None:
404
+ self.init_CNN_index(nside)
405
+ return self.X_CNN[nside],self.Y_CNN[nside],self.Z_CNN[nside]
406
+
368
407
  # ---------------------------------------------−---------
369
408
  def healpix_layer_transpose(self,im,ww):
370
- nside=2*int(np.sqrt(im.shape[0]//12))
409
+ nside=int(np.sqrt(im.shape[0]//12))
371
410
  l_kernel=self.KERNELSZ*self.KERNELSZ
372
411
 
373
412
  if im.shape[1]!=ww.shape[1]:
374
413
  if not self.silent:
375
414
  print('Weights channels should be equal to the input image channels')
376
415
  return -1
377
-
378
- if self.ww_CNN_Transpose[nside] is None:
379
- self.init_CNN_index(nside,transpose=True)
380
-
381
- tmp=self.backend.bk_sparse_dense_matmul(self.ww_CNN_Transpose[nside],im)
382
-
383
- density=self.backend.bk_reshape(tmp,[12*nside*nside,l_kernel*im.shape[1]])
384
-
385
- return self.backend.bk_matmul(density,self.backend.bk_reshape(ww,[l_kernel*im.shape[1],ww.shape[2]]))
416
+ tmp=self.healpix_layer(im,ww)
417
+
418
+ return self.up_grade(tmp,2*nside)
386
419
 
387
420
  # ---------------------------------------------−---------
388
421
  # ---------------------------------------------−---------
@@ -399,6 +432,7 @@ class FoCUS:
399
432
  self.init_CNN_index(nside,transpose=False)
400
433
 
401
434
  tmp=self.backend.bk_sparse_dense_matmul(self.ww_CNN[nside],im)
435
+ print(tmp.shape)
402
436
  density=self.backend.bk_reshape(tmp,[12*nside*nside,l_kernel*im.shape[1]])
403
437
 
404
438
  return self.backend.bk_matmul(density,self.backend.bk_reshape(ww,[l_kernel*im.shape[1],ww.shape[2]]))
@@ -684,9 +684,21 @@ class foscat_backend:
684
684
 
685
685
  if self.BACKEND==self.TENSORFLOW or self.BACKEND==self.TORCH:
686
686
  if axis is None:
687
- return(self.backend.concat(data))
687
+ if data[0].dtype==self.all_cbk_type:
688
+ ndata=len(data)
689
+ xr=self.backend.concat([self.bk_real(data[k]) for k in range(ndata)])
690
+ xi=self.backend.concat([self.bk_imag(data[k]) for k in range(ndata)])
691
+ return self.backend.complex(xr,xi)
692
+ else:
693
+ return(self.backend.concat(data))
688
694
  else:
689
- return(self.backend.concat(data,axis=axis))
695
+ if data[0].dtype==self.all_cbk_type:
696
+ ndata=len(data)
697
+ xr=self.backend.concat([self.bk_real(data[k]) for k in range(ndata)],axis=axis)
698
+ xi=self.backend.concat([self.bk_imag(data[k]) for k in range(ndata)],axis=axis)
699
+ return self.backend.complex(xr,xi)
700
+ else:
701
+ return(self.backend.concat(data,axis=axis))
690
702
  else:
691
703
  if axis is None:
692
704
  return np.concatenate(data,axis=0)
@@ -794,19 +794,19 @@ class scat_cov1D:
794
794
 
795
795
  # ---------------------------------------------−---------
796
796
  def flatten(self):
797
- tmp=[self.build_flat(self.P00)]
797
+ tmp=[self.backend.bk_real(self.build_flat(self.P00))]
798
798
 
799
799
  if self.S1 is not None:
800
- tmp=tmp+[self.build_flat(self.S1)]
800
+ tmp=tmp+[self.backend.bk_real(self.build_flat(self.S1))]
801
801
 
802
- tmp=tmp+[self.build_flat(self.C01)]
802
+ tmp=tmp+[self.backend.bk_real(self.build_flat(self.C01))]
803
803
 
804
804
  if self.C10 is not None:
805
- tmp=tmp+[self.build_flat(self.C10)]
805
+ tmp=tmp+[self.backend.bk_real(self.build_flat(self.C10))]
806
806
 
807
- tmp=tmp+[self.build_flat(self.C11)]
808
-
809
- if isinstance(self.P00,np.ndarray):
807
+ tmp=tmp+[self.backend.bk_real(self.build_flat(self.C11))]
808
+
809
+ if isinstance(self.C11,np.ndarray):
810
810
  return np.concatenate(tmp,1)
811
811
  else:
812
812
  return self.backend.bk_concat(tmp,1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foscat
3
- Version: 3.0.28
3
+ Version: 3.0.30
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,12 +9,6 @@ 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
18
12
 
19
13
  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.
20
14
  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
File without changes