Changelog

Python

next

Release

date

XXXXXXXX

Core

and

Builtins

Fix

a

crash

when

sorting

very

long

lists

Patch

by

Stephan

Hohe

clang

Memory

Sanitizer

build

instrumentation

was

added

to

work

around

false

positives

from

posix

socket

time

and

Fix

segfaults

and

SystemError

s

when

deleting

certain

attributes

Patch

by

Zackery

Spytz

Library

Proper

format

calltip

when

the

function

has

no

docstring

Fixed

a

SyntaxWarning

invalid

escape

sequence

in

Patch

by

Mickaël

Schoentgen

The

crypt

module

now

internally

uses

the

library

function

instead

of

crypt

when

available

Speedup

building

enums

by

value

eg

TextTestRunner

of

unittestrunner

now

uses

rather

than

timetime

to

measure

the

execution

time

of

a

test

timetime

can

go

backwards

whereas

is

monotonic

Fixed

reference

leaks

in

xmletreeElementTreeTreeBuilder

in

case

of

unfinished

building

of

the

tree

in

particular

when

an

error

was

raised

during

parsing

XML

Copy

command

line

that

was

passed

to

CreateProcessW

since

this

function

can

change

the

content

of

the

input

buffer

Set

on

mock

for

inspect

to

get

signature

Patch

by

Karthikeyan

Singaravelan

of

distutilsutils

now

catchs

KeyError

on

calling

pwdgetpwuid

dont

create

the

HOME

environment

variable

in

this

case

Associate

mjs

file

extension

with

applicationjavascript

MIME

Type

Documentation

Improve

example

of

iter

with

sentinel

argument

Tests

Fix

a

race

condition

in

of

create

directly

the

thread

with

SIGALRM

signal

blocked

rather

than

blocking

the

signal

later

from

the

thread

Previously

it

was

possible

that

the

thread

gets

the

signal

before

the

signal

is

blocked

Fix

use

multiprocessingPool

with

a

context

manager

and

then

explicitly

join

the

pool

Rename

testbisect

module

to

to

avoid

conflict

with

bisect

module

when

running

directly

a

test

like

python

Replace

timetime

with

timemonotonic

in

tests

to

measure

time

delta

no

longer

raise

TestDidNotRun

if

the

test

result

contains

skipped

tests

The

exception

is

now

only

raised

if

no

test

have

been

run

and

no

test

have

been

skipped

Add

testcase

to

check

unicode

literal

Added

test

demonstrating

doublepatching

of

an

instance

method

Patch

by

Anthony

Sottile

Build

Fix

incorrect

Solaris

ifdef

checks

to

look

for

instead

of

sun

when

compiling

make

profileopt

no

longer

replaces

with

CFLAGS

It

now

adds

profileguided

optimization

PGO

flags

to

existing

flags

are

kept

Avoid

leaking

the

linker

flags

from

Link

Time

Optimizations

LTO

into

distutils

when

compiling

C

extensions

Windows

Fix

being

added

to

embeddable

distro

multiple

times

Update

Windows

build

to

use

Tcl

and

Tk

macOS

Gray

out

Code

Context

menu

entry

when

its

not

applicable

IDLE

Fix

imports

in

idlelibwindow

Use

ttk

Frame

for

ttk

widgets

Fix

erroneous

smart

indents

and

newlines

in

IDLE

Shell

Find

Selection

now

works

when

selection

not

found

Update

use

PEP

names

and

ttk

widgets

make

some

objects

global

and

add

tests

Add

PreviousNext

History

entries

to

Shell

menu

Squeezer

now

properly

counts

wrapped

lines

before

newlines

Document

the

IDLE

editor

code

context

feature

Add

some

internal

references

within

the

IDLE

doc

The

Code

Context

menu

label

now

toggles

between

ShowHide

Code

Context

The

Zoom

Height

menu

now

toggles

between

ZoomRestore

Height

Zoom

Height

has

moved

from

the

Window

menu

to

the

Options

menu

C

API

Conditionally

declare

new

in

based

on

Patch

by

Arthur

Neufeld

Python

final

Release

date

Library

Associate

mjs

file

extension

with

applicationjavascript

MIME

Type

Build

make

profileopt

no

longer

replaces

with

CFLAGS

It

now

adds

profileguided

optimization

PGO

flags

to

existing

flags

are

kept

Avoid

leaking

the

linker

flags

from

Link

Time

Optimizations

LTO

into

distutils

when

compiling

C

extensions

C

API

Conditionally

declare

new

in

based

on

Patch

by

Arthur

Neufeld

Python

release

candidate

Release

date

Security

The

I

command

line

option

run

Python

in

isolated

mode

is

now

also

copied

by

the

multiprocessing

and

distutils

modules

when

spawning

child

processes

Previously

only

E

and

s

options

enabled

by

I

were

copied

The

xmlsax

and

xmldomdomreg

no

longer

use

environment

variables

to

override

parser

implementations

when

is

set

by

E

or

I

arguments

Core

and

Builtins

Fixed

error

handling

in

pickling

methods

when

fail

to

look

up

builtin

getattr

Fix

various

issues

with

memory

allocation

error

handling

Patch

by

Zackery

Spytz

Internal

attributes

names

of

and

unittestmockMagicProxy

name

parent

are

now

prefixed

with

in

order

to

prevent

clashes

with

widely

used

object

attributes

Fixed

minor

typo

in

test

function

name

Fixed

the

code

page

decoder

for

input

longer

than

GiB

containing

undecodable

bytes

Fix

environment

variable

only

coerce

the

C

locale

if

the

locale

is

C

For

strformat

and

methods

for

nonASCII

decimal

point

when

using

the

n

formatter

Fix

a

possible

segfault

involving

a

newlycreated

coroutine

Patch

by

Zackery

Spytz

Fixed

an

out

of

bounds

memory

access

when

parsing

a

truncated

unicode

escape

sequence

at

the

end

of

a

string

such

as

N

It

would

read

one

byte

beyond

the

end

of

the

memory

allocation

The

interpreter

and

extension

modules

have

had

annotations

added

so

that

they

work

properly

under

clangs

Memory

Sanitizer

A

new

configure

flag

withmemorysanitizer

has

been

added

to

make

test

builds

of

this

nature

easier

to

perform

Fix

an

off

by

one

error

in

the

bytecode

peephole

optimizer

where

it

could

read

bytes

beyond

the

end

of

bounds

of

an

array

when

removing

unreachable

code

This

bug

was

present

in

every

release

of

Python

and

until

now

Clarify

in

the

docstrings

of

os

methods

that

pathlike

objects

are

also

accepted

as

input

parameters

socket

Fix

offbyone

bug

in

length

check

for

name

and

type

bytes

and

bytearray

constructors

no

longer

convert

unexpected

exceptions

eg

MemoryError

and

KeyboardInterrupt

to

TypeError

Fixed

crash

in

bytes

when

the

list

argument

is

mutated

while

it

is

iterated

Fix

a

possible

pointer

dereference

in

Patch

by

Zackery

Spytz

Do

not

assume

signed

integer

overflow

behavior

C

undefined

behavior

when

performing

set

hash

table

resizing

Library

Fix

xmldomminidom

cloneNode

on

a

document

with

an

entity

pass

the

correct

arguments

to

