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
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