foscat 3.0.18__tar.gz → 3.0.20__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 (29) hide show
  1. {foscat-3.0.18 → foscat-3.0.20}/PKG-INFO +1 -1
  2. {foscat-3.0.18 → foscat-3.0.20}/setup.py +1 -1
  3. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/FoCUS.py +14 -9
  4. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/Synthesis.py +1 -2
  5. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/scat.py +41 -28
  6. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/scat1D.py +4 -0
  7. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/scat_cov.py +68 -41
  8. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/scat_cov1D.py +41 -27
  9. {foscat-3.0.18 → foscat-3.0.20}/src/foscat.egg-info/PKG-INFO +1 -1
  10. {foscat-3.0.18 → foscat-3.0.20}/README.md +0 -0
  11. {foscat-3.0.18 → foscat-3.0.20}/setup.cfg +0 -0
  12. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/CircSpline.py +0 -0
  13. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/GCNN.py +0 -0
  14. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/GetGPUinfo.py +0 -0
  15. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/Softmax.py +0 -0
  16. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/Spline1D.py +0 -0
  17. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/__init__.py +0 -0
  18. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/backend.py +0 -0
  19. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/backend_tens.py +0 -0
  20. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/loss_backend_tens.py +0 -0
  21. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/loss_backend_torch.py +0 -0
  22. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/scat2D.py +0 -0
  23. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/scat_cov2D.py +0 -0
  24. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/scat_cov_map.py +0 -0
  25. {foscat-3.0.18 → foscat-3.0.20}/src/foscat/scat_cov_map2D.py +0 -0
  26. {foscat-3.0.18 → foscat-3.0.20}/src/foscat.egg-info/SOURCES.txt +0 -0
  27. {foscat-3.0.18 → foscat-3.0.20}/src/foscat.egg-info/dependency_links.txt +0 -0
  28. {foscat-3.0.18 → foscat-3.0.20}/src/foscat.egg-info/requires.txt +0 -0
  29. {foscat-3.0.18 → foscat-3.0.20}/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.18
3
+ Version: 3.0.20
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
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
3
3
 