the

user

data

handler

of

an

entity

When

a

Mock

instance

was

used

to

wrap

an

object

if

is

used

in

one

of

the

mocks

of

it

methods

dont

call

the

original

implementation

and

return

the

result

of

using

the

side

effect

the

same

way

that

it

is

done

with

Revert

the

fix

for

this

issue

previously

released

in

pending

further

investigation

Fix

a

reference

issue

inside

multiprocessingPool

that

caused

the

pool

to

remain

alive

if

it

was

deleted

without

being

closed

or

terminated

explicitly

posixpathexpanduser

now

returns

the

input

path

unchanged

if

the

HOME

environment

variable

is

not

set

and

the

current

user

has

no

home

directory

if

the

current

user

identifier

doesnt

exist

in

the

password

database

This

change

fix

the

site

module

if

the

current

user

doesnt

exist

in

the

password

database

if

the

user

has

no

home

directory

Fix

a

bug

in

selectselect

where

in

some

cases

the

file

descriptor

sequences

were

returned

unmodified

after

a

signal

interruption

even

though

the

file

descriptors

might

not

be

ready

yet

selectselect

will

now

always

return

empty

lists

if

a

timeout

has

occurred

Patch

by

Oran

Avraham

Enable

on

Windows

for

proactor

asyncio

event

loop

Add

generic

version

of

collectionsOrderedDict

to

the

typing

module

Patch

by

Ismo

Toijala

Fixed

possible

crash

in

osutime

on

Windows

when

pass

incorrect

arguments

Fix

ResourceWarning

in

platformdist

on

SuSE

and

Caldera

OpenLinux

Patch

by

Ville

Skyttä

Fix

regression

in

webbrowser

where

default

browsers

may

be

preferred

over

browsers

in

the

BROWSER

environment

variable

localelocaleconv

now

sets

temporarily

the

locale

to

the

locale

if

the

two

locales

are

different

and

monetary

strings

are

nonASCII

This

temporary

change

affects

other

threads

Update

ensurepip

to

install

pip

and

setuptools

Recursively

check

arguments

when

testing

for

equality

of

unittestmockcall

objects

and

add

note

that

tracking

of

parameters

used

to

create

ancestors

of

mocks

in

is

not

possible

The

warnings

module

now

suggests

to

enable

tracemalloc

if

the

source

is

specified

the

tracemalloc

module

is

available

but

tracemalloc

is

not

tracing

memory

allocations

Modify

the

following

fnctl

function

to

retry

if

interrupted

by

a

signal

EINTR

flock

lockf

fnctl

Fix

incorrect

parsing

of

s

translate

argument

Improve

difflibSequenceManagerget_matching_blocks

doc

by

adding

nonoverlapping

and

changing

to

now

exits

immediately

if

its

shutdown

method

is

called

while

it

is

polling

for

new

events

Fix

ntpathabspath

regression

where

it

didnt

remove

a

trailing

separator

on

Windows

Patch

by

Tim

Graham

Fixed

a

leak

in

Tkinter

when

pass

the

Python

wrapper

around

back

to

TclTk

Fixed

references

leaks

when

call

the

method

of

xmletreeElementTreeElement

in

the

C

implementation

for

already

initialized

element

Verify

the

value

for

the

parameter

s

of

the

cProfile

CLI

Patch

by

Robert

Kuska

dataclasses

now

handle

recursive

reprs

without

raising

RecursionError

The

execfile

fixer

now

opens

the

file

with

mode

rb

Patch

by

Zackery

Spytz

pydoc

now

supports

aliases

not

only

to

methods

defined

in

the

end

class

but

also

to

inherited

methods

The

docstring

is

not

duplicated

for

aliases

Methods

find

findtext

and

findall

of

the

Element

class

in

the

xmletreeElementTree

module

are

now

able

to

find

children

which

are

instances

of

Element

subclasses

Fix

TclError

in

Patch

by

Juliette

Monsel

Adding

to

cgiFieldStorage

to

make

DOS

attacks

harder

by

limiting

the

number

of

MiniFieldStorage

objects

created

by

FieldStorage

The

environment

variable

no

longer

overrides

the

value

of

the

argument

to

and

determines

its

default

value

instead

ZIP

files

created

by

distutils

will

now

include

entries

for

directories

Fix

bug

that

prevented

using

on

mock

instances

with

deleted

attributes

raise

ValueError

if

returned

and

TypeError

if

nonmember

is

returned

Fix

possible

mojibake

in

the

error

message

of

pwdgetpwnam

and

grpgetgrnam

using

string

representation

because

of

invisible

characters

or

trailing

whitespaces

Patch

by

William

Grzybowski

OrderedDict

iterators

are

not

exhausted

during

pickling

anymore

Patch

by

Sergey

Fedoseev

methods

raises

TypeError

when

unhashable

objects

are

passed

as

callable

These

methods

now

dont

pass

such

objects

to

SQLite

API

Previous

behavior

could

lead

to

segfaults

Patch

by

Sergey

Fedoseev

compileall

import

ProcessPoolExecutor

only

when

needed

preventing

hangs

on

low

resource

platforms

Implemented

unpickling

instances

of

datetime

date

and

time

pickled

by

Python

should

be

used

for

successful

decoding

Documentation

Remove

mention

of

typingio

and

typingre

Their

types

should

be

imported

from

typing

directly

Fix

the

documentation

about

an

unexisting

attribute

in

the

frame

object

Patch

by

Stéphane

Wirtel

Fix

the

documentation

with

the

role

exc

for

the

appropriated

exception

Patch

by

Stéphane

Wirtel

Rename

documentation

for

emailutils

to

emailutilsrst

Use

instead

of

the

deprecated

Sphinx

function

Create

availability

directive

for

documentation

Original

patch

by

Georg

Brandl

Document

getargspec

and

as

deprecated

in

their

respective

docstring

and

include

version

since

deprecation

in

DeprecationWarning

message

Update

the

faqwindowshtml

to

use

the

py

command

from

PEP

instead

of

python

Tests

may

crash

on

recent

versions

of

macOS

Until

the

issue

is

resolved

skip

the

test

on

macOS

Modify

to

use

the

certificate

set

from

the

test

directory

Fix

mktime

overflow

error

in

run

and

with

a

specific

timezone

After

several

reports

that

does

not

work

properly

on

macOS

and

since

gdb

is

not

shipped

by

default

anymore

is

now

skipped

on

macOS

when

LLVM

Clang

has

been

used

to

compile

Python

Patch

by

Lysandros

Nikolaou

regrtest

issue

a

warning

when

no

tests

have

been

executed

in

a

particular

test

file

Also

a

new

final

result

state

is

issued

if

no

test

have

been

executed

across

all

test

files

Patch

by

Pablo

Galindo

Build

The

Windows

installer

MSI

now

also

install

internal

header

files

Includeinternal

subdirectory

When

building

Python

with

clang

and

LTO

LTO

flags

are

no

longer

passed

into

CFLAGS

to

build

thirdparty

C

extensions

through

distutils

Fix

a

compiler

error

when

statically

linking

pyexpat

in

ModulesSetup

Restores

the

use

of

pyexpatnsh

to

isolate

our

embedded

copy

of

the

expat

C

library

so

that

its

symbols

do

not

conflict

at

link

