--- tags: community, minutes --- # PlasmaPy Community Meeting | Tuesday 2022 February 1 at 19:00 UT ### Video Conference Information * [Zoom link](https://zoom.us/j/91633383503?pwd=QWNkdHpWeFhrYW1vQy91ODNTVG5Ndz09) * Instant messaging: [Matrix](https://app.element.io/#/room/#plasmapy:openastronomy.org) and [Gitter](https://gitter.im/PlasmaPy/Lobby) * [GitHub Minutes Repository](https://github.com/PlasmaPy/plasmapy-project/tree/master/minutes) * ["Community" Sub-directory](https://github.com/PlasmaPy/plasmapy-project/tree/master/minutes/_community) * [PlasmaPy on GitHub](https://github.com/PlasmaPy/plasmapy) ([pull requests](https://github.com/PlasmaPy/plasmapy/pulls), [issues](https://github.com/PlasmaPy/plasmapy/issues)) * [PlasmaPy Enhancement Proposals on GitHub](https://github.com/PlasmaPy/PlasmaPy-PLEPs) * [PlasmaPy Google Calendar](https://calendar.google.com/calendar/embed?src=c_sqqq390s24jjfjp3q86pv41pi8%40group.calendar.google.com&ctz=America%2FNew_York) ## Agenda (please feel free to edit or add items) 1. Introductions 2. 10-15 minutes for [roadmap](https://hackmd.io/@plasmapy/ry0mmnj6v) 3. solicit "Project Issues" 4. ... 5. Issues 1. [Issue 1409](https://github.com/PlasmaPy/PlasmaPy/issues/1409): enable pre-commit by default? 2. 9. Pull requests in progress 1. [PR 1364](https://github.com/PlasmaPy/PlasmaPy/pull/1364): Provide more flexibility in `CustomParticle` arguments 2. [PR 1380](https://github.com/PlasmaPy/PlasmaPy/pull/1380) Units notebook 3. [PR 1382](https://github.com/PlasmaPy/PlasmaPy/pull/1382): Particles notebook 4. [PR 1389](https://github.com/PlasmaPy/PlasmaPy/pull/1389): `test_validators` 2. **MERGED** Pull Requests 1. [PR 1287](https://github.com/PlasmaPy/PlasmaPy/pull/1287): CSS magic i.e. documentation font contrast styling 2. [PR 1399](https://github.com/PlasmaPy/PlasmaPy/pull/1399): Remove warnings from `CustomParticle` and `DimensionlessParticle` for NaN attributes ## Attendees * Erik * Nick ## Action Items ***Person*** * ... ***Nick*** * Start a discussion on GitHub about alternative `plasmapy.formulary` APIs ## Minutes * How do we make the formulary UI more friendly? * Looking to develop a scheme more easily pass arguments between formulary functionality. * Nick's idea: * Erik's idea: * Leverage Python's ability to decompose a dictionary into a function's keywords (i.e. `**kwargs`) * ```python class Plasma(collections.UserDict): # subclass ... def Alfven_speed( B: u.T, density: (u.m ** -3, u.kg / u.m ** 3), ion: Optional[Particle] = None, z_mean: Optional[numbers.Real] = None, **, ) -> u.m / u.s: ... plasma = Plasma(Te=..., Ti=..., n=...) Alfven_speed(**{**plasma, "B": 1*u.T}) Alfvent_speed(**plamsa.override(B=1*u.T)) plasma_lite = plasma.make_lite() thermal_speed_lite(**plasma_lite, coeff=np.sqrt(2)) Union[Quantity[u.m], Quantity[u.C]] Quantity[u.m , u.C] ``` Appended on June 1st, 2022 ```python= plasma = { "B": 0.1 * u.T, "density": 1e12 * u.cm ** -3, "ion": "p", "T_e": 5 * u.eV, } Alfven_speed(**{**plasma, "B": 0.2 * u.T}) class Plasma(collections.UserDict): # subclass ... def getter(self, modname): if hasattr(plasma.formulary, modname) formfunc = getattr(plasmapy.formulary, modname) return formfunc(**self) plasma = Plasma() plasma.Alfvne_speed() ``` Appended on Aug. 16th, 2022 ```python= class Plasma: _all_paramerers = {} # some kind of collection of all plasma parameters def __init__(self, *args, **kwargs): # definal all plasma parameters ... def parameters(self, func, **kwargs): # 1. inspect func to get arguments # 2. pull inpsected arguments from _all_parammeters # 3. Let **kwargs override collect _all_parameters # 4. call func(collected_params) # 5. return parameter ... def gyrofrquency(self, *args, **kwargs): """ See Also -------- Plasma.parameters """ self.parameters(pform.gyrofrequency, *args, **kwags) @property def arguments(self): return self._all_parameters ``` ```python= >>> from plasmapy.plasma import Plasma >>> from plasmapy import formulary as pform >>> plasma = Plasma(...) >>> wc = plasma.parameter(pform.gyrofrequency) >>> >>> pform.gyrofrequency(**plasma.arguments) ``` ```python= class Plasma: def __init__(self, *args, **kwargs): ... @property def gyroradius(self): return pform.gyroradius(self.B) ``` ```python= >>> from plasmapy.plasma import Plasma >>> plasma = Plasma(...) >>> plasma.lengths.gyroradius 0.1 m >>>