sciform 0.36.0__tar.gz → 0.38.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sciform-0.36.0 → sciform-0.38.0}/.github/workflows/python-package.yml +22 -9
- {sciform-0.36.0 → sciform-0.38.0}/.pre-commit-config.yaml +2 -2
- {sciform-0.36.0 → sciform-0.38.0}/CHANGELOG.rst +92 -0
- {sciform-0.36.0 → sciform-0.38.0}/PKG-INFO +68 -55
- {sciform-0.36.0 → sciform-0.38.0}/README.rst +51 -47
- sciform-0.38.0/coverage_feature.toml +12 -0
- sciform-0.38.0/coverage_unit.toml +13 -0
- sciform-0.38.0/docs/requirements.txt +1 -0
- {sciform-0.36.0 → sciform-0.38.0}/docs/source/api.rst +1 -8
- {sciform-0.36.0 → sciform-0.38.0}/docs/source/conf.py +2 -0
- {sciform-0.36.0 → sciform-0.38.0}/docs/source/examples.rst +97 -12
- {sciform-0.36.0 → sciform-0.38.0}/docs/source/fsml.rst +8 -3
- {sciform-0.36.0 → sciform-0.38.0}/docs/source/options.rst +180 -126
- {sciform-0.36.0 → sciform-0.38.0}/docs/source/usage.rst +23 -16
- {sciform-0.36.0 → sciform-0.38.0}/examples/fit_plot_no_sciform.py +4 -1
- {sciform-0.36.0 → sciform-0.38.0}/examples/fit_plot_with_sciform.py +4 -1
- {sciform-0.36.0 → sciform-0.38.0}/examples/jupyter_output_example.ipynb +9 -1
- sciform-0.38.0/examples/outputs/fit_plot_no_sciform.png +0 -0
- sciform-0.38.0/examples/outputs/fit_plot_with_sciform.png +0 -0
- sciform-0.38.0/examples/outputs/fit_plot_with_sciform_table.txt +9 -0
- sciform-0.38.0/examples/outputs/jupyter_output.png +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/pyproject.toml +14 -31
- sciform-0.38.0/ruff.toml +27 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/__init__.py +0 -3
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/api/formatter.py +12 -22
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/api/global_configuration.py +5 -9
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/format_utils/exponents.py +2 -3
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/format_utils/make_strings.py +32 -22
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/format_utils/numbers.py +13 -14
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/format_utils/rounding.py +17 -21
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/formatting/fsml.py +23 -8
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/formatting/number_formatting.py +68 -39
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/options/conversion.py +2 -1
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/options/finalized_options.py +2 -8
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/options/global_options.py +3 -5
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/options/input_options.py +2 -3
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/options/option_types.py +12 -46
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/options/populated_options.py +4 -6
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/options/validation.py +69 -59
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform.egg-info/PKG-INFO +68 -55
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform.egg-info/SOURCES.txt +3 -0
- sciform-0.38.0/src/sciform.egg-info/requires.txt +24 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/feature/test_options_printout.py +8 -11
- {sciform-0.36.0 → sciform-0.38.0}/tests/feature/test_output_conversion.py +8 -6
- {sciform-0.36.0 → sciform-0.38.0}/tests/feature/test_separators.py +3 -2
- {sciform-0.36.0 → sciform-0.38.0}/tests/feature/test_string_parser.py +2 -2
- {sciform-0.36.0 → sciform-0.38.0}/tests/feature/test_val_formatter.py +11 -14
- {sciform-0.36.0 → sciform-0.38.0}/tests/feature/test_val_fsml.py +12 -11
- {sciform-0.36.0 → sciform-0.38.0}/tests/feature/test_val_unc_formatter.py +35 -34
- {sciform-0.36.0 → sciform-0.38.0}/tests/feature/test_val_unc_fsml.py +231 -1
- {sciform-0.36.0 → sciform-0.38.0}/tests/unit/format_utils/test_exponent_utils.py +59 -18
- {sciform-0.36.0 → sciform-0.38.0}/tests/unit/format_utils/test_make_strings.py +4 -22
- {sciform-0.36.0 → sciform-0.38.0}/tests/unit/format_utils/test_number_utils.py +136 -129
- sciform-0.38.0/tests/unit/format_utils/test_rounding_utils.py +245 -0
- sciform-0.36.0/docs/requirements.txt +0 -4
- sciform-0.36.0/examples/outputs/fit_plot_no_sciform.png +0 -0
- sciform-0.36.0/examples/outputs/fit_plot_with_sciform.png +0 -0
- sciform-0.36.0/examples/outputs/fit_plot_with_sciform_table.txt +0 -9
- sciform-0.36.0/examples/outputs/jupyter_output.png +0 -0
- sciform-0.36.0/src/sciform.egg-info/requires.txt +0 -15
- sciform-0.36.0/tests/unit/format_utils/test_rounding_utils.py +0 -321
- {sciform-0.36.0 → sciform-0.38.0}/.github/workflows/python-publish.yml +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/.gitignore +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/.readthedocs.yaml +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/CODE_OF_CONDUCT.rst +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/CONTRIBUTING.rst +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/LICENSE +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/docs/Makefile +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/docs/make.bat +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/docs/source/_static/css/custom.css +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/docs/source/exp replacement.rst +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/docs/source/index.rst +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/docs/source/project.rst +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/examples/__init__.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/examples/data/fit_data.json +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/examples/outputs/fit_plot_no_sciform_table.txt +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/setup.cfg +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/api/__init__.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/api/formatted_number.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/api/scinum.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/format_utils/__init__.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/format_utils/exp_translations.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/format_utils/grouping.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/formatting/__init__.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/formatting/output_conversion.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/formatting/parser.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform/options/__init__.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform.egg-info/dependency_links.txt +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/src/sciform.egg-info/top_level.txt +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/__init__.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/feature/__init__.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/feature/test_global_config.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/feature/test_sci_num.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/test_docstrings.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/unit/__init__.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/unit/format_utils/__init__.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/unit/format_utils/test_exp_translations.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/unit/format_utils/test_grouping.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/unit/test_invalid_options.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/unit/test_options_strings.py +0 -0
- {sciform-0.36.0 → sciform-0.38.0}/tests/unit/test_validation.py +0 -0
@@ -16,7 +16,7 @@ jobs:
|
|
16
16
|
strategy:
|
17
17
|
fail-fast: false
|
18
18
|
matrix:
|
19
|
-
python-version: ["3.9", "3.10", "3.11", "3.12"]
|
19
|
+
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
|
20
20
|
|
21
21
|
steps:
|
22
22
|
- uses: actions/checkout@v4
|
@@ -28,22 +28,35 @@ jobs:
|
|
28
28
|
- name: Install dependencies
|
29
29
|
run: |
|
30
30
|
python -m pip install --upgrade pip
|
31
|
-
python -m pip install -e .[
|
31
|
+
python -m pip install -e .[test]
|
32
32
|
- name: Lint/format source code and docs
|
33
33
|
run: |
|
34
34
|
ruff check .
|
35
35
|
ruff format . --check
|
36
36
|
- name: Test source code and docs
|
37
37
|
run: |
|
38
|
-
coverage run
|
39
|
-
coverage report
|
40
|
-
coverage xml
|
38
|
+
coverage run --rcfile=coverage_feature.toml
|
39
|
+
coverage report --rcfile=coverage_feature.toml
|
40
|
+
coverage xml --rcfile=coverage_feature.toml
|
41
|
+
coverage run --rcfile=coverage_unit.toml
|
42
|
+
coverage report --rcfile=coverage_unit.toml
|
43
|
+
coverage xml --rcfile=coverage_unit.toml
|
41
44
|
python -m sphinx -b doctest docs/source/ docs/build/doctest/
|
42
|
-
- name: Upload coverage reports to Codecov
|
43
|
-
uses: codecov/codecov-action@
|
45
|
+
- name: Upload feature coverage reports to Codecov
|
46
|
+
uses: codecov/codecov-action@v4
|
44
47
|
with:
|
45
48
|
token: ${{ secrets.CODECOV_TOKEN }}
|
46
|
-
flags: ${{ matrix.python-version }}
|
47
|
-
|
49
|
+
flags: ${{ matrix.python-version }}, feature
|
50
|
+
file: ./cover/feature/coverage.xml
|
51
|
+
disable_search: true
|
52
|
+
fail_ci_if_error: true
|
53
|
+
verbose: true
|
54
|
+
- name: Upload unit coverage reports to Codecov
|
55
|
+
uses: codecov/codecov-action@v4
|
56
|
+
with:
|
57
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
58
|
+
flags: ${{ matrix.python-version }}, unit
|
59
|
+
file: ./cover/unit/coverage.xml
|
60
|
+
disable_search: true
|
48
61
|
fail_ci_if_error: true
|
49
62
|
verbose: true
|
@@ -14,6 +14,98 @@ Unreleased
|
|
14
14
|
|
15
15
|
----
|
16
16
|
|
17
|
+
0.38.0 (2024-11-02)
|
18
|
+
-------------------
|
19
|
+
|
20
|
+
Added
|
21
|
+
^^^^^
|
22
|
+
|
23
|
+
* Digits-past-the-decimal formatting (``round_mode="dec_place"``) is now
|
24
|
+
supported for value/uncertainty pairs.
|
25
|
+
[`#170 <https://github.com/jagerber48/sciform/issues/170>`_]
|
26
|
+
* ``round_mode="all"`` and ``round_mode="pdg"`` options can now be
|
27
|
+
accessed in the FSML using ``"A"`` and ``"P"`` flags.
|
28
|
+
[`#192 <https://github.com/jagerber48/sciform/issues/192>`_]
|
29
|
+
* Added a dark theme option (default on) for readthedocs documentation.
|
30
|
+
* Added code coverage breakdown for unit and feature tests to codecov
|
31
|
+
CI.
|
32
|
+
|
33
|
+
Changed
|
34
|
+
^^^^^^^
|
35
|
+
|
36
|
+
* **[BREAKING]** Rounding configuration has been refactored.
|
37
|
+
Previously ``round_mode`` accepted only ``"sig_fig"`` and
|
38
|
+
``"dec_place"`` string literals, all digits rounding mode was selected
|
39
|
+
by settings ``ndigits = AutoDigits`` and PDG rounding mode was
|
40
|
+
selected by setting ``pdg_sig_figs = True``.
|
41
|
+
Now ``round_mode`` accepts ``"sig_fig"``, ``"dec_place"``, ``"pdg"``
|
42
|
+
and ``"all"`` string literals, ``ndigits`` only accepts integers, and
|
43
|
+
the ``pdg_sig_figs`` option is removed.
|
44
|
+
``round_mode`` defaults to ``"all"`` and ``ndigits`` defaults to 2.
|
45
|
+
[`#185 <https://github.com/jagerber48/sciform/issues/185>`_]
|
46
|
+
* **[BREAKING]** Previously ``exp_val`` and ``ndigits`` accepted the
|
47
|
+
enums ``AutoExpVal`` and ``AutoDigits``.
|
48
|
+
Now ``exp_val`` accepts the string literal ``"auto"`` and ``ndigits``
|
49
|
+
only accepts integers.
|
50
|
+
[`#178 <https://github.com/jagerber48/sciform/issues/178>`_,
|
51
|
+
`#185 <https://github.com/jagerber48/sciform/issues/185>`_]
|
52
|
+
* Previously, significant figure rounding with a value of ``0`` would
|
53
|
+
result in trailing zeros being added in the formatted output.
|
54
|
+
For example, ``format(SciNum(0), "!3f")`` would give ``"0.00"`` or
|
55
|
+
``format(SciNum(0, float("nan")), "!2f")`` would give ``"0.0 ± nan"``.
|
56
|
+
This is not reasonable because zero doesn't have any significant
|
57
|
+
figures, so it doesn't make sense to add more trailing zeros to
|
58
|
+
indicate additional "fake" significant figures.
|
59
|
+
Now if zero is used for significant figure rounding it always appears
|
60
|
+
directly as ``"0"``.
|
61
|
+
E.g. ``format(SciNum(0), "!3f")`` gives ``"0"`` and
|
62
|
+
``format(SciNum(0, float("nan")), "!2f")`` gives ``"0 ± nan"``.
|
63
|
+
Note that, as before, trailing zeros may still be added to a zero
|
64
|
+
value if the uncertainty is less than one, e.g.
|
65
|
+
``format(SciNum(0, 0.0012), "!2f")`` gives ``"0.0000 ± 0.0012"``.
|
66
|
+
[`#189 <https://github.com/jagerber48/sciform/issues/189>`_]
|
67
|
+
* Previously the backend ``FinalizedOptions`` class ran a validation check on
|
68
|
+
itself after initialization.
|
69
|
+
This check has been removed in favor of not complicating the validation code
|
70
|
+
to handle the above change to ``exp_val`` and ``ndigits``.
|
71
|
+
Users never directly instantiate ``FinalizedOptions`` so this will hopefully
|
72
|
+
be no problem.
|
73
|
+
``InputOptions`` continue to be validated because this is the direct result
|
74
|
+
of user input.
|
75
|
+
``PopulatedOptions`` also must continue to be validated because options
|
76
|
+
conflicts due to the combination of user input with global options can arise
|
77
|
+
at options population time.
|
78
|
+
* Update ``ruff`` version in pre-commit config.
|
79
|
+
|
80
|
+
REMOVED
|
81
|
+
^^^^^^^
|
82
|
+
* The ``pdg_sig_figs`` options has been removed.
|
83
|
+
This option is now configured by setting ``round_mode="pdg"``.
|
84
|
+
|
85
|
+
FIXED
|
86
|
+
^^^^^
|
87
|
+
|
88
|
+
* The ``ruff`` version in the github CI now matches the ``ruff`` in the local precommit
|
89
|
+
configuration.
|
90
|
+
|
91
|
+
----
|
92
|
+
|
93
|
+
0.37.0 (2024-03-07)
|
94
|
+
-------------------
|
95
|
+
|
96
|
+
Added
|
97
|
+
^^^^^
|
98
|
+
|
99
|
+
* Added support for Python 3.8.
|
100
|
+
|
101
|
+
Changed
|
102
|
+
^^^^^^^
|
103
|
+
|
104
|
+
* Move ruff configuration out of ``pyproject.toml`` into ``ruff.toml``.
|
105
|
+
[`#163 <https://github.com/jagerber48/sciform/issues/163>`_]
|
106
|
+
|
107
|
+
----
|
108
|
+
|
17
109
|
0.36.0 (2024-03-07)
|
18
110
|
-------------------
|
19
111
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: sciform
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.38.0
|
4
4
|
Summary: A package for formatting numbers into scientific formatted strings.
|
5
5
|
Author-email: Justin Gerber <justin.gerber48@gmail.com>
|
6
6
|
Project-URL: homepage, https://github.com/jagerber48/sciform
|
@@ -9,6 +9,7 @@ Classifier: License :: OSI Approved :: MIT License
|
|
9
9
|
Classifier: Development Status :: 4 - Beta
|
10
10
|
Classifier: Programming Language :: Python
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
12
|
+
Classifier: Programming Language :: Python :: 3.8
|
12
13
|
Classifier: Programming Language :: Python :: 3.9
|
13
14
|
Classifier: Programming Language :: Python :: 3.10
|
14
15
|
Classifier: Programming Language :: Python :: 3.11
|
@@ -17,44 +18,56 @@ Classifier: Topic :: Education
|
|
17
18
|
Classifier: Topic :: Scientific/Engineering
|
18
19
|
Classifier: Topic :: Text Processing
|
19
20
|
Classifier: Topic :: Utilities
|
21
|
+
Requires-Python: >=3.8
|
20
22
|
Description-Content-Type: text/x-rst
|
21
23
|
License-File: LICENSE
|
22
|
-
Provides-Extra:
|
23
|
-
Requires-Dist:
|
24
|
-
Requires-Dist:
|
25
|
-
Requires-Dist: sphinx; extra == "
|
26
|
-
Requires-Dist: sphinx-
|
27
|
-
|
28
|
-
Requires-Dist:
|
24
|
+
Provides-Extra: docs
|
25
|
+
Requires-Dist: sphinx; extra == "docs"
|
26
|
+
Requires-Dist: sphinx-rtd-dark-mode; extra == "docs"
|
27
|
+
Requires-Dist: sphinx-rtd-theme; extra == "docs"
|
28
|
+
Requires-Dist: sphinx-toolbox; extra == "docs"
|
29
|
+
Provides-Extra: test
|
30
|
+
Requires-Dist: coverage[toml]; extra == "test"
|
31
|
+
Requires-Dist: numpy; extra == "test"
|
32
|
+
Requires-Dist: ruff==0.5.5; extra == "test"
|
33
|
+
Requires-Dist: sciform[docs]; extra == "test"
|
29
34
|
Provides-Extra: examples
|
30
35
|
Requires-Dist: numpy; extra == "examples"
|
31
36
|
Requires-Dist: scipy; extra == "examples"
|
32
37
|
Requires-Dist: matplotlib; extra == "examples"
|
33
38
|
Requires-Dist: tabulate; extra == "examples"
|
34
39
|
Requires-Dist: jupyter; extra == "examples"
|
40
|
+
Provides-Extra: all
|
41
|
+
Requires-Dist: sciform[docs]; extra == "all"
|
42
|
+
Requires-Dist: sciform[test]; extra == "all"
|
43
|
+
Requires-Dist: sciform[examples]; extra == "all"
|
35
44
|
|
36
|
-
..
|
45
|
+
.. container::
|
46
|
+
|
47
|
+
|Repo Status| |pyOpenSci| |Documentation Status| |PyPI Version| |PyPI Python| |Coverage Status| |GH Workflow Status| |Zenodo|
|
48
|
+
|
49
|
+
.. |Repo Status| image:: https://www.repostatus.org/badges/latest/wip.svg
|
37
50
|
:target: https://www.repostatus.org/#wip
|
38
51
|
:alt: Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.
|
39
|
-
.. image:: https://tinyurl.com/y22nb8up
|
52
|
+
.. |pyOpenSci| image:: https://tinyurl.com/y22nb8up
|
40
53
|
:target: https://github.com/pyOpenSci/software-review/issues/121
|
41
54
|
:alt: pyOpenSci
|
42
|
-
.. image:: https://img.shields.io/readthedocs/sciform?logo=readthedocs&link=https%3A%2F%2Fsciform.readthedocs.io%2Fen%2Fstable%2F
|
55
|
+
.. |Documentation Status| image:: https://img.shields.io/readthedocs/sciform?logo=readthedocs&link=https%3A%2F%2Fsciform.readthedocs.io%2Fen%2Fstable%2F
|
43
56
|
:target: https://sciform.readthedocs.io/en/stable/
|
44
57
|
:alt: Read the Docs
|
45
|
-
.. image:: https://img.shields.io/pypi/v/sciform?logo=pypi
|
58
|
+
.. |PyPI Version| image:: https://img.shields.io/pypi/v/sciform?logo=pypi
|
46
59
|
:target: https://pypi.org/project/sciform/
|
47
60
|
:alt: PyPI - Version
|
48
|
-
.. image:: https://img.shields.io/pypi/pyversions/sciform?logo=python
|
61
|
+
.. |PyPI Python| image:: https://img.shields.io/pypi/pyversions/sciform?logo=python
|
49
62
|
:target: https://pypi.org/project/sciform/
|
50
63
|
:alt: PyPI - Python Version
|
51
|
-
.. image:: https://img.shields.io/codecov/c/github/jagerber48/sciform?logo=codecov
|
64
|
+
.. |Coverage Status| image:: https://img.shields.io/codecov/c/github/jagerber48/sciform?logo=codecov
|
52
65
|
:target: https://codecov.io/gh/jagerber48/sciform
|
53
66
|
:alt: Codecov
|
54
|
-
.. image:: https://img.shields.io/github/actions/workflow/status/jagerber48/sciform/python-package.yml?logo=github%20actions
|
67
|
+
.. |GH Workflow Status| image:: https://img.shields.io/github/actions/workflow/status/jagerber48/sciform/python-package.yml?logo=github%20actions
|
55
68
|
:target: https://github.com/jagerber48/sciform/blob/main/.github/workflows/python-package.yml
|
56
69
|
:alt: GitHub Workflow Status
|
57
|
-
.. image:: https://zenodo.org/badge/645611310.svg
|
70
|
+
.. |Zenodo| image:: https://zenodo.org/badge/645611310.svg
|
58
71
|
:target: https://zenodo.org/doi/10.5281/zenodo.10645272
|
59
72
|
:alt: Zenodo
|
60
73
|
|
@@ -63,9 +76,9 @@ Requires-Dist: jupyter; extra == "examples"
|
|
63
76
|
sciform
|
64
77
|
#######
|
65
78
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
79
|
+
| **Repository:** `<https://github.com/jagerber48/sciform>`_
|
80
|
+
| **Documentation:** `<https://sciform.readthedocs.io/en/stable/>`_
|
81
|
+
| **PyPi:** `<https://pypi.org/project/sciform/>`_
|
69
82
|
|
70
83
|
We would greatly appreciate you taking the time to fill out the
|
71
84
|
`User Experience Survey <https://forms.gle/TkkKgywYyEMKu9U37>`_ to help
|
@@ -100,7 +113,7 @@ or install the latest development version from
|
|
100
113
|
|
101
114
|
python -m pip install git+https://github.com/jagerber48/sciform.git
|
102
115
|
|
103
|
-
``sciform`` is compatible with Python versions >=3.
|
116
|
+
``sciform`` is compatible with Python versions >=3.8.
|
104
117
|
|
105
118
|
=====
|
106
119
|
Usage
|
@@ -112,55 +125,55 @@ For many more details see
|
|
112
125
|
|
113
126
|
``sciform`` provides a wide variety of formatting options which can be
|
114
127
|
controlled when constructing ``Formatter`` objects which are then used
|
115
|
-
to format numbers into strings according to the selected options
|
116
|
-
|
117
|
-
>>> from sciform import Formatter
|
118
|
-
>>> formatter = Formatter(
|
119
|
-
... round_mode="dec_place", ndigits=6, upper_separator=" ", lower_separator=" "
|
120
|
-
... )
|
121
|
-
>>> print(formatter(51413.14159265359))
|
122
|
-
51 413.141 593
|
123
|
-
>>> formatter = Formatter(round_mode="sig_fig", ndigits=4, exp_mode="engineering")
|
124
|
-
>>> print(formatter(123456.78))
|
125
|
-
123.5e+03
|
128
|
+
to format numbers into strings according to the selected options::
|
129
|
+
|
130
|
+
>>> from sciform import Formatter
|
131
|
+
>>> formatter = Formatter(
|
132
|
+
... round_mode="dec_place", ndigits=6, upper_separator=" ", lower_separator=" "
|
133
|
+
... )
|
134
|
+
>>> print(formatter(51413.14159265359))
|
135
|
+
51 413.141 593
|
136
|
+
>>> formatter = Formatter(round_mode="sig_fig", ndigits=4, exp_mode="engineering")
|
137
|
+
>>> print(formatter(123456.78))
|
138
|
+
123.5e+03
|
126
139
|
|
127
140
|
Users can also format numbers by constructing ``SciNum`` objects and
|
128
141
|
using string formatting to format the ``SciNum`` instances according
|
129
|
-
to a custom FSML
|
142
|
+
to a custom FSML::
|
130
143
|
|
131
|
-
>>> from sciform import SciNum
|
132
|
-
>>> num = SciNum(12345)
|
133
|
-
>>> print(f"{num:!2f}")
|
134
|
-
12000
|
135
|
-
>>> print(f"{num:!2r}")
|
136
|
-
12e+03
|
144
|
+
>>> from sciform import SciNum
|
145
|
+
>>> num = SciNum(12345)
|
146
|
+
>>> print(f"{num:!2f}")
|
147
|
+
12000
|
148
|
+
>>> print(f"{num:!2r}")
|
149
|
+
12e+03
|
137
150
|
|
138
151
|
In addition to formatting individual numbers, ``sciform`` can be used
|
139
152
|
to format pairs of numbers as value/uncertainty pairs.
|
140
153
|
This can be done by passing two numbers into a ``Formatter`` call or by
|
141
|
-
using the ``SciNum`` object
|
154
|
+
using the ``SciNum`` object::
|
142
155
|
|
143
|
-
>>> formatter = Formatter(ndigits=2, upper_separator=" ", lower_separator=" ")
|
144
|
-
>>> print(formatter(123456.654321, 0.00345))
|
145
|
-
123 456.654 3 ± 0.003 4
|
146
|
-
>>> formatter = Formatter(ndigits=4, exp_mode="engineering")
|
147
|
-
>>> print(formatter(123456.654321, 0.00345))
|
148
|
-
(123.456654321 ± 0.000003450)e+03
|
156
|
+
>>> formatter = Formatter(ndigits=2, upper_separator=" ", lower_separator=" ")
|
157
|
+
>>> print(formatter(123456.654321, 0.00345))
|
158
|
+
123 456.654 3 ± 0.003 4
|
159
|
+
>>> formatter = Formatter(ndigits=4, exp_mode="engineering")
|
160
|
+
>>> print(formatter(123456.654321, 0.00345))
|
161
|
+
(123.456654321 ± 0.000003450)e+03
|
149
162
|
|
150
|
-
>>> num = SciNum(123456.654321, 0.00345)
|
151
|
-
>>> print(f"{num:!2f}")
|
152
|
-
123456.6543 ± 0.0034
|
153
|
-
>>> print(f"{num:!2f()}")
|
154
|
-
123456.6543(34)
|
163
|
+
>>> num = SciNum(123456.654321, 0.00345)
|
164
|
+
>>> print(f"{num:!2f}")
|
165
|
+
123456.6543 ± 0.0034
|
166
|
+
>>> print(f"{num:!2f()}")
|
167
|
+
123456.6543(34)
|
155
168
|
|
156
169
|
Note that the above examples demonstrate that ``sciform`` uses
|
157
170
|
`"round-to-even" <https://en.wikipedia.org/wiki/Rounding#Rounding_half_to_even>`_
|
158
|
-
rounding
|
171
|
+
rounding::
|
159
172
|
|
160
|
-
>>> print(f"{SciNum(865):!2}")
|
161
|
-
860
|
162
|
-
>>> print(f"{SciNum(875):!2}")
|
163
|
-
880
|
173
|
+
>>> print(f"{SciNum(865):!2}")
|
174
|
+
860
|
175
|
+
>>> print(f"{SciNum(875):!2}")
|
176
|
+
880
|
164
177
|
|
165
178
|
See `Formatting Options <https://sciform.readthedocs.io/en/stable/options.html>`_,
|
166
179
|
`Format Specification Mini-Language <https://sciform.readthedocs.io/en/stable/fsml.html>`_
|
@@ -1,25 +1,29 @@
|
|
1
|
-
..
|
1
|
+
.. container::
|
2
|
+
|
3
|
+
|Repo Status| |pyOpenSci| |Documentation Status| |PyPI Version| |PyPI Python| |Coverage Status| |GH Workflow Status| |Zenodo|
|
4
|
+
|
5
|
+
.. |Repo Status| image:: https://www.repostatus.org/badges/latest/wip.svg
|
2
6
|
:target: https://www.repostatus.org/#wip
|
3
7
|
:alt: Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.
|
4
|
-
.. image:: https://tinyurl.com/y22nb8up
|
8
|
+
.. |pyOpenSci| image:: https://tinyurl.com/y22nb8up
|
5
9
|
:target: https://github.com/pyOpenSci/software-review/issues/121
|
6
10
|
:alt: pyOpenSci
|
7
|
-
.. image:: https://img.shields.io/readthedocs/sciform?logo=readthedocs&link=https%3A%2F%2Fsciform.readthedocs.io%2Fen%2Fstable%2F
|
11
|
+
.. |Documentation Status| image:: https://img.shields.io/readthedocs/sciform?logo=readthedocs&link=https%3A%2F%2Fsciform.readthedocs.io%2Fen%2Fstable%2F
|
8
12
|
:target: https://sciform.readthedocs.io/en/stable/
|
9
13
|
:alt: Read the Docs
|
10
|
-
.. image:: https://img.shields.io/pypi/v/sciform?logo=pypi
|
14
|
+
.. |PyPI Version| image:: https://img.shields.io/pypi/v/sciform?logo=pypi
|
11
15
|
:target: https://pypi.org/project/sciform/
|
12
16
|
:alt: PyPI - Version
|
13
|
-
.. image:: https://img.shields.io/pypi/pyversions/sciform?logo=python
|
17
|
+
.. |PyPI Python| image:: https://img.shields.io/pypi/pyversions/sciform?logo=python
|
14
18
|
:target: https://pypi.org/project/sciform/
|
15
19
|
:alt: PyPI - Python Version
|
16
|
-
.. image:: https://img.shields.io/codecov/c/github/jagerber48/sciform?logo=codecov
|
20
|
+
.. |Coverage Status| image:: https://img.shields.io/codecov/c/github/jagerber48/sciform?logo=codecov
|
17
21
|
:target: https://codecov.io/gh/jagerber48/sciform
|
18
22
|
:alt: Codecov
|
19
|
-
.. image:: https://img.shields.io/github/actions/workflow/status/jagerber48/sciform/python-package.yml?logo=github%20actions
|
23
|
+
.. |GH Workflow Status| image:: https://img.shields.io/github/actions/workflow/status/jagerber48/sciform/python-package.yml?logo=github%20actions
|
20
24
|
:target: https://github.com/jagerber48/sciform/blob/main/.github/workflows/python-package.yml
|
21
25
|
:alt: GitHub Workflow Status
|
22
|
-
.. image:: https://zenodo.org/badge/645611310.svg
|
26
|
+
.. |Zenodo| image:: https://zenodo.org/badge/645611310.svg
|
23
27
|
:target: https://zenodo.org/doi/10.5281/zenodo.10645272
|
24
28
|
:alt: Zenodo
|
25
29
|
|
@@ -28,9 +32,9 @@
|
|
28
32
|
sciform
|
29
33
|
#######
|
30
34
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
| **Repository:** `<https://github.com/jagerber48/sciform>`_
|
36
|
+
| **Documentation:** `<https://sciform.readthedocs.io/en/stable/>`_
|
37
|
+
| **PyPi:** `<https://pypi.org/project/sciform/>`_
|
34
38
|
|
35
39
|
We would greatly appreciate you taking the time to fill out the
|
36
40
|
`User Experience Survey <https://forms.gle/TkkKgywYyEMKu9U37>`_ to help
|
@@ -65,7 +69,7 @@ or install the latest development version from
|
|
65
69
|
|
66
70
|
python -m pip install git+https://github.com/jagerber48/sciform.git
|
67
71
|
|
68
|
-
``sciform`` is compatible with Python versions >=3.
|
72
|
+
``sciform`` is compatible with Python versions >=3.8.
|
69
73
|
|
70
74
|
=====
|
71
75
|
Usage
|
@@ -77,55 +81,55 @@ For many more details see
|
|
77
81
|
|
78
82
|
``sciform`` provides a wide variety of formatting options which can be
|
79
83
|
controlled when constructing ``Formatter`` objects which are then used
|
80
|
-
to format numbers into strings according to the selected options
|
81
|
-
|
82
|
-
>>> from sciform import Formatter
|
83
|
-
>>> formatter = Formatter(
|
84
|
-
... round_mode="dec_place", ndigits=6, upper_separator=" ", lower_separator=" "
|
85
|
-
... )
|
86
|
-
>>> print(formatter(51413.14159265359))
|
87
|
-
51 413.141 593
|
88
|
-
>>> formatter = Formatter(round_mode="sig_fig", ndigits=4, exp_mode="engineering")
|
89
|
-
>>> print(formatter(123456.78))
|
90
|
-
123.5e+03
|
84
|
+
to format numbers into strings according to the selected options::
|
85
|
+
|
86
|
+
>>> from sciform import Formatter
|
87
|
+
>>> formatter = Formatter(
|
88
|
+
... round_mode="dec_place", ndigits=6, upper_separator=" ", lower_separator=" "
|
89
|
+
... )
|
90
|
+
>>> print(formatter(51413.14159265359))
|
91
|
+
51 413.141 593
|
92
|
+
>>> formatter = Formatter(round_mode="sig_fig", ndigits=4, exp_mode="engineering")
|
93
|
+
>>> print(formatter(123456.78))
|
94
|
+
123.5e+03
|
91
95
|
|
92
96
|
Users can also format numbers by constructing ``SciNum`` objects and
|
93
97
|
using string formatting to format the ``SciNum`` instances according
|
94
|
-
to a custom FSML
|
98
|
+
to a custom FSML::
|
95
99
|
|
96
|
-
>>> from sciform import SciNum
|
97
|
-
>>> num = SciNum(12345)
|
98
|
-
>>> print(f"{num:!2f}")
|
99
|
-
12000
|
100
|
-
>>> print(f"{num:!2r}")
|
101
|
-
12e+03
|
100
|
+
>>> from sciform import SciNum
|
101
|
+
>>> num = SciNum(12345)
|
102
|
+
>>> print(f"{num:!2f}")
|
103
|
+
12000
|
104
|
+
>>> print(f"{num:!2r}")
|
105
|
+
12e+03
|
102
106
|
|
103
107
|
In addition to formatting individual numbers, ``sciform`` can be used
|
104
108
|
to format pairs of numbers as value/uncertainty pairs.
|
105
109
|
This can be done by passing two numbers into a ``Formatter`` call or by
|
106
|
-
using the ``SciNum`` object
|
110
|
+
using the ``SciNum`` object::
|
107
111
|
|
108
|
-
>>> formatter = Formatter(ndigits=2, upper_separator=" ", lower_separator=" ")
|
109
|
-
>>> print(formatter(123456.654321, 0.00345))
|
110
|
-
123 456.654 3 ± 0.003 4
|
111
|
-
>>> formatter = Formatter(ndigits=4, exp_mode="engineering")
|
112
|
-
>>> print(formatter(123456.654321, 0.00345))
|
113
|
-
(123.456654321 ± 0.000003450)e+03
|
112
|
+
>>> formatter = Formatter(ndigits=2, upper_separator=" ", lower_separator=" ")
|
113
|
+
>>> print(formatter(123456.654321, 0.00345))
|
114
|
+
123 456.654 3 ± 0.003 4
|
115
|
+
>>> formatter = Formatter(ndigits=4, exp_mode="engineering")
|
116
|
+
>>> print(formatter(123456.654321, 0.00345))
|
117
|
+
(123.456654321 ± 0.000003450)e+03
|
114
118
|
|
115
|
-
>>> num = SciNum(123456.654321, 0.00345)
|
116
|
-
>>> print(f"{num:!2f}")
|
117
|
-
123456.6543 ± 0.0034
|
118
|
-
>>> print(f"{num:!2f()}")
|
119
|
-
123456.6543(34)
|
119
|
+
>>> num = SciNum(123456.654321, 0.00345)
|
120
|
+
>>> print(f"{num:!2f}")
|
121
|
+
123456.6543 ± 0.0034
|
122
|
+
>>> print(f"{num:!2f()}")
|
123
|
+
123456.6543(34)
|
120
124
|
|
121
125
|
Note that the above examples demonstrate that ``sciform`` uses
|
122
126
|
`"round-to-even" <https://en.wikipedia.org/wiki/Rounding#Rounding_half_to_even>`_
|
123
|
-
rounding
|
127
|
+
rounding::
|
124
128
|
|
125
|
-
>>> print(f"{SciNum(865):!2}")
|
126
|
-
860
|
127
|
-
>>> print(f"{SciNum(875):!2}")
|
128
|
-
880
|
129
|
+
>>> print(f"{SciNum(865):!2}")
|
130
|
+
860
|
131
|
+
>>> print(f"{SciNum(875):!2}")
|
132
|
+
880
|
129
133
|
|
130
134
|
See `Formatting Options <https://sciform.readthedocs.io/en/stable/options.html>`_,
|
131
135
|
`Format Specification Mini-Language <https://sciform.readthedocs.io/en/stable/fsml.html>`_
|
@@ -0,0 +1,12 @@
|
|
1
|
+
[tool.coverage.run]
|
2
|
+
source = ["src/sciform/"]
|
3
|
+
command_line = "-m unittest discover tests/feature/"
|
4
|
+
dynamic_context = "test_function"
|
5
|
+
data_file = "cover/feature/.coverage"
|
6
|
+
|
7
|
+
[tool.coverage.html]
|
8
|
+
directory = "cover/feature/html/"
|
9
|
+
show_contexts = true
|
10
|
+
|
11
|
+
[tool.coverage.xml]
|
12
|
+
output = "cover/feature/coverage.xml"
|
@@ -0,0 +1,13 @@
|
|
1
|
+
[tool.coverage.run]
|
2
|
+
#source = ["src/sciform/format_utils/"]
|
3
|
+
source = ["src/sciform/"]
|
4
|
+
command_line = "-m unittest discover tests/unit/"
|
5
|
+
dynamic_context = "test_function"
|
6
|
+
data_file = "cover/unit/.coverage"
|
7
|
+
|
8
|
+
[tool.coverage.html]
|
9
|
+
directory = "cover/unit/html/"
|
10
|
+
show_contexts = true
|
11
|
+
|
12
|
+
[tool.coverage.xml]
|
13
|
+
output = "cover/unit/coverage.xml"
|
@@ -0,0 +1 @@
|
|
1
|
+
.[docs]
|
@@ -2,7 +2,7 @@ API
|
|
2
2
|
###
|
3
3
|
|
4
4
|
.. module:: sciform
|
5
|
-
:
|
5
|
+
:no-index:
|
6
6
|
|
7
7
|
Formatting
|
8
8
|
==========
|
@@ -28,13 +28,6 @@ Options
|
|
28
28
|
.. autoclass:: PopulatedOptions()
|
29
29
|
:members:
|
30
30
|
|
31
|
-
Auto Options
|
32
|
-
============
|
33
|
-
|
34
|
-
.. autoclass:: AutoExpVal()
|
35
|
-
|
36
|
-
.. autoclass:: AutoDigits()
|
37
|
-
|
38
31
|
Global Configuration
|
39
32
|
====================
|
40
33
|
|
@@ -24,6 +24,7 @@ extensions = [
|
|
24
24
|
"sphinx.ext.doctest",
|
25
25
|
"sphinx.ext.todo",
|
26
26
|
"sphinx_toolbox.collapse",
|
27
|
+
"sphinx_rtd_dark_mode",
|
27
28
|
]
|
28
29
|
|
29
30
|
templates_path = ["_templates"]
|
@@ -39,6 +40,7 @@ html_theme_options = {
|
|
39
40
|
}
|
40
41
|
todo_include_todos = True
|
41
42
|
todo_emit_warnings = True
|
43
|
+
default_dark_mode = True
|
42
44
|
|
43
45
|
autodoc_member_order = "bysource"
|
44
46
|
|