or

dynamic

loading

time

with

an

embedding

application

or

other

extension

modules

with

their

own

version

of

libexpat

Have

withlto

works

correctly

with

clang

Fix

an

undefined

behaviour

in

the

pthread

implementation

of

add

a

function

wrapper

to

always

return

Windows

Updates

Windows

build

to

OpenSSL

venv

on

Windows

will

now

use

a

pythonexe

redirector

rather

than

copying

the

actual

binaries

from

the

base

environment

Adds

support

for

building

a

Windows

App

Store

package

Remove

module

and

use

vswhereexe

instead

Fixes

exit

code

of

list

version

arguments

for

pyexe

Fix

usage

of

GetLastError

instead

of

errno

in

osexecve

and

ostruncate

macOS

Update

macOS

installer

to

use

TclTk

NOTE

This

change

was

reverted

for

the

released

pythonorg

macOS

installers

due

to

regressions

found

in

Tk

For

now

the

installers

provide

TclTk

Update

macOS

installer

to

use

OpenSSL

Properly

guard

the

use

of

the

et

al

macros

in

timemodule

on

macOS

On

macOS

fix

reading

from

and

writing

into

a

file

with

a

size

larger

than

GiB

IDLE

Where

appropriate

use

macOS

in

idlelib

On

macOS

warn

if

the

system

preference

Prefer

tabs

when

opening

documents

is

set

to

Always

Document

two

IDLE

on

MacOS

issues

The

System

Preferences

Dock

prefer

tabs

always

setting

disables

some

IDLE

features

Menus

are

a

bit

different

than

as

described

for

Windows

and

Linux

Remove

unused

imports

from

libidlelib

Document

that

IDLEs

shell

has

no

line

limit

A

program

that

runs

indefinitely

can

overfill

memory

Explain

how

IDLEs

Shell

displays

output

Improve

the

doc

about

IDLE

running

user

code

The

section

is

renamed

from

IDLE

console

differences

is

renamed

Running

user

code

It

mostly

covers

the

implications

of

using

custom

sysstdxxx

objects

Add

IDLE

doc

subsection

explaining

editor

windows

Topics

include

opening

title

and

status

bar

py

extension

and

running

Document

the

IDLE

document

viewer

in

the

IDLE

doc

Add

a

paragraph

in

Help

and

preferences

Help

sources

subsection

Update

docstring

We

now

use

git

and

backporting

instead

of

hg

and

forward

merging

Update

idlelib

help

files

for

the

current

doc

build

The

main

change

is

the

elimination

of

chaptersection

numbers

ToolsDemos

pythongdbpy

now

handles

errors

on

computing

the

line

number

of

a

Python

frame

C

API

Fix

memory

leak

in

and

on

error

handling

make

install

now

also

installs

the

internal

API

Includeinternalh

header

files

Adds

so

embedders

may

override

sysexecutable

Python

final

Release

date

Library

Protect

tasks

weak

set

manipulation

in

Python

release

candidate

Release

date

Core

and

Builtins

Fix

a

possible

pointer

dereference

in

bytesobjectc

Patch

by

Zackery

Spytz

Fixed

a

crash

in

compiling

string

annotations

containing

a

lambda

with

a

keywordonly

argument

that

doesnt

have

a

default

value

Fix

dictod

didnt

copy

iteration

order

of

OrderedDict

Library

Fix

for

async

generators

not

finalizing

when

event

loop

is

in

debug

mode

and

garbage

collector

runs

in

another

thread

Fixed

integer

overflow

in

the

digest

and

hexdigest

methods

for

the

SHAKE

algorithm

in

the

hashlib

module

Enum

fix

grandchildren

subclassing

when

parent

mixed

with

concrete

data

types

Fixed

unittestTestCasedebug

when

used

to

call

test

methods

with

subtests

Patch

by

Bruno

Oliveira

Fix

inspect

module

polluted

sysmodules

when

parsing

of

callable

Fix

selfcancellation

in

C

implementation

of

asyncioTask

Use

a

monotonic

clock

to

compute

timeouts

in

Executormap

and

in

order

to

prevent

timeouts

from

deviating

when

the

system

clock

is

adjusted

Use

to

calculate

ancillary

data

size

instead

of

in

multiprocessingreductionrecvfds

as

RFC

requires

the

use

of

the

former

for

portable

applications

In

QueueHandler

clear

from

LogRecord

to

prevent

traceback

from

being

written

twice

Acquire

the

logging

modules

commonly

used

internal

locks

while

forking

to

avoid

deadlocks

in

the

child

process

Fix

a

reference

issue

inside

multiprocessingPool

that

caused

the

pool

to

remain

alive

if

it

was

deleted

without

being

closed

or

terminated

explicitly

Documentation

chm

document

displays

nonASCII

charaters

properly

on

some

MBCS

Windows

systems

Tests

Fixed

when

Python

is

compiled

with

flags

mcet

fcfprotection

macOS

Revert

to

using

the

released

Tk

with

macOS

installers

instead

of

the

Tk

development

snapshot

used

with

and

The

snapshot

introduced

at

least

one

significant

regression

C

API

Ensure

that

always

returns

on

error

Patch

by

Zackery

Spytz

Python

release

candidate

Release

date

Security

The

xmlsax

and

xmldomminidom

parsers

no

longer

processes

external

entities

by

default

External

DTD

and

ENTITY

declarations

no

longer

load

files

or

create

network

connections

The

C

accelerated

module

now

initializes

hash

randomization

salt

from

instead

of

libexpats

default

CSPRNG

Updated

to

OpenSSL

for

Windows

builds

Fixed

sending

the

part

of

the

file

in

ossendfile

on

macOS

Using

the

trailers

argument

could

cause

sending

more

bytes

from

the

input

file

than

was

specified

Fixed

threadsafety

of

error

handling

in

Core

and

Builtins

Fix

a

crash

with

musl

libc

on

Alpine

Linux

when

the

script

filename

specified

on

the

command

line

doesnt

exist

Fix

contextvars

C

API

to

use

PyObject

pointer

types

Fix

a

memory

leak

in

Modulestimemodulec

Patch

by

Zackery

Spytz

Fix

an

offbyone

in

the

recursive

call

pruning

feature

of

traceback

formatting

Standard

streams

like

sysstdout

now

use

the

surrogateescape

error

handler

instead

of

strict

on

the

POSIX

locale

when

the

C

locale

is

not

coerced

and

the

Mode

is

disabled

Fix

the

error

handler

of

standard

streams

like

sysstdout

PYTHONIOENCODING

is

now

ignored

instead

of

setting

the

error

handler

to

strict

On

FreeBSD

and

now

also

forces

the

ASCII

encoding

if

the

locale

is

POSIX

not

only

if

the

locale

is

C

The

Mode

is

now

also

enabled

by

the

POSIX

locale

not

only

by

the

C

locale

Fix

undefined

behavior

in

parsetokc

Patch

by

Zackery

Spytz

Update

valgrind

suppression

list

to

use

instead

of

X

dev

it

is

now

possible

to

override

the

memory

allocator

using

PYTHONMALLOC

even

if

the

developer

mode

is

enabled

Fix

crashes

when

profiling

certain

invalid

calls

of

unbound

methods

Patch

by

Jeroen

Demeyer

Fixed

