dRELTools API

Types

DrelTools.DynamicDDLmRCType
DynamicDDLmRC(ds, dict::AbstractCifDictionary)

Create a DynamicDDLmRC object from ds with relational structure defined by dict. If dict includes dREL methods describing mathematical relationships between data names, use these to derive and cache missing values.

ds should provide the DataSource trait.

A DynamicDDLmRC is itself a DataSource.

Methods

DrelTools.define_dict_funcs!Method
define_dict_funcs!(dict)

Find and transform to Julia all dREL functions defined in dict. This must be called in order for these functions to be available to dREL methods defined in dict.

Base.keysMethod
keys(d::DynamicDDLmRC)

Return all data names that have associated values in d. If multiple namespaces are present, some data names may be duplicated. If calculations have been performed to derive data name values, those data names will be included.

Base.haskeyMethod
haskey(d::DynamicDDLmRC,s)

true if any instance found of s in d.

Base.haskeyMethod
haskey(d::DynamicDDLmRC,s,n)

true if any instance found of s from namespace n in d.

Base.getindexMethod
getindex(d::DynamicDDLmRC,s)

d[s] returns all values for that data name in the same order as the key values, so that they may be interpreted as a column of values in correct order, deriving missing values from dREL methods if available.

If s appears in multiple namespaces within d, an error is raised.

Base.getindexMethod
getindex(d::DynamicDDLmRC,s,nspace)

d[s,nspace] returns the values of dataname s from namespace nspace in d, with derivation of missing values. Values are returned in an order corresponding to the order in which key data name values are provided, meaning that the returned values can be assembled into a table without further manipulation.

Base.setindex!Method
setindex!(d::DynamicDDLmRC,v,s)

Set the value of s in d to v. The underlying data source is not changed, instead values are set in the cache and will be deleted by empty_cache!.

Base.setindex!Method
setindex!(d::DynamicDDLmRC,v,s,nspace)

Set the value of s from namespace nspace in d to v. The underlying data source is not changed, instead values are set in the cache and will be deleted by empty_cache!.

CrystalInfoFramework.DataContainer.get_categoryMethod
get_category(d::DynamicDDLmRC,s::AbstractString,nspace::String)

Return a CifCategory named s in namespace nspace from d, creating the category using dREL category methods if missing. If s is already present, no further data names from that category are derived.

CrystalInfoFramework.DataContainer.get_categoryMethod
get_category(d::DynamicDDLmRC,s)

Return a CifCategory named s from d, creating the category using dREL category methods if missing. If s is already present, no further data names from that category are derived. If s is ambiguous because it is present in multiple namespaces, an error is raised.

DrelTools.deriveMethod
derive(b::DynamicRelationalContainer,dataname,nspace)

Derive values for dataname in nspace missing from b. Return missing if the category itself is missing, otherwise return an Array potentially containing missing values with one value for each row in the category.

For developers

DrelTools.make_julia_codeMethod
make_julia_code(drel_text,dataname,dict; reserved=[])

Define a Julia method from dREL code contained in drel_text which calculates the value of dataname defined in dict. All category names in dict and any additional names in reserved are recognised as categories.

DrelTools.add_definition_func!Method
add_definition_func!(dictionary,dataname)

Add a method that adjusts the definition of dataname by defining a DDLm attribute.

Drel runtime functions

The following methods are defined to be used within Julia code generated from dREL in order to support dREl semantics and recursive calculation.

DrelTools.drelvectorType

A drelvector is a vector which adopts the correct dimension (column or row) to allow pre or post multiplication without explicit transposition.

DrelTools.DrelTableType

A DrelTable is almost like a Julia Dict, but it must allow CaselessString comparisons with String, and the types of the keys are restricted.

DrelTools.drel_property_accessMethod
drel_property_access(cp,obj,datablock)

This call corresponds to cp.obj in dREL code. If obj is not a property of cp, datablock is used to try to derive a value, returning missing for all failures and caching the result in datablock if successful.