2.6.0 (unreleased) ------------------ New Features ^^^^^^^^^^^^ - Add ``array-api-strict`` (on a non-default device) as a test backend, a CPU-only proxy for CuPy device behavior. [#942] - Allow ``ImageFileCollection.ccds`` to override the collection's FITS extension per call with ``ccd_kwargs["hdu"]`` while preserving ``ext=`` as a header filter. [#960] - ``Combiner.sigma_clipping`` now clips data in a non-NumPy array namespace with an implementation written in terms of the array API standard that reproduces ``astropy.stats.sigma_clip``'s result up to floating-point rounding of the reductions, except for a slice an iteration empties (see the #1009 entry): a value lying exactly on a bound can be classified differently from astropy (NumPy data still use astropy); ``'median'``/``'mean'``/``'std'``/``'mad_std'`` use the namespace's NaN-aware reductions or ccdproc's fallbacks. [#1001] - ``Combiner.sigma_clipping`` outside NumPy now accepts ``axis=None`` and a tuple or list of axes, as ``astropy.stats.sigma_clip`` does on the NumPy path, and the reduction fallbacks in ``ccdproc._nanfuncs`` gained the same axis forms; the None/tuple axis handling formerly in ``_mad_fallback`` moved into the shared ``_nanfuncs._setup``, and a bool or otherwise non-integer ``axis`` now raises ``TypeError`` rather than ``NotImplementedError``. [#1006] - ``Combiner.sigma_clipping`` outside NumPy now masks every value of a slice that an iteration empties, as ``astropy.stats.sigma_clip`` does from astropy 8.0.2; on earlier astropy the NumPy path leaves such a slice's finite values unmasked. [#1009] - ``block_reduce``, ``block_average`` and ``block_replicate`` keep non-NumPy input in its own array library and on its own device instead of coercing it to NumPy through ``astropy.nddata``. ``block_reduce`` with an explicit ``func=xp.mean`` promotes integer and boolean input to a floating dtype, as ``block_average`` does, so that it gives NumPy's result on every backend. [#1009] - The local window filters used by ``median_filter``, ``cosmicray_median``, ``background_deviation_filter`` and ``ccdmask`` no longer copy a non-NumPy array to the host: NumPy input still goes to ``scipy.ndimage`` unchanged, while every other array namespace is served by a new implementation written purely in terms of the array API standard. Part of the array API migration tracked in #971. [#1010] - Off NumPy those filters reproduce ``scipy.ndimage`` exactly on finite input, but cost O(k**2 log k**2) per pixel for a k-by-k window rather than ndimage's O(k**2), and need a fully known shape, so a dask array with unknown chunk sizes must have ``compute_chunk_sizes()`` called on it first. [#1010] - Off NumPy those filters exclude NaNs from a window and rank among the values that remain, where ``scipy.ndimage`` sorts them in with the values; results on data containing NaN therefore differ between NumPy and every other array library. [#1010] - Off NumPy those filters implement only ndimage's ``'reflect'`` and ``'nearest'`` boundary modes, and ``median_filter`` accepts only ``size`` and ``mode``, raising ``TypeError`` for any other ``scipy.ndimage`` argument. [#1010] - Off NumPy those filters promote integer and boolean input to a floating dtype, which ``scipy.ndimage`` does not, and reject complex input and floating input narrower than ``float32``, which ``scipy.ndimage`` rejects as well. [#1010] - ``cosmicray_median`` now returns a floating result for integer input on every array library. Previously NumPy kept the input integer dtype, dask returned a float and ``array-api-strict`` raised. [#1010] - ``background_deviation_box`` now accepts a plain array-like such as a nested list, as its docstring has always promised. [#1010] - The three operations that depend on a NumPy-only library -- ``wcs_project`` (reproject), ``subtract_overscan`` with a ``model`` (``astropy.modeling``) and ``cosmicray_lacosmic`` (astroscrappy) -- now make that host round trip explicitly: they copy their input to NumPy on the host, run, and copy every array they return, data and mask alike, back to the array namespace and device of the input, so a non-NumPy caller never receives a NumPy array in its place. Each warns once per call site with the new ``ccdproc.HostCopyWarning`` (a subclass of ``AstropyUserWarning``) when an array that is not already NumPy has to be copied to the host, including a non-NumPy ``inbkg`` or ``invar`` passed to ``cosmicray_lacosmic`` with a NumPy image; when every array is NumPy, nothing is copied or warned about. ``combine(output_file=...)`` does not warn either: it copies the combined image to NumPy only to write the FITS file, and the image it returns stays in the input's array namespace. On NumPy, ``float32`` data cleaned by ``cosmicray_lacosmic`` with a NumPy ``float64`` ``pssl`` (such as ``np.median`` of ``float64`` data) now stays ``float32``, as it already did for every other type of ``pssl``. Likewise, ``cosmicray_lacosmic`` with ``gain_apply=True`` now returns ``float32`` data for integer and ``float32`` input whatever the gain, as it already did for a gain of 1; previously any other gain promoted the data to ``float64``. [#930, #933, #935, #1011, #1023] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - The ``py313-strict`` CI job is now part of the regular CI matrix and fails CI on a test failure; the expected-failures carve-out and the ``strict_status.yml`` reporting workflow are retired. [#1005] - Add triage tooling for array-API backend failures: ``backend_xfail`` / ``backend_skip`` markers, an escape-site report (``CCDPROC_TRIAGE_ESCAPES=1``), and an escape logger (``CCDPROC_LOG_ARRAY_ESCAPES=1``). [#942] - Add a ``strict`` tox environment for running the ``array-api-strict`` test suite locally: ``tox -e strict`` reproduces the CI ``py313-strict`` job without having to name the interpreter. [#986] - ``combine`` no longer accepts an array as its ``array_package`` argument; pass the array namespace or module instead. [#997] - ``subtract_overscan``, ``subtract_bias``, ``subtract_dark``, ``flat_correct``, ``ccd_process``, ``cosmicray_median``, ``Combiner`` and ``combine`` now raise ``TypeError`` when their images come from different array libraries and ``ValueError`` when they are on different devices. Previously some of these calls silently converted one of the images. ``combine`` given a mix of file names and ``CCDData`` images in memory reads the files into the array library of the images in memory. [#1025, #1028] - The minimum supported numpy is now 2.0 (``normalize_axis_tuple`` is imported from its numpy 2 location with no 1.26 fallback), which raises the minimum astropy to 6.1, reproject to 0.14 and astroscrappy to 1.2, the oldest releases that work with numpy 2. [#1000] - The minimum supported versions now follow SPEC 0: Python 3.12, numpy 2.2, scipy 1.15 and, applying the same two-year window, astropy 7.0. The ``oldestdeps`` and oldest-numpy tox environments now constrain the package install to their pins; previously the oldest-numpy environment was upgraded to the newest numpy by a test dependency (jax). [#1031] Bug Fixes ^^^^^^^^^ - Masks set by ``ccdproc`` functions, except the deprecated ``rebin``, now follow the array library and device of the data, with their shape checked; a mask that cannot, such as a CuPy mask with NumPy data, raises. For masked jax or dask images, ``create_deviation``, ``subtract_overscan`` and ``ccd_process`` returned a NumPy mask, and several others used the default device. [#1024] - ``ccd_process`` again raises ``ValueError`` for a ``bad_pixel_mask`` whose shape differs from the data's, as it did in 2.5.1. [#1027] - ``wcs_project`` no longer returns a NumPy-backed ``CCDData`` for non-NumPy input: the reprojected data and mask are converted back to the array namespace and device of the input image. [#930, #1011] - ``wcs_project``, ``subtract_overscan`` with a ``model`` and ``cosmicray_lacosmic`` now return floating data in its input dtype rather than in the dtype of the NumPy-only library that does the work. [#1023] - ``cosmicray_lacosmic`` now accepts a ``float64`` ``invar``, which it passes to astroscrappy as ``float32`` instead of letting astroscrappy raise ``ValueError``. [#1032] - ``flat_correct`` now checks the flat's mask with ``xp.any`` instead of the ``mask.any()`` method, which arrays of spec-only array-API namespaces do not have. [#1005] - Exclude masked and clipped pixels, and their weights, when computing weighted average combinations. [#952] - ``cosmicray_median`` now honors the mask of a ``CCDData`` or masked-array input: masked pixels are never flagged as cosmic rays, no longer seed ``gbox`` growth into their neighbors, are returned unchanged, and are excluded from the noise estimate when ``error_image`` is not given. Previously the mask of a masked array was silently dropped by the array conversion. [#932] - Add a NaN-aware median written purely in terms of the array API standard and use it in ``Combiner.median_combine`` when the selected array namespace has no ``nanmedian``, instead of raising ``RuntimeError``. [#906] - Add NaN-aware sum, mean and standard deviation written purely in terms of the array API standard and use them in ``Combiner.average_combine`` and ``Combiner.sum_combine`` when the selected array namespace has no ``nansum``/``nanmean``/``nanstd``, instead of raising ``RuntimeError``. [#986] - Make the ``Combiner`` combination internals array-API compatible and size images for ``mem_limit`` from the element count and dtype width instead of the non-standard ``nbytes``. [#988] - Make ``flat_correct`` and ``ccdmask`` use functional array updates so they support immutable array-API backends. [#956] - Build the ``Combiner`` data and mask arrays with ``xp.stack`` instead of passing a nested list of arrays to ``xp.asarray``, and keep the mask and scaling arrays in the namespace and on the device of the input data. ``Combiner.scaling`` is now cast to the dtype of the data, accepts an array-API array without ``__len__``, and is reshaped to exactly one broadcast axis per image dimension, so a ``(N, 1)`` scaling array or a callable returning a one-element array no longer adds a spurious trailing dimension to the combined image. [#965] - Fix the fallback percentile calculation for array namespaces that do not provide ``percentile``. [#957] - Cast the boolean mask to the data dtype in ``create_deviation`` so that ``disregard_nan=True`` works with strict array-API backends. [#968] - Keep ``VarianceUncertainty`` and ``InverseVariance`` propagation in the array namespace of the data instead of converting to NumPy. [#962] - Make array-API escape logging thread-safe so concurrent worker escapes are not missed. [#955] - Create the dark scale factor in ``subtract_dark(scale=True)`` on the same device as the master dark, and stop reporting non-unit errors from the subtraction as unit mismatches. [#966] - Remove stale comments in the ``Combiner`` ``*_combine`` methods and rebind the uncertainty instead of modifying it in place, so the methods work with immutable array-API backends. [#980] - Fix dtype conversion in ``Combiner._weighted_sum`` to use the array-API namespace form ``xp.astype(weights, xp.float64)`` instead of the deprecated string-based ``.astype("float64")``. This resolves the ``DeprecationWarning`` that was being promoted to a test failure in the JAX CI job. [#924] - Return plain ``CCDData`` objects from array-API wrapper-copy paths, and public uncertainty types from arithmetic paths. [#953] - Propagate gain correction to CCDData uncertainties in ``cosmicray_lacosmic``, and preserve data and uncertainty units when gain correction is disabled. [#958, #729] - Use Bottleneck combination functions only with NumPy arrays, preserving the selected Array API namespace for other backends. [#904, #959] - Make ``rebin`` build its index array with ``xp.astype`` on the input array's device instead of the NumPy-only ``.astype`` method, so it works with array-API backends such as ``array-api-strict``. [#967] - Keep ``Combiner.clip_extrema`` index arithmetic in the selected array namespace so GPU-backed arrays do not require an implicit conversion to NumPy. [#954] - Fix ``background_deviation_box`` discarding the result of the functional array update, which left the output at the global standard deviation on immutable array-API backends such as JAX. [#963] - Add a ``median`` fallback written purely in terms of the array API standard, built on the existing NaN-aware ``nanmedian``, and use it in ``subtract_overscan`` when the selected array namespace has no ``median``, instead of raising ``AttributeError``. [#989] - Keep the mask of the result of ``Combiner.average_combine``, ``median_combine``, ``sum_combine`` and ``combine`` in the array namespace and on the device of the data instead of converting it to NumPy. [#992] - Fix ``gain_correct`` and ``flat_correct`` for images on a non-default device: put the gain and flat normalization on the device of the data, cast an integer gain to float, and keep the uncertainty propagation for multiplication and division out of NumPy. [#993] - Use the array namespace's ``bool`` for the ``ccd_process`` bad-pixel mask, cast the mask in ``transform_image`` to the data dtype before transforming it, and convert FITS data to native byte order before handing it to a non-NumPy array namespace in ``combine`` and ``ImageFileCollection``. [#995] - Compute the ``Combiner.clip_extrema`` mask with a rank comparison instead of scattering into the mask through per-pixel integer indices, which the array API standard does not support. [#994] - Accept a plain module such as ``numpy`` or ``dask.array`` as ``array_package`` in ``combine``, normalising it to its array-api-compat namespace. [#997] - Keep the uncertainty propagation for correlated addition and subtraction through ``_CCDDataWrapperForArrayAPI`` in the array namespace instead of falling back to NumPy. [#997] - ``combine`` writes ``output_file`` from a NumPy copy of the result, so a result in a non-NumPy array namespace can be written to FITS and is returned unchanged in its namespace. [#999] - ``Combiner`` and ``combine`` map a ``dtype`` given as a builtin type, string or NumPy dtype (e.g. ``dtype=int``) to the array namespace's own dtype instead of passing it through unchanged. [#999] - Size the overscan model fit in ``subtract_overscan`` with ``shape`` instead of ``len``, which the array API standard does not provide. [#999] - Compute ``sigma_func`` (the ``median_combine`` uncertainty) with a median absolute deviation written purely in terms of the array API when the array namespace is not numpy, instead of converting the data to numpy through ``astropy.stats.median_absolute_deviation``. Numpy input still uses astropy. [#1000] - ``sigma_func`` now always excludes the masked pixels of a masked ``CCDData``. Previously the mask was only honored on numpy for small arrays with a single integer ``axis`` and ``ignore_nan=True``, and, when bottleneck is installed, not for float64 data at all. [#1000] - Passing ``axis``, ``copy`` or ``maxiters`` to ``Combiner.sigma_clipping`` no longer raises ``TypeError``. [#1001] - Correct the ``Combiner.sigma_clipping`` docstring, which said the default ``func`` was ``'median'``; the runtime default has always been ``'mean'``. [#1001] - ``combine`` on array-api-strict no longer raises ``mismatched dtypes`` when the first image's uncertainty dtype differs from ``dtype``. [#1028] 2.5.1 (2025-07-05) ------------------ Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Remove superfluous license file from the package. [#899] - scikit-image is no longer a runtime dependency. [#921] 2.5.0 (2025-07-03) ------------------ New Features ^^^^^^^^^^^^ Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Removed the unused private function `_blkavg`. [#869] - Elements of the data array in a flat image that are masked are set to 1 instead of 0. - Removed unused ``ccdproc.test()``. Use ``pytest --pyargs ccdproc`` instead. [#880] - Removed bundled copy of bitfield handling and use the one from astropy. [#886] Bug Fixes ^^^^^^^^^ - Do not allow the first argument of ``subtract_overscan`` to be a plain numpy array. [#867] - ``Combiner.sigma_clipping`` no longer overwrites the existing mask. [#873] 2.4.3 (2025-01-15) ------------------ New Features ^^^^^^^^^^^^ Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - There was extensive modernization of the package infrastructure that should not affect users. Bug Fixes ^^^^^^^^^ - Fixes incorrect parameter passed to helper in ``cosmicray_lacosmic``. [#796] 2.4.2 (2024-05-03) ------------------ New Features ^^^^^^^^^^^^ Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Make ccdproc compatible with numpy 2. [#824] 2.4.1 (2023-05-30) ------------------ New Features ^^^^^^^^^^^^ Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Bug Fixes ^^^^^^^^^ - Fixes a crash when attempting to filter an already-empty ImageFileCollection, instead simply returning an empty ImageFileCollection. [#801] - Fixes minimum astropy version in installation requirements. [#799] 2.4.0 (2022-11-16) ------------------ New Features ^^^^^^^^^^^^ Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - The sigma clipping option in the image combiner now always uses the astropy sigma clipping function, and supports specifying the functions to use for estimating the center and deviation values as strings for common cases (which significantly improves performance). [#794] - The image combiner now allows the optional overwrite of the optional output FITS file. [#797] Bug Fixes ^^^^^^^^^ 2.3.1 (2022-05-09) ------------------ New Features ^^^^^^^^^^^^ Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Bug Fixes ^^^^^^^^^ - In python 3.7 the ``version`` method from ``packaging`` must be imported directly. [#786] 2.3.0 (2021-12-21) ------------------ Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - The ``rebin`` function has been more clearly marked with a deprecation milestone. It will be removed in v3. [#780] Bug Fixes ^^^^^^^^^ - Fixes compatibility with ``astroscrappy`` version ``1.1.0`` and deprecates old keyword arguments no longer used by ``astroscrappy``. [#777, #778] 2.2.0 (2021-05-24) ------------------ New Features ^^^^^^^^^^^^ - Image combination is faster for average and sum combine, and improves for all operations if the ``bottleneck`` package is installed. [#741] - Pixel-wise weighting can be done for sum and average combine. [#741] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Bug Fixes ^^^^^^^^^ - When filtering an ``ImageFileCollection`` by keyword value, and not explicitly using a regex search pattern (``regex_match=True``), escape all special characters in the keyword value for a successful search. [#770] - Return mask and uncertainty from ``combine`` even if input images have no mask or uncertainty. [#775] 2.1.1 (2021-03-15) ------------------ New Features ^^^^^^^^^^^^ - Improve integration of ``ImageFileCollection`` with image combination and document that integration [#762] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Add memory_profiler as a test requirement [#739] - Updated test suite to use absolute, not relative imports [#735] Bug Fixes ^^^^^^^^^ - ``test_image_collection.py`` in the test suite no longer produces permanent files on disk and cleans up after itself. [#738] - Change ``Combiner`` to allow accepting either a list or a generator [#757] - ``ImageFileCollection`` now correctly returns an empty collection when an existing collection is filtered restrictively enough to remove all files. [#750] - Logging now preserves all of the arguments when the keyword argument names are not used. [#756] 2.1.0 (2019-12-24) ------------------ New Features ^^^^^^^^^^^^ Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Remove astropy_helpers from the package infrastructure, which also changes how the tests are run and how the documentation is built. [#717] Bug Fixes ^^^^^^^^^ - Update units if gain is applied in ``cosmicray_lacosmic``. [#716, #705] 2.0.1 (2019-09-05) ------------------ New Features ^^^^^^^^^^^^ Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Bug Fixes ^^^^^^^^^ - Move generation of sample directory of images to avoid importing pytest in user installation. [#699, #700] 2.0.0 (2019-09-02) ------------------ New Features ^^^^^^^^^^^^ - Allow initialization of ``ImageFileCollection`` from a list of files with no location set. [#374, #661, #680] - Allow identification of FITS files in ``ImageFileCollection`` based on content of the files instead of file name extension. [#620, #680] - Add option to use regular expression matching when filtering items in ``ImageFileCollection``. [#480, #595, #682] - Added an option to disregard negative values passed to ``create_deviation`` and assume the error is represented by the read noise [#688] - Add ``filter`` method to ``ImageFileCollection`` that creates a new collection by filtering based on header keywords. [#596, #690] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Dropped support for Python 2.x and Astropy 1.x. - Removed deprecated property ``summary_info`` of ``ImageFileCollection``. - Improved handling of large flags in the ``bitfield`` module. [#610, #611] - Improved the performance of several ``ImageFileCollection`` methods. [#599] - Added auto_logging configuration paramenter [#622, #90] - Added support for .fz,.bz2, .Z and .zip file formats in ``ImageFileCollection``. [#623, #644] - Modified weights function to also accept 1D array in ``Combiner``. [#634, #670] - Added warning that ``transform_image`` does not apply the transformation to the WCS [#684] - When creating a new object in ``wcs_transform``, WCS keywords in the header are removed so that they are only stored in the WCS object [#685] - Improved warning for negative values in the array passed to ``create_deviation`` [#688] - Removed support for initializing ``ImageFileCollection`` from a table instead of files. [#680] - More consistent typing of ``ImageFileCollection.summary`` when the collection is empty. [#601, #680] Bug Fixes ^^^^^^^^^ - Function ``median_combine`` now correctly calculates the uncertainty for masked ``CCDData``. [#608] - Function ``combine`` avoids keeping files open unnecessarily. [#629, #630] - Function ``combine`` more accurately estimates memory use when deciding how to chunk files. [#638, #642] - Raise ``ValueError`` error in ``subtract_dark`` for when the errors have different shapes [#674, #677] - Fix problem with column dtypes when initializing ``ImageFileCollection`` from a list of file names. [#662, #680] 1.3.0 (2017-11-1) ----------------- New Features ^^^^^^^^^^^^ - Add representation for ImageFileCollection. [#475, #515] - Added ext parameter and property to ImageFileCollection to specify the FITS extension. [#463] - Add keywords.deleter method to ImageFileCollection. [#474] - Added ``glob_include`` and ``glob_exclude`` parameter to ``ImageFileCollection``. [#484] - Add ``bitfield_to_boolean_mask`` function to convert a ``bitfield`` to a boolean mask (following the numpy conventions). [#460] - Added ``gain_corrected`` option in ccd_process so that calibration files do not need to previously been gain corrected. [#491] - Add a new ``wcs_relax`` argument to ``CCDData.to_header()`` that is passed through to the ``WCS`` method of the same name to allow more flexible handing of headers with SIP distortion. [#501] - ``combine`` now accepts ``numpy.ndarray`` as the input ``img_list``. [#493, #503] - Added ``sum`` option in method for ``combime``. [#500, #508] - Add ``norm_value`` argument to ``flat_correct`` that allows the normalization of the flat frame to be manually specified. [#584, #577] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - removed ability to set unit of CCDData to None. [#451] - deprecated ``summary_info`` property of ``ImageFileCollection`` now raises a deprecation warning. [#486] - Logging will include the abbreviation even if the ``meta`` attribute of the processed ``CCDData`` isn't a ``fits.Header``. [#528] - The ``CCDData`` class and the functions ``fits_ccddata_reader`` and ``fits_ccddata_writer`` will be imported from ``astropy.nddata`` if astropy >= 2.0 is installed (instead of the one defined in ``ccdproc``). [#528] - Building the documentation requires astropy >= 2.0. [#528] - When reading a ``CCDData`` from a file the WCS-related keywords are removed from the header. [#568] - The ``info_file`` argument for ``ImageFileCollection`` is now deprecated. [#585] Bug Fixes ^^^^^^^^^ - ``ImageFileCollection`` now handles Headers with duplicated keywords (other than ``COMMENT`` and ``HISTORY``) by ignoring all but the first. [#467] - The ``ccd`` method of ``ImageFileCollection`` will raise an ``NotImplementedError`` in case the parameter ``overwrite=True`` or ``clobber=True`` is used instead of silently ignoring the parameter. [#527] - The ``sort`` method of ``ImageFileCollection`` now requires an explicitly given ``keys`` argument. [#534] - Fixed a problem with ``CCDData.read`` when the extension wasn't given and the primary HDU contained no ``data`` but another HDU did. In that case the header were not correctly combined. [#541] - Suppress errors during WCS creation in CCDData.read(). [#552] - The generator methods in ``ImageFileCollection`` now don't leave open file handles in case the iterator wasn't advanced or an exception was raised either inside the method itself or during the loop. [#553] - Allow non-string columns when filtering an ``ImageFileCollection`` with a string value. [#567] 1.2.0 (2016-12-13) ------------------ ccdproc has now the following additional dependency: - scikit-image. New Features ^^^^^^^^^^^^ - Add an optional attribute named ``filenames`` to ``ImageFileCollection``, so that users can pass a list of FITS files to the collection. [#374, #403] - Added ``block_replicate``, ``block_reduce`` and ``block_average`` functions. [#402] - Added ``median_filter`` function. [#420] - ``combine`` now takes an additional ``combine_uncertainty_function`` argument which is passed as ``uncertainty_func`` parameter to ``Combiner.median_combine`` or ``Combiner.average_combine``. [#416] - Added ``ccdmask`` function. [#414, #432] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ccdprocs core functions now explicitly add HIERARCH cards. [#359, #399, #413] - ``combine`` now accepts a ``dtype`` argument which is passed to ``Combiner.__init__``. [#391, #392] - Removed ``CaseInsensitiveOrderedDict`` because it is not used in the current code base. [#428] Bug Fixes ^^^^^^^^^ - The default dtype of the ``combine``-result doesn't depend on the dtype of the first CCDData anymore. This also corrects the memory consumption calculation. [#391, #392] - ``ccd_process`` now copies the meta of the input when subtracting the master bias. [#404] - Fixed ``combine`` with ``CCDData`` objects using ``StdDevUncertainty`` as uncertainty. [#416, #424] - ``ccds`` generator from ``ImageFileCollection`` now uses the full path to the file when calling ``fits_ccddata_reader``. [#421 #422] 1.1.0 (2016-08-01) ------------------ New Features ^^^^^^^^^^^^ - Add an additional combination method, ``clip_extrema``, that drops the highest and/or lowest pixels in an image stack. [#356, #358] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ``cosmicray_lacosmic`` default ``satlevel`` changed from 65536 to 65535. [#347] - Auto-identify files with extension ``fts`` as FITS files. [#355, #364] - Raise more explicit exception if unit of uncalibrated image and master do not match in ``subtract_bias`` or ``subtract_dark``. [#361, #366] - Updated the ``Combiner`` class so that it could process images with >2 dimensions. [#340, #375] Bug Fixes ^^^^^^^^^ - ``Combiner`` creates plain array uncertainties when using``average_combine`` or ``median_combine``. [#351] - ``flat_correct`` does not properly scale uncertainty in the flat. [#345, #363] - Error message in weights setter fixed. [#376] 1.0.1 (2016-03-15) ------------------ The 1.0.1 release was a release to fix some minor packaging issues. 1.0.0 (2016-03-15) ------------------ General ^^^^^^^ - ccdproc has now the following requirements: - Python 2.7 or 3.4 or later. - astropy 1.0 or later - numpy 1.9 or later - scipy - astroscrappy - reproject New Features ^^^^^^^^^^^^ - Add a WCS setter for ``CCDData``. [#256] - Allow user to set the function used for uncertainty calculation in ``average_combine`` and ``median_combine``. [#258] - Add a new keyword to ImageFileCollection.files_filtered to return the full path to a file [#275] - Added ccd_process for handling multiple steps. [#211] - CCDData.write now writes multi-extension-FITS files. The mask and uncertainty are saved as extensions if these attributes were set. The name of the extensions can be altered with the parameters ``hdu_mask`` (default extension name ``'MASK'``) and ``hdu_uncertainty`` (default ``'UNCERT'``). CCDData.read can read these files and has the same optional parameters. [#302] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Issue warning if there are no FITS images in an ``ImageFileCollection``. [#246] - The overscan_axis argument in subtract_overscan can now be set to None, to let subtract_overscan provide a best guess for the axis. [#263] - Add support for wildcard and reversed FITS style slicing. [#265] - When reading a FITS file with CCDData.read, if no data exists in the primary hdu, the resultant header object is a combination of the header information in the primary hdu and the first hdu with data. [#271] - Changed cosmicray_lacosmic to use astroscrappy for cleaning cosmic rays. [#272] - CCDData arithmetic with number/Quantity now preserves any existing WCS. [#278] - Update astropy_helpers to 1.1.1. [#287] - Drop support for Python 2.6. [#300] - The ``add_keyword`` parameter now has a default of ``True``, to be more explicit. [#310] - Return name of file instead of full path in ``ImageFileCollection`` generators. [#315] Bug Fixes ^^^^^^^^^ - Adding/Subtracting a CCDData instance with a Quantity with a different unit produced wrong results. [#291] - The uncertainty resulting when combining CCDData will be divided by the square root of the number of combined pixel [#309] - Improve documentation for read/write methods on ``CCDData`` [#320] - Add correct path separator when returning full path from ``ImageFileCollection.files_filtered``. [#325] 0.3.3 (2015-10-24) ------------------ New Features ^^^^^^^^^^^^ - add a ``sort`` method to ImageFileCollection [#274] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Opt in to new container-based builds on travis. [#227] - Update astropy_helpers to 1.0.5. [#245] Bug Fixes ^^^^^^^^^ - Ensure that creating a WCS from a header that contains list-like keywords (e.g. ``BLANK`` or ``HISTORY``) succeeds. [#229, #231] 0.3.2 (never released) ---------------------- There was no 0.3.2 release because of a packaging error. 0.3.1 (2015-05-12) ------------------ New Features ^^^^^^^^^^^^ - Add CCDData generator for ImageCollection [#405] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Add extensive tests to ensure ``ccdproc`` functions do not modify the input data. [#208] - Remove red-box warning about API stability from docs. [#210] - Support astropy 1.0.5, which made changes to ``NDData``. [#242] Bug Fixes ^^^^^^^^^ - Make ``subtract_overscan`` act on a copy of the input data. [#206] - Overscan subtraction failed on non-square images if the overscan axis was the first index, ``0``. [#240, #244] 0.3.0 (2015-03-17) ------------------ New Features ^^^^^^^^^^^^ - When reading in a FITS file, the extension to be used can be specified. If it is not and there is no data in the primary extension, the first extension with data will be used. - Set wcs attribute when reading from a FITS file that contains WCS keywords and write WCS keywords to header when converting to an HDU. [#195] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Updated CCDData to use the new version of NDDATA in astropy v1.0. This breaks backward compatibility with earlier versions of astropy. Bug Fixes ^^^^^^^^^ - Ensure ``dtype`` of combined images matches the ``dtype`` of the ``Combiner`` object. [#189] 0.2.2 (2014-11-05) ------------------ New Features ^^^^^^^^^^^^ - Add dtype argument to `ccdproc.Combiner` to help control memory use [#178] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Added Changes to the docs [#183] Bug Fixes ^^^^^^^^^ - Allow the unit string "adu" to be upper or lower case in a FITS header [#182] 0.2.1 (2014-09-09) ------------------ New Features ^^^^^^^^^^^^ - Add a unit directly from BUNIT if it is available in the FITS header [#169] Other Changes and Additions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Relaxed the requirements on what the metadata must be. It can be anything dict-like, e.g. an astropy.io.fits.Header, a python dict, an OrderedDict or some custom object created by the user. [#167] Bug Fixes ^^^^^^^^^ - Fixed a new-style formating issue in the logging [#170] 0.2 (2014-07-28) ---------------- - Initial release.