Exemplo n.º 1
0
 def preflight(self):
   super(_VectorElement, self).preflight()
   
   codeBlock = self.primaryCodeBlock
   if codeBlock:
     loopingDimensionNames = set([dim.name for dim in self.field.dimensions])
     for dependency in codeBlock.dependencies:
       loopingDimensionNames.update([dim.name for dim in dependency.field.dimensions])
   
     codeBlock.field = FieldElement.sortedFieldWithDimensionNames(loopingDimensionNames)
   
     if codeBlock.dependenciesEntity and codeBlock.dependenciesEntity.xmlElement.hasAttribute('basis'):
       dependenciesXMLElement = codeBlock.dependenciesEntity.xmlElement
       codeBlock.basis = \
         codeBlock.field.basisFromString(
           dependenciesXMLElement.getAttribute('basis'),
           xmlElement = dependenciesXMLElement
         )
     
     # Because we have modified the codeBlock's field, we may also need to modify its basis.
     # We will take any missing elements from the new field's defaultCoordinateBasis
     codeBlock.basis = codeBlock.field.completedBasisForBasis(codeBlock.basis, codeBlock.field.defaultCoordinateBasis)
     
     self.initialBasis = self.field.basisForBasis(codeBlock.basis)
     self.basesNeeded.add(self.initialBasis)
   
     # Our components are constructed by an integral if the looping field doesn't have the same
     # dimensions as the field to which the computed vector belongs.
     if not codeBlock.field.isEquivalentToField(self.field):
       self.integratingComponents = True
Exemplo n.º 2
0
 def bindNamedVectors(self):
   super(_FilterOperator, self).bindNamedVectors()
   
   dimensionNames = set()
   for dependency in self.dependencies:
     dimensionNames.update([dim.name for dim in dependency.field.dimensions])
   
   codeBlock = self.primaryCodeBlock
   codeBlock.field = FieldElement.sortedFieldWithDimensionNames(dimensionNames)
   
   if codeBlock.dependenciesEntity and codeBlock.dependenciesEntity.xmlElement.hasAttribute('basis'):
     codeBlock.basis = \
       codeBlock.field.basisFromString(
         codeBlock.dependenciesEntity.xmlElement.getAttribute('basis'),
         xmlElement = codeBlock.dependenciesEntity.xmlElement
       )
   if not codeBlock.basis:
     codeBlock.basis = codeBlock.field.defaultCoordinateBasis