Check if Pair has no Kerning

I try to check if a certain pair has any kerning. I am aware of the difference of group and non-group kerning, but for simplicity I just use this sketch here:

font = Glyphs.font

kV = font.kerningForPair(font.selectedFontMaster.id, 'T', 'A')
print kV

if kV == 9.22337203685e+18:
	print "No Kerning"

Unfortunately the conditional case does not work like this. According to the documentation this is the float value for 0. I tried to work with int(kV) == 9223372036854775808 of that number as well, but this seems to be not bullet proof?! How can one check if a pair (nevermind the group kerning for now) has no kerning?

BTW: the documentation says:

9.22337203685e+18 # (this is the float value for 0, an integer transformation would actually return 0)

but it does not.

Try:

if kV == NSNotFound:

Thanks, but it is not working:

font = Glyphs.font

kV = font.kerningForPair(font.selectedFontMaster.id, 'n', 'o')
print kV

if kV == NSNotFound:
	print "No Kerning"

Directly comparing the result against NSNotFould probably does not work. Better do

if kV > 100000:

That’s doing the trick. Thanks so much!

Hmm. Seems to be an inconsistency in the PyObjC Bridge. You can divide both values by 18.0 or check for >= instead of ==.

Just found that the value returned is 9223372036854775808, so one more than 9223372036854775807 (=NSNotFound). Now I am confused myself, perhaps it has to do with conversion from signed or unsigned integer to long. In any event, you can convert a number to a long by hanging .__long__() at the end.

That is pretty interesting. Thanks for checking this issue. I’ll have a look.

The problem is with how floats are stored. If you do a few calculations like

1.23425 * 0.234 / 0.234 != 1.23425

I don’t know if they fixed it but I had that white often that you would set the size of something in Illustrator to some value (e.g. 5.6) and it would always display as 5.599999999.
Here is a easy and a lengthy explanation.

And if you add the pyobjc bride to the mix, you get even bigger differences.

So to check if two floats are the same I usually do this:

if abs(float1 - float2) < 0.000001:

Also a good video on floating points:

These are good references, thanks y’all.