foscat 3.0.29__py3-none-any.whl → 3.0.31__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 CHANGED
@@ -32,7 +32,7 @@ class FoCUS:
32
32
  mpi_size=1,
33
33
  mpi_rank=0):
34
34
 
35
- self.__version__ = '3.0.29'
35
+ self.__version__ = '3.0.31'
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,76 +323,139 @@ 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,rotation=None):
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
+ if rotation is None:
350
+ rot=[po[k]/np.pi*180.0,90+(-to[k])/np.pi*180.0]
351
+ else:
352
+ rot=[po[k]/np.pi*180.0,90+(-to[k])/np.pi*180.0,rotation[k]]
353
+ r=hp.Rotator(rot=rot)
354
+ t2,p2=r(t2,p2)
355
+ idx3=hp.ang2pix(nside,t2,p2,nest=True)
356
+ ii,ww=hp.get_interp_weights(nside,t2,p2,nest=True)
357
+
358
+ ii=im[ii]
359
+
360
+ for l in range(4):
361
+ iii=np.where(ii[l]!=-1)[0]
362
+ if len(iii)>0:
363
+ indices[nn:nn+len(iii),1]=idx2[iii]
364
+ indices[nn:nn+len(iii),0]=k*kernel+ii[l,iii]
365
+ weights[nn:nn+len(iii)]=ww[l,iii]
366
+ nn+=len(iii)
367
+
368
+ indices=indices[0:nn]
369
+ weights=weights[0:nn]
370
+ if k%(nside*nside)==nside*nside-1:
371
+ print('Nside=%d KenelSZ=%d Total Number of value=%d Ratio of the matrix %.2g%%'%(nside,
372
+ kernel,
373
+ nn,
374
+ 100*nn/(kernel*12*nside**2*12*nside**2)))
375
+ return indices,weights,xc,yc,zc
376
+
377
+ # ---------------------------------------------−---------
378
+ def calc_orientation(self,im): # im is [Ndata,12*Nside**2]
379
+ nside=int(np.sqrt(im.shape[1]//12))
380
+ l_kernel=self.KERNELSZ*self.KERNELSZ
381
+ norient=32
382
+ w=np.zeros([l_kernel,1,2*norient])
383
+ ca=np.cos(np.arange(norient)/norient*np.pi)
384
+ sa=np.sin(np.arange(norient)/norient*np.pi)
385
+ stat=np.zeros([12*nside**2,norient])
386
+
387
+ if self.ww_CNN[nside] is None:
388
+ self.init_CNN_index(nside,transpose=False)
389
+
390
+ y=self.Y_CNN[nside]
391
+ z=self.Z_CNN[nside]
392
+
393
+ for k in range(norient):
394
+ w[:,0,k]=(np.exp(-0.5*nside**2*((y)**2+(z)**2))*np.cos(nside*(y*ca[k]+z*sa[k])*np.pi/2))
395
+ w[:,0,k+norient]=(np.exp(-0.5*nside**2*((y)**2+(z)**2))*np.sin(nside*(y*ca[k]+z*sa[k])*np.pi/2))
396
+ w[:,0,k]=w[:,0,k]-np.mean(w[:,0,k])
397
+ w[:,0,k+norient]=w[:,0,k]-np.mean(w[:,0,k+norient])
398
+
399
+ for k in range(im.shape[0]):
400
+ tmp=im[k].reshape(12*nside**2,1)
401
+ im2=self.healpix_layer(tmp,w)
402
+ stat=stat+im2[:,0:norient]**2+im2[:,norient:]**2
403
+
404
+ rotation=(np.argmax(stat,1)).astype('float')/32.*180.0
405
+
406
+ indices,weights,x,y,z=self.calc_indices_convol(nside,9,rotation=rotation)
407
+
408
+ return indices,weights
409
+
320
410
  def init_CNN_index(self,nside,transpose=False):
321
411
  l_kernel=int(self.KERNELSZ*self.KERNELSZ)
322
- weights=self.backend.bk_cast(np.ones([12*nside*nside*l_kernel],dtype='float'))
323
412
  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))
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))
328
418
  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)
419
+ 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)
425
+ if not self.silent:
426
+ print('Write %s/FOSCAT_%s_W%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
427
+
428
+ self.X_CNN[nside]=xc
429
+ self.Y_CNN[nside]=yc
430
+ self.Z_CNN[nside]=zc
431
+ self.ww_CNN[nside]=self.backend.bk_SparseTensor(indices,
432
+ weights,[12*nside*nside*l_kernel,
433
+ 12*nside*nside])
334
434
 
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))
435
+ # ---------------------------------------------−---------
436
+ def healpix_layer_coord(self,im):
437
+ nside=int(np.sqrt(im.shape[0]//12))
438
+ l_kernel=self.KERNELSZ*self.KERNELSZ
439
+ if self.ww_CNN[nside] is None:
440
+ self.init_CNN_index(nside)
441
+ return self.X_CNN[nside],self.Y_CNN[nside],self.Z_CNN[nside]
357
442
 
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])
367
-
368
443
  # ---------------------------------------------−---------
