1 2import unittest, os, sys 3sys.path.append(os.path.join(sys.argv[1], "src", "pyglue")) 4import PyOpenColorIO as OCIO 5 6class TransformsTest(unittest.TestCase): 7 8 def test_interface(self): 9 10 ### AllocationTransform ### 11 at = OCIO.AllocationTransform() 12 self.assertEqual(OCIO.Constants.ALLOCATION_UNIFORM, at.getAllocation()) 13 at.setAllocation(OCIO.Constants.ALLOCATION_LG2) 14 self.assertEqual(OCIO.Constants.ALLOCATION_LG2, at.getAllocation()) 15 self.assertEqual(0, at.getNumVars()) 16 at.setVars([0.1, 0.2, 0.3]) 17 self.assertEqual(3, at.getNumVars()) 18 newvars = at.getVars() 19 self.assertAlmostEqual(0.2, newvars[1], delta=1e-8) 20 21 at2 = OCIO.AllocationTransform(OCIO.Constants.ALLOCATION_LG2, 22 [0.1, 0.2, 0.3], 23 OCIO.Constants.TRANSFORM_DIR_INVERSE) 24 self.assertEqual(OCIO.Constants.ALLOCATION_LG2, at2.getAllocation()) 25 self.assertEqual(3, at2.getNumVars()) 26 newvars2 = at2.getVars() 27 for i in range(0, 3): 28 self.assertAlmostEqual(float(i+1)/10.0, newvars2[i], delta=1e-7) 29 self.assertEqual(OCIO.Constants.TRANSFORM_DIR_INVERSE, at2.getDirection()) 30 31 at3 = OCIO.AllocationTransform(allocation=OCIO.Constants.ALLOCATION_LG2, 32 vars=[0.1, 0.2, 0.3], 33 direction=OCIO.Constants.TRANSFORM_DIR_INVERSE) 34 self.assertEqual(OCIO.Constants.ALLOCATION_LG2, at3.getAllocation()) 35 self.assertEqual(3, at3.getNumVars()) 36 newvars3 = at3.getVars() 37 for i in range(0, 3): 38 self.assertAlmostEqual(float(i+1)/10.0, newvars3[i], delta=1e-7) 39 self.assertEqual(OCIO.Constants.TRANSFORM_DIR_INVERSE, at3.getDirection()) 40 41 ### Base Transform method tests ### 42 self.assertEqual(OCIO.Constants.TRANSFORM_DIR_FORWARD, at.getDirection()) 43 at.setDirection(OCIO.Constants.TRANSFORM_DIR_UNKNOWN) 44 self.assertEqual(OCIO.Constants.TRANSFORM_DIR_UNKNOWN, at.getDirection()) 45 46 ### CDLTransform ### 47 cdl = OCIO.CDLTransform() 48 CC = "<ColorCorrection id=\"foo\">" 49 CC += "<SOPNode>" 50 CC += "<Description>this is a descipt</Description>" 51 CC += "<Slope>1.1 1.2 1.3</Slope><Offset>2.1 2.2 2.3</Offset>" 52 CC += "<Power>3.1 3.2 3.3</Power>" 53 CC += "</SOPNode>" 54 CC += "<SatNode>" 55 CC += "<Saturation>0.7</Saturation>" 56 CC += "</SatNode>" 57 CC += "</ColorCorrection>" 58 # Don't want to deal with getting the correct path so this runs 59 #cdlfile = OCIO.CDLTransform().CreateFromFile("../OpenColorIO/src/jniglue/tests/org/OpenColorIO/test.cc", "foo") 60 #self.assertEqual(CC, cdlfile.getXML()) 61 cdl.setXML(CC) 62 self.assertEqual(CC, cdl.getXML()) 63 match = cdl.createEditableCopy() 64 match.setOffset([1.0, 1.0, 1.0]) 65 self.assertEqual(False, cdl.equals(match)) 66 cdl.setSlope([0.1, 0.2, 0.3]) 67 cdl.setOffset([1.1, 1.2, 1.3]) 68 cdl.setPower([2.1, 2.2, 2.3]) 69 cdl.setSat(0.5) 70 CC2 = "<ColorCorrection id=\"foo\">" 71 CC2 += "<SOPNode>" 72 CC2 += "<Description>this is a descipt</Description>" 73 CC2 += "<Slope>0.1 0.2 0.3</Slope>" 74 CC2 += "<Offset>1.1 1.2 1.3</Offset>" 75 CC2 += "<Power>2.1 2.2 2.3</Power>" 76 CC2 += "</SOPNode>" 77 CC2 += "<SatNode>" 78 CC2 += "<Saturation>0.5</Saturation>" 79 CC2 += "</SatNode>""</ColorCorrection>" 80 self.assertEqual(CC2, cdl.getXML()) 81 cdl.setSOP([1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9]) 82 newsop = cdl.getSOP() 83 self.assertAlmostEqual(1.5, newsop[4], delta=1e-8) 84 slope = cdl.getSlope() 85 self.assertAlmostEqual(1.2, slope[1], delta=1e-7) 86 offset = cdl.getOffset() 87 self.assertAlmostEqual(1.6, offset[2], delta=1e-7) 88 power = cdl.getPower() 89 self.assertAlmostEqual(1.7, power[0], delta=1e-7) 90 self.assertAlmostEqual(0.5, cdl.getSat(), delta=1e-8) 91 luma = cdl.getSatLumaCoefs() 92 self.assertAlmostEqual(0.2126, luma[0], delta=1e-8) 93 self.assertAlmostEqual(0.7152, luma[1], delta=1e-8) 94 self.assertAlmostEqual(0.0722, luma[2], delta=1e-8) 95 cdl.setID("foobar123") 96 self.assertEqual("foobar123", cdl.getID()) 97 cdl.setDescription("bar") 98 self.assertEqual("bar", cdl.getDescription()) 99 100 cdl2 = OCIO.CDLTransform([0.1, 0.2, 0.3], 101 [1.1, 1.2, 1.3], 102 [2.1, 2.2, 2.3], 103 0.5, 104 OCIO.Constants.TRANSFORM_DIR_INVERSE, 105 'foobar123', 'bar') 106 slope2 = cdl2.getSlope() 107 offset2 = cdl2.getOffset() 108 power2 = cdl2.getPower() 109 luma2 = cdl2.getSatLumaCoefs() 110 for i in range(0, 3): 111 self.assertAlmostEqual(float(i+1)/10.0, slope2[i], delta=1e-7) 112 self.assertAlmostEqual(float(i+1)/10.0+1, offset2[i], delta=1e-7) 113 self.assertAlmostEqual(float(i+1)/10.0+2, power2[i], delta=1e-7) 114 self.assertAlmostEqual(0.5, cdl2.getSat(), delta=1e-8) 115 self.assertAlmostEqual(0.2126, luma2[0], delta=1e-8) 116 self.assertAlmostEqual(0.7152, luma2[1], delta=1e-8) 117 self.assertAlmostEqual(0.0722, luma2[2], delta=1e-8) 118 self.assertEqual(OCIO.Constants.TRANSFORM_DIR_INVERSE, cdl2.getDirection()) 119 self.assertEqual('foobar123', cdl2.getID()) 120 self.assertEqual('bar', cdl2.getDescription()) 121 122 cdl3 = OCIO.CDLTransform(slope=[0.1, 0.2, 0.3], 123 offset=[1.1, 1.2, 1.3], 124 power=[2.1, 2.2, 2.3], 125 sat=0.5, 126 direction=OCIO.Constants.TRANSFORM_DIR_INVERSE, 127 id='foobar123', description='bar') 128 slope3 = cdl2.getSlope() 129 offset3 = cdl2.getOffset() 130 power3 = cdl2.getPower() 131 luma3 = cdl2.getSatLumaCoefs() 132 for i in range(0, 3): 133 self.assertAlmostEqual(float(i+1)/10.0, slope3[i], delta=1e-7) 134 self.assertAlmostEqual(float(i+1)/10.0+1, offset3[i], delta=1e-7) 135 self.assertAlmostEqual(float(i+1)/10.0+2, power3[i], delta=1e-7) 136 self.assertAlmostEqual(0.5, cdl3.getSat(), delta=1e-8) 137 self.assertAlmostEqual(0.2126, luma3[0], delta=1e-8) 138 self.assertAlmostEqual(0.7152, luma3[1], delta=1e-8) 139 self.assertAlmostEqual(0.0722, luma3[2], delta=1e-8) 140 self.assertEqual(OCIO.Constants.TRANSFORM_DIR_INVERSE, cdl3.getDirection()) 141 self.assertEqual('foobar123', cdl3.getID()) 142 self.assertEqual('bar', cdl3.getDescription()) 143 144 ### ColorSpaceTransform ### 145 ct = OCIO.ColorSpaceTransform() 146 ct.setSrc("foo") 147 self.assertEqual("foo", ct.getSrc()) 148 ct.setDst("bar") 149 self.assertEqual("bar", ct.getDst()) 150 151 ### DisplayTransform ### 152 dt = OCIO.DisplayTransform() 153 dt.setInputColorSpaceName("lin18") 154 self.assertEqual("lin18", dt.getInputColorSpaceName()) 155 dt.setLinearCC(ct) 156 foo = dt.getLinearCC() 157 dt.setColorTimingCC(cdl) 158 blah = dt.getColorTimingCC() 159 dt.setChannelView(at) 160 wee = dt.getChannelView() 161 dt.setDisplay("sRGB") 162 self.assertEqual("sRGB", dt.getDisplay()) 163 dt.setView("foobar") 164 self.assertEqual("foobar", dt.getView()) 165 cdl.setXML(CC) 166 dt.setDisplayCC(cdl) 167 cdldt = dt.getDisplayCC() 168 self.assertEqual(CC, cdldt.getXML()) 169 dt.setLooksOverride("darkgrade") 170 self.assertEqual("darkgrade", dt.getLooksOverride()) 171 dt.setLooksOverrideEnabled(True) 172 self.assertEqual(True, dt.getLooksOverrideEnabled()) 173 174 dt2 = OCIO.DisplayTransform("lin18", "sRGB", "foobar", 175 OCIO.Constants.TRANSFORM_DIR_INVERSE) 176 self.assertEqual("lin18", dt2.getInputColorSpaceName()) 177 self.assertEqual("sRGB", dt2.getDisplay()) 178 self.assertEqual("foobar", dt2.getView()) 179 self.assertEqual(OCIO.Constants.TRANSFORM_DIR_INVERSE, dt2.getDirection()) 180 181 dt3 = OCIO.DisplayTransform(inputColorSpaceName="lin18", 182 display="sRGB", view="foobar", 183 direction=OCIO.Constants.TRANSFORM_DIR_INVERSE) 184 self.assertEqual("lin18", dt3.getInputColorSpaceName()) 185 self.assertEqual("sRGB", dt3.getDisplay()) 186 self.assertEqual("foobar", dt3.getView()) 187 self.assertEqual(OCIO.Constants.TRANSFORM_DIR_INVERSE, dt3.getDirection()) 188 189 ### ExponentTransform ### 190 et = OCIO.ExponentTransform() 191 et.setValue([0.1, 0.2, 0.3, 0.4]) 192 evals = et.getValue() 193 self.assertAlmostEqual(0.3, evals[2], delta=1e-7) 194 195 ### FileTransform ### 196 ft = OCIO.FileTransform() 197 ft.setSrc("foo") 198 self.assertEqual("foo", ft.getSrc()) 199 ft.setCCCId("foobar") 200 self.assertEqual("foobar", ft.getCCCId()) 201 ft.setInterpolation(OCIO.Constants.INTERP_NEAREST) 202 self.assertEqual(OCIO.Constants.INTERP_NEAREST, ft.getInterpolation()) 203 self.assertEqual(17, ft.getNumFormats()) 204 self.assertEqual("flame", ft.getFormatNameByIndex(0)) 205 self.assertEqual("3dl", ft.getFormatExtensionByIndex(0)) 206 207 ### GroupTransform ### 208 gt = OCIO.GroupTransform() 209 gt.push_back(et) 210 gt.push_back(ft) 211 self.assertEqual(2, gt.size()) 212 self.assertEqual(False, gt.empty()) 213 foo = gt.getTransform(0) 214 self.assertEqual(OCIO.Constants.TRANSFORM_DIR_FORWARD, foo.getDirection()) 215 gt.clear() 216 self.assertEqual(0, gt.size()) 217 218 ### LogTransform ### 219 lt = OCIO.LogTransform() 220 lt.setBase(10.0) 221 self.assertEqual(10.0, lt.getBase()) 222 223 ### LookTransform ### 224 lkt = OCIO.LookTransform() 225 lkt.setSrc("foo") 226 self.assertEqual("foo", lkt.getSrc()) 227 lkt.setDst("bar") 228 self.assertEqual("bar", lkt.getDst()) 229 lkt.setLooks("bar;foo") 230 self.assertEqual("bar;foo", lkt.getLooks()) 231 232 ### MatrixTransform ### 233 mt = OCIO.MatrixTransform() 234 mmt = mt.createEditableCopy() 235 mt.setValue([0.1, 0.2, 0.3, 0.4, 236 0.5, 0.6, 0.7, 0.8, 237 0.9, 1.0, 1.1, 1.2, 238 1.3, 1.4, 1.5, 1.6], 239 [0.1, 0.2, 0.3, 0.4]) 240 self.assertEqual(False, mt.equals(mmt)) 241 m44_1, offset_1 = mt.getValue() 242 self.assertAlmostEqual(0.3, m44_1[2], delta=1e-7) 243 self.assertAlmostEqual(0.2, offset_1[1], delta=1e-7) 244 mt.setMatrix([1.1, 1.2, 1.3, 1.4, 245 1.5, 1.6, 1.7, 1.8, 246 1.9, 2.0, 2.1, 2.2, 247 2.3, 2.4, 2.5, 2.6]) 248 m44_2 = mt.getMatrix() 249 self.assertAlmostEqual(1.3, m44_2[2], delta=1e-7) 250 mt.setOffset([1.1, 1.2, 1.3, 1.4]) 251 offset_2 = mt.getOffset() 252 self.assertAlmostEqual(1.4, offset_2[3]) 253 mt.Fit([0.1, 0.1, 0.1, 0.1], 254 [0.9, 0.9, 0.9, 0.9], 255 [0.0, 0.0, 0.0, 0.0], 256 [1.1, 1.1, 1.1, 1.1]) 257 m44_3 = mt.getMatrix() 258 self.assertAlmostEqual(1.3, m44_3[2], delta=1e-7) 259 m44_3, offset_2 = mt.Identity() 260 self.assertAlmostEqual(0.0, m44_3[1], delta=1e-7) 261 m44_2, offset_2 = mt.Sat(0.5, [0.2126, 0.7152, 0.0722]) 262 self.assertAlmostEqual(0.3576, m44_2[1], delta=1e-7) 263 m44_2, offset_2 = mt.Scale([0.9, 0.8, 0.7, 1.]) 264 self.assertAlmostEqual(0.9, m44_2[0], delta=1e-7) 265 m44_2, offset_2 = mt.View([1, 1, 1, 0], [0.2126, 0.7152, 0.0722]) 266 self.assertAlmostEqual(0.0722, m44_2[2], delta=1e-7) 267 268 mt4 = OCIO.MatrixTransform([0.1, 0.2, 0.3, 0.4, 269 0.5, 0.6, 0.7, 0.8, 270 0.9, 1.0, 1.1, 1.2, 271 1.3, 1.4, 1.5, 1.6], 272 [0.1, 0.2, 0.3, 0.4], 273 OCIO.Constants.TRANSFORM_DIR_INVERSE) 274 m44_4, offset_4 = mt4.getValue() 275 for i in range(0, 16): 276 self.assertAlmostEqual(float(i+1)/10.0, m44_4[i], delta=1e-7) 277 for i in range(0, 4): 278 self.assertAlmostEqual(float(i+1)/10.0, offset_4[i], delta=1e-7) 279 self.assertEqual(mt4.getDirection(), OCIO.Constants.TRANSFORM_DIR_INVERSE) 280 281 mt5 = OCIO.MatrixTransform(matrix=[0.1, 0.2, 0.3, 0.4, 282 0.5, 0.6, 0.7, 0.8, 283 0.9, 1.0, 1.1, 1.2, 284 1.3, 1.4, 1.5, 1.6], 285 offset=[0.1, 0.2, 0.3, 0.4], 286 direction=OCIO.Constants.TRANSFORM_DIR_INVERSE) 287 m44_5, offset_5 = mt5.getValue() 288 for i in range(0, 16): 289 self.assertAlmostEqual(float(i+1)/10.0, m44_5[i], delta=1e-7) 290 for i in range(0, 4): 291 self.assertAlmostEqual(float(i+1)/10.0, offset_5[i], delta=1e-7) 292 self.assertEqual(mt5.getDirection(), OCIO.Constants.TRANSFORM_DIR_INVERSE) 293 294 ### TruelightTransform ### 295 """ 296 tt = OCIO.TruelightTransform() 297 tt.setConfigRoot("/some/path") 298 self.assertEqual("/some/path", tt.getConfigRoot()) 299 tt.setProfile("profileA") 300 self.assertEqual("profileA", tt.getProfile()) 301 tt.setCamera("incam") 302 self.assertEqual("incam", tt.getCamera()) 303 tt.setInputDisplay("dellmon") 304 self.assertEqual("dellmon", tt.getInputDisplay()) 305 tt.setRecorder("blah") 306 self.assertEqual("blah", tt.getRecorder()) 307 tt.setPrint("kodasomething") 308 self.assertEqual("kodasomething", tt.getPrint()) 309 tt.setLamp("foobar") 310 self.assertEqual("foobar", tt.getLamp()) 311 tt.setOutputCamera("somecam") 312 self.assertEqual("somecam", tt.getOutputCamera()) 313 tt.setDisplay("sRGB") 314 self.assertEqual("sRGB", tt.getDisplay()) 315 tt.setCubeInput("log") 316 self.assertEqual("log", tt.getCubeInput()) 317 """ 318