foscat 3.0.19__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.19 → foscat-3.0.20}/PKG-INFO +1 -1
  2. {foscat-3.0.19 → foscat-3.0.20}/setup.py +1 -1
  3. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/FoCUS.py +1 -1
  4. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/Synthesis.py +1 -2
  5. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/scat.py +40 -28
  6. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/scat1D.py +4 -0
  7. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/scat_cov.py +67 -41
  8. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/scat_cov1D.py +40 -27
  9. {foscat-3.0.19 → foscat-3.0.20}/src/foscat.egg-info/PKG-INFO +1 -1
  10. {foscat-3.0.19 → foscat-3.0.20}/README.md +0 -0
  11. {foscat-3.0.19 → foscat-3.0.20}/setup.cfg +0 -0
  12. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/CircSpline.py +0 -0
  13. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/GCNN.py +0 -0
  14. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/GetGPUinfo.py +0 -0
  15. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/Softmax.py +0 -0
  16. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/Spline1D.py +0 -0
  17. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/__init__.py +0 -0
  18. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/backend.py +0 -0
  19. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/backend_tens.py +0 -0
  20. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/loss_backend_tens.py +0 -0
  21. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/loss_backend_torch.py +0 -0
  22. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/scat2D.py +0 -0
  23. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/scat_cov2D.py +0 -0
  24. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/scat_cov_map.py +0 -0
  25. {foscat-3.0.19 → foscat-3.0.20}/src/foscat/scat_cov_map2D.py +0 -0
  26. {foscat-3.0.19 → foscat-3.0.20}/src/foscat.egg-info/SOURCES.txt +0 -0
  27. {foscat-3.0.19 → foscat-3.0.20}/src/foscat.egg-info/dependency_links.txt +0 -0
  28. {foscat-3.0.19 → foscat-3.0.20}/src/foscat.egg-info/requires.txt +0 -0
  29. {foscat-3.0.19 → 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.19
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.19',
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',
@@ -32,7 +32,7 @@ class FoCUS:
32
32
  mpi_size=1,
33
33
  mpi_rank=0):
34
34
 
35
- self.__version__ = '3.0.19'
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
@@ -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
@@ -9,6 +9,7 @@ import sys
9
9
  tf_defined = 'tensorflow' in sys.modules
10
10
 
11
11
  if tf_defined:
12
+ import tensorflow as tf
12
13
  tf_function = tf.function # Facultatif : si vous voulez utiliser TensorFlow dans ce script
13
14
  else:
14
15
  def tf_function(func):
@@ -64,44 +65,55 @@ class scat:
64
65
  self.j1 , \
65
66
  self.j2 ,backend=self.backend)
66
67
 
68
+
67
69
  def domult(self,x,y):
68
- if x.dtype==y.dtype:
70
+ try:
69
71
  return x*y
70
-
71
- if self.backend.bk_is_complex(x):
72
-
73
- return self.backend.bk_complex(self.backend.bk_real(x)*y,self.backend.bk_imag(x)*y)
74
- else:
75
- return self.backend.bk_complex(self.backend.bk_real(y)*x,self.backend.bk_imag(y)*x)
76
-
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
+
77
81
  def dodiv(self,x,y):
78
- if x.dtype==y.dtype:
82
+ try:
79
83
  return x/y
80
- 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):
81
88
 
82
- return self.backend.bk_complex(self.backend.bk_real(x)/y,self.backend.bk_imag(x)/y)
83
- else:
84
- 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))
85
92
 
86
93
  def domin(self,x,y):
87
- if x.dtype==y.dtype:
94
+ try:
88
95
  return x-y
89
-
90
- if self.backend.bk_is_complex(x):
91
-
92
- return self.backend.bk_complex(self.backend.bk_real(x)-y,self.backend.bk_imag(x)-y)
93
- else:
94
- 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))
95
105
 
96
106
  def doadd(self,x,y):
97
- if x.dtype==y.dtype:
107
+ try:
98
108
  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))
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))
105
117
 
106
118
  def relu(self):