4
4
  setup(
5
5
  name='foscat',
6
- version='3.0.18',
6
+ version='3.0.20',
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',
@@ -5,7 +5,7 @@ import foscat.backend as bk
5
5
  from scipy.interpolate import griddata
6
6
 
7
7
 
8
- TMPFILE_VERSION='V2_6'
8
+ TMPFILE_VERSION='V3_0'
9
9
 
10
10
  class FoCUS:
11
11
  def __init__(self,
@@ -32,7 +32,7 @@ class FoCUS:
32
32
  mpi_size=1,
33
33
  mpi_rank=0):
34
34
 
35
- self.__version__ = '3.0.18'
35
+ self.__version__ = '3.0.20'
36
36
  # P00 coeff for normalization for scat_cov
37
37
  self.TMPFILE_VERSION=TMPFILE_VERSION
38
38
  self.P1_dic = None
@@ -872,7 +872,7 @@ class FoCUS:
872
872
  except:
873
873
  if self.use_2D==False:
874
874
  if self.KERNELSZ*self.KERNELSZ>12*nside*nside:
875
- l_kernel=2*nside
875
+ l_kernel=3
876
876
 
877
877
  aa=np.cos(np.arange(self.NORIENT)/self.NORIENT*np.pi).reshape(1,self.NORIENT)
878
878
  bb=np.sin(np.arange(self.NORIENT)/self.NORIENT*np.pi).reshape(1,self.NORIENT)
@@ -890,14 +890,19 @@ class FoCUS:
890
890
  lidx=np.arange(12*nside*nside)
891
891
 
892
892
  pw=np.pi/4.0
893
- pw2=1/2.0
894
-
893
+ pw2=1/2
894
+ amp=1.0
895
+
895
896
  if l_kernel==5:
896
897
  pw=np.pi/4.0
897
- pw2=1/2.0
898
+ pw2=1/2.25
899
+ amp=1.0/9.2038
900
+
898
901
  elif l_kernel==3:
899
- pw=1.0
902
+ pw=1.0/np.sqrt(2)
900
903
  pw2=1.0
904
+ amp=1/8.45
905
+
901
906
  elif l_kernel==7:
902
907
  pw=np.pi/4.0
903
908
  pw2=1.0/3.0
@@ -920,7 +925,7 @@ class FoCUS:
920
925
  w=np.exp(-pw2*delta[pidx]*(nside**2))
921
926
  pidx=pidx[np.argsort(-w)[0:l_kernel**2]]
922
927
  pidx=pidx[np.argsort(lidx[pidx])]
923
-
928
+
924
929
  w=np.exp(-pw2*delta[pidx]*(nside**2))
925
930
  iwav[k]=lidx[pidx]
926
931
  wwav[k]=w
@@ -935,7 +940,7 @@ class FoCUS:
935
940
  wav[k,:,:]=(np.cos(xx*aa+yy*bb)+complex(0.0,1.0)*np.sin(xx*aa+yy*bb))*np.expand_dims(w,-1)
936
941
 
937
942
  wav=wav-np.expand_dims(np.mean(wav,1),1)
938
- wav=wav/np.expand_dims(np.std(wav,1),1)
943
+ wav=amp*wav/np.expand_dims(np.std(wav,1),1)
939
944
  wwav=wwav/np.expand_dims(np.sum(wwav,1),1)
940
945
 
941
946
  nk=l_kernel*l_kernel
@@ -160,8 +160,7 @@ class Synthesis:
160
160
  self.l_log[self.mpi_rank*self.MAXNUMLOSS:(self.mpi_rank+1)*self.MAXNUMLOSS]=-1.0
161
161
 
162
162
  for istep in range(nstep):
163
-
164
-
163
+
165
164
  for k in range(self.number_of_loss):
166
165
  if self.loss_class[k].batch is None:
167
166
  l_batch=None
@@ -3,11 +3,13 @@ import numpy as np
3
3
  import pickle
4
4
  import foscat.backend as bk
5
5
  import healpy as hp
6
+ import sys
6
7
 
7
8
  # Vérifier si TensorFlow est importé et défini
8
9
  tf_defined = 'tensorflow' in sys.modules
9
10
 
10
11
  if tf_defined:
12
+ import tensorflow as tf
11
13
  tf_function = tf.function # Facultatif : si vous voulez utiliser TensorFlow dans ce script
12
14
  else:
13
15
  def tf_function(func):
@@ -63,44 +65,55 @@ class scat:
63
65
  self.j1 , \
64
66
  self.j2 ,backend=self.backend)
65
67
 
68
+
66
69
  def domult(self,x,y):
67
- if x.dtype==y.dtype:
70
+ try:
68
71
  return x*y
69
-
70
- if self.backend.bk_is_complex(x):
71
-
72
- return self.backend.bk_complex(self.backend.bk_real(x)*y,self.backend.bk_imag(x)*y)
73
- else:
74
- return self.backend.bk_complex(self.backend.bk_real(y)*x,self.backend.bk_imag(y)*x)
75
-
72
+ except:
73
+ if x.dtype==y.dtype:
74
+ return x*y
75
+ if self.backend.bk_is_complex(x):
76
+
77
+ return self.backend.bk_complex(self.backend.bk_real(x)*y,self.backend.bk_imag(x)*y)
78
+ else:
79
+ return self.backend.bk_complex(self.backend.bk_real(y)*x,self.backend.bk_imag(y)*x)
80
+
76
81
  def dodiv(self,x,y):
77
- if x.dtype==y.dtype:
82
+ try:
78
83
  return x/y
79
- if self.backend.bk_is_complex(x):
84
+ except:
85
+ if x.dtype==y.dtype:
86
+ return x/y
87
+ if self.backend.bk_is_complex(x):
80
88
 
81
- return self.backend.bk_complex(self.backend.bk_real(x)/y,self.backend.bk_imag(x)/y)
82
- else:
83
- return self.backend.bk_complex(x/self.backend.bk_real(y),x/self.backend.bk_imag(y))
89
+ return self.backend.bk_complex(self.backend.bk_real(x)/y,self.backend.bk_imag(x)/y)
90
+ else:
91
+ return self.backend.bk_complex(x/self.backend.bk_real(y),x/self.backend.bk_imag(y))
84
92
 
