foscat 3.0.29__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.
- {foscat-3.0.29 → foscat-3.0.30}/PKG-INFO +1 -1
- {foscat-3.0.29 → foscat-3.0.30}/setup.py +1 -1
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/FoCUS.py +88 -54
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat.egg-info/PKG-INFO +1 -1
- {foscat-3.0.29 → foscat-3.0.30}/README.md +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/setup.cfg +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/CNN.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/CircSpline.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/GCNN.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/GetGPUinfo.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/Softmax.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/Spline1D.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/Synthesis.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/__init__.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/backend.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/backend_tens.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/loss_backend_tens.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/loss_backend_torch.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/scat.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/scat1D.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/scat2D.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/scat_cov.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/scat_cov1D.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/scat_cov2D.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/scat_cov_map.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat/scat_cov_map2D.py +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat.egg-info/SOURCES.txt +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat.egg-info/dependency_links.txt +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat.egg-info/requires.txt +0 -0
- {foscat-3.0.29 → foscat-3.0.30}/src/foscat.egg-info/top_level.txt +0 -0
|
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
|
|
|
3
3
|
|
|
4
4
|
setup(
|
|
5
5
|
name='foscat',
|
|
6
|
-
version='3.0.
|
|
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.
|
|
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
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
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
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
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=
|
|
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
|
-
|
|
379
|
-
|
|
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]]))
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|