reading

invalid

memory

when

create

the

code

object

with

too

small

varnames

tuple

or

too

large

argument

counts

In

ioIOBaseclose

ensure

that

the

closed

attribute

is

not

set

with

a

live

exception

Patch

by

Zackery

Spytz

and

Serhiy

Storchaka

Fix

buffer

overflow

while

converting

unicode

to

numeric

values

Fixed

a

memory

leak

in

the

compiler

when

it

raised

some

uncommon

errors

during

tokenizing

Disabled

interruption

by

CtrlC

between

calling

open

and

entering

a

with

block

in

with

open

Fix

dictcopy

to

maintain

correct

total

refcount

as

reported

by

sysgettotalrefcount

Implement

contextvarsContextVarname

attribute

Update

vendored

Expat

library

copy

to

version

Decref

the

module

object

in

before

calling

Patch

by

Zackery

Spytz

Close

directly

executed

pyc

files

before

calling

Fix

V

reset

properly

the

command

line

parser

when

the

encoding

changes

after

reading

the

Python

configuration

Fix

rare

Python

crash

due

to

bad

refcounting

in

if

a

descriptor

deletes

itself

from

the

class

Patch

by

Jeroen

Demeyer

Fix

the

attribute

for

ast

nodes

astAsyncFor

astAsyncFunctionDef

and

astAsyncWith

Previously

pointed

to

the

keyword

after

async

Fix

assertion

failures

in

the

tell

method

of

ioTextIOWrapper

Patch

by

Zackery

Spytz

Fix

a

crash

in

osutime

in

case

of

a

bad

ns

argument

Patch

by

Oren

Milman

Library

Support

multiple

mixin

classes

when

creating

Enums

Add

and

for

TLS

post

handshake

authentication

feature

Fix

a

rare

interpreter

unhandled

exception

state

SystemError

only

seen

when

using

subprocess

with

a

while

an

handler

has

been

registered

with

and

the

fork

system

call

fails

Ensure

oslchmod

is

never

defined

on

Linux

dataclassesasdict

and

astuple

now

handle

namedtuples

correctly

Update

vendorized

expat

library

version

to

Fix

unpickling

compatbility

of

uuidUUID

objects

with

older

versions

of

Python

The

subprocess

module

no

longer

mistakenly

closes

redirected

fds

even

when

they

were

in

when

outside

of

the

default

set

Fixed

iterator

of

multiprocessingmanagersDictProxy

Fix

distutils

logging

for

nonASCII

strings

This

caused

installation

issues

on

Windows

Fix

possible

mojibake

in

the

error

message

of

pwdgetpwnam

and

grpgetgrnam

Patch

by

William

Grzybowski

now

falls

back

on

osdefpath

if

the

PATH

environment

variable

is

not

set

Fix

enum

members

getting

shadowed

by

parent

attributes

On

Windows

fix

multiprocessingConnection

for

very

large

read

fix

and

for

read

larger

than

usually

Correct

typo

in

Fix

parsing

nonASCII

identifiers

in

PEP

Avoids

a

possible

integer

underflow

undefined

behavior

in

the

time

modules

year

handling

code

when

passed

a

very

low

negative

year

value

Improved

compatibility

for

streamed

files

in

zipfile

Previously

an

optional

signature

was

not

being

written

and

certain

ZIP

applications

were

not

supported

Patch

by

Silas

Sewell

Fix

the

fromisoformat

methods

of

datetime

types

crashing

when

given

unicode

with

code

points

Specifically

datetimefromisoformat

now

accepts

surrogate

unicode

code

points

used

as

the

separator

Report

and

tests

by

Alexey

Izbyshev

patch

by

Paul

Ganssle

Fix

inspectgetsourcelines

for

module

level

framestracebacks

Patch

by

Vladimir

Matveev

Running

the

trace

module

no

longer

creates

the

tracecover

file

Fix

crash

when

an

ABC

derived

class

with

invalid

is

passed

as

the

second

argument

to

issubclass

Patch

by

Alexey

Izbyshev

Appending

to

the

ZIP

archive

with

the

extension

no

longer

grows

the

size

of

extra

fields

of

existing

entries

Fix

formatting

in

when

formatting

an

error

message

The

and

classes

now

resolve

to

the

local

host

IP

correctly

when

the

default

value

of

host

parameter

is

used

no

longer

modifies

the

content

of

the

argument

Patch

by

Pablo

S

Blum

de

Aguiar

Fix

ntpathabspath

for

invalid

paths

on

windows

Patch

by

Franz

Woellert

asyncios

event

loop

will

not

pass

timeouts

longer

than

one

day

to

epollselect

etc

Fix

several

AttributeError

in

zipfile

seek

methods

Patch

by

Mickaël

Schoentgen

Fix

performance

regression

in

when

a

DML

statement

appeared

in

a

different

line

than

the

rest

of

the

SQL

query

Restore

to

preserve

backwards

compatibility

since

its

already

used

by

distutils

command

Ignore

errors

caused

by

missing

nonwritable

homedir

while

writing

history

during

exit

of

an

interactive

session

Patch

by

Anthony

Sottile

Allow

frozen

dataclasses

to

have

a

field

named

object

Previously

this

conflicted

with

an

internal

use

of

object

The

reload

fixer

now

uses

importlibreload

instead

of

deprecated

impreload

pydocs

Helpershowtopic

method

now

prints

the

cross

references

of

a

topic

correctly

could

raise

UnboundLocalError

or

OverflowError

for

incorrect

padding

Now

it

always

raises

in

these

cases

Fixed

issues

with

arguments

parsing

in

hashlib

Remove

extraneous

CR

in

refactor

Reverted

rejects

now

a

trailing

comma

in

generator

expressions

functoolssingledispatch

now

raises

TypeError

instead

of

IndexError

when

no

positional

arguments

are

passed

Ensure

the

loader

shim

created

by

always

returns

bytes

from

its

function

This

fixes

using

with

PEP

hashbased

pycs

The

multiprocessing

module

now

uses

the

monotonic

clock

timemonotonic

instead

of

the

system

clock

timetime

to

implement

timeout

subprocessPopen

now

copies

the

startupinfo

argument

to

leave

it

unchanged

it

will

modify

the

copy

so

that

the

same

STARTUPINFO

object

can

be

used

multiple

times

Fixed

a

performance

regression

for

reading

streams

with

tarfile

The

buffered

read

should

use

a

list

instead

of

appending

to

a

bytes

object

webbrowser

Correct

the

arguments

passed

to

Opera

Browser

when

opening

a

new

URL

using

the

webbrowser

module

Patch

by

Bumsik

Kim

Closed

existing

logging

handlers

before

reconfiguration

via

fileConfig

and

dictConfig

Patch

by

Karthikeyan

Singaravelan

Make

minor

tweaks

to

turtledemo

The

wikipedia

example

is

now

rosette

decribing

what

it

draws

The

penrose

print

output

is

reduced

output

of

tree

is

eliminated

Fixed

passing

lists

and

tuples

of

strings

containing

special

characters

and

n

as

options

to

ttk

widgets

Fix

getaddrinfo

to

resolve

addresses

correctly

Improve

randomchoices

to

handle

subnormal

input

weights

that

could

occasionally

trigger

an

IndexError

Fixed