85
93
  def domin(self,x,y):
86
- if x.dtype==y.dtype:
94
+ try:
87
95
  return x-y
88
-
89
- if self.backend.bk_is_complex(x):
90
-
91
- return self.backend.bk_complex(self.backend.bk_real(x)-y,self.backend.bk_imag(x)-y)
92
- else:
93
- return self.backend.bk_complex(x-self.backend.bk_real(y),x-self.backend.bk_imag(y))
96
+ except:
97
+ if x.dtype==y.dtype:
98
+ return x-y
99
+
100
+ if self.backend.bk_is_complex(x):
101
+
102
+ return self.backend.bk_complex(self.backend.bk_real(x)-y,self.backend.bk_imag(x)-y)
103
+ else:
104
+ return self.backend.bk_complex(x-self.backend.bk_real(y),x-self.backend.bk_imag(y))
94
105
 
95
106
  def doadd(self,x,y):
96
- if x.dtype==y.dtype:
107
+ try:
97
108
  return x+y
98
-
99
- if self.backend.bk_is_complex(x):
100
-
101
- return self.backend.bk_complex(self.backend.bk_real(x)+y,self.backend.bk_imag(x)+y)
102
- else:
103
- return self.backend.bk_complex(x+self.backend.bk_real(y),x+self.backend.bk_imag(y))
109
+ except:
110
+ if x.dtype==y.dtype:
111
+ return x+y
112
+ if self.backend.bk_is_complex(x):
113
+
114
+ return self.backend.bk_complex(self.backend.bk_real(x)+y,self.backend.bk_imag(x)+y)
115
+ else:
116
+ return self.backend.bk_complex(x+self.backend.bk_real(y),x+self.backend.bk_imag(y))
104
117
 
105
118
  def relu(self):
106
119
 
@@ -336,7 +349,7 @@ class scat:
336
349
  if len(tmp.shape)==4:
337
350
  for k in range(tmp.shape[3]):
338
351
  for i1 in range(tmp.shape[0]):
339
- for i2 in range(tmp.shape[0]):
352
+ for i2 in range(tmp.shape[1]):
340
353
  if test is None:
341
354
  test=1
342
355
  plt.plot(tmp[i1,i2,:,k],color=color, label=r'%s $P_{00}$' % (name), lw=lw)
@@ -8,6 +8,7 @@ import sys
8
8
  tf_defined = 'tensorflow' in sys.modules
9
9
 
10
10
  if tf_defined:
11
+ import tensorflow as tf
11
12
  tf_function = tf.function # Facultatif : si vous voulez utiliser TensorFlow dans ce script
12
13
  else:
13
14
  def tf_function(func):
@@ -62,6 +63,7 @@ class scat1D:
62
63
  def domult(self,x,y):
63
64
  if x.dtype==y.dtype:
64
65
  return x*y
66
+
65
67
  if self.backend.bk_is_complex(x):
66
68
 
67
69
  return self.backend.bk_complex(self.backend.bk_real(x)*y,self.backend.bk_imag(x)*y)
@@ -80,6 +82,7 @@ class scat1D:
80
82
  def domin(self,x,y):
81
83
  if x.dtype==y.dtype:
82
84
  return x-y
85
+
83
86
  if self.backend.bk_is_complex(x):
84
87
 
85
88
  return self.backend.bk_complex(self.backend.bk_real(x)-y,self.backend.bk_imag(x)-y)
@@ -89,6 +92,7 @@ class scat1D:
89
92
  def doadd(self,x,y):
90
93
  if x.dtype==y.dtype:
91
94
  return x+y
95
+
92
96
  if self.backend.bk_is_complex(x):
93
97
 
94
98
  return self.backend.bk_complex(self.backend.bk_real(x)+y,self.backend.bk_imag(x)+y)
@@ -3,11 +3,13 @@ import numpy as np
3
3
  import foscat.backend as bk
4
4
  import pickle
5
5
  import healpy as hp
6
+ import sys
6
7
 
7
8
  # Vérifier si TensorFlow est importé et défini
8
9
  tf_defined = 'tensorflow' in sys.modules
9
10
 
10
11
  if tf_defined:
