Blender linear RGB to sRGB conversion

Does anybody knows what operation Blender does when it saves the image to .png file?

I am interested in an exact formula, it might be also the source code. What I found in source till now is RGB->sRGB conversion code but for viewport not final rendering.

I am interesting in the subject since I wanted to render images in exr and then convert them to PNG using python script. After conversion by hand i have slight different results then Blender provides natively. I wonder where this difference come from. I need to be precise since I am going to use this data as training for neural networks so I have to be precise as possible and eliminate all possible problems beforehand.

This is the code I use for conversion in python:

def RGB2sRGB2(RGBArray):
new_rgb = RGBArray
higher = (new_rgb > 0.0031308)
lower = (new_rgb <= 0.0031308)
new_rgb[higher] = (pow(new_rgb[higher], (1.0 / 2.4))) * 1.055 - 0.055
new_rgb[lower] = 12.92 * new_rgb[lower]
return new_rgb


Here I post my images (native blender .png file; conversion from .exr; difference map - each blue pixel means that difference is equal 1 in range 0-255):