Ensure List of elements ordered by field in element - collections

Using Guava it is possible to ensure ascending ordering this way:
import com.google.common.collect.Ordering;
import io.predictor.dao.ohlcv.OhlcvHm;
import static java.util.stream.Collectors.toList;
assertThat("Ordered by age", Ordering.natural().isOrdered(
employees.stream().map(Employee::getAge).collect(toList())));
It is strange for me that Guava (for all its close relation to Java lambdas) does not provide easy solution for such cases.
Of course I can write some helping methods and wrap it but maybe someone has already done it in libraries. Is there an easiest method doing it? Something like:
XLibrary.isOrdered(employees, Employee::getAge);

assertThat("Ordered by age",
Ordering.from(Comparator.comparing(Employee::getAge)).isOrdered(list);
or
assertThat("Ordered by age",
Ordering.natural().onResultOf(Employee::getAge).isOrdered(list);

Related

how to get list of Auto-IVC component output names

I'm switching over to using the Auto-IVC component as opposed to the IndepVar component. I'd like to be able to get a list of the promoted output names of the Auto-IVC component, so I can then use them to go and pull the appropriate value out of a configuration file and set the values that way. This will get rid of some boilerplate.
p.model._auto_ivc.list_outputs()
returns an empty list. It seems that p.model__dict__ has this information encoded in it, but I don't know exactly what is going on there so I am wondering if there is an easier way to do it.
To avoid confusion from future readers, I assume you meant that you wanted the promoted input names for the variables connected to the auto_ivc outputs.
We don't have a built-in function to do this, but you could do it with a bit of code like this:
seen = set()
for n in p.model._inputs:
src = p.model.get_source(n)
if src.startswith('_auto_ivc.') and src not in seen:
print(src, p.model._var_allprocs_abs2prom['input'][n])
seen.add(src)
assuming 'p' is the name of your Problem instance.
The code above just prints each auto_ivc output name followed by the promoted input it's connected to.
Here's an example of the output when run on one of our simple test cases:
_auto_ivc.v0 par.x

How to control Ipyvuetify ProgressCircular

I want to use an ipyvuetify widget called ProgressCircular to show the loading process. Therefore, I was trying to figure out how to show and hide the widget in my code.
progress=v.ProgressCircular(width=3,
color='red',
indeterminate=True,
)
Although I was able to see all the attributes with dir(), I still couldn't find the right one to use. How do people figure out how to use classes or functions in a package that lacks samples.
dir(v.ProgressCircular)
You can use display(progress) within an ipywidgets Output widget.
import ipyvuetify as v
import ipywidgets as ipyw
import time
progress=v.ProgressCircular(width=3,
color='red',
indeterminate=True,
)
output = ipyw.Output()
display(output)
with output:
display(progress)
time.sleep(2)
output.clear_output()
I will assume that you are working in a Jupyter environment :
after declaring your widget place it on the last line of your cell or use display as suggested by #ac24:
progress = v.ProgressCircular(
width = 3,
color = 'red',
indeterminate = True
)
progress
# alternatively
# display(progress)
once it's done you can play with it using some very basic html attributes
progress.class_ = 'd-none' # disapear
progress.class_ = None # shown
As you were complaining about the documentation, see here for the usage of HTML attributes https://ipyvuetify.readthedocs.io/en/latest/usage.html#setting-attributes, more examples would be useless as the possible combinations of html attributes are virtually infinite. Lucky for us vuetify.js is providing a very complete one that can be used in combination with the ipyvuetify one :
https://vuetifyjs.com/en/styles/display/
No need to use Output or styles for this, just make a container widget and change its children:
import ipyvuetify as v
import time
progress=v.ProgressCircular(width=3,
color='red',
indeterminate=True,)
container = v.Html(tag='div', children=[progress])
display(container)
time.sleep(2)
container.children=[v.Chip(children=['Done'])]

Is there a way to expand groups with the XDSM diagram creation in OpenMDAO?

Most of my test files involve the creation of an IndepVarComp that gets connected to a group. When I go to create an XDSM from the test file, it only shows the IndepVarComp Box and the Group Box. Is there a way to get it to expand the group and show what's inside?
This would also be useful when dealing with a top level model that contains many levels of groups where I want to expand one or two levels and leave the rest closed.
There is a recurse option, which controls if groups are expanded or not. Here is a small example with the Sellar problem to explore this option. The disciplines d1 and d2 are part of a Group called cycle.
import numpy as np
import openmdao.api as om
from openmdao.test_suite.components.sellar import SellarNoDerivatives
from omxdsm import write_xdsm
prob = om.Problem()
prob.model = model = SellarNoDerivatives()
model.add_design_var('z', lower=np.array([-10.0, 0.0]),
upper=np.array([10.0, 10.0]), indices=np.arange(2, dtype=int))
model.add_design_var('x', lower=0.0, upper=10.0)
model.add_objective('obj')
model.add_constraint('con1', equals=np.zeros(1))
model.add_constraint('con2', upper=0.0)
prob.setup()
prob.final_setup()
# Write output. PDF will only be created, if pdflatex is installed
write_xdsm(prob, filename='sellar_pyxdsm', out_format='pdf', show_browser=True,
quiet=False, output_side='left', recurse=True)
The same code with recurse=False (d1 and d2 are not shown, instead their Group cycle):
To enable the recursion from the command line, use the --recurse flag:
openmdao xdsm sellar_pyxdsm.py -f pdf --recurse
With the function it is turned on by default, in the command line you have to include the flag. If this does not work as expected for you, please provide an example.
You can find a lot of examples with different options in the tests of the XDSM plugin. Some of the options, like recurse, include_indepvarcomps, include_solver and model_path control what is included in the XDSM.

Airflow - Change the default ui_color

There is a way to change the default ui_color for an airflow operator?
The only way I found is to write my own operator and inherit from the specific airflow operator, But it's too complicated for this simple change.
I dont know why, but the default colors are very similar, look at my own spark wrapper against the default python/kube/bash operators
Example image
thanks!
You can overwrite the value after importing the module, like below. You could then define you colorset once and apply import it to all your DAGs for instance:
from airflow.operators.oracle_operator import OracleOperator
OracleOperator.ui_color = '#0000FF'
### your DAG code below

${Qt5Core_LIBRARIES} returns Qt5::Core instead of a list to the actual libraries

It's convenient to just use target_link_libraries(MyExecutable Qt5::Core), but when I do message(STATUS "Qt5Core_LIBRARIES=${Qt5Core_LIBRARIES}") I would expect it to return something like /opt/Qt/<...>/libQt5Core.so;/opt/<...>.so;[etc] instead of Qt5::Core. That doesn't really help me at all. Any way to get the actual list of libraries?
Thanks in advance! (Long time lurker, first time asker.)
Qt5::Core is an IMPORTED target, which has target_properties like any other target. I'd assume the property INTERFACE_LINK_LIBRARIES would give you what you seek.

Resources