12
+ import tensorflow as tf
11
13
  tf_function = tf.function # Facultatif : si vous voulez utiliser TensorFlow dans ce script
12
14
  else:
13
15
  def tf_function(func):
@@ -575,41 +577,53 @@ class scat_cov:
575
577
  s1=s1, c10=c10,backend=self.backend)
576
578
 
577
579
  def domult(self,x,y):
578
- if x.dtype==y.dtype:
580
+ try:
579
581
  return x*y
580
- if self.backend.bk_is_complex(x):
581
-
582
- return self.backend.bk_complex(self.backend.bk_real(x)*y,self.backend.bk_imag(x)*y)
583
- else:
584
- return self.backend.bk_complex(self.backend.bk_real(y)*x,self.backend.bk_imag(y)*x)
582
+ except:
583
+ if x.dtype==y.dtype:
584
+ return x*y
585
+ if self.backend.bk_is_complex(x):
586
+
587
+ return self.backend.bk_complex(self.backend.bk_real(x)*y,self.backend.bk_imag(x)*y)
588
+ else:
589
+ return self.backend.bk_complex(self.backend.bk_real(y)*x,self.backend.bk_imag(y)*x)
585
590
 
586
591
  def dodiv(self,x,y):
587
- if x.dtype==y.dtype:
592
+ try:
588
593
  return x/y
589
- if self.backend.bk_is_complex(x):
594
+ except:
595
+ if x.dtype==y.dtype:
596
+ return x/y
597
+ if self.backend.bk_is_complex(x):
590
598
 
591
- return self.backend.bk_complex(self.backend.bk_real(x)/y,self.backend.bk_imag(x)/y)
592
- else:
593
- return self.backend.bk_complex(x/self.backend.bk_real(y),x/self.backend.bk_imag(y))
599
+ return self.backend.bk_complex(self.backend.bk_real(x)/y,self.backend.bk_imag(x)/y)
600
+ else:
601
+ return self.backend.bk_complex(x/self.backend.bk_real(y),x/self.backend.bk_imag(y))
594
602
 
595
603
  def domin(self,x,y):
596
- if x.dtype==y.dtype:
604
+ try:
597
605
  return x-y
598
-
599
- if self.backend.bk_is_complex(x):
600
-
601
- return self.backend.bk_complex(self.backend.bk_real(x)-y,self.backend.bk_imag(x)-y)
602
- else:
603
- return self.backend.bk_complex(x-self.backend.bk_real(y),x-self.backend.bk_imag(y))
606
+ except:
607
+ if x.dtype==y.dtype:
608
+ return x-y
609
+
610
+ if self.backend.bk_is_complex(x):
611
+
612
+ return self.backend.bk_complex(self.backend.bk_real(x)-y,self.backend.bk_imag(x)-y)
613
+ else:
614
+ return self.backend.bk_complex(x-self.backend.bk_real(y),x-self.backend.bk_imag(y))
604
615
 
605
616
  def doadd(self,x,y):
606
- if x.dtype==y.dtype:
617
+ try:
607
618
  return x+y
608
- if self.backend.bk_is_complex(x):
609
-
610
- return self.backend.bk_complex(self.backend.bk_real(x)+y,self.backend.bk_imag(x)+y)
611
- else:
612
- return self.backend.bk_complex(x+self.backend.bk_real(y),x+self.backend.bk_imag(y))
619
+ except:
620
+ if x.dtype==y.dtype:
621
+ return x+y
622
+ if self.backend.bk_is_complex(x):
623
+
624
+ return self.backend.bk_complex(self.backend.bk_real(x)+y,self.backend.bk_imag(x)+y)
625
+ else:
626
+ return self.backend.bk_complex(x+self.backend.bk_real(y),x+self.backend.bk_imag(y))
613
627
 
614
628
 
615
629
  def __mul__(self, other):
@@ -734,7 +748,7 @@ class scat_cov:
734
748
  return scat_cov(self.S0,self.backend.constant(p0),self.backend.constant(c01),
735
749
  self.backend.constant(c11),s1=s1,c10=c10,backend=self.backend)
736
750
 
737
- def plot(self, name=None, hold=True, color='blue', lw=1, legend=True):
751
+ def plot(self, name=None, hold=True, color='blue', lw=1, legend=True,norm=False):
738
752
 
