@@ -126,16 +126,19 @@ def paganin_filter(
126126
127127 if mem_stack :
128128 mem_stack .malloc (indx .size * indx .dtype .itemsize ) # cp.asarray(indx)
129- mem_stack .malloc (indx .size ** 2 * indx .dtype .itemsize ) # cp.square
129+ mem_stack .malloc (indx .size * indx .dtype .itemsize ) # cp.square
130+ mem_stack .free (indx .size * indx .dtype .itemsize ) # cp.asarray(indx)
130131 mem_stack .malloc (indy .size * indy .dtype .itemsize ) # cp.asarray(indy)
131- mem_stack .malloc (indy .size ** 2 * indy .dtype .itemsize ) # cp.square
132+ mem_stack .malloc (indy .size * indy .dtype .itemsize ) # cp.square
133+ mem_stack .free (indy .size * indy .dtype .itemsize ) # cp.asarray(indy)
132134
133- mem_stack .malloc (indx .size ** 2 * indx .dtype .itemsize ) # phase_filter
135+ mem_stack .malloc (indx .size * indy .size * indx .dtype .itemsize ) # cp.add.outer
136+ mem_stack .free (indx .size * indx .dtype .itemsize ) # cp.square
137+ mem_stack .free (indy .size * indy .dtype .itemsize ) # cp.square
138+ mem_stack .malloc (indx .size * indy .size * indx .dtype .itemsize ) # phase_filter
139+ mem_stack .free (indx .size * indy .size * indx .dtype .itemsize ) # cp.add.outer
140+ mem_stack .free (indx .size * indy .size * indx .dtype .itemsize ) # phase_filter
134141
135- mem_stack .free (indx .size * indx .dtype .itemsize )
136- mem_stack .free (indx .size ** 2 * indx .dtype .itemsize )
137- mem_stack .free (indy .size * indy .dtype .itemsize )
138- mem_stack .free (indy .size ** 2 * indy .dtype .itemsize )
139142 else :
140143 # Build Lorentzian-type filter
141144 phase_filter = fftshift (
@@ -146,6 +149,7 @@ def paganin_filter(
146149
147150 # Filter projections
148151 fft_tomo *= phase_filter
152+ del phase_filter
149153
150154 # Apply filter and take inverse FFT
151155 ifft_input = fft_tomo if not mem_stack else cp .empty (padded_tomo , dtype = cp .complex64 )
0 commit comments