107
119
 
@@ -337,7 +349,7 @@ class scat:
337
349
  if len(tmp.shape)==4:
338
350
  for k in range(tmp.shape[3]):
339
351
  for i1 in range(tmp.shape[0]):
340
- for i2 in range(tmp.shape[0]):
352
+ for i2 in range(tmp.shape[1]):
341
353
  if test is None:
342
354
  test=1
343
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)
@@ -9,6 +9,7 @@ import sys
9
9
  tf_defined = 'tensorflow' in sys.modules
10
10
 
11
11
  if tf_defined:
12
+ import tensorflow as tf
12
13
  tf_function = tf.function # Facultatif : si vous voulez utiliser TensorFlow dans ce script
13
14
  else:
14
15
  def tf_function(func):
@@ -576,41 +577,53 @@ class scat_cov:
576
577
  s1=s1, c10=c10,backend=self.backend)
577
578
 
578
579
  def domult(self,x,y):
579
- if x.dtype==y.dtype:
580
+ try:
580
581
  return x*y
581
- if self.backend.bk_is_complex(x):
582
-
583
- return self.backend.bk_complex(self.backend.bk_real(x)*y,self.backend.bk_imag(x)*y)
584
- else:
585
- 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)
586
590
 
587
591
  def dodiv(self,x,y):
588
- if x.dtype==y.dtype:
592
+ try:
589
593
  return x/y
590
- 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):
591
598
 
592
- return self.backend.bk_complex(self.backend.bk_real(x)/y,self.backend.bk_imag(x)/y)
593
- else:
594
- 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))
595
602
 
596
603
  def domin(self,x,y):
597
- if x.dtype==y.dtype:
604
+ try:
598
605
  return x-y
599
-
600
- if self.backend.bk_is_complex(x):
601
-
602
- return self.backend.bk_complex(self.backend.bk_real(x)-y,self.backend.bk_imag(x)-y)
603
- else:
604
- 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))
605
615
 
606
616
  def doadd(self,x,y):
607
- if x.dtype==y.dtype:
617
+ try:
608
618
  return x+y
609
- if self.backend.bk_is_complex(x):
610
-
611
- return self.backend.bk_complex(self.backend.bk_real(x)+y,self.backend.bk_imag(x)+y)
612
- else:
613
- 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))
614
627
 
615
628
 
616
629
  def __mul__(self, other):
@@ -735,7 +748,7 @@ class scat_cov:
735
748
  return scat_cov(self.S0,self.backend.constant(p0),self.backend.constant(c01),
736
749
  self.backend.constant(c11),s1=s1,c10=c10,backend=self.backend)
737
750
 
738
- 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):
739
752
 
740
753
  import matplotlib.pyplot as plt
741
754
 
@@ -754,7 +767,7 @@ class scat_cov:
754
767
  if len(tmp.shape)>3:
755
768
  for k in range(tmp.shape[3]):
756
769
  for i1 in range(tmp.shape[0]):
757
- for i2 in range(tmp.shape[0]):
770
+ for i2 in range(tmp.shape[1]):
758
771
  if test is None:
759
772
  test=1
760
773
  plt.plot(tmp[i1,i2,:,k],color=color, label=r'%s $S_1$' % (name), lw=lw)
@@ -762,7 +775,7 @@ class scat_cov:
762
775
  plt.plot(tmp[i1,i2,:,k],color=color, lw=lw)
763
776
  else:
764
777
  for i1 in range(tmp.shape[0]):
765
- for i2 in range(tmp.shape[0]):
778
+ for i2 in range(tmp.shape[1]):
766
779
  if test is None:
767
780
  test=1
768
781
  plt.plot(tmp[i1,i2,:],color=color, label=r'%s $S_1$' % (name), lw=lw)
@@ -776,10 +789,11 @@ class scat_cov:
776
789
  test=None
777
790
  plt.subplot(2, 2, 2)
778
791
  tmp=abs(self.get_np(self.P00))
792
+ ntmp=np.sqrt(tmp)
779
793
  if len(tmp.shape)>3:
