Git Product home page Git Product logo

Comments (3)

yut23 avatar yut23 commented on June 17, 2024 1

I did some searching and found one more callback with a similar issue: calling annotate_arrow() then another function that runs the callback changes the arrow size.

def __call__(self, plot):
x, y = self._sanitize_coord_system(
plot, self.pos, coord_system=self.coord_system
)
xx0, xx1, yy0, yy1 = self._plot_bounds(plot)
# normalize all of the kwarg lengths to the plot size
plot_diag = ((yy1 - yy0) ** 2 + (xx1 - xx0) ** 2) ** (0.5)
self.length *= plot_diag
self.width *= plot_diag
self.head_width *= plot_diag
if self.head_length is not None:

from yt.

chrishavlin avatar chrishavlin commented on June 17, 2024

Looks like this is because the callback overwrites the radius attribute with a scaled version, which changes the units from length to either dimensionless value or 1/length. So when it runs back through the callback (cause calling set_font_size invalidates the plot), the radius attribute will be the already-scaled value with units that can't convert to dimensions of length.

https://github.com/yt-project/yt/blob/14c49c4fa832fb7f04485a16134d9adc2916508d/yt/visualization/plot_modifications.py#L2033C1-L2050C59

        if is_sequence(self.radius):
            self.radius = plot.data.ds.quan(self.radius[0], self.radius[1])
            self.radius = np.float64(self.radius.in_units(plot.xlim[0].units))
        if isinstance(self.radius, YTQuantity):
            if isinstance(self.center, YTArray):
                units = self.center.units
            else:
                units = "code_length"
            self.radius = self.radius.to(units)


        # This assures the radius has the appropriate size in
        # the different coordinate systems, since one cannot simply
        # apply a different transform for a length in the same way
        # you can for a coordinate.
        if self.coord_system == "data" or self.coord_system == "plot":
            self.radius = self.radius * self._pixel_scale(plot)[0]
        else:
            self.radius /= (plot.xlim[1] - plot.xlim[0]).v

simplest fix would be to not overwrite self.radius. but could also add a self._scaled_radius attribute to avoid re-calculating if it's already been through once? I'll keep playing around and push something up shortly.

from yt.

chrishavlin avatar chrishavlin commented on June 17, 2024

Thanks @yut23 ! I was curious if there'd be any others that failed when invalidated and run again, looks like the arrow callback fails for the same reason (storing calculations in class attributes). I'll add the fix to my current PR

from yt.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.