369
- def healpix_layer_transpose(self,im,ww):
370
- nside=2*int(np.sqrt(im.shape[0]//12))
444
+ def healpix_layer_transpose(self,im,ww,indices=None,weights=None):
445
+ nside=int(np.sqrt(im.shape[0]//12))
371
446
  l_kernel=self.KERNELSZ*self.KERNELSZ
372
447
 
373
448
  if im.shape[1]!=ww.shape[1]:
374
449
  if not self.silent:
375
450
  print('Weights channels should be equal to the input image channels')
376
451
  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]]))
452
+ tmp=self.healpix_layer(im,ww,indices=indices,weights=weights)
453
+
454
+ return self.up_grade(tmp,2*nside)
386
455
 
387
456
  # ---------------------------------------------−---------
388
457
  # ---------------------------------------------−---------
389
- def healpix_layer(self,im,ww):
458
+ def healpix_layer(self,im,ww,indices=None,weights=None):
390
459
  nside=int(np.sqrt(im.shape[0]//12))
391
460
  l_kernel=self.KERNELSZ*self.KERNELSZ
392
461
 
@@ -394,11 +463,20 @@ class FoCUS:
394
463
  if not self.silent:
395
464
  print('Weights channels should be equal to the input image channels')
396
465
  return -1
397
-
398
- if self.ww_CNN[nside] is None:
399
- self.init_CNN_index(nside,transpose=False)
466
+
467
+ if indices is None:
468
+ if self.ww_CNN[nside] is None:
469
+ self.init_CNN_index(nside,transpose=False)
470
+ mat=self.ww_CNN[nside]
471
+ else:
472
+ if weights is None:
473
+ print('healpix_layer : If indices is not none weights should be specify')
474
+ return 0
400
475
 
401
- tmp=self.backend.bk_sparse_dense_matmul(self.ww_CNN[nside],im)
476
+ mat=self.backend.bk_SparseTensor(indices,weights,[12*nside*nside*l_kernel,12*nside*nside])
477
+
478
+ tmp=self.backend.bk_sparse_dense_matmul(mat,im)
479
+
402
480
  density=self.backend.bk_reshape(tmp,[12*nside*nside,l_kernel*im.shape[1]])
403
481
 
404
482
  return self.backend.bk_matmul(density,self.backend.bk_reshape(ww,[l_kernel*im.shape[1],ww.shape[2]]))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foscat
3
- Version: 3.0.29
3
+ Version: 3.0.31
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
@@ -1,6 +1,6 @@
1
1
  foscat/CNN.py,sha256=BVf-uD5K-_Tb_Q9xdckLF7PZq-Wcs6qexP9J2K8KCq0,4231
2
2
  foscat/CircSpline.py,sha256=610sgsWeZzRXYh7gYEqUmGQVrXoHSaFGKjH5mCdh4jU,1684
3
- foscat/FoCUS.py,sha256=_hES8wvgaK3enLxOtY_wtqWOCntqmqIgfeD4olQWzMo,67309
3
+ foscat/FoCUS.py,sha256=uIMwben7dllVoOM4udnK2uVgnuxlondh-uhZhqVfP4Y,70674
4
4
  foscat/GCNN.py,sha256=TEW81DGRM4WL7RzH50VKQ-_oHbl5i3iQKuhdkkgKEO8,3831
5
5
  foscat/GetGPUinfo.py,sha256=6sJWKO_OeiA0SoGQQdCT_h3D8rZtrv_4hpBc8H3nZls,731
6
6
  foscat/Softmax.py,sha256=UDc8Kbl0qWfH1bqDDwfLnkxhON7p93ueZ-Qg2oY4Ke4,2874
@@ -19,7 +19,7 @@ foscat/scat_cov1D.py,sha256=I2GgEo7ASkb7JW443SAp25tmI2Rvuy4xggW8WMHI-L4,60591
19
19
  foscat/scat_cov2D.py,sha256=8_XvC-lOEVUWP9vT3Wx10G_ATeVeh0SdrSWuBV7Xf5k,536
20
20
  foscat/scat_cov_map.py,sha256=ocU2xd41GtJhiU9S3dEv38KfPCvz0tJKY2f8lPxpm5c,2729
21
21
  foscat/scat_cov_map2D.py,sha256=t4llIt7DVIyU1b_u-dJSX4lBr2FhDict8RnNnHpRvHM,2754
22
- foscat-3.0.29.dist-info/METADATA,sha256=Jf-TaEYSTRi1dTpaa3rM9SwpOnAnh1B19VzWiJJfkzw,1013
23
- foscat-3.0.29.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
24
- foscat-3.0.29.dist-info/top_level.txt,sha256=AGySXBBAlJgb8Tj8af6m_F-aiNg2zNTcybCUPVOKjAg,7
25
- foscat-3.0.29.dist-info/RECORD,,
22
+ foscat-3.0.31.dist-info/METADATA,sha256=NqS6zLTBxPev6AJWLSpriCVc6IV3ezI_SLEBrIk7tR4,1013
23
+ foscat-3.0.31.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
24
+ foscat-3.0.31.dist-info/top_level.txt,sha256=AGySXBBAlJgb8Tj8af6m_F-aiNg2zNTcybCUPVOKjAg,7
25
+ foscat-3.0.31.dist-info/RECORD,,