8000 bpo-45995: add "z" format specifer to coerce negative 0 to zero by belm0 · Pull Request #30049 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

bpo-45995: add "z" format specifer to coerce negative 0 to zero #30049

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 25 commits into from
Apr 11, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
a633e88
bpo-45995: add "z" format specifer to coerce negative 0 to zero
belm0 Dec 7, 2021
636da05
formatting
belm0 Dec 11, 2021
3f4085d
implementation for Decimal
belm0 Dec 13, 2021
68a049e
📜🤖 Added by blurb_it.
blurb-it[bot] Dec 14, 2021
ad32be5
consistent flag names
belm0 Dec 14, 2021
3dcaf5f
add test case for integer value with z option
belm0 Feb 3, 2022
6b9ab3b
reference pending PEP
belm0 Feb 4, 2022
e243568
Apply some formatting and doc suggestions
belm0 Mar 16, 2022
be4fda2
revise "z" option description
belm0 Mar 19, 2022
043d76a
add test cases for explicit sign option
belm0 Mar 19, 2022
104e023
revise tests for format options expected to fail on floats
belm0 Mar 19, 2022
61c64df
"float presentation" -> "floating-point presentation"
belm0 Mar 19, 2022
76d61ae
news file terminating newline
belm0 Mar 19, 2022
33fe72c
add test coverage for Decimal bugs
belm0 Mar 19, 2022
9393136
Decimal: handle 'z' fill character correctly
belm0 Mar 21, 2022
f88f7fc
Decimal: const qualifier on fmt variable
belm0 Mar 21, 2022
20c9cf1
fix rounding of 'e', 'g', and '%' presentation types for Decimal
belm0 Mar 23, 2022
bf1a891
fix Decimal directed rounding
belm0 Mar 23, 2022
3f5b392
consistency among tests
belm0 Mar 23, 2022
8d7a745
fix stack-use-after-scope sanitizer error
belm0 Mar 23, 2022
2a24e61
clarify Decimal strategy
belm0 Mar 23, 2022
0cbff6a
fix Decimal format parsing
belm0 Apr 6, 2022
8e7b51c
fix Decimal when no precision is specified
belm0 Apr 7, 2022
418ab76
fix comment typo
belm0 Apr 7, 2022
3ee6f6b
add attribution to news blurb
belm0 Apr 11, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
consistent flag names
  • Loading branch information
belm0 committed Mar 19, 2022
commit ad32be5e37685388b6f487e353242b9fa593e843
4 changes: 2 additions & 2 deletions Lib/_pydecimal.py
Original file line number Diff line number Diff line change
Expand Up @@ -3795,7 +3795,7 @@ def __format__(self, specifier, context=None, _localeconv=None):
# represented in fixed point; rescale them to 0e0.
if not self and self._exp > 0 and spec['type'] in 'fF%':
self = self._rescale(0, rounding)
if not self and spec['coerce_neg_0'] and self._sign:
if not self and spec['no_neg_0'] and self._sign:
adjusted_sign = 0
else:
adjusted_sign = self._sign
Expand Down Expand Up @@ -6155,7 +6155,7 @@ def _convert_for_comparison(self, other, equality_op=False):
(?P<align>[<>=^])
)?
(?P<sign>[-+ ])?
(?P<coerce_neg_0>z)?
(?P<no_neg_0>z)?
(?P<alt>\#)?
(?P<zeropad>0)?
(?P<minimumwidth>(?!0)\d+)?
Expand Down
6 changes: 3 additions & 3 deletions Modules/_decimal/_decimal.c
Original file line number Diff line number Diff line change
Expand Up @@ -3225,7 +3225,7 @@ dec_format(PyObject *dec, PyObject *args)
char *decstring = NULL;
uint32_t status = 0;
int replace_fillchar = 0;
int coerce_neg_0 = 0;
int no_neg_0 = 0;
Py_ssize_t size;


Expand All @@ -3251,7 +3251,7 @@ dec_format(PyObject *dec, PyObject *args)
}
char *z_start = strchr(fmt, 'z');
if (z_start != NULL) {
coerce_neg_0 = 1;
no_neg_0 = 1;
size_t z_index = z_start - fmt;
if (fmt_copy == NULL) {
fmt = fmt_copy = dec_strdup(fmt, size);
Expand Down Expand Up @@ -3326,7 +3326,7 @@ dec_format(PyObject *dec, PyObject *args)
}
}

if (coerce_neg_0 && mpd_isnegative(MPD(dec)) && !mpd_isspecial(MPD(dec))) {
if (no_neg_0 && mpd_isnegative(MPD(dec)) && !mpd_isspecial(MPD(dec))) {
/* round into a temporary and clear sign if result is zero */
mpd_uint_t dt[MPD_MINALLOC_MAX];
mpd_t tmp = {MPD_STATIC|MPD_STATIC_DATA,0,0,0,MPD_MINALLOC_MAX,dt};
Expand Down
0