integer

overflow

in

osreadv

oswritev

ospreadv

and

ospwritev

and

in

ossendfile

with

headers

or

trailers

arguments

on

BSDbased

OSes

and

macOS

Tokenize

module

now

implicitly

emits

a

NEWLINE

when

provided

with

input

that

does

not

have

a

trailing

new

line

This

behavior

now

matches

what

the

C

tokenizer

does

internally

Contributed

by

Ammar

Askar

and

lzma

When

is

called

twice

free

the

old

lock

to

not

leak

memory

Make

selectepoll

and

its

documentation

consistent

regarding

sizehint

and

flags

Fixed

bug

in

asyncio

where

ProactorSocketTransport

logs

AssertionError

if

force

closed

during

write

Convert

content

length

to

string

before

putting

to

header

Fixed

implementation

of

It

almost

always

returned

version

for

glibc

Improve

error

message

of

dataclassesreplace

when

an

InitVar

is

not

specified

Make

email

module

properly

handle

invalidlength

strings

Fix

when

address

group

is

missing

final

Contributed

by

Enrique

PerezTerron

Fixed

creating

a

controller

for

webbrowser

when

a

user

specifies

a

path

to

an

entry

in

the

BROWSER

environment

variable

Based

on

patch

by

John

Still

Print

the

header

values

besides

the

header

keys

instead

just

the

header

keys

if

debuglevel

is

set

to

in

httpclient

Patch

by

Marco

Strigl

now

supports

iteration

over

the

file

contents

Patch

by

Tony

Flury

imaplib

now

allows

MOVE

command

in

RFC

IMAP

MOVE

Extension

and

potentially

as

a

name

of

supported

method

of

object

Raise

a

TypeError

instead

of

crashing

if

a

collectionsdeque

subclass

returns

a

nondeque

from

Patch

by

Oren

Milman

Fix

bugs

in

hangul

normalization

and

Documentation

Document

how

passing

coroutines

to

asynciowait

can

be

confusing

Fixed

info

in

the

stdtypes

docs

concerning

the

types

that

support

membership

tests

Fix

wrongly

written

basicConfig

documentation

markup

syntax

replaced

ellipsis

with

correct

error

codes

in

tutorial

chapter

Add

operator

entry

to

index

Document

in

the

socket

module

Tests

Fix

when

and

GDB

was

compiled

with

Python

or

earlier

Remove

RDSTesttestCongestion

The

test

tries

to

fill

the

receivers

socket

buffer

and

expects

an

error

But

the

RDS

protocol

doesnt

require

that

Moreover

the

Linux

implementation

of

RDS

expects

that

the

producer

of

the

messages

reduces

its

rate

its

not

the

role

of

the

receiver

to

trigger

an

error

The

test

fails

on

Fedora

by

design

so

just

remove

it

Fix

if

unzip

doesnt

support

t

Fixed

nondeterministic

flakiness

of

by

not

using

the

scary

logic

to

save

and

restore

sysmodules

contents

between

test

cases

Fix

usage

of

hardcoded

errno

values

in

the

tests

Use

RSA

keys

and

signature

for

test

certs

and

keys

Remove

special

condition

for

AIX

in

On

AIX

with

family

sockets

getsockname

does

not

provide

sockname

so

skip

calls

to

Fix

ftplib

test

for

TLS

by

reading

from

data

socket

Update

all

RSA

keys

and

DH

params

to

use

at

least

bits

Fix

when

run

in

verbose

mode

Fix

on

macOS

with

gdbm

add

a

larger

value

to

make

sure

that

the

file

size

changes

Fix

a

bug

in

regrtest

that

caused

an

extra

test

to

run

if

huntrleaksR

was

used

Exit

with

error

in

case

that

invalid

parameters

are

specified

to

huntrleaksR

at

least

one

warmup

run

and

one

repetition

must

be

used

Making

sure

the

class

of

tests

gets

run

in

Build

Fixed

SSL

module

build

with

OpenSSL

pedantic

CFLAGS

Add

JUnit

XML

output

for

regression

tests

and

update

Azure

DevOps

builds

Fix

for

case

where

it

was

not

possible

to

have

both

and

be

undefined

Fix

detection

of

atomic

support

on

clang

Add

g

to

LDFLAGS

when

compiling

with

LTO

to

get

debug

symbols

The

withclocalewarning

configuration

flag

has

been

removed

It

has

had

no

effect

for

about

a

year

Windows

Fix

a

possible

pointer

dereference

in

pyshellextcpp

Fix

returning

structs

from

functions

produced

by

MSVC

Guard

MSVCspecific

code

in

socketmodulec

with

ifdef

Fixed

the

list

and

listpaths

arguments

for

the

pyexe

launcher

Ensure

INCLUDE

and

LIB

directories

do

not

end

with

a

backslash

Revert

line

length

limit

for

Windows

help

docs

The

linelength

limit

is

not

needed

because

the

pages

appear

in

a

separate

app

rather

than

on

a

browser

tab

It

can

also

interact

badly

with

the

DPI

setting

Restore

running

while

waiting

for

user

input

at

the

prompt

The

restores

integration

of

interactive

GUI

windows

such

as

Matplotlib

figures

with

the

prompt

on

Windows

Output

error

when

ReadConsole

is

canceled

by

CancelSynchronousIo

instead

of

crashing

Fix

bug

where

datetimefromtimestamp

erronously

throws

an

OSError

on

Windows

for

values

between

and

Patch

by

Ammar

Askar

macOS

Have

macOS

installer

builds

for

and

use

a

development

snapshot

of

Tk

to

mitigate

certain

scroller

issues

seen

with

IDLE

and

tkinter

apps

Update

to

OpenSSL

for

macOS

installer

builds

In

macOS

stat

on

some

file

descriptors

fe

will

result

in

bad

file

descriptor

OSError

Guard

against

this

exception

was

added

in

and

similar

methods

can

also

throw

this

exception

so

_RecursiveWildcardSelector_iterate_directories

was

also

extended

with

the

same

error

ignoring

pattern

In

drop

the

GIL

when

calling

into

SystemConfiguration

to

avoid

deadlocks

IDLE

Use

configured

color

theme

for

readonly

text

views

Enable

squeezing

of

long

outputs

in

the

shell

to

avoid

performance

degradation

and

to

clean

up

the

history

without

losing

it

Squeezed

outputs

may

be

copied

viewed

in

a

separate

window

and

unsqueezed

Fixed

mousewheel

scrolling

direction

on

macOS

Make

IDLE

calltips

always

visible

on

Mac

Some

MacOStk

combinations

need

Patch

by

Kevin

Walzer

Fix

unresponsiveness

after

closing

certain

windows

and

dialogs

Avoid

small

type

when

running

htests

Since

part

of

the

purpose

of

humanviewed

tests

is

to

determine

that

widgets

look

right

it

is

important

that

they

look

the

same

for

testing

as

when

running

IDLE

Add

test

for

idlelibstackviewStackBrowser

Change

mainmenumenudefs

key

windows

to

window

Every

other

menudef

key

is

lowercase

version

of

main

menu

entry

Rename

idlelibwindows

as

window

Match

Window

on

the

main

menu

and

remove

last

plural

module

name

Fix

and

document

The

revised

file

compiles

runs

and

tests

OK

