Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 7240b46b45d7
Choose a base ref
...
head repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 27cc362c46ce
Choose a head ref
  • 4 commits
  • 4 files changed
  • 1 contributor

Commits on Oct 7, 2020

  1. Copy the full SHA
    f796174 View commit details

Commits on Oct 8, 2020

  1. Copy the full SHA
    0811476 View commit details
  2. Lint.

    pleroy committed Oct 8, 2020
    Copy the full SHA
    2d819bf View commit details

Commits on Oct 9, 2020

  1. Merge pull request #2758 from pleroy/Serialization2

    Serialization of PiecewisePoissonSeries
    pleroy authored Oct 9, 2020
    Copy the full SHA
    27cc362 View commit details
Showing with 65 additions and 0 deletions.
  1. +5 −0 numerics/poisson_series.hpp
  2. +33 −0 numerics/poisson_series_body.hpp
  3. +22 −0 numerics/poisson_series_test.cpp
  4. +5 −0 serialization/numerics.proto
5 changes: 5 additions & 0 deletions numerics/poisson_series.hpp
Original file line number Diff line number Diff line change
@@ -335,6 +335,11 @@ class PiecewisePoissonSeries {
template<typename V, int d, template<typename, typename, int> class E>
PiecewisePoissonSeries& operator-=(PoissonSeries<V, d, E> const& right);

void WriteToMessage(
not_null<serialization::PiecewisePoissonSeries*> message) const;
static PiecewisePoissonSeries ReadFromMessage(
serialization::PiecewisePoissonSeries const& message);

private:
PiecewisePoissonSeries(std::vector<Instant> const& bounds,
std::vector<Series> const& series);
33 changes: 33 additions & 0 deletions numerics/poisson_series_body.hpp
Original file line number Diff line number Diff line change
@@ -753,6 +753,39 @@ PiecewisePoissonSeries<Value, degree_, Evaluator>::operator-=(
return *this;
}

template<typename Value, int degree_,
template<typename, typename, int> class Evaluator>
void PiecewisePoissonSeries<Value, degree_, Evaluator>::WriteToMessage(
not_null<serialization::PiecewisePoissonSeries*> message) const {
for (Instant const& bound : bounds_) {
bound.WriteToMessage(message->add_bounds());
}
for (Series const& series : series_) {
series.WriteToMessage(message->add_series());
}
}

template<typename Value, int degree_,
template<typename, typename, int> class Evaluator>
PiecewisePoissonSeries<Value, degree_, Evaluator>
PiecewisePoissonSeries<Value, degree_, Evaluator>::ReadFromMessage(
serialization::PiecewisePoissonSeries const& message) {
CHECK_NE(0, message.series_size());
CHECK_EQ(message.bounds_size(), message.series_size() + 1);
Interval<Instant> const first_interval{
Instant::ReadFromMessage(message.bounds(0)),
Instant::ReadFromMessage(message.bounds(1))};
PiecewisePoissonSeries series(first_interval,
Series::ReadFromMessage(message.series(0)));
for (int i = 1; i < message.series_size(); ++i) {
Interval<Instant> const interval{
Instant::ReadFromMessage(message.bounds(i)),
Instant::ReadFromMessage(message.bounds(i + 1))};
series.Append(interval, Series::ReadFromMessage(message.series(i)));
}
return series;
}

template<typename Value, int degree_,
template<typename, typename, int> class Evaluator>
PiecewisePoissonSeries<Value, degree_, Evaluator>::PiecewisePoissonSeries(
22 changes: 22 additions & 0 deletions numerics/poisson_series_test.cpp
Original file line number Diff line number Diff line change
@@ -508,5 +508,27 @@ TEST_F(PiecewisePoissonSeriesTest, InnerProductMultiorigin) {
EXPECT_THAT(d2, AlmostEquals((3 * π - 26) / (8 * π), 0));
}

TEST_F(PiecewisePoissonSeriesTest, Serialization) {
serialization::PiecewisePoissonSeries message;
pp_.WriteToMessage(&message);
EXPECT_EQ(3, message.bounds_size());
EXPECT_EQ(2, message.series_size());

auto const piecewise_poisson_series_read = Degree0::ReadFromMessage(message);
EXPECT_THAT(
pp_(t0_ + 0.5 * Second),
AlmostEquals(piecewise_poisson_series_read(t0_ + 0.5 * Second), 0));
EXPECT_THAT(
pp_(t0_ + 1 * Second),
AlmostEquals(piecewise_poisson_series_read(t0_ + 1 * Second), 0));
EXPECT_THAT(
pp_(t0_ + 1.5 * Second),
AlmostEquals(piecewise_poisson_series_read(t0_ + 1.5 * Second), 0));

serialization::PiecewisePoissonSeries message2;
piecewise_poisson_series_read.WriteToMessage(&message2);
EXPECT_THAT(message2, EqualsProto(message));
}

} // namespace numerics
} // namespace principia
5 changes: 5 additions & 0 deletions serialization/numerics.proto
Original file line number Diff line number Diff line change
@@ -42,6 +42,11 @@ message DoublePrecision {
required Error error = 2;
}

message PiecewisePoissonSeries {
repeated Point bounds = 1;
repeated PoissonSeries series = 2;
}

message PoissonSeries {
message PolynomialsAndAngularFrequency {
required Quantity angular_frequency = 1;