!pip install -I "phoebe>=2.1,<2.2"

"""
Explanation: Advanced: Settings
The Bundle also contains a few Parameters that provide settings for that Bundle.  Note that these are not system-wide and only apply to the current Bundle.  They are however maintained when saving and loading a Bundle.
Setup
Let's first make sure we have the latest version of PHOEBE 2.1 installed. (You can comment out this line if you don't use pip for your installation or don't want to update to the latest release).
End of explanation
"""


import phoebe
from phoebe import u # units

logger = phoebe.logger()

b = phoebe.default_binary()

"""
Explanation: As always, let's do imports and initialize a logger and a new Bundle.  See Building a System for more details.
End of explanation
"""


b.get_setting()

"""
Explanation: Accessing Settings
Settings are found with their own context in the Bundle and can be accessed through the get_setting method
End of explanation
"""


b['setting']

"""
Explanation: or via filtering/twig access
End of explanation
"""


b['log_history@setting'].description

"""
Explanation: and can be set as any other Parameter in the Bundle
Available Settings
Now let's look at each of the available settings and what they do
log_history
log_history is a BooleanParameter (defaults to False) that controls whether undo/redo ability is enabled.
End of explanation
"""


b['log_history@setting']

b.history_enabled

b.enable_history()

b['log_history@setting']

b.history_enabled

"""
Explanation: This parameter can also be set by calling b.enable_history() or b.disable_history() and can be accessed with b.history_enabled.
End of explanation
"""


b['dict_set_all@setting']

b['teff@component']

"""
Explanation: dict_set_all
dict_set_all is a BooleanParameter (defaults to False) that controls whether attempting to set a value to a ParameterSet via dictionary access will set all the values in that ParameterSet (if True) or raise an error (if False)
End of explanation
"""


b.set_value_all('teff@component', 4000)
print b['value@teff@primary@component'], b['value@teff@secondary@component']

"""
Explanation: In our default binary there are temperatures ('teff') parameters for each of the components ('primary' and 'secondary').  If we were to do:
b['teff@component'] = 6000
this would raise an error.  Under-the-hood, this is simply calling:
b.set_value('teff@component', 6000)
which of course would also raise an error.
In order to set both temperatures to 6000, you would either have to loop over the components or call the set_value_all method:
End of explanation
"""


b['dict_set_all@setting'] = True
b['teff@component'] = 8000
print b['value@teff@primary@component'], b['value@teff@secondary@component']

"""
Explanation: If you want dictionary access to use set_value_all instead of set_value, you can enable this parameter
End of explanation
"""


b['dict_set_all@setting'] = False

"""
Explanation: Now let's disable this so it doesn't confuse us while looking at the other options
End of explanation
"""


b['incl']

"""
Explanation: dict_filter
dict_filter is a Parameter that accepts a dictionary.  This dictionary will then always be sent to the filter call which is done under-the-hood during dictionary access.
End of explanation
"""


b['dict_filter@setting'] = {'context': 'component'}

b['incl']

"""
Explanation: In our default binary, there are several inclination parameters - one for each component ('primary', 'secondary', 'binary') and one with the constraint context (to keep the inclinations aligned).
This can be inconvenient... if you want to set the value of the binary's inclination, you must always provide extra information (like '@component').
Instead, we can always have the dictionary access search in the component context by doing the following
End of explanation
"""


b.filter(qualifier='incl')

"""
Explanation: Now we no longer see the constraint parameters.
All parameters are always accessible with method access:
End of explanation
"""


b.set_value('dict_filter@setting', {})

"""
Explanation: Now let's reset this option... keeping in mind that we no longer have access to the 'setting' context through twig access, we'll have to use methods to clear the dict_filter
End of explanation
"""


