A package for formatting numbers into scientific formatted strings.
Project description
sciform
Overview
sciform is used to convert python numbers into strings according to a variety of user-selected scientific formatting options including decimal, binary, fixed-point, scientific and engineering formats. Where possible, formatting follows documented standards such as those published by BIPM or IEC. sciform provides certain options, such as engineering notation, well-controlled significant figure rounding, and separator customization which are not provided by the python built-in format specification mini-language (FSML).
Installation
Install the latest stable version from PyPi with:
python -m pip install sciform
or install the latest development version from GitHub with:
python -m pip install git+https://github.com/jagerber48/sciform.git
sciform is compatible with Python versions >=3.9.
Under Construction
The sciform package is still in early stages of development. The API is not stable. Class, function and parameter names and usages have undergone changes and may continue to change relatively freely until version 1.0.0 is released. API changes will be announced after new releases in the changelog. If you have an idea or opinion about how sciform should be designed, now is a great time to post a discussion topic about it!
sciform is currently undergoing review by the PyOpenSci community. You can view the on-going review here.
Usage
sciform provides a wide variety of formatting options which can be controlled when constructing Formatter objects which are then used to format numbers into strings according to the selected options.
>>> from sciform import Formatter >>> sform = Formatter( ... round_mode="dec_place", ndigits=6, upper_separator=" ", lower_separator=" " ... ) >>> print(sform(51413.14159265359)) 51 413.141 593 >>> sform = Formatter(round_mode="sig_fig", ndigits=4, exp_mode="engineering") >>> print(sform(123456.78)) 123.5e+03
Users can also format numbers by constructing SciNum objects and using string formatting to format the SciNum instances according to a custom FSML.
>>> from sciform import SciNum >>> num = SciNum(12345) >>> print(f"{num:!2f}") 12000 >>> print(f"{num:!2r}") 12e+03
In addition to formatting individual numbers, sciform can be used to format pairs of numbers as value/uncertainty pairs. This can be done by passing two numbers into a Formatter call or by using the SciNum object.
>>> sform = Formatter(ndigits=2, upper_separator=" ", lower_separator=" ") >>> print(sform(123456.654321, 0.00345)) 123 456.654 3 ± 0.003 4 >>> sform = Formatter(ndigits=4, exp_mode="engineering") >>> print(sform(123456.654321, 0.00345)) (123.456654321 ± 0.000003450)e+03
>>> num = SciNum(123456.654321, 0.00345) >>> print(f"{num:!2f}") 123456.6543 ± 0.0034 >>> print(f"{num:!2f()}") 123456.6543(34)
Note that the above examples demonstrate that sciform uses “round-to-even” rounding.
>>> print(f"{SciNum(865):!2}") 860 >>> print(f"{SciNum(875):!2}") 880
Acknowledgements
sciform was heavily motivated by the prefix formatting provided in the prefixed package and the value ± uncertainty formatting in the uncertainties package.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.