explains

how

to

use

it

to

create

new

IDLE

test

files

IDLE

In

rstrip

rename

class

RstripExtension

as

Rstrip

For

consistency

and

clarity

rename

an

IDLE

module

and

classes

Module

calltips

and

its

class

CallTips

are

now

calltip

and

Calltip

In

module

class

CallTip

is

now

CalltipWindow

Add

help

in

the

welcome

message

of

IDLE

IDLE

refactor

ToolTip

and

CallTip

and

add

documentation

and

tests

Minimally

test

all

IDLE

modules

Add

missing

files

import

module

instantiate

classes

and

check

coverage

Check

existing

files

ToolsDemos

pythongdb

now

catchs

UnicodeDecodeError

exceptions

when

calling

string

pythongdb

now

catchs

ValueError

on

when

Python

has

no

debug

symbols

for

example

C

API

Fix

regression

introduced

in

read

environment

variables

like

PYTHONOPTIMIZE

Fixed

SystemError

in

when

the

w

format

unit

is

used

for

optional

parameter

can

again

be

called

after

as

in

Python

Python

final

Release

date

Library

Fix

for

a

node

that

lacks

a

docstring

C

API

Calling

twice

does

nothing

instead

of

failing

with

a

fatal

error

restore

the

Python

behaviour

Python

release

candidate

Release

date

Core

and

Builtins

Fix

a

crash

in

hamtc

caused

by

enabling

GC

tracking

for

an

object

that

hadnt

all

of

its

fields

set

to

Fix

a

crash

in

Python

initialization

when

parsing

the

command

line

options

Thanks

Christoph

Gohlke

for

the

bug

report

and

the

fix

Fixed

reset

of

the

SIGINT

handler

to

on

interpreter

shutdown

even

when

there

was

a

custom

handler

set

previously

Patch

by

Philipp

Kerling

Fix

signedunsigned

comparison

warning

in

pyhashc

Library

Prevent

sitemain

exception

if

PYTHONSTARTUP

is

set

Patch

by

Steve

Weber

Datetime

instance

d

with

nonNone

tzinfo

but

with

dtzinfoutcoffsetd

returning

is

now

treated

as

naive

by

the

astimezone

method

Avoid

race

condition

with

debug

logging

asyncio

Fix

a

race

condition

causing

data

loss

on

when

using

the

ProactorEventLoop

Correct

test

for

availability

in

configureac

Patch

by

Michael

Felt

Add

asyncioWindowsSelectorEventLoopPolicy

and

asyncioWindowsProactorEventLoopPolicy

Update

unicodedata

s

database

to

Unicode

version

improve

exception

message

for

encoded

inputs

of

invalid

length

Fix

error

message

cancel

callbacks

in

case

of

an

unhandled

error

mark

SSLTransport

as

closed

if

it

is

aborted

The

concatenation

and

repetition

sequence

operations

now

raise

TypeError

instead

of

SystemError

when

performed

on

mmapmmap

objects

Patch

by

Zackery

Spytz

asynciossl

Fix

AttributeError

increase

default

handshake

timeout

Use

a

better

regex

when

breaking

usage

into

wrappable

parts

Avoids

bogus

assertion

errors

from

custom

metavar

strings

Emit

a

deprecation

warning

for

inspectformatargspec

Documentation

Clarified

the

relationship

between

PEP

PYTHONCOERCECLOCALE

and

PEP

mode

Improve

the

documentation

of

and

their

UNIX

socket

counterparts

Clarify

meaning

of

and

flags

for

Build

Move

Wstrictprototypes

option

to

from

OPT

This

option

emitted

annoying

warnings

when

building

extension

modules

written

in

C

Windows

Reduces

maximum

marshal

recursion

depth

on

release

builds

IDLE

On

Windows

add

API

call

saying

that

tk

scales

for

DPI

On

Windows

or

with

DPI

compatibility

properties

of

the

Python

binary

unchanged

and

a

monitor

resolution

greater

than

DPI

this

should

make

text

and

lines

sharper

It

should

otherwise

have

no

effect

Clicking

on

a

context

line

moves

that

line

to

the

top

of

the

editor

window

IDLE

Use

readonly

text

widget

for

code

context

instead

of

label

widget

Scroll

IDLE

editor

text

by

lines

Previously

the

mouse

wheel

and

scrollbar

slider

moved

text

by

a

fixed

number

of

pixels

resulting

in

partial

lines

at

the

top

of

the

editor

box

The

change

also

applies

to

the

shell

and

grep

output

windows

but

not

to

readonly

text

views

Enable

themespecific

color

configuration

for

Code

Context

Use

the

Highlights

tab

to

see

the

setting

for

builtin

themes

or

add

settings

to

custom

themes

Display

up

to

maxlines

nonblank

lines

for

Code

Context

If

there

is

no

current

context

show

a

single

blank

line

Python

beta

Release

date

Core

and

Builtins

Fixed

a

leak

when

the

garbage

collector

fails

to

add

an

object

with

the

method

or

referenced

by

it

into

the

gcgarbage

list

can

now

be

called

when

an

exception

is

set

and

preserves

it

Fix

parameter

of

dont

crash

if

is

not

a

dict

The

new

added

in

was

removed

as

we

are

still

working

on

what

the

API

should

look

like

Expect

this

in

instead

Fixed

miscellaneous

bugs

in

converting

annotations

to

strings

and

optimized

parentheses

in

the

string

representation

Fix

a

leak

in

Fix

unaligned

accesses

in

Patch

by

Rolf

Eike

Beer

Due

to

unexpected

compatibility

issues

discovered

during

downstream

beta

testing

reverted

docstring

field

is

removed

from

Module

ClassDef

FunctionDef

and

AsyncFunctionDef

ast

nodes

which

was

added

in

Docstring

expression

is

restored

as

a

first

statement

in

their

body

Based

on

patch

by

Inada

Naoki

Fix

a

crash

in

ctypescast

in

case

the

type

argument

is

a

ctypes

structured

data

type

Patch

by

Eryk

Sun

and

Oren

Milman

Library

When

cancelling

the

task

due

to

a

timeout

will

now

wait

until

the

cancellation

is

complete

Fix

gather

to

propagate

cancellation

of

itself

even

with

Support

protocol

type

switching

in

Pause

the

transport

as

early

as

possible

to

further

reduce

the

risk

of

being

called

before

Fix

a

race

condition

in

of

asynciosslproto

start

immediately

the

handshake

instead

of

using

Previously

could

be

called

before

the

handshake

started

causing

the

handshake

to

hang

or

fail

Fixed

bug

where

calling

on

a

after

its

already

closed

raises

AttributeError

Make

return

only

pending

tasks

Avoid

blocking

on

file

IO

in

sendfile

fallback

code

Fix

RuntimeError

after

closing

loop

that

used

Fix

crash

with

Cythons

bogus

coroutines

Fix

to

support

switching

between

asyncioProtocol

and

asyncioBufferedProtocol

Fix

to

work

with

asyncioBufferedProtocols

Pickles

of

type

variables

and

subscripted

generics

are

now

futureproof

and

compatible

with

older

Python

versions

Fixed

on

FreeBSD

Finalize

and

document

preliminary

and

experimental

TLS

support

with

OpenSSL

Fix

possible

SIGSGV

