Releases: JS2IIU-MH/adiftools-dev
adiftools release 0.1.10
adiftools release 0.1.10
This is an official release version.
Release Date
- 2025-12-31
Acknowledgement
Thank you to the two people who reported issues related to ADIF parsing.
- @clarkjc reported parsing issue on ADIF file from PSK Reporter (Issue #1 )
- @Sinager reported ADIF record parsing issue (Issue #2 )
Functions
- Read ADIF file into pandas DataFrame.
- Generate basic and advanced Matplotlib plots from ADIF data.
- Utility tool to calculate Grid Locator from/to geographic coordinate.
New Features
- ADIF record parsing no longer assumes a fixed order for fields. Fields such as
CALL,QSO_DATE,TIME_ON, etc., can now appear in any order inside a record and will still be parsed correctly. read_adi,read_adi_streaming, and parallel parsing have been updated to detect records in an order-agnostic, case-insensitive way and to properly identify record terminators (<EOR>).
Compatibility
- This change improves compatibility with ADIF files produced by various logging software that do not guarantee a fixed field order.
Improvements
- More robust detection of ADIF records: the parser now uses case-insensitive presence checks and
endswith('<EOR>')to avoid false negatives whenCALLis not the first token in a record. - Streaming and parallel processing paths were aligned with the same detection logic to ensure consistent behavior for large files.
Bug Fixes
- Fixed an issue where records were ignored if the
CALLfield did not appear at the start of the line. This caused some QSOs to be missed when fields were reordered by logging software.
Special thanks to Stefano IZ0MJE for reporting the field-order parsing issue and proposing an approach.
Upgrade Notes
- No special upgrade steps required. Existing code using
read_adi,read_adi_streaming, orread_adi_parallelshould continue to work and will benefit from improved parsing robustness.
Install
adiftools can be installed or updated from PyPI:
pip install adiftoolspip install -U adiftools- If you encounter an error related to subprocess, try installing
wheelwithpip install wheel.
Other
- Please report any issues with the release on the adiftools issue tracker.
- For Japanese documentation, see the JS2IIU blog: アマチュア無線局JS2IIU
Thank you, JS2IIU
Release v0.1.9
adiftools release 0.1.9
This is an official release version.
Release Date
- 2025-08-11
Functions
- Read ADIF file into pandas DataFrame.
- Generate basic and advanced Matplotlib plots from ADIF data.
- Utility tool to calculate Grid Locator from/to geographic coordinate.
New Features
- The
monthly_band_qsofunction now supports per-band color assignment for the stacked bar plot. A color table for each BAND is defined inside the function, and any BAND not listed in the table is automatically assigned a unique color from a colormap. This makes the monthly band QSO graph more visually distinct and customizable.
BAND and Color Code Table (default)
| BAND | Color Code |
|---|---|
| 2M | #FF1493 |
| 4M | #CC0044 |
| 5M | #E0E0E0 |
| 6M | #FF0000 |
| 8M | #7F00F1 |
| 10M | #FF69B4 |
| 11M | #00FF00 |
| 12M | #B22222 |
| 15M | #CCA166 |
| 17M | #F2F261 |
| 20M | #F2C40C |
| 30M | #62D962 |
| 40M | #5959FF |
| 80M | #E550E5 |
| 160M | #7CFC00 |
The color codes above are inspired by the color scheme used on the website PSKReporter. We would like to acknowledge and thank PSKReporter for their excellent and informative color palette.
Any BAND not listed above will be assigned a unique color from the colormap automatically.
Improvements
- Improved the flexibility and visual clarity of the monthly band QSO stacked bar plot.
Bug Fixes
- None in this release.
Breaking Changes
- None.
Known Issues
- None reported.
Upgrade Notes
- No special upgrade steps required.
Install
adiftools can be installed or updated from PyPI:
pip install adiftoolspip install -U adiftools- If you encounter an error related to subprocess, try installing
wheelwithpip install wheel.
Other
- Please report any issues with the release on the adiftools issue tracker.
- For Japanese documentation, see the JS2IIU blog: アマチュア無線局JS2IIU
Thank you, JS2IIU
Release v0.1.8
adiftools release 0.1.8
This is an official release.
Release Date
- 2025-08-10
Features
- Read ADIF files into pandas DataFrames.
- Generate basic and advanced Matplotlib plots from ADIF data.
- Utility tools for converting Grid Locators to and from geographic coordinates.
New Features
adifgraph.monthly_band_qso(df, fname)- Introduced a new function to generate a stacked bar plot of monthly QSO counts by band. This feature enables users to visually analyze the number of QSOs for each band by month. The output is saved as a PNG or JPG file.
Improvements
- Documentation updated: Usage instructions for the new monthly band QSO plot have been added to the README.
- Compatibility with recent versions of pandas and matplotlib has been improved.
Bug Fixes
- No bug fixes in this release.
Breaking Changes
- None.
Known Issues
- None reported.
Upgrade Notes
- No special upgrade steps are required.
Installation
adiftools can be installed or updated from PyPI:
pip install adiftoolspip install -U adiftools- If you encounter a subprocess-related error, try installing
wheelwithpip install wheel.
Other
- Please report any issues with this release on the adiftools issue tracker.
- For Japanese documentation, see the JS2IIU blog: アマチュア無線局JS2IIU
Thank you,
JS2IIU
adiftools release v0.1.7
Functions
- Read adif file into Pandas DataFrame.
- Generate basic Matplotlib plots from adif data.
- Utility tool to calculate Grid Locator from/to geographic coordinate.
Performance Improvements
- Major performance optimization in
ADIFParser.read_adi()method- Issue: The original implementation used inefficient DataFrame merging operations that caused O(n²) complexity, making it extremely slow for large ADIF files with many records.
- Solution: Replaced the inefficient approach with a list accumulation method that builds the DataFrame once at the end.
- Performance gain:
- Time complexity improved from O(n²) to O(n)
- Expected 10-50x speed improvement for files with 10,000+ records
- Reduced memory usage by eliminating intermediate DataFrame duplications
- Technical details:
- Removed
pd.merge()operations in the processing loop - Implemented list-based record accumulation
- Single DataFrame construction at the end of processing
- Pre-compiled regex pattern for faster parsing
- Removed
Install
adiftools can now officially pip install from PyPI. If you have already installed a previous version, please update it with the following command All previous functions can still be used with this update.
pip install adiftoolspip install -U adiftools- When you got an error from subprocess, try to install
wheelbypip install wheelcommand
Other
- Please report any issues with the release on the adiftools issue tracker.
- 日本語での説明はJS2IIUのブログをご覧ください:アマチュア無線局JS2IIU
Thank you, JS2IIU
adiftools release v0.1.6
Functions
- Read adif file into Pandas DataFrame.
- Generate basic Matplotlib plots from adif data.
- Utility tool to calculate Grid Locator from/to geographic coordinate.
New
-
Save ADIF data as adi file
- Saves the loaded ADIF data as an adi file conforming to the ADIF standard. adiftools adds a new header to the beginning of the adi file.
- Fields with no data are filled with
nan. - The header will contain information on the following two fields, CREATED_TIMESTAMP, and PROGRAMID.
- Call signature:
ADIFParser.to_adi(file_path)
- Parameter:
file_path: str or path-like or binary file-like- A path, or a Python file-like object of adi file to save
- Returns:
None
-
Save ADIF data as excel file: Save the DataFrame with the ADIF loaded to an excel file.
- Call signature:
ADIFParser.to_excel(file_path)
- Parameter:
file_path: str or path-like or binary file-like- A path, or a Python file-like object of excel file to save
- Returns:
None
- Call signature:
Install
adiftools can now officially pip install from PyPI. If you have already installed a previous version, please update it with the following command All previous functions can still be used with this update.
pip install adiftoolspip install -U adiftools- When you got an error from subprocess, try to install
wheelbypip install wheelcommand
Other
- Please report any issues with the release on the adiftools issue tracker.
- 日本語での説明はJS2IIUのブログをご覧ください:アマチュア無線局JS2IIU
Thank you, JS2IIU
adiftools release v0.1.5
This is an official release version.
Functions
- Read adif file into Pandas DataFrame.
- Generate basic Matplotlib plots from adif data.
- Utility tool to calculate Grid Locator from/to geographic coordinate.
New
Add pickle file interface to improve file reading response
-
Save ADIF data to pickle file: Save the DataFrame with the ADIF loaded to a pickle file.
- Loading an ADIF file into a DataFrame can be quite time consuming.
- It is especially long if there are many QSOsin the ADIF file, and it is very cumbersome to read the data every time.
- It is recommended to serialize the ADIF data once loaded and save it in a pickle format, which is expected to be 50 times faster than loading a raw ADIF file.
- Call signature:
ADIFParser.to_pickle(file_path)
- Parameter:
file_path: str or path-like or binary file-like- A path, or a Python file-like object of pickle file to save
- Returns:
None
-
Load Pickle data
- Provides a way to read ADIF data once it has been loaded by ADIFParser and saved in a pickle file.
- The read_pickle method does not check whether the QSO data is saved in the read pickle file.
- Call signature:
ADIFParser.read_pickle(file_path)
- Parameter:
file_path: str or path-like or binary file-like- A path, or a Python file-like object of pickle file to read
- Returns:
pd.DataFrame- The created pandas.DataFrame instance includes QSO data from ADIF file
Install
adiftools can now officially pip install from PyPI. If you have already installed a previous version, please update it with the following command All previous functions can still be used with this update.
pip install adiftoolspip install -U adiftools- When you got an error from subprocess, try to install
wheelbypip install wheelcommand
Other
- Please report any issues with the release on the adiftools issue tracker.
- 日本語での説明はJS2IIUのブログをご覧ください:アマチュア無線局JS2IIU
Thank you, JS2IIU
adiftools release v0.1.4
Functions
- Read adif file into Pandas DataFrame.
- Generate basic Matplotlib plots from adif data.
- Utility tool to calculate Grid Locator from/to geographic coordinate.
New
- Generate Callsign file
- Outputs call sign data without duplicates from data read from an ADIF file as a text file. The text file will contain one callsign per line.
- If the ADIF file has not been read, i.e.,
read_adi()has not been performed, it returns the errorAdifParserError. - Call signature:
ADIFParser.call_to_txt(filepath)
- Parameter:
file_path: str or path-like or binary file-like- A path of output txt file
- Returns:
None
Install
adiftools can now officially pip install from PyPI. If you have already installed a previous version, please update it with the following command All previous functions can still be used with this update.
pip install adiftoolspip install -U adiftools- When you got an error from subprocess, try to install
wheelbypip install wheelcommand
Other
- Please report any issues with the release on the adiftools issue tracker.
- 日本語での説明はJS2IIUのブログをご覧ください:アマチュア無線局JS2IIU
Thank you, JS2IIU
adiftools release v0.1.3
This is an official release version.
Functions
- Read adif file into Pandas DataFrame.
- Generate basic Matplotlib plots from adif data.
- Utility tool to calculate Grid Locator from/to geographic coordinate.
New
- Calculate distance from two places' latitude and longitude
- Call signature
adiftools.get_dist(lat1, lon1, lat2, lon2)
- Parameters:
lat1– latitude of the first point in degreeslon1– longitude of the first point in degreeslat2– latitude of the second point in degreeslon2– longitude of the second point in degrees
- Returns:
- the distance from the first point to the second in meters
- Reference
- Call signature
Install
adiftools can now officially pip install from PyPI. If you have already installed a previous version, please update it with the following command All previous functions can still be used with this update.
pip install adiftoolspip install -U adiftools- When you got an error from subprocess, try to install
wheelbypip install wheelcommand
Other
- Please report any issues with the release on the adiftools issue tracker.
- 日本語での説明はJS2IIUのブログをご覧ください:アマチュア無線局JS2IIU
Thank you, JS2IIU
adiftools release v0.1.2
This is an official release version.
Functions
- Read adif file into Pandas DataFrame.
- Generate basic Matplotlib plots from adif data.
- Utility tool to calculate Grid Locator from/to geographic coordinate.
New
- Check JA call sign
- Call signature
adiftools.is_ja(call_sign)
- Parameter:
call_signcall sign as string
- Returns:
True: JA call,False: other
- Call signature
Install
adiftools can now officially pip install from PyPI. If you have already installed a previous version, please update it with the following command All previous functions can still be used with this update.
pip install adiftoolspip install -U adiftools- When you got an error from subprocess, try to install
wheelbypip install wheelcommand
Other
- Please report any issues with the release on the adiftools issue tracker.
- 日本語での説明はJS2IIUのブログをご覧ください:アマチュア無線局JS2IIU
Thank you, JS2IIU
adiftools release 0.1.1
This is an official release version.
Functions
- Read adif file into Pandas DataFrame.
- Generate basic Matplotlib plots from adif data.
- Utility tool to calculate Grid Locator from/to geographic coordinate.
New
adiftools.latlon2gl(latitude, longitude)- In this release, a function called latlon2gl() has been added. This function calculates a grid locator from latitude and longitude. The grid locator is output in 6-digit string format.
Install
adiftools can now officially pip install from PyPI. If you have already installed a previous version, please update it with the following command All previous functions can still be used with this update.
pip install adiftoolspip install -U adiftools- When you got an error from subprocess, try to install
wheelbypip install wheelcommand
Other
- Please report any issues with the release on the adiftools issue tracker.
- 日本語での説明はJS2IIUのブログをご覧ください:アマチュア無線局JS2IIU
Thank you, JS2IIU