739
753
  import matplotlib.pyplot as plt
740
754
 
@@ -753,7 +767,7 @@ class scat_cov:
753
767
  if len(tmp.shape)>3:
754
768
  for k in range(tmp.shape[3]):
755
769
  for i1 in range(tmp.shape[0]):
756
- for i2 in range(tmp.shape[0]):
770
+ for i2 in range(tmp.shape[1]):
757
771
  if test is None:
758
772
  test=1
759
773
  plt.plot(tmp[i1,i2,:,k],color=color, label=r'%s $S_1$' % (name), lw=lw)
@@ -761,7 +775,7 @@ class scat_cov:
761
775
  plt.plot(tmp[i1,i2,:,k],color=color, lw=lw)
762
776
  else:
763
777
  for i1 in range(tmp.shape[0]):
764
- for i2 in range(tmp.shape[0]):
778
+ for i2 in range(tmp.shape[1]):
765
779
  if test is None:
766
780
  test=1
767
781
  plt.plot(tmp[i1,i2,:],color=color, label=r'%s $S_1$' % (name), lw=lw)
@@ -775,10 +789,11 @@ class scat_cov:
775
789
  test=None
776
790
  plt.subplot(2, 2, 2)
777
791
  tmp=abs(self.get_np(self.P00))
792
+ ntmp=np.sqrt(tmp)
778
793
  if len(tmp.shape)>3:
779
794
  for k in range(tmp.shape[3]):
780
795
  for i1 in range(tmp.shape[0]):
781
- for i2 in range(tmp.shape[0]):
796
+ for i2 in range(tmp.shape[1]):
782
797
  if test is None:
783
798
  test=1
784
799
  plt.plot(tmp[i1,i2,:,k],color=color, label=r'%s $P_{00}$' % (name), lw=lw)
@@ -786,7 +801,7 @@ class scat_cov:
786
801
  plt.plot(tmp[i1,i2,:,k],color=color, lw=lw)
787
802
  else:
788
803
  for i1 in range(tmp.shape[0]):
789
- for i2 in range(tmp.shape[0]):
804
+ for i2 in range(tmp.shape[1]):
790
805
  if test is None:
791
806
  test=1
792
807
  plt.plot(tmp[i1,i2,:],color=color, label=r'%s $P_{00}$' % (name), lw=lw)
@@ -818,15 +833,18 @@ class scat_cov:
818
833
  for i2 in range(j1.max()+1):
819
834
  for i3 in range(tmp.shape[3]):
820
835
  for i4 in range(tmp.shape[4]):
836
+ dtmp=tmp[i0,i1,j1==i2,i3,i4]
837
+ if norm:
838
+ dtmp=dtmp/ntmp[i0,i1,i2,i3]
821
839
  if j2[j1==i2].shape[0]==1:
