foscat 3.0.28__py3-none-any.whl → 3.0.30__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.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]]))
foscat/backend.py CHANGED
@@ -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)
foscat/scat_cov1D.py CHANGED
@@ -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
@@ -1,13 +1,13 @@
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=m8HWydQiXnENagPRz24RCAwNNvSGNBgOVn7y4BA9IKo,67309
3
+ foscat/FoCUS.py,sha256=A_rppGtJOcxZ96sNa6cyWpFWjNDFkVrTYDcI0Dxt_d0,68791
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
7
7
  foscat/Spline1D.py,sha256=9oeM8SSHjpfUE5z72YxGt1RVt22vJYM1zhHbNBW8phw,1232
8
8
  foscat/Synthesis.py,sha256=oYtHFVTqalVzBQs5okJBnP4pzXFhBMds-pytdEm4Bqs,12611
9
9
  foscat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- foscat/backend.py,sha256=AZaMJSGoRGUSnjLKN8FF1tS16DmQZ70BjDl8zCDU9yg,30346
10
+ foscat/backend.py,sha256=43Q-OtWlB-S14LH5IiUTxg9j_1WvOBZea3DkuEET7aY,31066
11
11
  foscat/backend_tens.py,sha256=zEFZ71j0nMNP9_91tz21ZVBTayr75l-sfONOLkJ8DyI,1432
12
12
  foscat/loss_backend_tens.py,sha256=WbGC4vy1pBg_bxUXnlCRiXX9WszN6MaUWUc_lUvZNvQ,1667
13
13
  foscat/loss_backend_torch.py,sha256=Fj_W3VwGgeD79eQ4jOxOmhZ548UKDRUb3JjUo2-gSWM,1755
@@ -15,11 +15,11 @@ foscat/scat.py,sha256=Ht_xyo7XKJJrUIbQIeucjhIrJo4RGrE63EyhTH8IYig,60061
15
15
  foscat/scat1D.py,sha256=fiGxyWSASGik9BimBKz_Z07jSPywJckLXaHDB_v5HHQ,45847
16
16
  foscat/scat2D.py,sha256=Xtisjc5KsbLQAlbn71P0Xg1UIu3r1gUKXoYG2vIMK1M,523
17
17
  foscat/scat_cov.py,sha256=uST8ij9o1sJh2AKhFffxMUr0WFQX9vz3VK4LGfiSOlE,110188
18
- foscat/scat_cov1D.py,sha256=CU10BUXuptFlaTE-12xFsETTy0br1hAzvaGERi6Ext4,60485
18
+ 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.28.dist-info/METADATA,sha256=fjwg9VZzTyfzTAFiZ3xvHUpVhTxCoI55NrljG1q6AEU,1013
23
- foscat-3.0.28.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
24
- foscat-3.0.28.dist-info/top_level.txt,sha256=AGySXBBAlJgb8Tj8af6m_F-aiNg2zNTcybCUPVOKjAg,7
25
- foscat-3.0.28.dist-info/RECORD,,
22
+ foscat-3.0.30.dist-info/METADATA,sha256=5w2eBts5NhenffKMyMXGVM7_G5nzt62aimtutSjsNjM,1013
23
+ foscat-3.0.30.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
24
+ foscat-3.0.30.dist-info/top_level.txt,sha256=AGySXBBAlJgb8Tj8af6m_F-aiNg2zNTcybCUPVOKjAg,7
25
+ foscat-3.0.30.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: bdist_wheel (0.42.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5