------------------
Contributors to this version: Ludwig Lierhammer (:user:`ludwiglierhammer`) and Joseph Siddons (:user:`jtsiddons`)
New features and enhancements
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* New core ``DataBundle`` object including callable ``cdm_mapper``, ``metmemtpy`` and ``operations`` methods (:issue:`84`, :pull:`188`, :pull:`197`)
* Update readthedocs documentation (:issue:`191`, :pull:`197`)
* new function: ``write_data`` to write MDF data and validation mask according to ``write_tables`` for writing CDM tables (:pull:`201`)
* new function: ``read_data`` to read MDF data and validation mask according to ``read_tables`` for reading CDM tables (:pull:`201`)
* new property: DataBundle.encoding (:pull:`222`)
* add overwrite option to some DataBundel method functions (:pull:`224`)
Breaking changes
^^^^^^^^^^^^^^^^
* ``cdm_mapper``: ``map_model`` returns pandas.DataFrame instead of CDM dictionary (:pull:`189`)
* ``cdm_mapper``: rename function ``cdm_to_ascii`` to ``write_tables`` (:issue:`182`, :pull:`185`)
* ``cdm_mapper``: update parameter names and list of functions ``read_tables`` and ``write_tables`` (:pull:`185`)
* main ``cdm_mapper``, ``mdf_reader`` and ``duplicates`` modules are directly callable from ``cdm_reader_mapper`` (:pull:`188`)
* new list of imported submodules: [``map_model``, ``cdm_tables``, ``read_tables``, ``write_tables``, ``duplicate_check`` and ``read_mdf``] (:pull:`188`)
* removed list of imported submodules: [``cdm_mapper``, ``common``, ``mdf_reader``, ``metmetpy``, ``operations``] (:pull:`188`)
* remove imported submodules from ``cdm_mapper``, ``mdf_reader`` (:pull:`188`)
* ``read_tables``: returning ``DataBundle`` object (:pull:`188`)
* ``read_tables``: resulting dataframe always includes multi-indexed columns (:pull:`188`)
* ``duplicates`` is now a direct submodule of ``cdm_reader_mapper`` (:pull:`188`)
* import ``read`` function from ``mdf_reader.read`` as ``read_mdf`` (:pull:`188`)
* ``read_mdf``: returning ``DataBundle`` object (:pull:`188`)
* ``read_mdf``: remove parameter ``out_path`` to dump attribute information on disk (:pull:`201`)
* move function ``open_code_table`` from ``common.json_dict`` to ``cdm_mapper.codes.codes`` (:pull:``221`)
* ``operations`` to ``common`` (:pull:`224`)
* ``cdm_mapper``: rename table_writer to writer and table_reader to reader (:pull:`224`)
* ``mdf_reader``: rename write to writer and read to reader (:pull:`224`)
* ``metmetpy``: gather correction functions to correct module and validation functions to validate module (:pull:`224`)
* ``DataBundle``: remove properties selected, deselected, tables_dup_flagged and tables_dups_removed (:pull:`224`)
Internal changes
^^^^^^^^^^^^^^^^
* ``cdm_mapper``: dtype conversion from ``write_tables`` to new submodule ``_conversions`` of ``map_model`` (:pull:`189`)
* ``cdm_mapper``: rename ``mappings`` to ``_mapping_functions`` (:pull:`189`)
* ``cdm_mapper``: mapping functions from ``mapper`` to new submodule ``_mappings`` (:pull:`189`)
* ``cdm_mapper``: save utility functions from ``table_reader.py`` and ``table_writer.py`` to ``_utilities.py`` (:pull:`185`)
* reduce complexity of several functions (:issue:`25`, :pull:`200`):
* ``mdf_reader.read.read``
* ``mdf_reader.validate.validate``
* ``mfd_reader.utils.decoders.signed_overpunch``
* ``cdm_mapper._mappings._mapping``
* ``metmetmpy.station_id.validate.validate``
* split ``mdf_reader.utils.auxiliary`` into ``mdf_reader.utils.filereader``, ``mdf_reader.utils.configurator`` and ``mdf_reader.utils.utilities`` (:issue:`25`, :pull:`200`)
* simplify ``cdm_mapper.read_tables`` function (:pull:`192`)
* ``mdf_reader``: Refactored ``Configurator`` class, ``Configurator.open_pandas`` method, to handle looping through rows (:pull:`208`, :pull:`210`)
* ``mdf_reader``: Refactored ``Configurator`` class, ``Configurator.open_data`` method, to avoid creating a pre-validation missing_value mask (:pull:`216`)
* ``mdf_reader``: move ``validate`` to ``utils.validators`` (:pull:`216`)
* ``mdf_reader``: no need for multi-column key codes (e.g. ``("core", "VS")``) (:pull:`221`)
* ``mdf_reader.utils.validator``: simplify function ``code_validation`` (:pull:`221`)
* ``cdm_mapper.codes.common``: convert range-key properties to list (:pull:`221`)
* ``testing_suite``: new chunksize test with icoads_r300_d721 (:pull:`222`)
* ``mdf_reader``, ``cdm_nmapper``: use model-depending encoding while writing data on disk (:pull:`222`)
* code restructuring (:pull:``224`)
* remove unused functions and methods (:pull:`224`)
Bug fixes
^^^^^^^^^
* Solve SettingWithCopyWarning (:issue:`151`, :pull:`184`)
* ``mdf_reader``: ``utils.converters.decode`` returns values not only None (:pull:`214`)
* ``mdf_reader``: solving misleading reading due to German "umlauts"(:issue:`212`, :pull:`214`, :pull:`222`)