Skip to content

Commit 0d231a8

Browse files
authored
Merge pull request #1373 from ivanimanishi/dataTypeConversionSupportForLists
Data type conversion support for lists
2 parents 5fb3e51 + 2b05875 commit 0d231a8

File tree

3 files changed

+95
-30
lines changed

3 files changed

+95
-30
lines changed

Changes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Fixes
55
-----
66

77
- FrameRange : Prevented creation of FrameRanges with negative steps
8+
- IECore.dataTypeFromElement : Fixed support for list to Vector conversions
89

910
10.4.10.0 (relative to 10.4.9.1)
1011
========

python/IECore/DataTraits.py

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -147,16 +147,16 @@ def isSequenceDataType(obj):
147147
IECore.M44fData: (imath.M44f, True),
148148
IECore.M44dData: (imath.M44d, True),
149149

150-
IECore.BoolVectorData: ( list, False, bool),
150+
IECore.BoolVectorData: ( list, True, bool),
151151
IECore.CharVectorData: (list, False, str),
152152
IECore.UCharVectorData: (list, False, int),
153-
IECore.IntVectorData: (list, False, int),
153+
IECore.IntVectorData: (list, True, int),
154154
IECore.UIntVectorData: (list, False, int),
155155
IECore.HalfVectorData: (list, False, float),
156156
IECore.FloatVectorData: (list, False, float),
157-
IECore.DoubleVectorData: (list, False, float),
158-
IECore.StringVectorData: (list, False, str),
159-
IECore.InternedStringVectorData: (list, False, IECore.InternedString),
157+
IECore.DoubleVectorData: (list, True, float),
158+
IECore.StringVectorData: (list, True, str),
159+
IECore.InternedStringVectorData: (list, True, IECore.InternedString),
160160
IECore.ShortVectorData: (list, False, int),
161161
IECore.UShortVectorData: (list, False, int),
162162
IECore.Int64VectorData: (list, False, int),
@@ -167,27 +167,27 @@ def isSequenceDataType(obj):
167167
IECore.V3fVectorDataBase: (list, False, imath.V3f),
168168
IECore.V3dVectorDataBase: (list, False, imath.V3d),
169169
IECore.V3iVectorDataBase: (list, False, imath.V3i),
170-
IECore.V2fVectorData: (list, False, imath.V2f),
171-
IECore.V2dVectorData: (list, False, imath.V2d),
172-
IECore.V2iVectorData: (list, False, imath.V2i),
173-
IECore.V3fVectorData: (list, False, imath.V3f),
174-
IECore.V3dVectorData: (list, False, imath.V3d),
175-
IECore.V3iVectorData: (list, False, imath.V3i),
176-
IECore.QuatfVectorData: (list, False, imath.Quatf),
177-
IECore.QuatdVectorData: (list, False, imath.Quatd),
178-
IECore.Box2iVectorData: (list, False, imath.Box2i),
179-
IECore.Box2fVectorData: (list, False, imath.Box2f),
180-
IECore.Box2dVectorData: (list, False, imath.Box2d),
181-
IECore.Box3iVectorData: (list, False, imath.Box3i),
182-
IECore.Box3fVectorData: (list, False, imath.Box3f),
183-
IECore.Box3dVectorData: (list, False, imath.Box3d),
184-
IECore.M33fVectorData: (list, False, imath.M33f),
185-
IECore.M33dVectorData: (list, False, imath.M33d),
186-
IECore.M44fVectorData: (list, False, imath.M44f),
187-
IECore.M44dVectorData: (list, False, imath.M44d),
188-
IECore.Color3fVectorData: (list, False, imath.Color3f),
170+
IECore.V2fVectorData: (list, True, imath.V2f),
171+
IECore.V2dVectorData: (list, True, imath.V2d),
172+
IECore.V2iVectorData: (list, True, imath.V2i),
173+
IECore.V3fVectorData: (list, True, imath.V3f),
174+
IECore.V3dVectorData: (list, True, imath.V3d),
175+
IECore.V3iVectorData: (list, True, imath.V3i),
176+
IECore.QuatfVectorData: (list, True, imath.Quatf),
177+
IECore.QuatdVectorData: (list, True, imath.Quatd),
178+
IECore.Box2iVectorData: (list, True, imath.Box2i),
179+
IECore.Box2fVectorData: (list, True, imath.Box2f),
180+
IECore.Box2dVectorData: (list, True, imath.Box2d),
181+
IECore.Box3iVectorData: (list, True, imath.Box3i),
182+
IECore.Box3fVectorData: (list, True, imath.Box3f),
183+
IECore.Box3dVectorData: (list, True, imath.Box3d),
184+
IECore.M33fVectorData: (list, True, imath.M33f),
185+
IECore.M33dVectorData: (list, True, imath.M33d),
186+
IECore.M44fVectorData: (list, True, imath.M44f),
187+
IECore.M44dVectorData: (list, True, imath.M44d),
188+
IECore.Color3fVectorData: (list, True, imath.Color3f),
189189
#IECore.Color3dVectorData: (list, False, IECore.Color3d),
190-
IECore.Color4fVectorData: (list, False, imath.Color4f),
190+
IECore.Color4fVectorData: (list, True, imath.Color4f),
191191
#IECore.Color4dVectorData: (list, False, IECore.Color4d),
192192

193193
IECore.CompoundData: (dict, True, None),
@@ -246,6 +246,9 @@ def valueTypeFromSequenceType(sequenceType):
246246
## \ingroup python
247247
def dataTypeFromElementType(elementType):
248248