when

asyncioFuture

is

created

in

Fixed

a

bug

in

the

Python

implementation

of

the

JSON

decoder

that

prevented

the

cache

of

parsed

strings

from

clearing

after

finishing

the

decoding

Based

on

patch

by

cfos

Change

TLS

cipher

suite

settings

for

compatibility

with

OpenSSL

and

newer

OpenSSL

will

have

TLS

ciphers

enabled

by

default

Do

not

simplify

arguments

to

typingUnion

Now

UnionManager

Employee

is

not

simplified

to

Employee

at

runtime

Such

simplification

previously

caused

several

bugs

and

limited

possibilities

for

introspection

Add

a

new

class

attribute

to

ForkingMixIn

and

ThreadingMixIn

classes

of

socketserver

should

consider

common

TEMP

locations

argparse

subparsers

are

once

again

not

required

by

default

reverting

the

change

in

behavior

introduced

by

in

now

checks

for

invalid

field

names

and

duplicate

fields

Also

added

a

check

for

invalid

field

specifications

Prevent

from

using

a

DUID

instead

of

a

MAC

on

Windows

Patch

by

Zvi

Effron

Fix

race

condition

with

in

Windows

proactor

event

loop

Fix

failure

in

when

ClassVar

was

provided

as

a

string

forward

reference

Optimize

by

reordering

if

checks

faster

Add

errors

param

to

and

make

an

encoding

in

FieldStorage

use

the

given

errors

needed

for

Twisted

Patch

by

Amber

Brown

Change

dataclassesFields

repr

to

use

the

repr

of

each

of

its

members

instead

of

str

This

makes

it

more

clear

what

each

field

actually

represents

This

is

especially

true

for

the

type

member

Fix

dataclasses

to

work

if

using

literal

string

type

annotations

or

if

using

PEP

Postponed

Evaluation

of

Annotations

Only

specific

string

prefixes

are

detected

for

both

ClassVar

ClassVar

and

typingClassVar

and

InitVar

InitVar

and

dataclassesInitVar

Minor

fixes

in

typing

module

add

annotations

to

pass

args

and

kwds

in

Original

PRs

by

Paulius

Šarka

and

Chad

Dombrova

Updated

alias

mapping

with

glibc

supported

locales

Fix

trailing

quotation

marks

getting

deleted

when

looking

up

bytestring

literals

on

pydoc

Patch

by

Andrés

Delfino

The

function

and

platformdist

now

trigger

a

DeprecationWarning

and

have

been

marked

for

removal

in

Python

Update

error

message

when

constructing

invalid

inspectParameters

Patch

by

Donghee

Fix

FD

leak

in

Patch

by

Vlad

Starostin

The

urllibrobotparsers

representation

now

includes

wildcard

entries

and

the

Crawldelay

and

Requestrate

fields

Patch

by

Michael

Lazar

The

ssl

module

now

contains

constant

available

with

OpenSSL

or

Support

arrays

in

ctypes

Patch

by

Segev

Finer

Documentation

Document

that

asynciowait

does

not

cancel

its

futures

on

timeout

Document

PEP

changes

to

asyncio

Update

HMAC

default

to

a

DeprecationWarning

bump

removal

to

Fix

broken

pypi

link

Add

missing

documentation

for

typingAsyncContextManager

Tests

Ignore

failures

on

BSD

platforms

that

might

be

due

to

running

on

ZFS

Remove

the

module

meant

for

testing

and

associated

helpers

This

module

was

originally

added

recently

in

Build

Ensures

module

definition

files

for

the

stable

ABI

on

Windows

are

correctly

regenerated

Enable

CI

builds

on

Visual

Studio

Team

Services

at

httpspythonvisualstudiocomcpython

Add

Wnocastfunctiontype

for

gcc

for

silencing

warnings

about

function

casts

like

casting

to

PyCFunction

in

method

definition

lists

macOS

The

editrc

file

in

users

home

directory

is

now

processed

correctly

during

the

readline

initialization

through

editline

emulation

on

macOS

IDLE

IDLE

Cleanup

codecontextpy

and

its

test

IDLEs

code

context

now

recognizes

async

as

a

block

opener

Add

docstrings

and

tests

for

codecontext

Python

beta

Release

date

Core

and

Builtins

Raise

a

SyntaxError

for

async

with

and

async

for

statements

outside

of

async

functions

Fix

a

bug

that

causes

PathFinder

to

appear

twice

on

Patch

by

Pablo

Galindo

Salgado

Fixed

clang

ubsan

undefined

behavior

sanitizer

warnings

in

dictobjectc

by

adjusting

how

the

internal

struct

shared

keys

structure

is

declared

Fix

potential

memory

leak

in

normalizestring

Change

dict

growth

function

from

to

Previously

dict

is

shrinked

only

when

used

Now

dict

has

more

chance

to

be

shrinked

Improved

error

messages

in

async

with

when

or

return

nonawaitable

object

Fix

in

dict

implementation

is

uninitialized

when

copying

from

keysharing

dict

Library

Fix

regression

on

macOS

Fixed

crash

in

the

get

method

of

the

dbmndbm

database

object

when

it

is

called

with

a

single

argument

Fix

multiprocessing

regression

on

newer

glibcs

Fix

quoting

of

the

Comment

attribute

of

httpcookiesSimpleCookie

Upgrade

bundled

version

of

pip

to

Fixed

a

crash

in

the

parser

module

when

converting

an

ST

object

to

a

tree

of

tuples

or

lists

with

and

now

recognizes

rf

strings

Ensure

lineendings

are

respected

when

using

Have

importlibresourcescontents

and

importlibabcResourceReadercontents

return

an

iterable

instead

of

an

iterator

Fix

display

of

module

call

in

the

html

produced

by

cgitbhtml

Patch

by

Stéphane

Blondon

Fixed

regression

when

running

pydoc

with

the

m

switch

The

regression

was

introduced

in

by

the

resolution

of

This

fix

also

changed

pydoc

to

add

osgetcwd

to

syspath

when

necessary

rather

than

adding

Delete

entries

of

in

when

is

called

Deprecate

looking

up

nonEnum

objects

in

Enum

classes

and

Enum

members

will

raise

TypeError

in

randomRandomchoice

now

raises

IndexError

for

empty

sequences

consistently

even

when

called

from

subclasses

without

a

getrandbits

implementation

Update

difflibmdiff

for

PEP

Convert

an

uncaught

StopIteration

in

a

generator

into

a

returnstatement

End

framing

at

the

end

of

C

implementation

of

picklePicklerdump

Improved

error

handling

and

fixed

a

reference

leak

in

In

dataclasses

now

looks

up

the

special

method

on

the

class

not

the

instance

of

the

default

value

Raise

RuntimeError

when

executorsubmit

is

called

during

interpreter

shutdown

Fix

output

of

cover

files

for

trace

module

commandline

tool

Previously

emitted

cover

files

only

when

missing

option

was

used

Patch

by

Michael

Selik

Documentation

Add

Korean

language

switcher

for

Clarify

that

the

attribute

on

modules

can

not

be

just

any

value

Modernize

documentation

for

writing

C

extension

types

Deprecate

usage

in

capiarg

document

related

APIs

are

deprecated

since

Python

but

it

is

missed

in

the

document

Add