780
794
  for k in range(tmp.shape[3]):
781
795
  for i1 in range(tmp.shape[0]):
782
- for i2 in range(tmp.shape[0]):
796
+ for i2 in range(tmp.shape[1]):
783
797
  if test is None:
784
798
  test=1
785
799
  plt.plot(tmp[i1,i2,:,k],color=color, label=r'%s $P_{00}$' % (name), lw=lw)
@@ -787,7 +801,7 @@ class scat_cov:
787
801
  plt.plot(tmp[i1,i2,:,k],color=color, lw=lw)
788
802
  else:
789
803
  for i1 in range(tmp.shape[0]):
790
- for i2 in range(tmp.shape[0]):
804
+ for i2 in range(tmp.shape[1]):
791
805
  if test is None:
792
806
  test=1
793
807
  plt.plot(tmp[i1,i2,:],color=color, label=r'%s $P_{00}$' % (name), lw=lw)
@@ -819,15 +833,18 @@ class scat_cov:
819
833
  for i2 in range(j1.max()+1):
820
834
  for i3 in range(tmp.shape[3]):
821
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]
822
839
  if j2[j1==i2].shape[0]==1:
823
- ax1.plot(j2[j1==i2]+n,tmp[i0,i1,j1==i2,i3,i4],'.', \
840
+ ax1.plot(j2[j1==i2]+n,dtmp,'.', \
824
841
  color=color, lw=lw)
825
842
  else:
826
843
  if legend and test is None:
827
- ax1.plot(j2[j1==i2]+n,tmp[i0,i1,j1==i2,i3,i4], \
844
+ ax1.plot(j2[j1==i2]+n,dtmp, \
828
845
  color=color, label=lname, lw=lw)
829
846
  test=1
830
- ax1.plot(j2[j1==i2]+n,tmp[i0,i1,j1==i2,i3,i4], \
847
+ ax1.plot(j2[j1==i2]+n,dtmp, \
831
848
  color=color, lw=lw)
832
849
  tabnx=tabnx+[r'%d'%(k) for k in j2[j1==i2]]
833
850
  tabx=tabx+[k+n for k in j2[j1==i2]]
@@ -840,15 +857,18 @@ class scat_cov:
840
857
  for i1 in range(tmp.shape[1]):
841
858
  for i2 in range(j1.max()+1):
842
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]
843
863
  if j2[j1==i2].shape[0]==1:
844
- ax1.plot(j2[j1==i2]+n,tmp[i0,i1,j1==i2,i3],'.', \
864
+ ax1.plot(j2[j1==i2]+n,dtmp,'.', \
845
865
  color=color, lw=lw)
846
866
  else:
847
867
  if legend and test is None:
848
- ax1.plot(j2[j1==i2]+n,tmp[i0,i1,j1==i2,i3], \
868
+ ax1.plot(j2[j1==i2]+n,dtmp, \
849
869
  color=color, label=lname, lw=lw)
850
870
  test=1
851
- ax1.plot(j2[j1==i2]+n,tmp[i0,i1,j1==i2,i3], \
871
+ ax1.plot(j2[j1==i2]+n,dtmp, \
852
872
  color=color, lw=lw)
853
873
  tabnx=tabnx+[r'%d'%(k) for k in j2[j1==i2]]
854
874
  tabx=tabx+[k+n for k in j2[j1==i2]]
@@ -904,15 +924,18 @@ class scat_cov:
904
924
  for i3 in range(tmp.shape[3]):
905
925
  for i4 in range(tmp.shape[4]):
906
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]
907
930
  if len(idx)==1:
908
- ax1.plot(np.arange(len(idx))+n,tmp[i0,i1,idx,i3,i4,i5],'.', \
931
+ ax1.plot(np.arange(len(idx))+n,dtmp,'.', \
909
932
  color=color, lw=lw)
910
933
  else:
911
934
  if legend and test is None:
912
- ax1.plot(np.arange(len(idx))+n,tmp[i0,i1,idx,i3,i4,i5], \
935
+ ax1.plot(np.arange(len(idx))+n,dtmp, \
913
936
  color=color, label=lname, lw=lw)
914
937
  test=1
915
- ax1.plot(np.arange(len(idx))+n,tmp[i0,i1,idx,i3,i4,i5], \
938
+ ax1.plot(np.arange(len(idx))+n,dtmp, \
916
939
  color=color, lw=lw)
917
940
  tabnx=tabnx+[r'%d,%d'%(j2[k],j3[k]) for k in idx]
918
941
  tabx=tabx+[k+n for k in range(len(idx))]
@@ -928,15 +951,18 @@ class scat_cov:
928
951
  for i2b in range(j2[j1==i2].max()+1):
929
952
  idx=np.where((j1==i2)*(j2==i2b))[0]
930
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]
931
957
  if len(idx)==1:
932
- ax1.plot(np.arange(len(idx))+n,tmp[i0,i1,idx,i3],'.', \
958
+ ax1.plot(np.arange(len(idx))+n,dtmp,'.', \
933
959
  color=color, lw=lw)
934
960
  else:
935
961
  if legend and test is None:
936
- ax1.plot(np.arange(len(idx))+n,tmp[i0,i1,idx,i3], \
962
+ ax1.plot(np.arange(len(idx))+n,dtmp, \
937
963
  color=color, label=lname, lw=lw)
938
964
  test=1
939
- ax1.plot(np.arange(len(idx))+n,tmp[i0,i1,idx,i3], \
965
+ ax1.plot(np.arange(len(idx))+n,dtmp, \
940
966
  color=color, lw=lw)
941
967
  tabnx=tabnx+[r'%d,%d'%(j2[k],j3[k]) for k in idx]
942
968
  tabx=tabx+[k+n for k in range(len(idx))]
@@ -10,6 +10,7 @@ import sys
10
10
  tf_defined = 'tensorflow' in sys.modules
11
11
 
12
12
  if tf_defined:
13
+ import tensorflow as tf
13
14
  tf_function = tf.function # Facultatif : si vous voulez utiliser TensorFlow dans ce script
14
15
  else:
15
16
  def tf_function(func):
@@ -374,42 +375,54 @@ class scat_cov1D:
374
375
  (self.C01 - other),
375
376
  c11,
376
377
  s1=s1, c10=c10,backend=self.backend)
377
-
378
- def domult(self,x,y):
379
- if x.dtype==y.dtype:
378
+ def domult(self,x,y):
379
+ try:
380
380
  return x*y
381
-
382
- if self.backend.bk_is_complex(x):
383
- return self.backend.bk_complex(self.backend.bk_real(x)*y,self.backend.bk_imag(x)*y)
384
- else:
385
- return self.backend.bk_complex(self.backend.bk_real(y)*x,self.backend.bk_imag(y)*x)
386
-
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
+
387
390
  def dodiv(self,x,y):
388
- if x.dtype==y.dtype:
391
+ try:
389
392
  return x/y
390
-
391
- if self.backend.bk_is_complex(x):
392
- return self.backend.bk_complex(self.backend.bk_real(x)/y,self.backend.bk_imag(x)/y)
393
- else:
394
- 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))
395
401
 
396
402
  def domin(self,x,y):
397
- if x.dtype==y.dtype:
403
+ try:
398
404
  return x-y
399
-
400
- if self.backend.bk_is_complex(x):
401
- return self.backend.bk_complex(self.backend.bk_real(x)-y,self.backend.bk_imag(x)-y)
402
- else:
403
- 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))
404
414
 
405
415
  def doadd(self,x,y):
406
- if x.dtype==y.dtype:
416
+ try:
407
417
  return x+y
408
-
409
- if self.backend.bk_is_complex(x):
410
- return self.backend.bk_complex(self.backend.bk_real(x)+y,self.backend.bk_imag(x)+y)
411
- else:
412
- 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))
413
426
 
414
427
 
415
428
  def __mul__(self, other):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foscat
3
- Version: 3.0.19
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