249+
if elementType is list:
250+
raise TypeError( "`list` type is ambiguous and not a valid input to dataTypeFromElementType()" )
251+
249252
for (dataType, value) in __dataTypesConversionDict.items():
250253
if value is None:
251254
continue
@@ -263,7 +266,9 @@ def dataTypeFromElement(element):
263266
# We have to check the list contents.
264267
elementValueType = type(element[0])
265268
for (dataType, value) in __dataTypesConversionDict.items():
266-
if value[0] is list and len(value) >= 2 and value[2] is elementValueType:
269+
if value is None:
270+
continue
271+
if value[0] is list and len(value) >= 2 and value[1] and value[2] is elementValueType:
267272
return dataType
268273

269274
return dataTypeFromElementType(type(element))

test/IECore/DataTraitsTest.py

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@
3232
#
3333
##########################################################################
3434

35-
import math
3635
import unittest
3736
import IECore
38-
import random
39-
import os
37+
import datetime
38+
import imath
39+
4040

4141
class DataTraitsTest( unittest.TestCase ) :
4242

@@ -129,6 +129,65 @@ def testIsSequenceDataType( self ) :
129129
for data in falseData :
130130
self.assertFalse( IECore.DataTraits.isSequenceDataType( data ) )
131131

132+
def testDataFromElement( self ) :
133+
134+
dataMap = (
135+
( True, IECore.BoolData, IECore.BoolVectorData ),
136+
( 10, IECore.IntData, IECore.IntVectorData ),
137+
( "abc", IECore.StringData, IECore.StringVectorData ),
138+
( IECore.InternedString( "abc" ), IECore.InternedStringData, IECore.InternedStringVectorData ),
139+
( 1.1, IECore.DoubleData, IECore.DoubleVectorData ),
140+
( imath.V2f( 1.0, 2.0 ), IECore.V2fData, IECore.V2fVectorData ),
141+
( imath.V2d( 1.0, 2.0 ), IECore.V2dData, IECore.V2dVectorData ),
142+
( imath.V2i( 1, 2 ), IECore.V2iData, IECore.V2iVectorData ),
143+
( imath.V3i( 1, 2, 3 ), IECore.V3iData, IECore.V3iVectorData ),
144+
( imath.V3f( 1.0, 2.0, 3.0 ), IECore.V3fData, IECore.V3fVectorData ),
145+
( imath.V3d( 1.0, 2.0, 3.0 ), IECore.V3dData, IECore.V3dVectorData ),
146+
( imath.Quatf(), IECore.QuatfData, IECore.QuatfVectorData ),
147+
( imath.Quatd(), IECore.QuatdData, IECore.QuatdVectorData ),
148+
( imath.Color3f(), IECore.Color3fData, IECore.Color3fVectorData ),
149+
( imath.Color4f(), IECore.Color4fData, IECore.Color4fVectorData ),
150+
( imath.Box2i(), IECore.Box2iData, IECore.Box2iVectorData ),
151+
( imath.Box3i(), IECore.Box3iData, IECore.Box3iVectorData ),
152+
( imath.Box2f(), IECore.Box2fData, IECore.Box2fVectorData ),
153+
( imath.Box2d(), IECore.Box2dData, IECore.Box2dVectorData ),
154+
( imath.Box3f(), IECore.Box3fData, IECore.Box3fVectorData ),
155+
( imath.Box3d(), IECore.Box3dData, IECore.Box3dVectorData ),
156+
( imath.M33f(), IECore.M33fData, IECore.M33fVectorData ),
157+
( imath.M33d(), IECore.M33dData, IECore.M33dVectorData ),
158+
( imath.M44f(), IECore.M44fData, IECore.M44fVectorData ),
159+
( imath.M44d(), IECore.M44dData, IECore.M44dVectorData ),
160+
( { "age" : 10 }, IECore.CompoundData, None ),
161+
( IECore.TransformationMatrixf(), IECore.TransformationMatrixfData, None ),
162+
( IECore.TransformationMatrixd(), IECore.TransformationMatrixdData, None ),
163+
( IECore.LineSegment3f( imath.V3f( 0 ), imath.V3f( 1 ) ), IECore.LineSegment3fData, None ),
164+
( IECore.LineSegment3d( imath.V3d( 0 ), imath.V3d( 1 ) ), IECore.LineSegment3dData, None ),
165+
( IECore.Splineff(), IECore.SplineffData, None ),
166+
( IECore.Splinedd(), IECore.SplineddData, None ),
167+
( IECore.SplinefColor3f(), IECore.SplinefColor3fData, None ),
168+
( IECore.SplinefColor4f(), IECore.SplinefColor4fData, None ),
169+
( datetime.datetime( 2023, 7, 14 ), IECore.DateTimeData, None ),
170+
( IECore.TimeCode(), IECore.TimeCodeData, None ),
171+
( IECore.PathMatcher(), IECore.PathMatcherData, None ),
172+
)
173+
174+
for element, dataType, vectorType in dataMap :
175+
# test single element conversion
176+
self.assertEqual( IECore.dataFromElement( element ), dataType( element ) )
177+
if vectorType is None :
178+
continue
179+
180+
# test list of elements conversion to a vector data
181+
self.assertEqual(
182+
IECore.dataFromElement( [ element ] ),
183+
vectorType( [ element ] ),
184+
)
185+
186+
def testDataTypeFromElementType( self ) :
187+
self.assertEqual( IECore.dataTypeFromElementType( int ) , IECore.IntData )
188+
self.assertRaises( TypeError, IECore.dataTypeFromElementType, list )
189+
190+
132191
if __name__ == "__main__":
133-
unittest.main()
192+
unittest.main()
134193

0 commit comments

Comments
 (0)