822
- ax1.plot(j2[j1==i2]+n,tmp[i0,i1,j1==i2,i3,i4],'.', \
840
+ ax1.plot(j2[j1==i2]+n,dtmp,'.', \
823
841
  color=color, lw=lw)
824
842
  else:
825
843
  if legend and test is None:
826
- ax1.plot(j2[j1==i2]+n,tmp[i0,i1,j1==i2,i3,i4], \
844
+ ax1.plot(j2[j1==i2]+n,dtmp, \
827
845
  color=color, label=lname, lw=lw)
828
846
  test=1
829
- ax1.plot(j2[j1==i2]+n,tmp[i0,i1,j1==i2,i3,i4], \
847
+ ax1.plot(j2[j1==i2]+n,dtmp, \
830
848
  color=color, lw=lw)
831
849
  tabnx=tabnx+[r'%d'%(k) for k in j2[j1==i2]]
832
850
  tabx=tabx+[k+n for k in j2[j1==i2]]
@@ -839,15 +857,18 @@ class scat_cov:
839
857
  for i1 in range(tmp.shape[1]):
840
858
  for i2 in range(j1.max()+1):
841
859
  for i3 in range(tmp.shape[3]):
860
+ dtmp=tmp[i0,i1,j1==i2,i3]
861
+ if norm:
862
+ dtmp=dtmp/ntmp[i0,i1,i2]
842
863
  if j2[j1==i2].shape[0]==1:
843
- ax1.plot(j2[j1==i2]+n,tmp[i0,i1,j1==i2,i3],'.', \
864
+ ax1.plot(j2[j1==i2]+n,dtmp,'.', \
844
865
  color=color, lw=lw)
845
866
  else:
846
867
  if legend and test is None:
847
- ax1.plot(j2[j1==i2]+n,tmp[i0,i1,j1==i2,i3], \
868
+ ax1.plot(j2[j1==i2]+n,dtmp, \
848
869
  color=color, label=lname, lw=lw)
849
870
  test=1
850
- ax1.plot(j2[j1==i2]+n,tmp[i0,i1,j1==i2,i3], \
871
+ ax1.plot(j2[j1==i2]+n,dtmp, \
851
872
  color=color, lw=lw)
852
873
  tabnx=tabnx+[r'%d'%(k) for k in j2[j1==i2]]
853
874
  tabx=tabx+[k+n for k in j2[j1==i2]]
@@ -903,15 +924,18 @@ class scat_cov:
903
924
  for i3 in range(tmp.shape[3]):
904
925
  for i4 in range(tmp.shape[4]):
905
926
  for i5 in range(tmp.shape[5]):
927
+ dtmp=tmp[i0,i1,idx,i3,i4,i5]
928
+ if norm:
929
+ dtmp=dtmp/ntmp[i0,i1,i2,i3]
906
930
  if len(idx)==1:
907
- ax1.plot(np.arange(len(idx))+n,tmp[i0,i1,idx,i3,i4,i5],'.', \
931
+ ax1.plot(np.arange(len(idx))+n,dtmp,'.', \
908
932
  color=color, lw=lw)
909
933
  else:
910
934
  if legend and test is None:
911
- ax1.plot(np.arange(len(idx))+n,tmp[i0,i1,idx,i3,i4,i5], \
935
+ ax1.plot(np.arange(len(idx))+n,dtmp, \
912
936
  color=color, label=lname, lw=lw)
913
937
  test=1
914
- ax1.plot(np.arange(len(idx))+n,tmp[i0,i1,idx,i3,i4,i5], \
938
+ ax1.plot(np.arange(len(idx))+n,dtmp, \
915
939
  color=color, lw=lw)
916
940
  tabnx=tabnx+[r'%d,%d'%(j2[k],j3[k]) for k in idx]
917
941
  tabx=tabx+[k+n for k in range(len(idx))]
@@ -927,15 +951,18 @@ class scat_cov:
927
951
  for i2b in range(j2[j1==i2].max()+1):
928
952
  idx=np.where((j1==i2)*(j2==i2b))[0]
929
953
  for i3 in range(tmp.shape[3]):
954
+ dtmp=tmp[i0,i1,idx,i3]
955
+ if norm:
956
+ dtmp=dtmp/ntmp[i0,i1,i2]
930
957
  if len(idx)==1:
931
- ax1.plot(np.arange(len(idx))+n,tmp[i0,i1,idx,i3],'.', \
958
+ ax1.plot(np.arange(len(idx))+n,dtmp,'.', \
932
959
  color=color, lw=lw)
933
960
  else:
934
961
  if legend and test is None:
935
- ax1.plot(np.arange(len(idx))+n,tmp[i0,i1,idx,i3], \
962
+ ax1.plot(np.arange(len(idx))+n,dtmp, \
936
963
  color=color, label=lname, lw=lw)
937
964
  test=1
938
- ax1.plot(np.arange(len(idx))+n,tmp[i0,i1,idx,i3], \
965
+ ax1.plot(np.arange(len(idx))+n,dtmp, \
939
966
  color=color, lw=lw)
940
967
  tabnx=tabnx+[r'%d,%d'%(j2[k],j3[k]) for k in idx]
941
968
  tabx=tabx+[k+n for k in range(len(idx))]
@@ -3,12 +3,14 @@ import numpy as np
3
3
  import foscat.backend as bk
4
4
  import pickle
5
5
  import matplotlib.pyplot as plt
6
+ import sys
6
7
 
7
8
 
8
9
  # Vérifier si TensorFlow est importé et défini
9
10
  tf_defined = 'tensorflow' in sys.modules
10
11
 
11
12
  if tf_defined:
13
+ import tensorflow as tf
12
14
  tf_function = tf.function # Facultatif : si vous voulez utiliser TensorFlow dans ce script
13
15
  else:
14
16
  def tf_function(func):
@@ -373,42 +375,54 @@ class scat_cov1D:
373
375
  (self.C01 - other),
374
376
  c11,
375
377
  s1=s1, c10=c10,backend=self.backend)
376
-
377
- def domult(self,x,y):
378
- if x.dtype==y.dtype:
378
+ def domult(self,x,y):
379
+ try:
379
380
  return x*y
380
-
381
- if self.backend.bk_is_complex(x):
382
- return self.backend.bk_complex(self.backend.bk_real(x)*y,self.backend.bk_imag(x)*y)
383
- else:
384
- return self.backend.bk_complex(self.backend.bk_real(y)*x,self.backend.bk_imag(y)*x)
385
-
381
+ except:
382
+ if x.dtype==y.dtype:
383
+ return x*y
384
+ if self.backend.bk_is_complex(x):
385
+
386
+ return self.backend.bk_complex(self.backend.bk_real(x)*y,self.backend.bk_imag(x)*y)
387
+ else:
388
+ return self.backend.bk_complex(self.backend.bk_real(y)*x,self.backend.bk_imag(y)*x)
389
+
386
390
  def dodiv(self,x,y):
387
- if x.dtype==y.dtype:
391
+ try:
388
392
  return x/y
389
-
390
- if self.backend.bk_is_complex(x):
391
- return self.backend.bk_complex(self.backend.bk_real(x)/y,self.backend.bk_imag(x)/y)
392
- else:
393
- return self.backend.bk_complex(x/self.backend.bk_real(y),x/self.backend.bk_imag(y))
393
+ except:
394
+ if x.dtype==y.dtype:
395
+ return x/y
396
+ if self.backend.bk_is_complex(x):
397
+
398
+ return self.backend.bk_complex(self.backend.bk_real(x)/y,self.backend.bk_imag(x)/y)
399
+ else:
400
+ return self.backend.bk_complex(x/self.backend.bk_real(y),x/self.backend.bk_imag(y))
394
401
 
395
402
  def domin(self,x,y):
396
- if x.dtype==y.dtype:
403
+ try:
397
404
  return x-y
398
-
399
- if self.backend.bk_is_complex(x):
400
- return self.backend.bk_complex(self.backend.bk_real(x)-y,self.backend.bk_imag(x)-y)
401
- else:
402
- return self.backend.bk_complex(x-self.backend.bk_real(y),x-self.backend.bk_imag(y))
405
+ except:
406
+ if x.dtype==y.dtype:
407
+ return x-y
408
+
409
+ if self.backend.bk_is_complex(x):
410
+
411
+ return self.backend.bk_complex(self.backend.bk_real(x)-y,self.backend.bk_imag(x)-y)
412
+ else:
413
+ return self.backend.bk_complex(x-self.backend.bk_real(y),x-self.backend.bk_imag(y))
403
414
 
404
415
  def doadd(self,x,y):
405
- if x.dtype==y.dtype:
416
+ try:
406
417
  return x+y
407
-
408
- if self.backend.bk_is_complex(x):
409
- return self.backend.bk_complex(self.backend.bk_real(x)+y,self.backend.bk_imag(x)+y)
410
- else:
411
- return self.backend.bk_complex(x+self.backend.bk_real(y),x+self.backend.bk_imag(y))
418
+ except:
419
+ if x.dtype==y.dtype:
420
+ return x+y
421
+ if self.backend.bk_is_complex(x):
422
+
423
+ return self.backend.bk_complex(self.backend.bk_real(x)+y,self.backend.bk_imag(x)+y)
424
+ else:
425
+ return self.backend.bk_complex(x+self.backend.bk_real(y),x+self.backend.bk_imag(y))
412
426
 
413
427
 
414
428
  def __mul__(self, other):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foscat
3
- Version: 3.0.18
3
+ Version: 3.0.20
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes