Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
model = model if model is not None else Model
phase_records = dict()
callable_dict = kwargs.pop('callables', dict())
grad_callable_dict = kwargs.pop('grad_callables', dict())
hess_callable_dict = kwargs.pop('hess_callables', dict())
points_dict = dict()
maximum_internal_dof = 0
# Modify conditions values to be within numerical limits, e.g., X(AL)=0
# Also wrap single-valued conditions with lists
conds = _adjust_conditions(conditions)
str_conds = OrderedDict((str(key), value) for key, value in conds.items())
indep_vals = list([float(x) for x in np.atleast_1d(val)]
for key, val in str_conds.items() if key in indep_vars)
components = [x for x in sorted(comps) if not x.startswith('VA')]
# Construct models for each phase; prioritize user models
models = unpack_kwarg(model, default_arg=Model)
if verbose:
print('Components:', ' '.join(comps))
print('Phases:', end=' ')
for name in progressbar(active_phases, desc='Initialize (1/3)', unit='phase', disable=not pbar):
mod = models[name]
if isinstance(mod, type):
models[name] = mod = mod(dbf, comps, name)
variables = sorted(mod.energy.atoms(v.StateVariable).union({key for key in conditions.keys() if key in [v.T, v.P]}), key=str)
site_fracs = sorted(mod.energy.atoms(v.SiteFraction), key=str)
maximum_internal_dof = max(maximum_internal_dof, len(site_fracs))
# Extra factor '1e-100...' is to work around an annoying broadcasting bug for zero gradient entries
#models[name].models['_broadcaster'] = 1e-100 * Mul(*variables) ** 3
out = models[name].energy
undefs = list(out.atoms(Symbol) - out.atoms(v.StateVariable))
for undef in undefs:
out = out.xreplace({undef: float(0)})
Returns
-------
Dataset of the sampled attribute as a function of state variables
Examples
--------
None yet.
"""
# Here we check for any keyword arguments that are special, i.e.,
# there may be keyword arguments that aren't state variables
pdens_dict = unpack_kwarg(kwargs.pop('pdens', 2000), default_arg=2000)
points_dict = unpack_kwarg(kwargs.pop('points', None), default_arg=None)
callables = kwargs.pop('callables', {})
sampler_dict = unpack_kwarg(kwargs.pop('sampler', None), default_arg=None)
fixedgrid_dict = unpack_kwarg(kwargs.pop('grid_points', True), default_arg=True)
parameters = parameters or dict()
if isinstance(parameters, dict):
parameters = OrderedDict(sorted(parameters.items(), key=str))
if isinstance(phases, str):
phases = [phases]
if isinstance(comps, (str, v.Species)):
comps = [comps]
comps = sorted(unpack_components(dbf, comps))
if points_dict is None and broadcast is False:
raise ValueError('The \'points\' keyword argument must be specified if broadcast=False is also given.')
nonvacant_components = [x for x in sorted(comps) if x.number_of_atoms > 0]
all_phase_data = []
largest_energy = 1e10
# Consider only the active phases
Maps SymPy Symbol to numbers, for overriding the values of parameters in the Database.
Returns
-------
Dataset of the sampled attribute as a function of state variables
Examples
--------
None yet.
"""
# Here we check for any keyword arguments that are special, i.e.,
# there may be keyword arguments that aren't state variables
pdens_dict = unpack_kwarg(kwargs.pop('pdens', 2000), default_arg=2000)
points_dict = unpack_kwarg(kwargs.pop('points', None), default_arg=None)
callables = kwargs.pop('callables', {})
sampler_dict = unpack_kwarg(kwargs.pop('sampler', None), default_arg=None)
fixedgrid_dict = unpack_kwarg(kwargs.pop('grid_points', True), default_arg=True)
parameters = parameters or dict()
if isinstance(parameters, dict):
parameters = OrderedDict(sorted(parameters.items(), key=str))
if isinstance(phases, str):
phases = [phases]
if isinstance(comps, (str, v.Species)):
comps = [comps]
comps = sorted(unpack_components(dbf, comps))
if points_dict is None and broadcast is False:
raise ValueError('The \'points\' keyword argument must be specified if broadcast=False is also given.')
nonvacant_components = [x for x in sorted(comps) if x.number_of_atoms > 0]
all_phase_data = []
largest_energy = 1e10
def calculate_(dbf: Database, species: Sequence[v.Species], phases: Sequence[str],
str_statevar_dict: Dict[str, np.ndarray], models: Dict[str, Model],
phase_records: Dict[str, PhaseRecord], output: Optional[str] = 'GM',
points: Optional[Dict[str, np.ndarray]] = None,
pdens: Optional[int] = 2000, broadcast: Optional[bool] = True,
fake_points: Optional[bool] = False,
) -> LightDataset:
"""
Quickly sample phase internal degree of freedom with virtually no overhead.
"""
points_dict = unpack_kwarg(points, default_arg=None)
pdens_dict = unpack_kwarg(pdens, default_arg=2000)
nonvacant_components = [x for x in sorted(species) if x.number_of_atoms > 0]
maximum_internal_dof = max(prx.phase_dof for prx in phase_records.values())
all_phase_data = []
for phase_name in sorted(phases):
phase_obj = dbf.phases[phase_name]
mod = models[phase_name]
phase_record = phase_records[phase_name]
points = points_dict[phase_name]
variables, sublattice_dof = generate_dof(phase_obj, mod.components)
if points is None:
points = _sample_phase_constitution(phase_name, phase_obj.constituents, sublattice_dof, species,
tuple(variables), point_sample, True, pdens_dict[phase_name])
points = np.atleast_2d(points)
fp = fake_points and (phase_name == sorted(phases)[0])
phase_ds = _compute_phase_values(nonvacant_components, str_statevar_dict,
Model class to use for each phase.
Returns
-------
DataFrame of the output as a function of composition, temperature, etc.
Examples
--------
None yet.
"""
warnings.warn('Use pycalphad.calculate() instead', DeprecationWarning, stacklevel=2)
# Here we check for any keyword arguments that are special, i.e.,
# there may be keyword arguments that aren't state variables
pdens_dict = unpack_kwarg(kwargs.pop('pdens', 2000), default_arg=2000)
model_dict = unpack_kwarg(kwargs.pop('model', Model), default_arg=Model)
callable_dict = unpack_kwarg(kwargs.pop('callables', None), default_arg=None)
# Convert keyword strings to proper state variable objects
# If we don't do this, sympy will get confused during substitution
statevar_dict = \
collections.OrderedDict((v.StateVariable(key), value) \
for (key, value) in sorted(kwargs.items()))
# Generate all combinations of state variables for 'map' calculation
# Wrap single values of state variables in lists
# Use 'kwargs' because we want state variable names to be stringified
statevar_values = [_listify(val) for val in statevar_dict.values()]
statevars_to_map = np.array(list(itertools.product(*statevar_values)))
# Consider only the active phases
active_phases = dict((name.upper(), dbf.phases[name.upper()]) \
for name in phases)
Number of points to sample per degree of freedom.
model : Model, a dict of phase names to Model, or a list of both, optional
Model class to use for each phase.
Returns
-------
DataFrame of the output as a function of composition, temperature, etc.
Examples
--------
None yet.
"""
warnings.warn('Use pycalphad.calculate() instead', DeprecationWarning, stacklevel=2)
# Here we check for any keyword arguments that are special, i.e.,
# there may be keyword arguments that aren't state variables
pdens_dict = unpack_kwarg(kwargs.pop('pdens', 2000), default_arg=2000)
model_dict = unpack_kwarg(kwargs.pop('model', Model), default_arg=Model)
callable_dict = unpack_kwarg(kwargs.pop('callables', None), default_arg=None)
# Convert keyword strings to proper state variable objects
# If we don't do this, sympy will get confused during substitution
statevar_dict = \
collections.OrderedDict((v.StateVariable(key), value) \
for (key, value) in sorted(kwargs.items()))
# Generate all combinations of state variables for 'map' calculation
# Wrap single values of state variables in lists
# Use 'kwargs' because we want state variable names to be stringified
statevar_values = [_listify(val) for val in statevar_dict.values()]
statevars_to_map = np.array(list(itertools.product(*statevar_values)))
# Consider only the active phases
def calculate_(dbf: Database, species: Sequence[v.Species], phases: Sequence[str],
str_statevar_dict: Dict[str, np.ndarray], models: Dict[str, Model],
phase_records: Dict[str, PhaseRecord], output: Optional[str] = 'GM',
points: Optional[Dict[str, np.ndarray]] = None,
pdens: Optional[int] = 2000, broadcast: Optional[bool] = True,
fake_points: Optional[bool] = False,
) -> LightDataset:
"""
Quickly sample phase internal degree of freedom with virtually no overhead.
"""
points_dict = unpack_kwarg(points, default_arg=None)
pdens_dict = unpack_kwarg(pdens, default_arg=2000)
nonvacant_components = [x for x in sorted(species) if x.number_of_atoms > 0]
maximum_internal_dof = max(prx.phase_dof for prx in phase_records.values())
all_phase_data = []
for phase_name in sorted(phases):
phase_obj = dbf.phases[phase_name]
mod = models[phase_name]
phase_record = phase_records[phase_name]
points = points_dict[phase_name]
variables, sublattice_dof = generate_dof(phase_obj, mod.components)
if points is None:
points = _sample_phase_constitution(phase_name, phase_obj.constituents, sublattice_dof, species,
tuple(variables), point_sample, True, pdens_dict[phase_name])
points = np.atleast_2d(points)
fp = fake_points and (phase_name == sorted(phases)[0])
model : Model, a dict of phase names to Model, or a list of both, optional
Model class to use for each phase.
Returns
-------
DataFrame of the output as a function of composition, temperature, etc.
Examples
--------
None yet.
"""
warnings.warn('Use pycalphad.calculate() instead', DeprecationWarning, stacklevel=2)
# Here we check for any keyword arguments that are special, i.e.,
# there may be keyword arguments that aren't state variables
pdens_dict = unpack_kwarg(kwargs.pop('pdens', 2000), default_arg=2000)
model_dict = unpack_kwarg(kwargs.pop('model', Model), default_arg=Model)
callable_dict = unpack_kwarg(kwargs.pop('callables', None), default_arg=None)
# Convert keyword strings to proper state variable objects
# If we don't do this, sympy will get confused during substitution
statevar_dict = \
collections.OrderedDict((v.StateVariable(key), value) \
for (key, value) in sorted(kwargs.items()))
# Generate all combinations of state variables for 'map' calculation
# Wrap single values of state variables in lists
# Use 'kwargs' because we want state variable names to be stringified
statevar_values = [_listify(val) for val in statevar_dict.values()]
statevars_to_map = np.array(list(itertools.product(*statevar_values)))
# Consider only the active phases
active_phases = dict((name.upper(), dbf.phases[name.upper()]) \
Whether to add evenly spaced points between end-members.
The density of points is determined by 'pdens'
parameters : dict, optional
Maps SymPy Symbol to numbers, for overriding the values of parameters in the Database.
Returns
-------
Dataset of the sampled attribute as a function of state variables
Examples
--------
None yet.
"""
# Here we check for any keyword arguments that are special, i.e.,
# there may be keyword arguments that aren't state variables
pdens_dict = unpack_kwarg(kwargs.pop('pdens', 2000), default_arg=2000)
points_dict = unpack_kwarg(kwargs.pop('points', None), default_arg=None)
callables = kwargs.pop('callables', {})
sampler_dict = unpack_kwarg(kwargs.pop('sampler', None), default_arg=None)
fixedgrid_dict = unpack_kwarg(kwargs.pop('grid_points', True), default_arg=True)
parameters = parameters or dict()
if isinstance(parameters, dict):
parameters = OrderedDict(sorted(parameters.items(), key=str))
if isinstance(phases, str):
phases = [phases]
if isinstance(comps, (str, v.Species)):
comps = [comps]
comps = sorted(unpack_components(dbf, comps))
if points_dict is None and broadcast is False:
raise ValueError('The \'points\' keyword argument must be specified if broadcast=False is also given.')
nonvacant_components = [x for x in sorted(comps) if x.number_of_atoms > 0]