parameters: (builder, year_val)
return_statement: return builder.load(ret)
docstring: Given a year *year_val* (offset to 1970), return the number of days
      since the 1970 epoch.
docstring_summary: Given a year *year_val* (offset to 1970), return the number of days
      since the 1970 epoch.
docstring_tokens: Given a year * year_val * ( offset to 1970 ) return the number of days since the 1970 epoch .
function: def year_to_days(builder, year_val):
      """
      Given a year *year_val* (offset to 1970), return the number of days
      since the 1970 epoch.
      """
      # The algorithm below is copied from Numpy's get_datetimestruct_days()
      # (src/multiarray/datetime.c)
      ret = cgutils.alloca_once(builder, TIMEDELTA64)
      # First approximation
      days = scale_by_constant(builder, year_val, 365)
      # Adjust for leap years
      with builder.if_else(cgutils.is_neg_int(builder, year_val)) \
              as (if_neg, if_pos):
          with if_pos:
              # At or after 1970:
              # 1968 is the closest leap year before 1970.
              # Exclude the current year, so add 1.
              from_1968 = add_constant(builder, year_val, 1)
              # Add one day for each 4 years
              p_days = builder.add(days,
                                   unscale_by_constant(builder, from_1968, 4))
              # 1900 is the closest previous year divisible by 100
              from_1900 = add_constant(builder, from_1968, 68)
              # Subtract one day for each 100 years
              p_days = builder.sub(p_days,
                                   unscale_by_constant(builder, from_1900, 100))
              # 1600 is the closest previous year divisible by 400
              from_1600 = add_constant(builder, from_1900, 300)
              # Add one day for each 400 years
              p_days = builder.add(p_days,
                                   unscale_by_constant(builder, from_1600, 400))
              builder.store(p_days, ret)
          with if_neg:
              # Before 1970:
              # NOTE `year_val` is negative, and so will be `from_1972` and `from_2000`.
              # 1972 is the closest later year after 1970.
              # Include the current year, so subtract 2.
              from_1972 = add_constant(builder, year_val, -2)
              # Subtract one day for each 4 years (`from_1972` is negative)
              n_days = builder.add(days,
                                   unscale_by_constant(builder, from_1972, 4))
              # 2000 is the closest later year divisible by 100
              from_2000 = add_constant(builder, from_1972, -28)
              # Add one day for each 100 years
              n_days = builder.sub(n_days,
                                   unscale_by_constant(builder, from_2000, 100))
              # 2000 is also the closest later year divisible by 400
              # Subtract one day for each 400 years
              n_days = builder.add(n_days,
                                   unscale_by_constant(builder, from_2000, 400))
              builder.store(n_days, ret)
      return builder.load(ret)
function_tokens: def year_to_days ( builder , year_val ) : # The algorithm below is copied from Numpy's get_datetimestruct_days() # (src/multiarray/datetime.c) ret = cgutils . alloca_once ( builder , TIMEDELTA64 ) # First approximation days = scale_by_constant ( builder , year_val , 365 ) # Adjust for leap years with builder . if_else ( cgutils . is_neg_int ( builder , year_val ) ) as ( if_neg , if_pos ) : with if_pos : # At or after 1970: # 1968 is the closest leap year before 1970. # Exclude the current year, so add 1. from_1968 = add_constant ( builder , year_val , 1 ) # Add one day for each 4 years p_days = builder . add ( days , unscale_by_constant ( builder , from_1968 , 4 ) ) # 1900 is the closest previous year divisible by 100 from_1900 = add_constant ( builder , from_1968 , 68 ) # Subtract one day for each 100 years p_days = builder . sub ( p_days , unscale_by_constant ( builder , from_1900 , 100 ) ) # 1600 is the closest previous year divisible by 400 from_1600 = add_constant ( builder , from_1900 , 300 ) # Add one day for each 400 years p_days = builder . add ( p_days , unscale_by_constant ( builder , from_1600 , 400 ) ) builder . store ( p_days , ret ) with if_neg : # Before 1970: # NOTE `year_val` is negative, and so will be `from_1972` and `from_2000`. # 1972 is the closest later year after 1970. # Include the current year, so subtract 2. from_1972 = add_constant ( builder , year_val , - 2 ) # Subtract one day for each 4 years (`from_1972` is negative) n_days = builder . add ( days , unscale_by_constant ( builder , from_1972 , 4 ) ) # 2000 is the closest later year divisible by 100 from_2000 = add_constant ( builder , from_1972 , - 28 ) # Add one day for each 100 years n_days = builder . sub ( n_days , unscale_by_constant ( builder , from_2000 , 100 ) ) # 2000 is also the closest later year divisible by 400 # Subtract one day for each 400 years n_days = builder . add ( n_days , unscale_by_constant ( builder , from_2000 , 400 ) ) builder . store ( n_days , ret ) return builder . load ( ret )