a

note

about

cursesaddch

and

cursesaddstr

exception

behavior

when

writing

outside

a

window

or

pad

Update

documentation

related

with

dict

order

Tests

Fix

test_embedtest_pre_initialization_sys_options

when

the

interpreter

is

built

with

enableshared

Build

Enable

the

verbose

build

for

extension

modules

when

GNU

make

is

passed

macros

on

the

command

line

Update

configguess

and

configsub

files

Add

new

triplets

for

mips

and

riscv

variants

used

in

extension

suffixes

By

default

modules

configured

in

ModulesSetup

are

no

longer

built

with

Instead

modules

that

specifically

need

that

preprocessor

definition

include

it

in

their

individual

entries

The

embedding

tests

can

once

again

be

built

with

clang

Windows

Update

Windows

installer

to

use

OpenSSL

macOS

Update

macOS

installer

build

to

use

OpenSSL

IDLE

Update

wordidentifier

definition

from

ascii

to

unicode

In

text

and

entry

boxes

this

affects

selection

by

doubleclick

movement

leftright

by

controlleftright

and

deletion

leftright

by

controlBACKSPACEDEL

IDLE

consistently

color

invalid

string

prefixes

A

u

string

prefix

can

not

be

paired

with

either

r

or

f

Consistently

color

as

much

of

the

prefix

starting

at

the

right

as

is

valid

Revise

and

extend

colorizer

test

ToolsDemos

pygettextpy

now

recognizes

only

literal

strings

as

docstrings

and

translatable

strings

and

rejects

bytes

literals

and

fstring

expressions

Fixed

handling

directories

as

arguments

in

the

pygettext

script

Based

on

patch

by

Oleg

Krasnikov

Fix

pystackv

and

pystack

gdbinit

macros

Fix

for

using

with

addsuffix

option

but

without

outputdir

option

for

relative

path

to

files

in

current

directory

Python

beta

Release

date

Security

Harden

ssl

module

against

LibreSSL

is

called

with

an

explicit

namelen

A

new

test

ensures

that

bytes

are

not

allowed

Minimal

fix

to

prevent

buffer

overrun

in

ossymlink

on

Windows

Regexes

in

difflib

and

poplib

were

vulnerable

to

catastrophic

backtracking

These

regexes

formed

potential

DOS

vectors

REDOS

They

have

been

refactored

This

resolves

and

Patch

by

Jamie

Davis

Core

and

Builtins

When

using

the

m

switch

is

now

explicitly

expanded

as

the

starting

working

directory

rather

than

being

left

as

the

empty

path

which

allows

imports

from

the

current

working

directory

at

the

time

of

the

import

Improve

consistency

of

errors

raised

by

issubclass

when

called

with

a

nonclass

and

an

abstract

base

class

as

the

first

and

second

arguments

respectively

Patch

by

Josh

Bronson

Fixed

jumping

when

the

function

contains

an

async

for

loop

Fixed

jumping

out

of

with

block

by

setting

Fix

a

crash

on

fork

when

using

a

custom

memory

allocator

ex

using

PYTHONMALLOC

env

var

and

now

use

the

default

RAW

memory

allocator

to

allocate

a

new

interpreters

mutex

on

fork

Prevent

jumps

from

return

and

exception

trace

events

Dont

use

temporary

variables

in

cases

of

listdictset

comprehensions

Library

Have

Field

objects

pass

through

to

their

default

values

if

they

have

their

own

Allow

ttkTreeviewinsert

to

insert

iid

that

has

a

false

boolean

value

Note

and

iidFalse

would

be

same

Patch

by

Garvit

Khatri

Treat

type

variables

and

special

typing

forms

as

immutable

by

copy

and

pickle

This

fixes

several

minor

issues

and

inconsistencies

and

improves

backwards

compatibility

with

Python

When

computing

dataclasss

use

the

lookup

table

to

contain

the

function

which

returns

the

value

This

is

an

improvement

over

looking

up

a

string

and

then

testing

that

string

to

see

what

to

do

The

ssl

module

now

compiles

with

LibreSSL

Raise

TypeError

if

a

member

variable

of

a

dataclass

is

of

type

Field

but

doesnt

have

a

type

annotation

Fix

the

failure

on

OSX

caused

by

the

tests

relying

on

Add

Field

to

Fix

an

error

where

subclassing

a

dataclass

with

a

field

that

uses

a

would

generate

an

incorrect

class

Dataclasses

If

a

field

has

a

default

value

thats

a

MemberDescriptorType

then

its

from

that

field

being

in

not

an

actual

default

value

If

a

nondataclass

inherits

from

a

frozen

dataclass

allow

attributes

to

be

added

to

the

derived

class

Only

attributes

from

the

frozen

dataclass

can

not

be

assigned

to

Require

all

dataclasses

in

a

hierarchy

to

be

either

all

frozen

or

all

nonfrozen

Add

missing

NoReturn

to

in

typingpy

Fix

the

size

handling

in

multiprocessingQueue

when

a

pickling

error

occurs

now

properly

supports

trailing

commas

after

args

and

kwargs

in

function

signatures

FIX

properly

close

leaking

fds

in

concurrentfuturesProcessPoolExecutor

Release

the

GIL

during

fstat

calls

avoiding

hang

of

all

threads

when

calling

mmapmmap

osurandom

and

randomseed

Patch

by

Nir

Soffer

Avoid

failing

in

multiprocessingProcess

if

the

standard

streams

are

closed

or

at

exit

Skip

sendingreceiving

data

after

SSL

transport

closing

Fix

a

regression

in

ipaddress

that

result

of

hosts

is

empty

when

the

network

is

constructed

by

a

tuple

containing

an

integer

mask

and

only

bit

left

for

addresses

Fix

C

implementation

of

subclass

crashed

when

subclass

is

not

a

type

object

Fix

inspectsignature

for

singleparameter

partialmethods

Expose

several

missing

constants

in

zlib

and

fix

corresponding

documentation

Improved

exceptions

raised

for

invalid

number

of

channels

and

sample

width

when

read

an

audio

file

in

modules

aifc

wave

and

sunau

Fix

wrong

redirection

of

a

low

descriptor

or

to

stderr

in

subprocess

if

another

low

descriptor

is

closed

In

tkinter

now

raises

a

ValueError

instead

of

canceling

the

first

scheduled

function

Patch

by

Cheryl

Sabella

httpserver

now

exposes

a

ThreadedHTTPServer

class

and

uses

it

when

the

module

is

run

with

m

to

cope

with

web

browsers

preopening

sockets

now

exposes

a

backup

method

if

the

underlying

SQLite

library

is

at

version

or

higher

Patch

by

Lele

Gaifax

Documentation

Document

Modify

documentation

for

the

islice

recipe

to

consume

initial

values

up

to

the

start

index

Update

zipapp

documentation

to

describe

how

to

make

standalone

applications

Documentation

changes

for

ipaddress

Patch

by

Jon

Foster

and

Berker

Peksag

Update

documentation

to

clarify

that

WindowsRegistryFinder

implements

MetaPathFinder

Patch

by

Himanshu

Lakhara

Tests

Avoid

regrtest

compatibility

issue

with

namespace

packages

Fix

failing

on

macOS

due

to

transport

of

KqueueSelector

B B I O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O